<!DOCTYPE html>

<html> <head> <meta charset=“UTF-8”>

<title>class ReVIEW::Compiler - review-2.2.0 Documentation</title>

<script type=“text/javascript”>

var rdoc_rel_prefix = "../";
var index_rel_prefix = "../";

</script>

<script src=“../js/jquery.js”></script> <script src=“../js/darkfish.js”></script>

<link href=“../css/fonts.css” rel=“stylesheet”> <link href=“../css/rdoc.css” rel=“stylesheet”>

<body id=“top” role=“document” class=“class”> <nav role=“navigation”>

<div id="project-navigation">
  <div id="home-section" role="region" title="Quick navigation" class="nav-section">
<h2>
  <a href="../index.html" rel="home">Home</a>
</h2>

<div id="table-of-contents-navigation">
  <a href="../table_of_contents.html#pages">Pages</a>
  <a href="../table_of_contents.html#classes">Classes</a>
  <a href="../table_of_contents.html#methods">Methods</a>
</div>

</div>

  <div id="search-section" role="search" class="project-section initially-hidden">
<form action="#" method="get" accept-charset="utf-8">
  <div id="search-field-wrapper">
    <input id="search-field" role="combobox" aria-label="Search"
           aria-autocomplete="list" aria-controls="search-results"
           type="text" name="search" placeholder="Search" spellcheck="false"
           title="Type to search, Up and Down to navigate, Enter to load">
  </div>

  <ul id="search-results" aria-label="Search Results"
      aria-busy="false" aria-expanded="false"
      aria-atomic="false" class="initially-hidden"></ul>
</form>

</div>

</div>

<div id="class-metadata">

  <div id="parent-class-section" class="nav-section">
<h3>Parent</h3>

<p class="link"><a href="../Object.html">Object</a>

</div>

<!-- Method Quickref -->

<div id=“method-list-section” class=“nav-section”>

<h3>Methods</h3>

<ul class="link-list" role="directory">

  <li ><a href="#method-c-defblock">::defblock</a>

  <li ><a href="#method-c-definline">::definline</a>

  <li ><a href="#method-c-defsingle">::defsingle</a>

  <li ><a href="#method-c-defsyntax">::defsyntax</a>

  <li ><a href="#method-c-new">::new</a>

  <li ><a href="#method-i-block_open-3F">#block_open?</a>

  <li ><a href="#method-i-close_all_tagged_section">#close_all_tagged_section</a>

  <li ><a href="#method-i-close_current_tagged_section">#close_current_tagged_section</a>

  <li ><a href="#method-i-close_tagged_section">#close_tagged_section</a>

  <li ><a href="#method-i-compile">#compile</a>

  <li ><a href="#method-i-compile_block">#compile_block</a>

  <li ><a href="#method-i-compile_command">#compile_command</a>

  <li ><a href="#method-i-compile_dlist">#compile_dlist</a>

  <li ><a href="#method-i-compile_headline">#compile_headline</a>

  <li ><a href="#method-i-compile_inline">#compile_inline</a>

  <li ><a href="#method-i-compile_olist">#compile_olist</a>

  <li ><a href="#method-i-compile_paragraph">#compile_paragraph</a>

  <li ><a href="#method-i-compile_single">#compile_single</a>

  <li ><a href="#method-i-compile_ulist">#compile_ulist</a>

  <li ><a href="#method-i-compile_unknown_command">#compile_unknown_command</a>

  <li ><a href="#method-i-default_block">#default_block</a>

  <li ><a href="#method-i-do_compile">#do_compile</a>

  <li ><a href="#method-i-error">#error</a>

  <li ><a href="#method-i-headline">#headline</a>

  <li ><a href="#method-i-inline_defined-3F">#inline_defined?</a>

  <li ><a href="#method-i-open_tagged_section">#open_tagged_section</a>

  <li ><a href="#method-i-parse_args">#parse_args</a>

  <li ><a href="#method-i-read_block">#read_block</a>

  <li ><a href="#method-i-read_command">#read_command</a>

  <li ><a href="#method-i-syntax_defined-3F">#syntax_defined?</a>

  <li ><a href="#method-i-syntax_descriptor">#syntax_descriptor</a>

  <li ><a href="#method-i-tagged_section_init">#tagged_section_init</a>

  <li ><a href="#method-i-text">#text</a>

  <li ><a href="#method-i-warn">#warn</a>

</ul>

</div>

</div>

</nav>

<main role=“main” aria-labelledby=“class-ReVIEW::Compiler”>

<h1 id="class-ReVIEW::Compiler" class="class">
  class ReVIEW::Compiler
</h1>

<section class="description">

</section>

