kwartz 3.1.2 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. data/CHANGES +444 -0
  2. data/README.txt +4 -1
  3. data/bin/kwartz +2 -2
  4. data/doc-api/classes/Kwartz.html +16 -7
  5. data/doc-api/classes/Kwartz/Assertion.html +6 -6
  6. data/doc-api/classes/Kwartz/AssertionError.html +6 -6
  7. data/doc-api/classes/Kwartz/AttrInfo.html +71 -61
  8. data/doc-api/classes/Kwartz/BaseError.html +12 -12
  9. data/doc-api/classes/Kwartz/BaseTranslator.html +104 -74
  10. data/doc-api/classes/Kwartz/CharacterType.html +24 -24
  11. data/doc-api/classes/Kwartz/CommandOptionError.html +7 -7
  12. data/doc-api/classes/Kwartz/CommandOptions.html +50 -50
  13. data/doc-api/classes/Kwartz/Config.html +5 -0
  14. data/doc-api/classes/Kwartz/ConvertError.html +12 -12
  15. data/doc-api/classes/Kwartz/Converter.html +31 -33
  16. data/doc-api/classes/Kwartz/CssStyleParser.html +207 -168
  17. data/doc-api/classes/Kwartz/Defun.html +32 -31
  18. data/doc-api/classes/Kwartz/{HandlerArgument.html → Directive.html} +27 -53
  19. data/doc-api/classes/Kwartz/ElementInfo.html +68 -53
  20. data/doc-api/classes/Kwartz/EperlExpressionParser.html +185 -0
  21. data/doc-api/classes/Kwartz/EperlHandler.html +65 -58
  22. data/doc-api/classes/Kwartz/EperlTranslator.html +14 -7
  23. data/doc-api/classes/Kwartz/ErubisTranslator.html +14 -7
  24. data/doc-api/classes/Kwartz/ErubyTranslator.html +14 -7
  25. data/doc-api/classes/Kwartz/ExpandStatement.html +20 -20
  26. data/doc-api/classes/Kwartz/Expander.html +358 -0
  27. data/doc-api/classes/Kwartz/Handler.html +287 -157
  28. data/doc-api/classes/Kwartz/{StatementHelper.html → HandlerHelper.html} +307 -112
  29. data/doc-api/classes/Kwartz/Helper/ActionViewHelper.html +23 -23
  30. data/doc-api/classes/Kwartz/Helper/RailsTemplate.html +96 -96
  31. data/doc-api/classes/Kwartz/JstlExpressionParser.html +181 -0
  32. data/doc-api/classes/Kwartz/JstlHandler.html +134 -126
  33. data/doc-api/classes/Kwartz/JstlTranslator.html +21 -14
  34. data/doc-api/classes/Kwartz/KwartzError.html +6 -6
  35. data/doc-api/classes/Kwartz/Main.html +4 -4
  36. data/doc-api/classes/Kwartz/NativeExpression.html +19 -19
  37. data/doc-api/classes/Kwartz/NativeStatement.html +24 -24
  38. data/doc-api/classes/Kwartz/Node.html +7 -7
  39. data/doc-api/classes/Kwartz/PIErubisTranslator.html +21 -14
  40. data/doc-api/classes/Kwartz/ParseError.html +6 -6
  41. data/doc-api/classes/Kwartz/PerlExpressionParser.html +185 -0
  42. data/doc-api/classes/Kwartz/PerlHandler.html +353 -0
  43. data/doc-api/classes/Kwartz/PerlTranslator.html +226 -0
  44. data/doc-api/classes/Kwartz/PhpExpressionParser.html +185 -0
  45. data/doc-api/classes/Kwartz/PhpHandler.html +63 -56
  46. data/doc-api/classes/Kwartz/PhpTranslator.html +21 -14
  47. data/doc-api/classes/Kwartz/PresentationLogicParser.html +126 -123
  48. data/doc-api/classes/Kwartz/PrintStatement.html +18 -18
  49. data/doc-api/classes/Kwartz/RailsHandler.html +84 -85
  50. data/doc-api/classes/Kwartz/RailsTranslator.html +13 -6
  51. data/doc-api/classes/Kwartz/RubyExpressionParser.html +180 -0
  52. data/doc-api/classes/Kwartz/RubyHandler.html +73 -69
  53. data/doc-api/classes/Kwartz/RubyStyleParser.html +86 -86
  54. data/doc-api/classes/Kwartz/RubyTranslator.html +28 -21
  55. data/doc-api/classes/Kwartz/Ruleset.html +622 -1
  56. data/doc-api/classes/Kwartz/StrutsTranslator.html +14 -14
  57. data/doc-api/classes/Kwartz/TagInfo.html +52 -27
  58. data/doc-api/classes/Kwartz/TextConverter.html +75 -37
  59. data/doc-api/classes/Kwartz/Translator.html +54 -53
  60. data/doc-api/classes/Kwartz/Util.html +25 -25
  61. data/doc-api/created.rid +1 -1
  62. data/doc-api/files/__/README_txt.html +7 -2
  63. data/doc-api/files/kwartz/assert_rb.html +2 -2
  64. data/doc-api/files/kwartz/binding/eperl_rb.html +2 -2
  65. data/doc-api/files/kwartz/binding/erubis_rb.html +2 -2
  66. data/doc-api/files/kwartz/binding/eruby_rb.html +2 -2
  67. data/doc-api/files/kwartz/binding/jstl_rb.html +2 -2
  68. data/doc-api/files/kwartz/binding/perl_rb.html +115 -0
  69. data/doc-api/files/kwartz/binding/php_rb.html +2 -2
  70. data/doc-api/files/kwartz/binding/pierubis_rb.html +2 -2
  71. data/doc-api/files/kwartz/binding/rails_rb.html +2 -2
  72. data/doc-api/files/kwartz/binding/ruby_rb.html +2 -2
  73. data/doc-api/files/kwartz/binding/struts_rb.html +2 -2
  74. data/doc-api/files/kwartz/config_rb.html +2 -2
  75. data/doc-api/files/kwartz/converter_rb.html +2 -2
  76. data/doc-api/files/kwartz/defun_rb.html +2 -2
  77. data/doc-api/files/kwartz/error_rb.html +2 -2
  78. data/doc-api/files/kwartz/helper/rails_rb.html +2 -2
  79. data/doc-api/files/kwartz/main_rb.html +3 -2
  80. data/doc-api/files/kwartz/node_rb.html +2 -2
  81. data/doc-api/files/kwartz/parser_rb.html +2 -2
  82. data/doc-api/files/kwartz/translator_rb.html +2 -2
  83. data/doc-api/files/kwartz/util/assert-text-equal_rb.html +2 -2
  84. data/doc-api/files/kwartz/util/testcase-helper_rb.html +2 -2
  85. data/doc-api/files/kwartz/util_rb.html +2 -2
  86. data/doc-api/files/kwartz_rb.html +2 -2
  87. data/doc-api/fr_class_index.html +10 -5
  88. data/doc-api/fr_file_index.html +1 -0
  89. data/doc-api/fr_method_index.html +268 -239
  90. data/doc/docstyle.css +9 -3
  91. data/doc/img/fig05.png +0 -0
  92. data/doc/introduction-to-kwartz.html +3040 -0
  93. data/doc/pattern-catalog.html +5 -3
  94. data/doc/reference.html +680 -26
  95. data/doc/users-guide.html +222 -67
  96. data/kwartz.gemspec +4 -4
  97. data/lib/kwartz.rb +3 -3
  98. data/lib/kwartz/assert.rb +2 -2
  99. data/lib/kwartz/binding/eperl.rb +71 -31
  100. data/lib/kwartz/binding/erubis.rb +3 -2
  101. data/lib/kwartz/binding/eruby.rb +3 -2
  102. data/lib/kwartz/binding/jstl.rb +66 -29
  103. data/lib/kwartz/binding/perl.rb +230 -0
  104. data/lib/kwartz/binding/php.rb +69 -29
  105. data/lib/kwartz/binding/pierubis.rb +3 -2
  106. data/lib/kwartz/binding/rails.rb +18 -18
  107. data/lib/kwartz/binding/ruby.rb +74 -42
  108. data/lib/kwartz/binding/struts.rb +22 -21
  109. data/lib/kwartz/config.rb +4 -4
  110. data/lib/kwartz/converter.rb +465 -345
  111. data/lib/kwartz/defun.rb +2 -2
  112. data/lib/kwartz/error.rb +2 -2
  113. data/lib/kwartz/helper/rails.rb +2 -2
  114. data/lib/kwartz/main.rb +5 -4
  115. data/lib/kwartz/node.rb +92 -144
  116. data/lib/kwartz/parser.rb +112 -103
  117. data/lib/kwartz/translator.rb +14 -6
  118. data/lib/kwartz/util.rb +2 -2
  119. data/lib/kwartz/util/assert-text-equal.rb +2 -2
  120. data/lib/kwartz/util/testcase-helper.rb +1 -1
  121. data/test/test-compile.rb +2 -2
  122. data/test/test-compile.yaml +81 -0
  123. data/test/test-converter.rb +4 -8
  124. data/test/test-converter.yaml +152 -3
  125. data/test/test-directives.rb +2 -2
  126. data/test/test-directives.yaml +222 -0
  127. data/test/test-main.rb +6 -4
  128. data/test/test-main.yaml +66 -1
  129. data/test/test-parser.rb +12 -3
  130. data/test/test-parser.yaml +64 -51
  131. data/test/test-rails.rb +2 -2
  132. data/test/test-ruleset.rb +2 -2
  133. data/test/test-ruleset.yaml +465 -4
  134. data/test/test.log +6 -0
  135. data/test/test.rb +2 -2
  136. metadata +116 -106
  137. data/ChangeLog +0 -156
  138. data/doc-api/classes/Kwartz/DocumentRuleset.html +0 -369
  139. data/doc-api/classes/Kwartz/ElementExpander.html +0 -325
  140. data/doc-api/classes/Kwartz/ElementRuleset.html +0 -612
