Index: src/markup/engine/__tests__/remarkup/interpreter-test.txt =================================================================== --- src/markup/engine/__tests__/remarkup/interpreter-test.txt +++ src/markup/engine/__tests__/remarkup/interpreter-test.txt @@ -1,7 +1,7 @@ phutil_test_block_interpreter (foo=bar) {{{ content }}} - + phutil_test_block_interpreter {{{ content content }}} @@ -9,37 +9,37 @@ phutil_fake_test_block_interpreter {{{ content }}} ~~~~~~~~~~ -Content: content -Argv: foo=bar +Content: (content) +Argv: (foo=bar) -Content: content -content -Argv: +Content: ( content +content ) +Argv: () -Content: content -Argv: +Content: ( content ) +Argv: () -
No interpreter found: phutil_fake_test_block_interpreter
+
No interpreter found: phutil_fake_test_block_interpreter
~~~~~~~~~~ -Content: content -Argv: foo=bar +Content: (content) +Argv: (foo=bar) -Content: content -content -Argv: +Content: ( content +content ) +Argv: () -Content: content -Argv: +Content: ( content ) +Argv: () Index: src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockInterpreter.php =================================================================== --- src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockInterpreter.php +++ src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockInterpreter.php @@ -6,6 +6,17 @@ */ abstract class PhutilRemarkupBlockInterpreter { + private $engine; + + final public function setEngine($engine) { + $this->engine = $engine; + return $this; + } + + final public function getEngine() { + return $this->engine; + } + /** * @return string */ @@ -13,4 +24,17 @@ abstract public function markupContent($content, array $argv); + protected function markupError($string) { + if ($this->getEngine()->isTextMode()) { + return '('.$string.')'; + } else { + return phutil_tag( + 'div', + array( + 'class' => 'remarkup-interpreter-error', + ), + $string); + } + } + } Index: src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInterpreterRule.php =================================================================== --- src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInterpreterRule.php +++ src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInterpreterRule.php @@ -49,6 +49,10 @@ ->setAncestorClass('PhutilRemarkupBlockInterpreter') ->loadObjects(); + foreach ($interpreters as $interpreter) { + $interpreter->setEngine($this->getEngine()); + } + $lines[$first_key] = preg_replace( self::START_BLOCK_PATTERN, "", @@ -73,13 +77,18 @@ return $interpreters[$matches[1]]->markupContent($content, $argv); } - $message = sprintf('No interpreter found: %s', $matches[1]); + $message = pht('No interpreter found: %s', $matches[1]); if ($this->getEngine()->isTextMode()) { return '('.$message.')'; } - return hsprintf('
%s
', $message); + return phutil_tag( + 'div', + array( + 'class' => 'remarkup-interpreter-error', + ), + $message); } } Index: src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTestInterpreterRule.php =================================================================== --- src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTestInterpreterRule.php +++ src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTestInterpreterRule.php @@ -12,7 +12,7 @@ public function markupContent($content, array $argv) { return sprintf( - "Content: %s\nArgv: %s", + "Content: (%s)\nArgv: (%s)", $content, http_build_query($argv)); }