mdextab 0.1.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/bin/makemdtab CHANGED
@@ -1,304 +1,67 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
3
2
 
4
- require 'bundler/setup'
5
- require 'mdextab'
6
- require 'digest'
3
+ require "bundler/setup"
4
+ require "mdextab"
5
+ require "messagex"
7
6
 
8
- require 'simpleoptparse'
9
- require 'byebug'
7
+ require "simpleoptparse"
10
8
 
11
- EXIT_CODE_NORMAL_EXIT=0
12
- EXIT_CODE_CANNOT_FILE_FILE=101
13
- EXIT_CODE_CANNOT_WRITE_FILE=102
14
- EXIT_CODE_ARGV_SIZE=103
15
- EXIT_CODE_MISSING_REQUIRED_ARGUMENT=104
16
- EXIT_CODE_CANNOTFIND_YAMLFILE_OR_EMPTY=105
17
- EXIT_CODE_YAMLFILE_IS_EMPTY=106
18
- EXIT_CODE_CANNOTFIND_ERUBYFILE_OR_EMPTY=107
19
- EXIT_CODE_ERUBYFILE_IS_EMPTY=108
20
- EXIT_CODE_CANNOTFIND_MDFILE_OR_EMPTY=109
21
- EXIT_CODE_MDFILE_IS_EMPTY=110
22
-
23
- class Makemdtab
24
- def initialize(opts, erubyfnames)
25
- @dataop=opts["dataop"]
26
- @datayamlfname=opts["data"]
27
- @yamlop=opts["yamlop"]
28
- @yamlfname=opts["setting"]
29
- @auxyamlfname=opts["auxsetting"]
30
- @erubyfnames=erubyfnames
31
- @outputfname=opts["output"]
32
-
33
- @exit_cannot_find_file=1
34
- @exit_cannot_write_file=2
35
-
36
- @erubies = {}
37
-
38
- @logger=Logger.new(STDOUT)
39
- @logger.level = Logger::INFO
40
- @logger.level = Logger::DEBUG if opts["debug"]
41
- @logger.formatter = proc do |severity, datetime, progname, msg|
42
- "#{msg}\n"
43
- end
44
-
45
- [@datayamlfname, @yamlfname, @auxyamlfname, @erubyfnames].flatten.each do |fname|
46
- next if File.exist?(fname)
47
-
48
- mes="Can't find #{fname}"
49
- outputError(mes)
50
- exit(EXIT_CODE_CANNOT_FILE_FILE)
51
- end
52
-
53
- begin
54
- @output = File.open(@outputfname, 'w')
55
- rescue RuntimeError => ex
56
- mes2 = "Can't write #{@outputfname}"
57
- outputError(mes2)
58
- exit(EXIT_CODE_CANNOT_WRITE_FILE)
59
- end
60
- end
61
-
62
- def outputError(mes)
63
- if @logger
64
- @logger.error(mes)
65
- else
66
- STDERR.puts(mes)
67
- end
68
- end
69
-
70
- def makeMd()
71
- load(@dataop, @datayamlfname, @yamlop, @auxyamlfname, @yamlfname, @erubyfnames).map{|x|
72
- @output.puts(x)
73
- }
74
- end
75
-
76
- def load(dataop, datayamlfname, yamlop, auxyamlfname, yamlfname, erubyfnames)
77
- eruby0 = nil
78
- eruby1 = nil
79
- obj = {}
80
- obj0 = YAML.load_file(auxyamlfname) if auxyamlfname
81
- obj = obj0 if obj0
82
-
83
- case yamlop
84
- when :MERGE
85
- obj2 = YAML.load_file(yamlfname)
86
- if obj2
87
- if obj
88
- objx = obj.merge(obj2)
89
- else
90
- objx = obj2
91
- end
92
- else
93
- objx = obj
94
- end
95
- when :REPLACE
96
- str = File.read(yamlfname)
97
- str2 = Erubis::Eruby.new(str).result(obj)
98
- objx0 = YAML.load(str2)
99
- if objx0
100
- objx = objx
101
- else
102
- objx = {}
103
- end
104
- else
105
- # do nothing
106
- end
107
-
108
- erubystr=erubyfnames.map{|x| checkAndLoadErubyfile(x)}.join("\n")
109
- if @dataop == :PATTERN_FOUR
110
- mdfname=datayamlfname
111
- objx["PARENT_DIR"] = ENV['MDEXTAB_MAKE']
112
-
113
- mdstr=checkAndLoadMdfile(mdfname)
114
-
115
- dx = [erubystr, mdstr].join("\n")
116
- @erubies[mdfname] ||= Erubis::Eruby.new(dx)
117
- array=[@erubies[mdfname].result(objx)]
118
- else
119
- puts "datayamlfname=#{datayamlfname}"
120
- strdata2=checkAndExpandYamlfile(datayamlfname, objx)
121
- data = YAML.load(strdata2)
122
- if data.class != Hash
123
- puts "strdata2=#{strdata2}"
124
- p data
125
- exit(300)
9
+ opts = {}
10
+ banner = "Usage: bundle exec ruby bin/makemdtab [--debug|--verbose] (-o|--output) outfname (-d|--data) datafname yamlfname --dataop (fileinclude|yamltomd) -es erubystatic -ev erubyvariable *]"
11
+ if ARGV.empty?
12
+ puts(banner)
13
+ exit(@mes.ec("EXIT_CODE_ARGV"))
126
14
  end