<section id="5Buntitled-5D" class="documentation-section">

  <section class="constants-list">
    <header>
      <h3>Constants</h3>
    </header>
    <dl>

      <dt id="INLINE">INLINE

      <dd>

      <dt id="SYNTAX">SYNTAX

      <dd>

    </dl>
  </section>

  <section class="attribute-method-details" class="method-section">
    <header>
      <h3>Attributes</h3>
    </header>

    <div id="attribute-i-strategy" class="method-detail">
      <div class="method-heading attribute-method-heading">
        <span class="method-name">strategy</span><span
          class="attribute-access-type">[R]</span>
      </div>

      <div class="method-description">

      </div>
    </div>

  </section>

   <section id="public-class-5Buntitled-5D-method-details" class="method-section">
     <header>
       <h3>Public Class Methods</h3>
     </header>

    <div id="method-c-defblock" class="method-detail ">

      <div class="method-heading">
        <span class="method-name">defblock</span><span
          class="method-args">(name, argc, optional = false, &block)</span>

        <span class="method-click-advice">click to toggle source</span>

      </div>

      <div class="method-description">

        <div class="method-source-code" id="defblock-source">
          <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 92</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-constant”>Compiler</span>.<span class=“ruby-identifier”>defblock</span>(<span class=“ruby-identifier”>name</span>, <span class=“ruby-identifier”>argc</span>, <span class=“ruby-identifier”>optional</span> = <span class=“ruby-keyword”>false</span>, <span class=“ruby-operator”>&amp;</span><span class=“ruby-identifier”>block</span>)

<span class="ruby-identifier">defsyntax</span> <span class="ruby-identifier">name</span>, (<span class="ruby-identifier">optional</span> <span class="ruby-operator">?</span> <span class="ruby-value">:optional</span> <span class="ruby-operator">:</span> <span class="ruby-value">:block</span>), <span class="ruby-identifier">argc</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-c-definline" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">definline</span><span
      class="method-args">(name)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="definline-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 122</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-constant”>Compiler</span>.<span class=“ruby-identifier”>definline</span>(<span class=“ruby-identifier”>name</span>)

<span class="ruby-constant">INLINE</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-constant">InlineSyntaxElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">name</span>)

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-c-defsingle" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">defsingle</span><span
      class="method-args">(name, argc, &block)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="defsingle-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 96</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-constant”>Compiler</span>.<span class=“ruby-identifier”>defsingle</span>(<span class=“ruby-identifier”>name</span>, <span class=“ruby-identifier”>argc</span>, <span class=“ruby-operator”>&amp;</span><span class=“ruby-identifier”>block</span>)

<span class="ruby-identifier">defsyntax</span> <span class="ruby-identifier">name</span>, <span class="ruby-value">:line</span>, <span class="ruby-identifier">argc</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-c-defsyntax" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">defsyntax</span><span
      class="method-args">(name, type, argc, &block)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="defsyntax-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 100</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-constant”>Compiler</span>.<span class=“ruby-identifier”>defsyntax</span>(<span class=“ruby-identifier”>name</span>, <span class=“ruby-identifier”>type</span>, <span class=“ruby-identifier”>argc</span>, <span class=“ruby-operator”>&amp;</span><span class=“ruby-identifier”>block</span>)

<span class="ruby-constant">SYNTAX</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-constant">SyntaxElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">type</span>, <span class="ruby-identifier">argc</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-c-new" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">new</span><span
      class="method-args">(strategy)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="new-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 43</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>initialize</span>(<span class=“ruby-identifier”>strategy</span>)

<span class="ruby-ivar">@strategy</span> = <span class="ruby-identifier">strategy</span>

<span class=“ruby-keyword”>end</span></pre>

      </div>

    </div>

  </div>

</section>

 <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
   <header>
     <h3>Public Instance Methods</h3>
   </header>

  <div id="method-i-compile" class="method-detail ">

    <div class="method-heading">
      <span class="method-name">compile</span><span
        class="method-args">(chap)</span>

      <span class="method-click-advice">click to toggle source</span>

    </div>

    <div class="method-description">

      <div class="method-source-code" id="compile-source">
        <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 49</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile</span>(<span class=“ruby-identifier”>chap</span>)

<span class="ruby-ivar">@chapter</span> = <span class="ruby-identifier">chap</span>
<span class="ruby-identifier">do_compile</span>
<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">result</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-inline_defined-3F" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">inline_defined?</span><span
      class="method-args">(name)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="inline_defined-3F-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 126</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>inline_defined?</span>(<span class=“ruby-identifier”>name</span>)

<span class="ruby-constant">INLINE</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>)

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-syntax_defined-3F" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">syntax_defined?</span><span
      class="method-args">(name)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="syntax_defined-3F-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 104</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>syntax_defined?</span>(<span class=“ruby-identifier”>name</span>)

<span class="ruby-constant">SYNTAX</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>)

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-syntax_descriptor" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">syntax_descriptor</span><span
      class="method-args">(name)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="syntax_descriptor-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 108</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>syntax_descriptor</span>(<span class=“ruby-identifier”>name</span>)

<span class="ruby-constant">SYNTAX</span>[<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>]

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-text" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">text</span><span
      class="method-args">(str)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="text-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 525</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>text</span>(<span class=“ruby-identifier”>str</span>)

