diff --git a/src/markup/engine/remarkup/__tests__/PhutilRemarkupEngineTestCase.php b/src/markup/engine/remarkup/__tests__/PhutilRemarkupEngineTestCase.php index 8a24d89..bd962d4 100644 --- a/src/markup/engine/remarkup/__tests__/PhutilRemarkupEngineTestCase.php +++ b/src/markup/engine/remarkup/__tests__/PhutilRemarkupEngineTestCase.php @@ -1,87 +1,87 @@ <?php /* * Copyright 2012 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Test cases for @{class:PhutilRemarkupEngine}. * * @group testcase */ final class PhutilRemarkupEngineTestCase extends ArcanistPhutilTestCase { public function testEngine() { $root = dirname(__FILE__).'/data/'; foreach (Filesystem::listDirectory($root, $hidden = false) as $file) { $this->markupText($root.$file); } } private function markupText($markup_file) { $contents = Filesystem::readFile($markup_file); $file = basename($markup_file); $parts = explode("\n~~~~~~~~~~\n", $contents); $this->assertEqual(2, count($parts)); list($input_remarkup, $expected_output) = $parts; $engine = $this->buildNewTestEngine(); $actual_output = $engine->markupText($input_remarkup); $this->assertEqual( $expected_output, $actual_output, "Failed to markup file '{$file}'."); } private function buildNewTestEngine() { $engine = new PhutilRemarkupEngine(); $engine->setConfig( 'uri.allowed-protocols', array( 'http' => true, )); $rules = array(); $rules[] = new PhutilRemarkupRuleEscapeRemarkup(); + $rules[] = new PhutilRemarkupRuleMonospace(); $rules[] = new PhutilRemarkupRuleHyperlink(); $rules[] = new PhutilRemarkupRuleEscapeHTML(); - $rules[] = new PhutilRemarkupRuleMonospace(); $rules[] = new PhutilRemarkupRuleBold(); $rules[] = new PhutilRemarkupRuleItalic(); $blocks = array(); $blocks[] = new PhutilRemarkupEngineRemarkupHeaderBlockRule(); $blocks[] = new PhutilRemarkupEngineRemarkupListBlockRule(); $blocks[] = new PhutilRemarkupEngineRemarkupCodeBlockRule(); $blocks[] = new PhutilRemarkupEngineRemarkupNoteBlockRule(); $blocks[] = new PhutilRemarkupEngineRemarkupDefaultBlockRule(); foreach ($blocks as $block) { if (!($block instanceof PhutilRemarkupEngineRemarkupCodeBlockRule)) { $block->setMarkupRules($rules); } } $engine->setBlockRules($blocks); return $engine; } } diff --git a/src/markup/engine/remarkup/markuprule/monospace/PhutilRemarkupRuleMonospace.php b/src/markup/engine/remarkup/markuprule/monospace/PhutilRemarkupRuleMonospace.php index 261a3a2..344e395 100644 --- a/src/markup/engine/remarkup/markuprule/monospace/PhutilRemarkupRuleMonospace.php +++ b/src/markup/engine/remarkup/markuprule/monospace/PhutilRemarkupRuleMonospace.php @@ -1,40 +1,40 @@ <?php /* * Copyright 2012 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @group markup */ final class PhutilRemarkupRuleMonospace extends PhutilRemarkupRule { public function apply($text) { return preg_replace_callback( '@##([\s\S]+?)##|\B`(.+?)`\B@', array($this, 'markupMonospacedText'), $text); } private function markupMonospacedText($matches) { $match = isset($matches[2]) ? $matches[2] : $matches[1]; - $result = '<tt>'.$match.'</tt>'; + $result = '<tt>'.phutil_escape_html($match).'</tt>'; return $this->getEngine()->storeText($result); } } diff --git a/src/markup/engine/remarkup/markuprule/monospace/__init__.php b/src/markup/engine/remarkup/markuprule/monospace/__init__.php index 2411f43..25850b0 100644 --- a/src/markup/engine/remarkup/markuprule/monospace/__init__.php +++ b/src/markup/engine/remarkup/markuprule/monospace/__init__.php @@ -1,12 +1,13 @@ <?php /** * This file is automatically generated. Lint this module to rebuild it. * @generated */ +phutil_require_module('phutil', 'markup'); phutil_require_module('phutil', 'markup/engine/remarkup/markuprule/base'); phutil_require_source('PhutilRemarkupRuleMonospace.php');