@@ -88,8 +88,8 @@ css style presentation logic parser
88
88
  example of presentation logic in css style:
89
89
  </p>
90
90
  <pre>
91
- // comment
92
- #list {
91
+ /* comment */
92
+ #idname, .classname, tagname {
93
93
  value: @var;
94
94
  attrs: &quot;class&quot; @classname, &quot;bgcolro&quot; color;
95
95
  append: @value==item['list'] ? ' checked' : '';
@@ -112,13 +112,14 @@ example of presentation logic in css style:
112
112
  <h3 class="section-bar">Methods</h3>
113
113
 
114
114
  <div class="name-list">
115
- <a href="#M000078">has_colon?</a>&nbsp;&nbsp;
116
- <a href="#M000076">keywords</a>&nbsp;&nbsp;
117
- <a href="#M000074">parse</a>&nbsp;&nbsp;
118
- <a href="#M000077">parse_document_ruleset</a>&nbsp;&nbsp;
119
- <a href="#M000079">parse_element_ruleset</a>&nbsp;&nbsp;
120
- <a href="#M000080">parse_import_command</a>&nbsp;&nbsp;
121
- <a href="#M000075">scan_hook</a>&nbsp;&nbsp;
115
+ <a href="#M000091">has_colon?</a>&nbsp;&nbsp;
116
+ <a href="#M000090">keywords</a>&nbsp;&nbsp;
117
+ <a href="#M000087">new</a>&nbsp;&nbsp;
118
+ <a href="#M000088">parse</a>&nbsp;&nbsp;
119
+ <a href="#M000093">parse_declaration</a>&nbsp;&nbsp;
120
+ <a href="#M000094">parse_import_command</a>&nbsp;&nbsp;
121
+ <a href="#M000092">parse_selectors</a>&nbsp;&nbsp;
122
+ <a href="#M000089">scan_hook</a>&nbsp;&nbsp;
122
123
  </div>