<span class="ruby-keyword">return</span> <span class="ruby-string">&#39;&#39;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">empty?</span>
<span class="ruby-identifier">words</span> = <span class="ruby-identifier">str</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/(@&lt;\w+&gt;\{(?:[^\}\]|\.)*?\})/</span>, <span class="ruby-value">-1</span>)
<span class="ruby-identifier">words</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">w</span><span class="ruby-operator">|</span>
  <span class="ruby-identifier">error</span> <span class="ruby-node">&quot;`@&lt;xxx&gt;&#39; seen but is not valid inline op: #{w}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">w</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-regexp">/@&lt;\w+&gt;/</span>).<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-regexp">/\A@&lt;raw&gt;/</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">w</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span> = <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">nofunc_text</span>(<span class="ruby-identifier">words</span>.<span class="ruby-identifier">shift</span>)
<span class="ruby-keyword">until</span> <span class="ruby-identifier">words</span>.<span class="ruby-identifier">empty?</span>
  <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">compile_inline</span>(<span class="ruby-identifier">words</span>.<span class="ruby-identifier">shift</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\\}/</span>, <span class="ruby-string">&#39;}&#39;</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\\/</span>, <span class="ruby-string">&#39;\&#39;</span>))
  <span class="ruby-identifier">result</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">nofunc_text</span>(<span class="ruby-identifier">words</span>.<span class="ruby-identifier">shift</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>

<span class=“ruby-keyword”>rescue</span> =<span class=“ruby-operator”>&gt;</span> <span class=“ruby-identifier”>err</span>

<span class="ruby-identifier">error</span> <span class="ruby-identifier">err</span>.<span class="ruby-identifier">message</span>

<span class=“ruby-keyword”>end</span></pre>

      </div>

    </div>

  </div>

</section>

 <section id="private-instance-5Buntitled-5D-method-details" class="method-section">
   <header>
     <h3>Private Instance Methods</h3>
   </header>

  <div id="method-i-block_open-3F" class="method-detail ">

    <div class="method-heading">
      <span class="method-name">block_open?</span><span
        class="method-args">(line)</span>

      <span class="method-click-advice">click to toggle source</span>

    </div>

    <div class="method-description">

      <div class="method-source-code" id="block_open-3F-source">
        <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 442</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>block_open?</span>(<span class=“ruby-identifier”>line</span>)

<span class="ruby-identifier">line</span>.<span class="ruby-identifier">rstrip</span>[<span class="ruby-value">-1</span>,<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;{&#39;</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-close_all_tagged_section" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">close_all_tagged_section</span><span
      class="method-args">()</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="close_all_tagged_section-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 348</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>close_all_tagged_section</span>

<span class="ruby-keyword">until</span> <span class="ruby-ivar">@tagged_section</span>.<span class="ruby-identifier">empty?</span>
  <span class="ruby-identifier">close_tagged_section</span>(<span class="ruby-operator">*</span> <span class="ruby-ivar">@tagged_section</span>.<span class="ruby-identifier">pop</span>)
<span class="ruby-keyword">end</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-close_current_tagged_section" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">close_current_tagged_section</span><span
      class="method-args">(level)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="close_current_tagged_section-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 314</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>close_current_tagged_section</span>(<span class=“ruby-identifier”>level</span>)

<span class="ruby-keyword">while</span> <span class="ruby-ivar">@tagged_section</span>.<span class="ruby-identifier">last</span> <span class="ruby-keyword">and</span> <span class="ruby-ivar">@tagged_section</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">level</span>
  <span class="ruby-identifier">close_tagged_section</span>(<span class="ruby-operator">*</span> <span class="ruby-ivar">@tagged_section</span>.<span class="ruby-identifier">pop</span>)
<span class="ruby-keyword">end</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-close_tagged_section" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">close_tagged_section</span><span
      class="method-args">(tag, level)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="close_tagged_section-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 339</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>close_tagged_section</span>(<span class=“ruby-identifier”>tag</span>, <span class=“ruby-identifier”>level</span>)

<span class="ruby-identifier">mid</span> = <span class="ruby-node">&quot;#{tag}_end&quot;</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">mid</span>)
  <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">__send__</span> <span class="ruby-identifier">mid</span>, <span class="ruby-identifier">level</span>
<span class="ruby-keyword">else</span>
  <span class="ruby-identifier">error</span> <span class="ruby-node">&quot;strategy does not support block op: #{mid}&quot;</span>
<span class="ruby-keyword">end</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-compile_block" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">compile_block</span><span
      class="method-args">(syntax, args, lines)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="compile_block-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 510</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile_block</span>(<span class=“ruby-identifier”>syntax</span>, <span class=“ruby-identifier”>args</span>, <span class=“ruby-identifier”>lines</span>)

<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">__send__</span>(<span class="ruby-identifier">syntax</span>.<span class="ruby-identifier">name</span>, (<span class="ruby-identifier">lines</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">default_block</span>(<span class="ruby-identifier">syntax</span>)), <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-compile_command" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">compile_command</span><span
      class="method-args">(syntax, args, lines)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="compile_command-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 484</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile_command</span>(<span class=“ruby-identifier”>syntax</span>, <span class=“ruby-identifier”>args</span>, <span class=“ruby-identifier”>lines</span>)

<span class="ruby-keyword">unless</span> <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">syntax</span>.<span class="ruby-identifier">name</span>)
  <span class="ruby-identifier">error</span> <span class="ruby-node">&quot;strategy does not support command: //#{syntax.name}&quot;</span>
  <span class="ruby-identifier">compile_unknown_command</span> <span class="ruby-identifier">args</span>, <span class="ruby-identifier">lines</span>
  <span class="ruby-keyword">return</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">begin</span>
  <span class="ruby-identifier">syntax</span>.<span class="ruby-identifier">check_args</span> <span class="ruby-identifier">args</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">CompileError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">err</span>
  <span class="ruby-identifier">error</span> <span class="ruby-identifier">err</span>.<span class="ruby-identifier">message</span>
  <span class="ruby-identifier">args</span> = [<span class="ruby-string">&#39;(NoArgument)&#39;</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">syntax</span>.<span class="ruby-identifier">min_argc</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">syntax</span>.<span class="ruby-identifier">block_allowed?</span>
  <span class="ruby-identifier">compile_block</span> <span class="ruby-identifier">syntax</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">lines</span>
<span class="ruby-keyword">else</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">lines</span>
    <span class="ruby-identifier">error</span> <span class="ruby-node">&quot;block is not allowed for command //#{syntax.name}; ignore&quot;</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">compile_single</span> <span class="ruby-identifier">syntax</span>, <span class="ruby-identifier">args</span>
<span class="ruby-keyword">end</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-compile_dlist" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">compile_dlist</span><span
      class="method-args">(f)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="compile_dlist-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 413</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile_dlist</span>(<span class=“ruby-identifier”>f</span>)

<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">dl_begin</span>
<span class="ruby-keyword">while</span> <span class="ruby-regexp">/\A\s*:/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">peek</span>
  <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">dt</span> <span class="ruby-identifier">text</span>(<span class="ruby-identifier">f</span>.<span class="ruby-identifier">gets</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/\A\s*:/</span>, <span class="ruby-string">&#39;&#39;</span>).<span class="ruby-identifier">strip</span>)
  <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">dd</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">break</span>(<span class="ruby-regexp">/\A(\S|\s*:)/</span>).<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span> <span class="ruby-identifier">text</span>(<span class="ruby-identifier">line</span>.<span class="ruby-identifier">strip</span>) }
  <span class="ruby-identifier">f</span>.<span class="ruby-identifier">skip_blank_lines</span>
  <span class="ruby-identifier">f</span>.<span class="ruby-identifier">skip_comment_lines</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">dl_end</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-compile_headline" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">compile_headline</span><span
      class="method-args">(line)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="compile_headline-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 283</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile_headline</span>(<span class=“ruby-identifier”>line</span>)

<span class="ruby-ivar">@headline_indexs</span> <span class="ruby-operator">||=</span> [<span class="ruby-ivar">@chapter</span>.<span class="ruby-identifier">number</span>.<span class="ruby-identifier">to_i</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>]
<span class="ruby-identifier">m</span> = <span class="ruby-regexp">/\A(=+)(?:\[(.+?)\])?(?:\{(.+?)\})?(.*)/</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">line</span>)
<span class="ruby-identifier">level</span> = <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">size</span>
<span class="ruby-identifier">tag</span> = <span class="ruby-identifier">m</span>[<span class="ruby-value">2</span>]
<span class="ruby-identifier">label</span> = <span class="ruby-identifier">m</span>[<span class="ruby-value">3</span>]
<span class="ruby-identifier">caption</span> = <span class="ruby-identifier">m</span>[<span class="ruby-value">4</span>].<span class="ruby-identifier">strip</span>
<span class="ruby-identifier">index</span> = <span class="ruby-identifier">level</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">tag</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">tag</span> <span class="ruby-operator">!~</span> <span class="ruby-regexp">/\A\//</span>
    <span class="ruby-identifier">close_current_tagged_section</span>(<span class="ruby-identifier">level</span>)
    <span class="ruby-identifier">open_tagged_section</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">level</span>, <span class="ruby-identifier">label</span>, <span class="ruby-identifier">caption</span>)
  <span class="ruby-keyword">else</span>
    <span class="ruby-identifier">open_tag</span> = <span class="ruby-identifier">tag</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
    <span class="ruby-identifier">prev_tag_info</span> = <span class="ruby-ivar">@tagged_section</span>.<span class="ruby-identifier">pop</span>
    <span class="ruby-keyword">unless</span> <span class="ruby-identifier">prev_tag_info</span>.<span class="ruby-identifier">first</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">open_tag</span>
      <span class="ruby-identifier">raise</span> <span class="ruby-constant">CompileError</span>, <span class="ruby-node">&quot;#{open_tag} is not opened.&quot;</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">close_tagged_section</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">prev_tag_info</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
  <span class="ruby-keyword">if</span> <span class="ruby-ivar">@headline_indexs</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> (<span class="ruby-identifier">index</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
    <span class="ruby-ivar">@headline_indexs</span> = <span class="ruby-ivar">@headline_indexs</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-identifier">index</span>]
  <span class="ruby-keyword">end</span>
  <span class="ruby-ivar">@headline_indexs</span>[<span class="ruby-identifier">index</span>] = <span class="ruby-value">0</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@headline_indexs</span>[<span class="ruby-identifier">index</span>].<span class="ruby-identifier">nil?</span>
  <span class="ruby-ivar">@headline_indexs</span>[<span class="ruby-identifier">index</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
  <span class="ruby-identifier">close_current_tagged_section</span>(<span class="ruby-identifier">level</span>)
  <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">headline</span> <span class="ruby-identifier">level</span>, <span class="ruby-identifier">label</span>, <span class="ruby-identifier">caption</span>
<span class="ruby-keyword">end</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-compile_inline" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">compile_inline</span><span
      class="method-args">(str)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="compile_inline-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 542</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile_inline</span>(<span class=“ruby-identifier”>str</span>)

<span class="ruby-identifier">op</span>, <span class="ruby-identifier">arg</span> = <span class="ruby-regexp">/\A@&lt;(\w+)&gt;\{(.*?)\}\z/</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">str</span>).<span class="ruby-identifier">captures</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">inline_defined?</span>(<span class="ruby-identifier">op</span>)
  <span class="ruby-identifier">raise</span> <span class="ruby-constant">CompileError</span>, <span class="ruby-node">&quot;no such inline op: #{op}&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-node">&quot;inline_#{op}&quot;</span>)
  <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;strategy does not support inline op: @&lt;#{op}&gt;&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">__send__</span>(<span class="ruby-node">&quot;inline_#{op}&quot;</span>, <span class="ruby-identifier">arg</span>)

<span class=“ruby-keyword”>rescue</span> =<span class=“ruby-operator”>&gt;</span> <span class=“ruby-identifier”>err</span>

<span class="ruby-identifier">error</span> <span class="ruby-identifier">err</span>.<span class="ruby-identifier">message</span>
<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">nofunc_text</span>(<span class="ruby-identifier">str</span>)

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-compile_olist" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">compile_olist</span><span
      class="method-args">(f)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="compile_olist-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 398</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile_olist</span>(<span class=“ruby-identifier”>f</span>)

<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ol_begin</span>
<span class="ruby-identifier">f</span>.<span class="ruby-identifier">while_match</span>(<span class="ruby-node">/\A\s+\d+\.|\A\#@/</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
  <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">=~</span> <span class="ruby-node">/\A\#@/</span>

  <span class="ruby-identifier">num</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp">/(\d+)\./</span>)[<span class="ruby-value">1</span>]
  <span class="ruby-identifier">buf</span> = [<span class="ruby-identifier">text</span>(<span class="ruby-identifier">line</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/\d+\./</span>, <span class="ruby-string">&#39;&#39;</span>).<span class="ruby-identifier">strip</span>)]
  <span class="ruby-identifier">f</span>.<span class="ruby-identifier">while_match</span>(<span class="ruby-regexp">/\A\s+(?!\d+\.)\S/</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cont</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">text</span>(<span class="ruby-identifier">cont</span>.<span class="ruby-identifier">strip</span>)
  <span class="ruby-keyword">end</span>
  <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ol_item</span> <span class="ruby-identifier">buf</span>, <span class="ruby-identifier">num</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ol_end</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-compile_paragraph" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">compile_paragraph</span><span
      class="method-args">(f)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="compile_paragraph-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 424</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile_paragraph</span>(<span class=“ruby-identifier”>f</span>)

<span class="ruby-identifier">buf</span> = []
<span class="ruby-identifier">f</span>.<span class="ruby-identifier">until_match</span>(<span class="ruby-node">%r&lt;\A//|\A\#@&gt;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
  <span class="ruby-keyword">break</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">empty?</span>
  <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">text</span>(<span class="ruby-identifier">line</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/^(\t+)\s*/</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span> <span class="ruby-string">&quot;&lt;!ESCAPETAB!&gt;&quot;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">size</span>}.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/&lt;!ESCAPETAB!&gt;/</span>, <span class="ruby-string">&quot;\t&quot;</span>))
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">paragraph</span> <span class="ruby-identifier">buf</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-compile_single" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">compile_single</span><span
      class="method-args">(syntax, args)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="compile_single-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 521</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile_single</span>(<span class=“ruby-identifier”>syntax</span>, <span class=“ruby-identifier”>args</span>)

<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">__send__</span>(<span class="ruby-identifier">syntax</span>.<span class="ruby-identifier">name</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-compile_ulist" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">compile_ulist</span><span
      class="method-args">(f)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="compile_ulist-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 354</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile_ulist</span>(<span class=“ruby-identifier”>f</span>)

<span class="ruby-identifier">level</span> = <span class="ruby-value">0</span>
<span class="ruby-identifier">f</span>.<span class="ruby-identifier">while_match</span>(<span class="ruby-node">/\A\s+\*|\A\#@/</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
  <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">=~</span> <span class="ruby-node">/\A\#@/</span>

  <span class="ruby-identifier">buf</span> = [<span class="ruby-identifier">text</span>(<span class="ruby-identifier">line</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/\*+/</span>, <span class="ruby-string">&#39;&#39;</span>).<span class="ruby-identifier">strip</span>)]
  <span class="ruby-identifier">f</span>.<span class="ruby-identifier">while_match</span>(<span class="ruby-regexp">/\A\s+(?!\*)\S/</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cont</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">text</span>(<span class="ruby-identifier">cont</span>.<span class="ruby-identifier">strip</span>)
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">line</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/\A\s+(\*+)/</span>
  <span class="ruby-identifier">current_level</span> = <span class="ruby-node">$1</span>.<span class="ruby-identifier">size</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">level</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">current_level</span>
    <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_item_end</span>
    <span class="ruby-comment"># body</span>
    <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_item_begin</span> <span class="ruby-identifier">buf</span>
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">level</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">current_level</span> <span class="ruby-comment"># down</span>
    <span class="ruby-identifier">level_diff</span> = <span class="ruby-identifier">current_level</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">level</span>
    <span class="ruby-identifier">level</span> = <span class="ruby-identifier">current_level</span>
    (<span class="ruby-value">1</span><span class="ruby-operator">..</span>(<span class="ruby-identifier">level_diff</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)).<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">reverse_each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
      <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_begin</span> {<span class="ruby-identifier">i</span>}
      <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_item_begin</span> []
    <span class="ruby-keyword">end</span>
    <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_begin</span> {<span class="ruby-identifier">level</span>}
    <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_item_begin</span> <span class="ruby-identifier">buf</span>
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">level</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">current_level</span> <span class="ruby-comment"># up</span>
    <span class="ruby-identifier">level_diff</span> = <span class="ruby-identifier">level</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">current_level</span>
    <span class="ruby-identifier">level</span> = <span class="ruby-identifier">current_level</span>
    (<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-identifier">level_diff</span>).<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">reverse_each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
      <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_item_end</span>
      <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_end</span> {<span class="ruby-identifier">level</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">i</span>}
    <span class="ruby-keyword">end</span>
    <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_item_end</span>
    <span class="ruby-comment"># body</span>
    <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_item_begin</span> <span class="ruby-identifier">buf</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>

(<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-identifier">level</span>).<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">reverse_each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
  <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_item_end</span>
  <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">ul_end</span> {<span class="ruby-identifier">i</span>}
<span class="ruby-keyword">end</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-compile_unknown_command" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">compile_unknown_command</span><span
      class="method-args">(args, lines)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="compile_unknown_command-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 506</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>compile_unknown_command</span>(<span class=“ruby-identifier”>args</span>, <span class=“ruby-identifier”>lines</span>)

<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">unknown_command</span> <span class="ruby-identifier">args</span>, <span class="ruby-identifier">lines</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-default_block" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">default_block</span><span
      class="method-args">(syntax)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="default_block-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 514</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>default_block</span>(<span class=“ruby-identifier”>syntax</span>)

<span class="ruby-keyword">if</span> <span class="ruby-identifier">syntax</span>.<span class="ruby-identifier">block_required?</span>
  <span class="ruby-identifier">error</span> <span class="ruby-node">&quot;block is required for //#{syntax.name}; use empty block&quot;</span>
<span class="ruby-keyword">end</span>
[]

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-do_compile" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">do_compile</span><span
      class="method-args">()</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="do_compile-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 237</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>do_compile</span>

<span class="ruby-identifier">f</span> = <span class="ruby-constant">LineInput</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@chapter</span>.<span class="ruby-identifier">content</span>))
<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">bind</span> <span class="ruby-keyword">self</span>, <span class="ruby-ivar">@chapter</span>, <span class="ruby-constant">Location</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@chapter</span>.<span class="ruby-identifier">basename</span>, <span class="ruby-identifier">f</span>)
<span class="ruby-identifier">tagged_section_init</span>
<span class="ruby-keyword">while</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">next?</span>
  <span class="ruby-keyword">case</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">peek</span>
  <span class="ruby-keyword">when</span> <span class="ruby-node">/\A\#@/</span>
    <span class="ruby-identifier">f</span>.<span class="ruby-identifier">gets</span> <span class="ruby-comment"># Nothing to do</span>
  <span class="ruby-keyword">when</span> <span class="ruby-regexp">/\A=+[\[\s\{]/</span>
    <span class="ruby-identifier">compile_headline</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">gets</span>
  <span class="ruby-keyword">when</span> <span class="ruby-regexp">%r&lt;\A\s+\*&gt;</span>
    <span class="ruby-identifier">compile_ulist</span> <span class="ruby-identifier">f</span>
  <span class="ruby-keyword">when</span> <span class="ruby-regexp">%r&lt;\A\s+\d+\.&gt;</span>
    <span class="ruby-identifier">compile_olist</span> <span class="ruby-identifier">f</span>
  <span class="ruby-keyword">when</span> <span class="ruby-regexp">%r&lt;\A\s*:\s&gt;</span>
    <span class="ruby-identifier">compile_dlist</span> <span class="ruby-identifier">f</span>
  <span class="ruby-keyword">when</span> <span class="ruby-regexp">%r&lt;\A//\}&gt;</span>
    <span class="ruby-identifier">f</span>.<span class="ruby-identifier">gets</span>
    <span class="ruby-identifier">error</span> <span class="ruby-string">&#39;block end seen but not opened&#39;</span>
  <span class="ruby-keyword">when</span> <span class="ruby-regexp">%r&lt;\A//[a-z]+&gt;</span>
    <span class="ruby-identifier">name</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">lines</span> = <span class="ruby-identifier">read_command</span>(<span class="ruby-identifier">f</span>)
    <span class="ruby-identifier">syntax</span> = <span class="ruby-identifier">syntax_descriptor</span>(<span class="ruby-identifier">name</span>)
    <span class="ruby-keyword">unless</span> <span class="ruby-identifier">syntax</span>
      <span class="ruby-identifier">error</span> <span class="ruby-node">&quot;unknown command: //#{name}&quot;</span>
      <span class="ruby-identifier">compile_unknown_command</span> <span class="ruby-identifier">args</span>, <span class="ruby-identifier">lines</span>
      <span class="ruby-keyword">next</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">compile_command</span> <span class="ruby-identifier">syntax</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">lines</span>
  <span class="ruby-keyword">when</span> <span class="ruby-regexp">%r&lt;\A//&gt;</span>
    <span class="ruby-identifier">line</span> = <span class="ruby-identifier">f</span>.<span class="ruby-identifier">gets</span>
    <span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;`//&#39; seen but is not valid command: #{line.strip.inspect}&quot;</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_open?</span>(<span class="ruby-identifier">line</span>)
      <span class="ruby-identifier">warn</span> <span class="ruby-string">&quot;skipping block...&quot;</span>
      <span class="ruby-identifier">read_block</span>(<span class="ruby-identifier">f</span>, <span class="ruby-keyword">false</span>)
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">peek</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">empty?</span>
      <span class="ruby-identifier">f</span>.<span class="ruby-identifier">gets</span>
      <span class="ruby-keyword">next</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">compile_paragraph</span> <span class="ruby-identifier">f</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">close_all_tagged_section</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-error" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">error</span><span
      class="method-args">(msg)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="error-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 560</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>error</span>(<span class=“ruby-identifier”>msg</span>)

