erbook 5.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. data/LICENSE +1 -1
  2. data/Rakefile +6 -79
  3. data/bin/erbook +25 -319
  4. data/doc/HelloWorld.spec +23 -21
  5. data/doc/README +4 -3
  6. data/doc/api/ERBook.html +35 -0
  7. data/doc/api/ERBook/Document.html +673 -0
  8. data/doc/api/ERBook/Document/Node.html +102 -0
  9. data/doc/api/ERBook/Template.html +670 -0
  10. data/doc/api/RDoc.html +23 -0
  11. data/doc/api/RDoc/AnyMethod.html +302 -0
  12. data/doc/api/RDoc/DummyMarkup.html +73 -0
  13. data/doc/api/RDoc/DummyMixin.html +23 -0
  14. data/doc/api/RDoc/DummyOptions.html +140 -0
  15. data/doc/api/RDoc/TopLevel.html +465 -0
  16. data/doc/api/String.html +372 -0
  17. data/doc/api/all-methods.html +253 -0
  18. data/doc/api/all-namespaces.html +42 -0
  19. data/doc/api/app.js +18 -0
  20. data/doc/api/index.html +16 -22
  21. data/doc/api/jquery.js +11 -0
  22. data/doc/api/readme.html +35 -0
  23. data/doc/api/style.css +68 -0
  24. data/doc/api/syntax_highlight.css +21 -0
  25. data/doc/erbook.png +0 -0
  26. data/doc/erbook.svg +150 -88
  27. data/doc/formats.erb +387 -0
  28. data/doc/history.erb +62 -0
  29. data/doc/index.erb +8 -0
  30. data/doc/index.xhtml +846 -654
  31. data/doc/intro.erb +97 -0
  32. data/doc/setup.erb +62 -0
  33. data/doc/theory.erb +187 -0
  34. data/doc/usage.erb +39 -0
  35. data/fmt/xhtml.yaml +497 -372
  36. data/lib/erbook.rb +18 -10
  37. data/lib/erbook/document.rb +233 -0
  38. data/lib/erbook/template.rb +210 -0
  39. data/lib/erbook/to_xhtml.rb +25 -17
  40. metadata +39 -45
  41. data/README +0 -14
  42. data/doc/api/classes/ERBook.html +0 -164
  43. data/doc/api/classes/RDoc.html +0 -112
  44. data/doc/api/classes/RDoc/AnyMethod.html +0 -195
  45. data/doc/api/classes/RDoc/AnyMethod.src/M000003.html +0 -18
  46. data/doc/api/classes/RDoc/AnyMethod.src/M000004.html +0 -23
  47. data/doc/api/classes/RDoc/AnyMethod.src/M000005.html +0 -18
  48. data/doc/api/classes/RDoc/AnyMethod.src/M000006.html +0 -22
  49. data/doc/api/classes/RDoc/TopLevel.html +0 -250
  50. data/doc/api/classes/RDoc/TopLevel.src/M000007.html +0 -18
  51. data/doc/api/classes/RDoc/TopLevel.src/M000008.html +0 -18
  52. data/doc/api/classes/RDoc/TopLevel.src/M000009.html +0 -18
  53. data/doc/api/classes/RDoc/TopLevel.src/M000010.html +0 -29
  54. data/doc/api/classes/RDoc/TopLevel.src/M000011.html +0 -25
  55. data/doc/api/classes/RDoc/TopLevel.src/M000012.html +0 -18
  56. data/doc/api/classes/String.html +0 -196
  57. data/doc/api/classes/String.src/M000001.html +0 -18
  58. data/doc/api/classes/String.src/M000002.html +0 -31
  59. data/doc/api/created.rid +0 -1
  60. data/doc/api/files/lib/erbook/rdoc_rb.html +0 -116
  61. data/doc/api/files/lib/erbook/to_xhtml_rb.html +0 -125
  62. data/doc/api/files/lib/erbook_rb.html +0 -107
  63. data/doc/api/fr_class_index.html +0 -31
  64. data/doc/api/fr_file_index.html +0 -29
  65. data/doc/api/fr_method_index.html +0 -38
  66. data/doc/api/rdoc-style.css +0 -208
  67. data/doc/feed-icon-28x28.png +0 -0
  68. data/doc/manual.erb +0 -812
data/doc/HelloWorld.spec CHANGED
@@ -1,31 +1,33 @@
1
1
  desc: An example format.
2
2
 
3
3
  code: |
4
- # Returns a random, yet pronounceable, name.
5
- def generate_name
6
- letters = ('a'..'z').to_a - %w[ c q w x ] # redundant sounds
7
- vowels = %w[a e i o u]
8
- consonants = letters - vowels
9
- sets = [consonants, vowels]
4
+ class ERBook::Node
5
+ def name
6
+ # dynamically compute (and store)
7
+ # the name of this node on demand
8
+ @name ||= generate_name
9
+ end
10
10
 
11
- length = 3 + rand(5)
11
+ private
12
12
 
13
- name = (0...length).map do |i|
14
- # alternate between consonants and vowels
15
- set = sets[i % sets.length]
13
+ # Returns a random, yet pronounceable, name.
14
+ def generate_name
15
+ letters = ('a'..'z').to_a - %w[ c q w x ] # redundant sounds
16
+ vowels = %w[a e i o u]
17
+ consonants = letters - vowels
18
+ sets = [consonants, vowels]
16
19
 
17
- # choose a random letter from the set
18
- set[rand(set.length)]
19
- end.join
20
+ length = 3 + rand(5)
20
21
 
21
- name
22
- end
22
+ name = (0...length).map do |i|
23
+ # alternate between consonants and vowels
24
+ set = sets[i % sets.length]
23
25
 
24
- class Node
25
- def name
26
- # dynamically compute (and store)
27
- # the name of this node on demand
28
- @name ||= generate_name
26
+ # choose a random letter from the set
27
+ set[rand(set.length)]
28
+ end.join
29
+
30
+ name
29
31
  end
30
32
  end
31
33
 
@@ -57,6 +59,6 @@ nodes:
57
59
  </dl>
58
60
 
59
61
  output: |
60
- Welcome to the "<%= @spec[:name] %>" format.
62
+ Welcome to the "<%= @format[:name] %>" format.
61
63
  <%= @content %>
62
64
  That's all folks!