123
124
  </div>
124
125
 
@@ -146,54 +147,103 @@ example of presentation logic in css style:
146
147
 
147
148
 
148
149
 
150
+ <div id="attribute-list">
151
+ <h3 class="section-bar">Attributes</h3>
152
+
153
+ <div class="name-list">
154
+ <table>
155
+ <tr class="top-aligned-row context-row">
156
+ <td class="context-item-name">mode</td>
157
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
158
+ <td class="context-item-desc"></td>
159
+ </tr>
160
+ </table>
161
+ </div>
162
+ </div>
149
163
 
150
164
 
151
165
 
152
166
  <!-- if method_list -->
153
167
  <div id="methods">
168
+ <h3 class="section-bar">Public Class methods</h3>
169
+
170
+ <div id="method-M000087" class="method-detail">
171
+ <a name="M000087"></a>
172
+
173
+ <div class="method-heading">
174
+ <a href="#M000087" class="method-signature">
175
+ <span class="method-name">new</span><span class="method-args">(*args)</span>
176
+ </a>
177
+ </div>
178
+
179
+ <div class="method-description">
180
+ <p><a class="source-toggle" href="#"
181
+ onclick="toggleCode('M000087-source');return false;">[Source]</a></p>
182
+ <div class="method-source-code" id="M000087-source">
183
+ <pre>
184
+ <span class="ruby-comment cmt"># File kwartz/parser.rb, line 605</span>
185
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
186
+ <span class="ruby-keyword kw">super</span>
187
+ <span class="ruby-ivar">@mode</span> = <span class="ruby-identifier">:selector</span> <span class="ruby-comment cmt"># :selector or :declaration</span>
188
+ <span class="ruby-keyword kw">end</span>
189
+ </pre>
190
+ </div>
191
+ </div>
192
+ </div>
193
+
154
194
  <h3 class="section-bar">Public Instance methods</h3>
155
195
 
156
- <div id="method-M000074" class="method-detail">
157
- <a name="M000074"></a>
196
+ <div id="method-M000088" class="method-detail">
197
+ <a name="M000088"></a>
158
198
 
159
199
  <div class="method-heading">
160
- <a href="#M000074" class="method-signature">
200
+ <a href="#M000088" class="method-signature">
161
201
  <span class="method-name">parse</span><span class="method-args">(input, filename='')</span>
162
202
  </a>
163
203
  </div>
164
204
 
165
205
  <div class="method-description">
166
206
  <p><a class="source-toggle" href="#"
167
- onclick="toggleCode('M000074-source');return false;">[Source]</a></p>
168
- <div class="method-source-code" id="M000074-source">
207
+ onclick="toggleCode('M000088-source');return false;">[Source]</a></p>
208
+ <div class="method-source-code" id="M000088-source">
169
209
  <pre>
170
- <span class="ruby-comment cmt"># File kwartz/parser.rb, line 603</span>
210
+ <span class="ruby-comment cmt"># File kwartz/parser.rb, line 613</span>
171
211
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">input</span>, <span class="ruby-identifier">filename</span>=<span class="ruby-value str">''</span>)
172
212
  <span class="ruby-identifier">reset</span>(<span class="ruby-identifier">input</span>, <span class="ruby-identifier">filename</span>)
173
213
  <span class="ruby-identifier">scan</span>()
174
214
  <span class="ruby-identifier">rulesets</span> = []
175
- <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value">?@</span>
176
- <span class="ruby-identifier">c</span> = <span class="ruby-identifier">getch</span>();
177
- <span class="ruby-identifier">scan_ident</span>()
178
- <span class="ruby-identifier">name</span> = <span class="ruby-ivar">@value</span>
179
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'import'</span>
215
+ <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:command</span> <span class="ruby-comment cmt"># '@import'</span>
216
+ <span class="ruby-identifier">command</span> = <span class="ruby-ivar">@value</span>
217
+ <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">command</span>
218
+ <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'@import'</span>
180
219
  <span class="ruby-identifier">imported_rulesets</span> = <span class="ruby-identifier">parse_import_command</span>()
181
220
  <span class="ruby-identifier">rulesets</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">imported_rulesets</span>
221
+ <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'@from'</span>
222
+ <span class="ruby-comment cmt"># TODO</span>
223
+ <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'@import_pdata'</span>
224
+ <span class="ruby-comment cmt"># TODO</span>
182
225
  <span class="ruby-keyword kw">else</span>