127
- erubyfname=erubyfnames.last
128
- case dataop
129
- when :PATTERN_ONE
130
- array=loadWithPattern1(data, erubyfname, erubystr)
131
- when :PATTERN_TWO
132
- array=loadWithPattern2(data, erubyfname, erubystr)
133
- when :PATTERN_THREE
134
- dir=File.dirname(datayamlfname)
135
- array=loadWithPattern3(data, erubyfname, erubystr, dir)
136
- else
137
- array=[]
138
- # do nothing
139
- end
140
- end
141
- array
142
- end
143
15
 
144
- def checkAndLoadErubyfile(erubyfname)
145
- size=File.size?(erubyfname)
146
- if size and size > 0
147
- erubystr=File.read(erubyfname)
16
+ Simpleoptparse::Simpleoptparse.parse(ARGV, opts, banner, Mdextab::VERSION, nil) do |parser|
17
+ parser.on("--debug") {|_x| opts["debug"] = true }
18
+ parser.on("--verbose") {|_x| opts["verbose"] = true }
19
+ parser.on("--es path") {|x| opts["fnameStatic"] = x }
20
+ parser.on("--ev path") {|x| opts["fnameVariable"] = x }
21
+ parser.on("-t path", "--template") {|x| opts["template"] = opts["t"] = x }
22
+ parser.on("-y path", "--yaml") {|x| opts["yaml"] = opts["y"] = x }
23
+ parser.on("-o path", "--output") {|x| opts["output"] = opts["o"] = x }
24
+ parser.on("-d path", "--data") {|x| opts["data"] = opts["d"] = x }
25
+ parser.on("--dataop op") do |x|
26
+ if /^f/.match?(x.downcase)
27
+ opts["dataop"] = :FILE_INCLUDE
148
28
  else
149
- mes=%Q!Can not find #{erubyfname} or is empty!
150
- outputError(mes)
151
- exit(EXIT_CODE_CANNOTFIND_ERUBYFILE_OR_EMPTY)
29
+ opts["dataop"] = :YAML_TO_MD
152
30
  end
