Index: src/__phutil_library_map__.php =================================================================== --- src/__phutil_library_map__.php +++ src/__phutil_library_map__.php @@ -264,6 +264,7 @@ 'PhutilRemarkupRuleItalic' => 'markup/engine/remarkup/markuprule/PhutilRemarkupRuleItalic.php', 'PhutilRemarkupRuleLinebreaks' => 'markup/engine/remarkup/markuprule/PhutilRemarkupRuleLinebreaks.php', 'PhutilRemarkupRuleMonospace' => 'markup/engine/remarkup/markuprule/PhutilRemarkupRuleMonospace.php', + 'PhutilRemarkupRuleUnderline' => 'markup/engine/remarkup/markuprule/PhutilRemarkupRuleUnderline.php', 'PhutilRope' => 'utils/PhutilRope.php', 'PhutilRopeTestCase' => 'utils/__tests__/PhutilRopeTestCase.php', 'PhutilSafeHTML' => 'markup/PhutilSafeHTML.php', @@ -621,6 +622,7 @@ 'PhutilRemarkupRuleItalic' => 'PhutilRemarkupRule', 'PhutilRemarkupRuleLinebreaks' => 'PhutilRemarkupRule', 'PhutilRemarkupRuleMonospace' => 'PhutilRemarkupRule', + 'PhutilRemarkupRuleUnderline' => 'PhutilRemarkupRule', 'PhutilRope' => 'Phobject', 'PhutilRopeTestCase' => 'PhutilTestCase', 'PhutilSafeHTMLTestCase' => 'PhutilTestCase', Index: src/markup/engine/__tests__/PhutilRemarkupEngineTestCase.php =================================================================== --- src/markup/engine/__tests__/PhutilRemarkupEngineTestCase.php +++ src/markup/engine/__tests__/PhutilRemarkupEngineTestCase.php @@ -85,6 +85,7 @@ $rules[] = new PhutilRemarkupRuleBold(); $rules[] = new PhutilRemarkupRuleItalic(); $rules[] = new PhutilRemarkupRuleDel(); + $rules[] = new PhutilRemarkupRuleUnderline(); $blocks = array(); $blocks[] = new PhutilRemarkupEngineRemarkupQuotesBlockRule(); Index: src/markup/engine/__tests__/remarkup/underline.txt =================================================================== --- /dev/null +++ src/markup/engine/__tests__/remarkup/underline.txt @@ -0,0 +1,11 @@ +omg__ wtf_____ bbq___ lol__ +__underlined text__ +__This is a great idea___ die forever please +__ +~~~~~~~~~~ +

omg__ wtf_____ bbq___ lol__ +underlined text +This is a great idea_ die forever please +__

+~~~~~~~~~~ +omg__ wtf_____ bbq___ lol__ __underlined text__ __This is a great idea___ die forever please __ Index: src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleUnderline.php =================================================================== --- /dev/null +++ src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleUnderline.php @@ -0,0 +1,25 @@ +getEngine()->isTextMode()) { + return $text; + } + + return $this->replaceHTML( + '@(?%s', $matches[1]); + } + +}