<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">error</span> <span class="ruby-identifier">msg</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-headline" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">headline</span><span
      class="method-args">(level, label, caption)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="headline-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 320</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>headline</span>(<span class=“ruby-identifier”>level</span>, <span class=“ruby-identifier”>label</span>, <span class=“ruby-identifier”>caption</span>)

<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">headline</span> <span class="ruby-identifier">level</span>, <span class="ruby-identifier">label</span>, <span class="ruby-identifier">caption</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-open_tagged_section" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">open_tagged_section</span><span
      class="method-args">(tag, level, label, caption)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="open_tagged_section-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 328</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>open_tagged_section</span>(<span class=“ruby-identifier”>tag</span>, <span class=“ruby-identifier”>level</span>, <span class=“ruby-identifier”>label</span>, <span class=“ruby-identifier”>caption</span>)

<span class="ruby-identifier">mid</span> = <span class="ruby-node">&quot;#{tag}_begin&quot;</span>
<span class="ruby-keyword">unless</span> <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">mid</span>)
  <span class="ruby-identifier">error</span> <span class="ruby-node">&quot;strategy does not support tagged section: #{tag}&quot;</span>
  <span class="ruby-identifier">headline</span> <span class="ruby-identifier">level</span>, <span class="ruby-identifier">label</span>, <span class="ruby-identifier">caption</span>
  <span class="ruby-keyword">return</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@tagged_section</span>.<span class="ruby-identifier">push</span> [<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">level</span>]
<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">__send__</span> <span class="ruby-identifier">mid</span>, <span class="ruby-identifier">level</span>, <span class="ruby-identifier">label</span>, <span class="ruby-identifier">caption</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-parse_args" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">parse_args</span><span
      class="method-args">(str, name=nil)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="parse_args-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 466</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>parse_args</span>(<span class=“ruby-identifier”>str</span>, <span class=“ruby-identifier”>name</span>=<span class=“ruby-keyword”>nil</span>)

<span class="ruby-keyword">return</span> [] <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">empty?</span>
<span class="ruby-identifier">scanner</span> = <span class="ruby-constant">StringScanner</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">str</span>)
<span class="ruby-identifier">words</span> = []
<span class="ruby-keyword">while</span> <span class="ruby-identifier">word</span> = <span class="ruby-identifier">scanner</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-regexp">/(\[\]|\[.*?[^\]\])/</span>)
  <span class="ruby-identifier">w2</span> = <span class="ruby-identifier">word</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-2</span>].<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\(.)/</span>){
    <span class="ruby-identifier">ch</span> = <span class="ruby-node">$1</span>
    (<span class="ruby-identifier">ch</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;]&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">ch</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;\\&quot;</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">ch</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;\\&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">ch</span>
  }
  <span class="ruby-identifier">words</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">w2</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">scanner</span>.<span class="ruby-identifier">eos?</span>
  <span class="ruby-identifier">error</span> <span class="ruby-node">&quot;argument syntax error: #{scanner.rest} in #{str.inspect}&quot;</span>
  <span class="ruby-keyword">return</span> []
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">words</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-read_block" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">read_block</span><span
      class="method-args">(f, ignore_inline)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="read_block-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 446</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>read_block</span>(<span class=“ruby-identifier”>f</span>, <span class=“ruby-identifier”>ignore_inline</span>)