153
- if erubystr.strip.empty?
154
- mes=%Q!#{erubyfname} is empty!
155
- outputError(mes)
156
- exit(EXIT_CODE_ERUBYFILE_IS_EMPTY)
157
- end
158
- erubystr
159
- end
160
-
161
- def checkAndLoadMdfile(mdfname)
162
- size2=File.size?(mdfname)
163
- if size2 and size2 > 0
164
- mdstr=File.read(mdfname)
165
- else
166
- mes=%Q!Can not find #{mdfname} or is empty!
167
- outputError(mes)
168
- exit(EXIT_CODE_CANNOTFIND_MDFILE_OR_EMPTY)
169
- end
170
- if mdstr.strip.empty?
171
- mes=%Q!#{mdfname} is empty!
172
- outputError(mes)
173
- exit(EXIT_CODE_MDFILE_IS_EMPTY)
174
- end
175
- mdstr
176
- end
177
-
178
- def checkAndExpandYamlfile(yamlfname, objx)
179
- size=File.size?(yamlfname)
180
- if size and size > 0
181
- puts File.mtime(yamlfname)
182
- strdata = File.read(yamlfname)
183
- else
184
- mes=%Q!Can not find #{yamlfname} or is empty!
185
- outputError(mes)
186
- exit(EXIT_CODE_CANNOTFIND_YAMLFILE_OR_EMPTY)
187
- end
188
-
189
- if strdata.strip.empty?
190
- mes=%Q!#{yamlfname} is empty!
191
- outputError(mes)
192
- exit(EXIT_CODE_YAMLFILE_IS_EMPTY)
193
- else
194
- puts Digest::MD5.hexdigest(strdata)
195
- #
196
- strdata2 = Erubis::Eruby.new(strdata).result(objx)
197
- end
198
-
199
- strdata2
200
- end
201
-
202
- def loadWithPattern1(data, erubyfname, erubystr)
203
- @erubies[erubyfname] ||= Erubis::Eruby.new(erubystr)
204
- [@erubies[erubyfname].result(data)]
205
- end
206
-
207
- def loadWithPattern2(data, erubyfname, erubystr)
208
- data.map{ |x|
209
- @erubies[erubyfname] ||= Erubis::Eruby.new(erubystr)
210
- @erubies[erubyfname].result(x)
211
- }
212
- end
213
-
214
- def loadWithPattern3(data, erubyfname, erubystr, dir)
215
- hs={}
216
- data.each do |k,v|
217
- if /items/.match(k)
218
- hs[k]=[]
219
- v.each do |v2|
220
- if /^path=(.*)/.match(v2)
221
- hs[k] << File.join(dir, $1)
222
- else
223
- hs[k] << v2
224
- end
225
- end
226
- else
227
- hs[k]=v
228
- end
229
- end
230
- @erubies[erubyfname] ||= Erubis::Eruby.new(erubystr)
231
- [@erubies[erubyfname].result(hs)]
232
31
  end
32
+ end
233
33
 
234
- def postProcess
235
- @output.close if @output
236
- @output = nil
237
- end
34
+ if opts["debug"]
35
+ mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0, :debug)
36
+ elsif opts["verbose"]
37
+ mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0, :verbose)
38
+ else
39
+ mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0)
238
40
  end
239
41
 
240
- opts = {}
241
- banner = "Usage: bundle exec ruby bin/makemdtab [--contest] [--debug] -o outfname -d datafname --y merge|replace -p pattern_one|pattern_two|pattern_three -s yamlfname [-a auxyamlfname] erubyfname [erubyfname2 *]"
242
- if ARGV.size == 0
42
+ unless opts["data"]
43
+ puts("Not specified -data")
243
44
  puts(banner)
244
- exit(EXIT_CODE_ARGV_SIZE)
45
+ exit(mes.ec("EXIT_CODE_ARGV_ERROR"))
245
46
  end
246
47
 
247
- Simpleoptparse::Simpleoptparse.parse(ARGV , opts , banner , Mdextab::VERSION , nil){ |parser|
248
- parser.on('--debug' ) {|x| opts["debug"] = true}
249
- parser.on('--contest' ) {|x| opts["kind"] = :contest}
250
- parser.on('-d value', '--data' ,'data file') {|x| opts["data"] = x}
251
- parser.on('-s value', '--setting') {|x| opts["setting"] = x}
252
- parser.on('-a [value]', '--auxsetting') {|x| opts["auxsetting"] = x}
253
- parser.on('-o value', '--output') {|x| opts["output"] = x}
254
- parser.on('-y value', '--yamlop') {|x|
255
- case x.upcase
256
- when /^MERGE/
257
- opts["yamlop"] = :MERGE
258
- when /^REPLACE/
259
- opts["yamlop"] = :REPLACE
260
- else
261
- # do nothing
262
- end
263
- }
264
- parser.on('-p value', '--dataop') {|x|
265
- case x.upcase
266
- when /^PATTERN_ONE/
267
- opts["dataop"] = :PATTERN_ONE
268
- when /^PATTERN_TWO/
269
- opts["dataop"] = :PATTERN_TWO
270
- when /^PATTERN_THREE/
271
- opts["dataop"] = :PATTERN_THREE
272
- when /^PATTERN_FOUR/
273
- opts["dataop"] = :PATTERN_FOUR
274
- else
275
- # do nothing
276
- end
277
- }
278
- }
279
-
280
- unless opts["output"] and opts["yamlop"] and opts["dataop"]
48
+ unless opts["output"]
49
+ puts("Not specified -oputut")
281
50
  puts(banner)
