kwartz 3.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 (169) hide show
  1. data/COPYING +340 -0
  2. data/ChangeLog +103 -0
  3. data/README.txt +37 -0
  4. data/bin/kwartz +12 -0
  5. data/doc-api/classes/Kwartz.html +218 -0
  6. data/doc-api/classes/Kwartz/Assertion.html +140 -0
  7. data/doc-api/classes/Kwartz/AssertionError.html +148 -0
  8. data/doc-api/classes/Kwartz/AttrInfo.html +320 -0
  9. data/doc-api/classes/Kwartz/BaseError.html +206 -0
  10. data/doc-api/classes/Kwartz/BaseTranslator.html +331 -0
  11. data/doc-api/classes/Kwartz/CharacterType.html +212 -0
  12. data/doc-api/classes/Kwartz/CommandOptionError.html +154 -0
  13. data/doc-api/classes/Kwartz/CommandOptions.html +374 -0
  14. data/doc-api/classes/Kwartz/Config.html +150 -0
  15. data/doc-api/classes/Kwartz/ConvertError.html +191 -0
  16. data/doc-api/classes/Kwartz/Converter.html +252 -0
  17. data/doc-api/classes/Kwartz/CssStyleParser.html +483 -0
  18. data/doc-api/classes/Kwartz/DocumentRuleset.html +369 -0
  19. data/doc-api/classes/Kwartz/ElementExpander.html +325 -0
  20. data/doc-api/classes/Kwartz/ElementInfo.html +312 -0
  21. data/doc-api/classes/Kwartz/ElementRuleset.html +582 -0
  22. data/doc-api/classes/Kwartz/EperlHandler.html +338 -0
  23. data/doc-api/classes/Kwartz/EperlTranslator.html +167 -0
  24. data/doc-api/classes/Kwartz/ErubisHandler.html +113 -0
  25. data/doc-api/classes/Kwartz/ErubisTranslator.html +168 -0
  26. data/doc-api/classes/Kwartz/ErubyHandler.html +337 -0
  27. data/doc-api/classes/Kwartz/ErubyTranslator.html +167 -0
  28. data/doc-api/classes/Kwartz/ExpandStatement.html +227 -0
  29. data/doc-api/classes/Kwartz/Expression.html +119 -0
  30. data/doc-api/classes/Kwartz/Handler.html +558 -0
  31. data/doc-api/classes/Kwartz/JstlHandler.html +657 -0
  32. data/doc-api/classes/Kwartz/JstlTranslator.html +226 -0
  33. data/doc-api/classes/Kwartz/KwartzError.html +146 -0
  34. data/doc-api/classes/Kwartz/Main.html +384 -0
  35. data/doc-api/classes/Kwartz/NativeExpression.html +236 -0
  36. data/doc-api/classes/Kwartz/NativeStatement.html +254 -0
  37. data/doc-api/classes/Kwartz/Node.html +156 -0
  38. data/doc-api/classes/Kwartz/ParseError.html +148 -0
  39. data/doc-api/classes/Kwartz/PhpHandler.html +333 -0
  40. data/doc-api/classes/Kwartz/PhpTranslator.html +194 -0
  41. data/doc-api/classes/Kwartz/PresentationLogicParser.html +830 -0
  42. data/doc-api/classes/Kwartz/PrintStatement.html +221 -0
  43. data/doc-api/classes/Kwartz/RailsHandler.html +587 -0
  44. data/doc-api/classes/Kwartz/RailsTranslator.html +167 -0
  45. data/doc-api/classes/Kwartz/RubyStyleParser.html +558 -0
  46. data/doc-api/classes/Kwartz/Ruleset.html +117 -0
  47. data/doc-api/classes/Kwartz/Statement.html +119 -0
  48. data/doc-api/classes/Kwartz/StrutsTranslator.html +190 -0
  49. data/doc-api/classes/Kwartz/TagInfo.html +314 -0
  50. data/doc-api/classes/Kwartz/TextConverter.html +270 -0
  51. data/doc-api/classes/Kwartz/Translator.html +318 -0
  52. data/doc-api/classes/Test.html +107 -0
  53. data/doc-api/classes/Test/Unit.html +101 -0
  54. data/doc-api/created.rid +1 -0
  55. data/doc-api/files/__/README_txt.html +150 -0
  56. data/doc-api/files/kwartz/assert_rb.html +114 -0
  57. data/doc-api/files/kwartz/binding/eperl_rb.html +116 -0
  58. data/doc-api/files/kwartz/binding/erubis_rb.html +116 -0
  59. data/doc-api/files/kwartz/binding/eruby_rb.html +115 -0
  60. data/doc-api/files/kwartz/binding/jstl_rb.html +116 -0
  61. data/doc-api/files/kwartz/binding/php_rb.html +116 -0
  62. data/doc-api/files/kwartz/binding/rails_rb.html +115 -0
  63. data/doc-api/files/kwartz/binding/struts_rb.html +117 -0
  64. data/doc-api/files/kwartz/config_rb.html +107 -0
  65. data/doc-api/files/kwartz/converter_rb.html +119 -0
  66. data/doc-api/files/kwartz/error_rb.html +107 -0
  67. data/doc-api/files/kwartz/main_rb.html +124 -0
  68. data/doc-api/files/kwartz/node_rb.html +114 -0
  69. data/doc-api/files/kwartz/parser_rb.html +117 -0
  70. data/doc-api/files/kwartz/translator_rb.html +115 -0
  71. data/doc-api/files/kwartz/util/assert-text-equal_rb.html +115 -0
  72. data/doc-api/files/kwartz/util/testcase-helper_rb.html +115 -0
  73. data/doc-api/files/kwartz_rb.html +120 -0
  74. data/doc-api/fr_class_index.html +75 -0
  75. data/doc-api/fr_file_index.html +45 -0
  76. data/doc-api/fr_method_index.html +216 -0
  77. data/doc-api/index.html +24 -0
  78. data/doc-api/rdoc-style.css +208 -0
  79. data/doc/docstyle.css +188 -0
  80. data/doc/p-pattern.html +1207 -0
  81. data/doc/reference.html +3396 -0
  82. data/doc/users-guide.html +1670 -0
  83. data/examples/breadcrumbs1/Makefile +15 -0
  84. data/examples/breadcrumbs1/breadcrumbs.eruby.plogic +27 -0
  85. data/examples/breadcrumbs1/breadcrumbs.html +12 -0
  86. data/examples/breadcrumbs1/breadcrumbs.jstl.plogic +28 -0
  87. data/examples/breadcrumbs1/breadcrumbs.php.plogic +26 -0
  88. data/examples/breadcrumbs1/main.php +12 -0
  89. data/examples/breadcrumbs1/main.rb +12 -0
  90. data/examples/breadcrumbs2/Makefile +15 -0
  91. data/examples/breadcrumbs2/breadcrumbs.eruby.plogic +22 -0
  92. data/examples/breadcrumbs2/breadcrumbs.html +14 -0
  93. data/examples/breadcrumbs2/breadcrumbs.jstl.plogic +24 -0
  94. data/examples/breadcrumbs2/breadcrumbs.php.plogic +23 -0
  95. data/examples/breadcrumbs2/main.php +12 -0
  96. data/examples/breadcrumbs2/main.rb +12 -0
  97. data/examples/pagelayout/Makefile +47 -0
  98. data/examples/pagelayout/content.eruby.plogic +44 -0
  99. data/examples/pagelayout/content.jstl.plogic +36 -0
  100. data/examples/pagelayout/content.php.plogic +37 -0
  101. data/examples/pagelayout/content1.html +36 -0
  102. data/examples/pagelayout/content2.html +29 -0
  103. data/examples/pagelayout/design.css +40 -0
  104. data/examples/pagelayout/layout.html +50 -0
  105. data/examples/pagelayout/main.php +55 -0
  106. data/examples/pagelayout/main.rb +77 -0
  107. data/examples/pagelayout/menu.eruby.plogic +14 -0
  108. data/examples/pagelayout/menu.html +13 -0
  109. data/examples/pagelayout/menu.jstl.plogic +14 -0
  110. data/examples/pagelayout/menu.php.plogic +14 -0
  111. data/examples/rails1/Makefile +36 -0
  112. data/examples/rails1/README +19 -0
  113. data/examples/rails1/application_helper.rb +31 -0
  114. data/examples/rails1/edit.html +28 -0
  115. data/examples/rails1/edit.plogic +10 -0
  116. data/examples/rails1/form.html +52 -0
  117. data/examples/rails1/form.plogic +33 -0
  118. data/examples/rails1/layout.plogic +15 -0
  119. data/examples/rails1/link_to.plogic +19 -0
  120. data/examples/rails1/list.html +48 -0
  121. data/examples/rails1/list.plogic +28 -0
  122. data/examples/rails1/new.html +27 -0
  123. data/examples/rails1/new.plogic +10 -0
  124. data/examples/rails1/reader.plogic +29 -0
  125. data/examples/rails1/show.html +40 -0
  126. data/examples/rails1/show.plogic +4 -0
  127. data/examples/rails1/writer.plogic +8 -0
  128. data/examples/table1/Makefile +15 -0
  129. data/examples/table1/main.php +11 -0
  130. data/examples/table1/main.rb +11 -0
  131. data/examples/table1/table1.eruby.plogic +21 -0
  132. data/examples/table1/table1.html +16 -0
  133. data/examples/table1/table1.jstl.plogic +21 -0
  134. data/examples/table1/table1.php.plogic +22 -0
  135. data/kwartz.gemspec +55 -0
  136. data/lib/kwartz.rb +13 -0
  137. data/lib/kwartz/assert.rb +31 -0
  138. data/lib/kwartz/binding/eperl.rb +166 -0
  139. data/lib/kwartz/binding/erubis.rb +61 -0
  140. data/lib/kwartz/binding/eruby.rb +164 -0
  141. data/lib/kwartz/binding/jstl.rb +334 -0
  142. data/lib/kwartz/binding/php.rb +167 -0
  143. data/lib/kwartz/binding/rails.rb +295 -0
  144. data/lib/kwartz/binding/struts.rb +109 -0
  145. data/lib/kwartz/config.rb +28 -0
  146. data/lib/kwartz/converter.rb +920 -0
  147. data/lib/kwartz/error.rb +41 -0
  148. data/lib/kwartz/main.rb +464 -0
  149. data/lib/kwartz/node.rb +454 -0
  150. data/lib/kwartz/parser.rb +903 -0
  151. data/lib/kwartz/translator.rb +153 -0
  152. data/lib/kwartz/util/assert-text-equal.rb +44 -0
  153. data/lib/kwartz/util/testcase-helper.rb +112 -0
  154. data/setup.rb +1331 -0
  155. data/test/test-compile.rb +36 -0
  156. data/test/test-compile.yaml +178 -0
  157. data/test/test-converter.rb +34 -0
  158. data/test/test-converter.yaml +127 -0
  159. data/test/test-directives.rb +32 -0
  160. data/test/test-directives.yaml +1411 -0
  161. data/test/test-main.rb +464 -0
  162. data/test/test-parser.rb +54 -0
  163. data/test/test-parser.yaml +394 -0
  164. data/test/test-rails.rb +28 -0
  165. data/test/test-rails.yaml +301 -0
  166. data/test/test-ruleset.rb +36 -0
  167. data/test/test-ruleset.yaml +804 -0
  168. data/test/test.rb +44 -0
  169. metadata +236 -0