183
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;@#{name}: unsupported command.&quot;</span>)
226
+ <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;#{command}: unsupported command.&quot;</span>)
184
227
  <span class="ruby-keyword kw">end</span>
185
228
  <span class="ruby-keyword kw">end</span>
186
- <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value">?#</span>
187
- <span class="ruby-identifier">scan_ident</span>()
188
- <span class="ruby-identifier">name</span> = <span class="ruby-ivar">@value</span>
189
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'DOCUMENT'</span>
190
- <span class="ruby-identifier">rulesets</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">parse_document_ruleset</span>()
191
- <span class="ruby-keyword kw">else</span>
192
- <span class="ruby-identifier">rulesets</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">parse_element_ruleset</span>()
229
+ <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:selector</span>
230
+ <span class="ruby-identifier">selectors</span> = <span class="ruby-identifier">parse_selectors</span>()
231
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'{'</span><span class="ruby-value str">'{'</span>
232
+ <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': '{' is expected.&quot;</span>) <span class="ruby-comment cmt">#'</span>
233
+ <span class="ruby-keyword kw">end</span>
234
+ <span class="ruby-ivar">@mode</span> = <span class="ruby-identifier">:declaration</span>
235
+ <span class="ruby-identifier">_linenum</span>, <span class="ruby-identifier">_column</span> = <span class="ruby-ivar">@linenum</span>, <span class="ruby-ivar">@column</span>
236
+ <span class="ruby-identifier">ruleset</span> = <span class="ruby-constant">Ruleset</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">selectors</span>)
237
+ <span class="ruby-identifier">parse_declaration</span>(<span class="ruby-identifier">ruleset</span>)
238
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span>
239
+ <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{selectors.first}': is not closed by '}'.&quot;</span>, <span class="ruby-identifier">_linenum</span>, <span class="ruby-identifier">_column</span>)
193
240
  <span class="ruby-keyword kw">end</span>
241
+ <span class="ruby-ivar">@mode</span> = <span class="ruby-identifier">:selector</span>
242
+ <span class="ruby-identifier">rulesets</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">ruleset</span>
243
+ <span class="ruby-identifier">scan</span>()
194
244
  <span class="ruby-keyword kw">end</span>
195
245
  <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>
196
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': '#name' is expected.&quot;</span>)
246
+ <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': selector is expected.&quot;</span>)
197
247
  <span class="ruby-keyword kw">end</span>
198
248
  <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">rulesets</span>
199
249
  <span class="ruby-keyword kw">end</span>
@@ -204,21 +254,21 @@ example of presentation logic in css style:
204
254
 
205
255
  <h3 class="section-bar">Protected Instance methods</h3>
206
256
 
207
- <div id="method-M000078" class="method-detail">
208
- <a name="M000078"></a>
257
+ <div id="method-M000091" class="method-detail">
258
+ <a name="M000091"></a>
209
259
 
210
260
  <div class="method-heading">
211
- <a href="#M000078" class="method-signature">
261
+ <a href="#M000091" class="method-signature">
212
262
  <span class="method-name">has_colon?</span><span class="method-args">()</span>
213
263
  </a>
214
264
  </div>
215
265
 
216
266
  <div class="method-description">
217
267
  <p><a class="source-toggle" href="#"
218
- onclick="toggleCode('M000078-source');return false;">[Source]</a></p>
219
- <div class="method-source-code" id="M000078-source">
268
+ onclick="toggleCode('M000091-source');return false;">[Source]</a></p>
269
+ <div class="method-source-code" id="M000091-source">
220
270
  <pre>
221
- <span class="ruby-comment cmt"># File kwartz/parser.rb, line 730</span>
271
+ <span class="ruby-comment cmt"># File kwartz/parser.rb, line 741</span>
222
272
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">has_colon?</span>
223
273
  <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@ch</span> <span class="ruby-operator">==</span> <span class="ruby-value">?:</span>
224
274
  <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': ':' is required.&quot;</span>)
@@ -230,21 +280,21 @@ example of presentation logic in css style:
230
280
  </div>
231
281
  </div>
232
282
 
233
- <div id="method-M000076" class="method-detail">
234
- <a name="M000076"></a>
283
+ <div id="method-M000090" class="method-detail">
284
+ <a name="M000090"></a>
235
285
 
236
286
  <div class="method-heading">
237
- <a href="#M000076" class="method-signature">
287
+ <a href="#M000090" class="method-signature">
238
288
  <span class="method-name">keywords</span><span class="method-args">(keyword)</span>
239
289
  </a>
240
290
  </div>
241
291
 
242
292
  <div class="method-description">
243
293
  <p><a class="source-toggle" href="#"
244
- onclick="toggleCode('M000076-source');return false;">[Source]</a></p>
245
- <div class="method-source-code" id="M000076-source">
294
+ onclick="toggleCode('M000090-source');return false;">[Source]</a></p>
295
+ <div class="method-source-code" id="M000090-source">
246
296
  <pre>
247
- <span class="ruby-comment cmt"># File kwartz/parser.rb, line 691</span>
297
+ <span class="ruby-comment cmt"># File kwartz/parser.rb, line 735</span>
248
298
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">keywords</span>(<span class="ruby-identifier">keyword</span>)
249
299
  <span class="ruby-keyword kw">return</span> <span class="ruby-constant">CSSSTYLE_KEYWORDS</span>[<span class="ruby-identifier">keyword</span>]
250
300
  <span class="ruby-keyword kw">end</span>
@@ -253,144 +303,69 @@ example of presentation logic in css style:
253
303
  </div>
254
304
  </div>
255
305
 