282
- puts "don't be specified -d output" unless opts["output"]
283
- puts "don't be specified -y value" unless opts["yamlop"]
284
- puts "don't be specified -p value" unless opts["dataop"]
285
- p ARGV
286
- p opts
287
- exit(EXIT_CODE_MISSING_REQUIRED_ARGUMENT)
51
+ exit(mes.ec("EXIT_CODE_ARGV_ERROR"))
288
52
  end
289
53
 
290
- puts "# makemdtab Start #"
291
- puts "|||||||||||| opts['output']=#{opts['output']}"
292
- puts "|||||||||||| ARGV=#{ARGV}"
293
- opts.each do |k,v|
294
- puts "|||||||||||| opts[#{k}]=#{v}"
54
+ opts["data"] = File.expand_path(opts["data"])
55
+ opts["output"] = File.expand_path(opts["output"])
56
+ opts["yaml"] = File.expand_path(opts["yaml"]) if opts["yaml"]
57
+
58
+ if opts["yaml"]
59
+ auxhs = Filex::Filex.checkAndLoadYamlfile(opts["yaml"], mes)
60
+ else
61
+ auxhs = {}
295
62
  end
296
63
 
297
- x=Makemdtab.new(opts, ARGV)
298
- x.makeMd()
64
+ x.makeMd2(opts["template"], auxhs)
299
65
  x.postProcess
300
- puts "# makemdtab End #"
301
- exit(EXIT_CODE_NORMAL_EXIT)
302
-
303
-
304
-
66
+ mes.outputInfo("# makemdtab End #")
67
+ exit(mes.ec("EXIT_CODE_NORMAL_EXIT"))
data/bin/mdextab CHANGED
@@ -1,28 +1,20 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'bundler/setup'
4
- require 'mdextab'
3
+ require "bundler/setup"
4
+ require "mdextab"
5
5
 
6
- require 'simpleoptparse'
6
+ require "simpleoptparse"
7
7
 
8
- opts = { }
8
+ opts = {}
9
9
  banner = "Usage: bundle exec ruby bin/mdextab in_md_fname out_md_fname settng_yaml auxiliary_setting_yaml"
10
10
 
11
- Simpleoptparse::Simpleoptparse.parse(ARGV , opts , banner , Mdextab::VERSION , nil){|parser|
12
- parser.on('-d', '--debug' ) {|x| opts["debug"] = true }
13
- }
11
+ Simpleoptparse::Simpleoptparse.parse(ARGV, opts, banner, Mdextab::VERSION, nil) do |parser|
12
+ parser.on("-d", "--debug") {|_x| opts["debug"] = true }
13
+ end
14
14
 
15
15
  fname = ARGV[0]
