codnar 0.1.68 → 0.1.73

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,20 @@
1
+ 2012-03-18 Oren Ben-Kiki <github-oren@ben-kiki.org>
2
+
3
+ * Fix JS comment.
4
+ * Fix JS issue; remove unneeded files.
5
+
6
+ 2012-01-07 Oren Ben-Kiki <github-oren@ben-kiki.org>
7
+
8
+ * Add support for Haddock comments.
9
+
10
+ 2012-01-04 Oren Ben-Kiki <github-oren@ben-kiki.org>
11
+
12
+ * Support additional ("denoted") kind of comments.
13
+
14
+ 2011-09-23 Oren Ben-Kiki <github-oren@ben-kiki.org>
15
+
16
+ * Add support for CodeRay syntax highlighting.
17
+
1
18
  2011-09-13 Oren Ben-Kiki <github-oren@ben-kiki.org>
2
19
 
3
20
  * Add support for GraphViz documentation.
data/codnar.html CHANGED
@@ -678,14 +678,14 @@ This module contains all the code narrator code.
678
678
  <div class='rdoc comment markup'>
679
679
  <p>
680
680
  This version number. The third number is automatically updated to track the
681
- number of Git commits by running <tt>rake version</tt>.
681
+ number of Git commits by running <code>rake version</code>.
682
682
  </p>
683
683
  </div>
684
684
  </td>
685
685
  </tr>
686
686
  </table>
687
687
  <pre class='ruby code syntax'>
688
- <span class="Type">VERSION</span> = <span class="Special">&quot;</span><span class="Constant">0.1.68</span><span class="Special">&quot;</span>
688
+ <span class="Type">VERSION</span> = <span class="Special">&quot;</span><span class="Constant">0.1.73</span><span class="Special">&quot;</span>
689
689
 
690
690
  end
691
691
  </pre>
@@ -1018,7 +1018,9 @@ equal to [ “indentation”, “payload” ].
1018
1018
  </li><li>
1019
1019
  <p>
1020
1020
  The kind field of a transition can be ommitted; by default it is assumed to
1021
- be identical to the pattern kind.
1021
+ be identical to the pattern kind. If it ends up <tt>nil</tt>, this
1022
+ indicates that there’s no kind assigned by the pattern, and the current
1023
+ line should be classified again by the next state.
1022
1024
  </p>
1023
1025
  </li><li>
1024
1026
  <p>
@@ -1250,6 +1252,31 @@ Fill in the name field for state or pattern object.
1250
1252
  <div class="chunk html">
1251
1253
  <pre class='ruby code syntax'>
1252
1254
 
1255
+ </pre>
1256
+ <table class='layout'>
1257
+ <tr>
1258
+ <td class='indentation'>
1259
+ <pre></pre>
1260
+ </td>
1261
+ <td class='html'>
1262
+ <div class='rdoc comment markup'>
1263
+ <p>
1264
+ A pattern that matches any line and extracts no data; is meant to be used
1265
+ for catch-all transitions that transfer the scanning to a different state.
1266
+ It is used if no explicit pattern is specified in a transition (that is,
1267
+ you can think of this as the <tt>nil</tt> pattern).
1268
+ </p>
1269
+ </div>
1270
+ </td>
1271
+ </tr>
1272
+ </table>
1273
+ <pre class='ruby code syntax'>
1274
+ <span class="Type">CATCH_ALL_PATTERN</span> = {
1275
+ <span class="Special">&quot;</span><span class="Constant">kind</span><span class="Special">&quot;</span> =&gt; <span class="Constant">nil</span>,
1276
+ <span class="Special">&quot;</span><span class="Constant">groups</span><span class="Special">&quot;</span> =&gt; [],
1277
+ <span class="Special">&quot;</span><span class="Constant">regexp</span><span class="Special">&quot;</span> =&gt; <span class="Special">//</span>
1278
+ }
1279
+
1253
1280
  </pre>
1254
1281
  <table class='layout'>
1255
1282
  <tr>
@@ -1269,7 +1296,7 @@ Expand all the shorthands used in the state.
1269
1296
  <span class="PreProc">def</span> <span class="Identifier">expand_state_shorthands</span>(name, state)
1270
1297
  fill_name(name, state, <span class="Special">&quot;</span><span class="Constant">State</span><span class="Special">&quot;</span>)
1271
1298
  state.transitions.each <span class="Statement">do</span> |<span class="Identifier">transition</span>|
1272
- pattern = transition.pattern = lookup(<span class="Identifier">@syntax</span>.patterns, <span class="Special">&quot;</span><span class="Constant">pattern</span><span class="Special">&quot;</span>, transition.pattern)
1299
+ pattern = transition.pattern = lookup(<span class="Identifier">@syntax</span>.patterns, <span class="Special">&quot;</span><span class="Constant">pattern</span><span class="Special">&quot;</span>, transition.pattern || <span class="Type">CATCH_ALL_PATTERN</span>)
1273
1300
  transition.kind ||= pattern.andand.kind
1274
1301
  transition.next_state = lookup(<span class="Identifier">@syntax</span>.states, <span class="Special">&quot;</span><span class="Constant">state</span><span class="Special">&quot;</span>, transition.next_state || state)
1275
1302
  <span class="Statement">end</span>
@@ -1428,10 +1455,51 @@ Scan the next file line.
1428
1455
  </table>
1429
1456
  <pre class='ruby code syntax'>
1430
1457
  <span class="PreProc">def</span> <span class="Identifier">scan_line</span>(line)
1458
+ <span class="Statement">until</span> state_classified_line(line)
1459
+ </pre>
1460
+ <table class='layout'>
1461
+ <tr>
1462
+ <td class='indentation'>
1463
+ <pre> </pre>
1464
+ </td>
1465
+ <td class='html'>
1466
+ <div class='rdoc comment markup'>
1467
+ <p>
1468
+ Do nothing
1469
+ </p>
1470
+ </div>
1471
+ </td>
1472
+ </tr>
1473
+ </table>
1474
+ <pre class='ruby code syntax'>
1475
+ end
1476
+ end
1477
+
1478
+ </pre>
1479
+ <table class='layout'>
1480
+ <tr>
1481
+ <td class='indentation'>
1482
+ <pre></pre>
1483
+ </td>
1484
+ <td class='html'>
1485
+ <div class='rdoc comment markup'>
1486
+ <p>
1487
+ Scan the current line using the current state transitions. Return true if
1488
+ the line was classified, of false if we need to try and classify it again
1489
+ using the updated (next) state.
1490
+ </p>
1491
+ </div>
1492
+ </td>
1493
+ </tr>
1494
+ </table>
1495
+ <pre class='ruby code syntax'>
1496
+ <span class="PreProc">def</span> <span class="Identifier">state_classified_line</span>(line)
1431
1497
  <span class="Identifier">@state</span>.transitions.each <span class="Statement">do</span> |<span class="Identifier">transition</span>|
1432
- <span class="Statement">return</span> <span class="Statement">if</span> transition.pattern &amp;&amp; transition.next_state &amp;&amp; classify_matching_line(line, transition)
1498
+ match = transition.pattern.andand.regexp.andand.match(line) <span class="Statement">if</span> transition.next_state
1499
+ <span class="Statement">return</span> classify_matching_line(line, transition, match) <span class="Statement">if</span> match
1433
1500
  <span class="Statement">end</span>
1434
- unclassified_line(line, <span class="Identifier">@state</span>.name)
1501
+ classify_error_line(line, <span class="Identifier">@state</span>.name)
1502
+ <span class="Statement">return</span> <span class="Constant">true</span>
1435
1503
  <span class="PreProc">end</span>
1436
1504
 
1437
1505
  </pre>
@@ -1476,15 +1544,15 @@ Handle a file line, only if it matches the pattern.
1476
1544
  </tr>
1477
1545
  </table>
1478
1546
  <pre class='ruby code syntax'>
