<!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”>&</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">&</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”>&</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">&</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”>&</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">&</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">''</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">/(@<\w+>\{(?:[^\}\]|\.)*?\})/</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">"`@<xxx>' seen but is not valid inline op: #{w}"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">w</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-regexp">/@<\w+>/</span>).<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">1</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-regexp">/\A@<raw>/</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"><<</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">'}'</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\\/</span>, <span class="ruby-string">'\'</span>)) <span class="ruby-identifier">result</span> <span class="ruby-operator"><<</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”>></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">'{'</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">>=</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">"#{tag}_end"</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">"strategy does not support block op: #{mid}"</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">"strategy does not support command: //#{syntax.name}"</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">></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">'(NoArgument)'</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">"block is not allowed for command //#{syntax.name}; ignore"</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">''</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">"#{open_tag} is not opened."</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">></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@<(\w+)>\{(.*?)\}\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">"no such inline op: #{op}"</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">"inline_#{op}"</span>) <span class="ruby-identifier">raise</span> <span class="ruby-node">"strategy does not support inline op: @<#{op}>"</span> <span class="ruby-keyword">end</span> <span class="ruby-ivar">@strategy</span>.<span class="ruby-identifier">__send__</span>(<span class="ruby-node">"inline_#{op}"</span>, <span class="ruby-identifier">arg</span>)
<span class=“ruby-keyword”>rescue</span> =<span class=“ruby-operator”>></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">''</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<\A//|\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">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">"<!ESCAPETAB!>"</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">/<!ESCAPETAB!>/</span>, <span class="ruby-string">"\t"</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">''</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"><</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">></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">"block is required for //#{syntax.name}; use empty block"</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<\A\s+\*></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<\A\s+\d+\.></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<\A\s*:\s></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<\A//\}></span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">gets</span> <span class="ruby-identifier">error</span> <span class="ruby-string">'block end seen but not opened'</span> <span class="ruby-keyword">when</span> <span class="ruby-regexp">%r<\A//[a-z]+></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">"unknown command: //#{name}"</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<\A//></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">"`//' seen but is not valid command: #{line.strip.inspect}"</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">"skipping block..."</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">"#{tag}_begin"</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">"strategy does not support tagged section: #{tag}"</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">"]"</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">ch</span> <span class="ruby-operator">==</span> <span class="ruby-string">"\\"</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">ch</span> <span class="ruby-operator">:</span> <span class="ruby-string">"\\"</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">ch</span> } <span class="ruby-identifier">words</span> <span class="ruby-operator"><<</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">"argument syntax error: #{scanner.rest} in #{str.inspect}"</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<\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">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<\A//\}></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">"unexpected EOF (block begins at: #{head})"</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<\A//[a-z]+></span>, <span class="ruby-string">''</span>).<span class="ruby-identifier">rstrip</span>.<span class="ruby-identifier">chomp</span>(<span class="ruby-string">'{'</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="https://rdoc.github.io/rdoc">RDoc</a> 5.1.0. <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>