16
- oFname = ARGV[1]
17
- yamlFname = ARGV[2]
18
- auxiliaryYamlFname = ARGV[3]
19
- m = Mdextab::Mdextab.new(opts,fname,oFname,yamlFname,auxiliaryYamlFname)
20
- m.parse
21
- m.end
22
-
23
- puts "##### Mdextab fname=#{fname}"
24
- puts "##### Mdextab oFname=#{oFname}"
25
- puts "##### Mdextab yamlFname=#{yamlFname}"
26
- puts "##### Mdextab auxiliaryYamlFname=#{auxiliaryYamlFname}"
27
-
28
- exit(0)
16
+ o_fname = ARGV[1]
17
+ yaml_fname = ARGV[2]
18
+ opts["yaml_fname"] = yaml_fname
19
+ m = Mdextab::Mdextab.new(opts, fname, o_fname)
20
+ m.parse2(yaml_fname)
@@ -0,0 +1,157 @@
1
+ module Mdextab
2
+ class Layer
3
+ attr_accessor :return_from_nested_env, :cur_layer, :size
4
+
5
+ def initialize(mes, output)
6
+ @mes = mes
7
+ @output = output
8
+ @return_from_nested_env = false
9
+
10
+ @layer_struct = Struct.new(:table, :star, :cur_state, :fname, :lineno)
11
+ @cur_layer = nil
12
+ @layers = []
13
+ end
14
+
15
+ def cur_state=(val)
16
+ # raise if val.class != Symbol
17
+ @cur_layer.cur_state = val
18
+ end
19
+
20
+ def cur_state
21
+ raise if @cur_layer.cur_state.class != Symbol
22
+ @cur_layer.cur_state
23
+ end
24
+
25
+ def table
26
+ @cur_layer.table
27
+ end
28
+
29
+ def table=(val)
30
+ @cur_layer.table = val
31
+ end
32
+
33
+ def star=(val)
34
+ @cur_layer.star = val
35
+ end
36
+
37
+ def star
38
+ @cur_layer.star
39
+ end
40
+
41
+ def add_layer(fname, lineno, state=:START)
42
+ new_layer = @layer_struct.new(nil, nil, nil, fname, lineno)
43
+ @layers << new_layer
44
+ @size = @layers.size
45
+ # raise if state.class != Symbol
46
+ new_layer.cur_state = state
47
+ if @cur_layer
48
+ new_layer.star = @cur_layer.star
49
+ else
50
+ new_layer.star = false
51
+ end
52
+ @cur_layer = new_layer
53
+ end
54
+
55
+ def pop_prev_layer
56
+ tmp_ = @layers.pop
57
+ @size = @layers.size
58
+ @cur_layer = @layers.last
59
+
60
+ tmp_
61
+ end
62
+
63
+ def peek_prev_layer
64
+ return nil unless @layers.size > 1
65
+
66
+ @layers[@layers.size - 2]
67
+ end
68
+
69
+ def process_nested_table_start(token, lineno, fname)
70
+ if table.tbody.nil?
71
+ table.add_tbody(lineno)
72
+ end
73
+ @mes.output_debug("B process_nested_table_start 1 @cur_layer.table=#{@cur_layer.table.object_id} token.kind=#{token.kind} token.opt[:lineno]=#{token.opt[:lineno]} cur_state=#{@cur_layer.cur_state}")
74
+ add_layer(fname, lineno, :OUT_OF_TABLE)
75
+ @cur_layer.table = Table.new(token.opt[:lineno], @mes, token.opt[:attr])
76
+ @mes.output_debug("process_nested_table_start 3 token.kind=#{token.kind} cur_state=#{@cur_layer.cur_state}")
77
+ end
78
+
79
+ def process_table_end(token)
80
+ prev_layer = peek_prev_layer
81
+ if prev_layer
82
+ process_table_end_for_prev_env(token, prev_layer)
83
+ end
84
+ end
85
+
86
+ def process_table_end_for_prev_env(token, prev_layer)
87
+ tmp_table = @cur_layer.table
88
+ pop_prev_layer
89
+ @return_from_nested_env = true
90
+
91
+ case @cur_layer.cur_state
92
+ when :IN_TD
93
+ prev_layer.table.td_append(tmp_table, prev_layer.star)
94
+ when :IN_TD_NO_TBODY
95
+ prev_layer.table.td_append(tmp_table, prev_layer.star)
96
+ when :IN_TH
97
+ prev_layer.table.th_append(tmp_table, prev_layer.star)
98
+ when :IN_TH_NO_TBODY
99
+ prev_layer.table.th_append(tmp_table, prev_layer.star)
100
+ when :IN_TABLE
101
+ if prev_layer.table.nil?
102
+ @mes.output_debug("In process_nested_table_env_for_prev_env: table=nil token.kind=#{token.kind} token.opt[:lineno]=#{token.opt[:lineno]} cur_state=#{@cur_layer.cur_state}")
103
+ raise
104
+ end
105
+ prev_layer.table.add(tmp_table)
106
+ when :IN_TABLE_BODY
107
+ prev_layer.table.add(tmp_table)
108
+ when :START
109
+ @mes.output_debug("In process_nested_table_env_for_prev_env: table=nil token.kind=#{token.kind} token.opt[:lineno]=#{token.opt[:lineno]} cur_state=#{@cur_layer.cur_state}")
110
+ raise
111
+ else
112
+ v = prev_layer.cur_state || "nil"
113
+ @mes.output_fatal("E100 cur_state=#{v}")
114
+ @mes.output_fatal("table=#{prev_layer.table}")
115
+ @mes.output_fatal("IllegalState(#{@cur_layer.cur_state} in process_table_end(#{token})")
116
+ exit(@mes.ec("EXIT_CODE_TABLE_END"))
117
+ end
118
+ end
119
+
120
+ def check_layers(fname)
121
+ case @cur_layer.cur_state
122
+ when :OUT_OF_TABLE
123
+ if @layers.size > 1
124
+ @mes.output_fatal("illeagal nested env after parsing|:OUT_OF_TABLE")
125
+ @mes.output_fatal("@layers.size=#{@layers.size} :TABLE_START #{fname} #{table.lineno}")
126
+ @layers.map {|x| @mes.output_debug("== @layers.cur_state=#{x.cur_state} :TABLE_START #{fname} #{x.table.lineno}") }
127
+ @mes.output_debug("== table")
128
+ @mes.output_info(table)
129
+ exit(@mes.ec("EXIT_CODE_EXCEPTION"))
130
+ end
131
+ when :START
132
+ if @layers.size > 1
133
+ @mes.output_fatal("illeagal nested env after parsing|:START")
134
+ @mes.output_fatal("@layers.size=#{@layers.size}")
135
+ @layers.map {|x| @mes.output_error("== @layers.cur_state=#{x.cur_state} :TABLE_START #{fname} #{x.table.lineno}") }
136
+ @mes.output_error("== table")
137
+ @mes.output_error(table)
138
+ exit(@mes.ec("EXIT_CODE_EXCEPTION"))
139
+ end
140
+ else
141
+ @mes.output_fatal("illeagal state after parsing(@cur_layer.cur_state=#{@cur_layer.cur_state}|fname=#{fname}")
142
+ @mes.output_fatal("@layers.size=#{@layers.size}")
143
+ @mes.output_error("== cur_state=#{@cur_layer.cur_state}")
144
+ @layers.map {|x| @mes.output_error("== @layers.cur_state=#{x.cur_state} #{fname}:#{x.table.lineno}") }
145
+ @mes.output_error("")
146
+ exit(@mes.ec("EXIT_CODE_ILLEAG<AL_STATE"))
147
+ end
148
+ end
149
+
150
+ def debug(nth, token)
151
+ @mes.output_debug("***#{nth}")
152
+ @layers.each_with_index {|_x, ind| @mes.output_debug("@layers[#{ind}]=#{@layers[ind]}") }
153
+ @mes.output_debug("******#{nth}")
154
+ @mes.output_debug("Layer#debug 1 token.kind=#{token.kind} @layer.cur_state=#{@cur_layer.cur_state}")
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,119 @@
1
+ module Mdextab
2
+ require "digest"
3
+ require "pp"
4
+ require "filex"
5
+
6
+ class Makemdtab
7
+ def initialize(opts, eruby_variable_str, eruby_static_str, obj_by_yaml, mes=nil)
8
+ @yamlfiles = {}
9
+ @str_yamlfiles = {}
10
+ @str_mdfiles = {}
11
+ @str_erubyfiles = {}
12
+ @dataop = opts["dataop"]
13
+ @datayamlfname = opts["data"]
14
+ @eruby_variable_str = eruby_variable_str
15
+ @eruby_static_str = eruby_static_str
16
+ @outputfname = opts["output"]
17
+ @obj_by_yaml = obj_by_yaml
18
+
19
+ @exit_cannot_find_file = 1
20
+ @exit_cannot_write_file = 2
21
+
22
+ @mes = mes
23
+ unless @mes
24
+ if opts["debug"]
25
+ @mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0, :debug)
26
+ elsif opts["verbose"]
27
+ @mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0, :verbose)
28
+ else
29
+ @mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0)
30
+ end
31
+ end
32
+ @mes.add_exitcode("EXIT_CODE_ILLEGAL_DATAOP")
33
+ Filex::Filex.setup(@mes)
34
+
35
+ @output = @mes.exc_file_write(@outputfname) { File.open(@outputfname, "w") }
36
+ end
37
+
38
+ def self.create(opts, fname_variable, fname_static, root_settingfile, mes)
39
+ Filex::Filex.setup(mes)
40
+
41
+ unless File.exist?(opts["output"])
42
+ mes.output_fatal("Can't find #{opts['output']}")
43
+ exit(mes.ec("EXIT_CODE_CANNOT_FIND_FILE"))
44
+ end
45
+ obj_by_yaml = Filex::Filex.check_and_load_yamlfile(root_settingfile, mes)
46
+
47
+ str_variable = Filex::Filex.check_and_load_file(fname_variable, mes) if fname_variable
48
+ str_static = ["<% ", Filex::Filex.check_and_expand_file(fname_static, obj_by_yaml, mes), "%>"].join("\n") if fname_static
49
+
50
+ Makemdtab.new(opts, str_variable, str_static, obj_by_yaml, mes)
51
+ end
52
+
53
+ def make_md2(root_dir, templatefile=nil, auxhs={})
54
+ objx = @obj_by_yaml.merge(auxhs)
55
+ case @dataop
56
+ when :FILE_INCLUDE
57
+ array = load_file_include(root_dir, @datayamlfname, objx)
58
+ when :YAML_TO_MD
59
+ unless templatefile
60
+ @mes.output_fatal("Not specified templatefile")
61
+ exit(@mes.ec("EXIT_CODE_NOT_SPECIFIED_FILE"))
62
+ end
63
+ if templatefile.strip.empty?
64
+ @mes.output_fatal("Not specified templatefile")
65
+ exit(@mes.ec("EXIT_CODE_NOT_SPECIFIED_FILE"))
66
+ end
67
+
68
+ array = load_yaml_to_md(@datayamlfname, templatefile, objx)
69
+ else
70
+ array = []
71
+ end
72
+ array.map {|x| @mes.exc_file_write(@outputfname) { @output.puts(x) } }
73
+ end
74
+
75
+ def load_file_include(root_dir, datayamlfname, objx)
76
+ mdfname = datayamlfname
77
+ objy = { "parentDir" => "%q!" + root_dir + "!" }
78
+ eruby_exanpded_str = ""
79
+ if @eruby_variable_str
80
+ if @eruby_variable_str.empty?
81
+ eruby_exanpded_str = ""
82
+ else
83
+ eruby_exanpded_str = ["<% ", Filex::Filex.expand_str(@eruby_variable_str, objy, @mes), " %>"].join("\n")
84
+ end
85
+ end
86
+ mbstr = Filex::Filex.check_and_load_file(mdfname, @mes)
87
+ dx = [eruby_exanpded_str, @eruby_static_str, mbstr].join("\n")
88
+ if dx.strip.empty?
89
+ puts "empty mdfname=#{mdfname}"
90
+ else
91
+ array = [Filex::Filex.expand_str(dx, objx, @mes, { "mdfname" => mdfname })]
92
+ end
93
+
94
+ array
95
+ end
96
+
97
+ def load_yaml_to_md(datayamlfname, templatefile, objx)
98
+ @mes.output_debug("datayamlfname=#{datayamlfname}")
99
+ @mes.output_debug("objx=#{objx}")
100
+
101
+ objy = Filex::Filex.check_and_expand_yamlfile(datayamlfname, objx, @mes)
102
+ @mes.output_debug("objy=#{objy}")
103
+ @mes.output_debug("templatefile=#{templatefile}")
104
+
105
+ erubystr = Filex::Filex.check_and_load_file(templatefile, @mes)
106
+ @mes.output_debug("erubystr=#{erubystr}")
107
+ dx = [@eruby_static_str, erubystr].join("\n")
108
+ @mes.output_debug("dx=#{dx}")
109
+ array = [Filex::Filex.expand_str(dx, objy, @mes, { "datayamlfname" => datayamlfname, "templatefile" => templatefile })]
110
+
111
+ array
112
+ end
113
+
114
+ def post_process
115
+ @mes.exc_file_close(@outputfname) { @output&.close }
116
+ @output = nil
117
+ end
118
+ end
119
+ end