256
- <div id="method-M000077" class="method-detail">
257
- <a name="M000077"></a>
258
-
259
- <div class="method-heading">
260
- <a href="#M000077" class="method-signature">
261
- <span class="method-name">parse_document_ruleset</span><span class="method-args">()</span>
262
- </a>
263
- </div>
264
-
265
- <div class="method-description">
266
- <p><a class="source-toggle" href="#"
267
- onclick="toggleCode('M000077-source');return false;">[Source]</a></p>
268
- <div class="method-source-code" id="M000077-source">
269
- <pre>
270
- <span class="ruby-comment cmt"># File kwartz/parser.rb, line 697</span>
271
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse_document_ruleset</span>
272
- <span class="ruby-identifier">assert</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@value</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'DOCUMENT'</span>
273
- <span class="ruby-identifier">start_linenum</span> = <span class="ruby-ivar">@linenum</span>
274
- <span class="ruby-identifier">scan</span>()
275
- <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'{'</span><span class="ruby-value str">'{'</span>
276
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': '{' is expected.&quot;</span>)
277
- <span class="ruby-keyword kw">end</span>
278
- <span class="ruby-identifier">ruleset</span> = <span class="ruby-constant">DocumentRuleset</span>.<span class="ruby-identifier">new</span>
279
- <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@token</span>
280
- <span class="ruby-identifier">scan</span>()
281
- <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@token</span>
282
- <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'}'</span><span class="ruby-value str">'}'</span> ; <span class="ruby-keyword kw">break</span>
283
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:global</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_global</span> <span class="ruby-identifier">_parse_words</span>()
284
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:local</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_local</span> <span class="ruby-identifier">_parse_words</span>()
285
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:fixture</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_fixture</span> <span class="ruby-identifier">_parse_block</span>()
286
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:begin</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_begin</span> <span class="ruby-identifier">_parse_block</span>()
287
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:end</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_end</span> <span class="ruby-identifier">_parse_block</span>()
288
- <span class="ruby-comment cmt">#when :before ; has_colon?(); ruleset.set_before _parse_block()</span>
289
- <span class="ruby-comment cmt">#when :after ; has_colon?(); ruleset.set_after _parse_block()</span>
290
- <span class="ruby-keyword kw">else</span>
291
- <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span>
292
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-value str">&quot;'#DOCUMENT': is not closed by '}'.&quot;</span>, <span class="ruby-identifier">start_linenum</span>)
293
- <span class="ruby-keyword kw">else</span>
294
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': unexpected token.&quot;</span>)
295
- <span class="ruby-keyword kw">end</span>
296
- <span class="ruby-keyword kw">end</span>
297
- <span class="ruby-keyword kw">end</span>
298
- <span class="ruby-identifier">assert</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'}'</span><span class="ruby-value str">'}'</span>
299
- <span class="ruby-identifier">scan</span>()
300
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">ruleset</span>
301
- <span class="ruby-keyword kw">end</span>
302
- </pre>
303
- </div>
304
- </div>
305
- </div>
306
-
307
- <div id="method-M000079" class="method-detail">
308
- <a name="M000079"></a>
306
+ <div id="method-M000093" class="method-detail">
307
+ <a name="M000093"></a>
309
308
 
310
309
  <div class="method-heading">
311
- <a href="#M000079" class="method-signature">
312
- <span class="method-name">parse_element_ruleset</span><span class="method-args">()</span>
310
+ <a href="#M000093" class="method-signature">
311
+ <span class="method-name">parse_declaration</span><span class="method-args">(ruleset)</span>
313
312
  </a>
314
313
  </div>
315
314
 
316
315
  <div class="method-description">
317
316
  <p><a class="source-toggle" href="#"
318
- onclick="toggleCode('M000079-source');return false;">[Source]</a></p>
319
- <div class="method-source-code" id="M000079-source">
317
+ onclick="toggleCode('M000093-source');return false;">[Source]</a></p>
318
+ <div class="method-source-code" id="M000093-source">
320
319
  <pre>
321
- <span class="ruby-comment cmt"># File kwartz/parser.rb, line 738</span>
322
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse_element_ruleset</span>
323
- <span class="ruby-identifier">assert</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:ident</span>
324
- <span class="ruby-identifier">start_linenum</span> = <span class="ruby-ivar">@linenum</span>
325
- <span class="ruby-identifier">name</span> = <span class="ruby-ivar">@value</span>
326
- <span class="ruby-comment cmt">#names = [name]</span>
327
- <span class="ruby-identifier">names</span> = []
328
- <span class="ruby-identifier">scan</span>()
329
- <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">','</span><span class="ruby-value str">','</span>
330
- <span class="ruby-identifier">scan</span>()
331
- <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value">?#</span>
332
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': '#name' is expected.&quot;</span>)
333
- <span class="ruby-keyword kw">end</span>
334
- <span class="ruby-identifier">scan_ident</span>()
335
- <span class="ruby-identifier">names</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@value</span>
336
- <span class="ruby-identifier">scan</span>()
337
- <span class="ruby-keyword kw">end</span>
338
- <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'{'</span><span class="ruby-value str">'{'</span>
339
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': '{' is expected.&quot;</span>)
340
- <span class="ruby-keyword kw">end</span>
341
-
342
- <span class="ruby-identifier">ruleset</span> = <span class="ruby-constant">ElementRuleset</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">name</span>)
320
+ <span class="ruby-comment cmt"># File kwartz/parser.rb, line 766</span>
321
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse_declaration</span>(<span class="ruby-identifier">ruleset</span>)
322
+ <span class="ruby-identifier">assert</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'{'</span><span class="ruby-value str">'{'</span>
343
323
  <span class="ruby-keyword kw">while</span> <span class="ruby-keyword kw">true</span>
344
324
  <span class="ruby-identifier">scan</span>()
345
325
  <span class="ruby-identifier">flag_escape</span> = <span class="ruby-identifier">escape?</span>(<span class="ruby-ivar">@value</span>)
346
326
  <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@token</span>
347
327
  <span class="ruby-keyword kw">when</span> <span class="ruby-keyword kw">nil</span> ; <span class="ruby-keyword kw">break</span>
348
328
  <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'}'</span><span class="ruby-value str">'}'</span> ; <span class="ruby-keyword kw">break</span>
349
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:stag</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_stag</span> <span class="ruby-identifier">_parse_expr</span>() , <span class="ruby-identifier">flag_escape</span>
350
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:cont</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_cont</span> <span class="ruby-identifier">_parse_expr</span>() , <span class="ruby-identifier">flag_escape</span>
351
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:etag</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_etag</span> <span class="ruby-identifier">_parse_expr</span>() , <span class="ruby-identifier">flag_escape</span>
352
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:elem</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_elem</span> <span class="ruby-identifier">_parse_expr</span>() , <span class="ruby-identifier">flag_escape</span>
353
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:value</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_value</span> <span class="ruby-identifier">_parse_expr</span>() , <span class="ruby-identifier">flag_escape</span>
354
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:attrs</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_attrs</span> <span class="ruby-identifier">_parse_pairs</span>(), <span class="ruby-identifier">flag_escape</span>
355
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:append</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_append</span> <span class="ruby-identifier">_parse_exprs</span>(), <span class="ruby-identifier">flag_escape</span>
356
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:remove</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_remove</span> <span class="ruby-identifier">_parse_strs</span>()
329
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:stag</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_stag</span> <span class="ruby-identifier">_parse_expr</span>() , <span class="ruby-identifier">flag_escape</span>
330
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:cont</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_cont</span> <span class="ruby-identifier">_parse_expr</span>() , <span class="ruby-identifier">flag_escape</span>
331
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:etag</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_etag</span> <span class="ruby-identifier">_parse_expr</span>() , <span class="ruby-identifier">flag_escape</span>
332
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:elem</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_elem</span> <span class="ruby-identifier">_parse_expr</span>() , <span class="ruby-identifier">flag_escape</span>
333
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:value</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_value</span> <span class="ruby-identifier">_parse_expr</span>() , <span class="ruby-identifier">flag_escape</span>
334
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:attrs</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_attrs</span> <span class="ruby-identifier">_parse_pairs</span>(), <span class="ruby-identifier">flag_escape</span>
335
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:append</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_append</span> <span class="ruby-identifier">_parse_exprs</span>(), <span class="ruby-identifier">flag_escape</span>
336
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:remove</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_remove</span> <span class="ruby-identifier">_parse_strs</span>()
357
337
  <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:tagname</span>; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_tagname</span> <span class="ruby-identifier">_parse_str</span>()
358
- <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:logic</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_logic</span> <span class="ruby-identifier">_parse_block</span>()
338
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:logic</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_logic</span> <span class="ruby-identifier">_parse_block</span>()
339
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:before</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_before</span> <span class="ruby-identifier">_parse_block</span>()
340
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:after</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_after</span> <span class="ruby-identifier">_parse_block</span>()
341
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:begin</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_before</span> <span class="ruby-identifier">_parse_block</span>()
342
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:end</span> ; <span class="ruby-identifier">has_colon?</span>(); <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">set_after</span> <span class="ruby-identifier">_parse_block</span>()
359
343
  <span class="ruby-keyword kw">else</span>
360
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': unexpected token.&quot;</span>)
344
+ <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': unexpected token.&quot;</span>) <span class="ruby-comment cmt">#'</span>
361
345
  <span class="ruby-keyword kw">end</span>
362
346
  <span class="ruby-keyword kw">end</span>
363
- <span class="ruby-comment cmt">## build rulesets</span>
364
- <span class="ruby-identifier">rulesets</span> = [<span class="ruby-identifier">ruleset</span>]
365
- <span class="ruby-identifier">names</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span><span class="ruby-operator">|</span> <span class="ruby-identifier">rulesets</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">ruleset</span>.<span class="ruby-identifier">duplicate</span>(<span class="ruby-identifier">name</span>) <span class="ruby-keyword kw">end</span>
366
-
367
- <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span>
368
- <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'##{name}': is not closed by '}'.&quot;</span>, <span class="ruby-identifier">start_linenum</span>)
369
- <span class="ruby-keyword kw">end</span>
370
- <span class="ruby-identifier">assert</span> <span class="ruby-node">&quot;@token=#{@token.inspect}&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'}'</span><span class="ruby-value str">'}'</span>
371
- <span class="ruby-identifier">scan</span>()
372
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">rulesets</span>
347
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">ruleset</span>
373
348
  <span class="ruby-keyword kw">end</span>
374
349
  </pre>
375
350
  </div>
376
351
  </div>
377
352
  </div>
378
353
 
379
- <div id="method-M000080" class="method-detail">
380
- <a name="M000080"></a>
354
+ <div id="method-M000094" class="method-detail">
355
+ <a name="M000094"></a>
381
356
 
382
357
  <div class="method-heading">
383
- <a href="#M000080" class="method-signature">
358
+ <a href="#M000094" class="method-signature">
384
359
  <span class="method-name">parse_import_command</span><span class="method-args">()</span>
385
360
  </a>
386
361
  </div>
387
362
 
388
363
  <div class="method-description">
389
364
  <p><a class="source-toggle" href="#"
390
- onclick="toggleCode('M000080-source');return false;">[Source]</a></p>
391
- <div class="method-source-code" id="M000080-source">
365
+ onclick="toggleCode('M000094-source');return false;">[Source]</a></p>
366
+ <div class="method-source-code" id="M000094-source">
392
367
  <pre>
393
- <span class="ruby-comment cmt"># File kwartz/parser.rb, line 792</span>
368
+ <span class="ruby-comment cmt"># File kwartz/parser.rb, line 796</span>
394
369
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse_import_command</span>
395
370
  <span class="ruby-identifier">c</span> = <span class="ruby-ivar">@ch</span>
396
371
  <span class="ruby-identifier">c</span> = <span class="ruby-identifier">getch</span>() <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">is_whitespace</span>(<span class="ruby-identifier">c</span>)
@@ -402,13 +377,18 @@ example of presentation logic in css style:
402
377
  <span class="ruby-identifier">filename</span> = <span class="ruby-identifier">dir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">filename</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dir</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">'.'</span>
403
378
  <span class="ruby-keyword kw">end</span>
404
379
  <span class="ruby-identifier">test</span>(<span class="ruby-value">?f</span>, <span class="ruby-identifier">filename</span>) <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{filename}': import file not found.&quot;</span>)
380
+ <span class="ruby-identifier">_linenum</span>, <span class="ruby-identifier">_column</span> = <span class="ruby-ivar">@linenum</span>, <span class="ruby-ivar">@column</span>
405
381
  <span class="ruby-identifier">c</span> = <span class="ruby-ivar">@ch</span>
406
382
  <span class="ruby-identifier">c</span> = <span class="ruby-identifier">getch</span>() <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">is_whitespace</span>(<span class="ruby-identifier">c</span>)
407
383
  <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value">?;</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-value str">&quot;';' required.&quot;</span>)
