kwartz 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|