<span class="ruby-identifier">head</span> = <span class="ruby-identifier">f</span>.<span class="ruby-identifier">lineno</span>
<span class="ruby-identifier">buf</span> = []
<span class="ruby-identifier">f</span>.<span class="ruby-identifier">until_match</span>(<span class="ruby-regexp">%r&lt;\A//\}&gt;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">ignore_inline</span>
    <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">line</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-keyword">unless</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">=~</span> <span class="ruby-node">/\A\#@/</span>
      <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">text</span>(<span class="ruby-identifier">line</span>.<span class="ruby-identifier">rstrip</span>)
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-regexp">%r&lt;\A//\}&gt;</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">peek</span>
  <span class="ruby-identifier">error</span> <span class="ruby-node">&quot;unexpected EOF (block begins at: #{head})&quot;</span>
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">buf</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">f</span>.<span class="ruby-identifier">gets</span> <span class="ruby-comment"># discard terminator</span>
<span class="ruby-identifier">buf</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-read_command" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">read_command</span><span
      class="method-args">(f)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="read_command-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 433</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>read_command</span>(<span class=“ruby-identifier”>f</span>)

<span class="ruby-identifier">line</span> = <span class="ruby-identifier">f</span>.<span class="ruby-identifier">gets</span>
<span class="ruby-identifier">name</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">slice</span>(<span class="ruby-regexp">/[a-z]+/</span>).<span class="ruby-identifier">to_sym</span>
<span class="ruby-identifier">ignore_inline</span> = (<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-value">:embed</span>)
<span class="ruby-identifier">args</span> = <span class="ruby-identifier">parse_args</span>(<span class="ruby-identifier">line</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">%r&lt;\A//[a-z]+&gt;</span>, <span class="ruby-string">&#39;&#39;</span>).<span class="ruby-identifier">rstrip</span>.<span class="ruby-identifier">chomp</span>(<span class="ruby-string">&#39;{&#39;</span>), <span class="ruby-identifier">name</span>)
<span class="ruby-identifier">lines</span> = <span class="ruby-identifier">block_open?</span>(<span class="ruby-identifier">line</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">read_block</span>(<span class="ruby-identifier">f</span>, <span class="ruby-identifier">ignore_inline</span>) <span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">name</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">lines</span>

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-tagged_section_init" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">tagged_section_init</span><span
      class="method-args">()</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="tagged_section_init-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 324</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>tagged_section_init</span>

<span class="ruby-ivar">@tagged_section</span> = []

<span class=“ruby-keyword”>end</span></pre>

    </div>

  </div>

</div>

<div id="method-i-warn" class="method-detail ">

  <div class="method-heading">
    <span class="method-name">warn</span><span
      class="method-args">(msg)</span>

    <span class="method-click-advice">click to toggle source</span>

  </div>

  <div class="method-description">

    <div class="method-source-code" id="warn-source">
      <pre><span class="ruby-comment"># File lib/review/compiler.rb, line 556</span>

<span class=“ruby-keyword”>def</span> <span class=“ruby-identifier”>warn</span>(<span class=“ruby-identifier”>msg</span>)

<span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">warn</span> <span class="ruby-identifier">msg</span>

<span class=“ruby-keyword”>end</span></pre>

        </div>

      </div>

    </div>

  </section>

</section>

</main>

<footer id=“validator-badges” role=“contentinfo”>

<p><a href="http://validator.w3.org/check/referer">Validate</a>
<p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.

</footer>