diff --git a/src/markup/engine/__tests__/remarkup/important.txt b/src/markup/engine/__tests__/remarkup/important.txt index b7d1a3f..e527ee9 100644 --- a/src/markup/engine/__tests__/remarkup/important.txt +++ b/src/markup/engine/__tests__/remarkup/important.txt @@ -1,15 +1,15 @@ IMPORTANT: interesting **stuff** (IMPORTANT) interesting **stuff** ~~~~~~~~~~ -
IMPORTANT: interesting stuff
+
IMPORTANT: interesting stuff
interesting stuff
~~~~~~~~~~ IMPORTANT: interesting **stuff** (IMPORTANT) interesting **stuff** diff --git a/src/markup/engine/__tests__/remarkup/note-multiline.txt b/src/markup/engine/__tests__/remarkup/note-multiline.txt index a99a8d2..389da29 100644 --- a/src/markup/engine/__tests__/remarkup/note-multiline.txt +++ b/src/markup/engine/__tests__/remarkup/note-multiline.txt @@ -1,14 +1,14 @@ NOTE: a a b ~~~~~~~~~~ -
NOTE: a +
NOTE: a a

b

~~~~~~~~~~ NOTE: a a b diff --git a/src/markup/engine/__tests__/remarkup/note.txt b/src/markup/engine/__tests__/remarkup/note.txt index bc48526..3054183 100644 --- a/src/markup/engine/__tests__/remarkup/note.txt +++ b/src/markup/engine/__tests__/remarkup/note.txt @@ -1,15 +1,15 @@ NOTE: interesting **stuff** (NOTE) interesting **stuff** ~~~~~~~~~~ -
NOTE: interesting stuff
+
NOTE: interesting stuff
interesting stuff
~~~~~~~~~~ NOTE: interesting **stuff** (NOTE) interesting **stuff** diff --git a/src/markup/engine/__tests__/remarkup/warning.txt b/src/markup/engine/__tests__/remarkup/warning.txt index e584cb4..6de7f0c 100644 --- a/src/markup/engine/__tests__/remarkup/warning.txt +++ b/src/markup/engine/__tests__/remarkup/warning.txt @@ -1,15 +1,15 @@ WARNING: interesting **stuff** (WARNING) interesting **stuff** ~~~~~~~~~~ -
WARNING: interesting stuff
+
WARNING: interesting stuff
interesting stuff
~~~~~~~~~~ WARNING: interesting **stuff** (WARNING) interesting **stuff** diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupNoteBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupNoteBlockRule.php index 23efc7d..c04a27d 100644 --- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupNoteBlockRule.php +++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupNoteBlockRule.php @@ -1,80 +1,96 @@ getRegEx(), $lines[$cursor])) { $num_lines++; $cursor++; while (isset($lines[$cursor])) { if (trim($lines[$cursor])) { $num_lines++; $cursor++; continue; } break; } } return $num_lines; } public function markupText($text) { $matches = array(); preg_match($this->getRegEx(), $text, $matches); - switch ($matches[0]) { - case 'NOTE: ': - $class_suffix = 'note'; - $truncate = 0; - break; - case '(NOTE) ': - $class_suffix = 'note'; - $truncate = 7; - break; - case 'IMPORTANT: ': - $class_suffix = 'important'; - $truncate = 0; - break; - case '(IMPORTANT) ': - $class_suffix = 'important'; - $truncate = 12; - break; - case 'WARNING: ': - $class_suffix = 'warning'; - $truncate = 0; - break; - case '(WARNING) ': - $class_suffix = 'warning'; - $truncate = 10; - break; + + if (idx($matches, 'showword')) { + $word = $matches['showword']; + $show = true; + } else { + $word = $matches['hideword']; + $show = false; } + + $class_suffix = phutil_utf8_strtolower($word); + + // This is the "(IMPORTANT)" or "NOTE:" part. + $word_part = rtrim(substr($text, 0, strlen($matches[0]))); + + // This is the actual text. + $text_part = substr($text, strlen($matches[0])); + $text_part = $this->applyRules(rtrim($text_part)); + $text_mode = $this->getEngine()->isTextMode(); - if ($truncate && !$text_mode) { - $text = substr($text, $truncate); + if ($text_mode) { + return $word_part.' '.$text_part; } - $text = $this->applyRules(rtrim($text)); - if ($text_mode) { - return $text; + if ($show) { + $content = array( + phutil_tag( + 'span', + array( + 'class' => 'remarkup-note-word', + ), + $word_part), + ' ', + $text_part); + } else { + $content = $text_part; } return phutil_tag( 'div', array( 'class' => 'remarkup-'.$class_suffix ), - $text); + $content); } private function getRegEx() { - return "/^(NOTE: |IMPORTANT: |WARNING: |". - "\(NOTE\) |\(WARNING\) |\(IMPORTANT\) )/"; + $words = array( + 'NOTE', + 'IMPORTANT', + 'WARNING', + ); + + foreach ($words as $k => $word) { + $words[$k] = preg_quote($word, '/'); + } + $words = implode('|', $words); + + return + '/^(?:'. + '(?:\((?P'.$words.')\))'. + '|'. + '(?:(?P'.$words.'):))\s*'. + '/'; } }