kwartz 3.0.0 → 3.1.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.
- data/ChangeLog +36 -1
- data/LGPL +504 -0
- data/README.txt +16 -2
- data/bin/kwartz +1 -1
- data/doc-api/classes/Kwartz.html +47 -1
- data/doc-api/classes/Kwartz/Assertion.html +6 -6
- data/doc-api/classes/Kwartz/AssertionError.html +6 -6
- data/doc-api/classes/Kwartz/AttrInfo.html +42 -42
- data/doc-api/classes/Kwartz/BaseError.html +12 -12
- data/doc-api/classes/Kwartz/BaseTranslator.html +210 -43
- data/doc-api/classes/Kwartz/CharacterType.html +24 -24
- data/doc-api/classes/Kwartz/CommandOptionError.html +7 -7
- data/doc-api/classes/Kwartz/CommandOptions.html +49 -49
- data/doc-api/classes/Kwartz/Config.html +6 -1
- data/doc-api/classes/Kwartz/ConvertError.html +14 -14
- data/doc-api/classes/Kwartz/Converter.html +31 -30
- data/doc-api/classes/Kwartz/CssStyleParser.html +79 -57
- data/doc-api/classes/Kwartz/Defun.html +313 -0
- data/doc-api/classes/Kwartz/DocumentRuleset.html +58 -58
- data/doc-api/classes/Kwartz/ElementExpander.html +32 -32
- data/doc-api/classes/Kwartz/ElementInfo.html +29 -29
- data/doc-api/classes/Kwartz/ElementRuleset.html +126 -96
- data/doc-api/classes/Kwartz/EperlHandler.html +108 -84
- data/doc-api/classes/Kwartz/EperlTranslator.html +7 -7
- data/doc-api/classes/Kwartz/ErubisHandler.html +2 -2
- data/doc-api/classes/Kwartz/ErubisTranslator.html +8 -8
- data/doc-api/classes/Kwartz/ErubyHandler.html +2 -220
- data/doc-api/classes/Kwartz/ErubyTranslator.html +7 -7
- data/doc-api/classes/Kwartz/ExpandStatement.html +20 -20
- data/doc-api/classes/Kwartz/Handler.html +122 -117
- data/doc-api/classes/Kwartz/HandlerArgument.html +215 -0
- data/doc-api/classes/Kwartz/Helper.html +112 -0
- data/doc-api/classes/Kwartz/Helper/ActionViewHelper.html +221 -0
- data/doc-api/classes/Kwartz/Helper/RailsTemplate.html +630 -0
- data/doc-api/classes/Kwartz/JstlHandler.html +208 -193
- data/doc-api/classes/Kwartz/JstlTranslator.html +15 -15
- data/doc-api/classes/Kwartz/KwartzError.html +6 -6
- data/doc-api/classes/Kwartz/Main.html +39 -23
- data/doc-api/classes/Kwartz/NativeExpression.html +18 -18
- data/doc-api/classes/Kwartz/NativeStatement.html +25 -25
- data/doc-api/classes/Kwartz/Node.html +6 -6
- data/doc-api/classes/Kwartz/PIErubisHandler.html +113 -0
- data/doc-api/classes/Kwartz/PIErubisTranslator.html +200 -0
- data/doc-api/classes/Kwartz/ParseError.html +6 -6
- data/doc-api/classes/Kwartz/PhpHandler.html +102 -83
- data/doc-api/classes/Kwartz/PhpTranslator.html +14 -14
- data/doc-api/classes/Kwartz/PresentationLogicParser.html +136 -128
- data/doc-api/classes/Kwartz/PrintStatement.html +19 -19
- data/doc-api/classes/Kwartz/RailsHandler.html +121 -118
- data/doc-api/classes/Kwartz/RailsTranslator.html +7 -7
- data/doc-api/classes/Kwartz/RubyHandler.html +349 -0
- data/doc-api/classes/Kwartz/RubyStyleParser.html +85 -85
- data/doc-api/classes/Kwartz/RubyTranslator.html +218 -0
- data/doc-api/classes/Kwartz/StatementHelper.html +479 -0
- data/doc-api/classes/Kwartz/StrutsTranslator.html +12 -12
- data/doc-api/classes/Kwartz/TagInfo.html +28 -28
- data/doc-api/classes/Kwartz/TextConverter.html +28 -28
- data/doc-api/classes/Kwartz/Translator.html +42 -42
- data/doc-api/classes/Kwartz/Util.html +284 -0
- data/doc-api/created.rid +1 -1
- data/doc-api/files/__/README_txt.html +30 -3
- data/doc-api/files/kwartz/assert_rb.html +1 -1
- data/doc-api/files/kwartz/binding/eperl_rb.html +2 -2
- data/doc-api/files/kwartz/binding/erubis_rb.html +3 -3
- data/doc-api/files/kwartz/binding/eruby_rb.html +3 -2
- data/doc-api/files/kwartz/binding/jstl_rb.html +2 -2
- data/doc-api/files/kwartz/binding/php_rb.html +2 -2
- data/doc-api/files/kwartz/binding/pierubis_rb.html +116 -0
- data/doc-api/files/kwartz/binding/rails_rb.html +2 -2
- data/doc-api/files/kwartz/binding/ruby_rb.html +115 -0
- data/doc-api/files/kwartz/binding/struts_rb.html +1 -1
- data/doc-api/files/kwartz/config_rb.html +2 -2
- data/doc-api/files/kwartz/converter_rb.html +3 -2
- data/doc-api/files/kwartz/defun_rb.html +116 -0
- data/doc-api/files/kwartz/error_rb.html +1 -1
- data/doc-api/files/kwartz/helper/rails_rb.html +123 -0
- data/doc-api/files/kwartz/main_rb.html +5 -2
- data/doc-api/files/kwartz/node_rb.html +2 -2
- data/doc-api/files/kwartz/parser_rb.html +2 -2
- data/doc-api/files/kwartz/translator_rb.html +2 -2
- data/doc-api/files/kwartz/util/assert-text-equal_rb.html +1 -1
- data/doc-api/files/kwartz/util/testcase-helper_rb.html +2 -2
- data/doc-api/files/kwartz/util_rb.html +107 -0
- data/doc-api/files/kwartz_rb.html +3 -2
- data/doc-api/fr_class_index.html +11 -0
- data/doc-api/fr_file_index.html +5 -0
- data/doc-api/fr_method_index.html +242 -190
- data/doc/p-pattern.html +94 -94
- data/doc/reference.html +847 -612
- data/doc/users-guide.html +744 -241
- data/examples/rails1/README +2 -2
- data/examples/rails1/application_helper.rb +2 -27
- data/examples/rails1/link_to.plogic +5 -5
- data/examples/rails1/list.plogic +2 -2
- data/examples/rails2/app/controllers/application.rb +14 -0
- data/examples/rails2/app/controllers/groups_controller.rb +47 -0
- data/examples/rails2/app/controllers/members_controller.rb +56 -0
- data/examples/rails2/app/helpers/application_helper.rb +6 -0
- data/examples/rails2/app/helpers/groups_helper.rb +2 -0
- data/examples/rails2/app/helpers/members_helper.rb +2 -0
- data/examples/rails2/app/models/group.rb +2 -0
- data/examples/rails2/app/models/member.rb +3 -0
- data/examples/rails2/app/views/groups/_form.html +30 -0
- data/examples/rails2/app/views/groups/_form.plogic +11 -0
- data/examples/rails2/app/views/groups/_link.plogic +19 -0
- data/examples/rails2/app/views/groups/_read.plogic +7 -0
- data/examples/rails2/app/views/groups/edit.cfg.yaml +2 -0
- data/examples/rails2/app/views/groups/edit.html +26 -0
- data/examples/rails2/app/views/groups/edit.plogic +9 -0
- data/examples/rails2/app/views/groups/list.html +48 -0
- data/examples/rails2/app/views/groups/list.plogic +32 -0
- data/examples/rails2/app/views/groups/new.cfg.yaml +2 -0
- data/examples/rails2/app/views/groups/new.html +27 -0
- data/examples/rails2/app/views/groups/new.plogic +9 -0
- data/examples/rails2/app/views/groups/show.html +27 -0
- data/examples/rails2/app/views/groups/show.plogic +2 -0
- data/examples/rails2/app/views/layouts/groups.html +23 -0
- data/examples/rails2/app/views/layouts/groups.plogic +11 -0
- data/examples/rails2/app/views/layouts/members.html +23 -0
- data/examples/rails2/app/views/layouts/members.plogic +11 -0
- data/examples/rails2/app/views/layouts/members2.html +24 -0
- data/examples/rails2/app/views/layouts/members2.plogic +11 -0
- data/examples/rails2/app/views/members/_form.plogic +27 -0
- data/examples/rails2/app/views/members/_link.plogic +19 -0
- data/examples/rails2/app/views/members/_read.plogic +29 -0
- data/examples/rails2/app/views/members/edit.cfg.yaml +6 -0
- data/examples/rails2/app/views/members/edit.html +27 -0
- data/examples/rails2/app/views/members/edit.plogic +10 -0
- data/examples/rails2/app/views/members/list.html +53 -0
- data/examples/rails2/app/views/members/list.plogic +32 -0
- data/examples/rails2/app/views/members/new.html +61 -0
- data/examples/rails2/app/views/members/new.plogic +17 -0
- data/examples/rails2/app/views/members/show.html +41 -0
- data/examples/rails2/app/views/members/show.plogic +3 -0
- data/examples/rails2/db/create-tables.mysql.sql +27 -0
- data/examples/rails2/db/create-tables.pgsql.sql +27 -0
- data/examples/rails2/db/insert-data.sql +21 -0
- data/examples/rails2/db/tabledef.yaml +51 -0
- data/kwartz.gemspec +4 -4
- data/lib/kwartz.rb +10 -2
- data/lib/kwartz/assert.rb +1 -1
- data/lib/kwartz/binding/eperl.rb +85 -61
- data/lib/kwartz/binding/erubis.rb +6 -8
- data/lib/kwartz/binding/eruby.rb +5 -120
- data/lib/kwartz/binding/jstl.rb +116 -101
- data/lib/kwartz/binding/php.rb +79 -60
- data/lib/kwartz/binding/pierubis.rb +58 -0
- data/lib/kwartz/binding/rails.rb +45 -42
- data/lib/kwartz/binding/ruby.rb +193 -0
- data/lib/kwartz/binding/struts.rb +1 -1
- data/lib/kwartz/config.rb +4 -3
- data/lib/kwartz/converter.rb +231 -68
- data/lib/kwartz/defun.rb +126 -0
- data/lib/kwartz/error.rb +1 -1
- data/lib/kwartz/helper/rails.rb +437 -0
- data/lib/kwartz/main.rb +30 -38
- data/lib/kwartz/node.rb +46 -31
- data/lib/kwartz/parser.rb +43 -15
- data/lib/kwartz/translator.rb +104 -6
- data/lib/kwartz/util.rb +113 -0
- data/lib/kwartz/util/assert-text-equal.rb +1 -1
- data/lib/kwartz/util/testcase-helper.rb +26 -8
- data/test/test-compile.rb +3 -3
- data/test/test-compile.yaml +135 -5
- data/test/test-converter.rb +16 -8
- data/test/test-converter.yaml +307 -76
- data/test/test-directives.rb +1 -1
- data/test/test-directives.yaml +964 -979
- data/test/test-main.rb +61 -146
- data/test/test-main.yaml +235 -0
- data/test/test-parser.rb +10 -12
- data/test/test-parser.yaml +484 -326
- data/test/test-rails.rb +1 -1
- data/test/test-rails.yaml +37 -37
- data/test/test-ruleset.rb +1 -1
- data/test/test-ruleset.yaml +34 -40
- data/test/test.rb +1 -1
- metadata +82 -3
- data/COPYING +0 -340
data/lib/kwartz/main.rb
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
###
|
|
2
|
-
### $Rev:
|
|
3
|
-
### $Release: 3.
|
|
2
|
+
### $Rev: 136 $
|
|
3
|
+
### $Release: 3.1.0 $
|
|
4
4
|
### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
|
|
5
5
|
###
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
require 'kwartz'
|
|
9
9
|
require 'kwartz/binding/eruby'
|
|
10
|
+
require 'kwartz/binding/ruby'
|
|
10
11
|
require 'kwartz/binding/php'
|
|
11
12
|
require 'kwartz/binding/eperl'
|
|
12
13
|
require 'kwartz/binding/rails'
|
|
13
14
|
require 'kwartz/binding/jstl'
|
|
14
15
|
require 'kwartz/binding/struts'
|
|
15
16
|
require 'kwartz/binding/erubis'
|
|
17
|
+
require 'kwartz/binding/pierubis'
|
|
18
|
+
require 'kwartz/util'
|
|
16
19
|
|
|
17
20
|
|
|
18
21
|
|
|
@@ -190,8 +193,10 @@ module Kwartz
|
|
|
190
193
|
[ ?D, :debug, nil ],
|
|
191
194
|
[ ?t, :untabify, nil ],
|
|
192
195
|
[ ?S, :intern, nil ],
|
|
196
|
+
[ ?N, :notext, nil ],
|
|
193
197
|
[ ?l, :lang, 'lang name' ],
|
|
194
198
|
[ ?k, :kanji, 'kanji code' ],
|
|
199
|
+
[ ?a, :action, 'action name' ],
|
|
195
200
|
[ ?r, :requires, 'library name' ],
|
|
196
201
|
[ ?p, :plogics, 'file name' ],
|
|
197
202
|
[ ?P, :pstyle, 'parser style' ],
|
|
@@ -327,8 +332,24 @@ module Kwartz
|
|
|
327
332
|
properties[:nl] ||= "\r\n"
|
|
328
333
|
end
|
|
329
334
|
translator = translator_class.new(properties)
|
|
335
|
+
if options.notext
|
|
336
|
+
translator.extend(Kwartz::NoTextEnhancer)
|
|
337
|
+
end
|
|
330
338
|
output = translator.translate(stmt_list)
|
|
331
339
|
|
|
340
|
+
## action
|
|
341
|
+
if options.action
|
|
342
|
+
case options.action
|
|
343
|
+
when 'compile'
|
|
344
|
+
# nothing
|
|
345
|
+
when 'defun'
|
|
346
|
+
basename = File.basename(pdata_filenames.first).sub(/\.\w+/, '')
|
|
347
|
+
output = Kwartz::Defun.defun(basename, output, lang, properties)
|
|
348
|
+
else
|
|
349
|
+
option_error("-#{options.chr(:action)} #{options.aciton}: invalid action.")
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
332
353
|
## load YAML file and evaluate eRuby script
|
|
333
354
|
if options.yamlfile
|
|
334
355
|
eruby_script = output
|
|
@@ -351,14 +372,14 @@ module Kwartz
|
|
|
351
372
|
raise option_error("#{s}: file not found.")
|
|
352
373
|
end
|
|
353
374
|
str = File.read(options.yamlfile)
|
|
354
|
-
str = untabify(str) if options.untabify
|
|
375
|
+
str = Kwartz::Util.untabify(str) if options.untabify
|
|
355
376
|
require 'yaml'
|
|
356
377
|
ydoc = YAML.load(str)
|
|
357
378
|
unless ydoc.is_a?(Hash)
|
|
358
379
|
s = "-#{options.chr(:yamlfile)} #{options.yamlfile}"
|
|
359
380
|
raise option_error("#{s}: not a mapping.")
|
|
360
381
|
end
|
|
361
|
-
intern_hash_keys(ydoc) if options.intern
|
|
382
|
+
Kwartz::Util.intern_hash_keys(ydoc) if options.intern
|
|
362
383
|
context = Object.new
|
|
363
384
|
ydoc.each do |key, val|
|
|
364
385
|
context.instance_variable_set("@#{key}", val)
|
|
@@ -379,12 +400,13 @@ module Kwartz
|
|
|
379
400
|
sb = []
|
|
380
401
|
sb << "kwartz - a template system which realized 'Independence of Presentation Logic'\n"
|
|
381
402
|
sb << "Usage: #{@command} [..options..] [-p plogic] file.html [file2.html ...]\n"
|
|
382
|
-
sb << " -h
|
|
403
|
+
sb << " -h, --help : help\n"
|
|
383
404
|
sb << " -v : version\n"
|
|
384
405
|
#sb << " -D : debug mode\n"
|
|
385
406
|
sb << " -e : alias of '--escape=true'\n"
|
|
386
|
-
sb << " -l lang : eruby/php/eperl/
|
|
407
|
+
sb << " -l lang : eruby/ruby/rails/php/jstl/eperl/erubis/pierubis (default 'eruby')\n"
|
|
387
408
|
sb << " -k kanji : euc/sjis/utf8 (default nil)\n"
|
|
409
|
+
sb << " -a action : compile/defun (default 'compile')\n"
|
|
388
410
|
sb << " -r library,... : require libraries\n"
|
|
389
411
|
sb << " -p plogic,... : presentation logic files\n"
|
|
390
412
|
sb << " -i pdata,... : import presentation data files\n"
|
|
@@ -394,6 +416,7 @@ module Kwartz
|
|
|
394
416
|
sb << " -f yamlfile : YAML file for context values\n"
|
|
395
417
|
sb << " -t : expand tab character in YAML file\n"
|
|
396
418
|
sb << " -S : convert mapping key from string to symbol in YAML file\n"
|
|
419
|
+
sb << " -N : print only program code (text is ignored)\n"
|
|
397
420
|
#sb << " -P style : style of presentation logic (css/ruby/yaml)\n"
|
|
398
421
|
sb << " --dattr=str : directive attribute name\n"
|
|
399
422
|
sb << " --odd=value : odd value for FOREACH/LOOP directive (default \"'odd'\")\n"
|
|
@@ -409,8 +432,7 @@ module Kwartz
|
|
|
409
432
|
|
|
410
433
|
|
|
411
434
|
def version
|
|
412
|
-
|
|
413
|
-
return v
|
|
435
|
+
return RELEASE
|
|
414
436
|
end
|
|
415
437
|
|
|
416
438
|
|
|
@@ -419,36 +441,6 @@ module Kwartz
|
|
|
419
441
|
end
|
|
420
442
|
|
|
421
443
|
|
|
422
|
-
def untabify(str, width=8)
|
|
423
|
-
sb = ''
|
|
424
|
-
str.scan(/(.*?)\t/m) do |s, |
|
|
425
|
-
len = (n = s.rindex(?\n)) ? s.length - n - 1 : s.length
|
|
426
|
-
sb << s << (" " * (width - len % width))
|
|
427
|
-
end
|
|
428
|
-
return $' ? (sb << $') : str
|
|
429
|
-
end
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
def intern_hash_keys(obj, done={})
|
|
433
|
-
return if done.key?(obj.__id__)
|
|
434
|
-
case obj
|
|
435
|
-
when Hash
|
|
436
|
-
done[obj.__id__] = obj
|
|
437
|
-
obj.keys.each do |key|
|
|
438
|
-
obj[key.intern] = obj.delete(key) if key.is_a?(String)
|
|
439
|
-
end
|
|
440
|
-
obj.values.each do |val|
|
|
441
|
-
intern_hash_keys(val, done) if val.is_a?(Hash) || val.is_a?(Array)
|
|
442
|
-
end
|
|
443
|
-
when Array
|
|
444
|
-
done[obj.__id__] = obj
|
|
445
|
-
obj.each do |val|
|
|
446
|
-
intern_hash_keys(val, done) if val.is_a?(Hash) || val.is_a?(Array)
|
|
447
|
-
end
|
|
448
|
-
end
|
|
449
|
-
end
|
|
450
|
-
|
|
451
|
-
|
|
452
444
|
end #class
|
|
453
445
|
|
|
454
446
|
|
data/lib/kwartz/node.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
####
|
|
2
|
-
#### $Rev:
|
|
3
|
-
#### $Release: 3.
|
|
2
|
+
#### $Rev: 122 $
|
|
3
|
+
#### $Release: 3.1.0 $
|
|
4
4
|
#### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
|
|
5
5
|
####
|
|
6
6
|
|
|
@@ -125,7 +125,7 @@ module Kwartz
|
|
|
125
125
|
|
|
126
126
|
|
|
127
127
|
def _inspect(indent=0)
|
|
128
|
-
return @code
|
|
128
|
+
return "<%#{@code}%>\n"
|
|
129
129
|
end
|
|
130
130
|
|
|
131
131
|
|
|
@@ -154,9 +154,9 @@ module Kwartz
|
|
|
154
154
|
|
|
155
155
|
def _inspect(indent=0)
|
|
156
156
|
if @kind == :element || @kind == :content
|
|
157
|
-
return "_#{@kind}(#{@name
|
|
157
|
+
return "_#{@kind}(#{@name})\n"
|
|
158
158
|
else
|
|
159
|
-
return "_#{@kind}"
|
|
159
|
+
return "_#{@kind}\n"
|
|
160
160
|
end
|
|
161
161
|
end
|
|
162
162
|
|
|
@@ -186,7 +186,7 @@ module Kwartz
|
|
|
186
186
|
list = @args.collect { |arg|
|
|
187
187
|
arg.is_a?(NativeExpression) ? "<%=#{arg.code}%>" : arg.inspect
|
|
188
188
|
}
|
|
189
|
-
return "
|
|
189
|
+
return "print(" + list.join(', ') + ")\n"
|
|
190
190
|
end
|
|
191
191
|
|
|
192
192
|
|
|
@@ -312,38 +312,49 @@ module Kwartz
|
|
|
312
312
|
end
|
|
313
313
|
|
|
314
314
|
|
|
315
|
+
def duplicate(name)
|
|
316
|
+
ruleset = dup()
|
|
317
|
+
ruleset.name = name
|
|
318
|
+
ruleset.attrs = @attrs.dup() if @attrs
|
|
319
|
+
ruleset.append = @append.dup() if @append
|
|
320
|
+
ruleset.remove = @remove.dup() if @remove
|
|
321
|
+
ruleset.logic = @logic.dup() if @logic
|
|
322
|
+
return ruleset
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
|
|
315
326
|
def _inspect(indent=0)
|
|
316
327
|
space = ' ' * indent
|
|
317
328
|
sb = []
|
|
318
|
-
sb << space << "name: #{@name
|
|
319
|
-
#sb << space << "value: #{@value == nil ? '' : @value
|
|
320
|
-
sb << space << "stag: #{@stag.code
|
|
321
|
-
sb << space << "cont: #{@cont.code
|
|
322
|
-
sb << space << "etag: #{@etag.code
|
|
323
|
-
sb << space << "elem: #{@elem.code
|
|
329
|
+
sb << space << "- name: #{@name}\n"
|
|
330
|
+
#sb << space << " value: #{@value == nil ? '' : @value}\n"
|
|
331
|
+
sb << space << " stag: #{@stag.code}\n" unless @stag.nil?
|
|
332
|
+
sb << space << " cont: #{@cont.code}\n" unless @cont.nil?
|
|
333
|
+
sb << space << " etag: #{@etag.code}\n" unless @etag.nil?
|
|
334
|
+
sb << space << " elem: #{@elem.code}\n" unless @elem.nil?
|
|
324
335
|
#
|
|
325
|
-
sb << space << "attrs:\n" if @attrs
|
|
336
|
+
sb << space << " attrs:\n" if @attrs
|
|
326
337
|
@attrs.keys.sort.each do |key|
|
|
327
338
|
val = @attrs[key]
|
|
328
|
-
sb << space << "
|
|
329
|
-
sb << space << "
|
|
339
|
+
sb << space << " - name: #{key}\n"
|
|
340
|
+
sb << space << " value: #{val.code}\n"
|
|
330
341
|
end if @attrs
|
|
331
342
|
#
|
|
332
|
-
sb << space << "append:\n" if @append
|
|
343
|
+
sb << space << " append:\n" if @append
|
|
333
344
|
@append.each do |expr|
|
|
334
|
-
sb << space << "
|
|
345
|
+
sb << space << " - #{expr.code}\n"
|
|
335
346
|
end if @append
|
|
336
347
|
#
|
|
337
|
-
sb << space << "remove:\n" if @remove
|
|
348
|
+
sb << space << " remove:\n" if @remove
|
|
338
349
|
@remove.each do |name|
|
|
339
|
-
sb << space << "
|
|
350
|
+
sb << space << " - #{name}\n"
|
|
340
351
|
end if @remove
|
|
341
352
|
#
|
|
342
|
-
sb << space << "tagname: #{@tagname
|
|
353
|
+
sb << space << " tagname: #{@tagname}\n" unless @tagname.nil?
|
|
343
354
|
#
|
|
344
|
-
sb << space << "logic:\n" if @logic
|
|
355
|
+
sb << space << " logic:\n" if @logic
|
|
345
356
|
@logic.each do |stmt|
|
|
346
|
-
sb << space << "
|
|
357
|
+
sb << space << " - " << stmt._inspect()
|
|
347
358
|
end if @logic
|
|
348
359
|
#
|
|
349
360
|
return sb.join
|
|
@@ -395,8 +406,10 @@ module Kwartz
|
|
|
395
406
|
@end = stmt_list
|
|
396
407
|
end
|
|
397
408
|
|
|
409
|
+
|
|
398
410
|
private
|
|
399
411
|
|
|
412
|
+
|
|
400
413
|
def _parse_stmts(str)
|
|
401
414
|
return unless str
|
|
402
415
|
stmt_list = []
|
|
@@ -412,34 +425,36 @@ module Kwartz
|
|
|
412
425
|
return stmt_list
|
|
413
426
|
end
|
|
414
427
|
|
|
428
|
+
|
|
415
429
|
public
|
|
416
430
|
|
|
431
|
+
|
|
417
432
|
def _inspect(indent=0)
|
|
418
433
|
space = ' ' * indent
|
|
419
434
|
sb = []
|
|
420
|
-
sb << space << "name: #{@name
|
|
435
|
+
sb << space << "- name: #{@name}\n"
|
|
421
436
|
if @global
|
|
422
|
-
sb << space << "global:\n"
|
|
437
|
+
sb << space << " global:\n"
|
|
423
438
|
@global.each do |item|
|
|
424
|
-
sb << space << "
|
|
439
|
+
sb << space << " - #{item}\n"
|
|
425
440
|
end
|
|
426
441
|
end
|
|
427
442
|
if @local
|
|
428
|
-
sb << space << "local:\n"
|
|
443
|
+
sb << space << " local:\n"
|
|
429
444
|
@local.each do |item|
|
|
430
|
-
sb << space << "
|
|
445
|
+
sb << space << " - #{item}\n"
|
|
431
446
|
end
|
|
432
447
|
end
|
|
433
448
|
if @begin
|
|
434
|
-
sb << space << "begin:\n"
|
|
449
|
+
sb << space << " begin:\n"
|
|
435
450
|
@begin.each do |stmt|
|
|
436
|
-
sb << space << "
|
|
451
|
+
sb << space << " - #{stmt._inspect}"
|
|
437
452
|
end
|
|
438
453
|
end
|
|
439
454
|
if @end
|
|
440
|
-
sb << space << "end:\n"
|
|
455
|
+
sb << space << " end:\n"
|
|
441
456
|
@end.each do |stmt|
|
|
442
|
-
sb << space << "
|
|
457
|
+
sb << space << " - #{stmt._inspect}"
|
|
443
458
|
end
|
|
444
459
|
end
|
|
445
460
|
#
|
data/lib/kwartz/parser.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
###
|
|
2
|
-
### $Rev:
|
|
3
|
-
### $Release: 3.
|
|
2
|
+
### $Rev: 124 $
|
|
3
|
+
### $Release: 3.1.0 $
|
|
4
4
|
### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
|
|
5
5
|
###
|
|
6
6
|
|
|
@@ -69,6 +69,7 @@ module Kwartz
|
|
|
69
69
|
|
|
70
70
|
## called from parse() and initialize parser object
|
|
71
71
|
def reset(input, filename='')
|
|
72
|
+
input or raise ArgumentError.new("#{self.class.name}#reset() requires string argument.")
|
|
72
73
|
@input = input
|
|
73
74
|
@filename = filename
|
|
74
75
|
@linenum = 1 # 1 start
|
|
@@ -212,7 +213,7 @@ module Kwartz
|
|
|
212
213
|
end
|
|
213
214
|
|
|
214
215
|
|
|
215
|
-
## called from scan()
|
|
216
|
+
## called from scan(), return false when not hooked
|
|
216
217
|
def scan_hook
|
|
217
218
|
#not_implemented
|
|
218
219
|
end
|
|
@@ -240,7 +241,7 @@ module Kwartz
|
|
|
240
241
|
|
|
241
242
|
## scan hook
|
|
242
243
|
ret = scan_hook() # scan_hook() is overrided in subclass
|
|
243
|
-
return ret if ret
|
|
244
|
+
return ret if ret != false
|
|
244
245
|
|
|
245
246
|
## keyword or identifer
|
|
246
247
|
if is_identchar(c)
|
|
@@ -273,6 +274,13 @@ module Kwartz
|
|
|
273
274
|
return @token = :'}'
|
|
274
275
|
end
|
|
275
276
|
|
|
277
|
+
## ','
|
|
278
|
+
if c == ?,
|
|
279
|
+
@value = ","
|
|
280
|
+
getch()
|
|
281
|
+
return @token = :','
|
|
282
|
+
end
|
|
283
|
+
|
|
276
284
|
##
|
|
277
285
|
@value = c.chr
|
|
278
286
|
@error = :invalid_char
|
|
@@ -349,8 +357,8 @@ module Kwartz
|
|
|
349
357
|
assert("@error=#{@error}")
|
|
350
358
|
end
|
|
351
359
|
end
|
|
352
|
-
@value.sub!(/\A\
|
|
353
|
-
@value.sub!(
|
|
360
|
+
@value.sub!(/\A[ \t]*\n/, '')
|
|
361
|
+
@value.sub!(/^[ \t]+\z/, '')
|
|
354
362
|
return @value
|
|
355
363
|
end
|
|
356
364
|
|
|
@@ -422,7 +430,7 @@ module Kwartz
|
|
|
422
430
|
scan_line
|
|
423
431
|
return scan()
|
|
424
432
|
end
|
|
425
|
-
return
|
|
433
|
+
return false
|
|
426
434
|
end
|
|
427
435
|
|
|
428
436
|
|
|
@@ -611,11 +619,10 @@ module Kwartz
|
|
|
611
619
|
scan_ident()
|
|
612
620
|
name = @value
|
|
613
621
|
if name == 'DOCUMENT'
|
|
614
|
-
|
|
622
|
+
rulesets << parse_document_ruleset()
|
|
615
623
|
else
|
|
616
|
-
|
|
624
|
+
rulesets += parse_element_ruleset()
|
|
617
625
|
end
|
|
618
|
-
rulesets << ruleset
|
|
619
626
|
end
|
|
620
627
|
unless @token == nil
|
|
621
628
|
raise parse_error("'#{@value}': '#name' is expected.")
|
|
@@ -627,6 +634,7 @@ module Kwartz
|
|
|
627
634
|
protected
|
|
628
635
|
|
|
629
636
|
|
|
637
|
+
## return false when not hooked
|
|
630
638
|
def scan_hook
|
|
631
639
|
## comment
|
|
632
640
|
c = @ch
|
|
@@ -675,7 +683,7 @@ module Kwartz
|
|
|
675
683
|
return @token = ?@
|
|
676
684
|
end
|
|
677
685
|
|
|
678
|
-
return
|
|
686
|
+
return false
|
|
679
687
|
|
|
680
688
|
end #def
|
|
681
689
|
|
|
@@ -701,8 +709,8 @@ module Kwartz
|
|
|
701
709
|
when :global ; has_colon?(); ruleset.set_global _parse_words()
|
|
702
710
|
when :local ; has_colon?(); ruleset.set_local _parse_words()
|
|
703
711
|
when :fixture ; has_colon?(); ruleset.set_fixture _parse_block()
|
|
704
|
-
when :begin ; has_colon?(); ruleset.set_begin
|
|
705
|
-
when :end ; has_colon?(); ruleset.set_end
|
|
712
|
+
when :begin ; has_colon?(); ruleset.set_begin _parse_block()
|
|
713
|
+
when :end ; has_colon?(); ruleset.set_end _parse_block()
|
|
706
714
|
#when :before ; has_colon?(); ruleset.set_before _parse_block()
|
|
707
715
|
#when :after ; has_colon?(); ruleset.set_after _parse_block()
|
|
708
716
|
else
|
|
@@ -731,10 +739,22 @@ module Kwartz
|
|
|
731
739
|
assert unless @token == :ident
|
|
732
740
|
start_linenum = @linenum
|
|
733
741
|
name = @value
|
|
742
|
+
#names = [name]
|
|
743
|
+
names = []
|
|
734
744
|
scan()
|
|
745
|
+
while @token == :','
|
|
746
|
+
scan()
|
|
747
|
+
unless @token == ?#
|
|
748
|
+
raise parse_error("'#{@value}': '#name' is expected.")
|
|
749
|
+
end
|
|
750
|
+
scan_ident()
|
|
751
|
+
names << @value
|
|
752
|
+
scan()
|
|
753
|
+
end
|
|
735
754
|
unless @token == :'{'
|
|
736
755
|
raise parse_error("'#{@value}': '{' is expected.")
|
|
737
756
|
end
|
|
757
|
+
|
|
738
758
|
ruleset = ElementRuleset.new(name)
|
|
739
759
|
while true
|
|
740
760
|
scan()
|
|
@@ -750,18 +770,22 @@ module Kwartz
|
|
|
750
770
|
when :attrs ; has_colon?(); ruleset.set_attrs _parse_pairs(), flag_escape
|
|
751
771
|
when :append ; has_colon?(); ruleset.set_append _parse_exprs(), flag_escape
|
|
752
772
|
when :remove ; has_colon?(); ruleset.set_remove _parse_strs()
|
|
753
|
-
when :tagname; has_colon?(); ruleset.set_tagname
|
|
773
|
+
when :tagname; has_colon?(); ruleset.set_tagname _parse_str()
|
|
754
774
|
when :logic ; has_colon?(); ruleset.set_logic _parse_block()
|
|
755
775
|
else
|
|
756
776
|
raise parse_error("'#{@value}': unexpected token.")
|
|
757
777
|
end
|
|
758
778
|
end
|
|
779
|
+
## build rulesets
|
|
780
|
+
rulesets = [ruleset]
|
|
781
|
+
names.each do |name| rulesets << ruleset.duplicate(name) end
|
|
782
|
+
|
|
759
783
|
unless @token
|
|
760
784
|
raise parse_error("'##{name}': is not closed by '}'.", start_linenum)
|
|
761
785
|
end
|
|
762
786
|
assert "@token=#{@token.inspect}" unless @token == :'}'
|
|
763
787
|
scan()
|
|
764
|
-
return
|
|
788
|
+
return rulesets
|
|
765
789
|
end
|
|
766
790
|
|
|
767
791
|
|
|
@@ -771,6 +795,10 @@ module Kwartz
|
|
|
771
795
|
t = scan_string()
|
|
772
796
|
t == :string or raise parse_error("@import: requires filename.")
|
|
773
797
|
filename = @value
|
|
798
|
+
if @filename && !@filename.empty?
|
|
799
|
+
dir = File.dirname(@filename)
|
|
800
|
+
filename = dir + '/' + filename if dir != '.'
|
|
801
|
+
end
|
|
774
802
|
test(?f, filename) or raise parse_error("'#{filename}': import file not found.")
|
|
775
803
|
c = @ch
|
|
776
804
|
c = getch() while is_whitespace(c)
|