data/doc/README CHANGED
@@ -1,6 +1,7 @@
1
- The erbook logo, its image file "erbook.png", and its source file "erbook.svg"
2
- make use of the ["cartoon owl sitting on a book"][1] graphic, which was created
3
- and released into the public domain by [Jens Vierbuchen][2] on July 7, 2008.
1
+ The "erbook.png" image and its "erbook.svg" source
2
+ utilize the ["cartoon owl sitting on a book"][1]
3
+ graphic, which was created and released into the
4
+ public domain by [Jens Vierbuchen][2] on July 7, 2008.
4
5
 
5
6
  [1]: http://openclipart.org/media/files/lemmling/9065
6
7
  [2]: http://openclipart.org/media/people/lemmling
@@ -0,0 +1,35 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html>
4
+ <head>
5
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
6
+ <link rel="stylesheet" href="style.css" type="text/css" charset="utf-8" />
7
+ <link rel="stylesheet" href="syntax_highlight.css" type="text/css" charset="utf-8" />
8
+
9
+ <script src="jquery.js" type="text/javascript" charset="utf-8"></script>
10
+ <script src="app.js" type="text/javascript" charset="utf-8"></script>
11
+ <title>Module: ERBook</title>
12
+ </head>
13
+ <body>
14
+ <div id="content">
15
+ <div class="section module ERBook">
16
+ <h1 class="title">Module: ERBook</h1>
17
+ <div class="section constants">
18
+ <div class="thisclass">
19
+ <h1>Constants</h1>
20
+ <dl>
21
+
22
+ <dt id="FORMAT_FILES-constant">FORMAT_FILES</dt>
23
+ <dd>Dir[File.join(FORMATS_DIR, '*.yaml')]</dd>
24
+
25
+ <dt id="FORMATS_DIR-constant">FORMATS_DIR</dt>
26
+ <dd>File.join(INSTALL, 'fmt')</dd>
27
+
28
+ </dl>
29
+ </div>
30
+
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </body>
35
+ </html>
@@ -0,0 +1,673 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html>
4
+ <head>
5
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
6
+ <link rel="stylesheet" href="../style.css" type="text/css" charset="utf-8" />
7
+ <link rel="stylesheet" href="../syntax_highlight.css" type="text/css" charset="utf-8" />
8
+
9
+ <script src="../jquery.js" type="text/javascript" charset="utf-8"></script>
10
+ <script src="../app.js" type="text/javascript" charset="utf-8"></script>
11
+ <title>Class: ERBook::Document</title>
12
+ </head>
13
+ <body>
14
+ <div id="content">
15
+ <div class="section class ERBook_Document">
16
+ <h1 class="title">Class: ERBook::Document</h1>
17
+ <div class="section attributes">
18
+ <h1>Attributes</h1>
19
+
20
+
21
+ <div class="instance">
22
+ <h2>Instance Attributes</h2>
23
+ <table>
24
+
25
+ <tr>
26
+ <th class="name">format</td>
27
+ <td class="readwrite">
28
+ [<span id='format-instance_method'>R</span>W]
29
+ </td>
30
+ <td class="visibility">
31
+ public
32
+ </td>
33
+ <td class="docstring">
34
+ <p>
35
+ Data from the format specification file.
36
+ </p>
37
+
38
+
39
+ </td>
40
+ </tr>
41
+
42
+ <tr>
43
+ <th class="name">nodes_by_type</td>
44
+ <td class="readwrite">
45
+ [<span id='nodes_by_type-instance_method'>R</span>W]
46
+ </td>
47
+ <td class="visibility">
48
+ public
49
+ </td>
50
+ <td class="docstring">
51
+ <p>
52
+ All nodes in the document arranged by node type.
53
+ </p>
54
+
55
+
56
+ </td>
57
+ </tr>
58
+
59
+ <tr>
60
+ <th class="name">nodes</td>
61
+ <td class="readwrite">
62
+ [<span id='nodes-instance_method'>R</span>W]
63
+ </td>
64
+ <td class="visibility">
65
+ public
66
+ </td>
67
+ <td class="docstring">
68
+ <p>
69
+ All nodes in the document.
70
+ </p>
71
+
72
+
73
+ </td>
74
+ </tr>
75
+
76
+ <tr>
77
+ <th class="name">roots</td>
78
+ <td class="readwrite">
79
+ [<span id='roots-instance_method'>R</span>W]
80
+ </td>
81
+ <td class="visibility">
82
+ public
83
+ </td>
84
+ <td class="docstring">
85
+ <p>
86
+ All root nodes in the document.
87
+ </p>
88
+
89
+
90
+ </td>
91
+ </tr>
92
+
93
+ </table>
94
+ </div>
95
+
96
+ </div><div class="section constants">
97
+
98
+ </div><div class="section constructor">
99
+ <h1>Constructor Summary</h1>
100
+ <div id="initialize-instance_method" class="section method">
101
+ <div class="details_title">
102
+ <div class='section methodsignature'>
103
+ <tt class='def'>
104
+ <span class='visibility'>public</span>
105
+ <span class='return_types'></span>
106
+ <span class='name'>initialize</span><span class='args'>(format, input_text, input_file, options = )</span>
107
+ <span class='block'></span>
108
+ </tt>
109
+ </div>
110
+
111
+ </div><div class="section tags">
112
+ <h2>Meta Tags</h2>
113
+ <div class="param">
114
+ <h3>Parameters:</h3>
115
+ <dl>
116
+
117
+
118
+ <dt>
119
+ <span class='type'>[<tt><a href="../String.html" title="String">String</a></tt>]</span>
120
+ <span class='name'>format</span>
121
+
122
+ </dt>
123
+ <dd>
124
+ <span class='desc'><p>
125
+ Either the short-hand name of a built-in format or the path to a format
126
+ specification file.
127
+ </p>
128
+ </span>
129
+ </dd>
130
+
131
+
132
+
133
+ <dt>
134
+ <span class='type'>[<tt><a href="../String.html" title="String">String</a></tt>]</span>
135
+ <span class='name'>input_text</span>
136
+
137
+ </dt>
138
+ <dd>
139
+ <span class='desc'><p>
140
+ The body of the input document.
141
+ </p>
142
+ </span>
143
+ </dd>
144
+
145
+
146
+
147
+ <dt>
148
+ <span class='type'>[<tt><a href="../String.html" title="String">String</a></tt>]</span>
149
+ <span class='name'>input_file</span>
150
+
151
+ </dt>
152
+ <dd>
153
+ <span class='desc'><p>
154
+ Name of the file from which the input document originated.
155
+ </p>
156
+ </span>
157
+ </dd>
158
+
159
+
160
+
161
+ <dt>
162
+ <span class='type'>[<tt>Hash</tt>]</span>
163
+ <span class='name'>options</span>
164
+
165
+ <em class="default">(defaults to: <tt></tt>)</em>
166
+
167
+ </dt>
168
+ <dd>
169
+ <span class='desc'><p>
170
+ Additional method parameters:
171
+ </p>
172
+ <dl>
173
+ <dt>boolean</dt><dd>:unindent =&gt; If true, all node content is unindented hierarchically.
174
+
175
+ </dd>
176
+ </dl>
177
+ </span>
178
+ </dd>
179
+
180
+
181
+ </dl>
182
+ </div>
183
+ </div><div class="section source">
184
+ <span>[<a class="source_link" href="#">View source</a>]</span>
185
+ <div class="source_code">
186
+ <table>
187
+ <tr>
188
+ <td>
189
+ <pre class="lines">
190
+
191
+
192
+ 35
193
+ 36
194
+ 37
195
+ 38
196
+ 39
197
+ 40
198
+ 41
199
+ 42
200
+ 43
201
+ 44
202
+ 45
203
+ 46
204
+ 47
205
+ 48
206
+ 49
207
+ 50
208
+ 51
209
+ 52
210
+ 53
211
+ 54
212
+ 55
213
+ 56
214
+ 57
215
+ 58
216
+ 59
217
+ 60
218
+ 61
219
+ 62
220
+ 63
221
+ 64
222
+ 65
223
+ 66
224
+ 67
225
+ 68
226
+ 69
227
+ 70
228
+ 71
229
+ 72
230
+ 73
231
+ 74
232
+ 75
233
+ 76
234
+ 77
235
+ 78
236
+ 79
237
+ 80
238
+ 81
239
+ 82
240
+ 83
241
+ 84
242
+ 85
243
+ 86
244
+ 87
245
+ 88
246
+ 89
247
+ 90
248
+ 91
249
+ 92
250
+ 93
251
+ 94
252
+ 95
253
+ 96
254
+ 97
255
+ 98
256
+ 99
257
+ 100
258
+ 101
259
+ 102
260
+ 103
261
+ 104
262
+ 105
263
+ 106
264
+ 107
265
+ 108
266
+ 109
267
+ 110
268
+ 111
269
+ 112
270
+ 113
271
+ 114
272
+ 115
273
+ 116
274
+ 117
275
+ 118
276
+ 119
277
+ 120
278
+ 121
279
+ 122
280
+ 123
281
+ 124
282
+ 125
283
+ 126
284
+ 127
285
+ 128
286
+ 129
287
+ 130
288
+ 131
289
+ 132
290
+ 133
291
+ 134
292
+ 135
293
+ 136
294
+ 137
295
+ 138
296
+ 139
297
+ 140
298
+ 141
299
+ 142
300
+ 143
301
+ 144
302
+ 145
303
+ 146
304
+ 147
305
+ 148
306
+ 149
307
+ 150
308
+ 151
309
+ 152
310
+ 153
311
+ 154
312
+ 155
313
+ 156
314
+ 157
315
+ 158
316
+ 159
317
+ 160
318
+ 161
319
+ 162
320
+ 163
321
+ 164
322
+ 165
323
+ 166
324
+ 167
325
+ 168
326
+ 169
327
+ 170
328
+ 171
329
+ 172
330
+ 173
331
+ 174
332
+ 175
333
+ 176
334
+ 177
335
+ 178
336
+ 179
337
+ 180
338
+ 181
339
+ 182
340
+ 183
341
+ 184
342
+ 185
343
+ 186
344
+ 187
345
+ 188</pre>
346
+ </td>
347
+ <td>
348
+ <pre class="code"><span class="info file"># File 'lib/erbook/document.rb', line 35</span>
349
+
350
+ <span class='def def kw'>def</span> <span class='initialize identifier id'>initialize</span> <span class='format identifier id'>format</span><span class='comma token'>,</span> <span class='input_text identifier id'>input_text</span><span class='comma token'>,</span> <span class='input_file identifier id'>input_file</span><span class='comma token'>,</span> <span class='options identifier id'>options</span> <span class='assign token'>=</span> <span class='semicolon token'>;</span><span class='lbrace token'>{</span><span class='rbrace token'>}</span>
351
+ <span class='comment val'># process format specification</span>
352
+ <span class='@format_file ivar id'>@format_file</span> <span class='assign token'>=</span> <span class='format identifier id'>format</span><span class='dot token'>.</span><span class='to_s identifier id'>to_s</span>
353
+
354
+ <span class='File constant id'>File</span><span class='dot token'>.</span><span class='file? fid id'>file?</span> <span class='@format_file ivar id'>@format_file</span> <span class='or or kw'>or</span>
355
+ <span class='@format_file ivar id'>@format_file</span> <span class='assign token'>=</span> <span class='File constant id'>File</span><span class='dot token'>.</span><span class='join identifier id'>join</span><span class='lparen token'>(</span><span class='ERBook constant id'>ERBook</span><span class='colon2 op'>::</span><span class='FORMATS_DIR constant id'>FORMATS_DIR</span><span class='comma token'>,</span> <span class='@format_file ivar id'>@format_file</span> <span class='plus op'>+</span> <span class='string val'>'.yaml'</span><span class='rparen token'>)</span>
356
+
357
+ <span class='begin begin kw'>begin</span>
358
+ <span class='@format ivar id'>@format</span> <span class='assign token'>=</span> <span class='YAML constant id'>YAML</span><span class='dot token'>.</span><span class='load_file identifier id'>load_file</span><span class='lparen token'>(</span><span class='@format_file ivar id'>@format_file</span><span class='rparen token'>)</span>
359
+ <span class='@format ivar id'>@format</span><span class='lbrack token'>[</span><span class='symbol val'>:file</span><span class='rbrack token'>]</span> <span class='assign token'>=</span> <span class='File constant id'>File</span><span class='dot token'>.</span><span class='expand_path identifier id'>expand_path</span><span class='lparen token'>(</span><span class='@format_file ivar id'>@format_file</span><span class='rparen token'>)</span>
360
+ <span class='@format ivar id'>@format</span><span class='lbrack token'>[</span><span class='symbol val'>:name</span><span class='rbrack token'>]</span> <span class='assign token'>=</span> <span class='File constant id'>File</span><span class='dot token'>.</span><span class='basename identifier id'>basename</span><span class='lparen token'>(</span><span class='@format_file ivar id'>@format_file</span><span class='rparen token'>)</span><span class='dot token'>.</span><span class='sub identifier id'>sub</span><span class='lparen token'>(</span><span class='regexp val'>/\..*?$/</span><span class='comma token'>,</span> <span class='string val'>''</span><span class='rparen token'>)</span>
361
+
362
+ <span class='if if kw'>if</span> <span class='@format ivar id'>@format</span><span class='dot token'>.</span><span class='key? fid id'>key?</span> <span class='string val'>'code'</span>
363
+ <span class='eval identifier id'>eval</span> <span class='@format ivar id'>@format</span><span class='lbrack token'>[</span><span class='string val'>'code'</span><span class='rbrack token'>]</span><span class='dot token'>.</span><span class='to_s identifier id'>to_s</span><span class='comma token'>,</span> <span class='TOPLEVEL_BINDING constant id'>TOPLEVEL_BINDING</span><span class='comma token'>,</span> <span class='dstring node'>&quot;#{@format_file}:code&quot;</span>
364
+ <span class='end end kw'>end</span>
365
+
366
+ <span class='rescue rescue kw'>rescue</span> <span class='Exception constant id'>Exception</span>
367
+ <span class='error identifier id'>error</span> <span class='dstring node'>&quot;Could not load format specification file #{@format_file.inspect}&quot;</span>
368
+ <span class='end end kw'>end</span>
369
+
370
+ <span class='@node_defs ivar id'>@node_defs</span> <span class='assign token'>=</span> <span class='@format ivar id'>@format</span><span class='lbrack token'>[</span><span class='string val'>'nodes'</span><span class='rbrack token'>]</span>
371
+
372
+ <span class='comment val'># process input document</span>
373
+ <span class='begin begin kw'>begin</span>
374
+ <span class='comment val'># create sandbox for input evaluation</span>
375
+ <span class='template identifier id'>template</span> <span class='assign token'>=</span> <span class='Template constant id'>Template</span><span class='dot token'>.</span><span class='new identifier id'>new</span><span class='lparen token'>(</span><span class='input_file identifier id'>input_file</span><span class='comma token'>,</span> <span class='input_text identifier id'>input_text</span><span class='comma token'>,</span> <span class='options identifier id'>options</span><span class='lbrack token'>[</span><span class='symbol val'>:unindent</span><span class='rbrack token'>]</span><span class='rparen token'>)</span>
376
+
377
+ <span class='@template_vars ivar id'>@template_vars</span> <span class='assign token'>=</span> <span class='lbrace token'>{</span>
378
+ <span class='symbol val'>:@format</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='@format ivar id'>@format</span><span class='comma token'>,</span>
379
+ <span class='symbol val'>:@roots</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='@roots ivar id'>@roots</span> <span class='assign token'>=</span> <span class='lbrack token'>[</span><span class='rbrack token'>]</span><span class='comma token'>,</span> <span class='comment val'># root nodes of all trees</span>
380
+ <span class='symbol val'>:@nodes</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='@nodes ivar id'>@nodes</span> <span class='assign token'>=</span> <span class='lbrack token'>[</span><span class='rbrack token'>]</span><span class='comma token'>,</span> <span class='comment val'># all nodes in the forest</span>
381
+ <span class='symbol val'>:@nodes_by_type</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='@nodes_by_type ivar id'>@nodes_by_type</span> <span class='assign token'>=</span> <span class='Hash constant id'>Hash</span><span class='dot token'>.</span><span class='new identifier id'>new</span> <span class='lbrace token'>{</span><span class='bitor op'>|</span><span class='h identifier id'>h</span><span class='comma token'>,</span><span class='k identifier id'>k</span><span class='bitor op'>|</span> <span class='h identifier id'>h</span><span class='lbrack token'>[</span><span class='k identifier id'>k</span><span class='rbrack token'>]</span> <span class='assign token'>=</span> <span class='lbrack token'>[</span><span class='rbrack token'>]</span> <span class='rbrace token'>}</span><span class='comma token'>,</span>
382
+ <span class='symbol val'>:@node_stack</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='lbrack token'>[</span><span class='rbrack token'>]</span><span class='comma token'>,</span> <span class='comment val'># stack for all nodes</span>
383
+ <span class='symbol val'>:@index_stack</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='lbrack token'>[</span><span class='rbrack token'>]</span><span class='comma token'>,</span> <span class='comment val'># stack for nodes having index only</span>
384
+ <span class='rbrace token'>}</span><span class='dot token'>.</span><span class='each_pair identifier id'>each_pair</span> <span class='lbrace token'>{</span><span class='bitor op'>|</span><span class='k identifier id'>k</span><span class='comma token'>,</span><span class='v identifier id'>v</span><span class='bitor op'>|</span> <span class='template identifier id'>template</span><span class='dot token'>.</span><span class='instance_variable_set identifier id'>instance_variable_set</span><span class='lparen token'>(</span><span class='k identifier id'>k</span><span class='comma token'>,</span> <span class='v identifier id'>v</span><span class='rparen token'>)</span> <span class='rbrace token'>}</span>
385
+
386
+ <span class='class class kw'>class</span> <span class='lshft op'>&lt;&lt;</span> <span class='template identifier id'>template</span>
387
+ <span class='private identifier id'>private</span>
388
+
389
+ <span class='comment val'># Handles the method call from a node</span>
390
+ <span class='comment val'># placeholder in the input document.</span>
391
+ <span class='def def kw'>def</span> <span class='__node__ identifier id'>__node__</span> <span class='node_type identifier id'>node_type</span><span class='comma token'>,</span> <span class='mult op'>*</span><span class='node_args identifier id'>node_args</span><span class='comma token'>,</span> <span class='bitand op'>&amp;</span><span class='node_content identifier id'>node_content</span>
392
+ <span class='node identifier id'>node</span> <span class='assign token'>=</span> <span class='Node constant id'>Node</span><span class='dot token'>.</span><span class='new identifier id'>new</span><span class='lparen token'>(</span>
393
+ <span class='symbol val'>:type</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='node_type identifier id'>node_type</span><span class='comma token'>,</span>
394
+ <span class='symbol val'>:defn</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='@format ivar id'>@format</span><span class='lbrack token'>[</span><span class='string val'>'nodes'</span><span class='rbrack token'>]</span><span class='lbrack token'>[</span><span class='node_type identifier id'>node_type</span><span class='rbrack token'>]</span><span class='comma token'>,</span>
395
+ <span class='symbol val'>:args</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='node_args identifier id'>node_args</span><span class='comma token'>,</span>
396
+ <span class='symbol val'>:children</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='lbrack token'>[</span><span class='rbrack token'>]</span><span class='comma token'>,</span>
397
+
398
+ <span class='comment val'># omit erbook internals from the stack trace</span>
399
+ <span class='symbol val'>:trace</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='caller identifier id'>caller</span><span class='dot token'>.</span><span class='reject identifier id'>reject</span> <span class='lbrace token'>{</span><span class='bitor op'>|</span><span class='t identifier id'>t</span><span class='bitor op'>|</span>
400
+ <span class='lbrack token'>[</span><span class='$0 gvar id'>$0</span><span class='comma token'>,</span> <span class='ERBook constant id'>ERBook</span><span class='colon2 op'>::</span><span class='INSTALL constant id'>INSTALL</span><span class='rbrack token'>]</span><span class='dot token'>.</span><span class='any? fid id'>any?</span> <span class='lbrace token'>{</span><span class='bitor op'>|</span><span class='f identifier id'>f</span><span class='bitor op'>|</span> <span class='t identifier id'>t</span><span class='dot token'>.</span><span class='index identifier id'>index</span><span class='lparen token'>(</span><span class='f identifier id'>f</span><span class='rparen token'>)</span> <span class='eq op'>==</span> <span class='integer val'>0</span> <span class='rbrace token'>}</span>
401
+ <span class='rbrace token'>}</span>
402
+ <span class='rparen token'>)</span>
403
+ <span class='@nodes ivar id'>@nodes</span> <span class='lshft op'>&lt;&lt;</span> <span class='node identifier id'>node</span>
404
+ <span class='@nodes_by_type ivar id'>@nodes_by_type</span><span class='lbrack token'>[</span><span class='node identifier id'>node</span><span class='dot token'>.</span><span class='type identifier id'>type</span><span class='rbrack token'>]</span> <span class='lshft op'>&lt;&lt;</span> <span class='node identifier id'>node</span>
405
+
406
+ <span class='comment val'># calculate occurrence number for this node</span>
407
+ <span class='if if kw'>if</span> <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='defn identifier id'>defn</span><span class='lbrack token'>[</span><span class='string val'>'number'</span><span class='rbrack token'>]</span>
408
+ <span class='@count ivar id'>@count</span> <span class='opasgn op'>||=</span> <span class='Hash constant id'>Hash</span><span class='dot token'>.</span><span class='new identifier id'>new</span> <span class='lbrace token'>{</span><span class='bitor op'>|</span><span class='h identifier id'>h</span><span class='comma token'>,</span><span class='k identifier id'>k</span><span class='bitor op'>|</span> <span class='h identifier id'>h</span><span class='lbrack token'>[</span><span class='k identifier id'>k</span><span class='rbrack token'>]</span> <span class='assign token'>=</span> <span class='lbrack token'>[</span><span class='rbrack token'>]</span><span class='rbrace token'>}</span>
409
+ <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='number identifier id'>number</span> <span class='assign token'>=</span> <span class='lparen token'>(</span><span class='@count ivar id'>@count</span><span class='lbrack token'>[</span><span class='node identifier id'>node</span><span class='dot token'>.</span><span class='type identifier id'>type</span><span class='rbrack token'>]</span> <span class='lshft op'>&lt;&lt;</span> <span class='node identifier id'>node</span><span class='rparen token'>)</span><span class='dot token'>.</span><span class='length identifier id'>length</span>
410
+ <span class='end end kw'>end</span>
411
+
412
+ <span class='comment val'># assign node family</span>
413
+ <span class='if if kw'>if</span> <span class='parent identifier id'>parent</span> <span class='assign token'>=</span> <span class='@node_stack ivar id'>@node_stack</span><span class='dot token'>.</span><span class='last identifier id'>last</span>
414
+ <span class='parent identifier id'>parent</span><span class='dot token'>.</span><span class='children identifier id'>children</span> <span class='lshft op'>&lt;&lt;</span> <span class='node identifier id'>node</span>
415
+ <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='parent identifier id'>parent</span> <span class='assign token'>=</span> <span class='parent identifier id'>parent</span>
416
+ <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='depth identifier id'>depth</span> <span class='assign token'>=</span> <span class='parent identifier id'>parent</span><span class='dot token'>.</span><span class='depth identifier id'>depth</span>
417
+ <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='depth identifier id'>depth</span> <span class='opasgn op'>+=</span> <span class='integer val'>1</span> <span class='if if_mod kw'>if</span> <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='defn identifier id'>defn</span><span class='lbrack token'>[</span><span class='string val'>'depth'</span><span class='rbrack token'>]</span>
418
+
419
+ <span class='comment val'># calculate latex-style index number for this node</span>
420
+ <span class='if if kw'>if</span> <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='defn identifier id'>defn</span><span class='lbrack token'>[</span><span class='string val'>'index'</span><span class='rbrack token'>]</span>
421
+ <span class='parent identifier id'>parent</span> <span class='assign token'>=</span> <span class='@index_stack ivar id'>@index_stack</span><span class='dot token'>.</span><span class='last identifier id'>last</span>
422
+ <span class='branches identifier id'>branches</span> <span class='assign token'>=</span> <span class='parent identifier id'>parent</span><span class='dot token'>.</span><span class='children identifier id'>children</span><span class='dot token'>.</span><span class='select identifier id'>select</span> <span class='lbrace token'>{</span><span class='bitor op'>|</span><span class='n identifier id'>n</span><span class='bitor op'>|</span> <span class='n identifier id'>n</span><span class='dot token'>.</span><span class='index identifier id'>index</span> <span class='rbrace token'>}</span>
423
+ <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='index identifier id'>index</span> <span class='assign token'>=</span> <span class='lbrack token'>[</span><span class='parent identifier id'>parent</span><span class='dot token'>.</span><span class='index identifier id'>index</span><span class='comma token'>,</span> <span class='branches identifier id'>branches</span><span class='dot token'>.</span><span class='length identifier id'>length</span> <span class='plus op'>+</span> <span class='integer val'>1</span><span class='rbrack token'>]</span><span class='dot token'>.</span><span class='join identifier id'>join</span><span class='lparen token'>(</span><span class='string val'>'.'</span><span class='rparen token'>)</span>
424
+ <span class='end end kw'>end</span>
425
+ <span class='else else kw'>else</span>
426
+ <span class='@roots ivar id'>@roots</span> <span class='lshft op'>&lt;&lt;</span> <span class='node identifier id'>node</span>
427
+ <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='parent identifier id'>parent</span> <span class='assign token'>=</span> <span class='nil nil kw'>nil</span>
428
+ <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='depth identifier id'>depth</span> <span class='assign token'>=</span> <span class='integer val'>0</span>
429
+
430
+ <span class='comment val'># calculate latex-style index number for this node</span>
431
+ <span class='if if kw'>if</span> <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='defn identifier id'>defn</span><span class='lbrack token'>[</span><span class='string val'>'index'</span><span class='rbrack token'>]</span>
432
+ <span class='branches identifier id'>branches</span> <span class='assign token'>=</span> <span class='@roots ivar id'>@roots</span><span class='dot token'>.</span><span class='select identifier id'>select</span> <span class='lbrace token'>{</span><span class='bitor op'>|</span><span class='n identifier id'>n</span><span class='bitor op'>|</span> <span class='n identifier id'>n</span><span class='dot token'>.</span><span class='index identifier id'>index</span> <span class='rbrace token'>}</span>
433
+ <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='index identifier id'>index</span> <span class='assign token'>=</span> <span class='lparen token'>(</span><span class='branches identifier id'>branches</span><span class='dot token'>.</span><span class='length identifier id'>length</span> <span class='plus op'>+</span> <span class='integer val'>1</span><span class='rparen token'>)</span><span class='dot token'>.</span><span class='to_s identifier id'>to_s</span>
434
+ <span class='end end kw'>end</span>
435
+ <span class='end end kw'>end</span>
436
+
437
+ <span class='comment val'># assign node content</span>
438
+ <span class='if if kw'>if</span> <span class='block_given? fid id'>block_given?</span>
439
+ <span class='@index_stack ivar id'>@index_stack</span><span class='dot token'>.</span><span class='push identifier id'>push</span> <span class='node identifier id'>node</span> <span class='if if_mod kw'>if</span> <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='defn identifier id'>defn</span><span class='lbrack token'>[</span><span class='string val'>'index'</span><span class='rbrack token'>]</span>
440
+ <span class='@node_stack ivar id'>@node_stack</span><span class='dot token'>.</span><span class='push identifier id'>push</span> <span class='node identifier id'>node</span>
441
+ <span class='content identifier id'>content</span> <span class='assign token'>=</span> <span class='content_from_block identifier id'>content_from_block</span><span class='lparen token'>(</span><span class='node identifier id'>node</span><span class='comma token'>,</span> <span class='bitand op'>&amp;</span><span class='node_content identifier id'>node_content</span><span class='rparen token'>)</span>
442
+ <span class='@node_stack ivar id'>@node_stack</span><span class='dot token'>.</span><span class='pop identifier id'>pop</span>
443
+ <span class='@index_stack ivar id'>@index_stack</span><span class='dot token'>.</span><span class='pop identifier id'>pop</span> <span class='if if_mod kw'>if</span> <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='defn identifier id'>defn</span><span class='lbrack token'>[</span><span class='string val'>'index'</span><span class='rbrack token'>]</span>
444
+
445
+ <span class='digest identifier id'>digest</span> <span class='assign token'>=</span> <span class='Document constant id'>Document</span><span class='dot token'>.</span><span class='digest identifier id'>digest</span><span class='lparen token'>(</span><span class='content identifier id'>content</span><span class='rparen token'>)</span>
446
+ <span class='self self kw'>self</span><span class='dot token'>.</span><span class='buffer identifier id'>buffer</span> <span class='lshft op'>&lt;&lt;</span> <span class='digest identifier id'>digest</span>
447
+ <span class='else else kw'>else</span>
448
+ <span class='content identifier id'>content</span> <span class='assign token'>=</span> <span class='nil nil kw'>nil</span>
449
+ <span class='digest identifier id'>digest</span> <span class='assign token'>=</span> <span class='Document constant id'>Document</span><span class='dot token'>.</span><span class='digest identifier id'>digest</span><span class='lparen token'>(</span><span class='node identifier id'>node</span><span class='dot token'>.</span><span class='object_id identifier id'>object_id</span><span class='rparen token'>)</span>
450
+ <span class='end end kw'>end</span>
451
+
452
+ <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='content identifier id'>content</span> <span class='assign token'>=</span> <span class='content identifier id'>content</span>
453
+ <span class='node identifier id'>node</span><span class='dot token'>.</span><span class='digest identifier id'>digest</span> <span class='assign token'>=</span> <span class='digest identifier id'>digest</span>
454
+
455
+ <span class='digest identifier id'>digest</span>
456
+ <span class='end end kw'>end</span>
457
+ <span class='end end kw'>end</span>
458
+
459
+ <span class='@node_defs ivar id'>@node_defs</span><span class='dot token'>.</span><span class='each_key identifier id'>each_key</span> <span class='do do kw'>do</span> <span class='bitor op'>|</span><span class='type identifier id'>type</span><span class='bitor op'>|</span>
460
+ <span class='comment val'># XXX: using a string because define_method()</span>
461
+ <span class='comment val'># does not accept a block until Ruby 1.9</span>
462
+ <span class='file identifier id'>file</span><span class='comma token'>,</span> <span class='line identifier id'>line</span> <span class='assign token'>=</span> <span class='__FILE__ __file__ kw'>__FILE__</span><span class='comma token'>,</span> <span class='__LINE__ __line__ kw'>__LINE__</span> <span class='plus op'>+</span> <span class='integer val'>1</span>
463
+ <span class='template identifier id'>template</span><span class='dot token'>.</span><span class='instance_eval identifier id'>instance_eval</span> <span class='dstring node'>%{
464
+ def #{type} *node_args, &amp;node_content
465
+ __node__ #{type.inspect}, *node_args, &amp;node_content
466
+ end
467
+ }</span><span class='comma token'>,</span> <span class='file identifier id'>file</span><span class='comma token'>,</span> <span class='line identifier id'>line</span>
468
+ <span class='end end kw'>end</span>
469
+
470
+ <span class='comment val'># evaluate the input &amp; build the document tree</span>
471
+ <span class='@processed_document ivar id'>@processed_document</span> <span class='assign token'>=</span> <span class='template identifier id'>template</span><span class='dot token'>.</span><span class='instance_eval identifier id'>instance_eval</span> <span class='lbrace token'>{</span> <span class='result identifier id'>result</span> <span class='binding identifier id'>binding</span> <span class='rbrace token'>}</span>
472
+
473
+ <span class='comment val'># chain block-level nodes together for local navigation</span>
474
+ <span class='block_nodes identifier id'>block_nodes</span> <span class='assign token'>=</span> <span class='@nodes ivar id'>@nodes</span><span class='dot token'>.</span><span class='reject identifier id'>reject</span> <span class='lbrace token'>{</span><span class='bitor op'>|</span><span class='n identifier id'>n</span><span class='bitor op'>|</span> <span class='@node_defs ivar id'>@node_defs</span><span class='lbrack token'>[</span><span class='n identifier id'>n</span><span class='dot token'>.</span><span class='type identifier id'>type</span><span class='rbrack token'>]</span><span class='lbrack token'>[</span><span class='string val'>'inline'</span><span class='rbrack token'>]</span> <span class='rbrace token'>}</span>
475
+
476
+ <span class='require identifier id'>require</span> <span class='string val'>'enumerator'</span>
477
+ <span class='block_nodes identifier id'>block_nodes</span><span class='dot token'>.</span><span class='each_cons identifier id'>each_cons</span><span class='lparen token'>(</span><span class='integer val'>2</span><span class='rparen token'>)</span> <span class='do do kw'>do</span> <span class='bitor op'>|</span><span class='a identifier id'>a</span><span class='comma token'>,</span> <span class='b identifier id'>b</span><span class='bitor op'>|</span>
478
+ <span class='a identifier id'>a</span><span class='dot token'>.</span><span class='next_node identifier id'>next_node</span> <span class='assign token'>=</span> <span class='b identifier id'>b</span>
479
+ <span class='b identifier id'>b</span><span class='dot token'>.</span><span class='prev_node identifier id'>prev_node</span> <span class='assign token'>=</span> <span class='a identifier id'>a</span>
480
+ <span class='end end kw'>end</span>
481
+
482
+ <span class='comment val'># replace node placeholders with their corresponding output</span>
483
+ <span class='expander identifier id'>expander</span> <span class='assign token'>=</span> <span class='lambda identifier id'>lambda</span> <span class='do do kw'>do</span> <span class='bitor op'>|</span><span class='n identifier id'>n</span><span class='comma token'>,</span> <span class='buf identifier id'>buf</span><span class='bitor op'>|</span>
484
+ <span class='comment val'># calculate node output</span>
485
+ <span class='source identifier id'>source</span> <span class='assign token'>=</span> <span class='dstring node'>&quot;#{@format_file}:nodes:#{n.type}:output&quot;</span>
486
+ <span class='n identifier id'>n</span><span class='dot token'>.</span><span class='output identifier id'>output</span> <span class='assign token'>=</span> <span class='Template constant id'>Template</span><span class='dot token'>.</span><span class='new identifier id'>new</span><span class='lparen token'>(</span>
487
+ <span class='source identifier id'>source</span><span class='comma token'>,</span> <span class='@node_defs ivar id'>@node_defs</span><span class='lbrack token'>[</span><span class='n identifier id'>n</span><span class='dot token'>.</span><span class='type identifier id'>type</span><span class='rbrack token'>]</span><span class='lbrack token'>[</span><span class='string val'>'output'</span><span class='rbrack token'>]</span><span class='dot token'>.</span><span class='to_s identifier id'>to_s</span><span class='dot token'>.</span><span class='chomp identifier id'>chomp</span>
488
+ <span class='rparen token'>)</span><span class='dot token'>.</span><span class='render_with identifier id'>render_with</span><span class='lparen token'>(</span><span class='@template_vars ivar id'>@template_vars</span><span class='dot token'>.</span><span class='merge identifier id'>merge</span><span class='lparen token'>(</span><span class='symbol val'>:@node</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='n identifier id'>n</span><span class='rparen token'>)</span><span class='rparen token'>)</span>
489
+
490
+ <span class='comment val'># expand all child nodes in this node's output</span>
491
+ <span class='n identifier id'>n</span><span class='dot token'>.</span><span class='children identifier id'>children</span><span class='dot token'>.</span><span class='each identifier id'>each</span> <span class='lbrace token'>{</span><span class='bitor op'>|</span><span class='c identifier id'>c</span><span class='bitor op'>|</span> <span class='expander identifier id'>expander</span><span class='lbrack token'>[</span><span class='c identifier id'>c</span><span class='comma token'>,</span> <span class='n identifier id'>n</span><span class='dot token'>.</span><span class='output identifier id'>output</span><span class='rbrack token'>]</span> <span class='rbrace token'>}</span>
492
+
493
+ <span class='comment val'># replace this node's placeholder with its output in the buffer</span>
494
+ <span class='buf identifier id'>buf</span><span class='lbrack token'>[</span><span class='n identifier id'>n</span><span class='dot token'>.</span><span class='digest identifier id'>digest</span><span class='rbrack token'>]</span> <span class='assign token'>=</span> <span class='@node_defs ivar id'>@node_defs</span><span class='lbrack token'>[</span><span class='n identifier id'>n</span><span class='dot token'>.</span><span class='type identifier id'>type</span><span class='rbrack token'>]</span><span class='lbrack token'>[</span><span class='string val'>'silent'</span><span class='rbrack token'>]</span> <span class='question op'>?</span> <span class='string val'>''</span> <span class='colon op'>:</span> <span class='n identifier id'>n</span><span class='dot token'>.</span><span class='output identifier id'>output</span>
495
+ <span class='end end kw'>end</span>
496
+
497
+ <span class='@roots ivar id'>@roots</span><span class='dot token'>.</span><span class='each identifier id'>each</span> <span class='lbrace token'>{</span><span class='bitor op'>|</span><span class='n identifier id'>n</span><span class='bitor op'>|</span> <span class='expander identifier id'>expander</span><span class='lbrack token'>[</span><span class='n identifier id'>n</span><span class='comma token'>,</span> <span class='@processed_document ivar id'>@processed_document</span><span class='rbrack token'>]</span> <span class='rbrace token'>}</span>
498
+
499
+ <span class='rescue rescue kw'>rescue</span> <span class='Exception constant id'>Exception</span>
500
+ <span class='puts identifier id'>puts</span> <span class='input_text identifier id'>input_text</span> <span class='comment val'># so the user can debug line numbers in the stack trace</span>
501
+ <span class='error identifier id'>error</span> <span class='dstring node'>&quot;Could not process input document #{input_file.inspect}&quot;</span>
502
+ <span class='end end kw'>end</span>
503
+ <span class='end end kw'>end</span>
504
+ </pre>
505
+ </td>
506
+ </tr>
507
+ </table>
508
+ </div>
509
+ </div>
510
+ </div>
511
+ </div> <div class="section visibilitygroup public">
512
+ <h1>Public Visibility</h1>
513
+ <div class="section methodsummary class public">
514
+ <h1>Public Class Method Summary</h1>
515
+ <table class="summary">
516
+
517
+ <tr>
518
+ <th class="signature">
519
+ <span class='name'><a href="#digest-class_method" title="digest">digest</a></span><span class='args'>(input)</span>
520
+ <span class='block'></span>
521
+
522
+ </th>
523
+ <td class="docstring">
524
+ <p>
525
+ Returns a digest of the given string that will not be altered by
526
+ String#to_xhtml.
527
+ </p>
528
+
529
+
530
+ </td>
531
+ </tr>
532
+
533
+ </table>
534
+ </div>
535
+ <div class="section methodsummary instance public">
536
+ <h1>Public Instance Method Summary</h1>
537
+ <table class="summary">
538
+
539
+ <tr>
540
+ <th class="signature">
541
+ <span class='name'><a href="#to_s-instance_method" title="#to_s">#to_s</a></span><span class='args'></span>
542
+ <span class='block'></span>
543
+
544
+ </th>
545
+ <td class="docstring">
546
+ <p>
547
+ Returns the output of this document.
548
+ </p>
549
+
550
+
551
+ </td>
552
+ </tr>
553
+
554
+ </table>
555
+ </div>
556
+ <div class="section methoddetails class public">
557
+ <h1>Public Class Method Details</h1>
558
+
559
+ <div class="method">
560
+ <div class="method_header">
561
+ <h3>digest</h3>
562
+ </div><div id="digest-class_method" class="section method">
563
+ <div class="details_title">
564
+ <div class='section methodsignature'>
565
+ <tt class='def'>
566
+ <span class='visibility'>public</span>
567
+ <span class='return_types'></span>
568
+ <span class='name'>digest</span><span class='args'>(input)</span>
569
+ <span class='block'></span>
570
+ </tt>
571
+ </div>
572
+
573
+ </div><div class="section docstring">
574
+ <p>
575
+ Returns a digest of the given string that will not be altered by
576
+ String#to_xhtml.
577
+ </p>
578
+
579
+ </div><div class="section source">
580
+ <span>[<a class="source_link" href="#">View source</a>]</span>
581
+ <div class="source_code">
582
+ <table>
583
+ <tr>
584
+ <td>
585
+ <pre class="lines">
586
+
587
+
588
+ 215
589
+ 216
590
+ 217
591
+ 218
592
+ 219
593
+ 220
594
+ 221</pre>
595
+ </td>
596
+ <td>
597
+ <pre class="code"><span class="info file"># File 'lib/erbook/document.rb', line 215</span>
598
+
599
+ <span class='def def kw'>def</span> <span class='Document constant id'>Document</span><span class='dot token'>.</span><span class='digest identifier id'>digest</span> <span class='input identifier id'>input</span>
600
+ <span class='Digest constant id'>Digest</span><span class='colon2 op'>::</span><span class='SHA1 constant id'>SHA1</span><span class='dot token'>.</span><span class='hexdigest identifier id'>hexdigest</span><span class='lparen token'>(</span><span class='input identifier id'>input</span><span class='dot token'>.</span><span class='to_s identifier id'>to_s</span><span class='rparen token'>)</span><span class='dot token'>.</span>
601
+
602
+ <span class='comment val'># XXX: surround all digits with alphabets so</span>
603
+ <span class='comment val'># Maruku doesn't change them into HTML</span>
604
+ <span class='gsub identifier id'>gsub</span><span class='lparen token'>(</span><span class='regexp val'>/\d/</span><span class='comma token'>,</span> <span class='string val'>'z\&amp;z'</span><span class='rparen token'>)</span>
605
+ <span class='end end kw'>end</span>
606
+ </pre>
607
+ </td>
608
+ </tr>
609
+ </table>
610
+ </div>
611
+ </div>
612
+ </div>
613
+ </div>
614
+
615
+ </div><div class="section methoddetails instance public">
616
+ <h1>Public Instance Method Details</h1>
617
+
618
+ <div class="method">
619
+ <div class="method_header">
620
+ <h3>to_s</h3>
621
+ </div><div id="to_s-instance_method" class="section method">
622
+ <div class="details_title">
623
+ <div class='section methodsignature'>
624
+ <tt class='def'>
625
+ <span class='visibility'>public</span>
626
+ <span class='return_types'></span>
627
+ <span class='name'>to_s</span><span class='args'></span>
628
+ <span class='block'></span>
629
+ </tt>
630
+ </div>
631
+
632
+ </div><div class="section docstring">
633
+ <p>
634
+ Returns the output of this document.
635
+ </p>
636
+
637
+ </div><div class="section source">
638
+ <span>[<a class="source_link" href="#">View source</a>]</span>
639
+ <div class="source_code">
640
+ <table>
641
+ <tr>
642
+ <td>
643
+ <pre class="lines">
644
+
645
+
646
+ 193
647
+ 194
648
+ 195
649
+ 196</pre>
650
+ </td>
651
+ <td>
652
+ <pre class="code"><span class="info file"># File 'lib/erbook/document.rb', line 193</span>
653
+
654
+ <span class='def def kw'>def</span> <span class='to_s identifier id'>to_s</span>
655
+ <span class='Template constant id'>Template</span><span class='dot token'>.</span><span class='new identifier id'>new</span><span class='lparen token'>(</span><span class='dstring node'>&quot;#{@format_file}:output&quot;</span><span class='comma token'>,</span> <span class='@format ivar id'>@format</span><span class='lbrack token'>[</span><span class='string val'>'output'</span><span class='rbrack token'>]</span><span class='dot token'>.</span><span class='to_s identifier id'>to_s</span><span class='rparen token'>)</span><span class='dot token'>.</span>
656
+ <span class='render_with identifier id'>render_with</span><span class='lparen token'>(</span><span class='@template_vars ivar id'>@template_vars</span><span class='dot token'>.</span><span class='merge identifier id'>merge</span><span class='lparen token'>(</span><span class='symbol val'>:@content</span> <span class='assign token'>=</span><span class='gt op'>&gt;</span> <span class='@processed_document ivar id'>@processed_document</span><span class='rparen token'>)</span><span class='rparen token'>)</span>
657
+ <span class='end end kw'>end</span>
658
+ </pre>
659
+ </td>
660
+ </tr>
661
+ </table>
662
+ </div>
663
+ </div>
664
+ </div>
665
+ </div>
666
+
667
+ </div>
668
+ </div>
669
+
670
+ </div>
671
+ </div>
672
+ </body>
673
+ </html>