From f1b79e6ddd004b36b4a46c6bc120f687cdf5bc59 Mon Sep 17 00:00:00 2001 From: touol Date: Thu, 14 Nov 2019 23:09:10 +0700 Subject: [PATCH 1/2] MODX_SOFT_MODE for MODX, when compiling a Fenom tag error, enables the output of this tag as is. To inverse JS / JSON. --- src/Fenom/Template.php | 44 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/src/Fenom/Template.php b/src/Fenom/Template.php index 0e060a4..12b7b19 100644 --- a/src/Fenom/Template.php +++ b/src/Fenom/Template.php @@ -123,7 +123,9 @@ class Template extends Render * @var int crc32 of the template name */ private $_crc = 0; - + + private $_log = ""; //for MODX log in MODX_SOFT_MODE + /** * @param Fenom $fenom Template storage * @param int $options @@ -137,7 +139,24 @@ class Template extends Render $this->_filters = $this->_fenom->getFilters(); $this->_tag_filters = $this->_fenom->getTagFilters(); } - + + /** + * Add log for MODX log in MODX_SOFT_MODE + * @param string $message + */ + private function log($message) + { + $this->_log .= $message."\r\n"; + } + + /** + * Get log for MODX log in MODX_SOFT_MODE + */ + public function getError() + { + return $this->_log; + } + /** * Get tag stack size * @return int @@ -271,9 +290,24 @@ class Template extends Render if ($tokens->isIncomplete()) { // all strings finished? $need_more = true; } else { - $this->_appendCode($this->parseTag($tokens), '{' . $tag . '}'); // start the tag lexer - if ($tokens->key()) { // if tokenizer have tokens - throws exceptions - throw new CompileException("Unexpected token '" . $tokens->current() . "' in {$this} line {$this->_line}, near '{" . $tokens->getSnippetAsString(0, 0) . "' <- there", 0, E_ERROR, $this->_name, $this->_line); + $soft_mode = $this->_options & Fenom::MODX_SOFT_MODE; + if($soft_mode){ + try{ + $code = $this->parseTag($tokens); + if ($tokens->key()) { // if tokenizer have tokens - throws exceptions + throw new CompileException("Unexpected token '" . $tokens->current() . "' in {$this} line {$this->_line}, near '{" . $tokens->getSnippetAsString(0, 0) . "' <- there", 0, E_ERROR, $this->_name, $this->_line); + } + $this->_appendCode($code, '{' . $tag . '}'); // start the tag lexer + }catch (\Exception $e){ + $this->_appendText('{' . $tag . '}'); + $this->log($e->getMessage()); + } + }else{ + $code = $this->parseTag($tokens); + $this->_appendCode($code, '{' . $tag . '}'); // start the tag lexer + if ($tokens->key()) { // if tokenizer have tokens - throws exceptions + throw new CompileException("Unexpected token '" . $tokens->current() . "' in {$this} line {$this->_line}, near '{" . $tokens->getSnippetAsString(0, 0) . "' <- there", 0, E_ERROR, $this->_name, $this->_line); + } } } } while ($need_more); From 7f6683e1308b48140289a6bfc10eebe4322732c9 Mon Sep 17 00:00:00 2001 From: touol Date: Thu, 14 Nov 2019 23:09:51 +0700 Subject: [PATCH 2/2] MODX_SOFT_MODE for MODX, when compiling a Fenom tag error, enables the output of this tag as is. To inverse JS / JSON. --- src/Fenom.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Fenom.php b/src/Fenom.php index 5be531b..c3ad60a 100644 --- a/src/Fenom.php +++ b/src/Fenom.php @@ -40,6 +40,7 @@ class Fenom const AUTO_TRIM = 0x1000; // reserved const DENY_PHP_CALLS = 0x2000; const AUTO_STRIP = 0x4000; + const MODX_SOFT_MODE = 0x8000; //This option for MODX, when compiling a Fenom tag error, enables the output of this tag as is. To inverse JS / JSON. /** * Use DENY_PHP_CALLS * @deprecated @@ -87,6 +88,7 @@ class Fenom "disable_php_calls" => self::DENY_PHP_CALLS, "disable_statics" => self::DENY_STATICS, "strip" => self::AUTO_STRIP, + "modx_soft_mode" => self::MODX_SOFT_MODE, ); /**