408
384
  <span class="ruby-identifier">c</span> = <span class="ruby-identifier">getch</span>()
409
385
  <span class="ruby-identifier">scan</span>()
410
386
  <span class="ruby-identifier">parser</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@properties</span>)
411
- <span class="ruby-identifier">ruleset_list</span> = <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">filename</span>), <span class="ruby-identifier">filename</span>)
387
+ <span class="ruby-keyword kw">begin</span>
388
+ <span class="ruby-identifier">ruleset_list</span> = <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">filename</span>), <span class="ruby-identifier">filename</span>)
389
+ <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">ex</span>
390
+ <span class="ruby-identifier">parse_error</span>(<span class="ruby-identifier">ex</span>.<span class="ruby-identifier">message</span>, <span class="ruby-identifier">_linenum</span>, <span class="ruby-identifier">_column</span>)
391
+ <span class="ruby-keyword kw">end</span>
412
392
  <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">ruleset_list</span>
413
393
  <span class="ruby-keyword kw">end</span>
414
394
  </pre>
@@ -416,11 +396,46 @@ example of presentation logic in css style:
416
396
  </div>
417
397
  </div>
418
398
 
419
- <div id="method-M000075" class="method-detail">
420
- <a name="M000075"></a>
399
+ <div id="method-M000092" class="method-detail">
400
+ <a name="M000092"></a>
401
+
402
+ <div class="method-heading">
403
+ <a href="#M000092" class="method-signature">
404
+ <span class="method-name">parse_selectors</span><span class="method-args">()</span>
405
+ </a>
406
+ </div>
407
+
408
+ <div class="method-description">
409
+ <p><a class="source-toggle" href="#"
410
+ onclick="toggleCode('M000092-source');return false;">[Source]</a></p>
411
+ <div class="method-source-code" id="M000092-source">
412
+ <pre>
413
+ <span class="ruby-comment cmt"># File kwartz/parser.rb, line 749</span>
414
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse_selectors</span>
415
+ <span class="ruby-identifier">assert</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:selector</span>
416
+ <span class="ruby-identifier">start_linenum</span> = <span class="ruby-ivar">@linenum</span>
417
+ <span class="ruby-identifier">selectors</span> = [ <span class="ruby-ivar">@value</span> ]
418
+ <span class="ruby-identifier">scan</span>()
419
+ <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">','</span><span class="ruby-value str">','</span>
420
+ <span class="ruby-identifier">scan</span>()
421
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@token</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:selector</span>
422
+ <span class="ruby-identifier">raise</span> <span class="ruby-identifier">parse_error</span>(<span class="ruby-node">&quot;'#{@value}': selector is expected (or additional comma exists).&quot;</span>) <span class="ruby-comment cmt">#'</span>
423
+ <span class="ruby-keyword kw">end</span>
424
+ <span class="ruby-identifier">selectors</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@value</span>
425
+ <span class="ruby-identifier">scan</span>()
426
+ <span class="ruby-keyword kw">end</span>
427
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">selectors</span>
428
+ <span class="ruby-keyword kw">end</span>
429
+ </pre>
430
+ </div>
431
+ </div>
432
+ </div>
433
+
434
+ <div id="method-M000089" class="method-detail">
435
+ <a name="M000089"></a>
421
436
 
