kwartz 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +340 -0
- data/ChangeLog +103 -0
- data/README.txt +37 -0
- data/bin/kwartz +12 -0
- data/doc-api/classes/Kwartz.html +218 -0
- data/doc-api/classes/Kwartz/Assertion.html +140 -0
- data/doc-api/classes/Kwartz/AssertionError.html +148 -0
- data/doc-api/classes/Kwartz/AttrInfo.html +320 -0
- data/doc-api/classes/Kwartz/BaseError.html +206 -0
- data/doc-api/classes/Kwartz/BaseTranslator.html +331 -0
- data/doc-api/classes/Kwartz/CharacterType.html +212 -0
- data/doc-api/classes/Kwartz/CommandOptionError.html +154 -0
- data/doc-api/classes/Kwartz/CommandOptions.html +374 -0
- data/doc-api/classes/Kwartz/Config.html +150 -0
- data/doc-api/classes/Kwartz/ConvertError.html +191 -0
- data/doc-api/classes/Kwartz/Converter.html +252 -0
- data/doc-api/classes/Kwartz/CssStyleParser.html +483 -0
- data/doc-api/classes/Kwartz/DocumentRuleset.html +369 -0
- data/doc-api/classes/Kwartz/ElementExpander.html +325 -0
- data/doc-api/classes/Kwartz/ElementInfo.html +312 -0
- data/doc-api/classes/Kwartz/ElementRuleset.html +582 -0
- data/doc-api/classes/Kwartz/EperlHandler.html +338 -0
- data/doc-api/classes/Kwartz/EperlTranslator.html +167 -0
- data/doc-api/classes/Kwartz/ErubisHandler.html +113 -0
- data/doc-api/classes/Kwartz/ErubisTranslator.html +168 -0
- data/doc-api/classes/Kwartz/ErubyHandler.html +337 -0
- data/doc-api/classes/Kwartz/ErubyTranslator.html +167 -0
- data/doc-api/classes/Kwartz/ExpandStatement.html +227 -0
- data/doc-api/classes/Kwartz/Expression.html +119 -0
- data/doc-api/classes/Kwartz/Handler.html +558 -0
- data/doc-api/classes/Kwartz/JstlHandler.html +657 -0
- data/doc-api/classes/Kwartz/JstlTranslator.html +226 -0
- data/doc-api/classes/Kwartz/KwartzError.html +146 -0
- data/doc-api/classes/Kwartz/Main.html +384 -0
- data/doc-api/classes/Kwartz/NativeExpression.html +236 -0
- data/doc-api/classes/Kwartz/NativeStatement.html +254 -0
- data/doc-api/classes/Kwartz/Node.html +156 -0
- data/doc-api/classes/Kwartz/ParseError.html +148 -0
- data/doc-api/classes/Kwartz/PhpHandler.html +333 -0
- data/doc-api/classes/Kwartz/PhpTranslator.html +194 -0
- data/doc-api/classes/Kwartz/PresentationLogicParser.html +830 -0
- data/doc-api/classes/Kwartz/PrintStatement.html +221 -0
- data/doc-api/classes/Kwartz/RailsHandler.html +587 -0
- data/doc-api/classes/Kwartz/RailsTranslator.html +167 -0
- data/doc-api/classes/Kwartz/RubyStyleParser.html +558 -0
- data/doc-api/classes/Kwartz/Ruleset.html +117 -0
- data/doc-api/classes/Kwartz/Statement.html +119 -0
- data/doc-api/classes/Kwartz/StrutsTranslator.html +190 -0
- data/doc-api/classes/Kwartz/TagInfo.html +314 -0
- data/doc-api/classes/Kwartz/TextConverter.html +270 -0
- data/doc-api/classes/Kwartz/Translator.html +318 -0
- data/doc-api/classes/Test.html +107 -0
- data/doc-api/classes/Test/Unit.html +101 -0
- data/doc-api/created.rid +1 -0
- data/doc-api/files/__/README_txt.html +150 -0
- data/doc-api/files/kwartz/assert_rb.html +114 -0
- data/doc-api/files/kwartz/binding/eperl_rb.html +116 -0
- data/doc-api/files/kwartz/binding/erubis_rb.html +116 -0
- data/doc-api/files/kwartz/binding/eruby_rb.html +115 -0
- data/doc-api/files/kwartz/binding/jstl_rb.html +116 -0
- data/doc-api/files/kwartz/binding/php_rb.html +116 -0
- data/doc-api/files/kwartz/binding/rails_rb.html +115 -0
- data/doc-api/files/kwartz/binding/struts_rb.html +117 -0
- data/doc-api/files/kwartz/config_rb.html +107 -0
- data/doc-api/files/kwartz/converter_rb.html +119 -0
- data/doc-api/files/kwartz/error_rb.html +107 -0
- data/doc-api/files/kwartz/main_rb.html +124 -0
- data/doc-api/files/kwartz/node_rb.html +114 -0
- data/doc-api/files/kwartz/parser_rb.html +117 -0
- data/doc-api/files/kwartz/translator_rb.html +115 -0
- data/doc-api/files/kwartz/util/assert-text-equal_rb.html +115 -0
- data/doc-api/files/kwartz/util/testcase-helper_rb.html +115 -0
- data/doc-api/files/kwartz_rb.html +120 -0
- data/doc-api/fr_class_index.html +75 -0
- data/doc-api/fr_file_index.html +45 -0
- data/doc-api/fr_method_index.html +216 -0
- data/doc-api/index.html +24 -0
- data/doc-api/rdoc-style.css +208 -0
- data/doc/docstyle.css +188 -0
- data/doc/p-pattern.html +1207 -0
- data/doc/reference.html +3396 -0
- data/doc/users-guide.html +1670 -0
- data/examples/breadcrumbs1/Makefile +15 -0
- data/examples/breadcrumbs1/breadcrumbs.eruby.plogic +27 -0
- data/examples/breadcrumbs1/breadcrumbs.html +12 -0
- data/examples/breadcrumbs1/breadcrumbs.jstl.plogic +28 -0
- data/examples/breadcrumbs1/breadcrumbs.php.plogic +26 -0
- data/examples/breadcrumbs1/main.php +12 -0
- data/examples/breadcrumbs1/main.rb +12 -0
- data/examples/breadcrumbs2/Makefile +15 -0
- data/examples/breadcrumbs2/breadcrumbs.eruby.plogic +22 -0
- data/examples/breadcrumbs2/breadcrumbs.html +14 -0
- data/examples/breadcrumbs2/breadcrumbs.jstl.plogic +24 -0
- data/examples/breadcrumbs2/breadcrumbs.php.plogic +23 -0
- data/examples/breadcrumbs2/main.php +12 -0
- data/examples/breadcrumbs2/main.rb +12 -0
- data/examples/pagelayout/Makefile +47 -0
- data/examples/pagelayout/content.eruby.plogic +44 -0
- data/examples/pagelayout/content.jstl.plogic +36 -0
- data/examples/pagelayout/content.php.plogic +37 -0
- data/examples/pagelayout/content1.html +36 -0
- data/examples/pagelayout/content2.html +29 -0
- data/examples/pagelayout/design.css +40 -0
- data/examples/pagelayout/layout.html +50 -0
- data/examples/pagelayout/main.php +55 -0
- data/examples/pagelayout/main.rb +77 -0
- data/examples/pagelayout/menu.eruby.plogic +14 -0
- data/examples/pagelayout/menu.html +13 -0
- data/examples/pagelayout/menu.jstl.plogic +14 -0
- data/examples/pagelayout/menu.php.plogic +14 -0
- data/examples/rails1/Makefile +36 -0
- data/examples/rails1/README +19 -0
- data/examples/rails1/application_helper.rb +31 -0
- data/examples/rails1/edit.html +28 -0
- data/examples/rails1/edit.plogic +10 -0
- data/examples/rails1/form.html +52 -0
- data/examples/rails1/form.plogic +33 -0
- data/examples/rails1/layout.plogic +15 -0
- data/examples/rails1/link_to.plogic +19 -0
- data/examples/rails1/list.html +48 -0
- data/examples/rails1/list.plogic +28 -0
- data/examples/rails1/new.html +27 -0
- data/examples/rails1/new.plogic +10 -0
- data/examples/rails1/reader.plogic +29 -0
- data/examples/rails1/show.html +40 -0
- data/examples/rails1/show.plogic +4 -0
- data/examples/rails1/writer.plogic +8 -0
- data/examples/table1/Makefile +15 -0
- data/examples/table1/main.php +11 -0
- data/examples/table1/main.rb +11 -0
- data/examples/table1/table1.eruby.plogic +21 -0
- data/examples/table1/table1.html +16 -0
- data/examples/table1/table1.jstl.plogic +21 -0
- data/examples/table1/table1.php.plogic +22 -0
- data/kwartz.gemspec +55 -0
- data/lib/kwartz.rb +13 -0
- data/lib/kwartz/assert.rb +31 -0
- data/lib/kwartz/binding/eperl.rb +166 -0
- data/lib/kwartz/binding/erubis.rb +61 -0
- data/lib/kwartz/binding/eruby.rb +164 -0
- data/lib/kwartz/binding/jstl.rb +334 -0
- data/lib/kwartz/binding/php.rb +167 -0
- data/lib/kwartz/binding/rails.rb +295 -0
- data/lib/kwartz/binding/struts.rb +109 -0
- data/lib/kwartz/config.rb +28 -0
- data/lib/kwartz/converter.rb +920 -0
- data/lib/kwartz/error.rb +41 -0
- data/lib/kwartz/main.rb +464 -0
- data/lib/kwartz/node.rb +454 -0
- data/lib/kwartz/parser.rb +903 -0
- data/lib/kwartz/translator.rb +153 -0
- data/lib/kwartz/util/assert-text-equal.rb +44 -0
- data/lib/kwartz/util/testcase-helper.rb +112 -0
- data/setup.rb +1331 -0
- data/test/test-compile.rb +36 -0
- data/test/test-compile.yaml +178 -0
- data/test/test-converter.rb +34 -0
- data/test/test-converter.yaml +127 -0
- data/test/test-directives.rb +32 -0
- data/test/test-directives.yaml +1411 -0
- data/test/test-main.rb +464 -0
- data/test/test-parser.rb +54 -0
- data/test/test-parser.yaml +394 -0
- data/test/test-rails.rb +28 -0
- data/test/test-rails.yaml +301 -0
- data/test/test-ruleset.rb +36 -0
- data/test/test-ruleset.yaml +804 -0
- data/test/test.rb +44 -0
- metadata +236 -0
data/lib/kwartz/error.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
###
|
2
|
+
### $Rev: 112 $
|
3
|
+
### $Release: 3.0.0 $
|
4
|
+
### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
|
5
|
+
###
|
6
|
+
|
7
|
+
module Kwartz
|
8
|
+
|
9
|
+
|
10
|
+
class KwartzError < StandardError
|
11
|
+
def initialize(message)
|
12
|
+
super(message)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
class BaseError < KwartzError
|
18
|
+
|
19
|
+
def initialize(message, filename, linenum, column=nil)
|
20
|
+
super(message)
|
21
|
+
@filename = filename || '-'
|
22
|
+
@linenum = linenum
|
23
|
+
@column = column
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_accessor :filename, :linenum, :column
|
27
|
+
|
28
|
+
def to_s
|
29
|
+
return super unless @linenum
|
30
|
+
#return "line #{@linenum}, column #{@column}: " + super
|
31
|
+
if @column
|
32
|
+
return "#{@filename}:#{@linenum}:#{@column}: " + super
|
33
|
+
else
|
34
|
+
return "#{@filename}:#{@linenum}: " + super
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
end
|
data/lib/kwartz/main.rb
ADDED
@@ -0,0 +1,464 @@
|
|
1
|
+
###
|
2
|
+
### $Rev: 113 $
|
3
|
+
### $Release: 3.0.0 $
|
4
|
+
### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
|
5
|
+
###
|
6
|
+
|
7
|
+
|
8
|
+
require 'kwartz'
|
9
|
+
require 'kwartz/binding/eruby'
|
10
|
+
require 'kwartz/binding/php'
|
11
|
+
require 'kwartz/binding/eperl'
|
12
|
+
require 'kwartz/binding/rails'
|
13
|
+
require 'kwartz/binding/jstl'
|
14
|
+
require 'kwartz/binding/struts'
|
15
|
+
require 'kwartz/binding/erubis'
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
module Kwartz
|
20
|
+
|
21
|
+
|
22
|
+
##
|
23
|
+
## command option error class
|
24
|
+
##
|
25
|
+
class CommandOptionError < KwartzError
|
26
|
+
|
27
|
+
|
28
|
+
def initialize(message)
|
29
|
+
super(message)
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
##
|
37
|
+
## command option class
|
38
|
+
##
|
39
|
+
## ex.
|
40
|
+
## option_table = [
|
41
|
+
## [?h, :help, nil],
|
42
|
+
## [?v, :version, nil],
|
43
|
+
## [?f, :file, "filename"],
|
44
|
+
## ]
|
45
|
+
## properties = {}
|
46
|
+
## options = CommandOption.new(option_table, properties)
|
47
|
+
## filenames = options.parse_argv(ARGV)
|
48
|
+
## p options.help
|
49
|
+
## p options.version
|
50
|
+
## p options.file
|
51
|
+
##
|
52
|
+
class CommandOptions
|
53
|
+
|
54
|
+
def initialize(option_table, properties={})
|
55
|
+
@_option_table = option_table
|
56
|
+
@_properties = properties
|
57
|
+
buf = []
|
58
|
+
optchars = {}
|
59
|
+
option_table.each do |char, key, argname|
|
60
|
+
buf << "def #{key}; @#{key}; end; def #{key}=(val); @#{key}=val; end\n"
|
61
|
+
end
|
62
|
+
instance_eval buf.join
|
63
|
+
end
|
64
|
+
|
65
|
+
def _find_entry(key)
|
66
|
+
if key.is_a?(Fixnum)
|
67
|
+
return @_option_table.find { |row| row[0] == key }
|
68
|
+
else
|
69
|
+
key = key.to_s.intern unless key.is_a?(Symbol)
|
70
|
+
return @_option_table.find { |row| row[1] == key }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
private :_find_entry
|
74
|
+
|
75
|
+
def [](key)
|
76
|
+
if key.is_a?(Fixnum)
|
77
|
+
entry = _find_entry(key) or return
|
78
|
+
key = entry[1]
|
79
|
+
end
|
80
|
+
instance_variable_get("@#{key}")
|
81
|
+
end
|
82
|
+
|
83
|
+
def []=(key, val)
|
84
|
+
instance_variable_set("@#{key}", val)
|
85
|
+
end
|
86
|
+
|
87
|
+
def key?(key)
|
88
|
+
return instance_variables.include?("@#{key}")
|
89
|
+
end
|
90
|
+
|
91
|
+
def char(key)
|
92
|
+
entry = _find_entry(key)
|
93
|
+
return entry && entry[0]
|
94
|
+
end
|
95
|
+
|
96
|
+
def chr(key)
|
97
|
+
ch = char(key)
|
98
|
+
return ch ? ch.chr : ''
|
99
|
+
end
|
100
|
+
|
101
|
+
def parse_argv(argv)
|
102
|
+
properties = @_properties
|
103
|
+
while !argv.empty? && argv[0][0] == ?-
|
104
|
+
optstr = argv.shift
|
105
|
+
optstr = optstr[1, optstr.length - 1]
|
106
|
+
if optstr[0] == ?- # properties
|
107
|
+
unless optstr =~ /\A-([-\w]+)(?:=(.*))?/
|
108
|
+
raise option_error("'-#{optstr}': invalid property pattern.")
|
109
|
+
end
|
110
|
+
pname = $1 ; pvalue = $2
|
111
|
+
case pvalue
|
112
|
+
when nil ; pvalue = true
|
113
|
+
when /\A\d+\z/ ; pvalue = pvalue.to_i
|
114
|
+
when /\A\d+\.\d+\z/ ; pvalue = pvalue.to_f
|
115
|
+
when 'true', 'yes', 'on' ; pvalue = true
|
116
|
+
when 'false', 'no', 'off' ; pvalue = false
|
117
|
+
when 'nil', 'null' ; pvalue = nil
|
118
|
+
when /\A'.*'\z/, /\A".*"\z/ ; pvalue = eval pvalue
|
119
|
+
end
|
120
|
+
properties[pname.intern] = pvalue
|
121
|
+
else # command-line options
|
122
|
+
while optstr && !optstr.empty?
|
123
|
+
optchar = optstr[0]
|
124
|
+
optstr = optstr[1, optstr.length - 1]
|
125
|
+
entry = _find_entry(optchar)
|
126
|
+
entry or raise CommandOptionError.new("-#{optchar.chr}: unknown option.")
|
127
|
+
char, key, argname = entry
|
128
|
+
case argname
|
129
|
+
when nil, false
|
130
|
+
instance_variable_set("@#{key}", true)
|
131
|
+
when String
|
132
|
+
arg = optstr
|
133
|
+
arg = argv.shift unless arg && !arg.empty?
|
134
|
+
arg or raise CommandOptionError.new("-#{optchar.chr}: #{argname} required.")
|
135
|
+
instance_variable_set("@#{key}", arg)
|
136
|
+
optstr = ''
|
137
|
+
when true
|
138
|
+
arg = optstr
|
139
|
+
arg = true unless arg && !arg.empty?
|
140
|
+
instance_variable_set("@#{key}", arg)
|
141
|
+
optstr = ''
|
142
|
+
else
|
143
|
+
raise "** internal error **"
|
144
|
+
end
|
145
|
+
end #while
|
146
|
+
end #if
|
147
|
+
end #while
|
148
|
+
filenames = argv
|
149
|
+
return filenames
|
150
|
+
end #def
|
151
|
+
|
152
|
+
end #class
|
153
|
+
|
154
|
+
|
155
|
+
##
|
156
|
+
## main command
|
157
|
+
##
|
158
|
+
## ex.
|
159
|
+
## Kwartz::Main.add_handler('mylang', MyLangDirectiveHandler, MyLangTranslator)
|
160
|
+
## Kwartz::Main.main(ARGV)
|
161
|
+
##
|
162
|
+
class Main
|
163
|
+
|
164
|
+
|
165
|
+
def initialize(argv=ARGV)
|
166
|
+
@argv = argv
|
167
|
+
@command = File.basename($0)
|
168
|
+
end
|
169
|
+
|
170
|
+
|
171
|
+
def self.main(argv=ARGV)
|
172
|
+
status = 0
|
173
|
+
begin
|
174
|
+
main = Kwartz::Main.new(argv)
|
175
|
+
out = main.execute()
|
176
|
+
print out unless out == nil
|
177
|
+
rescue Kwartz::KwartzError => ex
|
178
|
+
raise ex if $DEBUG
|
179
|
+
$stderr.puts ex.to_s
|
180
|
+
status = 1
|
181
|
+
end
|
182
|
+
exit status
|
183
|
+
end
|
184
|
+
|
185
|
+
|
186
|
+
@@option_table = [
|
187
|
+
[ ?h, :help, nil ],
|
188
|
+
[ ?v, :version, nil ],
|
189
|
+
[ ?e, :escape, nil ],
|
190
|
+
[ ?D, :debug, nil ],
|
191
|
+
[ ?t, :untabify, nil ],
|
192
|
+
[ ?S, :intern, nil ],
|
193
|
+
[ ?l, :lang, 'lang name' ],
|
194
|
+
[ ?k, :kanji, 'kanji code' ],
|
195
|
+
[ ?r, :requires, 'library name' ],
|
196
|
+
[ ?p, :plogics, 'file name' ],
|
197
|
+
[ ?P, :pstyle, 'parser style' ],
|
198
|
+
[ ?x, :extract_cont, 'element id' ],
|
199
|
+
[ ?X, :extract_elem, 'element id' ],
|
200
|
+
[ ?i, :imports, 'file name' ],
|
201
|
+
[ ?L, :layout, 'file name' ],
|
202
|
+
[ ?f, :yamlfile, 'yaml file' ],
|
203
|
+
]
|
204
|
+
|
205
|
+
|
206
|
+
def execute(argv=@argv)
|
207
|
+
|
208
|
+
## parse command-line options
|
209
|
+
options = CommandOptions.new(@@option_table, properties = {})
|
210
|
+
pdata_filenames = options.parse_argv(argv)
|
211
|
+
options.help = true if properties[:help]
|
212
|
+
|
213
|
+
## help
|
214
|
+
if options.help || options.version
|
215
|
+
puts version() if options.version
|
216
|
+
puts help() if options.help
|
217
|
+
return nil
|
218
|
+
end
|
219
|
+
|
220
|
+
## check filenames
|
221
|
+
if pdata_filenames.empty?
|
222
|
+
raise option_error("filename of presentation data is required.")
|
223
|
+
end
|
224
|
+
pdata_filenames.each do |filename|
|
225
|
+
test(?f, filename) or raise option_error("#{filename}: file not found.")
|
226
|
+
end
|
227
|
+
|
228
|
+
## options
|
229
|
+
$KCODE = options.kanji if options.kanji
|
230
|
+
$DEBUG = options.debug if options.debug
|
231
|
+
|
232
|
+
## parse class, hander class, translator class
|
233
|
+
style = options.pstyle || 'css'
|
234
|
+
unless parser_class = PresentationLogicParser.get_class(style)
|
235
|
+
s = "-#{options.chr(:pstyle)} #{style}"
|
236
|
+
raise option_error("#{s}: unknown style name (parser class not registered).")
|
237
|
+
end
|
238
|
+
lang = options.lang || Config::PROPERTY_LANG # 'eruby'
|
239
|
+
unless handler_class = Handler.get_class(lang)
|
240
|
+
s = "-#{options.chr(:lang)} #{lang}"
|
241
|
+
raise option_error("#{s}: unknown lang name (handler class not registered).")
|
242
|
+
end
|
243
|
+
unless translator_class = Translator.get_class(lang)
|
244
|
+
s = "-#{options.chr(:lang)} #{lang}"
|
245
|
+
raise option_error("#{s}: unknown lang name (translator class not registered).")
|
246
|
+
end
|
247
|
+
|
248
|
+
## require libraries
|
249
|
+
if options.requires
|
250
|
+
libraries = options.requires
|
251
|
+
libraries.split(/,/).each do |library|
|
252
|
+
library.strip!
|
253
|
+
require library
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
## parse presentation logic file
|
258
|
+
ruleset_list = []
|
259
|
+
if options.plogics
|
260
|
+
parser = parser_class.new(properties)
|
261
|
+
options.plogics.split(/,/).each do |filename|
|
262
|
+
filename.strip!
|
263
|
+
if test(?f, filename)
|
264
|
+
# ok
|
265
|
+
elsif test(?f, filename + '.plogic')
|
266
|
+
filename += '.plogic'
|
267
|
+
else
|
268
|
+
s = "-#{options.chr(:plogics)} #{filename}[.plogic]"
|
269
|
+
raise option_error("#{s}: file not found.")
|
270
|
+
end
|
271
|
+
plogic = File.read(filename)
|
272
|
+
ruleset_list += parser.parse(plogic, filename)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
## properties
|
277
|
+
properties[:escape] = true if options.escape && !properties.key?(:escape)
|
278
|
+
|
279
|
+
## create converter
|
280
|
+
handler = handler_class.new(ruleset_list, properties)
|
281
|
+
converter = TextConverter.new(handler, properties)
|
282
|
+
|
283
|
+
## import-files and layout-file
|
284
|
+
import_filenames = []
|
285
|
+
if options[?i]
|
286
|
+
(import_filenames = options.imports.split(/,/)).each do |filename|
|
287
|
+
unless test(?f, filename)
|
288
|
+
s = "-#{options.chr(:imports)}"
|
289
|
+
raise option_error("#{s} #{filename}: file not found.")
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
if options.layout
|
294
|
+
unless test(?f, options.layout)
|
295
|
+
s = "-#{options.chr(:layout)}"
|
296
|
+
raise option_error("#{s} #{options.layout}: file not found.")
|
297
|
+
end
|
298
|
+
import_filenames += pdata_filenames
|
299
|
+
pdata_filenames = [options.layout]
|
300
|
+
end
|
301
|
+
import_filenames.each do |filename|
|
302
|
+
pdata = File.read(filename)
|
303
|
+
converter.convert(pdata, filename)
|
304
|
+
end
|
305
|
+
|
306
|
+
## convert presentation data file
|
307
|
+
stmt_list = []
|
308
|
+
pdata = nil
|
309
|
+
pdata_filenames.each do |filename|
|
310
|
+
test(?f, filename) or raise option_error("#{filename}: file not found.")
|
311
|
+
pdata = File.read(filename)
|
312
|
+
#handler = handler_class.new(ruleset_list)
|
313
|
+
#converter = TextConverter.new(handler, properties)
|
314
|
+
list = converter.convert(pdata, filename)
|
315
|
+
stmt_list.concat(list)
|
316
|
+
end
|
317
|
+
|
318
|
+
## extract element or content
|
319
|
+
elem_id = options.extract_cont || options.extract_elem
|
320
|
+
if elem_id
|
321
|
+
content_only = options.extract_cont ? true : false
|
322
|
+
stmt_list = handler.extract(elem_id, content_only)
|
323
|
+
end
|
324
|
+
|
325
|
+
## translate statements into target code(eRuby, PHP, JSP)
|
326
|
+
if pdata[pdata.index(?\n) - 1] == ?\r
|
327
|
+
properties[:nl] ||= "\r\n"
|
328
|
+
end
|
329
|
+
translator = translator_class.new(properties)
|
330
|
+
output = translator.translate(stmt_list)
|
331
|
+
|
332
|
+
## load YAML file and evaluate eRuby script
|
333
|
+
if options.yamlfile
|
334
|
+
eruby_script = output
|
335
|
+
if lang == 'eruby' || lang == 'rails'
|
336
|
+
require 'erb'
|
337
|
+
trim_mode = properties.key?(:trim) ? properties[:trim] : 1
|
338
|
+
src = ERB.new(eruby_script, $SAFE, trim_mode).src
|
339
|
+
mod = ERB::Util
|
340
|
+
elsif lang == 'erubis'
|
341
|
+
require 'erubis'
|
342
|
+
src = Erubis::Eruby.new(eruby_script).src
|
343
|
+
mod = Erubis::XmlHelper
|
344
|
+
else
|
345
|
+
s1 = "-#{options.chr(:yamlfile)}"
|
346
|
+
s2 = "-#{options.chr(:lang)} #{lang}"
|
347
|
+
option_error("#{s1}: not available with '#{s2}'.")
|
348
|
+
end
|
349
|
+
unless test(?f, options.yamlfile)
|
350
|
+
s = "-#{options.chr(:yamlfile)} #{options.yamlfile}"
|
351
|
+
raise option_error("#{s}: file not found.")
|
352
|
+
end
|
353
|
+
str = File.read(options.yamlfile)
|
354
|
+
str = untabify(str) if options.untabify
|
355
|
+
require 'yaml'
|
356
|
+
ydoc = YAML.load(str)
|
357
|
+
unless ydoc.is_a?(Hash)
|
358
|
+
s = "-#{options.chr(:yamlfile)} #{options.yamlfile}"
|
359
|
+
raise option_error("#{s}: not a mapping.")
|
360
|
+
end
|
361
|
+
intern_hash_keys(ydoc) if options.intern
|
362
|
+
context = Object.new
|
363
|
+
ydoc.each do |key, val|
|
364
|
+
context.instance_variable_set("@#{key}", val)
|
365
|
+
end
|
366
|
+
context.extend(mod) # ERB::Util or Erubis::XmlHelper
|
367
|
+
output = context.instance_eval(src)
|
368
|
+
end
|
369
|
+
|
370
|
+
return output
|
371
|
+
|
372
|
+
end
|
373
|
+
|
374
|
+
|
375
|
+
private
|
376
|
+
|
377
|
+
|
378
|
+
def help
|
379
|
+
sb = []
|
380
|
+
sb << "kwartz - a template system which realized 'Independence of Presentation Logic'\n"
|
381
|
+
sb << "Usage: #{@command} [..options..] [-p plogic] file.html [file2.html ...]\n"
|
382
|
+
sb << " -h : help\n"
|
383
|
+
sb << " -v : version\n"
|
384
|
+
#sb << " -D : debug mode\n"
|
385
|
+
sb << " -e : alias of '--escape=true'\n"
|
386
|
+
sb << " -l lang : eruby/php/eperl/rails/jstl (default 'eruby')\n"
|
387
|
+
sb << " -k kanji : euc/sjis/utf8 (default nil)\n"
|
388
|
+
sb << " -r library,... : require libraries\n"
|
389
|
+
sb << " -p plogic,... : presentation logic files\n"
|
390
|
+
sb << " -i pdata,... : import presentation data files\n"
|
391
|
+
sb << " -L layoutfile : layout file ('-L f1 f2' is equivalent to '-i f2 f1')\n"
|
392
|
+
sb << " -x elem-id : extract content of element marked by elem-id\n"
|
393
|
+
sb << " -X elem-id : extract element marked by elem-id\n"
|
394
|
+
sb << " -f yamlfile : YAML file for context values\n"
|
395
|
+
sb << " -t : expand tab character in YAML file\n"
|
396
|
+
sb << " -S : convert mapping key from string to symbol in YAML file\n"
|
397
|
+
#sb << " -P style : style of presentation logic (css/ruby/yaml)\n"
|
398
|
+
sb << " --dattr=str : directive attribute name\n"
|
399
|
+
sb << " --odd=value : odd value for FOREACH/LOOP directive (default \"'odd'\")\n"
|
400
|
+
sb << " --even=value : even value for FOREACH/LOOP directive (default \"'even'\")\n"
|
401
|
+
sb << " --header=str : header text\n"
|
402
|
+
sb << " --footer=str : footer text\n"
|
403
|
+
sb << " --delspan={true|false} : delete dummy span tag (default false)\n"
|
404
|
+
sb << " --escape={true|false} : escape (sanitize) (default false)\n"
|
405
|
+
sb << " --jstl={1.2|1.1} : JSTL version (default 1.2)\n"
|
406
|
+
sb << " --charset=charset : character set for JSTL (default none)\n"
|
407
|
+
return sb.join
|
408
|
+
end
|
409
|
+
|
410
|
+
|
411
|
+
def version
|
412
|
+
v = ('$Release: 3.0.0 $' =~ /[.\d]+/) && $&
|
413
|
+
return v
|
414
|
+
end
|
415
|
+
|
416
|
+
|
417
|
+
def option_error(message)
|
418
|
+
return CommandOptionError.new(message)
|
419
|
+
end
|
420
|
+
|
421
|
+
|
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
|
+
end #class
|
453
|
+
|
454
|
+
|
455
|
+
|
456
|
+
end #module
|
457
|
+
|
458
|
+
|
459
|
+
|
460
|
+
if $0 == __FILE__
|
461
|
+
|
462
|
+
Kwartz::Main.main(ARGV)
|
463
|
+
|
464
|
+
end
|