Index: trunk/core/kernel/parser/tags.php
===================================================================
diff -u -N
--- trunk/core/kernel/parser/tags.php (revision 8903)
+++ trunk/core/kernel/parser/tags.php (revision 0)
@@ -1,463 +0,0 @@
-_Tag)) {
- $this->_Tag =& new Tag($tag_data, $parser, $inp_tag);
- }
- else {
-// $this->_Tag->Parser =& $parser;
- $this->_Tag->TagData = $tag_data;
- if ($tag_data != '') $this->_Tag->ParseTagData($tag_data);
- $this->_Tag->NP =& $this->_Tag->NamedParams;
- }
- $this->_Tag->TemplateName = $parser->TemplateName;
- return $this->_Tag;
- }
-
-}
-
-class Tag extends kBase {
- var $Processor;
- var $Tag;
- var $Params = Array();
- var $NamedParams = Array();
- var $NP;
- var $TemplateName;
- /**
- * Enter description here...
- *
- * @var TemplateParser
- */
- var $Parser;
- var $TagData = '';
-
- function Tag($tag_data, &$parser, $inp_tag=0)
- {
- parent::kBase();
- $this->Parser =& $parser;
- $this->TagData = $tag_data;
- if ($tag_data != '') $this->ParseTagData($tag_data);
- $this->NP =& $this->NamedParams;
- }
-
- function CopyFrom(&$tag)
- {
- $this->Processor = $tag->Processor;
- $this->Tag = $tag->Tag;
- $this->TagData = $tag->TagData;
- $this->Params = $tag->Params;
- $this->NamedParams = $tag->NamedParams;
- $this->Parser =& $tag->Parser;
- $this->TemplateName = $tag->TemplateName;
- }
-
- function GetFullTag()
- {
- return '<%'.$this->TagData.'%>';
- }
-
- function RebuildTagData()
- {
- $res = $this->Processor.':'.$this->Tag.' ';
- foreach ($this->NamedParams as $name => $value) {
- $res .= "$name='$value' ";
- }
- return $res;
- }
-
- /**
- * Escape chars in phrase translation, that could harm parser to process tag
- *
- * @param string $text
- * @return string
- * @access private
- */
- function EscapeReservedChars($text)
- {
- $reserved = Array('"',"'"); // =
- $replacement = Array('\"',"\'"); // \=
- return str_replace($reserved,$replacement,$text);
- }
-
-
- function ReplaceParams($tag_data)
- {
- //print_pre($this->Parser->Pattern, $tag_data);
- $values = $this->Parser->Values;
- foreach($values as $param_name => $param_value)
- {
- $values[$param_name] = $this->EscapeReservedChars($param_value);
- }
-
- if (is_array($this->Parser->Params)) {
- $tag_data = preg_replace($this->Parser->Pattern, $values, $tag_data);
- }
- //echo "got: $tag_data
";
- return $tag_data;
- }
-
- function PreParseReplaceParams($tag_data)
- {
- //print_pre($this->Parser->Pattern, $tag_data);
- $values = $this->Parser->Values;
- foreach($values as $param_name => $param_value)
- {
- $values[$param_name] = $this->EscapeReservedChars($param_value);
- }
-
- /*$patterns = Array();
- if ( is_array($this->Parser->Args) ) {
- foreach ($this->Parser->Args as $arg) {
-
- }
- }*/
-
- if ($this->Parser->SkipMode == parse) {
- if (is_array($this->Parser->Params)) {
- $tag_data = preg_replace($this->Parser->Pattern, $values, $tag_data);
- }
- }
- //echo "got: $tag_data
";
- return $tag_data;
- }
-
- function CmpParams($a, $b)
- {
- $a_len = strlen($a);
- $b_len = strlen($b);
- if ($a_len == $b_len) return 0;
- return $a_len > $b_len ? -1 : 1;
- }
-
- /**
- * Set's Prefix and Special for Tag object
- * based on ones from tagname
- *
- * @param string $tag_data
- * @access protected
- */
- function ParseTagData($tag_data)
- {
- if (defined('EXPERIMENTAL_PRE_PARSE') ) {
- $this->OriginalTagData = $tag_data;
- $tag_data = $this->PreParseReplaceParams($tag_data) . ' ';
- }
- else {
- $tag_data = $this->ReplaceParams($tag_data) . ' ';
-// $tag_data = $this->Application->ReplaceLanguageTags($tag_data);
- }
-
- list ($key_data, $params) = split("[ \t\n]{1}", $tag_data, 2);
- $key_data = trim($key_data);
-
- $tmp=explode(':',$key_data);
- $this->Tag=$tmp[1];
-
- $tmp=$this->Application->processPrefix($tmp[0]);
- $this->Prefix=$tmp['prefix'];
- $this->Special=$tmp['special'];
- $this->Processor=$this->Prefix;
-
- if ($params != '') {
- $this->ParseNamedParams($params);
- }
- else {
- $this->NamedParams = array();
- }
- }
-
- function ParseNamedParams($params_str)
- {
- $params =& new Params($params_str);
- $this->NamedParams = $params->_Params;
- }
-
- function GetParam($param)
- {
- if (isset($this->NP[$param]))
- return $this->NP[$param];
- else
- return false;
- }
-
- /**
- * Process IF tags in specific way
- *
- */
- function Process()
- {
- $short_closing = false;
- if (isset($this->NP['_short_closing_'])) {
- unset($this->NP['_short_closing_']);
- $this->TagData = str_replace(' _short_closing_="1"', '', $this->TagData);
- $short_closing = true;
- }
- if ($this->Processor == 'm' || $this->Processor == 'm_TagProcessor') { //if we are procssing Main tags
- if ($this->Tag == 'block' || $this->Tag == 'DefineElement' || ($this->Tag == 'RenderElement' && $short_closing)) {
- $tag =& new BlockTag('', $this->Parser);
- $tag->CopyFrom($this);
- $tag->Process();
- }
- elseif($this->Tag == 'Capture') {
- $tag =& new CaptureTag('', $this->Parser);
- $tag->CopyFrom($this);
- $tag->Process();
- }
- elseif ($this->Parser->SkipMode == skip_tags) {
- return;
- }
- elseif (
- $this->Tag == 'if' ||
- $this->Tag == 'ifnot' ||
- $this->Tag == 'else' ||
- $this->Tag == 'elseif'
- )
- {
- if ( defined('EXPERIMENTAL_PRE_PARSE') ) {
- $this->Parser->AppendCompiledCode( $this->GetCode() );
- }
- $tag =& new ConstructTag('', $this->Parser);
- $tag->CopyFrom($this);
- $tag->Process();
- }
- else {
- if ($this->Parser->SkipMode == skip) {
- if ( defined('EXPERIMENTAL_PRE_PARSE') ) {
- $this->Parser->AppendCompiledCode( $this->GetCode() );
- }
- return;
- }
- $this->ProcessTag();
- if ( defined('EXPERIMENTAL_PRE_PARSE') ) {
- $this->Parser->AppendCompiledCode( $this->GetCode() );
- }
- }
- }
- else { //normal tags - processors other than main
- if ($this->Parser->SkipMode == skip) { // inside if - add statements inside if to compiled code
- if ( defined('EXPERIMENTAL_PRE_PARSE') ) {
- $this->Parser->AppendCompiledCode( $this->GetCode() );
- }
- return;
- }
- elseif ($this->Parser->SkipMode == skip_tags) return; //do not parse if we skipping tags
- $this->ProcessTag();
- if ( defined('EXPERIMENTAL_PRE_PARSE') ) {
- $this->Parser->AppendCompiledCode( $this->GetCode() );
- }
- }
- }
-
- /**
- * Set's Prefix and Special for TagProcessor
- * based on tag beeing processed
- *
- * @return string
- * @access protected
- */
- function DoProcessTag()
- {
- // $tag->Prefix - l_TagProcessor
- $tmp = $this->Application->processPrefix($this->Processor);
-
- if (isset($this->NamedParams['_ignore_missing_'])) {
- if (!$this->Application->prefixRegistred($tmp['prefix'])) return '';
- }
-
- $processor =& $this->Application->recallObject($tmp['prefix'].'_TagProcessor'); // $this->Processor
-
- $tmp=explode('_',$tmp['prefix'],2);
- $processor->Prefix=$tmp[0];
- $processor->Special=$this->Special;
-
- // pass_params for non ParseBlock tags :)
- $parser_params = $this->Application->Parser->Params;
- if( getArrayValue($this->NamedParams,'pass_params') )
- {
- unset( $this->NamedParams['pass_params'] );
- $this->NamedParams = array_merge_recursive2($parser_params, $this->NamedParams);
- }
-
- return $processor->ProcessTag($this);
- }
-
- function ProcessTag()
- {
- $o = $this->DoProcessTag();
- if ($o !== false)
- {
- $this->Parser->AppendOutput($o);
- }
- else
- {
- trigger_error('can\'t process tag '.$this->Tag.' in '.$this->Prefix,E_USER_WARNING);
- }
- }
-
- function GetCode($echo=false)
- {
- $tmp_params = $this->NamedParams;
- $splited = split("[ \t\n]{1}", $this->OriginalTagData, 2);
- if (isset($splited[1]) && $splited[1]) {
- $this->ParseNamedParams($splited[1]);
- }
- $pass_params = $this->NamedParams;
- $this->NamedParams = $tmp_params;
-
- $code = Array();
-
- $to_pass = 'Array(';
- foreach ($pass_params as $name => $val) {
- $to_pass .= '"'.$name.'" => "'.str_replace('"', '\"', $val).'",';
- }
- $to_pass .= ')';
-
- if ($echo) $code[] = '$o = '."'';\n";
-
- switch ( strtolower($this->Tag) ) {
- case 'defaultparam':
- foreach ($this->NP as $key => $val) {
- $code[] = 'if (!isset($'.$key.')) $application->Parser->SetParam(\''.$key.'\', \''.$val.'\');';
- $code[] = '$'.$key.' = isset($'.$key.') ? $'.$key.' : \''.$val.'\';';
- }
- return $code;
- case 'param':
- case 'Param':
- $code[] = 'if (isset($application->LateParsed["'.$this->NP['name'].'"])) {';
- $code[] = '$__f = $application->PreParsedBlocks[\'capture_'.$this->NP['name'].'\'];';
- $code[] = '$application->Parser->SetParam(\''.$this->NP['name'].'\', $__f(array())'.');';
- $code[] = '$'.$this->NP['name'].' = $application->Parser->GetParam(\''.$this->NP['name'].'\');';
- $code[] = '$params[\''.$this->NP['name'].'\'] = $'.$this->NP['name'].';';
- $code[] = '}';
- $code[] = '$p =& $application->recallObject(\'m_TagProcessor\');';
- $code[] = '$tag_params = '.$to_pass.';';
- $param_code = '$o .= $p->PostProcess($params["'.$this->NP['name'].'"], $p->PreparePostProcess($tag_params))';
- if (isset($this->NP['plus'])) {
- $param_code .= ' + '.$this->NP['plus'];
- }
- $code[] = $param_code.';';
- return $code;
- case 'if':
- if (isset($this->NP['_closing_tag_'])) {
- $code[] = ' }';
- }
- else {
- $check = isset($pass_params['check']) && $pass_params['check'] ? $pass_params['check'] : false; // $this->GetParam('check');
- if ($check) {
- if (strpos($check, '_') !== false) {
- list($prefix, $function) = explode('_', $check, 2);
- }
- else {
- $function = $check;
- $prefix = '$PrefixSpecial'; // $this->Parser->GetParam('PrefixSpecial');
- }
- }
- else {
- $prefix = $pass_params['prefix']; // $this->GetParam('prefix');
- $function = $pass_params['function']; // $this->GetParam('function');
- }
-
- $code[] = '$tmp = $application->processPrefix("'.$prefix.'");'."\n";
- $code[] = '$__tp = $tmp[\'prefix\'].\'_TagProcessor\';'."\n";
- $code[] = '$p =& $application->recallObject($__tp);'."\n";
- $code[] = '$p->Prefix = $tmp[\'prefix\'];'."\n";
- $code[] = '$p->Special = $tmp[\'special\'];'."\n";
- $code[] = '$if_result = $p->ProcessParsedTag(\''.$function.'\', '.$to_pass.', "'.$prefix.'");'."\n";
- if (isset($pass_params['inverse'])) {
- $code[] = 'if (!$if_result) {';
- }
- else {
- $code[] = 'if ($if_result) {';
- }
- }
- return $code;
-
- case 'endif':
- $code[] = ' }';
- return $code;
-
- case 'else':
- $code[] = ' }';
- $code[] = ' else {';
- return $code;
- }
-
- /* $tmp_pref = $this->getPrefixSpecial();
- $tmp = $this->Application->processPrefix($tmp_pref);
- $tmp_processor = $tmp['prefix'].'_TagProcessor';
- if (strpos($tmp['prefix'], '$') !== false) {
- $processor_to_check = '{'.$tmp['prefix'].'}_TagProcessor';
- }
- else {
- $processor_to_check = $tmp_processor;
- } */
-
- if (isset($this->NamedParams['_auto_prefix_'])) {
- $prefix = '$PrefixSpecial';
- }
- else {
- // use original prefix_special found in templates (parameter names in form $ParamName found in it will not be replaced with values)
- list ($prefix, $tag) = explode(':', $splited[0], 2); //$prefix = $this->getPrefixSpecial();
-
- if (isset($this->NamedParams['_ignore_missing_'])) {
- if (!$this->Application->prefixRegistred($prefix)) return array();
- }
- }
-
- $code[] = '$tmp = $application->processPrefix("'.$prefix.'");'."\n";
-
- /*if (!isset($this->Application->CompilationCache[$this->getPrefixSpecial()])) {
- $code[] = '$tmp = $application->processPrefix("'.$this->getPrefixSpecial().'");'."\n";
- $code[] = '$__tp = $tmp[\'prefix\'].\'_TagProcessor\';'."\n";
- $code[] = '$application->CachedProcessors["'.$this->getPrefixSpecial().'"] =& $application->recallObject($__tp);'."\n";
- $this->Application->CompilationCache[$this->getPrefixSpecial()] = true;
-
- if (strpos($tmp_pref, '$') === false) {
- $this->Application->CachedProcessors[$this->getPrefixSpecial()] =& $this->Application->recallObject($tmp_processor);
- }
- }
-
- $this->Parser->UsedProcessors[] = $tmp['prefix'];*/
- $code[] = '$__tp = $tmp[\'prefix\'].\'_TagProcessor\';'."\n";
- $code[] = '$p =& $application->recallObject($__tp);'."\n";
- $code[] = '$p->Prefix = $tmp[\'prefix\'];'."\n";
- $code[] = '$p->Special = $tmp[\'special\'];'."\n";
-
- $tag_func = $this->Tag;
- if ($tag_func == 'include') $tag_func = 'MyInclude';
-
-// $code[] = '$o .= $application->CachedProcessors["'.$this->getPrefixSpecial().'"]->ProcessParsedTag(\''.$tag_func.'\', '.$to_pass.', "'.$this->Processor.'");'."\n";
-
- $code[] = '$o .= $p->ProcessParsedTag(\''.$tag_func.'\', '.$to_pass.', "'.$prefix.'");'."\n"; // $this->Processor
-
- /*$code = ' $processor =& $application->recallObject(\''.$this->Processor.'_TagProcessor\');
- $o .= $processor->ProcessParsedTag(\''.$this->Tag.'\', unserialize(\''.serialize($this->NP).'\'));';*/
-
- if (isset($pass_params['result_to_var'])) {
- $code[] = '$'.$pass_params['result_to_var'].' = $application->Parser->GetParam(\''.$pass_params['result_to_var'].'\');';
- $code[] = '$params[\''.$pass_params['result_to_var'].'\'] = $'.$pass_params['result_to_var'].';';
- $echo = false;
- }
-
- if ($echo) $code[] = ' echo $o;'."\n";
-
- return $code;
- //return '$o .= \'tag:'. $this->Tag .'\'';
- }
-}
-
-?>
\ No newline at end of file