422
437
  <div class="method-heading">
423
- <a href="#M000075" class="method-signature">
438
+ <a href="#M000089" class="method-signature">
424
439
  <span class="method-name">scan_hook</span><span class="method-args">()</span>
425
440
  </a>
426
441
  </div>
@@ -430,10 +445,10 @@ example of presentation logic in css style:
430
445
  return false when not hooked
431
446
  </p>
432
447
  <p><a class="source-toggle" href="#"
433
- onclick="toggleCode('M000075-source');return false;">[Source]</a></p>
434
- <div class="method-source-code" id="M000075-source">
448
+ onclick="toggleCode('M000089-source');return false;">[Source]</a></p>
449
+ <div class="method-source-code" id="M000089-source">
435
450
  <pre>
436
- <span class="ruby-comment cmt"># File kwartz/parser.rb, line 638</span>
451
+ <span class="ruby-comment cmt"># File kwartz/parser.rb, line 658</span>
437
452
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scan_hook</span>
438
453
  <span class="ruby-comment cmt">## comment</span>
439
454
  <span class="ruby-identifier">c</span> = <span class="ruby-ivar">@ch</span>
@@ -464,22 +479,46 @@ return false when not hooked
464
479
  <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt">#if</span>
465
480
  <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt">#if</span>
466
481
 