@@ -0,0 +1,454 @@
1
+ ####
2
+ #### $Rev: 117 $
3
+ #### $Release: 3.0.0 $
4
+ #### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
5
+ ####
6
+
7
+ require 'abstract'
8
+
9
+
10
+ module Kwartz
11
+
12
+
13
+
14
+ ##
15
+ ## .[abstract] abstract class for Expression and Statement
16
+ ##
17
+ class Node
18
+
19
+
20
+ ##
21
+ ## .[abstract] accept visitor
22
+ ##
23
+ def accept(translator)
24
+ not_implemented
25
+ end
26
+
27
+
28
+ end
29
+
30
+
31
+
32
+ ##
33
+ ## .[abstract] expression
34
+ ##
35
+ class Expression < Node
36
+ end
37
+
38
+
39
+
40
+ ##
41
+ ## represents expression in target language code
42
+ ##
43
+ class NativeExpression < Expression
44
+
45
+
46
+ def initialize(code, escape=nil)
47
+ @code = code
48
+ @escape = escape unless escape == nil
49
+ end
50
+ attr_reader :code
51
+ attr_accessor :escape
52
+
53
+ alias escape? escape
54
+
55
+
56
+ def _inspect(indent=0)
57
+ return @code
58
+ end
59
+
60
+
61
+ def accept(translator)
62
+ translator.translate_native_expr(self)
63
+ end
64
+
65
+
66
+ end
67
+
68
+
69
+ #--
70
+ # ##
71
+ # ## represents normal text
72
+ # ##
73
+ # class TextExpression < Expression
74
+ #
75
+ #
76
+ # def initialize(text)
77
+ # @text = text
78
+ # end
79
+ #
80
+ #
81
+ # attr_accessor :text
82
+ #
83
+ #
84
+ # def _inspect(indent=0)
85
+ # return @text
86
+ # end
87
+ #
88
+ #
89
+ # def accept(translator)
90
+ # translator.translate_text_expr(self)
91
+ # end
92
+ #
93
+ #
94
+ # end
95
+ #++
96
+
97
+
98
+ ##
99
+ ## .[abstract] statement class
100
+ ##
101
+ class Statement < Node
102
+ end
103
+
104
+
105
+
106
+ ##
107
+ ## represents statement in target language code
108
+ ##
109
+ class NativeStatement < Statement
110
+
111
+
112
+ def initialize(code, kind=nil)
113
+ @code = code
114
+ @kind = kind
115
+ end
116
+ attr_reader :code, :kind
117
+ attr_accessor :no_newline
118
+
119
+
120
+ def self.new_without_newline(code, kind=nil)
121
+ stmt = self.new(code, kind)
122
+ stmt.no_newline = true
123
+ return stmt
124
+ end
125
+
126
+
127
+ def _inspect(indent=0)
128
+ return @code.inspect
129
+ end
130
+
131
+
132
+ def accept(translator)
133
+ translator.translate_native_stmt(self)
134
+ end
135
+
136
+
137
+ end
138
+
139
+
140
+
141
+ ##
142
+ ## represents _stag, _cont, _etag, _elem, _element(name), and _content(name)
143
+ ##
144
+ class ExpandStatement < Statement
145
+
146
+
147
+ def initialize(kind, name)
148
+ @kind = kind # symbol
149
+ @name = name # string
150
+ end
151
+ attr_accessor :kind
152
+ attr_reader :name
153
+
154
+
155
+ def _inspect(indent=0)
156
+ if @kind == :element || @kind == :content
157
+ return "_#{@kind}(#{@name.inspect})"
158
+ else
159
+ return "_#{@kind}"
160
+ end
161
+ end
162
+
163
+
164
+ def accept(translator)
165
+ assert
166
+ end
167
+
168
+
169
+ end
170
+
171
+
172
+
173
+ ##
174
+ ## represents print statement for String and NativeExpression
175
+ ##
176
+ class PrintStatement < Statement
177
+
178
+
179
+ def initialize(args)
180
+ @args = args # array
181
+ end
182
+ attr_reader :args
183
+
184
+
185
+ def _inspect(indent=0)
186
+ list = @args.collect { |arg|
187
+ arg.is_a?(NativeExpression) ? "<%=#{arg.code}%>" : arg.inspect
188
+ }
189
+ return "[ " + list.join(', ') + "]"
190
+ end
191
+
192
+
193
+ def accept(translator)
194
+ translator.translate_print_stmt(self)
195
+ end
196
+
197
+
198
+ end
199
+
200
+
201
+
202
+ ##
203
+ ## .[abstract] ruleset entry in presentation logic file
204
+ ##
205
+ class Ruleset
206
+ end
207
+
208
+
209
+
210
+ ##
211
+ ## represents '#name { ... }' entry in presentation logic file
212
+ ##
213
+ class ElementRuleset < Ruleset
214
+
215
+
216
+ def initialize(name)
217
+ @name = name
218
+ end
219
+
220
+
221
+ attr_accessor :name, :stag, :cont, :etag, :elem
222
+ attr_accessor :value, :attrs, :append, :remove, :tagname, :logic
223
+
224
+
225
+ def set_stag(str, escape_flag=nil)
226
+ @stag = NativeExpression.new(str, escape_flag)
227
+ end
228
+
229
+
230
+ def set_cont(str, escape_flag=nil)
231
+ @cont = NativeExpression.new(str, escape_flag)
232
+ end
233
+
234
+
235
+ def set_etag(str, escape_flag=nil)
236
+ @etag = NativeExpression.new(str, escape_flag)
237
+ end
238
+
239
+
240
+ def set_elem(str, escape_flag=nil)
241
+ @elem = NativeExpression.new(str, escape_flag)
242
+ end
243
+
244
+
245
+ def set_value(str, escape_flag=nil)
246
+ set_cont(str, escape_flag)
247
+ end
248
+
249
+
250
+ def set_attrs(hash, escape_flag=nil)
251
+ hash.each do |name, expr_str|
252
+ next if !expr_str || expr_str.empty?
253
+ @attrs ||= {}
254
+ @attrs[name] = NativeExpression.new(expr_str, escape_flag)
255
+ end if hash
256
+ end
257
+
258
+
259
+ def set_append(list, escape_flag=nil)
260
+ list.each do |expr_str|
261
+ next if !expr_str || expr_str.empty?
262
+ @append ||= []
263
+ @append << NativeExpression.new(expr_str, escape_flag)
264
+ end
265
+ end
266
+
267
+
268
+ def set_remove(list)
269
+ @remove = list if list
270
+ end
271
+
272
+
273
+ def set_tagname(str)
274
+ @tagname = str if str
275
+ end
276
+
277
+
278
+ def set_logic(logic_str)
279
+ return unless logic_str
280
+ stmt_list = []
281
+ logic_str.each_line do |line|
282
+ if line =~ /^\s*_(stag|cont|etag|elem)(?:\(\))?;?\s*(?:\#.*)?$/
283
+ kind = $1
284
+ stmt_list << ExpandStatement.new(kind.intern, @name)
285
+ elsif line =~ /^\s*(_(element|content)([()'"\w\s]*));?\s*(?:\#.*)?$/
286
+ str, kind, arg = $1, $2, $3
287
+ arg.strip!
288
+ if arg =~ /\A\((.*)\)\z/ then arg = $1 end
289
+ if arg.empty?
290
+ raise parse_error("'#{str}': element name required.", nil)
291
+ end
292
+ case arg
293
+ when /\A"(.*)"\z/ ; name = $1
294
+ when /\A'(.*)'\z/ ; name = $1
295
+ when /\A(\w+)\z/ ; name = $1
296
+ else
297
+ raise parse_error("'#{str}': invalid pattern.", nil)
298
+ end
299
+ unless name =~ /\A\w+\z/
300
+ raise parse_error("'#{name}': invalid #{kind} name.", nil)
301
+ end
302
+ stmt_list << ExpandStatement.new(kind.intern, name)
303
+ #elsif line =~ /^\s*print(?:\s+(\S+)|\((.+)\))\s*;?\s*(?:\#.*)?$/
304
+ elsif line =~ /^\s*print(?:\s+(.*?)|\((.+)\))\s*;?\s*$/
305
+ arg = $1 || $2
306
+ stmt_list << PrintStatement.new([NativeExpression.new(arg)])
307
+ else
308
+ stmt_list << NativeStatement.new(line.chomp, nil)
309
+ end
310
+ end
311
+ @logic = stmt_list
312
+ end
313
+
314
+
315
+ def _inspect(indent=0)
316
+ space = ' ' * indent
317
+ sb = []
318
+ sb << space << "name: #{@name.inspect}\n"
319
+ #sb << space << "value: #{@value == nil ? '' : @value.inspect}\n"
320
+ sb << space << "stag: #{@stag.code.inspect}\n" unless @stag.nil?
321
+ sb << space << "cont: #{@cont.code.inspect}\n" unless @cont.nil?
322
+ sb << space << "etag: #{@etag.code.inspect}\n" unless @etag.nil?
323
+ sb << space << "elem: #{@elem.code.inspect}\n" unless @elem.nil?
324
+ #
325
+ sb << space << "attrs:\n" if @attrs
326
+ @attrs.keys.sort.each do |key|
327
+ val = @attrs[key]
328
+ sb << space << " - name: #{key.inspect}\n"
329
+ sb << space << " value: #{val.code.inspect}\n"
330
+ end if @attrs
331
+ #
332
+ sb << space << "append:\n" if @append
333
+ @append.each do |expr|
334
+ sb << space << " - #{expr.code.inspect}\n"
335
+ end if @append
336
+ #
337
+ sb << space << "remove:\n" if @remove
338
+ @remove.each do |name|
339
+ sb << space << " - #{name.inspect}\n"
340
+ end if @remove
341
+ #
342
+ sb << space << "tagname: #{@tagname.inspect}\n" unless @tagname.nil?
343
+ #
344
+ sb << space << "logic:\n" if @logic
345
+ @logic.each do |stmt|
346
+ sb << space << " - " << stmt._inspect() << "\n"
347
+ end if @logic
348
+ #
349
+ return sb.join
350
+ end
351
+
352
+
353
+ protected
354
+
355
+
356
+ def parse_error(message, linenum)
357
+ return ParseError.new(message, linenum, nil)
358
+ end
359
+
360
+
361
+ end #class
362
+
363
+
364
+
365
+ ##
366
+ ## represents '#DOUMENT { ... }' entry in presentation logic file
367
+ ##
368
+ class DocumentRuleset < Ruleset
369
+
370
+
371
+ def initialize(name='DOCUMENT')
372
+ @name = name
373
+ end
374
+ attr_accessor :name, :global, :local, :fixture, :begin, :end #:before, :after
375
+
376
+ def set_global(list)
377
+ @global = list if list
378
+ end
379
+
380
+ def set_local(list)
381
+ @local = list if list
382
+ end
383
+
384
+ def set_fixture(str)
385
+ @fixture = NativeStatement.new(str.chomp, nil) if str
386
+ end
387
+
388
+ def set_begin(str)
389
+ stmt_list = _parse_stmts(str)
390
+ @begin = stmt_list
391
+ end
392
+
393
+ def set_end(str)
394
+ stmt_list = _parse_stmts(str)
395
+ @end = stmt_list
396
+ end
397
+
398
+ private
399
+
400
+ def _parse_stmts(str)
401
+ return unless str
402
+ stmt_list = []
403
+ str.each_line do |line|
404
+ #if line =~ /^\s*print(?:\s+(.*?)|\((.+)\))\s*;?\s*(?:\#.*)?$/
405
+ if line =~ /^\s*print(?:\s+(.*?)|\((.+)\))\s*;?\s*$/
406
+ arg = $1 || $2
407
+ stmt_list << PrintStatement.new([NativeExpression.new(arg)])
408
+ else
409
+ stmt_list << NativeStatement.new(line.chomp, nil)
410
+ end
411
+ end
412
+ return stmt_list
413
+ end
414
+
415
+ public
416
+
417
+ def _inspect(indent=0)
418
+ space = ' ' * indent
419
+ sb = []
420
+ sb << space << "name: #{@name.inspect}\n"
421
+ if @global
422
+ sb << space << "global:\n"
423
+ @global.each do |item|
424
+ sb << space << " - #{item}\n"
425
+ end
426
+ end
427
+ if @local
428
+ sb << space << "local:\n"
429
+ @local.each do |item|
430
+ sb << space << " - #{item}\n"
431
+ end
432
+ end
433
+ if @begin
434
+ sb << space << "begin:\n"
435
+ @begin.each do |stmt|
436
+ sb << space << " - #{stmt._inspect}\n"
437
+ end
438
+ end
439
+ if @end
440
+ sb << space << "end:\n"
441
+ @end.each do |stmt|
442
+ sb << space << " - #{stmt._inspect}\n"
443
+ end
444
+ end
445
+ #
446
+ return sb.join
447
+ end
448
+
449
+
450
+ end #class
451
+
452
+
453
+
454
+ end #module