📄 standard.php
字号:
*/ function getModifierWrapper($element) { $prefix = 'echo '; $suffix = ''; $modifier = strlen(trim($element->modifier)) ? $element->modifier : ' '; switch ($modifier{0}) { case 'h': break; case 'u': $prefix = 'echo urlencode('; $suffix = ')'; break; case 'r': $prefix = 'echo \'<pre>\'; echo htmlspecialchars(print_r('; $suffix = ',true)); echo \'</pre>\';'; break; case 'n': // blank or value.. $numberformat = @$GLOBALS['_HTML_TEMPLATE_FLEXY']['currentOptions']['numberFormat']; $prefix = 'echo number_format('; $suffix = $GLOBALS['_HTML_TEMPLATE_FLEXY']['currentOptions']['numberFormat'] . ')'; break; case 'b': // nl2br + htmlspecialchars $prefix = 'echo nl2br(htmlspecialchars('; // add language ? $suffix = '))'; break; case ' ': $prefix = 'echo htmlspecialchars('; // add language ? $suffix = ')'; break; default: $prefix = 'echo $this->plugin("'.trim($element->modifier) .'",'; $suffix = ')'; } return array($prefix,$suffix); } /** * HTML_Template_Flexy_Token_Var toString * * @param object HTML_Template_Flexy_Token_Method * * @return string string to build a template * @access public * @see toString* */ function toStringVar($element) { // ignore modifier at present!! $var = $element->toVar($element->value); if (is_a($var,'PEAR_Error')) { return $var; } list($prefix,$suffix) = $this->getModifierWrapper($element); return $this->appendPhp( $prefix . $var . $suffix .';'); } /** * HTML_Template_Flexy_Token_Method toString * * @param object HTML_Template_Flexy_Token_Method * * @return string string to build a template * @access public * @see toString* */ function toStringMethod($element) { // set up the modifier at present!! list($prefix,$suffix) = $this->getModifierWrapper($element); // add the '!' to if if ($element->isConditional) { $prefix = 'if ('.$element->isNegative; $element->pushState(); $suffix = ')'; } // check that method exists.. // if (method_exists($object,'method'); $bits = explode('.',$element->method); $method = array_pop($bits); $object = implode('.',$bits); $var = $element->toVar($object); if (is_a($var,'PEAR_Error')) { return $var; } if (($object == 'GLOBALS') && $GLOBALS['_HTML_TEMPLATE_FLEXY']['currentOptions']['globalfunctions']) { // we should check if they something weird like: GLOBALS.xxxx[sdf](....) $var = $method; } else { $prefix = 'if ($this->options[\'strict\'] || (isset('.$var. ') && method_exists('.$var .",'{$method}'))) " . $prefix; $var = $element->toVar($element->method); } if (is_a($var,'PEAR_Error')) { return $var; } $ret = $prefix; $ret .= $var . "("; $s =0; foreach($element->args as $a) { if ($s) { $ret .= ","; } $s =1; if ($a{0} == '#') { $ret .= '"'. addslashes(substr($a,1,-1)) . '"'; continue; } $var = $element->toVar($a); if (is_a($var,'PEAR_Error')) { return $var; } $ret .= $var; } $ret .= ")" . $suffix; if ($element->isConditional) { $ret .= ' { '; } else { $ret .= ";"; } return $this->appendPhp($ret); } /** * HTML_Template_Flexy_Token_Processing toString * * @param object HTML_Template_Flexy_Token_Processing * * @return string string to build a template * @access public * @see toString* */ function toStringProcessing($element) { // if it's XML then quote it.. if (strtoupper(substr($element->value,2,3)) == 'XML') { return $this->appendPhp("echo '" . str_replace("'","\\"."'", $element->value) . "';"); } // otherwise it's PHP code - so echo it.. return $element->value; } /** * HTML_Template_Flexy_Token_Text toString * * @param object HTML_Template_Flexy_Token_Text * * @return string string to build a template * @access public * @see toString* */ function toStringText($element) { // first get rid of stuff thats not translated etc. // empty strings => output. // comments -> just output // our special tags -> output.. if (!strlen(trim($element->value) )) { return $this->appendHtml($element->value); } // dont add comments to translation lists. if (substr($element->value,0,4) == '<!--') { return $this->appendHtml($element->value); } // ignore anything wrapped with {_( .... )_} if ($this->inGetTextBlock) { return $this->appendHtml($element->value); } // argTokens is built before the tag matching (it combined // flexy tags into %s, into the string, // and made a list of tokens in argTokens. if (!count($element->argTokens) && !$element->isWord()) { return $this->appendHtml($element->value); } // grab the white space at start and end (and keep it! $value = ltrim($element->value); $front = substr($element->value,0,-strlen($value)); $value = rtrim($element->value); $rear = substr($element->value,strlen($value)); $value = trim($element->value); // convert to escaped chars.. (limited..) //$value = strtr($value,$cleanArray); $this->addStringToGettext($value); $value = $this->translateString($value); // its a simple word! if (!count($element->argTokens)) { return $this->appendHtml($front . $value . $rear); } // there are subtokens.. // print_r($element->argTokens ); $args = array(); // these should only be text or vars.. foreach($element->argTokens as $i=>$token) { $args[] = $token->compile($this); } // we break up the translated string, and put the compiled tags // in between the values here. $bits = explode('%s',$value); $ret = $front; foreach($bits as $i=>$v) { $ret .= $v . @$args[$i]; } return $ret . $rear; } /** * addStringToGettext * * Adds a string to the gettext array. * * @param mixed preferably.. string to store * * @return none * @access public */ function addStringToGettext($string) { if (!is_string($string)) { return; } if (!preg_match('/[a-z]+/i', $string)) { return; } $string = trim($string); if (substr($string,0,4) == '<!--') { return; } $GLOBALS['_HTML_TEMPLATE_FLEXY_COMPILER']['gettextStrings'][] = $string; } /** * translateString - a gettextWrapper * * tries to do gettext or falls back on File_Gettext * This has !!!NO!!! error handling - if it fails you just get english.. * no questions asked!!! * * @param string string to translate * * @return string translated string.. * @access public */ function translateString($string) { if (is_a($this->options['Translation2'],'Translation2')) { $result = $this->options['Translation2']->get($string); if (!empty($result)) { return $result; } return $string; } // note this stuff may have been broken by removing the \n replacement code // since i dont have a test for it... it may remain broken.. // use Translation2 - it has gettext backend support // and should sort out the mess that \n etc. entail. $prefix = basename($GLOBALS['_HTML_TEMPLATE_FLEXY']['filename']).':'; if (@$this->options['debug']) { echo __CLASS__.":TRANSLATING $string<BR>"; } if (function_exists('gettext') && !$this->options['textdomain']) { if (@$this->options['debug']) { echo __CLASS__.":USING GETTEXT?<BR>"; } $t = gettext($string); if ($t != $string) { return $t; } $tt = gettext($prefix.$string); if ($tt != $prefix.$string) { return $tt; } // give up it's not translated anywhere... return $t; } if (!$this->options['textdomain'] || !$this->options['textdomainDir']) { // text domain is not set.. if (@$this->options['debug']) { echo __CLASS__.":MISSING textdomain settings<BR>"; } return $string; } $pofile = $this->options['textdomainDir'] . '/' . $this->options['locale'] . '/LC_MESSAGES/' . $this->options['textdomain'] . '.po'; // did we try to load it already.. if (@$GLOBALS['_'.__CLASS__]['PO'][$pofile] === false) { if (@$this->options['debug']) { echo __CLASS__.":LOAD failed (Cached):<BR>"; } return $string; } if (!@$GLOBALS['_'.__CLASS__]['PO'][$pofile]) { // default - cant load it.. $GLOBALS['_'.__CLASS__]['PO'][$pofile] = false; if (!file_exists($pofile)) { if (@$this->options['debug']) { echo __CLASS__.":LOAD failed: {$pofile}<BR>"; } return $string; } if (!@include_once 'File/Gettext.php') { if (@$this->options['debug']) { echo __CLASS__.":LOAD no File_gettext:<BR>"; } return $string; } $GLOBALS['_'.__CLASS__]['PO'][$pofile] = File_Gettext::factory('PO',$pofile); $GLOBALS['_'.__CLASS__]['PO'][$pofile]->load(); //echo '<PRE>'.htmlspecialchars(print_r($GLOBALS['_'.__CLASS__]['PO'][$pofile]->strings,true)); } $po = &$GLOBALS['_'.__CLASS__]['PO'][$pofile]; // we should have it loaded now... // this is odd - data is a bit messed up with CR's $string = str_replace('\n',"\n",$string); if (isset($po->strings[$prefix.$string])) { return $po->strings[$prefix.$string]; } if (!isset($po->strings[$string])) { if (@$this->options['debug']) { echo __CLASS__.":no match:<BR>"; } return $string; } if (@$this->options['debug']) { echo __CLASS__.":MATCHED: {$po->strings[$string]}<BR>"; } // finally we have a match!!! return $po->strings[$string]; } /** * HTML_Template_Flexy_Token_Tag toString * * @param object HTML_Template_Flexy_Token_Tag * * @return string string to build a template * @access public * @see toString* */ function toStringTag($element) { if (strpos($element->tag,':') === false) { $namespace = 'Tag'; } else { $bits = explode(':',$element->tag); $namespace = $bits[0]; } if ($namespace{0} == '/') { $namespace = substr($namespace,1); } if (empty($this->tagHandlers[$namespace])) { require_once 'HTML/Template/Flexy/Compiler/Standard/Tag.php'; $this->tagHandlers[$namespace] = &HTML_Template_Flexy_Compiler_Standard_Tag::factory($namespace,$this); if (!$this->tagHandlers[$namespace] ) { return HTML_Template_Flexy::raiseError('HTML_Template_Flexy::failed to create Namespace Handler '.$namespace . ' in file ' . $GLOBALS['_HTML_TEMPLATE_FLEXY']['filename'], HTML_TEMPLATE_FLEXY_ERROR_SYNTAX ,HTML_TEMPLATE_FLEXY_ERROR_RETURN); } } return $this->tagHandlers[$namespace]->toString($element); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -