diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -256,34 +256,34 @@
     'PhutilReadableSerializerTestCase' => 'readableserializer/__tests__/PhutilReadableSerializerTestCase.php',
     'PhutilRealnameContextFreeGrammar' => 'grammar/PhutilRealnameContextFreeGrammar.php',
     'PhutilRemarkupBlockInterpreter' => 'markup/engine/remarkup/blockrule/PhutilRemarkupBlockInterpreter.php',
+    'PhutilRemarkupBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupBlockRule.php',
     'PhutilRemarkupBlockStorage' => 'markup/engine/remarkup/PhutilRemarkupBlockStorage.php',
+    'PhutilRemarkupBoldRule' => 'markup/engine/remarkup/markuprule/PhutilRemarkupBoldRule.php',
+    'PhutilRemarkupCodeBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupCodeBlockRule.php',
+    'PhutilRemarkupDefaultBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupDefaultBlockRule.php',
+    'PhutilRemarkupDelRule' => 'markup/engine/remarkup/markuprule/PhutilRemarkupDelRule.php',
+    'PhutilRemarkupDocumentLinkRule' => 'markup/engine/remarkup/markuprule/PhutilRemarkupDocumentLinkRule.php',
     'PhutilRemarkupEngine' => 'markup/engine/PhutilRemarkupEngine.php',
-    'PhutilRemarkupEngineBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineBlockRule.php',
-    'PhutilRemarkupEngineRemarkupCodeBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupCodeBlockRule.php',
-    'PhutilRemarkupEngineRemarkupDefaultBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupDefaultBlockRule.php',
-    'PhutilRemarkupEngineRemarkupHeaderBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupHeaderBlockRule.php',
-    'PhutilRemarkupEngineRemarkupHorizontalRuleBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupHorizontalRuleBlockRule.php',
-    'PhutilRemarkupEngineRemarkupInlineBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInlineBlockRule.php',
-    'PhutilRemarkupEngineRemarkupInterpreterRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInterpreterRule.php',
-    'PhutilRemarkupEngineRemarkupListBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupListBlockRule.php',
-    'PhutilRemarkupEngineRemarkupLiteralBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupLiteralBlockRule.php',
-    'PhutilRemarkupEngineRemarkupNoteBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupNoteBlockRule.php',
-    'PhutilRemarkupEngineRemarkupQuotesBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupQuotesBlockRule.php',
-    'PhutilRemarkupEngineRemarkupReplyBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupReplyBlockRule.php',
-    'PhutilRemarkupEngineRemarkupSimpleTableBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupSimpleTableBlockRule.php',
-    'PhutilRemarkupEngineRemarkupTableBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTableBlockRule.php',
-    'PhutilRemarkupEngineRemarkupTestInterpreterRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTestInterpreterRule.php',
     'PhutilRemarkupEngineTestCase' => 'markup/engine/__tests__/PhutilRemarkupEngineTestCase.php',
+    'PhutilRemarkupEscapeRemarkupRule' => 'markup/engine/remarkup/markuprule/PhutilRemarkupEscapeRemarkupRule.php',
+    'PhutilRemarkupHeaderBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupHeaderBlockRule.php',
+    'PhutilRemarkupHorizontalRuleBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupHorizontalRuleBlockRule.php',
+    'PhutilRemarkupHyperlinkRule' => 'markup/engine/remarkup/markuprule/PhutilRemarkupHyperlinkRule.php',
+    'PhutilRemarkupInlineBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupInlineBlockRule.php',
+    'PhutilRemarkupInterpreterBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupInterpreterBlockRule.php',
+    'PhutilRemarkupItalicRule' => 'markup/engine/remarkup/markuprule/PhutilRemarkupItalicRule.php',
+    'PhutilRemarkupLinebreaksRule' => 'markup/engine/remarkup/markuprule/PhutilRemarkupLinebreaksRule.php',
+    'PhutilRemarkupListBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupListBlockRule.php',
+    'PhutilRemarkupLiteralBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupLiteralBlockRule.php',
+    'PhutilRemarkupMonospaceRule' => 'markup/engine/remarkup/markuprule/PhutilRemarkupMonospaceRule.php',
+    'PhutilRemarkupNoteBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupNoteBlockRule.php',
+    'PhutilRemarkupQuotesBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupQuotesBlockRule.php',
+    'PhutilRemarkupReplyBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupReplyBlockRule.php',
     'PhutilRemarkupRule' => 'markup/engine/remarkup/markuprule/PhutilRemarkupRule.php',
-    'PhutilRemarkupRuleBold' => 'markup/engine/remarkup/markuprule/PhutilRemarkupRuleBold.php',
-    'PhutilRemarkupRuleDel' => 'markup/engine/remarkup/markuprule/PhutilRemarkupRuleDel.php',
-    'PhutilRemarkupRuleDocumentLink' => 'markup/engine/remarkup/markuprule/PhutilRemarkupRuleDocumentLink.php',
-    'PhutilRemarkupRuleEscapeRemarkup' => 'markup/engine/remarkup/markuprule/PhutilRemarkupRuleEscapeRemarkup.php',
-    'PhutilRemarkupRuleHyperlink' => 'markup/engine/remarkup/markuprule/PhutilRemarkupRuleHyperlink.php',
-    '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',
+    'PhutilRemarkupSimpleTableBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupSimpleTableBlockRule.php',
+    'PhutilRemarkupTableBlockRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupTableBlockRule.php',
+    'PhutilRemarkupTestInterpreterRule' => 'markup/engine/remarkup/blockrule/PhutilRemarkupTestInterpreterRule.php',
+    'PhutilRemarkupUnderlineRule' => 'markup/engine/remarkup/markuprule/PhutilRemarkupUnderlineRule.php',
     'PhutilRope' => 'utils/PhutilRope.php',
     'PhutilRopeTestCase' => 'utils/__tests__/PhutilRopeTestCase.php',
     'PhutilSafeHTML' => 'markup/PhutilSafeHTML.php',
@@ -653,31 +653,31 @@
     'PhutilQueryStringParserTestCase' => 'PhutilTestCase',
     'PhutilReadableSerializerTestCase' => 'PhutilTestCase',
     'PhutilRealnameContextFreeGrammar' => 'PhutilContextFreeGrammar',
+    'PhutilRemarkupBoldRule' => 'PhutilRemarkupRule',
+    'PhutilRemarkupCodeBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupDefaultBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupDelRule' => 'PhutilRemarkupRule',
+    'PhutilRemarkupDocumentLinkRule' => 'PhutilRemarkupRule',
     'PhutilRemarkupEngine' => 'PhutilMarkupEngine',
-    'PhutilRemarkupEngineRemarkupCodeBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupDefaultBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupHeaderBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupHorizontalRuleBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupInlineBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupInterpreterRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupListBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupLiteralBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupNoteBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupQuotesBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupReplyBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupSimpleTableBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupTableBlockRule' => 'PhutilRemarkupEngineBlockRule',
-    'PhutilRemarkupEngineRemarkupTestInterpreterRule' => 'PhutilRemarkupBlockInterpreter',
     'PhutilRemarkupEngineTestCase' => 'PhutilTestCase',
-    'PhutilRemarkupRuleBold' => 'PhutilRemarkupRule',
-    'PhutilRemarkupRuleDel' => 'PhutilRemarkupRule',
-    'PhutilRemarkupRuleDocumentLink' => 'PhutilRemarkupRule',
-    'PhutilRemarkupRuleEscapeRemarkup' => 'PhutilRemarkupRule',
-    'PhutilRemarkupRuleHyperlink' => 'PhutilRemarkupRule',
-    'PhutilRemarkupRuleItalic' => 'PhutilRemarkupRule',
-    'PhutilRemarkupRuleLinebreaks' => 'PhutilRemarkupRule',
-    'PhutilRemarkupRuleMonospace' => 'PhutilRemarkupRule',
-    'PhutilRemarkupRuleUnderline' => 'PhutilRemarkupRule',
+    'PhutilRemarkupEscapeRemarkupRule' => 'PhutilRemarkupRule',
+    'PhutilRemarkupHeaderBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupHorizontalRuleBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupHyperlinkRule' => 'PhutilRemarkupRule',
+    'PhutilRemarkupInlineBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupInterpreterBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupItalicRule' => 'PhutilRemarkupRule',
+    'PhutilRemarkupLinebreaksRule' => 'PhutilRemarkupRule',
+    'PhutilRemarkupListBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupLiteralBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupMonospaceRule' => 'PhutilRemarkupRule',
+    'PhutilRemarkupNoteBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupQuotesBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupReplyBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupSimpleTableBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupTableBlockRule' => 'PhutilRemarkupBlockRule',
+    'PhutilRemarkupTestInterpreterRule' => 'PhutilRemarkupBlockInterpreter',
+    'PhutilRemarkupUnderlineRule' => 'PhutilRemarkupRule',
     'PhutilRope' => 'Phobject',
     'PhutilRopeTestCase' => 'PhutilTestCase',
     'PhutilSafeHTMLTestCase' => 'PhutilTestCase',
diff --git a/src/markup/engine/PhutilRemarkupEngine.php b/src/markup/engine/PhutilRemarkupEngine.php
--- a/src/markup/engine/PhutilRemarkupEngine.php
+++ b/src/markup/engine/PhutilRemarkupEngine.php
@@ -33,7 +33,7 @@
   }
 
   public function setBlockRules(array $rules) {
-    assert_instances_of($rules, 'PhutilRemarkupEngineBlockRule');
+    assert_instances_of($rules, 'PhutilRemarkupBlockRule');
 
     $rules = msort($rules, 'getPriority');
 
@@ -239,7 +239,7 @@
   private static function shouldMergeBlocks($text, $prev_block, $curr_block) {
     $block_rules = ipull(array($prev_block, $curr_block), 'rule');
 
-    $default_rule = 'PhutilRemarkupEngineRemarkupDefaultBlockRule';
+    $default_rule = 'PhutilRemarkupDefaultBlockRule';
     try {
       assert_instances_of($block_rules, $default_rule);
 
diff --git a/src/markup/engine/__tests__/PhutilRemarkupEngineTestCase.php b/src/markup/engine/__tests__/PhutilRemarkupEngineTestCase.php
--- a/src/markup/engine/__tests__/PhutilRemarkupEngineTestCase.php
+++ b/src/markup/engine/__tests__/PhutilRemarkupEngineTestCase.php
@@ -26,7 +26,7 @@
     switch ($file) {
       case 'raw-escape.txt':
 
-        // NOTE: Here, we want to test PhutilRemarkupRuleEscapeRemarkup and
+        // NOTE: Here, we want to test PhutilRemarkupEscapeRemarkupRule and
         // PhutilRemarkupBlockStorage, which are triggered by "\1". In the
         // test, "~" is used as a placeholder for "\1" since it's hard to type
         // "\1".
@@ -45,8 +45,7 @@
     switch ($file) {
       case 'toc.txt':
         $table_of_contents =
-          PhutilRemarkupEngineRemarkupHeaderBlockRule::renderTableOfContents(
-            $engine);
+          PhutilRemarkupHeaderBlockRule::renderTableOfContents($engine);
         $actual_output = $table_of_contents."\n\n".$actual_output;
         break;
     }
@@ -77,31 +76,31 @@
       ));
 
     $rules = array();
-    $rules[] = new PhutilRemarkupRuleEscapeRemarkup();
-    $rules[] = new PhutilRemarkupRuleMonospace();
-    $rules[] = new PhutilRemarkupRuleDocumentLink();
-    $rules[] = new PhutilRemarkupRuleHyperlink();
-    $rules[] = new PhutilRemarkupRuleBold();
-    $rules[] = new PhutilRemarkupRuleItalic();
-    $rules[] = new PhutilRemarkupRuleDel();
-    $rules[] = new PhutilRemarkupRuleUnderline();
+    $rules[] = new PhutilRemarkupEscapeRemarkupRule();
+    $rules[] = new PhutilRemarkupMonospaceRule();
+    $rules[] = new PhutilRemarkupDocumentLinkRule();
+    $rules[] = new PhutilRemarkupHyperlinkRule();
+    $rules[] = new PhutilRemarkupBoldRule();
+    $rules[] = new PhutilRemarkupItalicRule();
+    $rules[] = new PhutilRemarkupDelRule();
+    $rules[] = new PhutilRemarkupUnderlineRule();
 
     $blocks = array();
-    $blocks[] = new PhutilRemarkupEngineRemarkupQuotesBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupReplyBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupHeaderBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupHorizontalRuleBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupCodeBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupLiteralBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupNoteBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupTableBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupSimpleTableBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupDefaultBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupListBlockRule();
-    $blocks[] = new PhutilRemarkupEngineRemarkupInterpreterRule();
+    $blocks[] = new PhutilRemarkupQuotesBlockRule();
+    $blocks[] = new PhutilRemarkupReplyBlockRule();
+    $blocks[] = new PhutilRemarkupHeaderBlockRule();
+    $blocks[] = new PhutilRemarkupHorizontalRuleBlockRule();
+    $blocks[] = new PhutilRemarkupCodeBlockRule();
+    $blocks[] = new PhutilRemarkupLiteralBlockRule();
+    $blocks[] = new PhutilRemarkupNoteBlockRule();
+    $blocks[] = new PhutilRemarkupTableBlockRule();
+    $blocks[] = new PhutilRemarkupSimpleTableBlockRule();
+    $blocks[] = new PhutilRemarkupDefaultBlockRule();
+    $blocks[] = new PhutilRemarkupListBlockRule();
+    $blocks[] = new PhutilRemarkupInterpreterBlockRule();
 
     foreach ($blocks as $block) {
-      if (!($block instanceof PhutilRemarkupEngineRemarkupCodeBlockRule)) {
+      if (!($block instanceof PhutilRemarkupCodeBlockRule)) {
         $block->setMarkupRules($rules);
       }
     }
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupBlockRule.php
@@ -3,7 +3,7 @@
 /**
  * @stable
  */
-abstract class PhutilRemarkupEngineBlockRule {
+abstract class PhutilRemarkupBlockRule {
 
   private $engine;
   private $rules = array();
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupCodeBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupCodeBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupCodeBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupCodeBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupCodeBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupCodeBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupCodeBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupCodeBlockRule extends PhutilRemarkupBlockRule {
 
   public function getMatchingLineCount(array $lines, $cursor) {
     $num_lines = 0;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupDefaultBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupDefaultBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupDefaultBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupDefaultBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupDefaultBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupDefaultBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupDefaultBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupDefaultBlockRule extends PhutilRemarkupBlockRule {
 
   public function getPriority() {
     return 750;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupHeaderBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupHeaderBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupHeaderBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupHeaderBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupHeaderBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupHeaderBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupHeaderBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupHeaderBlockRule extends PhutilRemarkupBlockRule {
 
   public function getMatchingLineCount(array $lines, $cursor) {
     $num_lines = 0;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupHorizontalRuleBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupHorizontalRuleBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupHorizontalRuleBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupHorizontalRuleBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupHorizontalRuleBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupHorizontalRuleBlockRule.php
@@ -1,7 +1,7 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupHorizontalRuleBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupHorizontalRuleBlockRule
+  extends PhutilRemarkupBlockRule {
 
   /**
    * This rule executes at priority `300`, so it can preempt the list block
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInlineBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupInlineBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInlineBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupInlineBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInlineBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupInlineBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupInlineBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupInlineBlockRule extends PhutilRemarkupBlockRule {
 
   public function getMatchingLineCount(array $lines, $cursor) {
     return 1;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInterpreterRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupInterpreterBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInterpreterRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupInterpreterBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupInterpreterRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupInterpreterBlockRule.php
@@ -1,10 +1,9 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupInterpreterRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupInterpreterBlockRule extends PhutilRemarkupBlockRule {
 
   const START_BLOCK_PATTERN = '/^([\w]+)\s*(?:\(([^)]+)\)\s*)?{{{/';
-  const END_BLOCK_PATTERN = '/}}}\s*$/';
+  const END_BLOCK_PATTERN   = '/}}}\s*$/';
 
   public function getMatchingLineCount(array $lines, $cursor) {
     $num_lines = 0;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupListBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupListBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupListBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupListBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupListBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupListBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupListBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupListBlockRule extends PhutilRemarkupBlockRule {
 
   /**
    * This rule must apply before the Code block rule because it needs to
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupLiteralBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupLiteralBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupLiteralBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupLiteralBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupLiteralBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupLiteralBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupLiteralBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupLiteralBlockRule extends PhutilRemarkupBlockRule {
 
   public function getMatchingLineCount(array $lines, $cursor) {
     $num_lines = 0;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupNoteBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupNoteBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupNoteBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupNoteBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupNoteBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupNoteBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupNoteBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupNoteBlockRule extends PhutilRemarkupBlockRule {
 
   public function getMatchingLineCount(array $lines, $cursor) {
     $num_lines = 0;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupQuotesBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupQuotesBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupQuotesBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupQuotesBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupQuotesBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupQuotesBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupQuotesBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupQuotesBlockRule extends PhutilRemarkupBlockRule {
 
   public function getMatchingLineCount(array $lines, $cursor) {
     $pos = $cursor;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupReplyBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupReplyBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupReplyBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupReplyBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupReplyBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupReplyBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupReplyBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupReplyBlockRule extends PhutilRemarkupBlockRule {
 
   public function getPriority() {
     return 400.0;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupSimpleTableBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupSimpleTableBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupSimpleTableBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupSimpleTableBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupSimpleTableBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupSimpleTableBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupSimpleTableBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupSimpleTableBlockRule extends PhutilRemarkupBlockRule {
 
   public function getMatchingLineCount(array $lines, $cursor) {
     $num_lines = 0;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTableBlockRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupTableBlockRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTableBlockRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupTableBlockRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTableBlockRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupTableBlockRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupTableBlockRule
-  extends PhutilRemarkupEngineBlockRule {
+final class PhutilRemarkupTableBlockRule extends PhutilRemarkupBlockRule {
 
   public function getMatchingLineCount(array $lines, $cursor) {
     $num_lines = 0;
diff --git a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTestInterpreterRule.php b/src/markup/engine/remarkup/blockrule/PhutilRemarkupTestInterpreterRule.php
rename from src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTestInterpreterRule.php
rename to src/markup/engine/remarkup/blockrule/PhutilRemarkupTestInterpreterRule.php
--- a/src/markup/engine/remarkup/blockrule/PhutilRemarkupEngineRemarkupTestInterpreterRule.php
+++ b/src/markup/engine/remarkup/blockrule/PhutilRemarkupTestInterpreterRule.php
@@ -1,6 +1,6 @@
 <?php
 
-final class PhutilRemarkupEngineRemarkupTestInterpreterRule
+final class PhutilRemarkupTestInterpreterRule
   extends PhutilRemarkupBlockInterpreter {
 
   public function getInterpreterName() {
diff --git a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleBold.php b/src/markup/engine/remarkup/markuprule/PhutilRemarkupBoldRule.php
rename from src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleBold.php
rename to src/markup/engine/remarkup/markuprule/PhutilRemarkupBoldRule.php
--- a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleBold.php
+++ b/src/markup/engine/remarkup/markuprule/PhutilRemarkupBoldRule.php
@@ -1,6 +1,6 @@
 <?php
 
-final class PhutilRemarkupRuleBold extends PhutilRemarkupRule {
+final class PhutilRemarkupBoldRule extends PhutilRemarkupRule {
 
   public function getPriority() {
     return 1000.0;
diff --git a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleDel.php b/src/markup/engine/remarkup/markuprule/PhutilRemarkupDelRule.php
rename from src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleDel.php
rename to src/markup/engine/remarkup/markuprule/PhutilRemarkupDelRule.php
--- a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleDel.php
+++ b/src/markup/engine/remarkup/markuprule/PhutilRemarkupDelRule.php
@@ -1,6 +1,6 @@
 <?php
 
-final class PhutilRemarkupRuleDel extends PhutilRemarkupRule {
+final class PhutilRemarkupDelRule extends PhutilRemarkupRule {
 
   public function getPriority() {
     return 1000.0;
diff --git a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleDocumentLink.php b/src/markup/engine/remarkup/markuprule/PhutilRemarkupDocumentLinkRule.php
rename from src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleDocumentLink.php
rename to src/markup/engine/remarkup/markuprule/PhutilRemarkupDocumentLinkRule.php
--- a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleDocumentLink.php
+++ b/src/markup/engine/remarkup/markuprule/PhutilRemarkupDocumentLinkRule.php
@@ -1,6 +1,6 @@
 <?php
 
-final class PhutilRemarkupRuleDocumentLink extends PhutilRemarkupRule {
+final class PhutilRemarkupDocumentLinkRule extends PhutilRemarkupRule {
 
   public function getPriority() {
     return 150.0;
diff --git a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleEscapeRemarkup.php b/src/markup/engine/remarkup/markuprule/PhutilRemarkupEscapeRemarkupRule.php
rename from src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleEscapeRemarkup.php
rename to src/markup/engine/remarkup/markuprule/PhutilRemarkupEscapeRemarkupRule.php
--- a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleEscapeRemarkup.php
+++ b/src/markup/engine/remarkup/markuprule/PhutilRemarkupEscapeRemarkupRule.php
@@ -1,6 +1,6 @@
 <?php
 
-final class PhutilRemarkupRuleEscapeRemarkup extends PhutilRemarkupRule {
+final class PhutilRemarkupEscapeRemarkupRule extends PhutilRemarkupRule {
 
   public function getPriority() {
     return 0;
diff --git a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleHyperlink.php b/src/markup/engine/remarkup/markuprule/PhutilRemarkupHyperlinkRule.php
rename from src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleHyperlink.php
rename to src/markup/engine/remarkup/markuprule/PhutilRemarkupHyperlinkRule.php
--- a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleHyperlink.php
+++ b/src/markup/engine/remarkup/markuprule/PhutilRemarkupHyperlinkRule.php
@@ -1,9 +1,6 @@
 <?php
 
-/**
- * @concrete-extensible (TODO only needed by Facebook at the moment)
- */
-class PhutilRemarkupRuleHyperlink extends PhutilRemarkupRule {
+final class PhutilRemarkupHyperlinkRule extends PhutilRemarkupRule {
 
   public function getPriority() {
     return 400.0;
diff --git a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleItalic.php b/src/markup/engine/remarkup/markuprule/PhutilRemarkupItalicRule.php
rename from src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleItalic.php
rename to src/markup/engine/remarkup/markuprule/PhutilRemarkupItalicRule.php
--- a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleItalic.php
+++ b/src/markup/engine/remarkup/markuprule/PhutilRemarkupItalicRule.php
@@ -1,6 +1,6 @@
 <?php
 
-final class PhutilRemarkupRuleItalic extends PhutilRemarkupRule {
+final class PhutilRemarkupItalicRule extends PhutilRemarkupRule {
 
   public function getPriority() {
     return 1000.0;
diff --git a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleLinebreaks.php b/src/markup/engine/remarkup/markuprule/PhutilRemarkupLinebreaksRule.php
rename from src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleLinebreaks.php
rename to src/markup/engine/remarkup/markuprule/PhutilRemarkupLinebreaksRule.php
--- a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleLinebreaks.php
+++ b/src/markup/engine/remarkup/markuprule/PhutilRemarkupLinebreaksRule.php
@@ -1,6 +1,6 @@
 <?php
 
-final class PhutilRemarkupRuleLinebreaks extends PhutilRemarkupRule {
+final class PhutilRemarkupLinebreaksRule extends PhutilRemarkupRule {
 
   public function apply($text) {
     if ($this->getEngine()->isTextMode()) {
diff --git a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleMonospace.php b/src/markup/engine/remarkup/markuprule/PhutilRemarkupMonospaceRule.php
rename from src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleMonospace.php
rename to src/markup/engine/remarkup/markuprule/PhutilRemarkupMonospaceRule.php
--- a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleMonospace.php
+++ b/src/markup/engine/remarkup/markuprule/PhutilRemarkupMonospaceRule.php
@@ -1,6 +1,6 @@
 <?php
 
-final class PhutilRemarkupRuleMonospace extends PhutilRemarkupRule {
+final class PhutilRemarkupMonospaceRule extends PhutilRemarkupRule {
 
   public function getPriority() {
     return 100.0;
diff --git a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleUnderline.php b/src/markup/engine/remarkup/markuprule/PhutilRemarkupUnderlineRule.php
rename from src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleUnderline.php
rename to src/markup/engine/remarkup/markuprule/PhutilRemarkupUnderlineRule.php
--- a/src/markup/engine/remarkup/markuprule/PhutilRemarkupRuleUnderline.php
+++ b/src/markup/engine/remarkup/markuprule/PhutilRemarkupUnderlineRule.php
@@ -1,7 +1,6 @@
 <?php
 
-final class PhutilRemarkupRuleUnderline
-  extends PhutilRemarkupRule {
+final class PhutilRemarkupUnderlineRule extends PhutilRemarkupRule {
 
   public function getPriority() {
     return 1000.0;