467
- <span class="ruby-comment cmt">## '#mark'</span>
468
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value">?#</span>
469
- <span class="ruby-identifier">c</span> = <span class="ruby-identifier">getch</span>()
470
- <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">is_alpha</span>(<span class="ruby-identifier">c</span>)
471
- <span class="ruby-ivar">@error</span> = <span class="ruby-identifier">:invalid_char</span>
472
- <span class="ruby-ivar">@value</span> = <span class="ruby-value str">'#'</span>
473
- <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@token</span> = <span class="ruby-identifier">:error</span>
482
+ <span class="ruby-comment cmt">##</span>
483
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@mode</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:selector</span>
484
+ <span class="ruby-comment cmt"># '#name' or '.name'</span>
485
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value">?#</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value">?.</span>
486
+ <span class="ruby-identifier">start_char</span> = <span class="ruby-identifier">c</span>
487
+ <span class="ruby-identifier">name</span> = <span class="ruby-value str">''</span>
488
+ <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">is_identchar</span>(<span class="ruby-identifier">c</span> = <span class="ruby-identifier">getch</span>()) <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value">?-</span>
489
+ <span class="ruby-identifier">name</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
490
+ <span class="ruby-keyword kw">end</span>
491
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">empty?</span>
492
+ <span class="ruby-ivar">@error</span> = <span class="ruby-identifier">:invalid_char</span>
493
+ <span class="ruby-ivar">@value</span> = <span class="ruby-identifier">start_char</span>.<span class="ruby-identifier">chr</span>
494
+ <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@token</span> = <span class="ruby-identifier">:error</span>
495
+ <span class="ruby-keyword kw">end</span>
496
+ <span class="ruby-ivar">@value</span> = <span class="ruby-identifier">start_char</span>.<span class="ruby-identifier">chr</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">name</span>
497
+ <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@token</span> = <span class="ruby-identifier">:selector</span>
498
+ <span class="ruby-keyword kw">end</span>
499
+ <span class="ruby-comment cmt"># 'tagname'</span>
500
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">is_identchar</span>(<span class="ruby-identifier">c</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value">?-</span>
501
+ <span class="ruby-identifier">name</span> = <span class="ruby-identifier">c</span>.<span class="ruby-identifier">chr</span>
502
+ <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">is_identchar</span>(<span class="ruby-identifier">c</span> = <span class="ruby-identifier">getch</span>()) <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value">?-</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value">?:</span>
503
+ <span class="ruby-identifier">name</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
504
+ <span class="ruby-keyword kw">end</span>
505
+ <span class="ruby-ivar">@value</span> = <span class="ruby-identifier">name</span>
506
+ <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@token</span> = <span class="ruby-identifier">:selector</span>
507
+ <span class="ruby-keyword kw">end</span>
508
+ <span class="ruby-comment cmt"># '@import'</span>
509
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value">?@</span>
510
+ <span class="ruby-identifier">name</span> = <span class="ruby-value str">''</span>
511
+ <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">is_identchar</span>(<span class="ruby-identifier">c</span> = <span class="ruby-identifier">getch</span>())
512
+ <span class="ruby-identifier">name</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
513
+ <span class="ruby-keyword kw">end</span>
514
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">empty?</span>
515
+ <span class="ruby-ivar">@error</span> = <span class="ruby-identifier">:invalid_char</span>
516
+ <span class="ruby-ivar">@value</span> = <span class="ruby-value str">'@'</span>
517
+ <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@token</span> = <span class="ruby-identifier">:error</span>
518
+ <span class="ruby-keyword kw">end</span>
519
+ <span class="ruby-ivar">@value</span> = <span class="ruby-value str">'@'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">name</span>
520
+ <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@token</span> = <span class="ruby-identifier">:command</span>
474
521
  <span class="ruby-keyword kw">end</span>
475
- <span class="ruby-ivar">@value</span> = <span class="ruby-value str">'#'</span>
476
- <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@token</span> = <span class="ruby-value">?#</span>
477
- <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt">#if</span>
478
-
479
- <span class="ruby-comment cmt">## '@import &quot;foo.plogic&quot;'</span>
480
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value">?@</span>
481
- <span class="ruby-ivar">@value</span> = <span class="ruby-value str">'@'</span>
482
- <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@token</span> = <span class="ruby-value">?@</span>
483
522
  <span class="ruby-keyword kw">end</span>
484
523
 
485
524
  <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>