1479
- <span class="PreProc">def</span> <span class="Identifier">classify_matching_line</span>(line, transition)
1480
- match = (pattern = transition.pattern).regexp.match(line)
1481
- <span class="Statement">return</span> <span class="Constant">false</span> <span class="Statement">unless</span> match
1482
- <span class="Identifier">@lines</span> &lt;&lt; <span class="Type">Scanner</span>.extracted_groups(match, pattern.groups).update({
1547
+ <span class="PreProc">def</span> <span class="Identifier">classify_matching_line</span>(line, transition, match)
1548
+ <span class="Identifier">@state</span> = transition.next_state
1549
+ kind = transition.kind
1550
+ <span class="Statement">return</span> <span class="Constant">false</span> <span class="Statement">unless</span> kind <span class="Comment"># A +nil+ kind indicates the next state will classify the line.</span>
1551
+ <span class="Identifier">@lines</span> &lt;&lt; <span class="Type">Scanner</span>.extracted_groups(match, transition.pattern.groups || []).update({
1483
1552
  <span class="Special">&quot;</span><span class="Constant">line</span><span class="Special">&quot;</span> =&gt; line,
1484
- <span class="Special">&quot;</span><span class="Constant">kind</span><span class="Special">&quot;</span> =&gt; transition.kind,
1553
+ <span class="Special">&quot;</span><span class="Constant">kind</span><span class="Special">&quot;</span> =&gt; kind,
1485
1554
  <span class="Special">&quot;</span><span class="Constant">number</span><span class="Special">&quot;</span> =&gt; <span class="Identifier">@errors</span>.line_number
1486
1555
  })
1487
- <span class="Identifier">@state</span> = transition.next_state
1488
1556
  <span class="Statement">return</span> <span class="Constant">true</span>
1489
1557
  <span class="PreProc">end</span>
1490
1558
 
@@ -1530,7 +1598,7 @@ Handle a file line that couldn’t be classified.
1530
1598
  </tr>
1531
1599
  </table>
1532
1600
  <pre class='ruby code syntax'>
1533
- <span class="PreProc">def</span> <span class="Identifier">unclassified_line</span>(line, state_name)
1601
+ <span class="PreProc">def</span> <span class="Identifier">classify_error_line</span>(line, state_name)
1534
1602
  <span class="Identifier">@lines</span> &lt;&lt; {
1535
1603
  <span class="Special">&quot;</span><span class="Constant">line</span><span class="Special">&quot;</span> =&gt; line,
1536
1604
  <span class="Special">&quot;</span><span class="Constant">indentation</span><span class="Special">&quot;</span> =&gt; line.indentation,
@@ -2941,12 +3009,12 @@ Test expanding RDoc text.
2941
3009
  <span class="PreProc">end</span>
2942
3010
 
2943
3011
  <span class="PreProc">def</span> <span class="Identifier">test_strong_text</span>
2944
- <span class="Type">Codnar</span>::<span class="Type">RDoc</span>.to_html(<span class="Special">&quot;</span><span class="Constant">*text*</span><span class="Special">&quot;</span>).should == <span class="Special">&quot;</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Constant">&lt;b&gt;text&lt;/b&gt;</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>
3012
+ <span class="Type">Codnar</span>::<span class="Type">RDoc</span>.to_html(<span class="Special">&quot;</span><span class="Constant">*text*</span><span class="Special">&quot;</span>).should == <span class="Special">&quot;</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Constant">&lt;strong&gt;text&lt;/strong&gt;</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>
2945
3013
  <span class="PreProc">end</span>
2946
3014
 
2947
3015
  <span class="PreProc">def</span> <span class="Identifier">test_indented_pre</span>
2948
3016
  <span class="Type">Codnar</span>::<span class="Type">RDoc</span>.to_html(<span class="Special">&quot;</span><span class="Constant">base</span><span class="Special">\n</span><span class="Constant"> indented</span><span class="Special">\n</span><span class="Constant"> more</span><span class="Special">\n</span><span class="Constant">back</span><span class="Special">\n</span><span class="Special">&quot;</span>).should \
2949
- == <span class="Special">&quot;</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Constant">base</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Constant">&lt;pre&gt;</span><span class="Special">\n</span><span class="Constant">indented</span><span class="Special">\n</span><span class="Constant"> more</span><span class="Special">\n</span><span class="Constant">&lt;/pre&gt;</span><span class="Special">\n</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Constant">back</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>
3017
+ == <span class="Special">&quot;</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Constant">base</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Constant">&lt;pre&gt;indented</span><span class="Special">\n</span><span class="Constant"> more&lt;/pre&gt;</span><span class="Special">\n</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Constant">back</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>
2950
3018
  <span class="PreProc">end</span>
2951
3019
 
2952
3020
  <span class="PreProc">end</span>
@@ -3229,20 +3297,22 @@ end
3229
3297
  </div>
3230
3298
  </p>
3231
3299
  </li>
3232
- </ul>
3300
+ <li>
3233
3301
  <p>
3234
- In both cases, the HTML generated by the markup format conversion is a bit
3235
- messy. We therefore clean it up:
3302
+ Haddock, a specific markup syntax used in comments to document Haskell code.
3303
+ Here is a simple test that demonstrates using Haddock:
3236
3304
  </p>
3237
3305
  <p>
3238
3306
  <div class="named_with_containers chunk">
3239
3307
  <div class="chunk name">
3240
- <a name="clean-html">
3241
- <span>Clean HTML</span>
3308
+ <a name="test-expand-haddock-rb">
3309
+ <span>test/expand_haddock.rb</span>
3242
3310
  </a>
3243
3311
  </div>
3244
3312
  <div class="chunk html">
3245
3313
  <pre class='ruby code syntax'>
3314
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar</span><span class="Special">&quot;</span>
3315
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">test/spec</span><span class="Special">&quot;</span>
3246
3316
 
3247
3317
  </pre>
3248
3318
  <table class='layout'>
@@ -3253,176 +3323,164 @@ messy. We therefore clean it up:
3253
3323
  <td class='html'>
3254
3324
  <div class='rdoc comment markup'>
3255
3325
  <p>
3256
- Clean HTML generated by markup formatters. Such HTML tends to have extra
3257
- empty lines for no apparent reason. Cleaning it up seems to be safe enough,
3258
- and eliminates the ugly additional vertical space in the final HTML.
3326
+ Test expanding Haddock text.
3259
3327
  </p>
3260
3328
  </div>
3261
3329
  </td>
3262
3330
  </tr>
3263
3331
  </table>
3264
3332
  <pre class='ruby code syntax'>
3265
- <span class="PreProc">def</span> <span class="Identifier">clean_markup_html</span>
3266
- <span class="Statement">return</span> gsub(<span class="Special">/</span><span class="Special">\n</span><span class="Special">*</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Special">*</span><span class="Special">/</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>) \
3267
- .gsub(<span class="Special">/</span><span class="Special">\n</span><span class="Special">*</span><span class="Constant">&lt;</span><span class="Special">\/</span><span class="Constant">p&gt;</span><span class="Special">\n</span><span class="Special">*</span><span class="Special">/</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>) \
3268
- .gsub(<span class="Special">/</span><span class="Special">\n</span><span class="Special">*</span><span class="Constant">&lt;pre&gt;</span><span class="Special">\n</span><span class="Special">*</span><span class="Special">/</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Constant">&lt;pre&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>) \
3269
- .gsub(<span class="Special">/</span><span class="Special">\n</span><span class="Special">*</span><span class="Constant">&lt;</span><span class="Special">\/</span><span class="Constant">pre&gt;</span><span class="Special">\n</span><span class="Special">*</span><span class="Special">/</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Constant">&lt;/pre&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>) \
3270
- .sub(<span class="Special">/</span><span class="Special">^</span><span class="Special">\n</span><span class="Special">*</span><span class="Special">/</span>, <span class="Special">&quot;&quot;</span>)
3271
- <span class="PreProc">end</span>
3333
+ <span class="PreProc">class</span> <span class="Type">TestExpandHaddock</span> &lt; <span class="Type">Test</span>::<span class="Type">Unit</span>::<span class="Type">TestCase</span>
3334
+
3335
+ <span class="PreProc">def</span> <span class="Identifier">test_normal_text</span>
3336
+ <span class="Type">Codnar</span>::<span class="Type">Haddock</span>.to_html(<span class="Special">&quot;</span><span class="Constant">normal</span><span class="Special">&quot;</span>).should == <span class="Special">&quot;</span><span class="Constant">&lt;p&gt;normal</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>
3337
+ <span class="PreProc">end</span>
3338
+
3339
+ <span class="PreProc">def</span> <span class="Identifier">test_identifier_text</span>
3340
+ <span class="Type">Codnar</span>::<span class="Type">Haddock</span>.to_html(<span class="Special">&quot;</span><span class="Constant">'Int'</span><span class="Special">&quot;</span>).should == <span class="Special">&quot;</span><span class="Constant">&lt;p&gt;&lt;code&gt;Int&lt;/code&gt;</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>
3341
+ <span class="PreProc">end</span>
3342
+
3343
+ <span class="PreProc">def</span> <span class="Identifier">test_emphasis_text</span>
3344
+ <span class="Type">Codnar</span>::<span class="Type">Haddock</span>.to_html(<span class="Special">&quot;</span><span class="Constant">/emphasis/</span><span class="Special">&quot;</span>).should == <span class="Special">&quot;</span><span class="Constant">&lt;p&gt;&lt;em&gt;emphasis&lt;/em&gt;</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>
3345
+ <span class="PreProc">end</span>
3346
+
3347
+ <span class="PreProc">def</span> <span class="Identifier">test_code_text</span>
3348
+ <span class="Type">Codnar</span>::<span class="Type">Haddock</span>.to_html(<span class="Special">&quot;</span><span class="Constant">@code@</span><span class="Special">&quot;</span>).should == <span class="Special">&quot;</span><span class="Constant">&lt;pre&gt;code&lt;/pre&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>
3349
+ <span class="PreProc">end</span>
3272
3350
 
3351
+ <span class="PreProc">end</span>
3273
3352
  </pre>
3274
3353
  </div>
3275
- <div class="chunk containers">
3276
- <span class="chunk containers header">Contained in:</span>
3277
- <ul class="chunk containers">
3278
- <li class="chunk container">
3279
- <a class="chunk container" href="#lib-codnar-string-extensions-rb">lib/codnar/string_extensions.rb</a>
3280
- </li>
3281
- </ul>
3282
- </div>
3283
3354
  </div>
3284
3355
  </p>
3285
- <h4>Generating diagrams using GraphViz</h4>
3286
- <p>
3287
- If you have <code>graphviz</code> installed, it is possible to use it to generate SVG
3288
- diagrams that can be embedded directly into the HTML. This is implemented as an
3289
- additional formatter; in principle, you this allows embeding the GraphViz
3290
- directives directly in the code, but in practice people prefer keeping the
3291
- diagrams as separate files.
3292
- </p>
3293
- <p>
3294
- We pre-process the GraphViz directives using the <code>m4</code> macro processor. This
3295
- allows dramatically reducing the amount of repeated boilerplate in the diagram
3296
- definitions, by defining macros for node and edge styles and, if desired, more
3297
- advanced techniques.
3298
- </p>
3299
3356
  <p>
3300
- Here is a simple test that demonstrates generating SVG from a GraphViz diagram:
3357
+ And here is the implementation:
3301
3358
  </p>
3302
3359
  <p>
3303
3360
  <div class="named_with_containers chunk">
3304
3361
  <div class="chunk name">
3305
- <a name="test-graphviz-diagrams-rb">
3306
- <span>test/graphviz_diagrams.rb</span>
3362
+ <a name="lib-codnar-haddock-rb">
3363
+ <span>lib/codnar/haddock.rb</span>
3307
3364
  </a>
3308
3365
  </div>
3309
3366
  <div class="chunk html">
3310
3367
  <pre class='ruby code syntax'>
3311
- <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar</span><span class="Special">&quot;</span>
3312
- <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">test/spec</span><span class="Special">&quot;</span>
3368
+ <span class="PreProc">module</span> <span class="Type">Codnar</span>
3313
3369
 
3314
3370
  </pre>
3315
- <table class='layout'>
3371
+ <table class='layout'>
3316
3372
  <tr>
3317
3373
  <td class='indentation'>
3318
- <pre></pre>
3374
+ <pre> </pre>
3319
3375
  </td>
3320
3376
  <td class='html'>
3321
3377
  <div class='rdoc comment markup'>
3322
3378
  <p>
3323
- Test highlighting syntax using GVim.
3379
+ Convert Haddoc to HTML.
3324
3380
  </p>
3325
3381
  </div>
3326
3382
  </td>
3327
3383
  </tr>
3328
3384
  </table>
3329
3385
  <pre class='ruby code syntax'>
3330
- <span class="PreProc">class</span> <span class="Type">TestGraphVizDiagrams</span> &lt; <span class="Type">Test</span>::<span class="Type">Unit</span>::<span class="Type">TestCase</span>
3386
+ <span class="PreProc">class</span> <span class="Type">Haddock</span>
3331
3387
 
3332
- <span class="Type">MINIMAL_DIAGRAM_SVG</span> = &lt;&lt;-<span class="Special">EOF</span>.unindent <span class="Comment">#! ((( svg</span>
3333
- </pre>
3334
- <pre class='svg code syntax'>
3335
- <span class="Identifier">&lt;</span><span class="Identifier">svg</span><span class="Identifier"> </span><span class="Type">width</span>=<span class="Constant">&quot;62pt&quot;</span><span class="Identifier"> </span><span class="Type">height</span>=<span class="Constant">&quot;116pt&quot;</span>
3336
- <span class="Identifier"> </span><span class="Type">viewBox</span>=<span class="Constant">&quot;0.00 0.00 62.00 116.00&quot;</span><span class="Identifier"> </span><span class="Type">xmlns</span>=<span class="Constant">&quot;<a href="http://www.w3.org/2000/svg">http://www.w3.org/2000/svg</a>&quot;</span><span class="Identifier"> </span><span class="Type">xmlns</span><span class="Comment">:</span><span class="Type">xlink</span>=<span class="Constant">&quot;<a href="http://www.w3.org/1999/xlink">http://www.w3.org/1999/xlink</a>&quot;</span><span class="Identifier">&gt;</span>
3337
- <span class="Identifier">&lt;</span><span class="Identifier">g</span><span class="Identifier"> </span><span class="Type">id</span>=<span class="Constant">&quot;graph1&quot;</span><span class="Identifier"> </span><span class="Type">class</span>=<span class="Constant">&quot;graph&quot;</span><span class="Identifier"> </span><span class="Type">transform</span>=<span class="Constant">&quot;scale(1 1) rotate(0) translate(4 112)&quot;</span><span class="Identifier">&gt;</span>
3338
- <span class="Identifier">&lt;</span><span class="Identifier">title</span><span class="Identifier">&gt;</span>_anonymous_0<span class="Identifier">&lt;/title&gt;</span>
3339
- <span class="Identifier">&lt;</span><span class="Identifier">polygon</span><span class="Identifier"> </span><span class="Type">fill</span>=<span class="Constant">&quot;white&quot;</span><span class="Identifier"> </span><span class="Type">stroke</span>=<span class="Constant">&quot;white&quot;</span><span class="Identifier"> </span><span class="Type">points</span>=<span class="Constant">&quot;-4,5 -4,-112 59,-112 59,5 -4,5&quot;</span><span class="Identifier">/&gt;</span>
3340
- <span class="Comment">&lt;!</span><span class="Comment">-- A --</span><span class="Comment">&gt;</span>
3341
- <span class="Identifier">&lt;</span><span class="Identifier">g</span><span class="Identifier"> </span><span class="Type">id</span>=<span class="Constant">&quot;node1&quot;</span><span class="Identifier"> </span><span class="Type">class</span>=<span class="Constant">&quot;node&quot;</span><span class="Identifier">&gt;&lt;</span><span class="Identifier">title</span><span class="Identifier">&gt;</span>A<span class="Identifier">&lt;/title&gt;</span>
3342
- <span class="Identifier">&lt;</span><span class="Identifier">ellipse</span><span class="Identifier"> </span><span class="Type">fill</span>=<span class="Constant">&quot;none&quot;</span><span class="Identifier"> </span><span class="Type">stroke</span>=<span class="Constant">&quot;black&quot;</span><span class="Identifier"> </span><span class="Type">cx</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">cy</span>=<span class="Constant">&quot;-90&quot;</span><span class="Identifier"> </span><span class="Type">rx</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">ry</span>=<span class="Constant">&quot;18&quot;</span><span class="Identifier">/&gt;</span>
3343
- <span class="Identifier">&lt;</span><span class="Identifier">text</span><span class="Identifier"> </span><span class="Type">text-anchor</span>=<span class="Constant">&quot;middle&quot;</span><span class="Identifier"> </span><span class="Type">x</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">y</span>=<span class="Constant">&quot;-85.4&quot;</span><span class="Identifier"> </span><span class="Type">font-family</span>=<span class="Constant">&quot;Times New Roman,serif&quot;</span><span class="Identifier"> </span><span class="Type">font-size</span>=<span class="Constant">&quot;14.00&quot;</span><span class="Identifier">&gt;</span>A<span class="Identifier">&lt;/text&gt;</span>
3344
- <span class="Identifier">&lt;/g&gt;</span>
3345
- <span class="Comment">&lt;!</span><span class="Comment">-- B --</span><span class="Comment">&gt;</span>
3346
- <span class="Identifier">&lt;</span><span class="Identifier">g</span><span class="Identifier"> </span><span class="Type">id</span>=<span class="Constant">&quot;node3&quot;</span><span class="Identifier"> </span><span class="Type">class</span>=<span class="Constant">&quot;node&quot;</span><span class="Identifier">&gt;&lt;</span><span class="Identifier">title</span><span class="Identifier">&gt;</span>B<span class="Identifier">&lt;/title&gt;</span>
3347
- <span class="Identifier">&lt;</span><span class="Identifier">ellipse</span><span class="Identifier"> </span><span class="Type">fill</span>=<span class="Constant">&quot;none&quot;</span><span class="Identifier"> </span><span class="Type">stroke</span>=<span class="Constant">&quot;black&quot;</span><span class="Identifier"> </span><span class="Type">cx</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">cy</span>=<span class="Constant">&quot;-18&quot;</span><span class="Identifier"> </span><span class="Type">rx</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">ry</span>=<span class="Constant">&quot;18&quot;</span><span class="Identifier">/&gt;</span>
3348
- <span class="Identifier">&lt;</span><span class="Identifier">text</span><span class="Identifier"> </span><span class="Type">text-anchor</span>=<span class="Constant">&quot;middle&quot;</span><span class="Identifier"> </span><span class="Type">x</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">y</span>=<span class="Constant">&quot;-13.4&quot;</span><span class="Identifier"> </span><span class="Type">font-family</span>=<span class="Constant">&quot;Times New Roman,serif&quot;</span><span class="Identifier"> </span><span class="Type">font-size</span>=<span class="Constant">&quot;14.00&quot;</span><span class="Identifier">&gt;</span>B<span class="Identifier">&lt;/text&gt;</span>
3349
- <span class="Identifier">&lt;/g&gt;</span>
3350
- <span class="Comment">&lt;!</span><span class="Comment">-- A&amp;#45;&amp;gt;B --</span><span class="Comment">&gt;</span>
3351
- <span class="Identifier">&lt;</span><span class="Identifier">g</span><span class="Identifier"> </span><span class="Type">id</span>=<span class="Constant">&quot;edge2&quot;</span><span class="Identifier"> </span><span class="Type">class</span>=<span class="Constant">&quot;edge&quot;</span><span class="Identifier">&gt;&lt;</span><span class="Identifier">title</span><span class="Identifier">&gt;</span>A<span class="Type">&amp;</span><span class="Statement">#45</span><span class="Type">;&amp;</span><span class="Statement">gt</span><span class="Type">;</span>B<span class="Identifier">&lt;/title&gt;</span>
3352
- <span class="Identifier">&lt;</span><span class="Identifier">path</span><span class="Identifier"> </span><span class="Type">fill</span>=<span class="Constant">&quot;none&quot;</span><span class="Identifier"> </span><span class="Type">stroke</span>=<span class="Constant">&quot;black&quot;</span><span class="Identifier"> </span><span class="Type">d</span>=<span class="Constant">&quot;M27,-71.8314C27,-64.131 27,-54.9743 27,-46.4166&quot;</span><span class="Identifier">/&gt;</span>
3353
- <span class="Identifier">&lt;</span><span class="Identifier">polygon</span><span class="Identifier"> </span><span class="Type">fill</span>=<span class="Constant">&quot;black&quot;</span><span class="Identifier"> </span><span class="Type">stroke</span>=<span class="Constant">&quot;black&quot;</span><span class="Identifier"> </span><span class="Type">points</span>=<span class="Constant">&quot;30.5001,-46.4132 27,-36.4133 23.5001,-46.4133 30.5001,-46.4132&quot;</span><span class="Identifier">/&gt;</span>
3354
- <span class="Identifier">&lt;/g&gt;</span>
3355
- <span class="Identifier">&lt;/g&gt;</span>
3356
- <span class="Identifier">&lt;/svg&gt;</span>
3357
- EOF
3358
3388
  </pre>
3389
+ <table class='layout'>
3390
+ <tr>
3391
+ <td class='indentation'>
3392
+ <pre> </pre>
3393
+ </td>
3394
+ <td class='html'>
3395
+ <div class='rdoc comment markup'>
3396
+ <p>
3397
+ Process a Haddock String and return the resulting HTML.
3398
+ </p>
3399
+ </div>
3400
+ </td>
3401
+ </tr>
3402
+ </table>
3359
3403
  <pre class='ruby code syntax'>
3360
- <span class="Comment">#! ))) svg</span>
3404
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">to_html</span>(haddock)
3405
+ with_temporary_directory <span class="Statement">do</span> |<span class="Identifier">path</span>|
3406
+ write_temporary_file(path, haddock)
3407
+ run_haddock(path)
3408
+ html = read_html_file(path)
3409
+ clean_html(html)
3410
+ <span class="Statement">end</span>
3411
+ <span class="PreProc">end</span>
3361
3412
 
3362
- <span class="PreProc">def</span> <span class="Identifier">test_valid_diagram</span>
3363
- diagram = &lt;&lt;-<span class="Special">EOF</span>.unindent <span class="Comment">#! ((( dot</span>
3364
- </pre>
3365
- <pre class='dot code syntax'>
3366
- <span class="Identifier">define</span><span class="Statement">(</span>`<span class="Identifier">X</span>', `<span class="Identifier">A</span>'<span class="Statement">)</span>
3367
- <span class="Statement">digraph</span> <span class="Statement">{</span>
3368
- <span class="Identifier">X</span> <span class="Statement">-&gt;</span> <span class="Identifier">B</span><span class="Statement">;</span>
3369
- <span class="Statement">}</span>
3370
- <span class="Identifier">EOF</span>
3371
- </pre>
3372
- <pre class='ruby code syntax'>
3373
- <span class="Comment">#! ))) dot</span>
3374
- <span class="Type">Codnar</span>::<span class="Type">GraphViz</span>.to_html(diagram).should == <span class="Type">MINIMAL_DIAGRAM_SVG</span>
3375
- end
3413
+ <span class="Statement">protected</span>
3376
3414
 
3377
- <span class="PreProc">def</span> <span class="Identifier">test_invalid_diagram</span>
3378
- diagram = &lt;&lt;-<span class="Special">EOF</span>.unindent <span class="Comment">#! ((( dot</span>
3379
- </pre>
3380
- <pre class='dot code syntax'>
3381
- <span class="Statement">digraph</span> <span class="Statement">{</span>
3382
- <span class="Identifier">A</span> <span class="Statement">-&gt;</span>
3383
- <span class="Identifier">EOF</span>
3384
3415
  </pre>
3416
+ <table class='layout'>
3417
+ <tr>
3418
+ <td class='indentation'>
3419
+ <pre> </pre>
3420
+ </td>
3421
+ <td class='html'>
3422
+ <div class='rdoc comment markup'>
3423
+ <p>
3424
+ Run a block using a temporary directory, that is then removed. TODO: This
3425
+ should be in some more generic place.
3426
+ </p>
3427
+ </div>
3428
+ </td>
3429
+ </tr>
3430
+ </table>
3385
3431
  <pre class='ruby code syntax'>
3386
- <span class="Comment">#! ))) dot</span>
3387
- <span class="Statement">lambda</span> { <span class="Type">Codnar</span>::<span class="Type">GraphViz</span>.to_html(diagram) }.should.raise
3388
- end
3432
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">with_temporary_directory</span>
3433
+ path = create_temporary_directory
3434
+ result = <span class="Statement">yield</span> path
3435
+ <span class="Type">FileUtils</span>.rm_rf(path)
3436
+ <span class="Statement">return</span> result
3437
+ <span class="PreProc">end</span>
3389
3438
 
3390
- end
3391
3439
  </pre>
3392
- </div>
3393
- </div>
3394
- </p>
3440
+ <table class='layout'>
3441
+ <tr>
3442
+ <td class='indentation'>
3443
+ <pre> </pre>
3444
+ </td>
3445
+ <td class='html'>
3446
+ <div class='rdoc comment markup'>
3395
3447
  <p>
3396
- And here is the implementation:
3448
+ Create a temporary directory to run Haddock in.
3397
3449
  </p>
3398
- <p>
3399
- <div class="named_with_containers chunk">
3400
- <div class="chunk name">
3401
- <a name="lib-codnar-graphviz-rb">
3402
- <span>lib/codnar/graphviz.rb</span>
3403
- </a>
3404
3450
  </div>
3405
- <div class="chunk html">
3451
+ </td>
3452
+ </tr>
3453
+ </table>
3406
3454
  <pre class='ruby code syntax'>
3407
- <span class="PreProc">module</span> <span class="Type">Codnar</span>
3455
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">create_temporary_directory</span>
3456
+ file = <span class="Type">Tempfile</span>.open(<span class="Special">&quot;</span><span class="Constant">dir</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">.</span><span class="Special">&quot;</span>)
3457
+ path = file.path
3458
+ <span class="Type">File</span>.delete(path)
3459
+ <span class="Type">Dir</span>.mkdir(path)
3460
+ <span class="Statement">return</span> path
3461
+ <span class="PreProc">end</span>
3408
3462
 
3409
3463
  </pre>
3410
- <table class='layout'>
3464
+ <table class='layout'>
3411
3465
  <tr>
3412
3466
  <td class='indentation'>
3413
- <pre> </pre>
3467
+ <pre> </pre>
3414
3468
  </td>
3415
3469
  <td class='html'>
3416
3470
  <div class='rdoc comment markup'>
3417
3471
  <p>
3418
- Generate diagrams using GraphViz.
3472
+ Minimal header to insert before the Haddock String to trick Haddock into
3473
+ generating HTML from it.
3419
3474
  </p>
3420
3475
  </div>
3421
3476
  </td>
3422
3477
  </tr>
3423
3478
  </table>
3424
3479
  <pre class='ruby code syntax'>
3425
- <span class="PreProc">class</span> <span class="Type">GraphViz</span>
3480
+ <span class="Type">HADDOCK_HEADER</span> = &lt;&lt;-<span class="Special">EOF</span>.unindent
3481
+ <span class="Constant"> module Wrapper where</span>
3482
+ <span class="Constant"> -- $doc</span>
3483
+ <span class="Constant"> </span><span class="Special">EOF</span>
3426
3484
 
3427
3485
  </pre>
3428
3486
  <table class='layout'>
@@ -3433,26 +3491,21 @@ Generate diagrams using GraphViz.
3433
3491
  <td class='html'>
3434
3492
  <div class='rdoc comment markup'>
3435
3493
  <p>
3436
- Convert a string containing a GraphViz diagram into SVG suitable for
3437
- embedding into the HTML documentation. We pre-process the diagram using M4
3438
- to allow cutting down on the boilerplate (repeating the same styles in many
3439
- nodes etc.). This should not be harmful for diagrams that do not use M4
3440
- commands.
3494
+ Write the Haddock String into a wrapper Haskell file so we’ll be able to
3495
+ run Haddock to generate HTML from it.
3441
3496
  </p>
3442
3497
  </div>
3443
3498
  </td>
3444
3499
  </tr>
3445
3500
  </table>
3446
3501
  <pre class='ruby code syntax'>
3447
- <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">to_html</span>(diagram)
3448
- stdin, stdout, stderr = <span class="Type">Open3</span>.popen3(<span class="Special">&quot;</span><span class="Constant">m4 | dot -Tsvg</span><span class="Special">&quot;</span>)
3449
- write_diagram(stdin, diagram)
3450
- check_for_errors(stderr)
3451
- <span class="Statement">return</span> clean_output(stdout)
3502
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">write_temporary_file</span>(path, haddock)
3503
+ <span class="Type">File</span>.open(path + <span class="Special">&quot;</span><span class="Constant">/wrapper.hs</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">w</span><span class="Special">&quot;</span>) <span class="Statement">do</span> |<span class="Identifier">file</span>|
3504
+ file.write(<span class="Type">HADDOCK_HEADER</span>)
3505
+ file.write(<span class="Special">&quot;</span><span class="Constant">-- </span><span class="Special">&quot;</span> + haddock.gsub(<span class="Special">&quot;</span><span class="Special">\n</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Constant">-- </span><span class="Special">&quot;</span>))
3506
+ <span class="Statement">end</span>
3452
3507
  <span class="PreProc">end</span>
3453
3508
 
3454
- <span class="Statement">protected</span>
3455
-
3456
3509
  </pre>
3457
3510
  <table class='layout'>
3458
3511
  <tr>
@@ -3462,16 +3515,15 @@ commands.
3462
3515
  <td class='html'>
3463
3516
  <div class='rdoc comment markup'>
3464
3517
  <p>
3465
- Send the diagram to the commands pipe.
3518
+ Run Haddock to convert the wrapper Haskell file into HTML documentation.
3466
3519
  </p>
3467
3520
  </div>
3468
3521
  </td>
3469
3522
  </tr>
3470
3523
  </table>
3471
3524
  <pre class='ruby code syntax'>
3472
- <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">write_diagram</span>(stdin, diagram)
3473
- stdin.write(diagram)
3474
- stdin.close
3525
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">run_haddock</span>(path)
3526
+ system(<span class="Special">&quot;</span><span class="Constant">cd </span><span class="Special">#{</span>path<span class="Special">}</span><span class="Constant"> &amp;&amp; haddock --html wrapper.hs &gt; haddock.out 2&gt;&amp;1</span><span class="Special">&quot;</span>)
3475
3527
  <span class="PreProc">end</span>
3476
3528
 
3477
3529
  </pre>
@@ -3483,17 +3535,15 @@ Send the diagram to the commands pipe.
3483
3535
  <td class='html'>
3484
3536
  <div class='rdoc comment markup'>
3485
3537
  <p>
3486
- Ensure we got no processing errors from either m4 or dot. If we did, raise
3487
- them, and they will be handled by the formatter wrapping code.
3538
+ Read the HTML generated by Haddock.
3488
3539
  </p>
3489
3540
  </div>
3490
3541
  </td>
3491
3542
  </tr>
3492
3543
  </table>
3493
3544
  <pre class='ruby code syntax'>
3494
- <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">check_for_errors</span>(stderr)
3495
- errors = stderr.read
3496
- <span class="Statement">raise</span> errors.sub(<span class="Special">/</span><span class="Constant">Error: &lt;stdin&gt;:</span><span class="Special">\d</span><span class="Special">+</span><span class="Constant">: </span><span class="Special">/</span>, <span class="Special">&quot;&quot;</span>) <span class="Statement">if</span> errors != <span class="Special">&quot;&quot;</span>
3545
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">read_html_file</span>(path)
3546
+ <span class="Statement">return</span> <span class="Type">File</span>.read(path + <span class="Special">&quot;</span><span class="Constant">/Wrapper.html</span><span class="Special">&quot;</span>)
3497
3547
  <span class="PreProc">end</span>
3498
3548
 
3499
3549
  </pre>
@@ -3505,15 +3555,18 @@ them, and they will be handled by the formatter wrapping code.
3505
3555
  <td class='html'>
3506
3556
  <div class='rdoc comment markup'>
3507
3557
  <p>
3508
- Clean the SVG we got to make it suitable for embedding in HTML.
3558
+ Extract the clean generated HTML from Haddock’s output.
3509
3559
  </p>
3510
3560
  </div>
3511
3561
  </td>
3512
3562
  </tr>
3513
3563
  </table>
3514
3564
  <pre class='ruby code syntax'>
3515
- <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">clean_output</span>(stdout)
3516
- <span class="Statement">return</span> stdout.read.sub(<span class="Special">/</span><span class="Special">.</span><span class="Special">*</span><span class="Constant">&lt;svg</span><span class="Special">/m</span>, <span class="Special">&quot;</span><span class="Constant">&lt;svg</span><span class="Special">&quot;</span>).gsub(<span class="Special">/</span><span class="Special">\r</span><span class="Special">/</span>, <span class="Special">&quot;&quot;</span>)
3565
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">clean_html</span>(html)
3566
+ html.gsub!(<span class="Special">&quot;</span><span class="Special">\r\n</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Special">&quot;</span>)
3567
+ html.sub!(<span class="Special">/</span><span class="Special">.</span><span class="Special">*</span><span class="Constant">&lt;div class=&quot;doc&quot;&gt;</span><span class="Special">/m</span>, <span class="Special">''</span>)
3568
+ html.sub!(<span class="Special">/</span><span class="Constant">&lt;</span><span class="Special">\/</span><span class="Constant">div&gt;&lt;</span><span class="Special">\/</span><span class="Constant">div&gt;&lt;</span><span class="Special">\/</span><span class="Constant">div&gt;&lt;div id=&quot;footer&quot;&gt;</span><span class="Special">.</span><span class="Special">*</span><span class="Special">/m</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Special">&quot;</span>)
3569
+ <span class="Statement">return</span> html
3517
3570
  <span class="PreProc">end</span>
3518
3571
 
3519
3572
  end
@@ -3523,20 +3576,83 @@ end
3523
3576
  </div>
3524
3577
  </div>
3525
3578
  </p>
3526
- <h4>Syntax highlighting using GVIM</h4>
3579
+ </li>
3580
+ </ul>
3527
3581
  <p>
3528
- If you have GVim istalled, it is possible to use it to generate syntax
3529
- highlighting. This is a <em>slow</em> operation, as GVim was never meant to be used as
3530
- a command-line tool. However, what it lacks in speed it compensates for in
3531
- scope; almost any language you can think of has a GVim syntax highlighting
3532
- definition. Here is a simple test that demonstrates using GVim for syntax
3533
- highlighting:
3582
+ In all cases, the HTML generated by the markup format conversion is a bit
3583
+ messy. We therefore clean it up:
3534
3584
  </p>
3535
3585
  <p>
3536
3586
  <div class="named_with_containers chunk">
3537
3587
  <div class="chunk name">
3538
- <a name="test-gvim-highlight-syntax-rb">
3539
- <span>test/gvim_highlight_syntax.rb</span>
3588
+ <a name="clean-html">
3589
+ <span>Clean HTML</span>
3590
+ </a>
3591
+ </div>
3592
+ <div class="chunk html">
3593
+ <pre class='ruby code syntax'>
3594
+
3595
+ </pre>
3596
+ <table class='layout'>
3597
+ <tr>
3598
+ <td class='indentation'>
3599
+ <pre></pre>
3600
+ </td>
3601
+ <td class='html'>
3602
+ <div class='rdoc comment markup'>
3603
+ <p>
3604
+ Clean HTML generated by markup formatters. Such HTML tends to have extra
3605
+ empty lines for no apparent reason. Cleaning it up seems to be safe enough,
3606
+ and eliminates the ugly additional vertical space in the final HTML.
3607
+ </p>
3608
+ </div>
3609
+ </td>
3610
+ </tr>
3611
+ </table>
3612
+ <pre class='ruby code syntax'>
3613
+ <span class="PreProc">def</span> <span class="Identifier">clean_markup_html</span>
3614
+ <span class="Statement">return</span> gsub(<span class="Special">&quot;</span><span class="Special">\r\n</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Special">&quot;</span>) \
3615
+ .gsub(<span class="Special">/</span><span class="Special">\n</span><span class="Special">*</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Special">*</span><span class="Special">/</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>) \
3616
+ .gsub(<span class="Special">/</span><span class="Special">\n</span><span class="Special">*</span><span class="Constant">&lt;</span><span class="Special">\/</span><span class="Constant">p&gt;</span><span class="Special">\n</span><span class="Special">*</span><span class="Special">/</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>) \
3617
+ .gsub(<span class="Special">/</span><span class="Special">\n</span><span class="Special">*</span><span class="Constant">&lt;pre&gt;</span><span class="Special">\n</span><span class="Special">+</span><span class="Special">/</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Constant">&lt;pre&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>) \
3618
+ .gsub(<span class="Special">/</span><span class="Special">\n</span><span class="Special">+</span><span class="Constant">&lt;</span><span class="Special">\/</span><span class="Constant">pre&gt;</span><span class="Special">\n</span><span class="Special">*</span><span class="Special">/</span>, <span class="Special">&quot;</span><span class="Special">\n</span><span class="Constant">&lt;/pre&gt;</span><span class="Special">\n</span><span class="Special">&quot;</span>) \
3619
+ .sub(<span class="Special">/</span><span class="Special">^</span><span class="Special">\n</span><span class="Special">*</span><span class="Special">/</span>, <span class="Special">&quot;&quot;</span>)
3620
+ <span class="PreProc">end</span>
3621
+
3622
+ </pre>
3623
+ </div>
3624
+ <div class="chunk containers">
3625
+ <span class="chunk containers header">Contained in:</span>
3626
+ <ul class="chunk containers">
3627
+ <li class="chunk container">
3628
+ <a class="chunk container" href="#lib-codnar-string-extensions-rb">lib/codnar/string_extensions.rb</a>
3629
+ </li>
3630
+ </ul>
3631
+ </div>
3632
+ </div>
3633
+ </p>
3634
+ <h4>Generating diagrams using GraphViz</h4>
3635
+ <p>
3636
+ If you have <code>graphviz</code> installed, it is possible to use it to generate SVG
3637
+ diagrams that can be embedded directly into the HTML. This is implemented as an
3638
+ additional formatter; in principle, you this allows embeding the GraphViz
3639
+ directives directly in the code, but in practice people prefer keeping the
3640
+ diagrams as separate files.
3641
+ </p>
3642
+ <p>
3643
+ We pre-process the GraphViz directives using the <code>m4</code> macro processor. This
3644
+ allows dramatically reducing the amount of repeated boilerplate in the diagram
3645
+ definitions, by defining macros for node and edge styles and, if desired, more
3646
+ advanced techniques.
3647
+ </p>
3648
+ <p>
3649
+ Here is a simple test that demonstrates generating SVG from a GraphViz diagram:
3650
+ </p>
3651
+ <p>
3652
+ <div class="named_with_containers chunk">
3653
+ <div class="chunk name">
3654
+ <a name="test-graphviz-diagrams-rb">
3655
+ <span>test/graphviz_diagrams.rb</span>
3540
3656
  </a>
3541
3657
  </div>
3542
3658
  <div class="chunk html">
@@ -3560,56 +3676,64 @@ Test highlighting syntax using GVim.
3560
3676
  </tr>
3561
3677
  </table>
3562
3678
  <pre class='ruby code syntax'>
3563
- <span class="PreProc">class</span> <span class="Type">TestGVimHighlightSyntax</span> &lt; <span class="Type">Test</span>::<span class="Type">Unit</span>::<span class="Type">TestCase</span>
3564
-
3565
- <span class="PreProc">def</span> <span class="Identifier">setup</span>
3566
- <span class="Type">Codnar</span>::<span class="Type">GVim</span>.force_recompute = <span class="Constant">true</span>
3567
- <span class="PreProc">end</span>
3679
+ <span class="PreProc">class</span> <span class="Type">TestGraphVizDiagrams</span> &lt; <span class="Type">Test</span>::<span class="Type">Unit</span>::<span class="Type">TestCase</span>
3568
3680
 
3569
- <span class="PreProc">def</span> <span class="Identifier">teardown</span>
3570
- <span class="Type">Codnar</span>::<span class="Type">GVim</span>.force_recompute = <span class="Constant">false</span>
3571
- <span class="PreProc">end</span>
3681
+ <span class="Type">MINIMAL_DIAGRAM_SVG</span> = &lt;&lt;-<span class="Special">EOF</span>.unindent <span class="Comment">#! ((( svg</span>
3682
+ </pre>
3683
+ <pre class='svg code syntax'>
3684
+ <span class="Identifier">&lt;</span><span class="Identifier">svg</span><span class="Identifier"> </span><span class="Type">width</span>=<span class="Constant">&quot;62pt&quot;</span><span class="Identifier"> </span><span class="Type">height</span>=<span class="Constant">&quot;116pt&quot;</span>
3685
+ <span class="Identifier"> </span><span class="Type">viewBox</span>=<span class="Constant">&quot;0.00 0.00 62.00 116.00&quot;</span><span class="Identifier"> </span><span class="Type">xmlns</span>=<span class="Constant">&quot;<a href="http://www.w3.org/2000/svg">http://www.w3.org/2000/svg</a>&quot;</span><span class="Identifier"> </span><span class="Type">xmlns</span><span class="Comment">:</span><span class="Type">xlink</span>=<span class="Constant">&quot;<a href="http://www.w3.org/1999/xlink">http://www.w3.org/1999/xlink</a>&quot;</span><span class="Identifier">&gt;</span>
3686
+ <span class="Identifier">&lt;</span><span class="Identifier">g</span><span class="Identifier"> </span><span class="Type">id</span>=<span class="Constant">&quot;graph1&quot;</span><span class="Identifier"> </span><span class="Type">class</span>=<span class="Constant">&quot;graph&quot;</span><span class="Identifier"> </span><span class="Type">transform</span>=<span class="Constant">&quot;scale(1 1) rotate(0) translate(4 112)&quot;</span><span class="Identifier">&gt;</span>
3687
+ <span class="Identifier">&lt;</span><span class="Identifier">title</span><span class="Identifier">&gt;</span>_anonymous_0<span class="Identifier">&lt;/title&gt;</span>
3688
+ <span class="Identifier">&lt;</span><span class="Identifier">polygon</span><span class="Identifier"> </span><span class="Type">fill</span>=<span class="Constant">&quot;white&quot;</span><span class="Identifier"> </span><span class="Type">stroke</span>=<span class="Constant">&quot;white&quot;</span><span class="Identifier"> </span><span class="Type">points</span>=<span class="Constant">&quot;-4,5 -4,-112 59,-112 59,5 -4,5&quot;</span><span class="Identifier">/&gt;</span>
3689
+ <span class="Comment">&lt;!</span><span class="Comment">-- A --</span><span class="Comment">&gt;</span>
3690
+ <span class="Identifier">&lt;</span><span class="Identifier">g</span><span class="Identifier"> </span><span class="Type">id</span>=<span class="Constant">&quot;node1&quot;</span><span class="Identifier"> </span><span class="Type">class</span>=<span class="Constant">&quot;node&quot;</span><span class="Identifier">&gt;&lt;</span><span class="Identifier">title</span><span class="Identifier">&gt;</span>A<span class="Identifier">&lt;/title&gt;</span>
3691
+ <span class="Identifier">&lt;</span><span class="Identifier">ellipse</span><span class="Identifier"> </span><span class="Type">fill</span>=<span class="Constant">&quot;none&quot;</span><span class="Identifier"> </span><span class="Type">stroke</span>=<span class="Constant">&quot;black&quot;</span><span class="Identifier"> </span><span class="Type">cx</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">cy</span>=<span class="Constant">&quot;-90&quot;</span><span class="Identifier"> </span><span class="Type">rx</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">ry</span>=<span class="Constant">&quot;18&quot;</span><span class="Identifier">/&gt;</span>
3692
+ <span class="Identifier">&lt;</span><span class="Identifier">text</span><span class="Identifier"> </span><span class="Type">text-anchor</span>=<span class="Constant">&quot;middle&quot;</span><span class="Identifier"> </span><span class="Type">x</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">y</span>=<span class="Constant">&quot;-85.4&quot;</span><span class="Identifier"> </span><span class="Type">font-family</span>=<span class="Constant">&quot;Times New Roman,serif&quot;</span><span class="Identifier"> </span><span class="Type">font-size</span>=<span class="Constant">&quot;14.00&quot;</span><span class="Identifier">&gt;</span>A<span class="Identifier">&lt;/text&gt;</span>
3693
+ <span class="Identifier">&lt;/g&gt;</span>
3694
+ <span class="Comment">&lt;!</span><span class="Comment">-- B --</span><span class="Comment">&gt;</span>
3695
+ <span class="Identifier">&lt;</span><span class="Identifier">g</span><span class="Identifier"> </span><span class="Type">id</span>=<span class="Constant">&quot;node3&quot;</span><span class="Identifier"> </span><span class="Type">class</span>=<span class="Constant">&quot;node&quot;</span><span class="Identifier">&gt;&lt;</span><span class="Identifier">title</span><span class="Identifier">&gt;</span>B<span class="Identifier">&lt;/title&gt;</span>
3696
+ <span class="Identifier">&lt;</span><span class="Identifier">ellipse</span><span class="Identifier"> </span><span class="Type">fill</span>=<span class="Constant">&quot;none&quot;</span><span class="Identifier"> </span><span class="Type">stroke</span>=<span class="Constant">&quot;black&quot;</span><span class="Identifier"> </span><span class="Type">cx</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">cy</span>=<span class="Constant">&quot;-18&quot;</span><span class="Identifier"> </span><span class="Type">rx</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">ry</span>=<span class="Constant">&quot;18&quot;</span><span class="Identifier">/&gt;</span>
3697
+ <span class="Identifier">&lt;</span><span class="Identifier">text</span><span class="Identifier"> </span><span class="Type">text-anchor</span>=<span class="Constant">&quot;middle&quot;</span><span class="Identifier"> </span><span class="Type">x</span>=<span class="Constant">&quot;27&quot;</span><span class="Identifier"> </span><span class="Type">y</span>=<span class="Constant">&quot;-13.4&quot;</span><span class="Identifier"> </span><span class="Type">font-family</span>=<span class="Constant">&quot;Times New Roman,serif&quot;</span><span class="Identifier"> </span><span class="Type">font-size</span>=<span class="Constant">&quot;14.00&quot;</span><span class="Identifier">&gt;</span>B<span class="Identifier">&lt;/text&gt;</span>
3698
+ <span class="Identifier">&lt;/g&gt;</span>
3699
+ <span class="Comment">&lt;!</span><span class="Comment">-- A&amp;#45;&amp;gt;B --</span><span class="Comment">&gt;</span>
3700
+ <span class="Identifier">&lt;</span><span class="Identifier">g</span><span class="Identifier"> </span><span class="Type">id</span>=<span class="Constant">&quot;edge2&quot;</span><span class="Identifier"> </span><span class="Type">class</span>=<span class="Constant">&quot;edge&quot;</span><span class="Identifier">&gt;&lt;</span><span class="Identifier">title</span><span class="Identifier">&gt;</span>A<span class="Type">&amp;</span><span class="Statement">#45</span><span class="Type">;&amp;</span><span class="Statement">gt</span><span class="Type">;</span>B<span class="Identifier">&lt;/title&gt;</span>
3701
+ <span class="Identifier">&lt;</span><span class="Identifier">path</span><span class="Identifier"> </span><span class="Type">fill</span>=<span class="Constant">&quot;none&quot;</span><span class="Identifier"> </span><span class="Type">stroke</span>=<span class="Constant">&quot;black&quot;</span><span class="Identifier"> </span><span class="Type">d</span>=<span class="Constant">&quot;M27,-71.8314C27,-64.131 27,-54.9743 27,-46.4166&quot;</span><span class="Identifier">/&gt;</span>
3702
+ <span class="Identifier">&lt;</span><span class="Identifier">polygon</span><span class="Identifier"> </span><span class="Type">fill</span>=<span class="Constant">&quot;black&quot;</span><span class="Identifier"> </span><span class="Type">stroke</span>=<span class="Constant">&quot;black&quot;</span><span class="Identifier"> </span><span class="Type">points</span>=<span class="Constant">&quot;30.5001,-46.4132 27,-36.4133 23.5001,-46.4133 30.5001,-46.4132&quot;</span><span class="Identifier">/&gt;</span>
3703
+ <span class="Identifier">&lt;/g&gt;</span>
3704
+ <span class="Identifier">&lt;/g&gt;</span>
3705
+ <span class="Identifier">&lt;/svg&gt;</span>
3706
+ EOF
3707
+ </pre>
3708
+ <pre class='ruby code syntax'>
3709
+ <span class="Comment">#! ))) svg</span>
3572
3710
 
3573
- <span class="PreProc">def</span> <span class="Identifier">test_ruby_no_css</span>
3574
- ruby = &lt;&lt;-<span class="Special">EOF</span>.unindent
3575
- <span class="Constant"> def foo</span>
3576
- <span class="Constant"> return bar = baz</span>
3577
- <span class="Constant"> end</span>
3578
- <span class="Constant"> </span><span class="Special">EOF</span>
3579
- <span class="Type">Codnar</span>::<span class="Type">GVim</span>.cached_syntax_to_html(ruby, <span class="Special">&quot;</span><span class="Constant">ruby</span><span class="Special">&quot;</span>).should == &lt;&lt;-<span class="Special">EOF</span>.unindent <span class="Comment">#! ((( html</span>
3711
+ <span class="PreProc">def</span> <span class="Identifier">test_valid_diagram</span>
3712
+ diagram = &lt;&lt;-<span class="Special">EOF</span>.unindent <span class="Comment">#! ((( dot</span>
3580
3713
  </pre>
3581
- <pre class='html code syntax'>
3582
- <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'ruby code syntax'</span><span class="Identifier"> </span><span class="Type">bgcolor</span><span class="Identifier">=</span><span class="Constant">&quot;#ffffff&quot;</span><span class="Identifier"> </span><span class="Type">text</span><span class="Identifier">=</span><span class="Constant">&quot;#000000&quot;</span><span class="Identifier">&gt;</span>
3583
- <span class="Identifier">&lt;</span><span class="Statement">font</span><span class="Identifier"> </span><span class="Type">face</span><span class="Identifier">=</span><span class="Constant">&quot;monospace&quot;</span><span class="Identifier">&gt;</span>
3584
- <span class="Identifier">&lt;</span><span class="Statement">font</span><span class="Identifier"> </span><span class="Type">color</span><span class="Identifier">=</span><span class="Constant">&quot;#ff40ff&quot;</span><span class="Identifier">&gt;</span>def<span class="Identifier">&lt;/</span><span class="Statement">font</span><span class="Identifier">&gt;</span><span class="Special">&amp;nbsp;</span><span class="Identifier">&lt;</span><span class="Statement">font</span><span class="Identifier"> </span><span class="Type">color</span><span class="Identifier">=</span><span class="Constant">&quot;#00ffff&quot;</span><span class="Identifier">&gt;</span>foo<span class="Identifier">&lt;/</span><span class="Statement">font</span><span class="Identifier">&gt;</span><span class="Identifier">&lt;</span><span class="Statement">br</span><span class="Identifier"> /&gt;</span>
3585
- <span class="Special">&amp;nbsp;&amp;nbsp;</span><span class="Identifier">&lt;</span><span class="Statement">font</span><span class="Identifier"> </span><span class="Type">color</span><span class="Identifier">=</span><span class="Constant">&quot;#ffff00&quot;</span><span class="Identifier">&gt;</span>return<span class="Identifier">&lt;/</span><span class="Statement">font</span><span class="Identifier">&gt;</span><span class="Special">&amp;nbsp;</span>bar = baz<span class="Identifier">&lt;</span><span class="Statement">br</span><span class="Identifier"> /&gt;</span>
3586
- <span class="Identifier">&lt;</span><span class="Statement">font</span><span class="Identifier"> </span><span class="Type">color</span><span class="Identifier">=</span><span class="Constant">&quot;#ff40ff&quot;</span><span class="Identifier">&gt;</span>end<span class="Identifier">&lt;/</span><span class="Statement">font</span><span class="Identifier">&gt;</span><span class="Identifier">&lt;</span><span class="Statement">br</span><span class="Identifier"> /&gt;</span>
3587
- <span class="Identifier">&lt;/</span><span class="Statement">font</span><span class="Identifier">&gt;</span>
3588
- <span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
3589
- EOF
3714
+ <pre class='dot code syntax'>
3715
+ <span class="Identifier">define</span><span class="Statement">(</span>`<span class="Identifier">X</span>', `<span class="Identifier">A</span>'<span class="Statement">)</span>
3716
+ <span class="Statement">digraph</span> <span class="Statement">{</span>
3717
+ <span class="Identifier">X</span> <span class="Statement">-&gt;</span> <span class="Identifier">B</span><span class="Statement">;</span>
3718
+ <span class="Statement">}</span>
3719
+ <span class="Identifier">EOF</span>
3590
3720
  </pre>
3591
3721
  <pre class='ruby code syntax'>
3592
- <span class="Comment">#! ))) html</span>
3722
+ <span class="Comment">#! ))) dot</span>
3723
+ <span class="Type">Codnar</span>::<span class="Type">GraphViz</span>.to_html(diagram).should == <span class="Type">MINIMAL_DIAGRAM_SVG</span>
3593
3724
  end
3594
3725
 
3595
- <span class="PreProc">def</span> <span class="Identifier">test_ruby_css</span>
3596
- ruby = &lt;&lt;-<span class="Special">EOF</span>.unindent
3597
- <span class="Constant"> def foo</span>
3598
- <span class="Constant"> return bar = baz</span>
3599
- <span class="Constant"> end</span>
3600
- <span class="Constant"> </span><span class="Special">EOF</span>
3601
- <span class="Type">Codnar</span>::<span class="Type">GVim</span>.cached_syntax_to_html(ruby, <span class="Special">&quot;</span><span class="Constant">ruby</span><span class="Special">&quot;</span>, [ <span class="Special">&quot;</span><span class="Constant">+:let html_use_css=1</span><span class="Special">&quot;</span> ]).should == &lt;&lt;-<span class="Special">EOF</span>.unindent <span class="Comment">#! ((( html</span>
3726
+ <span class="PreProc">def</span> <span class="Identifier">test_invalid_diagram</span>
3727
+ diagram = &lt;&lt;-<span class="Special">EOF</span>.unindent <span class="Comment">#! ((( dot</span>
3602
3728
  </pre>
3603
- <pre class='html code syntax'>
3604
- <span class="Identifier">&lt;</span><span class="Statement">pre</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'ruby code syntax'</span><span class="Identifier">&gt;</span>
3605
- <span class="Identifier">&lt;</span><span class="Statement">span</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;PreProc&quot;</span><span class="Identifier">&gt;</span>def<span class="Identifier">&lt;/</span><span class="Statement">span</span><span class="Identifier">&gt;</span> <span class="Identifier">&lt;</span><span class="Statement">span</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;Identifier&quot;</span><span class="Identifier">&gt;</span>foo<span class="Identifier">&lt;/</span><span class="Statement">span</span><span class="Identifier">&gt;</span>
3606
- <span class="Identifier">&lt;</span><span class="Statement">span</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;Statement&quot;</span><span class="Identifier">&gt;</span>return<span class="Identifier">&lt;/</span><span class="Statement">span</span><span class="Identifier">&gt;</span> bar = baz
3607
- <span class="Identifier">&lt;</span><span class="Statement">span</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;PreProc&quot;</span><span class="Identifier">&gt;</span>end<span class="Identifier">&lt;/</span><span class="Statement">span</span><span class="Identifier">&gt;</span>
3608
- <span class="Identifier">&lt;/</span><span class="Statement">pre</span><span class="Identifier">&gt;</span>
3609
- EOF
3729
+ <pre class='dot code syntax'>
3730
+ <span class="Statement">digraph</span> <span class="Statement">{</span>
3731
+ <span class="Identifier">A</span> <span class="Statement">-&gt;</span>
3732
+ <span class="Identifier">EOF</span>
3610
3733
  </pre>
3611
3734
  <pre class='ruby code syntax'>
3612
- <span class="Comment">#! ))) html</span>
3735
+ <span class="Comment">#! ))) dot</span>
3736
+ <span class="Statement">lambda</span> { <span class="Type">Codnar</span>::<span class="Type">GraphViz</span>.to_html(diagram) }.should.raise
3613
3737
  end
3614
3738
 
3615
3739
  end
@@ -3623,8 +3747,8 @@ And here is the implementation:
3623
3747
  <p>
3624
3748
  <div class="named_with_containers chunk">
3625
3749
  <div class="chunk name">
3626
- <a name="lib-codnar-gvim-rb">
3627
- <span>lib/codnar/gvim.rb</span>
3750
+ <a name="lib-codnar-graphviz-rb">
3751
+ <span>lib/codnar/graphviz.rb</span>
3628
3752
  </a>
3629
3753
  </div>
3630
3754
  <div class="chunk html">
@@ -3640,14 +3764,14 @@ And here is the implementation:
3640
3764
  <td class='html'>
3641
3765
  <div class='rdoc comment markup'>
3642
3766
  <p>
3643
- Syntax highlight using GVim.
3767
+ Generate diagrams using GraphViz.
3644
3768
  </p>
3645
3769
  </div>
3646
3770
  </td>
3647
3771
  </tr>
3648
3772
  </table>
3649
3773
  <pre class='ruby code syntax'>
3650
- <span class="PreProc">class</span> <span class="Type">GVim</span>
3774
+ <span class="PreProc">class</span> <span class="Type">GraphViz</span>
3651
3775
 
3652
3776
  </pre>
3653
3777
  <table class='layout'>
@@ -3658,22 +3782,26 @@ Syntax highlight using GVim.
3658
3782
  <td class='html'>
3659
3783
  <div class='rdoc comment markup'>
3660
3784
  <p>
3661
- Convert a sequence of classified code lines to HTML using GVim syntax
3662
- highlighting. The commands array allows configuring the way that GVim will
3663
- format the output (see the <tt>cached_syntax_to_html</tt> method for
3664
- details).
3785
+ Convert a string containing a GraphViz diagram into SVG suitable for
3786
+ embedding into the HTML documentation. We pre-process the diagram using M4
3787
+ to allow cutting down on the boilerplate (repeating the same styles in many
3788
+ nodes etc.). This should not be harmful for diagrams that do not use M4
3789
+ commands.
3665
3790
  </p>
3666
3791
  </div>
3667
3792
  </td>
3668
3793
  </tr>
3669
3794
  </table>
3670
3795
  <pre class='ruby code syntax'>
3671
- <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">lines_to_html</span>(lines, syntax, commands = [])
3672
- <span class="Statement">return</span> <span class="Type">Formatter</span>.merge_lines(lines, <span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span>) <span class="Statement">do</span> |<span class="Identifier">payload</span>|
3673
- <span class="Type">GVim</span>.cached_syntax_to_html(payload + <span class="Special">&quot;</span><span class="Special">\n</span><span class="Special">&quot;</span>, syntax, commands).chomp
3674
- <span class="Statement">end</span>
3796
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">to_html</span>(diagram)
3797
+ stdin, stdout, stderr = <span class="Type">Open3</span>.popen3(<span class="Special">&quot;</span><span class="Constant">m4 | dot -Tsvg</span><span class="Special">&quot;</span>)
3798
+ write_diagram(stdin, diagram)
3799
+ check_for_errors(stderr)
3800
+ <span class="Statement">return</span> clean_output(stdout)
3675
3801
  <span class="PreProc">end</span>
3676
3802
 
3803
+ <span class="Statement">protected</span>
3804
+
3677
3805
  </pre>
3678
3806
  <table class='layout'>
3679
3807
  <tr>
@@ -3683,17 +3811,17 @@ details).
3683
3811
  <td class='html'>
3684
3812
  <div class='rdoc comment markup'>
3685
3813
  <p>
3686
- The cache used for speeding up recomputing the same syntax highlighting
3687
- HTML.
3814
+ Send the diagram to the commands pipe.
3688
3815
  </p>
3689
3816
  </div>
3690
3817
  </td>
3691
3818
  </tr>
3692
3819
  </table>
3693
3820
  <pre class='ruby code syntax'>
3694
- <span class="Identifier">@cache</span> = <span class="Type">Cache</span>.new(<span class="Special">&quot;</span><span class="Constant">.gvim-cache</span><span class="Special">&quot;</span>) <span class="Statement">do</span> |<span class="Identifier">data</span>|
3695
- <span class="Type">GVim</span>.uncached_syntax_to_html(data.text, data.syntax, data.commands)
3696
- <span class="Statement">end</span>
3821
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">write_diagram</span>(stdin, diagram)
3822
+ stdin.write(diagram)
3823
+ stdin.close
3824
+ <span class="PreProc">end</span>
3697
3825
 
3698
3826
  </pre>
3699
3827
  <table class='layout'>
@@ -3704,16 +3832,17 @@ HTML.
3704
3832
  <td class='html'>
3705
3833
  <div class='rdoc comment markup'>
3706
3834
  <p>
3707
- Force recomputation of the syntax highlighting HTML, even if a cached
3708
- version exists.
3835
+ Ensure we got no processing errors from either m4 or dot. If we did, raise
3836
+ them, and they will be handled by the formatter wrapping code.
3709
3837
  </p>
3710
3838
  </div>
3711
3839
  </td>
3712
3840
  </tr>
3713
3841
  </table>
3714
3842
  <pre class='ruby code syntax'>
3715
- <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">force_recompute=</span>(force_recompute)
3716
- <span class="Identifier">@cache</span>.force_recompute = force_recompute
3843
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">check_for_errors</span>(stderr)
3844
+ errors = stderr.read
3845
+ <span class="Statement">raise</span> errors.sub(<span class="Special">/</span><span class="Constant">Error: &lt;stdin&gt;:</span><span class="Special">\d</span><span class="Special">+</span><span class="Constant">: </span><span class="Special">/</span>, <span class="Special">&quot;&quot;</span>) <span class="Statement">if</span> errors != <span class="Special">&quot;&quot;</span>
3717
3846
  <span class="PreProc">end</span>
3718
3847
 
3719
3848
  </pre>
@@ -3725,55 +3854,275 @@ version exists.
3725
3854
  <td class='html'>
3726
3855
  <div class='rdoc comment markup'>
3727
3856
  <p>
3728
- Highlight syntax of text using GVim. This uses the GVim standard CSS
3729
- classes to mark keywords, identifiers, and so on. See the GVim
3730
- documentation for details. The commands array allows configuring the way
3731
- that GVim will format the output. For example:
3732
- </p>
3733
- <ul><li>
3734
- <p>
3735
- The command <tt>&quot;+:colorscheme &lt;name&gt;&quot;</tt> will override
3736
- the default color scheme used.
3737
- </p>
3738
- </li><li>
3739
- <p>
3740
- The command <tt>&quot;+:let html_use_css=1&quot;</tt> will just annotate
3741
- each HTML tag with a CSS class, instead of embedding some specific style
3742
- directly into the tag. In this case the colorscheme and background are
3743
- ignored; you will need to provide your own CSS stylesheet as part of the
3744
- final woven document to style the marked-up words.
3745
- </p>
3746
- </li></ul>
3747
- <p>
3748
- Additional commands may be useful; GVim provides a full scripting
3749
- environment so there is no theoretical limit to what can be done here.
3750
- </p>
3751
- <p>
3752
- Since GVim is as slow as molasses to start up, we cache the results of
3753
- highlighting the syntax of each code fragment in a directory called
3754
- <tt>.gvim-cache</tt>, which can appear at the current working directory or
3755
- in any of its parents.
3857
+ Clean the SVG we got to make it suitable for embedding in HTML.
3756
3858
  </p>
3757
3859
  </div>
3758
3860
  </td>
3759
3861
  </tr>
3760
3862
  </table>
3761
3863
  <pre class='ruby code syntax'>
3762
- <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">cached_syntax_to_html</span>(text, syntax, commands = [])
3763
- data = { <span class="Special">&quot;</span><span class="Constant">text</span><span class="Special">&quot;</span> =&gt; text, <span class="Special">&quot;</span><span class="Constant">syntax</span><span class="Special">&quot;</span> =&gt; syntax, <span class="Special">&quot;</span><span class="Constant">commands</span><span class="Special">&quot;</span> =&gt; commands }
3764
- <span class="Statement">return</span> <span class="Identifier">@cache</span>[data]
3864
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">clean_output</span>(stdout)
3865
+ <span class="Statement">return</span> stdout.read.sub(<span class="Special">/</span><span class="Special">.</span><span class="Special">*</span><span class="Constant">&lt;svg</span><span class="Special">/m</span>, <span class="Special">&quot;</span><span class="Constant">&lt;svg</span><span class="Special">&quot;</span>).gsub(<span class="Special">/</span><span class="Special">\r</span><span class="Special">/</span>, <span class="Special">&quot;&quot;</span>)
3765
3866
  <span class="PreProc">end</span>
3766
3867
 
3868
+ end
3869
+
3870
+ end
3767
3871
  </pre>
3768
- <table class='layout'>
3769
- <tr>
3770
- <td class='indentation'>
3771
- <pre> </pre>
3772
- </td>
3773
- <td class='html'>
3774
- <div class='rdoc comment markup'>
3872
+ </div>
3873
+ </div>
3874
+ </p>
3875
+ <h4>Syntax highlighting using GVIM</h4>
3775
3876
  <p>
3776
- Highlight syntax of text using GVim, without caching. This is <b>slow</b>
3877
+ If you have GVim istalled, it is possible to use it to generate syntax
3878
+ highlighting. This is a <em>slow</em> operation, as GVim was never meant to be used as
3879
+ a command-line tool. However, what it lacks in speed it compensates for in
3880
+ scope; almost any language you can think of has a GVim syntax highlighting
3881
+ definition. Here is a simple test that demonstrates using GVim for syntax
3882
+ highlighting:
3883
+ </p>
3884
+ <p>
3885
+ <div class="named_with_containers chunk">
3886
+ <div class="chunk name">
3887
+ <a name="test-gvim-highlight-syntax-rb">
3888
+ <span>test/gvim_highlight_syntax.rb</span>
3889
+ </a>
3890
+ </div>
3891
+ <div class="chunk html">
3892
+ <pre class='ruby code syntax'>
3893
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar</span><span class="Special">&quot;</span>
3894
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">test/spec</span><span class="Special">&quot;</span>
3895
+
3896
+ </pre>
3897
+ <table class='layout'>
3898
+ <tr>
3899
+ <td class='indentation'>
3900
+ <pre></pre>
3901
+ </td>
3902
+ <td class='html'>
3903
+ <div class='rdoc comment markup'>
3904
+ <p>
3905
+ Test highlighting syntax using GVim.
3906
+ </p>
3907
+ </div>
3908
+ </td>
3909
+ </tr>
3910
+ </table>
3911
+ <pre class='ruby code syntax'>
3912
+ <span class="PreProc">class</span> <span class="Type">TestGVimHighlightSyntax</span> &lt; <span class="Type">Test</span>::<span class="Type">Unit</span>::<span class="Type">TestCase</span>
3913
+
3914
+ <span class="PreProc">def</span> <span class="Identifier">setup</span>
3915
+ <span class="Type">Codnar</span>::<span class="Type">GVim</span>.force_recompute = <span class="Constant">true</span>
3916
+ <span class="PreProc">end</span>
3917
+
3918
+ <span class="PreProc">def</span> <span class="Identifier">teardown</span>
3919
+ <span class="Type">Codnar</span>::<span class="Type">GVim</span>.force_recompute = <span class="Constant">false</span>
3920
+ <span class="PreProc">end</span>
3921
+
3922
+ <span class="PreProc">def</span> <span class="Identifier">test_ruby_no_css</span>
3923
+ ruby = &lt;&lt;-<span class="Special">EOF</span>.unindent
3924
+ <span class="Constant"> def foo</span>
3925
+ <span class="Constant"> return bar = baz</span>
3926
+ <span class="Constant"> end</span>
3927
+ <span class="Constant"> </span><span class="Special">EOF</span>
3928
+ <span class="Type">Codnar</span>::<span class="Type">GVim</span>.cached_syntax_to_html(ruby, <span class="Special">&quot;</span><span class="Constant">ruby</span><span class="Special">&quot;</span>).should == &lt;&lt;-<span class="Special">EOF</span>.unindent <span class="Comment">#! ((( html</span>
3929
+ </pre>
3930
+ <pre class='html code syntax'>
3931
+ <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'ruby code syntax'</span><span class="Identifier"> </span><span class="Type">bgcolor</span><span class="Identifier">=</span><span class="Constant">&quot;#ffffff&quot;</span><span class="Identifier"> </span><span class="Type">text</span><span class="Identifier">=</span><span class="Constant">&quot;#000000&quot;</span><span class="Identifier">&gt;</span>
3932
+ <span class="Identifier">&lt;</span><span class="Statement">font</span><span class="Identifier"> </span><span class="Type">face</span><span class="Identifier">=</span><span class="Constant">&quot;monospace&quot;</span><span class="Identifier">&gt;</span>
3933
+ <span class="Identifier">&lt;</span><span class="Statement">font</span><span class="Identifier"> </span><span class="Type">color</span><span class="Identifier">=</span><span class="Constant">&quot;#ff40ff&quot;</span><span class="Identifier">&gt;</span>def<span class="Identifier">&lt;/</span><span class="Statement">font</span><span class="Identifier">&gt;</span><span class="Special">&amp;nbsp;</span><span class="Identifier">&lt;</span><span class="Statement">font</span><span class="Identifier"> </span><span class="Type">color</span><span class="Identifier">=</span><span class="Constant">&quot;#00ffff&quot;</span><span class="Identifier">&gt;</span>foo<span class="Identifier">&lt;/</span><span class="Statement">font</span><span class="Identifier">&gt;</span><span class="Identifier">&lt;</span><span class="Statement">br</span><span class="Identifier"> /&gt;</span>
3934
+ <span class="Special">&amp;nbsp;&amp;nbsp;</span><span class="Identifier">&lt;</span><span class="Statement">font</span><span class="Identifier"> </span><span class="Type">color</span><span class="Identifier">=</span><span class="Constant">&quot;#ffff00&quot;</span><span class="Identifier">&gt;</span>return<span class="Identifier">&lt;/</span><span class="Statement">font</span><span class="Identifier">&gt;</span><span class="Special">&amp;nbsp;</span>bar = baz<span class="Identifier">&lt;</span><span class="Statement">br</span><span class="Identifier"> /&gt;</span>
3935
+ <span class="Identifier">&lt;</span><span class="Statement">font</span><span class="Identifier"> </span><span class="Type">color</span><span class="Identifier">=</span><span class="Constant">&quot;#ff40ff&quot;</span><span class="Identifier">&gt;</span>end<span class="Identifier">&lt;/</span><span class="Statement">font</span><span class="Identifier">&gt;</span><span class="Identifier">&lt;</span><span class="Statement">br</span><span class="Identifier"> /&gt;</span>
3936
+ <span class="Identifier">&lt;/</span><span class="Statement">font</span><span class="Identifier">&gt;</span>
3937
+ <span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
3938
+ EOF
3939
+ </pre>
3940
+ <pre class='ruby code syntax'>
3941
+ <span class="Comment">#! ))) html</span>
3942
+ end
3943
+
3944
+ <span class="PreProc">def</span> <span class="Identifier">test_ruby_css</span>
3945
+ ruby = &lt;&lt;-<span class="Special">EOF</span>.unindent
3946
+ <span class="Constant"> def foo</span>
3947
+ <span class="Constant"> return bar = baz</span>
3948
+ <span class="Constant"> end</span>
3949
+ <span class="Constant"> </span><span class="Special">EOF</span>
3950
+ <span class="Type">Codnar</span>::<span class="Type">GVim</span>.cached_syntax_to_html(ruby, <span class="Special">&quot;</span><span class="Constant">ruby</span><span class="Special">&quot;</span>, [ <span class="Special">&quot;</span><span class="Constant">+:let html_use_css=1</span><span class="Special">&quot;</span> ]).should == &lt;&lt;-<span class="Special">EOF</span>.unindent <span class="Comment">#! ((( html</span>
3951
+ </pre>
3952
+ <pre class='html code syntax'>
3953
+ <span class="Identifier">&lt;</span><span class="Statement">pre</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'ruby code syntax'</span><span class="Identifier">&gt;</span>
3954
+ <span class="Identifier">&lt;</span><span class="Statement">span</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;PreProc&quot;</span><span class="Identifier">&gt;</span>def<span class="Identifier">&lt;/</span><span class="Statement">span</span><span class="Identifier">&gt;</span> <span class="Identifier">&lt;</span><span class="Statement">span</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;Identifier&quot;</span><span class="Identifier">&gt;</span>foo<span class="Identifier">&lt;/</span><span class="Statement">span</span><span class="Identifier">&gt;</span>
3955
+ <span class="Identifier">&lt;</span><span class="Statement">span</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;Statement&quot;</span><span class="Identifier">&gt;</span>return<span class="Identifier">&lt;/</span><span class="Statement">span</span><span class="Identifier">&gt;</span> bar = baz
3956
+ <span class="Identifier">&lt;</span><span class="Statement">span</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">&quot;PreProc&quot;</span><span class="Identifier">&gt;</span>end<span class="Identifier">&lt;/</span><span class="Statement">span</span><span class="Identifier">&gt;</span>
3957
+ <span class="Identifier">&lt;/</span><span class="Statement">pre</span><span class="Identifier">&gt;</span>
3958
+ EOF
3959
+ </pre>
3960
+ <pre class='ruby code syntax'>
3961
+ <span class="Comment">#! ))) html</span>
3962
+ end
3963
+
3964
+ end
3965
+ </pre>
3966
+ </div>
3967
+ </div>
3968
+ </p>
3969
+ <p>
3970
+ And here is the implementation:
3971
+ </p>
3972
+ <p>
3973
+ <div class="named_with_containers chunk">
3974
+ <div class="chunk name">
3975
+ <a name="lib-codnar-gvim-rb">
3976
+ <span>lib/codnar/gvim.rb</span>
3977
+ </a>
3978
+ </div>
3979
+ <div class="chunk html">
3980
+ <pre class='ruby code syntax'>
3981
+ <span class="PreProc">module</span> <span class="Type">Codnar</span>
3982
+
3983
+ </pre>
3984
+ <table class='layout'>
3985
+ <tr>
3986
+ <td class='indentation'>
3987
+ <pre> </pre>
3988
+ </td>
3989
+ <td class='html'>
3990
+ <div class='rdoc comment markup'>
3991
+ <p>
3992
+ Syntax highlight using GVim.
3993
+ </p>
3994
+ </div>
3995
+ </td>
3996
+ </tr>
3997
+ </table>
3998
+ <pre class='ruby code syntax'>
3999
+ <span class="PreProc">class</span> <span class="Type">GVim</span>
4000
+
4001
+ </pre>
4002
+ <table class='layout'>
4003
+ <tr>
4004
+ <td class='indentation'>
4005
+ <pre> </pre>
4006
+ </td>
4007
+ <td class='html'>
4008
+ <div class='rdoc comment markup'>
4009
+ <p>
4010
+ Convert a sequence of classified code lines to HTML using GVim syntax
4011
+ highlighting. The commands array allows configuring the way that GVim will
4012
+ format the output (see the <tt>cached_syntax_to_html</tt> method for
4013
+ details).
4014
+ </p>
4015
+ </div>
4016
+ </td>
4017
+ </tr>
4018
+ </table>
4019
+ <pre class='ruby code syntax'>
4020
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">lines_to_html</span>(lines, syntax, commands = [])
4021
+ <span class="Statement">return</span> <span class="Type">Formatter</span>.merge_lines(lines, <span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span>) <span class="Statement">do</span> |<span class="Identifier">payload</span>|
4022
+ <span class="Type">GVim</span>.cached_syntax_to_html(payload + <span class="Special">&quot;</span><span class="Special">\n</span><span class="Special">&quot;</span>, syntax, commands).chomp
4023
+ <span class="Statement">end</span>
4024
+ <span class="PreProc">end</span>
4025
+
4026
+ </pre>
4027
+ <table class='layout'>
4028
+ <tr>
4029
+ <td class='indentation'>
4030
+ <pre> </pre>
4031
+ </td>
4032
+ <td class='html'>
4033
+ <div class='rdoc comment markup'>
4034
+ <p>
4035
+ The cache used for speeding up recomputing the same syntax highlighting
4036
+ HTML.
4037
+ </p>
4038
+ </div>
4039
+ </td>
4040
+ </tr>
4041
+ </table>
4042
+ <pre class='ruby code syntax'>
4043
+ <span class="Identifier">@cache</span> = <span class="Type">Cache</span>.new(<span class="Special">&quot;</span><span class="Constant">.gvim-cache</span><span class="Special">&quot;</span>) <span class="Statement">do</span> |<span class="Identifier">data</span>|
4044
+ <span class="Type">GVim</span>.uncached_syntax_to_html(data.text, data.syntax, data.commands)
4045
+ <span class="Statement">end</span>
4046
+
4047
+ </pre>
4048
+ <table class='layout'>
4049
+ <tr>
4050
+ <td class='indentation'>
4051
+ <pre> </pre>
4052
+ </td>
4053
+ <td class='html'>
4054
+ <div class='rdoc comment markup'>
4055
+ <p>
4056
+ Force recomputation of the syntax highlighting HTML, even if a cached
4057
+ version exists.
4058
+ </p>
4059
+ </div>
4060
+ </td>
4061
+ </tr>
4062
+ </table>
4063
+ <pre class='ruby code syntax'>
4064
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">force_recompute=</span>(force_recompute)
4065
+ <span class="Identifier">@cache</span>.force_recompute = force_recompute
4066
+ <span class="PreProc">end</span>
4067
+
4068
+ </pre>
4069
+ <table class='layout'>
4070
+ <tr>
4071
+ <td class='indentation'>
4072
+ <pre> </pre>
4073
+ </td>
4074
+ <td class='html'>
4075
+ <div class='rdoc comment markup'>
4076
+ <p>
4077
+ Highlight syntax of text using GVim. This uses the GVim standard CSS
4078
+ classes to mark keywords, identifiers, and so on. See the GVim
4079
+ documentation for details. The commands array allows configuring the way
4080
+ that GVim will format the output. For example:
4081
+ </p>
4082
+ <ul><li>
4083
+ <p>
4084
+ The command <tt>&quot;+:colorscheme &lt;name&gt;&quot;</tt> will override
4085
+ the default color scheme used.
4086
+ </p>
4087
+ </li><li>
4088
+ <p>
4089
+ The command <tt>&quot;+:let html_use_css=1&quot;</tt> will just annotate
4090
+ each HTML tag with a CSS class, instead of embedding some specific style
4091
+ directly into the tag. In this case the colorscheme and background are
4092
+ ignored; you will need to provide your own CSS stylesheet as part of the
4093
+ final woven document to style the marked-up words.
4094
+ </p>
4095
+ </li></ul>
4096
+ <p>
4097
+ Additional commands may be useful; GVim provides a full scripting
4098
+ environment so there is no theoretical limit to what can be done here.
4099
+ </p>
4100
+ <p>
4101
+ Since GVim is as slow as molasses to start up, we cache the results of
4102
+ highlighting the syntax of each code fragment in a directory called
4103
+ <tt>.gvim-cache</tt>, which can appear at the current working directory or
4104
+ in any of its parents.
4105
+ </p>
4106
+ </div>
4107
+ </td>
4108
+ </tr>
4109
+ </table>
4110
+ <pre class='ruby code syntax'>
4111
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">cached_syntax_to_html</span>(text, syntax, commands = [])
4112
+ data = { <span class="Special">&quot;</span><span class="Constant">text</span><span class="Special">&quot;</span> =&gt; text, <span class="Special">&quot;</span><span class="Constant">syntax</span><span class="Special">&quot;</span> =&gt; syntax, <span class="Special">&quot;</span><span class="Constant">commands</span><span class="Special">&quot;</span> =&gt; commands }
4113
+ <span class="Statement">return</span> <span class="Identifier">@cache</span>[data]
4114
+ <span class="PreProc">end</span>
4115
+
4116
+ </pre>
4117
+ <table class='layout'>
4118
+ <tr>
4119
+ <td class='indentation'>
4120
+ <pre> </pre>
4121
+ </td>
4122
+ <td class='html'>
4123
+ <div class='rdoc comment markup'>
4124
+ <p>
4125
+ Highlight syntax of text using GVim, without caching. This is <b>slow</b>
3777
4126
  (measured in seconds), due to GVim’s start-up tim. See the
3778
4127
  <tt>cached_syntax_to_html</tt> method for a faster variant and
3779
4128
  functionality details.
@@ -4619,7 +4968,7 @@ Test splitting code files.
4619
4968
  <span class="Identifier">&lt;</span><span class="Statement">td</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'html'</span><span class="Identifier">&gt;</span>
4620
4969
  <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'rdoc rdoc markup'</span><span class="Identifier">&gt;</span>
4621
4970
  <span class="Identifier">&lt;</span><span class="Statement">p</span><span class="Identifier">&gt;</span>
4622
- This is <span class="Identifier">&lt;</span><span class="Statement">b</span><span class="Identifier">&gt;</span><span class="htmlBold">rdoc</span><span class="Identifier">&lt;/</span><span class="Statement">b</span><span class="Identifier">&gt;</span>.
4971
+ This is <span class="Identifier">&lt;</span><span class="Statement">strong</span><span class="Identifier">&gt;</span><span class="htmlBold">rdoc</span><span class="Identifier">&lt;/</span><span class="Statement">strong</span><span class="Identifier">&gt;</span>.
4623
4972
  <span class="Identifier">&lt;/</span><span class="Statement">p</span><span class="Identifier">&gt;</span>
4624
4973
  <span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
4625
4974
  <span class="Identifier">&lt;/</span><span class="Statement">td</span><span class="Identifier">&gt;</span>
@@ -4834,7 +5183,7 @@ Test “splitting” documentation files.
4834
5183
  <span class="Special">&quot;</span><span class="Constant">containers</span><span class="Special">&quot;</span> =&gt; [],
4835
5184
  <span class="Special">&quot;</span><span class="Constant">contained</span><span class="Special">&quot;</span> =&gt; [],
4836
5185
  <span class="Special">&quot;</span><span class="Constant">locations</span><span class="Special">&quot;</span> =&gt; [ { <span class="Special">&quot;</span><span class="Constant">file</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">rdoc.rdoc</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">line</span><span class="Special">&quot;</span> =&gt; <span class="Constant">1</span> } ],
4837
- <span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">&lt;div class='rdoc rdoc markup'&gt;</span><span class="Special">\n</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Constant">&lt;b&gt;foo&lt;/b&gt; bar</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Constant">&lt;/div&gt;</span><span class="Special">&quot;</span>
5186
+ <span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">&lt;div class='rdoc rdoc markup'&gt;</span><span class="Special">\n</span><span class="Constant">&lt;p&gt;</span><span class="Special">\n</span><span class="Constant">&lt;strong&gt;foo&lt;/strong&gt; bar</span><span class="Special">\n</span><span class="Constant">&lt;/p&gt;</span><span class="Special">\n</span><span class="Constant">&lt;/div&gt;</span><span class="Special">&quot;</span>
4838
5187
  } ]
4839
5188
  <span class="PreProc">end</span>
4840
5189
 
@@ -4939,69 +5288,14 @@ Application.
4939
5288
  <pre class='ruby code syntax'>
4940
5289
  <span class="PreProc">module</span> <span class="Type">Configuration</span>
4941
5290
 
4942
- </pre>
4943
- <pre class='nested chunk'>
4944
- <a class='nested chunk' href='#documentation-splitting-configurations'>Documentation &quot;splitting&quot; configurations</a>
4945
- </pre>
4946
- <pre class='ruby code syntax'>
5291
+ <span class="PreProc">include</span> <span class="Type">Documentation</span>
5292
+ <span class="PreProc">include</span> <span class="Type">Code</span>
5293
+ <span class="PreProc">include</span> <span class="Type">Comments</span>
5294
+ <span class="PreProc">include</span> <span class="Type">Highlighting</span>
5295
+
5296
+ <span class="PreProc">end</span>
4947
5297
 
4948
- </pre>
4949
- <pre class='nested chunk'>
4950
- <a class='nested chunk' href='#source-code-lines-classification-configurations'>Source code lines classification configurations</a>
4951
- </pre>
4952
- <pre class='ruby code syntax'>
4953
-
4954
- </pre>
4955
- <pre class='nested chunk'>
4956
- <a class='nested chunk' href='#nested-foreign-syntax-code-islands-configurations'>Nested foreign syntax code islands configurations</a>
4957
- </pre>
4958
- <pre class='ruby code syntax'>
4959
-
4960
- </pre>
4961
- <pre class='nested chunk'>
4962
- <a class='nested chunk' href='#simple-comment-classification-configurations'>Simple comment classification configurations</a>
4963
- </pre>
4964
- <pre class='ruby code syntax'>
4965
-
4966
- </pre>
4967
- <pre class='nested chunk'>
4968
- <a class='nested chunk' href='#complex-comment-classification-configurations'>Complex comment classification configurations</a>
4969
- </pre>
4970
- <pre class='ruby code syntax'>
4971
-
4972
- </pre>
4973
- <pre class='nested chunk'>
4974
- <a class='nested chunk' href='#comment-formatting-configurations'>Comment formatting configurations</a>
4975
- </pre>
4976
- <pre class='ruby code syntax'>
4977
-
4978
- </pre>
4979
- <pre class='nested chunk'>
4980
- <a class='nested chunk' href='#gvim-syntax-highlighting-formatting-configurations'>GVim syntax highlighting formatting configurations</a>
4981
- </pre>
4982
- <pre class='ruby code syntax'>
4983
-
4984
- </pre>
4985
- <pre class='nested chunk'>
4986
- <a class='nested chunk' href='#coderay-syntax-highlighting-formatting-configurations'>CodeRay syntax highlighting formatting configurations</a>
4987
- </pre>
4988
- <pre class='ruby code syntax'>
4989
-
4990
- </pre>
4991
- <pre class='nested chunk'>
4992
- <a class='nested chunk' href='#sunlight-syntax-highlighting-formatting-configurations'>Sunlight syntax highlighting formatting configurations</a>
4993
- </pre>
4994
- <pre class='ruby code syntax'>
4995
-
4996
- </pre>
4997
- <pre class='nested chunk'>
4998
- <a class='nested chunk' href='#chunk-splitting-configurations'>Chunk splitting configurations</a>
4999
- </pre>
5000
- <pre class='ruby code syntax'>
5001
-
5002
- end
5003
-
5004
- end
5298
+ end
5005
5299
  </pre>
5006
5300
  </div>
5007
5301
  </div>
@@ -5323,7 +5617,7 @@ Test the built-in split documentation configurations.
5323
5617
  <pre class='html code syntax'>
5324
5618
  <span class="Identifier">&lt;</span><span class="Statement">div</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'rdoc doc markup'</span><span class="Identifier">&gt;</span>
5325
5619
  <span class="Identifier">&lt;</span><span class="Statement">p</span><span class="Identifier">&gt;</span>
5326
- This is a <span class="Identifier">&lt;</span><span class="Statement">b</span><span class="Identifier">&gt;</span><span class="htmlBold">marked-up</span><span class="Identifier">&lt;/</span><span class="Statement">b</span><span class="Identifier">&gt;</span> file.
5620
+ This is a <span class="Identifier">&lt;</span><span class="Statement">strong</span><span class="Identifier">&gt;</span><span class="htmlBold">marked-up</span><span class="Identifier">&lt;/</span><span class="Statement">strong</span><span class="Identifier">&gt;</span> file.
5327
5621
  <span class="Identifier">&lt;/</span><span class="Statement">p</span><span class="Identifier">&gt;</span>
5328
5622
  <span class="Identifier">&lt;/</span><span class="Statement">div</span><span class="Identifier">&gt;</span>
5329
5623
  EOF
@@ -5380,18 +5674,39 @@ And here are the actual configurations:
5380
5674
  <p>
5381
5675
  <div class="named_with_containers chunk">
5382
5676
  <div class="chunk name">
5383
- <a name="documentation-splitting-configurations">
5384
- <span>Documentation &quot;splitting&quot; configurations</span>
5677
+ <a name="lib-codnar-configuration-documentation-rb">
5678
+ <span>lib/codnar/configuration/documentation.rb</span>
5385
5679
  </a>
5386
5680
  </div>
5387
5681
  <div class="chunk html">
5388
5682
  <pre class='ruby code syntax'>
5683
+ <span class="PreProc">module</span> <span class="Type">Codnar</span>
5684
+
5685
+ <span class="PreProc">module</span> <span class="Type">Configuration</span>
5389
5686
 
5390
5687
  </pre>
5391
- <table class='layout'>
5688
+ <table class='layout'>
5392
5689
  <tr>
5393
5690
  <td class='indentation'>
5394
- <pre></pre>
5691
+ <pre> </pre>
5692
+ </td>
5693
+ <td class='html'>
5694
+ <div class='rdoc comment markup'>
5695
+ <p>
5696
+ Configurations for “splitting” documentation files.
5697
+ </p>
5698
+ </div>
5699
+ </td>
5700
+ </tr>
5701
+ </table>
5702
+ <pre class='ruby code syntax'>
5703
+ <span class="PreProc">module</span> <span class="Type">Documentation</span>
5704
+
5705
+ </pre>
5706
+ <table class='layout'>
5707
+ <tr>
5708
+ <td class='indentation'>
5709
+ <pre> </pre>
5395
5710
  </td>
5396
5711
  <td class='html'>
5397
5712
  <div class='rdoc comment markup'>
@@ -5410,25 +5725,25 @@ processing on the input. It isn’t the most useful configuration.
5410
5725
  </tr>
5411
5726
  </table>
5412
5727
  <pre class='ruby code syntax'>
5413
- <span class="Type">SPLIT_HTML_DOCUMENTATION</span> = {
5414
- <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
5415
- <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.cast_lines(lines, 'html')</span><span class="Special">&quot;</span>,
5416
- },
5417
- <span class="Special">&quot;</span><span class="Constant">syntax</span><span class="Special">&quot;</span> =&gt; {
5418
- <span class="Special">&quot;</span><span class="Constant">patterns</span><span class="Special">&quot;</span> =&gt; {
5419
- <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; { <span class="Special">&quot;</span><span class="Constant">regexp</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">^(.*)$</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">groups</span><span class="Special">&quot;</span> =&gt; [ <span class="Special">&quot;</span><span class="Constant">payload</span><span class="Special">&quot;</span> ] },
5420
- },
5421
- <span class="Special">&quot;</span><span class="Constant">states</span><span class="Special">&quot;</span> =&gt; {
5422
- <span class="Special">&quot;</span><span class="Constant">start</span><span class="Special">&quot;</span> =&gt; { <span class="Special">&quot;</span><span class="Constant">transitions</span><span class="Special">&quot;</span> =&gt; [ { <span class="Special">&quot;</span><span class="Constant">pattern</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> } ] },
5423
- },
5424
- },
5425
- }
5728
+ <span class="Type">SPLIT_HTML_DOCUMENTATION</span> = {
5729
+ <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
5730
+ <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.cast_lines(lines, 'html')</span><span class="Special">&quot;</span>,
5731
+ },
5732
+ <span class="Special">&quot;</span><span class="Constant">syntax</span><span class="Special">&quot;</span> =&gt; {
5733
+ <span class="Special">&quot;</span><span class="Constant">patterns</span><span class="Special">&quot;</span> =&gt; {
5734
+ <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; { <span class="Special">&quot;</span><span class="Constant">regexp</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">^(.*)$</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">groups</span><span class="Special">&quot;</span> =&gt; [ <span class="Special">&quot;</span><span class="Constant">payload</span><span class="Special">&quot;</span> ] },
5735
+ },
5736
+ <span class="Special">&quot;</span><span class="Constant">states</span><span class="Special">&quot;</span> =&gt; {
5737
+ <span class="Special">&quot;</span><span class="Constant">start</span><span class="Special">&quot;</span> =&gt; { <span class="Special">&quot;</span><span class="Constant">transitions</span><span class="Special">&quot;</span> =&gt; [ { <span class="Special">&quot;</span><span class="Constant">pattern</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> } ] },
5738
+ },
5739
+ },
5740
+ }
5426
5741
 
5427
5742
  </pre>
5428
- <table class='layout'>
5743
+ <table class='layout'>
5429
5744
  <tr>
5430
5745
  <td class='indentation'>
5431
- <pre></pre>
5746
+ <pre> </pre>
5432
5747
  </td>
5433
5748
  <td class='html'>
5434
5749
  <div class='rdoc comment markup'>
@@ -5441,17 +5756,17 @@ preserved by escaping it and wrapping it in an HTML pre element.
5441
5756
  </tr>
5442
5757
  </table>
5443
5758
  <pre class='ruby code syntax'>
5444
- <span class="Type">SPLIT_PRE_DOCUMENTATION</span> = <span class="Type">SPLIT_HTML_DOCUMENTATION</span>.deep_merge(
5445
- <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
5446
- <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.lines_to_pre_html(lines, :class =&gt; :doc)</span><span class="Special">&quot;</span>,
5447
- }
5448
- )
5759
+ <span class="Type">SPLIT_PRE_DOCUMENTATION</span> = <span class="Type">SPLIT_HTML_DOCUMENTATION</span>.deep_merge(
5760
+ <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
5761
+ <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.lines_to_pre_html(lines, :class =&gt; :doc)</span><span class="Special">&quot;</span>,
5762
+ }
5763
+ )
5449
5764
 
5450
5765
  </pre>
5451
- <table class='layout'>
5766
+ <table class='layout'>
5452
5767
  <tr>
5453
5768
  <td class='indentation'>
5454
- <pre></pre>
5769
+ <pre> </pre>
5455
5770
  </td>
5456
5771
  <td class='html'>
5457
5772
  <div class='rdoc comment markup'>
@@ -5463,18 +5778,18 @@ preserved by escaping it and wrapping it in an HTML pre element.
5463
5778
  </tr>
5464
5779
  </table>
5465
5780
  <pre class='ruby code syntax'>
5466
- <span class="Type">SPLIT_RDOC_DOCUMENTATION</span> = <span class="Type">SPLIT_HTML_DOCUMENTATION</span>.deep_merge(
5467
- <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
5468
- <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.markup_lines_to_html(lines, Codnar::RDoc, 'rdoc')</span><span class="Special">&quot;</span>,
5469
- <span class="Special">&quot;</span><span class="Constant">unindented_html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.unindented_lines_to_html(lines)</span><span class="Special">&quot;</span>,
5470
- }
5471
- )
5781
+ <span class="Type">SPLIT_RDOC_DOCUMENTATION</span> = <span class="Type">SPLIT_HTML_DOCUMENTATION</span>.deep_merge(
5782
+ <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
5783
+ <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.markup_lines_to_html(lines, Codnar::RDoc, 'rdoc')</span><span class="Special">&quot;</span>,
5784
+ <span class="Special">&quot;</span><span class="Constant">unindented_html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.unindented_lines_to_html(lines)</span><span class="Special">&quot;</span>,
5785
+ }
5786
+ )
5472
5787
 
5473
5788
  </pre>
5474
- <table class='layout'>
5789
+ <table class='layout'>
5475
5790
  <tr>
5476
5791
  <td class='indentation'>
5477
- <pre></pre>
5792
+ <pre> </pre>
5478
5793
  </td>
5479
5794
  <td class='html'>
5480
5795
  <div class='rdoc comment markup'>
@@ -5486,18 +5801,18 @@ preserved by escaping it and wrapping it in an HTML pre element.
5486
5801
  </tr>
5487
5802
  </table>
5488
5803
  <pre class='ruby code syntax'>
5489
- <span class="Type">SPLIT_MARKDOWN_DOCUMENTATION</span> = <span class="Type">SPLIT_HTML_DOCUMENTATION</span>.deep_merge(
5490
- <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
5491
- <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.markup_lines_to_html(lines, Codnar::Markdown, 'markdown')</span><span class="Special">&quot;</span>,
5492
- <span class="Special">&quot;</span><span class="Constant">unindented_html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.unindented_lines_to_html(lines)</span><span class="Special">&quot;</span>,
5493
- }
5494
- )
5804
+ <span class="Type">SPLIT_MARKDOWN_DOCUMENTATION</span> = <span class="Type">SPLIT_HTML_DOCUMENTATION</span>.deep_merge(
5805
+ <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
5806
+ <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.markup_lines_to_html(lines, Codnar::Markdown, 'markdown')</span><span class="Special">&quot;</span>,
5807
+ <span class="Special">&quot;</span><span class="Constant">unindented_html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.unindented_lines_to_html(lines)</span><span class="Special">&quot;</span>,
5808
+ }
5809
+ )
5495
5810
 
5496
5811
  </pre>
5497
- <table class='layout'>
5812
+ <table class='layout'>
5498
5813
  <tr>
5499
5814
  <td class='indentation'>
5500
- <pre></pre>
5815
+ <pre> </pre>
5501
5816
  </td>
5502
5817
  <td class='html'>
5503
5818
  <div class='rdoc comment markup'>
@@ -5509,30 +5824,82 @@ preserved by escaping it and wrapping it in an HTML pre element.
5509
5824
  </tr>
5510
5825
  </table>
5511
5826
  <pre class='ruby code syntax'>
5512
- <span class="Type">SPLIT_GRAPHVIZ_DOCUMENTATION</span> = <span class="Type">SPLIT_HTML_DOCUMENTATION</span>.deep_merge(
5513
- <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
5514
- <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.markup_lines_to_html(lines, Codnar::GraphViz, 'graphviz')</span><span class="Special">&quot;</span>,
5515
- <span class="Special">&quot;</span><span class="Constant">unindented_html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.unindented_lines_to_html(lines)</span><span class="Special">&quot;</span>,
5516
- }
5517
- )
5827
+ <span class="Type">SPLIT_GRAPHVIZ_DOCUMENTATION</span> = <span class="Type">SPLIT_HTML_DOCUMENTATION</span>.deep_merge(
5828
+ <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
5829
+ <span class="Special">&quot;</span><span class="Constant">doc</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.markup_lines_to_html(lines, Codnar::GraphViz, 'graphviz')</span><span class="Special">&quot;</span>,
5830
+ <span class="Special">&quot;</span><span class="Constant">unindented_html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.unindented_lines_to_html(lines)</span><span class="Special">&quot;</span>,
5831
+ }
5832
+ )
5833
+
5834
+ end
5835
+
5836
+ end
5518
5837
 
5838
+ end
5519
5839
  </pre>
5520
5840
  </div>
5521
- <div class="chunk containers">
5522
- <span class="chunk containers header">Contained in:</span>
5523
- <ul class="chunk containers">
5524
- <li class="chunk container">
5525
- <a class="chunk container" href="#lib-codnar-split-configurations-rb">lib/codnar/split_configurations.rb</a>
5526
- </li>
5527
- </ul>
5528
- </div>
5529
5841
  </div>
5530
5842
  </p>
5531
5843
  <h4>Source code lines classification</h4>
5532
5844
  <p>
5533
5845
  Splitting source code files is a more complex affair, which does typically
5534
- require combining several configurations. The basic configuration marks all
5535
- lines as belonging to some code syntax, as a single chunk:
5846
+ require combining several configurations.
5847
+ </p>
5848
+ <p>
5849
+ <div class="named_with_containers chunk">
5850
+ <div class="chunk name">
5851
+ <a name="lib-codnar-configuration-code-rb">
5852
+ <span>lib/codnar/configuration/code.rb</span>
5853
+ </a>
5854
+ </div>
5855
+ <div class="chunk html">
5856
+ <pre class='ruby code syntax'>
5857
+ <span class="PreProc">module</span> <span class="Type">Codnar</span>
5858
+
5859
+ <span class="PreProc">module</span> <span class="Type">Configuration</span>
5860
+
5861
+ </pre>
5862
+ <table class='layout'>
5863
+ <tr>
5864
+ <td class='indentation'>
5865
+ <pre> </pre>
5866
+ </td>
5867
+ <td class='html'>
5868
+ <div class='rdoc comment markup'>
5869
+ <p>
5870
+ Configurations for splitting source code.
5871
+ </p>
5872
+ </div>
5873
+ </td>
5874
+ </tr>
5875
+ </table>
5876
+ <pre class='ruby code syntax'>
5877
+ <span class="PreProc">module</span> <span class="Type">Code</span>
5878
+
5879
+ </pre>
5880
+ <pre class='nested chunk'>
5881
+ <a class='nested chunk' href='#source-code-lines-classification-configurations'>Source code lines classification configurations</a>
5882
+ </pre>
5883
+ <pre class='ruby code syntax'>
5884
+
5885
+ </pre>
5886
+ <pre class='nested chunk'>
5887
+ <a class='nested chunk' href='#nested-foreign-syntax-code-islands-configurations'>Nested foreign syntax code islands configurations</a>
5888
+ </pre>
5889
+ <pre class='ruby code syntax'>
5890
+
5891
+ end
5892
+
5893
+ end
5894
+
5895
+ end
5896
+ </pre>
5897
+ </div>
5898
+ </div>
5899
+ </p>
5900
+ <p>
5901
+ The basic configuration marks all lines as belonging to some code syntax, as a
5902
+ single chunk:
5536
5903
  </p>
5537
5904
  <p>
5538
5905
  <div class="named_with_containers chunk">
@@ -5591,7 +5958,7 @@ configuration(s).
5591
5958
  <span class="chunk containers header">Contained in:</span>
5592
5959
  <ul class="chunk containers">
5593
5960
  <li class="chunk container">
5594
- <a class="chunk container" href="#lib-codnar-split-configurations-rb">lib/codnar/split_configurations.rb</a>
5961
+ <a class="chunk container" href="#lib-codnar-configuration-code-rb">lib/codnar/configuration/code.rb</a>
5595
5962
  </li>
5596
5963
  </ul>
5597
5964
  </div>
@@ -5674,7 +6041,7 @@ nested code may not contain deeper nested code using a third syntax.
5674
6041
  <span class="chunk containers header">Contained in:</span>
5675
6042
  <ul class="chunk containers">
5676
6043
  <li class="chunk container">
5677
- <a class="chunk container" href="#lib-codnar-split-configurations-rb">lib/codnar/split_configurations.rb</a>
6044
+ <a class="chunk container" href="#lib-codnar-configuration-code-rb">lib/codnar/configuration/code.rb</a>
5678
6045
  </li>
5679
6046
  </ul>
5680
6047
  </div>
@@ -5768,41 +6135,343 @@ Test combinations of the built-in split code configurations.
5768
6135
  <span class="Identifier">&lt;</span><span class="Statement">pre</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'ruby code syntax'</span><span class="Identifier">&gt;</span>
5769
6136
  </pre>
5770
6137
  <pre class='ruby code syntax'>
5771
- &lt;span <span class="PreProc">class</span>=&quot;<span class="Type">Comment</span>&quot;&gt;<span class="Comment"># ))) html&lt;/span&gt;</span>
5772
- &lt;/pre&gt;
5773
- <span class="Type">EOF</span>
6138
+ &lt;span <span class="PreProc">class</span>=&quot;<span class="Type">Comment</span>&quot;&gt;<span class="Comment"># ))) html&lt;/span&gt;</span>
6139
+ &lt;/pre&gt;
6140
+ <span class="Type">EOF</span>
6141
+
6142
+ <span class="PreProc">def</span> <span class="Identifier">test_island_code</span>
6143
+ check_split_file(<span class="Type">ISLAND_CODE</span>, <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_SOURCE_CODE</span>.call(<span class="Special">&quot;</span><span class="Constant">ruby</span><span class="Special">&quot;</span>),
6144
+ <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">FORMAT_CODE_GVIM_CSS</span>.call(<span class="Special">&quot;</span><span class="Constant">ruby</span><span class="Special">&quot;</span>),
6145
+ <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_NESTED_CODE</span>.call(<span class="Special">&quot;</span><span class="Constant">ruby</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span>),
6146
+ <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">FORMAT_CODE_GVIM_CSS</span>.call(<span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span>)) <span class="Statement">do</span> |<span class="Identifier">path</span>|
6147
+ [ {
6148
+ <span class="Special">&quot;</span><span class="Constant">name</span><span class="Special">&quot;</span> =&gt; path,
6149
+ <span class="Special">&quot;</span><span class="Constant">locations</span><span class="Special">&quot;</span> =&gt; [ { <span class="Special">&quot;</span><span class="Constant">file</span><span class="Special">&quot;</span> =&gt; path, <span class="Special">&quot;</span><span class="Constant">line</span><span class="Special">&quot;</span> =&gt; <span class="Constant">1</span> } ],
6150
+ <span class="Special">&quot;</span><span class="Constant">containers</span><span class="Special">&quot;</span> =&gt; [],
6151
+ <span class="Special">&quot;</span><span class="Constant">contained</span><span class="Special">&quot;</span> =&gt; [],
6152
+ <span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span> =&gt; <span class="Type">ISLAND_HTML</span>
6153
+ } ]
6154
+ <span class="Statement">end</span>
6155
+ <span class="PreProc">end</span>
6156
+
6157
+ <span class="PreProc">end</span>
6158
+ </pre>
6159
+ </div>
6160
+ </div>
6161
+ </p>
6162
+ <h4>Classifying comment lines</h4>
6163
+ <p>
6164
+ Classifying comment lines is the most complex part of splitting source code
6165
+ files, requiring the use of one or more configurations specific to the language
6166
+ used.
6167
+ </p>
6168
+ <p>
6169
+ <div class="named_with_containers chunk">
6170
+ <div class="chunk name">
6171
+ <a name="lib-codnar-configuration-comments-rb">
6172
+ <span>lib/codnar/configuration/comments.rb</span>
6173
+ </a>
6174
+ </div>
6175
+ <div class="chunk html">
6176
+ <pre class='ruby code syntax'>
6177
+ <span class="PreProc">module</span> <span class="Type">Codnar</span>
6178
+
6179
+ <span class="PreProc">module</span> <span class="Type">Configuration</span>
6180
+
6181
+ </pre>
6182
+ <table class='layout'>
6183
+ <tr>
6184
+ <td class='indentation'>
6185
+ <pre> </pre>
6186
+ </td>
6187
+ <td class='html'>
6188
+ <div class='rdoc comment markup'>
6189
+ <p>
6190
+ Configurations for splitting source code with comments.
6191
+ </p>
6192
+ </div>
6193
+ </td>
6194
+ </tr>
6195
+ </table>
6196
+ <pre class='ruby code syntax'>
6197
+ <span class="PreProc">module</span> <span class="Type">Comments</span>
6198
+
6199
+ </pre>
6200
+ <pre class='nested chunk'>
6201
+ <a class='nested chunk' href='#simple-comment-classification-configurations'>Simple comment classification configurations</a>
6202
+ </pre>
6203
+ <pre class='ruby code syntax'>
6204
+
6205
+ </pre>
6206
+ <pre class='nested chunk'>
6207
+ <a class='nested chunk' href='#denoted-comment-classification-configurations'>Denoted comment classification configurations</a>
6208
+ </pre>
6209
+ <pre class='ruby code syntax'>
6210
+
6211
+ </pre>
6212
+ <pre class='nested chunk'>
6213
+ <a class='nested chunk' href='#delimited-comment-classification-configurations'>Delimited comment classification configurations</a>
6214
+ </pre>
6215
+ <pre class='ruby code syntax'>
6216
+
6217
+ </pre>
6218
+ <pre class='nested chunk'>
6219
+ <a class='nested chunk' href='#comment-formatting-configurations'>Comment formatting configurations</a>
6220
+ </pre>
6221
+ <pre class='ruby code syntax'>
6222
+
6223
+ end
6224
+
6225
+ end
6226
+
6227
+ end
6228
+ </pre>
6229
+ </div>
6230
+ </div>
6231
+ </p>
6232
+ <h5>Simple comment classification</h5>
6233
+ <p>
6234
+ Many languages use a simple comment syntax, where some prefix indicates a
6235
+ comment that spans until the end of the line (e.g., shell <code>#</code> comments or C++
6236
+ <code>//</code> comments).
6237
+ </p>
6238
+ <p>
6239
+ <div class="named_with_containers chunk">
6240
+ <div class="chunk name">
6241
+ <a name="simple-comment-classification-configurations">
6242
+ <span>Simple comment classification configurations</span>
6243
+ </a>
6244
+ </div>
6245
+ <div class="chunk html">
6246
+ <pre class='ruby code syntax'>
6247
+
6248
+ </pre>
6249
+ <table class='layout'>
6250
+ <tr>
6251
+ <td class='indentation'>
6252
+ <pre></pre>
6253
+ </td>
6254
+ <td class='html'>
6255
+ <div class='rdoc comment markup'>
6256
+ <p>
6257
+ Classify simple comment lines. It accepts a restricted format: each comment
6258
+ is expected to start with some exact prefix (e.g. “#” for shell style
6259
+ comments or “//” for C++ style comments). The following space, if any,
6260
+ is stripped from the payload. As a convenience, comment that starts with
6261
+ “!” is not taken to start a comment. This both protects the 1st line of
6262
+ shell scripts (“#!”), and also any other line you wish to avoid being
6263
+ treated as a comment.
6264
+ </p>
6265
+ <p>
6266
+ This configuration is typically complemented by an additional one
6267
+ specifying how to format the (stripped!) comments; by default they are just
6268
+ displayed as-is using an HTML <tt>pre</tt> element, which isn’t very
6269
+ useful.
6270
+ </p>
6271
+ </div>
6272
+ </td>
6273
+ </tr>
6274
+ </table>
6275
+ <pre class='ruby code syntax'>
6276
+ <span class="Type">CLASSIFY_SIMPLE_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span> |<span class="Identifier">prefix</span>|
6277
+ <span class="Statement">return</span> <span class="Type">Comments</span>.simple_comments(prefix)
6278
+ <span class="Statement">end</span>
6279
+
6280
+ </pre>
6281
+ <table class='layout'>
6282
+ <tr>
6283
+ <td class='indentation'>
6284
+ <pre></pre>
6285
+ </td>
6286
+ <td class='html'>
6287
+ <div class='rdoc comment markup'>
6288
+ <p>
6289
+ Classify simple shell (“#”) comment lines.
6290
+ </p>
6291
+ </div>
6292
+ </td>
6293
+ </tr>
6294
+ </table>
6295
+ <pre class='ruby code syntax'>
6296
+ <span class="Type">CLASSIFY_SHELL_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span>
6297
+ <span class="Statement">return</span> <span class="Type">Comments</span>.simple_comments(<span class="Special">&quot;</span><span class="Constant">#</span><span class="Special">&quot;</span>)
6298
+ <span class="Statement">end</span>
6299
+
6300
+ </pre>
6301
+ <table class='layout'>
6302
+ <tr>
6303
+ <td class='indentation'>
6304
+ <pre></pre>
6305
+ </td>
6306
+ <td class='html'>
6307
+ <div class='rdoc comment markup'>
6308
+ <p>
6309
+ Classify simple C++ (“//”) comment lines.
6310
+ </p>
6311
+ </div>
6312
+ </td>
6313
+ </tr>
6314
+ </table>
6315
+ <pre class='ruby code syntax'>
6316
+ <span class="Type">CLASSIFY_CPP_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span>
6317
+ <span class="Statement">return</span> <span class="Type">Comments</span>.simple_comments(<span class="Special">&quot;</span><span class="Constant">//</span><span class="Special">&quot;</span>)
6318
+ <span class="Statement">end</span>
6319
+
6320
+ </pre>
6321
+ <table class='layout'>
6322
+ <tr>
6323
+ <td class='indentation'>
6324
+ <pre></pre>
6325
+ </td>
6326
+ <td class='html'>
6327
+ <div class='rdoc comment markup'>
6328
+ <p>
6329
+ Configuration for classifying lines to comments and code based on a simple
6330
+ prefix (e.g. “#” for shell style comments or “//” for C++ style
6331
+ comments).
6332
+ </p>
6333
+ </div>
6334
+ </td>
6335
+ </tr>
6336
+ </table>
6337
+ <pre class='ruby code syntax'>
6338
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">simple_comments</span>(prefix)
6339
+ <span class="Statement">return</span> {
6340
+ <span class="Special">&quot;</span><span class="Constant">syntax</span><span class="Special">&quot;</span> =&gt; {
6341
+ <span class="Special">&quot;</span><span class="Constant">patterns</span><span class="Special">&quot;</span> =&gt; {
6342
+ <span class="Special">&quot;</span><span class="Constant">comment_</span><span class="Special">#{</span>prefix<span class="Special">}</span><span class="Special">&quot;</span> =&gt; { <span class="Special">&quot;</span><span class="Constant">regexp</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">^(</span><span class="Special">\\</span><span class="Constant">s*)</span><span class="Special">#{</span>prefix<span class="Special">}</span><span class="Constant">(?!!)</span><span class="Special">\\</span><span class="Constant">s?(.*)$</span><span class="Special">&quot;</span> },
6343
+ },
6344
+ <span class="Special">&quot;</span><span class="Constant">states</span><span class="Special">&quot;</span> =&gt; {
6345
+ <span class="Special">&quot;</span><span class="Constant">start</span><span class="Special">&quot;</span> =&gt; {
6346
+ <span class="Special">&quot;</span><span class="Constant">transitions</span><span class="Special">&quot;</span> =&gt; [
6347
+ { <span class="Special">&quot;</span><span class="Constant">pattern</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">comment_</span><span class="Special">#{</span>prefix<span class="Special">}</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">kind</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">comment</span><span class="Special">&quot;</span> },
6348
+ []
6349
+ ],
6350
+ },
6351
+ },
6352
+ },
6353
+ }
6354
+ <span class="PreProc">end</span>
6355
+
6356
+ </pre>
6357
+ </div>
6358
+ <div class="chunk containers">
6359
+ <span class="chunk containers header">Contained in:</span>
6360
+ <ul class="chunk containers">
6361
+ <li class="chunk container">
6362
+ <a class="chunk container" href="#lib-codnar-configuration-comments-rb">lib/codnar/configuration/comments.rb</a>
6363
+ </li>
6364
+ </ul>
6365
+ </div>
6366
+ </div>
6367
+ </p>
6368
+ <p>
6369
+ Here is a simple test demonstrating using simple comment classifications:
6370
+ </p>
6371
+ <p>
6372
+ <div class="named_with_containers chunk">
6373
+ <div class="chunk name">
6374
+ <a name="test-split-simple-comment-configurations-rb">
6375
+ <span>test/split_simple_comment_configurations.rb</span>
6376
+ </a>
6377
+ </div>
6378
+ <div class="chunk html">
6379
+ <pre class='ruby code syntax'>
6380
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar</span><span class="Special">&quot;</span>
6381
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">olag/test</span><span class="Special">&quot;</span>
6382
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">test/spec</span><span class="Special">&quot;</span>
6383
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">test_with_configurations</span><span class="Special">&quot;</span>
6384
+
6385
+ </pre>
6386
+ <table class='layout'>
6387
+ <tr>
6388
+ <td class='indentation'>
6389
+ <pre></pre>
6390
+ </td>
6391
+ <td class='html'>
6392
+ <div class='rdoc comment markup'>
6393
+ <p>
6394
+ Test built-in split simple comment configurations.
6395
+ </p>
6396
+ </div>
6397
+ </td>
6398
+ </tr>
6399
+ </table>
6400
+ <pre class='ruby code syntax'>
6401
+ <span class="PreProc">class</span> <span class="Type">TestSplitSimpleCommentsConfigurations</span> &lt; <span class="Type">Test</span>::<span class="Type">Unit</span>::<span class="Type">TestCase</span>
6402
+
6403
+ <span class="PreProc">include</span> <span class="Type">Test</span>::<span class="Type">WithConfigurations</span>
6404
+ <span class="PreProc">include</span> <span class="Type">Test</span>::<span class="Type">WithErrors</span>
6405
+ <span class="PreProc">include</span> <span class="Type">Test</span>::<span class="Type">WithTempfile</span>
6406
+
6407
+ <span class="PreProc">def</span> <span class="Identifier">test_custom_comments</span>
6408
+ check_any_comment(<span class="Special">&quot;</span><span class="Constant">!</span><span class="Special">&quot;</span>, <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_SIMPLE_COMMENTS</span>.call(<span class="Special">&quot;</span><span class="Constant">!</span><span class="Special">&quot;</span>))
6409
+ <span class="PreProc">end</span>
6410
+
6411
+ <span class="PreProc">def</span> <span class="Identifier">test_shell_comments</span>
6412
+ check_any_comment(<span class="Special">&quot;</span><span class="Constant">#</span><span class="Special">&quot;</span>, <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_SHELL_COMMENTS</span>.call)
6413
+ <span class="PreProc">end</span>
6414
+
6415
+ <span class="PreProc">def</span> <span class="Identifier">test_cpp_comments</span>
6416
+ check_any_comment(<span class="Special">&quot;</span><span class="Constant">//</span><span class="Special">&quot;</span>, <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_CPP_COMMENTS</span>.call)
6417
+ <span class="PreProc">end</span>
6418
+
6419
+ <span class="Statement">protected</span>
6420
+
6421
+ </pre>
6422
+ <table class='layout'>
6423
+ <tr>
6424
+ <td class='indentation'>
6425
+ <pre> </pre>
6426
+ </td>
6427
+ <td class='html'>
6428
+ <div class='rdoc comment markup'>
6429
+ <p>
6430
+ The “?” will be replaced by the simple comment prefix.
6431
+ </p>
6432
+ </div>
6433
+ </td>
6434
+ </tr>
6435
+ </table>
6436
+ <pre class='ruby code syntax'>
6437
+ <span class="Type">ANY_COMMENT_CODE</span> = &lt;&lt;-<span class="Special">EOF</span>.unindent
6438
+ <span class="Constant"> ?</span>
6439
+ <span class="Constant"> ? Comment</span>
6440
+ <span class="Constant"> Code</span>
6441
+ <span class="Constant"> ?! Not comment</span>
6442
+ <span class="Constant"> </span><span class="Special">EOF</span>
5774
6443
 
5775
- <span class="PreProc">def</span> <span class="Identifier">test_island_code</span>
5776
- check_split_file(<span class="Type">ISLAND_CODE</span>, <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_SOURCE_CODE</span>.call(<span class="Special">&quot;</span><span class="Constant">ruby</span><span class="Special">&quot;</span>),
5777
- <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">FORMAT_CODE_GVIM_CSS</span>.call(<span class="Special">&quot;</span><span class="Constant">ruby</span><span class="Special">&quot;</span>),
5778
- <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_NESTED_CODE</span>.call(<span class="Special">&quot;</span><span class="Constant">ruby</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span>),
5779
- <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">FORMAT_CODE_GVIM_CSS</span>.call(<span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span>)) <span class="Statement">do</span> |<span class="Identifier">path</span>|
6444
+ <span class="PreProc">def</span> <span class="Identifier">check_any_comment</span>(prefix, configuration)
6445
+ check_split_file(<span class="Type">ANY_COMMENT_CODE</span>.gsub(<span class="Special">&quot;</span><span class="Constant">?</span><span class="Special">&quot;</span>, prefix),
6446
+ <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_SOURCE_CODE</span>.call(<span class="Special">&quot;</span><span class="Constant">any</span><span class="Special">&quot;</span>),
6447
+ <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">FORMAT_PRE_COMMENTS</span>,
6448
+ configuration) <span class="Statement">do</span> |<span class="Identifier">path</span>|
5780
6449
  [ {
5781
6450
  <span class="Special">&quot;</span><span class="Constant">name</span><span class="Special">&quot;</span> =&gt; path,
5782
6451
  <span class="Special">&quot;</span><span class="Constant">locations</span><span class="Special">&quot;</span> =&gt; [ { <span class="Special">&quot;</span><span class="Constant">file</span><span class="Special">&quot;</span> =&gt; path, <span class="Special">&quot;</span><span class="Constant">line</span><span class="Special">&quot;</span> =&gt; <span class="Constant">1</span> } ],
5783
6452
  <span class="Special">&quot;</span><span class="Constant">containers</span><span class="Special">&quot;</span> =&gt; [],
5784
6453
  <span class="Special">&quot;</span><span class="Constant">contained</span><span class="Special">&quot;</span> =&gt; [],
5785
- <span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span> =&gt; <span class="Type">ISLAND_HTML</span>
6454
+ <span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">&lt;pre class='comment'&gt;</span><span class="Special">\n\n</span><span class="Constant">Comment</span><span class="Special">\n</span><span class="Constant">&lt;/pre&gt;</span><span class="Special">\n</span><span class="Constant">&lt;pre class='code'&gt;</span><span class="Special">\n</span><span class="Constant">Code</span><span class="Special">\n</span><span class="Special">#{</span>prefix<span class="Special">}</span><span class="Constant">! Not comment</span><span class="Special">\n</span><span class="Constant">&lt;/pre&gt;</span><span class="Special">&quot;</span>
5786
6455
  } ]
5787
6456
  <span class="Statement">end</span>
5788
6457
  <span class="PreProc">end</span>
5789
6458
 
5790
- <span class="PreProc">end</span>
6459
+ end
5791
6460
  </pre>
5792
6461
  </div>
5793
6462
  </div>
5794
6463
  </p>
5795
- <h4>Simple comment classification</h4>
6464
+ <h5>Denoted comment classification</h5>
5796
6465
  <p>
5797
- Many languages use a simple comment syntax, where some prefix indicates a
5798
- comment that spans until the end of the line (e.g., shell <code>#</code> comments or C++
5799
- <code>//</code> comments).
6466
+ Sometimes some simple comments require special treatment if they are denoted by
6467
+ some leading prefix. For example, Haskell simple comments start with <code>--</code> but
6468
+ Haddock (documentation) comments start with <code>-- |</code>, <code>-- ^</code> etc.
5800
6469
  </p>
5801
6470
  <p>
5802
6471
  <div class="named_with_containers chunk">
5803
6472
  <div class="chunk name">
5804
- <a name="simple-comment-classification-configurations">
5805
- <span>Simple comment classification configurations</span>
6473
+ <a name="denoted-comment-classification-configurations">
6474
+ <span>Denoted comment classification configurations</span>
5806
6475
  </a>
5807
6476
  </div>
5808
6477
  <div class="chunk html">
@@ -5817,13 +6486,11 @@ comment that spans until the end of the line (e.g., shell <code>#</code> comment
5817
6486
  <td class='html'>
5818
6487
  <div class='rdoc comment markup'>
5819
6488
  <p>
5820
- Classify simple comment lines. It accepts a restricted format: each comment
5821
- is expected to start with some exact prefix (e.g. “#” for shell style
5822
- comments or “//” for C++ style comments). The following space, if any,
5823
- is stripped from the payload. As a convenience, comment that starts with
5824
- “!” is not taken to start a comment. This both protects the 1st line of
5825
- shell scripts (“#!”), and also any other line you wish to avoid being
5826
- treated as a comment.
6489
+ Classify denoted comment lines. Denoted comments are similar to simple
6490
+ comments, except that the 1st simple comment line must start with a
6491
+ specific prefix (e.g., in haddock, comment lines start with ‘–’ but
6492
+ haddoc comments start with ‘– |’, ‘– ^’, etc.). The comment
6493
+ continues in additional simple comment lines.
5827
6494
  </p>
5828
6495
  <p>
5829
6496
  This configuration is typically complemented by an additional one
@@ -5836,8 +6503,8 @@ useful.
5836
6503
  </tr>
5837
6504
  </table>
5838
6505
  <pre class='ruby code syntax'>
5839
- <span class="Type">CLASSIFY_SIMPLE_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span> |<span class="Identifier">prefix</span>|
5840
- <span class="Statement">return</span> <span class="Type">Configuration</span>.simple_comments(prefix)
6506
+ <span class="Type">CLASSIFY_DENOTED_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span> |<span class="Identifier">start_prefix</span>, <span class="Identifier">continue_prefix</span>|
6507
+ <span class="Statement">return</span> <span class="Type">Comments</span>.denoted_comments(start_prefix, continue_prefix)
5841
6508
  <span class="Statement">end</span>
5842
6509
 
5843
6510
  </pre>
@@ -5849,15 +6516,17 @@ useful.
5849
6516
  <td class='html'>
5850
6517
  <div class='rdoc comment markup'>
5851
6518
  <p>
5852
- Classify simple shell (“#”) comment lines.
6519
+ Classify denoted haddock (“–”) comment lines. Note that non-haddock
6520
+ comment lines are not captured; they would treated as code and handled by
6521
+ syntax highlighting, if any.
5853
6522
  </p>
5854
6523
  </div>
5855
6524
  </td>
5856
6525
  </tr>
5857
6526
  </table>
5858
6527
  <pre class='ruby code syntax'>
5859
- <span class="Type">CLASSIFY_SHELL_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span>
5860
- <span class="Statement">return</span> <span class="Type">Configuration</span>.simple_comments(<span class="Special">&quot;</span><span class="Constant">#</span><span class="Special">&quot;</span>)
6528
+ <span class="Type">CLASSIFY_HADDOCK_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span>
6529
+ <span class="Statement">return</span> <span class="Type">Comments</span>.denoted_comments(<span class="Special">&quot;</span><span class="Constant">-- [|^$]</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">--</span><span class="Special">&quot;</span>)
5861
6530
  <span class="Statement">end</span>
5862
6531
 
5863
6532
  </pre>
@@ -5869,52 +6538,58 @@ Classify simple shell (“#”) comment lines.
5869
6538
  <td class='html'>
5870
6539
  <div class='rdoc comment markup'>
5871
6540
  <p>
5872
- Classify simple C++ (“//”) comment lines.
6541
+ Configuration for classifying lines to comments and code based on a start
6542
+ comment prefix and continuation comment prefix (e.g., “– |” and
6543
+ “–” for haddock).
5873
6544
  </p>
5874
6545
  </div>
5875
6546
  </td>
5876
6547
  </tr>
5877
6548
  </table>
5878
6549
  <pre class='ruby code syntax'>
5879
- <span class="Type">CLASSIFY_CPP_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span>
5880
- <span class="Statement">return</span> <span class="Type">Configuration</span>.simple_comments(<span class="Special">&quot;</span><span class="Constant">//</span><span class="Special">&quot;</span>)
5881
- <span class="Statement">end</span>
5882
-
6550
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">denoted_comments</span>(start_prefix, continue_prefix)
5883
6551
  </pre>
5884
- <table class='layout'>
6552
+ <table class='layout'>
5885
6553
  <tr>
5886
6554
  <td class='indentation'>
5887
- <pre></pre>
6555
+ <pre> </pre>
5888
6556
  </td>
5889
6557
  <td class='html'>
5890
6558
  <div class='rdoc comment markup'>
5891
6559
  <p>
5892
- Configuration for classifying lines to comments and code based on a simple
5893
- prefix (e.g. “#” for shell style comments or “//” for C++ style
5894
- comments).
6560
+ Ruby coverage somehow barfs if we inline this. Go figure.
5895
6561
  </p>
5896
6562
  </div>
5897
6563
  </td>
5898
6564
  </tr>
5899
6565
  </table>
5900
6566
  <pre class='ruby code syntax'>
5901
- <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">simple_comments</span>(prefix)
6567
+ start_transition = {
6568
+ <span class="Special">&quot;</span><span class="Constant">pattern</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">comment_start_</span><span class="Special">#{</span>start_prefix<span class="Special">}</span><span class="Special">&quot;</span>,
6569
+ <span class="Special">&quot;</span><span class="Constant">next_state</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">comment_continue_</span><span class="Special">#{</span>continue_prefix<span class="Special">}</span><span class="Special">&quot;</span>,
6570
+ <span class="Special">&quot;</span><span class="Constant">kind</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">comment</span><span class="Special">&quot;</span>
6571
+ }
5902
6572
  <span class="Statement">return</span> {
5903
6573
  <span class="Special">&quot;</span><span class="Constant">syntax</span><span class="Special">&quot;</span> =&gt; {
5904
6574
  <span class="Special">&quot;</span><span class="Constant">patterns</span><span class="Special">&quot;</span> =&gt; {
5905
- <span class="Special">&quot;</span><span class="Constant">comment_</span><span class="Special">#{</span>prefix<span class="Special">}</span><span class="Special">&quot;</span> =&gt; { <span class="Special">&quot;</span><span class="Constant">regexp</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">^(</span><span class="Special">\\</span><span class="Constant">s*)</span><span class="Special">#{</span>prefix<span class="Special">}</span><span class="Constant">(?!!)</span><span class="Special">\\</span><span class="Constant">s?(.*)$</span><span class="Special">&quot;</span> },
6575
+ <span class="Special">&quot;</span><span class="Constant">comment_start_</span><span class="Special">#{</span>start_prefix<span class="Special">}</span><span class="Special">&quot;</span> =&gt; { <span class="Special">&quot;</span><span class="Constant">regexp</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">^(</span><span class="Special">\\</span><span class="Constant">s*)</span><span class="Special">#{</span>start_prefix<span class="Special">}</span><span class="Special">\\</span><span class="Constant">s?(.*)$</span><span class="Special">&quot;</span> },
6576
+ <span class="Special">&quot;</span><span class="Constant">comment_continue_</span><span class="Special">#{</span>continue_prefix<span class="Special">}</span><span class="Special">&quot;</span> =&gt; { <span class="Special">&quot;</span><span class="Constant">regexp</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">^(</span><span class="Special">\\</span><span class="Constant">s*)</span><span class="Special">#{</span>continue_prefix<span class="Special">}</span><span class="Special">\\</span><span class="Constant">s?(.*)$</span><span class="Special">&quot;</span> },
5906
6577
  },
5907
6578
  <span class="Special">&quot;</span><span class="Constant">states</span><span class="Special">&quot;</span> =&gt; {
5908
6579
  <span class="Special">&quot;</span><span class="Constant">start</span><span class="Special">&quot;</span> =&gt; {
5909
- <span class="Special">&quot;</span><span class="Constant">transitions</span><span class="Special">&quot;</span> =&gt; [
5910
- { <span class="Special">&quot;</span><span class="Constant">pattern</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">comment_</span><span class="Special">#{</span>prefix<span class="Special">}</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">kind</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">comment</span><span class="Special">&quot;</span> },
5911
- []
6580
+ <span class="Special">&quot;</span><span class="Constant">transitions</span><span class="Special">&quot;</span> =&gt; [ start_transition, [] ],
6581
+ },
6582
+ <span class="Special">&quot;</span><span class="Constant">comment_continue_</span><span class="Special">#{</span>continue_prefix<span class="Special">}</span><span class="Special">&quot;</span> =&gt; {
6583
+ <span class="Special">&quot;</span><span class="Constant">transitions</span><span class="Special">&quot;</span> =&gt; [ {
6584
+ <span class="Special">&quot;</span><span class="Constant">pattern</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">comment_continue_</span><span class="Special">#{</span>continue_prefix<span class="Special">}</span><span class="Special">&quot;</span>,
6585
+ <span class="Special">&quot;</span><span class="Constant">kind</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">comment</span><span class="Special">&quot;</span> },
6586
+ { <span class="Special">&quot;</span><span class="Constant">next_state</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">start</span><span class="Special">&quot;</span> }
5912
6587
  ],
5913
6588
  },
5914
6589
  },
5915
6590
  },
5916
6591
  }
5917
- <span class="PreProc">end</span>
6592
+ end
5918
6593
 
5919
6594
  </pre>
5920
6595
  </div>
@@ -5922,20 +6597,20 @@ comments).
5922
6597
  <span class="chunk containers header">Contained in:</span>
5923
6598
  <ul class="chunk containers">
5924
6599
  <li class="chunk container">
5925
- <a class="chunk container" href="#lib-codnar-split-configurations-rb">lib/codnar/split_configurations.rb</a>
6600
+ <a class="chunk container" href="#lib-codnar-configuration-comments-rb">lib/codnar/configuration/comments.rb</a>
5926
6601
  </li>
5927
6602
  </ul>
5928
6603
  </div>
5929
6604
  </div>
5930
6605
  </p>
5931
6606
  <p>
5932
- Here is a simple test demonstrating using simple comment classifications:
6607
+ Here is a simple test demonstrating using denoted comment classifications:
5933
6608
  </p>
5934
6609
  <p>
5935
6610
  <div class="named_with_containers chunk">
5936
6611
  <div class="chunk name">
5937
- <a name="test-split-simple-comment-configurations-rb">
5938
- <span>test/split_simple_comment_configurations.rb</span>
6612
+ <a name="test-split-denoted-comment-configurations-rb">
6613
+ <span>test/split_denoted_comment_configurations.rb</span>
5939
6614
  </a>
5940
6615
  </div>
5941
6616
  <div class="chunk html">
@@ -5954,29 +6629,25 @@ Here is a simple test demonstrating using simple comment classifications:
5954
6629
  <td class='html'>
5955
6630
  <div class='rdoc comment markup'>
5956
6631
  <p>
5957
- Test built-in split simple comment configurations.
6632
+ Test built-in split denoted comment configurations.
5958
6633
  </p>
5959
6634
  </div>
5960
6635
  </td>
5961
6636
  </tr>
5962
6637
  </table>
5963
6638
  <pre class='ruby code syntax'>
5964
- <span class="PreProc">class</span> <span class="Type">TestSplitSimpleCommentsConfigurations</span> &lt; <span class="Type">Test</span>::<span class="Type">Unit</span>::<span class="Type">TestCase</span>
6639
+ <span class="PreProc">class</span> <span class="Type">TestSplitDenotedCommentsConfigurations</span> &lt; <span class="Type">Test</span>::<span class="Type">Unit</span>::<span class="Type">TestCase</span>
5965
6640
 
5966
6641
  <span class="PreProc">include</span> <span class="Type">Test</span>::<span class="Type">WithConfigurations</span>
5967
6642
  <span class="PreProc">include</span> <span class="Type">Test</span>::<span class="Type">WithErrors</span>
5968
6643
  <span class="PreProc">include</span> <span class="Type">Test</span>::<span class="Type">WithTempfile</span>
5969
6644
 
5970
6645
  <span class="PreProc">def</span> <span class="Identifier">test_custom_comments</span>
5971
- check_any_comment(<span class="Special">&quot;</span><span class="Constant">!</span><span class="Special">&quot;</span>, <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_SIMPLE_COMMENTS</span>.call(<span class="Special">&quot;</span><span class="Constant">!</span><span class="Special">&quot;</span>))
6646
+ check_any_comment(<span class="Special">&quot;</span><span class="Constant">// @</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">//</span><span class="Special">&quot;</span>, <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_DENOTED_COMMENTS</span>.call(<span class="Special">&quot;</span><span class="Constant">// @</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">//</span><span class="Special">&quot;</span>))
5972
6647
  <span class="PreProc">end</span>
5973
6648
 
5974
- <span class="PreProc">def</span> <span class="Identifier">test_shell_comments</span>
5975
- check_any_comment(<span class="Special">&quot;</span><span class="Constant">#</span><span class="Special">&quot;</span>, <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_SHELL_COMMENTS</span>.call)
5976
- <span class="PreProc">end</span>
5977
-
5978
- <span class="PreProc">def</span> <span class="Identifier">test_cpp_comments</span>
5979
- check_any_comment(<span class="Special">&quot;</span><span class="Constant">//</span><span class="Special">&quot;</span>, <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_CPP_COMMENTS</span>.call)
6649
+ <span class="PreProc">def</span> <span class="Identifier">test_haddoc_comments</span>
6650
+ check_any_comment(<span class="Special">&quot;</span><span class="Constant">-- |</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">--</span><span class="Special">&quot;</span>, <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_HADDOCK_COMMENTS</span>.call)
5980
6651
  <span class="PreProc">end</span>
5981
6652
 
5982
6653
  <span class="Statement">protected</span>
@@ -5990,7 +6661,8 @@ Test built-in split simple comment configurations.
5990
6661
  <td class='html'>
5991
6662
  <div class='rdoc comment markup'>
5992
6663
  <p>
5993
- The “?” will be replaced by the simple comment prefix.
6664
+ The “&lt;&lt;&lt;” will be replaced by the start comment prefix, and
6665
+ the “&gt;&gt;&gt;” will be replaced by the continue comment prefix.
5994
6666
  </p>
5995
6667
  </div>
5996
6668
  </td>
@@ -5998,35 +6670,67 @@ The “?” will be replaced by the simple comment prefix.
5998
6670
  </table>
5999
6671
  <pre class='ruby code syntax'>
6000
6672
  <span class="Type">ANY_COMMENT_CODE</span> = &lt;&lt;-<span class="Special">EOF</span>.unindent
6001
- <span class="Constant"> ?</span>
6002
- <span class="Constant"> ? Comment</span>
6003
- <span class="Constant"> Code</span>
6004
- <span class="Constant"> ?! Not comment</span>
6673
+ <span class="Constant"> &gt;&gt;&gt; Not start comment</span>
6674
+ <span class="Constant"> &lt;&lt;&lt; Start comment</span>
6675
+ <span class="Constant"> &gt;&gt;&gt; Continue comment</span>
6676
+ <span class="Constant"> Not a comment</span>
6005
6677
  <span class="Constant"> </span><span class="Special">EOF</span>
6006
6678
 
6007
- <span class="PreProc">def</span> <span class="Identifier">check_any_comment</span>(prefix, configuration)
6008
- check_split_file(<span class="Type">ANY_COMMENT_CODE</span>.gsub(<span class="Special">&quot;</span><span class="Constant">?</span><span class="Special">&quot;</span>, prefix),
6009
- <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_SOURCE_CODE</span>.call(<span class="Special">&quot;</span><span class="Constant">any</span><span class="Special">&quot;</span>),
6010
- <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">FORMAT_PRE_COMMENTS</span>,
6011
- configuration) <span class="Statement">do</span> |<span class="Identifier">path</span>|
6679
+ </pre>
6680
+ <table class='layout'>
6681
+ <tr>
6682
+ <td class='indentation'>
6683
+ <pre> </pre>
6684
+ </td>
6685
+ <td class='html'>
6686
+ <div class='rdoc comment markup'>
6687
+ <p>
6688
+ The “&gt;&gt;&gt;” will be replaced by the continue comment prefix.
6689
+ </p>
6690
+ </div>
6691
+ </td>
6692
+ </tr>
6693
+ </table>
6694
+ <pre class='ruby code syntax'>
6695
+ <span class="Type">ANY_COMMENT_HTML</span> = &lt;&lt;-<span class="Special">EOF</span>.unindent.chomp <span class="Comment"># ((( html</span>
6696
+ </pre>
6697
+ <pre class='html code syntax'>
6698
+ <span class="Identifier">&lt;</span><span class="Statement">pre</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'code'</span><span class="Identifier">&gt;</span>
6699
+ <span class="Error">&gt;&gt;&gt;</span> Not start comment
6700
+ <span class="Identifier">&lt;/</span><span class="Statement">pre</span><span class="Identifier">&gt;</span>
6701
+ <span class="Identifier">&lt;</span><span class="Statement">pre</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'comment'</span><span class="Identifier">&gt;</span>
6702
+ Start comment
6703
+ Continue comment
6704
+ <span class="Identifier">&lt;/</span><span class="Statement">pre</span><span class="Identifier">&gt;</span>
6705
+ <span class="Identifier">&lt;</span><span class="Statement">pre</span><span class="Identifier"> </span><span class="Type">class</span><span class="Identifier">=</span><span class="Constant">'code'</span><span class="Identifier">&gt;</span>
6706
+ Not a comment
6707
+ <span class="Identifier">&lt;/</span><span class="Statement">pre</span><span class="Identifier">&gt;</span>
6708
+ EOF
6709
+ # )))
6710
+
6711
+ def check_any_comment(start_prefix, continue_prefix, configuration)
6712
+ check_split_file(ANY_COMMENT_CODE.gsub(&quot;<span class="Identifier">&lt;</span><span class="Error">&lt;</span><span class="Identifier">&lt;</span><span class="Constant">&quot;, start_prefix).gsub(&quot;</span><span class="Identifier">&gt;</span><span class="Error">&gt;&gt;</span>&quot;, continue_prefix),
6713
+ Codnar::Configuration::CLASSIFY_SOURCE_CODE.call(&quot;any&quot;),
6714
+ Codnar::Configuration::FORMAT_PRE_COMMENTS,
6715
+ configuration) do |path|
6012
6716
  [ {
6013
- <span class="Special">&quot;</span><span class="Constant">name</span><span class="Special">&quot;</span> =&gt; path,
6014
- <span class="Special">&quot;</span><span class="Constant">locations</span><span class="Special">&quot;</span> =&gt; [ { <span class="Special">&quot;</span><span class="Constant">file</span><span class="Special">&quot;</span> =&gt; path, <span class="Special">&quot;</span><span class="Constant">line</span><span class="Special">&quot;</span> =&gt; <span class="Constant">1</span> } ],
6015
- <span class="Special">&quot;</span><span class="Constant">containers</span><span class="Special">&quot;</span> =&gt; [],
6016
- <span class="Special">&quot;</span><span class="Constant">contained</span><span class="Special">&quot;</span> =&gt; [],
6017
- <span class="Special">&quot;</span><span class="Constant">html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">&lt;pre class='comment'&gt;</span><span class="Special">\n\n</span><span class="Constant">Comment</span><span class="Special">\n</span><span class="Constant">&lt;/pre&gt;</span><span class="Special">\n</span><span class="Constant">&lt;pre class='code'&gt;</span><span class="Special">\n</span><span class="Constant">Code</span><span class="Special">\n</span><span class="Special">#{</span>prefix<span class="Special">}</span><span class="Constant">! Not comment</span><span class="Special">\n</span><span class="Constant">&lt;/pre&gt;</span><span class="Special">&quot;</span>
6717
+ &quot;name&quot; =<span class="Error">&gt;</span> path,
6718
+ &quot;locations&quot; =<span class="Error">&gt;</span> [ { &quot;file&quot; =<span class="Error">&gt;</span> path, &quot;line&quot; =<span class="Error">&gt;</span> 1 } ],
6719
+ &quot;containers&quot; =<span class="Error">&gt;</span> [],
6720
+ &quot;contained&quot; =<span class="Error">&gt;</span> [],
6721
+ &quot;html&quot; =<span class="Error">&gt;</span> ANY_COMMENT_HTML.gsub(&quot;<span class="Error">&gt;&gt;&gt;</span>&quot;, continue_prefix),
6018
6722
  } ]
6019
- <span class="Statement">end</span>
6020
- <span class="PreProc">end</span>
6723
+ end
6724
+ end
6021
6725
 
6022
6726
  end
6023
6727
  </pre>
6024
6728
  </div>
6025
6729
  </div>
6026
6730
  </p>
6027
- <h4>Complex comment classification</h4>
6731
+ <h5>Delimited comment classification</h5>
6028
6732
  <p>
6029
- Other languages use a complex multi-line comment syntax, where some prefix
6733
+ Other languages use a delimited multi-line comment syntax, where some prefix
6030
6734
  indicates the beginning of the comment, some suffix indicates the end, and by
6031
6735
  convention some prefix is expected for the inner comment lines (e.g., C's
6032
6736
  "<code>/*</code>", "<code>*</code>", "<code>*/</code>" comments or HTML's "<code>&lt;!--</code>", "<code>-</code>", "<code>--&gt;</code>" comments).
@@ -6034,8 +6738,8 @@ convention some prefix is expected for the inner comment lines (e.g., C's
6034
6738
  <p>
6035
6739
  <div class="named_with_containers chunk">
6036
6740
  <div class="chunk name">
6037
- <a name="complex-comment-classification-configurations">
6038
- <span>Complex comment classification configurations</span>
6741
+ <a name="delimited-comment-classification-configurations">
6742
+ <span>Delimited comment classification configurations</span>
6039
6743
  </a>
6040
6744
  </div>
6041
6745
  <div class="chunk html">
@@ -6050,7 +6754,7 @@ convention some prefix is expected for the inner comment lines (e.g., C's
6050
6754
  <td class='html'>
6051
6755
  <div class='rdoc comment markup'>
6052
6756
  <p>
6053
- Classify complex comment lines. It accepts a restricted format: each
6757
+ Classify delimited comment lines. It accepts a restricted format: each
6054
6758
  comment is expected to start with some exact prefix (e.g. “/*” for C
6055
6759
  style comments or “&lt;!–” for HTML style comments). The following
6056
6760
  space, if any, is stripped from the payload. Following lines are also
@@ -6075,8 +6779,8 @@ useful.
6075
6779
  </tr>
6076
6780
  </table>
6077
6781
  <pre class='ruby code syntax'>
6078
- <span class="Type">CLASSIFY_COMPLEX_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span> |<span class="Identifier">prefix</span>, <span class="Identifier">inner</span>, <span class="Identifier">suffix</span>|
6079
- <span class="Statement">return</span> <span class="Type">Configuration</span>.complex_comments(prefix, inner, suffix)
6782
+ <span class="Type">CLASSIFY_DELIMITED_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span> |<span class="Identifier">prefix</span>, <span class="Identifier">inner</span>, <span class="Identifier">suffix</span>|
6783
+ <span class="Statement">return</span> <span class="Type">Comments</span>.delimited_comments(prefix, inner, suffix)
6080
6784
  <span class="Statement">end</span>
6081
6785
 
6082
6786
  </pre>
@@ -6088,7 +6792,7 @@ useful.
6088
6792
  <td class='html'>
6089
6793
  <div class='rdoc comment markup'>
6090
6794
  <p>
6091
- Classify complex C (“/*”, “ *”, “ */”) style comments.
6795
+ Classify delimited C (“/*”, “ *”, “ */”) style comments.
6092
6796
  </p>
6093
6797
  </div>
6094
6798
  </td>
@@ -6113,7 +6817,7 @@ need to escape special characters such as “*”.
6113
6817
  </tr>
6114
6818
  </table>
6115
6819
  <pre class='ruby code syntax'>
6116
- <span class="Statement">return</span> <span class="Type">Configuration</span>.complex_comments(<span class="Special">&quot;</span><span class="Constant">/</span><span class="Special">\\</span><span class="Constant">*</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> </span><span class="Special">\\</span><span class="Constant">*</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> </span><span class="Special">\\</span><span class="Constant">*/</span><span class="Special">&quot;</span>)
6820
+ <span class="Statement">return</span> <span class="Type">Comments</span>.delimited_comments(<span class="Special">&quot;</span><span class="Constant">/</span><span class="Special">\\</span><span class="Constant">*</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> </span><span class="Special">\\</span><span class="Constant">*</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> </span><span class="Special">\\</span><span class="Constant">*/</span><span class="Special">&quot;</span>)
6117
6821
  end
6118
6822
 
6119
6823
  </pre>
@@ -6125,7 +6829,7 @@ end
6125
6829
  <td class='html'>
6126
6830
  <div class='rdoc comment markup'>
6127
6831
  <p>
6128
- Classify complex HTML (“&lt;!–”, “ -”, “–&gt;”) style
6832
+ Classify delimited HTML (“&lt;!–”, “ -”, “–&gt;”) style
6129
6833
  comments.
6130
6834
  </p>
6131
6835
  </div>
@@ -6134,7 +6838,7 @@ comments.
6134
6838
  </table>
6135
6839
  <pre class='ruby code syntax'>
6136
6840
  <span class="Type">CLASSIFY_HTML_COMMENTS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span>
6137
- <span class="Statement">return</span> <span class="Type">Configuration</span>.complex_comments(<span class="Special">&quot;</span><span class="Constant">&lt;!--</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> -</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">--&gt;</span><span class="Special">&quot;</span>)
6841
+ <span class="Statement">return</span> <span class="Type">Comments</span>.delimited_comments(<span class="Special">&quot;</span><span class="Constant">&lt;!--</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> -</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant">--&gt;</span><span class="Special">&quot;</span>)
6138
6842
  <span class="Statement">end</span>
6139
6843
 
6140
6844
  </pre>
@@ -6146,17 +6850,17 @@ comments.
6146
6850
  <td class='html'>
6147
6851
  <div class='rdoc comment markup'>
6148
6852
  <p>
6149
- Configuration for classifying lines to comments and code based on a complex
6150
- start prefix, inner line prefix and final suffix (e.g., “/*”, “ *”,
6151
- “ */” for C-style comments or “&lt;!–”, “ -”, “–&gt;”
6152
- for HTML style comments).
6853
+ Configuration for classifying lines to comments and code based on a
6854
+ delimited start prefix, inner line prefix and final suffix (e.g., “/*”,
6855
+ *”, “ */” for C-style comments or “&lt;!–”, “ -”,
6856
+ “–&gt;” for HTML style comments).
6153
6857
  </p>
6154
6858
  </div>
6155
6859
  </td>
6156
6860
  </tr>
6157
6861
  </table>
6158
6862
  <pre class='ruby code syntax'>
6159
- <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">complex_comments</span>(prefix, inner, suffix)
6863
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">delimited_comments</span>(prefix, inner, suffix)
6160
6864
  <span class="Statement">return</span> {
6161
6865
  <span class="Special">&quot;</span><span class="Constant">syntax</span><span class="Special">&quot;</span> =&gt; {
6162
6866
  <span class="Special">&quot;</span><span class="Constant">patterns</span><span class="Special">&quot;</span> =&gt; {
@@ -6196,20 +6900,20 @@ for HTML style comments).
6196
6900
  <span class="chunk containers header">Contained in:</span>
6197
6901
  <ul class="chunk containers">
6198
6902
  <li class="chunk container">
6199
- <a class="chunk container" href="#lib-codnar-split-configurations-rb">lib/codnar/split_configurations.rb</a>
6903
+ <a class="chunk container" href="#lib-codnar-configuration-comments-rb">lib/codnar/configuration/comments.rb</a>
6200
6904
  </li>
6201
6905
  </ul>
6202
6906
  </div>
6203
6907
  </div>
6204
6908
  </p>
6205
6909
  <p>
6206
- Here is a simple test demonstrating using complex comment classifications:
6910
+ Here is a simple test demonstrating using delimited comment classifications:
6207
6911
  </p>
6208
6912
  <p>
6209
6913
  <div class="named_with_containers chunk">
6210
6914
  <div class="chunk name">
6211
- <a name="test-split-complex-comment-configurations-rb">
6212
- <span>test/split_complex_comment_configurations.rb</span>
6915
+ <a name="test-split-delimited-comment-configurations-rb">
6916
+ <span>test/split_delimited_comment_configurations.rb</span>
6213
6917
  </a>
6214
6918
  </div>
6215
6919
  <div class="chunk html">
@@ -6228,14 +6932,14 @@ Here is a simple test demonstrating using complex comment classifications:
6228
6932
  <td class='html'>
6229
6933
  <div class='rdoc comment markup'>
6230
6934
  <p>
6231
- Test built-in split complex comment configurations.
6935
+ Test built-in split delimited comment configurations.
6232
6936
  </p>
6233
6937
  </div>
6234
6938
  </td>
6235
6939
  </tr>
6236
6940
  </table>
6237
6941
  <pre class='ruby code syntax'>
6238
- <span class="PreProc">class</span> <span class="Type">TestSplitComplexCommentsConfigurations</span> &lt; <span class="Type">Test</span>::<span class="Type">Unit</span>::<span class="Type">TestCase</span>
6942
+ <span class="PreProc">class</span> <span class="Type">TestSplitDelimitedCommentsConfigurations</span> &lt; <span class="Type">Test</span>::<span class="Type">Unit</span>::<span class="Type">TestCase</span>
6239
6943
 
6240
6944
  <span class="PreProc">include</span> <span class="Type">Test</span>::<span class="Type">WithConfigurations</span>
6241
6945
  <span class="PreProc">include</span> <span class="Type">Test</span>::<span class="Type">WithErrors</span>
@@ -6259,7 +6963,7 @@ need to escape special characters such as “{” and “|”.
6259
6963
  </tr>
6260
6964
  </table>
6261
6965
  <pre class='ruby code syntax'>
6262
- check_any_comment([ <span class="Special">&quot;</span><span class="Constant">@{</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> |</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> }@</span><span class="Special">&quot;</span> ], <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_COMPLEX_COMMENTS</span>.call(<span class="Special">&quot;</span><span class="Constant">@</span><span class="Special">\\</span><span class="Constant">{</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> </span><span class="Special">\\</span><span class="Constant">|</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> </span><span class="Special">\\</span><span class="Constant">}@</span><span class="Special">&quot;</span>))
6966
+ check_any_comment([ <span class="Special">&quot;</span><span class="Constant">@{</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> |</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> }@</span><span class="Special">&quot;</span> ], <span class="Type">Codnar</span>::<span class="Type">Configuration</span>::<span class="Type">CLASSIFY_DELIMITED_COMMENTS</span>.call(<span class="Special">&quot;</span><span class="Constant">@</span><span class="Special">\\</span><span class="Constant">{</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> </span><span class="Special">\\</span><span class="Constant">|</span><span class="Special">&quot;</span>, <span class="Special">&quot;</span><span class="Constant"> </span><span class="Special">\\</span><span class="Constant">}@</span><span class="Special">&quot;</span>))
6263
6967
  end
6264
6968
 
6265
6969
  <span class="PreProc">def</span> <span class="Identifier">test_c_comments</span>
@@ -6281,9 +6985,9 @@ need to escape special characters such as “{” and “|”.
6281
6985
  <td class='html'>
6282
6986
  <div class='rdoc comment markup'>
6283
6987
  <p>
6284
- The “&lt;&lt;&lt;” will be replaced by the complex comment prefix, the
6988
+ The “&lt;&lt;&lt;” will be replaced by the start comment prefix, the
6285
6989
  “&lt;&gt;” will be replaced by the inner line comment prefix, and the
6286
- “&gt;&gt;&gt;” will be replaced by the complex comment suffix.
6990
+ “&gt;&gt;&gt;” will be replaced by the end comment suffix.
6287
6991
  </p>
6288
6992
  </div>
6289
6993
  </td>
@@ -6291,12 +6995,12 @@ The “&lt;&lt;&lt;” will be replaced by the complex comment prefix, the
6291
6995
  </table>
6292
6996
  <pre class='ruby code syntax'>
6293
6997
  <span class="Type">ANY_COMMENT_CODE</span> = &lt;&lt;-<span class="Special">EOF</span>.unindent
6294
- <span class="Constant"> /-- One-line comment --/</span>
6998
+ <span class="Constant"> &lt;&lt;&lt; One-line comment &gt;&gt;&gt;</span>
6295
6999
  <span class="Constant"> Code</span>
6296
- <span class="Constant"> /--</span>
6297
- <span class="Constant"> - Multi-line</span>
6298
- <span class="Constant"> - comment.</span>
6299
- <span class="Constant"> --/</span>
7000
+ <span class="Constant"> &lt;&lt;&lt;</span>
7001
+ <span class="Constant"> &lt;&gt; Multi-line</span>
7002
+ <span class="Constant"> &lt;&gt; comment.</span>
7003
+ <span class="Constant"> &gt;&gt;&gt;</span>
6300
7004
  <span class="Constant"> </span><span class="Special">EOF</span>
6301
7005
 
6302
7006
  <span class="Type">ANY_COMMENT_HTML</span> = &lt;&lt;-<span class="Special">EOF</span>.unindent.chomp <span class="Comment"># ((( html</span>
@@ -6319,21 +7023,21 @@ The “&lt;&lt;&lt;” will be replaced by the complex comment prefix, the
6319
7023
 
6320
7024
  def check_any_comment(patterns, configuration)
6321
7025
  prefix, inner, suffix = patterns
6322
- check_split_file(ANY_COMMENT_CODE.gsub(&quot;/--&quot;, prefix).gsub(&quot;--/&quot;, suffix).gsub(&quot; -&quot;, inner),
6323
- Codnar::Configuration::CLASSIFY_SOURCE_CODE.call(&quot;any&quot;),
6324
- Codnar::Configuration::FORMAT_PRE_COMMENTS,
6325
- configuration) do |path|
6326
- [ {
6327
- &quot;name&quot; =<span class="Error">&gt;</span> path,
6328
- &quot;locations&quot; =<span class="Error">&gt;</span> [ { &quot;file&quot; =<span class="Error">&gt;</span> path, &quot;line&quot; =<span class="Error">&gt;</span> 1 } ],
6329
- &quot;containers&quot; =<span class="Error">&gt;</span> [],
6330
- &quot;contained&quot; =<span class="Error">&gt;</span> [],
6331
- &quot;html&quot; =<span class="Error">&gt;</span> ANY_COMMENT_HTML.gsub(&quot;/--&quot;, prefix).gsub(&quot;--/&quot;, suffix).gsub(&quot; -&quot;, inner),
6332
- } ]
6333
- end
6334
- end
7026
+ check_split_file(ANY_COMMENT_CODE.gsub(&quot;<span class="Identifier">&lt;</span><span class="Error">&lt;</span><span class="Identifier">&lt;</span><span class="Constant">&quot;, prefix).gsub(&quot;</span><span class="Identifier">&gt;</span><span class="Error">&gt;&gt;</span>&quot;, suffix).gsub(&quot;<span class="Identifier">&lt;&gt;</span><span class="Constant">&quot;, inner),</span>
7027
+ <span class="Constant"> Codnar::Configuration::CLASSIFY_SOURCE_CODE.call(&quot;</span><span class="Identifier">any</span><span class="Constant">&quot;),</span>
7028
+ <span class="Constant"> Codnar::Configuration::FORMAT_PRE_COMMENTS,</span>
7029
+ <span class="Constant"> configuration) do |path|</span>
7030
+ <span class="Constant"> [ {</span>
7031
+ <span class="Constant"> &quot;</span><span class="Type">name</span><span class="Constant">&quot; =&gt; path,</span>
7032
+ <span class="Constant"> &quot;</span><span class="Identifier">locations</span><span class="Constant">&quot; =&gt; [ { &quot;</span><span class="Identifier">file</span><span class="Constant">&quot; =&gt; path, &quot;</span><span class="Identifier">line</span><span class="Constant">&quot; =&gt; 1 } ],</span>
7033
+ <span class="Constant"> &quot;</span><span class="Identifier">containers</span><span class="Constant">&quot; =&gt; [],</span>
7034
+ <span class="Constant"> &quot;</span><span class="Identifier">contained</span><span class="Constant">&quot; =&gt; [],</span>
7035
+ <span class="Constant"> &quot;</span><span class="Identifier">html</span><span class="Constant">&quot; =&gt; ANY_COMMENT_HTML.gsub(&quot;</span><span class="Identifier">/--</span><span class="Constant">&quot;, prefix).gsub(&quot;</span><span class="Identifier">--/</span><span class="Constant">&quot;, suffix).gsub(&quot;</span><span class="Identifier"> -</span><span class="Constant">&quot;, inner),</span>
7036
+ <span class="Constant"> } ]</span>
7037
+ <span class="Constant"> end</span>
7038
+ <span class="Constant"> end</span>
6335
7039
 
6336
- end
7040
+ <span class="Constant">end</span>
6337
7041
  </pre>
6338
7042
  </div>
6339
7043
  </div>
@@ -6425,13 +7129,37 @@ configuration that classifies some lines as <tt>comment</tt>.
6425
7129
  },
6426
7130
  }
6427
7131
 
7132
+ </pre>
7133
+ <table class='layout'>
7134
+ <tr>
7135
+ <td class='indentation'>
7136
+ <pre></pre>
7137
+ </td>
7138
+ <td class='html'>
7139
+ <div class='rdoc comment markup'>
7140
+ <p>
7141
+ Format comments that use the Haddock notation. Is used to complement a
7142
+ configuration that classifies some lines as <tt>comment</tt>.
7143
+ </p>
7144
+ </div>
7145
+ </td>
7146
+ </tr>
7147
+ </table>
7148
+ <pre class='ruby code syntax'>
7149
+ <span class="Type">FORMAT_HADDOCK_COMMENTS</span> = {
7150
+ <span class="Special">&quot;</span><span class="Constant">formatters</span><span class="Special">&quot;</span> =&gt; {
7151
+ <span class="Special">&quot;</span><span class="Constant">comment</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.markup_lines_to_html(lines, Haddock, 'haddock')</span><span class="Special">&quot;</span>,
7152
+ <span class="Special">&quot;</span><span class="Constant">unindented_html</span><span class="Special">&quot;</span> =&gt; <span class="Special">&quot;</span><span class="Constant">Formatter.unindented_lines_to_html(lines)</span><span class="Special">&quot;</span>,
7153
+ },
7154
+ }
7155
+
6428
7156
  </pre>
6429
7157
  </div>
6430
7158
  <div class="chunk containers">
6431
7159
  <span class="chunk containers header">Contained in:</span>
6432
7160
  <ul class="chunk containers">
6433
7161
  <li class="chunk container">
6434
- <a class="chunk container" href="#lib-codnar-split-configurations-rb">lib/codnar/split_configurations.rb</a>
7162
+ <a class="chunk container" href="#lib-codnar-configuration-comments-rb">lib/codnar/configuration/comments.rb</a>
6435
7163
  </li>
6436
7164
  </ul>
6437
7165
  </div>
@@ -6499,7 +7227,7 @@ Test built-in split comment formatting configurations.
6499
7227
  <span class="Constant"> &lt;td class='html'&gt;</span>
6500
7228
  <span class="Constant"> &lt;div class='rdoc comment markup'&gt;</span>
6501
7229
  <span class="Constant"> &lt;p&gt;</span>
6502
- <span class="Constant"> Comment &lt;b&gt;text&lt;/b&gt;.</span>
7230
+ <span class="Constant"> Comment &lt;strong&gt;text&lt;/strong&gt;.</span>
6503
7231
  <span class="Constant"> &lt;/p&gt;</span>
6504
7232
  <span class="Constant"> &lt;/div&gt;</span>
6505
7233
  <span class="Constant"> &lt;/td&gt;</span>
@@ -6554,10 +7282,80 @@ Test built-in split comment formatting configurations.
6554
7282
  </div>
6555
7283
  </div>
6556
7284
  </p>
6557
- <h4>Syntax highlighting using GVim</h4>
7285
+ <h4>Syntax highlighting</h4>
7286
+ <p>
7287
+ Highlighting the syntax of the source code embedded in the documentation
7288
+ improved readability. Codnar provides several ways to achieve this.
7289
+ </p>
7290
+ <p>
7291
+ <div class="named_with_containers chunk">
7292
+ <div class="chunk name">
7293
+ <a name="lib-codnar-configuration-highlighting-rb">
7294
+ <span>lib/codnar/configuration/highlighting.rb</span>
7295
+ </a>
7296
+ </div>
7297
+ <div class="chunk html">
7298
+ <pre class='ruby code syntax'>
7299
+ <span class="PreProc">module</span> <span class="Type">Codnar</span>
7300
+
7301
+ <span class="PreProc">module</span> <span class="Type">Configuration</span>
7302
+
7303
+ </pre>
7304
+ <table class='layout'>
7305
+ <tr>
7306
+ <td class='indentation'>
7307
+ <pre> </pre>
7308
+ </td>
7309
+ <td class='html'>
7310
+ <div class='rdoc comment markup'>
7311
+ <p>
7312
+ Configurations for highlighting source code lines.
7313
+ </p>
7314
+ </div>
7315
+ </td>
7316
+ </tr>
7317
+ </table>
7318
+ <pre class='ruby code syntax'>
7319
+ <span class="PreProc">module</span> <span class="Type">Highlighting</span>
7320
+
7321
+ </pre>
7322
+ <pre class='nested chunk'>
7323
+ <a class='nested chunk' href='#gvim-syntax-highlighting-formatting-configurations'>GVim syntax highlighting formatting configurations</a>
7324
+ </pre>
7325
+ <pre class='ruby code syntax'>
7326
+
7327
+ </pre>
7328
+ <pre class='nested chunk'>
7329
+ <a class='nested chunk' href='#coderay-syntax-highlighting-formatting-configurations'>CodeRay syntax highlighting formatting configurations</a>
7330
+ </pre>
7331
+ <pre class='ruby code syntax'>
7332
+
7333
+ </pre>
7334
+ <pre class='nested chunk'>
7335
+ <a class='nested chunk' href='#sunlight-syntax-highlighting-formatting-configurations'>Sunlight syntax highlighting formatting configurations</a>
7336
+ </pre>
7337
+ <pre class='ruby code syntax'>
7338
+
7339
+ </pre>
7340
+ <pre class='nested chunk'>
7341
+ <a class='nested chunk' href='#chunk-splitting-configurations'>Chunk splitting configurations</a>
7342
+ </pre>
7343
+ <pre class='ruby code syntax'>
7344
+
7345
+ end
7346
+
7347
+ end
7348
+
7349
+ end
7350
+ </pre>
7351
+ </div>
7352
+ </div>
7353
+ </p>
7354
+ <h5>Syntax highlighting using GVim</h5>
6558
7355
  <p>
6559
- Supporting a specific programming language (other than dealing with comments)
6560
- is very easy using GVim for syntax highlighting, as demonstrated here:
7356
+ Supporting almost any known programming language (other than dealing with
7357
+ comments) is very easy using GVim for syntax highlighting, as demonstrated
7358
+ here:
6561
7359
  </p>
6562
7360
  <p>
6563
7361
  <div class="named_with_containers chunk">
@@ -6588,7 +7386,7 @@ lines.
6588
7386
  </table>
6589
7387
  <pre class='ruby code syntax'>
6590
7388
  <span class="Type">FORMAT_CODE_GVIM_HTML</span> = <span class="Statement">lambda</span> <span class="Statement">do</span> |<span class="Identifier">syntax</span>|
6591
- <span class="Statement">return</span> <span class="Type">Configuration</span>.klass_code_format(<span class="Special">'</span><span class="Constant">GVim</span><span class="Special">'</span>, syntax, <span class="Special">&quot;</span><span class="Constant">[]</span><span class="Special">&quot;</span>)
7389
+ <span class="Statement">return</span> <span class="Type">Highlighting</span>.klass_code_format(<span class="Special">'</span><span class="Constant">GVim</span><span class="Special">'</span>, syntax, <span class="Special">&quot;</span><span class="Constant">[]</span><span class="Special">&quot;</span>)
6592
7390
  <span class="Statement">end</span>
6593
7391
 
6594
7392
  </pre>
@@ -6610,7 +7408,7 @@ already classified the code lines.
6610
7408
  </table>
6611
7409
  <pre class='ruby code syntax'>
6612
7410
  <span class="Type">FORMAT_CODE_GVIM_CSS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span> |<span class="Identifier">syntax</span>|
6613
- <span class="Statement">return</span> <span class="Type">Configuration</span>.klass_code_format(<span class="Special">'</span><span class="Constant">GVim</span><span class="Special">'</span>, syntax, <span class="Special">&quot;</span><span class="Constant">[ '+:let html_use_css=1' ]</span><span class="Special">&quot;</span>)
7411
+ <span class="Statement">return</span> <span class="Type">Highlighting</span>.klass_code_format(<span class="Special">'</span><span class="Constant">GVim</span><span class="Special">'</span>, syntax, <span class="Special">&quot;</span><span class="Constant">[ '+:let html_use_css=1' ]</span><span class="Special">&quot;</span>)
6614
7412
  <span class="Statement">end</span>
6615
7413
 
6616
7414
  </pre>
@@ -6643,7 +7441,7 @@ Return a configuration for highlighting a specific syntax using GVim.
6643
7441
  <span class="chunk containers header">Contained in:</span>
6644
7442
  <ul class="chunk containers">
6645
7443
  <li class="chunk container">
6646
- <a class="chunk container" href="#lib-codnar-split-configurations-rb">lib/codnar/split_configurations.rb</a>
7444
+ <a class="chunk container" href="#lib-codnar-configuration-highlighting-rb">lib/codnar/configuration/highlighting.rb</a>
6647
7445
  </li>
6648
7446
  </ul>
6649
7447
  </div>
@@ -6688,7 +7486,7 @@ Colors for GVim classes
6688
7486
  </div>
6689
7487
  </div>
6690
7488
  </p>
6691
- <h4>Syntax highlighting using CodeRay</h4>
7489
+ <h5>Syntax highlighting using CodeRay</h5>
6692
7490
  <p>
6693
7491
  For supported programming languages, you may choose to use CodeRay instead of GVim.
6694
7492
  </p>
@@ -6721,7 +7519,7 @@ lines.
6721
7519
  </table>
6722
7520
  <pre class='ruby code syntax'>
6723
7521
  <span class="Type">FORMAT_CODE_CODERAY_HTML</span> = <span class="Statement">lambda</span> <span class="Statement">do</span> |<span class="Identifier">syntax</span>|
6724
- <span class="Statement">return</span> <span class="Type">Configuration</span>.klass_code_format(<span class="Special">'</span><span class="Constant">CodeRay</span><span class="Special">'</span>, syntax, <span class="Special">&quot;</span><span class="Constant">{}</span><span class="Special">&quot;</span>)
7522
+ <span class="Statement">return</span> <span class="Type">Highlighting</span>.klass_code_format(<span class="Special">'</span><span class="Constant">CodeRay</span><span class="Special">'</span>, syntax, <span class="Special">&quot;</span><span class="Constant">{}</span><span class="Special">&quot;</span>)
6725
7523
  <span class="Statement">end</span>
6726
7524
 
6727
7525
  </pre>
@@ -6743,7 +7541,7 @@ configuration already classified the code lines.
6743
7541
  </table>
6744
7542
  <pre class='ruby code syntax'>
6745
7543
  <span class="Type">FORMAT_CODE_CODERAY_CSS</span> = <span class="Statement">lambda</span> <span class="Statement">do</span> |<span class="Identifier">syntax</span>|
6746
- <span class="Statement">return</span> <span class="Type">Configuration</span>.klass_code_format(<span class="Special">'</span><span class="Constant">CodeRay</span><span class="Special">'</span>, syntax, <span class="Special">&quot;</span><span class="Constant">{ :css =&gt; :class }</span><span class="Special">&quot;</span>)
7544
+ <span class="Statement">return</span> <span class="Type">Highlighting</span>.klass_code_format(<span class="Special">'</span><span class="Constant">CodeRay</span><span class="Special">'</span>, syntax, <span class="Special">&quot;</span><span class="Constant">{ :css =&gt; :class }</span><span class="Special">&quot;</span>)
6747
7545
  <span class="Statement">end</span>
6748
7546
 
6749
7547
  </pre>
@@ -6752,7 +7550,7 @@ configuration already classified the code lines.
6752
7550
  <span class="chunk containers header">Contained in:</span>
6753
7551
  <ul class="chunk containers">
6754
7552
  <li class="chunk container">
6755
- <a class="chunk container" href="#lib-codnar-split-configurations-rb">lib/codnar/split_configurations.rb</a>
7553
+ <a class="chunk container" href="#lib-codnar-configuration-highlighting-rb">lib/codnar/configuration/highlighting.rb</a>
6756
7554
  </li>
6757
7555
  </ul>
6758
7556
  </div>
@@ -6916,7 +7714,7 @@ Extracted from CodeRay output
6916
7714
  </div>
6917
7715
  </div>
6918
7716
  </p>
6919
- <h4>Syntax highlighting using Sunlight</h4>
7717
+ <h5>Syntax highlighting using Sunlight</h5>
6920
7718
  <p>
6921
7719
  For small projects in supported languages, you may choose to use Sunlight
6922
7720
  instead of GVim.
@@ -6951,7 +7749,7 @@ splitting the file.
6951
7749
  </table>
6952
7750
  <pre class='ruby code syntax'>
6953
7751
  <span class="Type">FORMAT_CODE_SUNLIGHT</span> = <span class="Statement">lambda</span> <span class="Statement">do</span> |<span class="Identifier">syntax</span>|
6954
- <span class="Statement">return</span> <span class="Type">Configuration</span>.sunlight_code_format(syntax)
7752
+ <span class="Statement">return</span> <span class="Type">Highlighting</span>.sunlight_code_format(syntax)
6955
7753
  <span class="Statement">end</span>
6956
7754
 
6957
7755
  </pre>
@@ -6984,7 +7782,7 @@ Return a configuration for highlighting a specific syntax using Sunlight.
6984
7782
  <span class="chunk containers header">Contained in:</span>
6985
7783
  <ul class="chunk containers">
6986
7784
  <li class="chunk container">
6987
- <a class="chunk container" href="#lib-codnar-split-configurations-rb">lib/codnar/split_configurations.rb</a>
7785
+ <a class="chunk container" href="#lib-codnar-configuration-highlighting-rb">lib/codnar/configuration/highlighting.rb</a>
6988
7786
  </li>
6989
7787
  </ul>
6990
7788
  </div>
@@ -7156,7 +7954,7 @@ designations. Assumes other configurations handle the actual content lines.
7156
7954
  <span class="chunk containers header">Contained in:</span>
7157
7955
  <ul class="chunk containers">
7158
7956
  <li class="chunk container">
7159
- <a class="chunk container" href="#lib-codnar-split-configurations-rb">lib/codnar/split_configurations.rb</a>
7957
+ <a class="chunk container" href="#lib-codnar-configuration-highlighting-rb">lib/codnar/configuration/highlighting.rb</a>
7160
7958
  </li>
7161
7959
  </ul>
7162
7960
  </div>
@@ -7364,7 +8162,7 @@ Test combination of many built-in configurations.
7364
8162
  <span class="Constant"> &lt;td class='html'&gt;</span>
7365
8163
  <span class="Constant"> &lt;div class='rdoc comment markup'&gt;</span>
7366
8164
  <span class="Constant"> &lt;p&gt;</span>
7367
- <span class="Constant"> Hello, &lt;b&gt;world&lt;/b&gt;!</span>
8165
+ <span class="Constant"> Hello, &lt;strong&gt;world&lt;/strong&gt;!</span>
7368
8166
  <span class="Constant"> &lt;/p&gt;</span>
7369
8167
  <span class="Constant"> &lt;/div&gt;</span>
7370
8168
  <span class="Constant"> &lt;/td&gt;</span>
@@ -9100,6 +9898,7 @@ convenient list of all of Codnar's parts and dependencies:
9100
9898
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">irb</span><span class="Special">&quot;</span>
9101
9899
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">open3</span><span class="Special">&quot;</span>
9102
9900
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">rdiscount</span><span class="Special">&quot;</span>
9901
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">rdoc</span><span class="Special">&quot;</span>
9103
9902
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">rdoc/markup/to_html</span><span class="Special">&quot;</span>
9104
9903
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">tempfile</span><span class="Special">&quot;</span>
9105
9904
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">yaml</span><span class="Special">&quot;</span>
@@ -9113,6 +9912,7 @@ convenient list of all of Codnar's parts and dependencies:
9113
9912
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/version</span><span class="Special">&quot;</span>
9114
9913
 
9115
9914
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/coderay</span><span class="Special">&quot;</span>
9915
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/haddock</span><span class="Special">&quot;</span>
9116
9916
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/hash_extensions</span><span class="Special">&quot;</span>
9117
9917
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/markdown</span><span class="Special">&quot;</span>
9118
9918
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/rdoc</span><span class="Special">&quot;</span>
@@ -9128,6 +9928,10 @@ convenient list of all of Codnar's parts and dependencies:
9128
9928
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/split</span><span class="Special">&quot;</span>
9129
9929
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/reader</span><span class="Special">&quot;</span>
9130
9930
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/scanner</span><span class="Special">&quot;</span>
9931
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/configuration/code</span><span class="Special">&quot;</span>
9932
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/configuration/comments</span><span class="Special">&quot;</span>
9933
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/configuration/documentation</span><span class="Special">&quot;</span>
9934
+ <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/configuration/highlighting</span><span class="Special">&quot;</span>
9131
9935
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/split_configurations</span><span class="Special">&quot;</span>
9132
9936
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/splitter</span><span class="Special">&quot;</span>
9133
9937
  <span class="PreProc">require</span> <span class="Special">&quot;</span><span class="Constant">codnar/sunlight</span><span class="Special">&quot;</span>
@@ -9848,10 +10652,9 @@ Test running the Weave Codnar Application.
9848
10652
  <span class="PreProc">def</span> <span class="Identifier">test_run_weave_missing_file</span>
9849
10653
  write_fake_file(<span class="Special">&quot;</span><span class="Constant">root</span><span class="Special">&quot;</span>, <span class="Type">FILE_CHUNKS</span>.to_yaml)
9850
10654
  <span class="Type">Codnar</span>::<span class="Type">Application</span>.with_argv(<span class="Special">%w(</span><span class="Constant">-e stderr -o stdout root</span><span class="Special">)</span>) { <span class="Type">Codnar</span>::<span class="Type">Weave</span>.new(<span class="Constant">true</span>).run }.should == <span class="Constant">1</span>
9851
- double_message = <span class="Special">&quot;</span><span class="Constant">No such file or directory - </span><span class="Special">&quot;</span> * <span class="Constant">2</span> <span class="Comment"># Something weird in Ruby Exception.to_s</span>
9852
- <span class="Type">File</span>.read(<span class="Special">&quot;</span><span class="Constant">stdout</span><span class="Special">&quot;</span>).should == <span class="Special">&quot;</span><span class="Constant">Root</span><span class="Special">\n</span><span class="Constant">FILE: included.file EXCEPTION: </span><span class="Special">#{</span>double_message<span class="Special">}</span><span class="Special">\n</span><span class="Special">&quot;</span>
10655
+ <span class="Type">File</span>.read(<span class="Special">&quot;</span><span class="Constant">stdout</span><span class="Special">&quot;</span>).should == <span class="Special">&quot;</span><span class="Constant">Root</span><span class="Special">\n</span><span class="Constant">FILE: included.file EXCEPTION: No such file or directory - included.file</span><span class="Special">\n</span><span class="Special">&quot;</span>
9853
10656
  <span class="Type">File</span>.read(<span class="Special">&quot;</span><span class="Constant">stderr</span><span class="Special">&quot;</span>).should \
9854
- == <span class="Special">&quot;</span><span class="Special">#{</span><span class="Identifier">$0</span><span class="Special">}</span><span class="Constant">: Reading file: included.file exception: </span><span class="Special">#{</span>double_message<span class="Special">}</span><span class="Constant"> in file: root at line: 1</span><span class="Special">\n</span><span class="Special">&quot;</span>
10657
+ == <span class="Special">&quot;</span><span class="Special">#{</span><span class="Identifier">$0</span><span class="Special">}</span><span class="Constant">: Reading file: included.file exception: No such file or directory - included.file in file: root at line: 1</span><span class="Special">\n</span><span class="Special">&quot;</span>
9855
10658
  <span class="PreProc">end</span>
9856
10659
 
9857
10660
  <span class="PreProc">def</span> <span class="Identifier">test_run_weave_existing_file</span>
@@ -10447,6 +11250,27 @@ Actually create common Rake split tasks.
10447
11250
  ::<span class="Type">Rake</span>::<span class="Type">Task</span>.define_task(<span class="Constant">:clean</span> =&gt; <span class="Special">&quot;</span><span class="Constant">clean_codnar</span><span class="Special">&quot;</span>)
10448
11251
  <span class="PreProc">end</span>
10449
11252
 
11253
+ </pre>
11254
+ <table class='layout'>
11255
+ <tr>
11256
+ <td class='indentation'>
11257
+ <pre> </pre>
11258
+ </td>
11259
+ <td class='html'>
11260
+ <div class='rdoc comment markup'>
11261
+ <p>
11262
+ For some reason, <code>include ::Rake::DSL</code> doesn’t give us this
11263
+ and life is too short…
11264
+ </p>
11265
+ </div>
11266
+ </td>
11267
+ </tr>
11268
+ </table>
11269
+ <pre class='ruby code syntax'>
11270
+ <span class="PreProc">def</span> <span class="Constant">self</span>.<span class="Identifier">desc</span>(description)
11271
+ ::<span class="Type">Rake</span>.application.last_description = description
11272
+ <span class="PreProc">end</span>
11273
+
10450
11274
  </pre>
10451
11275
  <table class='layout'>
10452
11276
  <tr>
@@ -11040,7 +11864,23 @@ Create nested UL/LI lists for the table of content.
11040
11864
  <span class="Identifier">var</span> container;
11041
11865
  <span class="Identifier">var</span> indices = <span class="Identifier">[]</span>;
11042
11866
  <span class="Identifier">var</span> h_elements = all_h_elements();
11043
- <span class="Statement">for</span> (<span class="Identifier">var</span> e <span class="Statement">in</span> h_elements) <span class="Identifier">{</span>
11867
+ </pre>
11868
+ <table class='layout'>
11869
+ <tr>
11870
+ <td class='indentation'>
11871
+ <pre> </pre>
11872
+ </td>
11873
+ <td class='html'>
11874
+ <div class='markdown comment markup'>
11875
+ <p>
11876
+ Using "for (var e in h_elements)" is too sensitive to other libraries
11877
+ </p>
11878
+ </div>
11879
+ </td>
11880
+ </tr>
11881
+ </table>
11882
+ <pre class='javascript code syntax'>
11883
+ <span class="Statement">for</span> (<span class="Identifier">var</span> e = 0; e &lt; h_elements.length; e++) <span class="Identifier">{</span>
11044
11884
  h = h_elements<span class="Identifier">[</span>e<span class="Identifier">]</span>;
11045
11885
  <span class="Identifier">var</span> level = h.tagName.substring(1, 2) - 1;
11046
11886
  container = pop_container(container, indices, level);
@@ -11450,7 +12290,8 @@ function contents_lists() {
11450
12290
  var container;
11451
12291
  var indices = [];
11452
12292
  var h_elements = all_h_elements();
11453
- for (var e in h_elements) {
12293
+ /* Using "for (var e in h_elements)" is too sensitive to other libraries */
12294
+ for (var e = 0; e < h_elements.length; e++) {
11454
12295
  h = h_elements[e];
11455
12296
  var level = h.tagName.substring(1, 2) - 1;
11456
12297
  container = pop_container(container, indices, level);