mdextab 0.1.5 → 0.1.6
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.
- checksums.yaml +4 -4
- data/.gitmodules +0 -0
- data/.rspec +0 -0
- data/.rubocop.yml +0 -0
- data/.rubocop_todo.yml +0 -0
- data/.travis.yml +0 -0
- data/Gemfile +0 -0
- data/LICENSE.txt +0 -0
- data/README.md +0 -0
- data/Rakefile +0 -0
- data/lib/mdextab/layer.rb +98 -29
- data/lib/mdextab/makemdtab.rb +77 -20
- data/lib/mdextab/table.rb +47 -6
- data/lib/mdextab/tbody.rb +47 -13
- data/lib/mdextab/td.rb +41 -22
- data/lib/mdextab/th.rb +17 -0
- data/lib/mdextab/token.rb +64 -8
- data/lib/mdextab/tr.rb +15 -0
- data/lib/mdextab/version.rb +2 -1
- data/lib/mdextab.rb +92 -60
- data/mdextab.gemspec +0 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30954db83b3ff5d42198eb363617f1dd143bc753f602410d9f2accf108636ac1
|
4
|
+
data.tar.gz: 4482a475295a0d00705173c6bb1682486e3d74bfed580810362f6ab142080909
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16fa6d519c1570b4cf4243265601a4489eb6743827b7cd298c991d87b0b562416118439616550ff20cfcfad65cd9798840dba6cb1627dfb721473cc84aa70d26
|
7
|
+
data.tar.gz: cb837801ecbcc40b90d2b0d37eba3059dbf675e14bb3eeb0eafedaf013f78c5a8c83eda1befd2bdff76e7577bf54f93c8e5be33bb02bc9f5110dc6765f62de4b
|
data/.gitmodules
CHANGED
File without changes
|
data/.rspec
CHANGED
File without changes
|
data/.rubocop.yml
CHANGED
File without changes
|
data/.rubocop_todo.yml
CHANGED
File without changes
|
data/.travis.yml
CHANGED
File without changes
|
data/Gemfile
CHANGED
File without changes
|
data/LICENSE.txt
CHANGED
File without changes
|
data/README.md
CHANGED
File without changes
|
data/Rakefile
CHANGED
File without changes
|
data/lib/mdextab/layer.rb
CHANGED
@@ -1,43 +1,82 @@
|
|
1
1
|
module Mdextab
|
2
|
+
#
|
3
|
+
# 入れ子のTableにを管理するレイヤークラス
|
2
4
|
class Layer
|
3
|
-
|
4
|
-
|
5
|
+
# 入れ子のレイヤーからリターンしたかを示す
|
6
|
+
# @return [Boolean]
|
7
|
+
attr_accessor :return_from_nested_layer
|
8
|
+
# 現在のレイヤー
|
9
|
+
# @return [Layer]
|
10
|
+
attr_accessor :cur_layer
|
11
|
+
# レイヤーの階層数
|
12
|
+
# @return [Integer]
|
13
|
+
attr_accessor :size
|
14
|
+
|
15
|
+
#
|
16
|
+
# 初期化
|
17
|
+
#
|
18
|
+
# @param mes [Messagex] Messagexクラスのインスタンス
|
19
|
+
# @param output [IO] 出力先
|
5
20
|
def initialize(mes, output)
|
6
21
|
@mes = mes
|
7
22
|
@output = output
|
8
|
-
@
|
23
|
+
@return_from_nested_layer = false
|
9
24
|
|
10
25
|
@layer_struct = Struct.new(:table, :star, :cur_state, :fname, :lineno)
|
11
26
|
@cur_layer = nil
|
12
27
|
@layers = []
|
13
28
|
end
|
14
29
|
|
30
|
+
# @overload cur_state=(val)
|
31
|
+
# カレントレイヤーの状態を設定
|
32
|
+
# @param val [Symbol]
|
15
33
|
def cur_state=(val)
|
16
34
|
# raise if val.class != Symbol
|
17
35
|
@cur_layer.cur_state = val
|
18
36
|
end
|
19
37
|
|
38
|
+
# @overload cur_state
|
39
|
+
# カレントレイヤーの状態を設定
|
40
|
+
# @return [Symbol] 現在の状態
|
20
41
|
def cur_state
|
21
42
|
raise if @cur_layer.cur_state.class != Symbol
|
22
43
|
@cur_layer.cur_state
|
23
44
|
end
|
24
45
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
46
|
+
# @overload table=(val)
|
47
|
+
# カレントレイヤーのtableを設定
|
48
|
+
# @param val [Table] カレントレイヤーのtable
|
29
49
|
def table=(val)
|
30
50
|
@cur_layer.table = val
|
31
51
|
end
|
32
52
|
|
53
|
+
# @overload tablee=(val)
|
54
|
+
# カレントレイヤーのtableを取得
|
55
|
+
# @param val [Table] カレントレイヤーのtable
|
56
|
+
def table
|
57
|
+
@cur_layer.table
|
58
|
+
end
|
59
|
+
|
60
|
+
# @overload star=(val)
|
61
|
+
# カレントレイヤーのstarの存在の有無を設定
|
62
|
+
# @param val [Boolean] カレントレイヤーのstarの存在の有無 true:starが存在 false:startが存在しない
|
33
63
|
def star=(val)
|
34
64
|
@cur_layer.star = val
|
35
65
|
end
|
36
66
|
|
67
|
+
# @overload star=(val)
|
68
|
+
# カレントレイヤーのstarの存在の有無を取得
|
69
|
+
# @return [Boolean] カレントレイヤーのstaの存在の有無 true:starが存在 false:startが存在しない
|
37
70
|
def star
|
38
71
|
@cur_layer.star
|
39
72
|
end
|
40
73
|
|
74
|
+
#
|
75
|
+
# 新しいレイヤーの追加
|
76
|
+
#
|
77
|
+
# @param fname [String] 構文解析対象のMarkdownファイル名
|
78
|
+
# @param lineno [String] TABLE_STARTトークン出現行の行番号
|
79
|
+
# @return [Symbol] テーブル拡張向け構文解析での状態
|
41
80
|
def add_layer(fname, lineno, state=:START)
|
42
81
|
new_layer = @layer_struct.new(nil, nil, nil, fname, lineno)
|
43
82
|
@layers << new_layer
|
@@ -52,7 +91,11 @@ module Mdextab
|
|
52
91
|
@cur_layer = new_layer
|
53
92
|
end
|
54
93
|
|
55
|
-
|
94
|
+
#
|
95
|
+
# カレントレイヤーを取り出して返す
|
96
|
+
#
|
97
|
+
# @return [Layer] 取り出されたカレントレイヤー
|
98
|
+
def pop_layer
|
56
99
|
tmp_ = @layers.pop
|
57
100
|
@size = @layers.size
|
58
101
|
@cur_layer = @layers.last
|
@@ -60,63 +103,96 @@ module Mdextab
|
|
60
103
|
tmp_
|
61
104
|
end
|
62
105
|
|
106
|
+
#
|
107
|
+
# 1つ前のレイヤーを返す
|
108
|
+
#
|
109
|
+
# @return [Layer,nil] 1つ前のレイヤーまたはnil
|
110
|
+
# (1つ前のレイヤーが存在しない場合)
|
63
111
|
def peek_prev_layer
|
64
112
|
return nil unless @layers.size > 1
|
65
113
|
|
66
114
|
@layers[@layers.size - 2]
|
67
115
|
end
|
68
116
|
|
117
|
+
#
|
118
|
+
# 入れ子のTABLE_STARTトークンとトークン出現行の処理
|
119
|
+
#
|
120
|
+
# @param token [Token] 読み込んだトークン
|
121
|
+
# @param lineno [Integer] トークン出現行の行番号
|
122
|
+
# @param fname [String] 構文解析対象のMarkdownファイル名
|
123
|
+
# @return [void]
|
69
124
|
def process_nested_table_start(token, lineno, fname)
|
125
|
+
# TBODYトークンが出現する前にTABLE_STARTトークンが出現した場合、仮想的なTBODYトークンが出現したとみなす
|
70
126
|
if table.tbody.nil?
|
71
127
|
table.add_tbody(lineno)
|
72
128
|
end
|
73
129
|
@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}")
|
130
|
+
# 新しいレイヤーを追加して、それをカレントレイヤーとし、カレントレイヤーにTableを追加する
|
74
131
|
add_layer(fname, lineno, :OUT_OF_TABLE)
|
75
132
|
@cur_layer.table = Table.new(token.opt[:lineno], @mes, token.opt[:attr])
|
76
133
|
@mes.output_debug("process_nested_table_start 3 token.kind=#{token.kind} cur_state=#{@cur_layer.cur_state}")
|
77
134
|
end
|
78
135
|
|
136
|
+
#
|
137
|
+
# TABLE_ENDトークンの処理
|
138
|
+
#
|
139
|
+
# @param token [Token] 読み込んだトークン
|
140
|
+
# @return [void]
|
79
141
|
def process_table_end(token)
|
80
142
|
prev_layer = peek_prev_layer
|
81
|
-
|
143
|
+
retrun unless prev_layer
|
82
144
|
|
83
|
-
|
145
|
+
# 一つ前のレイヤーが存在すれば、入れ子のTABLE_ENDトークンとして処理する
|
146
|
+
process_table_end_for_prev_env(token)
|
84
147
|
end
|
85
148
|
|
86
|
-
|
149
|
+
#
|
150
|
+
# 入れ子のTABLE_ENDトークンの処理
|
151
|
+
#
|
152
|
+
# @param token [Token] 読み込んだトークン
|
153
|
+
# @return [void]
|
154
|
+
# @note tokenはデバッグ出力、エラー出力に使う
|
155
|
+
def process_table_end_for_prev_env(token)
|
87
156
|
tmp_table = @cur_layer.table
|
88
|
-
|
89
|
-
@
|
157
|
+
pop_layer
|
158
|
+
@return_from_nested_layer = true
|
90
159
|
|
160
|
+
# pop_layerを呼んだ後なので、カレントレイヤーはメソッド呼び出し時より一つ前のレイヤー
|
91
161
|
case @cur_layer.cur_state
|
92
162
|
when :IN_TD
|
93
|
-
|
163
|
+
@cur_layer.table.td_append(tmp_table, @cur_layer.star)
|
94
164
|
when :IN_TD_NO_TBODY
|
95
|
-
|
165
|
+
@cur_layer.table.td_append(tmp_table, @cur_layer.star)
|
96
166
|
when :IN_TH
|
97
|
-
|
167
|
+
@cur_layer.table.th_append(tmp_table, @cur_layer.star)
|
98
168
|
when :IN_TH_NO_TBODY
|
99
|
-
|
169
|
+
@cur_layer.table.th_append(tmp_table, @cur_layer.star)
|
100
170
|
when :IN_TABLE
|
101
|
-
if
|
171
|
+
if @cur_layer.table.nil?
|
102
172
|
@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
173
|
raise
|
104
174
|
end
|
105
|
-
|
175
|
+
@cur_layer.table.add(tmp_table)
|
106
176
|
when :IN_TABLE_BODY
|
107
|
-
|
177
|
+
@cur_layer.table.add(tmp_table)
|
108
178
|
when :START
|
109
179
|
@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
180
|
raise
|
111
181
|
else
|
112
|
-
v =
|
182
|
+
v = @cur_layer.cur_state || "nil"
|
113
183
|
@mes.output_fatal("E100 cur_state=#{v}")
|
114
|
-
@mes.output_fatal("table=#{
|
184
|
+
@mes.output_fatal("table=#{@cur_layer.table}")
|
115
185
|
@mes.output_fatal("IllegalState(#{@cur_layer.cur_state} in process_table_end(#{token})")
|
116
186
|
exit(@mes.ec("EXIT_CODE_TABLE_END"))
|
117
187
|
end
|
118
188
|
end
|
119
189
|
|
190
|
+
#
|
191
|
+
# 全レイヤーの状態検査
|
192
|
+
#
|
193
|
+
# @param fname [String] 構文解析対象のMarkdownファイル名
|
194
|
+
# @return [void]
|
195
|
+
# @note fnameはデバッグ出力、エラー出力に使う
|
120
196
|
def check_layers(fname)
|
121
197
|
case @cur_layer.cur_state
|
122
198
|
when :OUT_OF_TABLE
|
@@ -146,12 +222,5 @@ module Mdextab
|
|
146
222
|
exit(@mes.ec("EXIT_CODE_ILLEAG<AL_STATE"))
|
147
223
|
end
|
148
224
|
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
225
|
end
|
157
226
|
end
|
data/lib/mdextab/makemdtab.rb
CHANGED
@@ -3,27 +3,31 @@ module Mdextab
|
|
3
3
|
require "pp"
|
4
4
|
require "filex"
|
5
5
|
|
6
|
+
#
|
7
|
+
# テーブル拡張Markdown生成クラス
|
6
8
|
class Makemdtab
|
9
|
+
#
|
10
|
+
# 初期化
|
11
|
+
#
|
12
|
+
# @param opt [Hash] オプション
|
13
|
+
# @option opt [Symbol] :debug Messagexクラスのインスタンスに与えるデバッグモード
|
14
|
+
# @param eruby_variable_str [String] 2回の置き換えが必要なeRubyスクリプト
|
15
|
+
# @param eruby_static_str [String] 1回の置き換えが必要なeRubyスクリプト
|
16
|
+
# @param obj_by_yaml [Hash] eRubyスクリプト向け置換用ハッシュ
|
17
|
+
# @param mes [Messagex] Messagexクラスのインスタンス
|
7
18
|
def initialize(opts, eruby_variable_str, eruby_static_str, obj_by_yaml, mes=nil)
|
8
|
-
@
|
9
|
-
@
|
10
|
-
@str_mdfiles = {}
|
11
|
-
@str_erubyfiles = {}
|
12
|
-
@dataop = opts["dataop"]
|
13
|
-
@datayamlfname = opts["data"]
|
19
|
+
@dataop = opts[:dataop]
|
20
|
+
@datayamlfname = opts[:data]
|
14
21
|
@eruby_variable_str = eruby_variable_str
|
15
22
|
@eruby_static_str = eruby_static_str
|
16
|
-
@outputfname = opts[
|
23
|
+
@outputfname = opts[:output]
|
17
24
|
@obj_by_yaml = obj_by_yaml
|
18
25
|
|
19
|
-
@exit_cannot_find_file = 1
|
20
|
-
@exit_cannot_write_file = 2
|
21
|
-
|
22
26
|
@mes = mes
|
23
27
|
unless @mes
|
24
|
-
if opts[
|
28
|
+
if opts[:debug]
|
25
29
|
@mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0, :debug)
|
26
|
-
elsif opts[
|
30
|
+
elsif opts[:verbose]
|
27
31
|
@mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0, :verbose)
|
28
32
|
else
|
29
33
|
@mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0)
|
@@ -35,11 +39,22 @@ module Mdextab
|
|
35
39
|
@output = @mes.exc_file_write(@outputfname) { File.open(@outputfname, "w") }
|
36
40
|
end
|
37
41
|
|
42
|
+
#
|
43
|
+
# ファイルから生成(使われていない?)
|
44
|
+
#
|
45
|
+
# @param opt [Hash] オプション
|
46
|
+
# @option opt [String] :debug Messagexクラスのインスタンスに与えるデバッグモード
|
47
|
+
# @option opt [IO] :output 出力先IO
|
48
|
+
# @param fname_variable_str [String] 2回の置き換えが必要なeRubyスクリプトファイル名
|
49
|
+
# @param fname_static_str [String] 1回の置き換えが必要なeRubyスクリプトファイル名
|
50
|
+
# @param root_settingfile [String] eRubyスクリプト向け置換用YAML形式ファイル名
|
51
|
+
# @param mes [Messagex] Messagexクラスのインスタンス
|
52
|
+
# @retrun [Makemdtab]
|
38
53
|
def self.create(opts, fname_variable, fname_static, root_settingfile, mes)
|
39
54
|
Filex::Filex.setup(mes)
|
40
55
|
|
41
|
-
unless File.exist?(opts[
|
42
|
-
mes.output_fatal("Can't find #{opts[
|
56
|
+
unless File.exist?(opts[:output])
|
57
|
+
mes.output_fatal("Can't find #{opts[:output]}")
|
43
58
|
exit(mes.ec("EXIT_CODE_CANNOT_FIND_FILE"))
|
44
59
|
end
|
45
60
|
obj_by_yaml = Filex::Filex.check_and_load_yamlfile(root_settingfile, mes)
|
@@ -50,10 +65,19 @@ module Mdextab
|
|
50
65
|
Makemdtab.new(opts, str_variable, str_static, obj_by_yaml, mes)
|
51
66
|
end
|
52
67
|
|
68
|
+
#
|
69
|
+
# YAML形式ファイルからテーブル拡張Markdown形式ファイルを生成
|
70
|
+
#
|
71
|
+
# @param root_dir [String] ルートディレクト(templatefileが示す相対パスの起点)
|
72
|
+
# @param templatefile [String,nil] テーブル拡張Makrdown形式の変換元YAML形式ファイルへの相対パス
|
73
|
+
# @param auxhs [Hash] eRubyスクリプト向け置換用ハッシュ(@obj_by_yamlにマージする)
|
74
|
+
# @retrun [void]
|
53
75
|
def make_md2(root_dir, templatefile=nil, auxhs={})
|
76
|
+
# 補助的な置換用ハッシュを@obj_by_yamlにマージする
|
54
77
|
objx = @obj_by_yaml.merge(auxhs)
|
55
78
|
case @dataop
|
56
79
|
when :FILE_INCLUDE
|
80
|
+
# ハッシュobjxは、メソッドfileReadの実引数を、読み込むべきファイルの相対パスに変換する定義を含んでいる
|
57
81
|
array = load_file_include(root_dir, @datayamlfname, objx)
|
58
82
|
when :YAML_TO_MD
|
59
83
|
unless templatefile
|
@@ -64,7 +88,7 @@ module Mdextab
|
|
64
88
|
@mes.output_fatal("Not specified templatefile")
|
65
89
|
exit(@mes.ec("EXIT_CODE_NOT_SPECIFIED_FILE"))
|
66
90
|
end
|
67
|
-
|
91
|
+
# YAMLファイルを、eRubyスクリプトであるtemplatefileを用いてテーブル拡張Markdown形式に変換する
|
68
92
|
array = load_yaml_to_md(@datayamlfname, templatefile, objx)
|
69
93
|
else
|
70
94
|
array = []
|
@@ -72,45 +96,78 @@ module Mdextab
|
|
72
96
|
array.map {|x| @mes.exc_file_write(@outputfname) { @output.puts(x) } }
|
73
97
|
end
|
74
98
|
|
75
|
-
|
76
|
-
|
99
|
+
#
|
100
|
+
# eRubyスクリプト取り込み処理
|
101
|
+
#
|
102
|
+
# @param root_dir [String] ルートディレクト(eruby_fnameが示す相対パスの起点)
|
103
|
+
# @param eruby_fname [String] fileReadメソッド呼び出しを含むeRubyスクリプトファイル名
|
104
|
+
# @param objx [Hash] eRubyスクリプト向け置換用ハッシュ
|
105
|
+
# @retrun [Array<String>] 指定ファイルを取り込んで展開した結果の文字列の配列(ただし要素は1個のみ)
|
106
|
+
def load_file_include(root_dir, eruby_fname, objx)
|
107
|
+
# eruby_fnameはfileReadメソッド呼び出しを含むeRubyスクリプトファイル
|
108
|
+
# fileReadメソッドは、引数を読み込むべきファイルへのパスに変換して、ファイルを読み込む
|
109
|
+
|
110
|
+
# fileReadメソッドで参照するparentDirという変数に、root_dirの値を割り当てる
|
77
111
|
objy = { "parentDir" => "%q!" + root_dir + "!" }
|
112
|
+
# @eruby_variable_strにfileReadメソッドの定義が含まれる
|
78
113
|
eruby_exanpded_str = ""
|
79
114
|
if @eruby_variable_str
|
80
115
|
if @eruby_variable_str.empty?
|
81
116
|
eruby_exanpded_str = ""
|
82
117
|
else
|
118
|
+
# 変数parent_dirをobjyで定義された値に置換て、fileReadメソッドの定義を完成させる
|
119
|
+
# 置換して得られた文字列を、もう一度eRubyスクリプトにする
|
83
120
|
eruby_exanpded_str = ["<% ", Filex::Filex.expand_str(@eruby_variable_str, objy, @mes), " %>"].join("\n")
|
84
121
|
end
|
85
122
|
end
|
86
|
-
|
123
|
+
# fileReadメソッド呼び出しを含むeRubyスクリプトファイルを読み込む
|
124
|
+
mbstr = Filex::Filex.check_and_load_file(eruby_fname, @mes)
|
125
|
+
# fileReadメソッド定義とそれ以外のメソッド定義と読み込んだeRubuスクリプトを連結して一つのeRubyスクリプトにする
|
87
126
|
dx = [eruby_exanpded_str, @eruby_static_str, mbstr].join("\n")
|
88
127
|
if dx.strip.empty?
|
89
|
-
puts "empty
|
128
|
+
puts "empty eruby_fname=#{eruby_fname}"
|
90
129
|
else
|
91
|
-
|
130
|
+
# ハッシュobjxは、メソッドfileReadの実引数を、読み込むべきファイルの相対パスに変換する定義を含んでいる
|
131
|
+
# Filex::Filex.expand_strに渡すハッシュは、エラーメッセージに用いるためのものであり、eRubyスクリプトとは無関係である
|
132
|
+
array = [Filex::Filex.expand_str(dx, objx, @mes, { "eruby_fname" => eruby_fname })]
|
92
133
|
end
|
93
134
|
|
94
135
|
array
|
95
136
|
end
|
96
137
|
|
138
|
+
#
|
139
|
+
# eRubyスクリプトファイルでもあるYAML形式ファイルからテーブル拡張Markdown形式に変換
|
140
|
+
#
|
141
|
+
# @param datayamlfname [String] eRubyスクリプトファイルでもあるYAML形式ファイル
|
142
|
+
# @param templatefile [String] YAML形式をテーブル拡張Markdwon形式に変換するeRubyスクリプトファイル
|
143
|
+
# @param objx [Hash] eRubyスクリプト向け置換用ハッシュ
|
144
|
+
# @retrun [Array<String>] 変換されたテーブル拡張Markdwon形式の文字列の配列(ただし要素は1個のみ)
|
97
145
|
def load_yaml_to_md(datayamlfname, templatefile, objx)
|
98
146
|
@mes.output_debug("datayamlfname=#{datayamlfname}")
|
99
147
|
@mes.output_debug("objx=#{objx}")
|
100
148
|
|
149
|
+
# いったんeRubyスクリプトファイルとして読み込んで置換したあと、YAML形式として再度読み込み、Rubyのハッシュに変換する
|
101
150
|
objy = Filex::Filex.check_and_expand_yamlfile(datayamlfname, objx, @mes)
|
102
151
|
@mes.output_debug("objy=#{objy}")
|
103
152
|
@mes.output_debug("templatefile=#{templatefile}")
|
104
153
|
|
154
|
+
# YAML形式をテーブル拡張Markdwon形式に変換するeRubyスクリプトファイルを読み込む
|
105
155
|
erubystr = Filex::Filex.check_and_load_file(templatefile, @mes)
|
106
156
|
@mes.output_debug("erubystr=#{erubystr}")
|
157
|
+
# メソッド定義を含むeRubyスクリプトとtemplatefileを一つのeRubyスクリプトにする
|
107
158
|
dx = [@eruby_static_str, erubystr].join("\n")
|
108
159
|
@mes.output_debug("dx=#{dx}")
|
160
|
+
# eRubyスクリプトにdatayamlfnameの内容を置換用ハッシュとして適用して、テーブル拡張Markdown形式に変換する
|
161
|
+
# Filex::Filex.expand_strに渡すハッシュは、エラーメッセージに用いるためのものであり、eRubyスクリプトとは無関係である
|
109
162
|
array = [Filex::Filex.expand_str(dx, objy, @mes, { "datayamlfname" => datayamlfname, "templatefile" => templatefile })]
|
110
163
|
|
111
164
|
array
|
112
165
|
end
|
113
166
|
|
167
|
+
#
|
168
|
+
# 終了処理
|
169
|
+
#
|
170
|
+
# @return [void]
|
114
171
|
def post_process
|
115
172
|
@mes.exc_file_close(@outputfname) { @output&.close }
|
116
173
|
@output = nil
|
data/lib/mdextab/table.rb
CHANGED
@@ -1,11 +1,38 @@
|
|
1
1
|
require "forwardable"
|
2
2
|
|
3
3
|
module Mdextab
|
4
|
+
#
|
5
|
+
# Tableクラス
|
6
|
+
#
|
4
7
|
class Table
|
5
8
|
extend Forwardable
|
9
|
+
|
10
|
+
# @!method add_thお
|
11
|
+
# @see Tbody#add_th
|
12
|
+
# @!method add_td
|
13
|
+
# @see Tbody#add_td
|
14
|
+
# @!method td_append
|
15
|
+
# @see Tbody#td_append
|
16
|
+
# @!method th_append
|
17
|
+
# @see Tbody#th_append
|
18
|
+
# @!method add
|
19
|
+
# @see Tbody#add
|
20
|
+
def_delegators :@tbody, :add_th, :add_td, :td_append, :th_append, :add
|
21
|
+
|
6
22
|
def_delegators :@tbody, :add_th, :add_td, :td_append, :th_append, :add
|
7
|
-
attr_reader :lineno, :tbody
|
8
23
|
|
24
|
+
# @return 入力Markdownファイル中のTABLEトークン出現行
|
25
|
+
attr_reader :lineno
|
26
|
+
|
27
|
+
# @return TABLE中のTBODYトークン出現行
|
28
|
+
attr_reader :tbody
|
29
|
+
|
30
|
+
#
|
31
|
+
# 初期化
|
32
|
+
#
|
33
|
+
# @param lineno [Integer] TABLE_STARTトークンの出現行の行番号
|
34
|
+
# @param mes [Messagex] Messagexクラスのインスタンス
|
35
|
+
# @param sttr [String] TABLE_STARTトークンの属性
|
9
36
|
def initialize(lineno, mes, attr=nil)
|
10
37
|
@lineno = lineno
|
11
38
|
@attr = attr
|
@@ -13,22 +40,36 @@ module Mdextab
|
|
13
40
|
@mes = mes
|
14
41
|
end
|
15
42
|
|
43
|
+
#
|
44
|
+
# tbodyの追加
|
45
|
+
#
|
46
|
+
# @param lineno [Integer] TBODY_STARTトークンまたは暗黙のtbodyの出現に係るトークンの出現行の行番号
|
47
|
+
# @return [void]
|
16
48
|
def add_tbody(lineno)
|
17
49
|
@tbody = Tbody.new(lineno, @mes)
|
18
50
|
end
|
19
51
|
|
52
|
+
#
|
53
|
+
# tbodyの終了処理
|
54
|
+
#
|
55
|
+
# @return [void]
|
20
56
|
def tbody_end
|
21
|
-
@tbody.
|
22
|
-
end
|
23
|
-
|
24
|
-
def end
|
25
|
-
table_end
|
57
|
+
@tbody.finish
|
26
58
|
end
|
27
59
|
|
60
|
+
#
|
61
|
+
# tableの終了処理
|
62
|
+
#
|
63
|
+
# @return (see #to_s)
|
28
64
|
def table_end
|
29
65
|
to_s
|
30
66
|
end
|
31
67
|
|
68
|
+
#
|
69
|
+
# tableの文字列化
|
70
|
+
#
|
71
|
+
# @param debug [Symbol] デバッグ用フラグ true: デバッグ情報を付加する false: デバッグ情報を付加しない
|
72
|
+
# @return [String] HTMLのTABLEタグとして文字列化したもの
|
32
73
|
def to_s(debug=false)
|
33
74
|
if @attr
|
34
75
|
if debug
|
data/lib/mdextab/tbody.rb
CHANGED
@@ -1,7 +1,25 @@
|
|
1
1
|
module Mdextab
|
2
|
+
#
|
3
|
+
# TBODYトークン対応クラス
|
2
4
|
class Tbody
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
# @return [Integer] TBODYトークン出現行の行番号
|
3
8
|
attr_reader :lineno
|
4
9
|
|
10
|
+
# @!method td_append
|
11
|
+
# @see Td#add
|
12
|
+
def_delegator :@td, :add, :td_append
|
13
|
+
|
14
|
+
# @!method th_append
|
15
|
+
# @see Th#add
|
16
|
+
def_delegator :@th, :add, :th_append
|
17
|
+
|
18
|
+
#
|
19
|
+
# 初期化
|
20
|
+
#
|
21
|
+
# @param fname [String] 構文解析対象のMarkdownファイル名
|
22
|
+
# @param lineno [String] TBODYトークン出現行の行番号
|
5
23
|
def initialize(lineno, mes)
|
6
24
|
@array = []
|
7
25
|
@tr = nil
|
@@ -11,7 +29,17 @@ module Mdextab
|
|
11
29
|
@mes = mes
|
12
30
|
end
|
13
31
|
|
32
|
+
#
|
33
|
+
# THの追加
|
34
|
+
#
|
35
|
+
# @param lineno [String] THトークン出現行の行番号
|
36
|
+
# @param content [String] THトークンのコンテンツ
|
37
|
+
# @param nth [Integer] THトークンの出現順番
|
38
|
+
# @param attr [String] THトークンの属性
|
39
|
+
# @param condense [Boolean] 文字列化方法 true:改行を含めない false:改行を含める
|
40
|
+
# @return [void]
|
14
41
|
def add_th(lineno, content, nth, attr, condense)
|
42
|
+
# TRトークンが出現せずにTHトークンが出現したら、仮想的なTRトークンが出現したとみなす
|
15
43
|
if nth == 1
|
16
44
|
@tr = Tr.new(lineno)
|
17
45
|
@array << @tr
|
@@ -21,8 +49,18 @@ module Mdextab
|
|
21
49
|
@tr.add(@th)
|
22
50
|
end
|
23
51
|
|
52
|
+
#
|
53
|
+
# TDの追加
|
54
|
+
#
|
55
|
+
# @param lineno [String] TDトークン出現行の行番号
|
56
|
+
# @param content [String] TDトークンのコンテンツ
|
57
|
+
# @param nth [Integer] TDトークンの出現順番
|
58
|
+
# @param attr [String] TDトークンの属性
|
59
|
+
# @param condense [Boolean] 文字列化方法 true:改行を含めない false:改行を含める
|
60
|
+
# @return [void]
|
24
61
|
def add_td(lineno, content, nth, attr, condense)
|
25
62
|
@mes.output_debug("content=#{content}|nth=#{nth}|attr=#{attr}")
|
63
|
+
# TRトークンが出現せずにTDトークンが出現したら、仮想的なTDトークンが出現したとみなす
|
26
64
|
if nth == 1
|
27
65
|
@tr = Tr.new(lineno)
|
28
66
|
@array << @tr
|
@@ -32,22 +70,18 @@ module Mdextab
|
|
32
70
|
@tr.add(@td)
|
33
71
|
end
|
34
72
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
def
|
40
|
-
@th.add(content, condense)
|
41
|
-
end
|
42
|
-
|
43
|
-
def add(cont)
|
44
|
-
@array << cont
|
45
|
-
end
|
46
|
-
|
47
|
-
def end
|
73
|
+
#
|
74
|
+
# TBODYの追加終了
|
75
|
+
#
|
76
|
+
# @return [void]
|
77
|
+
def finish
|
48
78
|
@tr = nil
|
49
79
|
end
|
50
80
|
|
81
|
+
#
|
82
|
+
# tbodyの文字列化
|
83
|
+
#
|
84
|
+
# @return [String] HTMLのTBODYタグとして文字列化したもの
|
51
85
|
def to_s
|
52
86
|
["<tbody>", @array.map(&:to_s), "</tbody>"].join("\n")
|
53
87
|
end
|
data/lib/mdextab/td.rb
CHANGED
@@ -1,31 +1,50 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
module Mdextab
|
2
|
+
#
|
3
|
+
# TDトークン対応クラス
|
4
|
+
class Td
|
5
|
+
#
|
6
|
+
# 初期化
|
7
|
+
#
|
8
|
+
# @param lineno [String] TDトークン出現行の行番号
|
9
|
+
# @param attr [String] TDトークンの属性
|
10
|
+
def initialize(lineno, attr=nil)
|
11
|
+
@lineno = lineno
|
12
|
+
@attr = attr
|
13
|
+
@content = ""
|
14
|
+
end
|
7
15
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
16
|
+
#
|
17
|
+
# TDトークンのコンテンツ追加
|
18
|
+
#
|
19
|
+
# @param content [String] TDトークンのコンテンツ
|
20
|
+
# @param condense [Boolean] 文字列化方法 true:改行を含めない false:改行を含める
|
21
|
+
# @return [void]
|
22
|
+
def add(content, condnese)
|
23
|
+
if condnese
|
24
|
+
if @content
|
25
|
+
if @contnet.match?(/^\s*$/)
|
26
|
+
@content = content.to_s
|
27
|
+
else
|
28
|
+
@content += content.to_s
|
29
|
+
end
|
13
30
|
else
|
14
|
-
@content
|
31
|
+
@content = content.to_s
|
15
32
|
end
|
16
|
-
|
17
|
-
@content = content.
|
33
|
+
elsif content
|
34
|
+
@content = [@content, content].join("\n")
|
18
35
|
end
|
19
|
-
elsif content
|
20
|
-
@content = [@content, content].join("\n")
|
21
36
|
end
|
22
|
-
end
|
23
37
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
38
|
+
#
|
39
|
+
# tdの文字列化
|
40
|
+
#
|
41
|
+
# @return [String] HTMLのTDタグとして文字列化したもの
|
42
|
+
def to_s
|
43
|
+
if @attr.nil?
|
44
|
+
%Q(<td>#{@content}</td>)
|
45
|
+
else
|
46
|
+
%Q(<td #{@attr}>#{@content}</td>)
|
47
|
+
end
|
29
48
|
end
|
30
49
|
end
|
31
50
|
end
|
data/lib/mdextab/th.rb
CHANGED
@@ -1,11 +1,24 @@
|
|
1
1
|
module Mdextab
|
2
|
+
#
|
3
|
+
# THトークン対応クラス
|
2
4
|
class Th
|
5
|
+
#
|
6
|
+
# 初期化
|
7
|
+
#
|
8
|
+
# @param lineno [String] THトークン出現行の行番号
|
9
|
+
# @param attr [String] THトークンの属性
|
3
10
|
def initialize(lineno, attr=nil)
|
4
11
|
@lineno = lineno
|
5
12
|
@attr = attr
|
6
13
|
@content = ""
|
7
14
|
end
|
8
15
|
|
16
|
+
#
|
17
|
+
# THトークンのコンテンツ追加
|
18
|
+
#
|
19
|
+
# @param content [String] THトークンのコンテンツ
|
20
|
+
# @param condense [Boolean] 文字列化方法 true:改行を含めない false:改行を含める
|
21
|
+
# @return [void]
|
9
22
|
def add(content, condense)
|
10
23
|
if condense
|
11
24
|
if @content
|
@@ -22,6 +35,10 @@ module Mdextab
|
|
22
35
|
end
|
23
36
|
end
|
24
37
|
|
38
|
+
#
|
39
|
+
# thの文字列化
|
40
|
+
#
|
41
|
+
# @return [String] HTMLのTHタグとして文字列化したもの
|
25
42
|
def to_s
|
26
43
|
if @attr.nil?
|
27
44
|
%Q(<th>#{@content}</th>)
|
data/lib/mdextab/token.rb
CHANGED
@@ -1,17 +1,44 @@
|
|
1
1
|
module Mdextab
|
2
|
+
#
|
3
|
+
# Tokenクラス
|
2
4
|
class Token
|
3
|
-
|
5
|
+
# @return [Symbol] トークンの種類
|
6
|
+
attr_reader :kind
|
7
|
+
# @return [Hash] トークンのオプション
|
8
|
+
attr_reader :opt
|
4
9
|
|
10
|
+
#
|
11
|
+
# 初期化
|
12
|
+
#
|
13
|
+
# @param mes [Messagex] Messagexクラスのインスタンス
|
5
14
|
def initialize(mes)
|
6
15
|
@mes = mes
|
7
16
|
@token_struct = Struct.new(:kind, :opt)
|
8
17
|
end
|
9
18
|
|
19
|
+
#
|
20
|
+
# トークンの生成
|
21
|
+
#
|
22
|
+
# @param kind [Symbol] 生成するトークンの種類
|
23
|
+
# @param opt [Hash] 生成するトークンのオプション設定
|
24
|
+
# @option opt [String] :content トークンの内容
|
25
|
+
# @option opt [Integer] :lineno トークン出現行の行番号
|
26
|
+
# @option opt [Integer] :nth ":"の並び文字列長
|
27
|
+
# @option opt [String,nil] :attr トークンの属性またはnil(属性が存在しない場合)
|
28
|
+
# @option opt [Integer] :lineno トークン出現行の行番号
|
29
|
+
# @return [Struct] 生成されたトークン
|
10
30
|
def create_token(kind, opt={})
|
11
31
|
@token_struct.new(kind, opt)
|
12
32
|
end
|
13
33
|
|
14
|
-
|
34
|
+
#
|
35
|
+
# TABLE_STARTトークンの取得
|
36
|
+
#
|
37
|
+
# @param line [String] 現在行
|
38
|
+
# @param lineno [Integer] 現在行の行番号
|
39
|
+
# @return [Struct,nil] 生成されたトークンまたはnil(トークンが存在しない場合)
|
40
|
+
# @note TABLE_STARTトークンが存在するかもしれないと判断されたときに呼ばれる
|
41
|
+
def get_token_table_start(line, lineno)
|
15
42
|
if /^\s*<table>\s*$/.match?(line)
|
16
43
|
ret = create_token(:TABLE_START, { lineno: lineno })
|
17
44
|
elsif (m = /^\s*<table\s+(.+)>\s*$/.match(line))
|
@@ -22,7 +49,14 @@ module Mdextab
|
|
22
49
|
ret
|
23
50
|
end
|
24
51
|
|
25
|
-
|
52
|
+
#
|
53
|
+
# TBODY_STARTトークンの取得
|
54
|
+
#
|
55
|
+
# @param line [String] 現在行
|
56
|
+
# @param lineno [Integer] 現在行の行番号
|
57
|
+
# @return [Struct,nil] 生成されたトークンまたはnil(トークンが存在しない場合)
|
58
|
+
# @note TBODY_STARTトークンが存在するかもしれないと判断されたときに呼ばれる
|
59
|
+
def get_token_tbody_start(line, lineno)
|
26
60
|
if /^\s*<tbody>\s*$/.match?(line)
|
27
61
|
ret = create_token(:TBODY_START, { lineno: lineno })
|
28
62
|
else
|
@@ -31,7 +65,16 @@ module Mdextab
|
|
31
65
|
ret
|
32
66
|
end
|
33
67
|
|
34
|
-
|
68
|
+
#
|
69
|
+
# 先頭が:で始まる場合の適切なトークンの取得
|
70
|
+
#
|
71
|
+
# @param line [String] 現在行
|
72
|
+
# @param lineno [Integer] 現在行の行番号
|
73
|
+
# @param nth [Integer] 並んでいる:の個数
|
74
|
+
# @param cont [String] 現在行の中の:の並びを区切り文字列とした場合の右側の部分
|
75
|
+
# @return [Struct,nil] 生成されたトークンまたはnil(トークンが存在しない場合)
|
76
|
+
# @note 先頭が:のときに呼ばれる
|
77
|
+
def get_token_colon_start(line, lineno, nth, cont)
|
35
78
|
if (m = /^th(.*)/.match(cont))
|
36
79
|
cont2 = m[1]
|
37
80
|
if (m2 = /^\s(.*)/.match(cont2))
|
@@ -61,7 +104,14 @@ module Mdextab
|
|
61
104
|
ret
|
62
105
|
end
|
63
106
|
|
64
|
-
|
107
|
+
#
|
108
|
+
# TABLE_ENDトークンの取得
|
109
|
+
#
|
110
|
+
# @param line [String] 現在行
|
111
|
+
# @param lineno [Integer] 現在行の行番号
|
112
|
+
# @return [Struct,nil] 生成されたトークンまたはnil(トークンが存在しない場合)
|
113
|
+
# @note TABLE_ENDトークンが存在するかもしれないと判断されたときに呼ばれる
|
114
|
+
def get_token_table_end(line, lineno)
|
65
115
|
if %r{^\s*</table>\s*$}.match?(line)
|
66
116
|
ret = create_token(:TABLE_END, { lineno: lineno })
|
67
117
|
else
|
@@ -70,6 +120,12 @@ module Mdextab
|
|
70
120
|
ret
|
71
121
|
end
|
72
122
|
|
123
|
+
#
|
124
|
+
# トークンの取得
|
125
|
+
#
|
126
|
+
# @param line [String] 現在行
|
127
|
+
# @param lineno [Integer] 現在行の行番号
|
128
|
+
# @return [Struct,nil] 生成されたトークンまたはnil(トークンが存在しない場合)
|
73
129
|
def get_token(line, lineno)
|
74
130
|
case line
|
75
131
|
when /^\*S(.+)$/
|
@@ -79,13 +135,13 @@ module Mdextab
|
|
79
135
|
content = Regexp.last_match(1)
|
80
136
|
ret = create_token(:STAR_END, { content: content, lineno: lineno })
|
81
137
|
when /^\s*<table/
|
82
|
-
ret =
|
138
|
+
ret = get_token_table_start(line, lineno)
|
83
139
|
when /^\s*<tbody/
|
84
|
-
ret =
|
140
|
+
ret = get_token_tbody_start(line, lineno)
|
85
141
|
when /^\s*(\:+)(.*)$/
|
86
142
|
nth = Regexp.last_match(1).size
|
87
143
|
cont = Regexp.last_match(2)
|
88
|
-
ret =
|
144
|
+
ret = get_token_colon_start(line, lineno, nth, cont)
|
89
145
|
when %r{^\s*</table}
|
90
146
|
ret = get_token_end_table(line, lineno)
|
91
147
|
when %r{^\s*</tbody}
|
data/lib/mdextab/tr.rb
CHANGED
@@ -1,14 +1,29 @@
|
|
1
1
|
module Mdextab
|
2
|
+
#
|
3
|
+
# TRトークン対応クラス
|
2
4
|
class Tr
|
5
|
+
#
|
6
|
+
# 初期化
|
7
|
+
#
|
8
|
+
# @param lineno [String] TRトークン出現行の行番号
|
3
9
|
def initialize(lineno)
|
4
10
|
@lineno = lineno
|
5
11
|
@array = []
|
6
12
|
end
|
7
13
|
|
14
|
+
#
|
15
|
+
# TRトークンのコンテンツ追加
|
16
|
+
#
|
17
|
+
# @param content [String] TRトークンのコンテンツ
|
18
|
+
# @return [void]
|
8
19
|
def add(cont)
|
9
20
|
@array << cont
|
10
21
|
end
|
11
22
|
|
23
|
+
#
|
24
|
+
# trの文字列化
|
25
|
+
#
|
26
|
+
# @return [String] HTMLのTRタグとして文字列化したもの
|
12
27
|
def to_s
|
13
28
|
["<tr>", @array.map(&:to_s), "</tr>"].join("\n")
|
14
29
|
end
|
data/lib/mdextab/version.rb
CHANGED
data/lib/mdextab.rb
CHANGED
@@ -8,7 +8,7 @@ module Mdextab
|
|
8
8
|
class Error < StandardError; end
|
9
9
|
|
10
10
|
#
|
11
|
-
# MarkDown
|
11
|
+
# MarkDownテーブル拡張クラス
|
12
12
|
#
|
13
13
|
class Mdextab
|
14
14
|
require "mdextab/version"
|
@@ -28,26 +28,26 @@ module Mdextab
|
|
28
28
|
|
29
29
|
#
|
30
30
|
# 初期化
|
31
|
-
#
|
32
|
-
# @param [
|
33
|
-
# @
|
34
|
-
# @param [
|
31
|
+
#
|
32
|
+
# @param opt [Hash] オプション
|
33
|
+
# @option opt [Symbol] :debug Messagexクラスのインスタンスに与えるデバッグモード
|
34
|
+
# @param fname [String] 入力Markdownファイル名
|
35
|
+
# @param o_fname [String] 出力Markdownファイル名
|
36
|
+
# @param mes [Messagex] Messagexクラスのインスタンス
|
35
37
|
def initialize(opt, fname, o_fname, mes=nil)
|
36
38
|
@fname = fname
|
37
39
|
@o_fname = o_fname
|
38
40
|
|
39
41
|
@mes = mes
|
40
42
|
unless @mes
|
41
|
-
@mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0, opt[
|
43
|
+
@mes = Messagex::Messagex.new("EXIT_CODE_NORMAL_EXIT", 0, opt[:debug])
|
42
44
|
@mes.register_ecx
|
43
45
|
end
|
44
46
|
|
45
47
|
@mes.add_exitcode("EXIT_CODE_NEXT_STATE")
|
46
48
|
@mes.add_exitcode("EXIT_CODE_NIL")
|
47
49
|
@mes.add_exitcode("EXIT_CODE_EXCEPTION")
|
48
|
-
@mes.add_exitcode("EXIT_CODE_TABLE_END")
|
49
50
|
@mes.add_exitcode("EXIT_CODE_UNKNOWN")
|
50
|
-
@mes.add_exitcode("EXIT_CODE_ILLEAGAL_STATE")
|
51
51
|
|
52
52
|
Filex::Filex.setup(@mes)
|
53
53
|
|
@@ -71,6 +71,7 @@ module Mdextab
|
|
71
71
|
#
|
72
72
|
# テーブル拡張向け構文解析用状態遷移テーブルの設定
|
73
73
|
#
|
74
|
+
# @return [void]
|
74
75
|
def set_state
|
75
76
|
@states = {
|
76
77
|
START: { TABLE_START: :IN_TABLE, ELSE: :OUT_OF_TABLE, STAR_START: :START, STAR_END: :START },
|
@@ -86,7 +87,9 @@ module Mdextab
|
|
86
87
|
|
87
88
|
#
|
88
89
|
# テーブル拡張向け構文解析
|
89
|
-
#
|
90
|
+
#
|
91
|
+
# @param hash [Hash] eRubyスクリプト向け置換用ハッシュ
|
92
|
+
# @return [void]
|
90
93
|
def parse(hash)
|
91
94
|
lineno = 0
|
92
95
|
@layer.add_layer(@fname, lineno)
|
@@ -103,7 +106,6 @@ module Mdextab
|
|
103
106
|
else
|
104
107
|
@mes.output_debug("(script)#{__LINE__}| @layer.cur_state=#{@layer.cur_state}")
|
105
108
|
end
|
106
|
-
# debug_envs(5, token)
|
107
109
|
|
108
110
|
@layer.cur_state = process_one_line(@layer.cur_state, token, line, lineno)
|
109
111
|
unless @layer.cur_state
|
@@ -119,7 +121,9 @@ module Mdextab
|
|
119
121
|
|
120
122
|
#
|
121
123
|
# テーブル拡張向け構文解析
|
122
|
-
#
|
124
|
+
#
|
125
|
+
# @param yamlfname [String] eRubyスクリプト向け置換用データファイル名(YAML形式)
|
126
|
+
# @return [void]
|
123
127
|
def parse2(yamlfname)
|
124
128
|
hs = Filex::Filex.check_and_load_yamlfile(yamlfname, @mes)
|
125
129
|
parse(hs)
|
@@ -127,9 +131,11 @@ module Mdextab
|
|
127
131
|
|
128
132
|
#
|
129
133
|
# テーブル拡張向け構文解析での次の状態を得る
|
130
|
-
#
|
131
|
-
# @param [
|
132
|
-
# @param [String]
|
134
|
+
#
|
135
|
+
# @param token [Token] 読み込んだトークン
|
136
|
+
# @param line [String] トークン出現行
|
137
|
+
# @param lineno [String] トークン出現行の行番号
|
138
|
+
# @return [Symbol] テーブル拡張向け構文解析での次の状態
|
133
139
|
def get_next_state(token, line, lineno)
|
134
140
|
kind = token.kind
|
135
141
|
@mes.output_debug("#{__LINE__}|@layer.cur_state=#{@layer.cur_state} #{@layer.cur_state.class}")
|
@@ -160,7 +166,9 @@ module Mdextab
|
|
160
166
|
|
161
167
|
#
|
162
168
|
# トークンELSEに対応する行の出力
|
163
|
-
#
|
169
|
+
#
|
170
|
+
# @param str [String] トークンELSEに対応する行
|
171
|
+
# @return [void]
|
164
172
|
def output_in_else(str)
|
165
173
|
if @layer.star
|
166
174
|
if str.match?(/^\s*$/)
|
@@ -175,7 +183,9 @@ module Mdextab
|
|
175
183
|
|
176
184
|
#
|
177
185
|
# テーブルのTHタグの一部として、トークンELSEに対応する行を追加
|
178
|
-
#
|
186
|
+
#
|
187
|
+
# @param str [String] トークンELSEに対応する行
|
188
|
+
# @return [void]
|
179
189
|
def table_th_append_in_else(str)
|
180
190
|
if @layer.star
|
181
191
|
if str.match?(/^\s*$/)
|
@@ -190,7 +200,9 @@ module Mdextab
|
|
190
200
|
|
191
201
|
#
|
192
202
|
# テーブルのTDタグの一部として、トークンELSEに対応する行を追加
|
193
|
-
#
|
203
|
+
#
|
204
|
+
# @param str [String] トークンELSEに対応する行
|
205
|
+
# @return [void]
|
194
206
|
def table_td_append_in_else(str)
|
195
207
|
if @layer.star
|
196
208
|
if str.match?(/^\s*$/)
|
@@ -204,10 +216,12 @@ module Mdextab
|
|
204
216
|
end
|
205
217
|
|
206
218
|
#
|
207
|
-
# START
|
208
|
-
#
|
209
|
-
# @param [
|
210
|
-
# @param [String]
|
219
|
+
# START状態でのトークンとトークン出現行の処理
|
220
|
+
#
|
221
|
+
# @param token [Token] 読み込んだトークン
|
222
|
+
# @param line [String] トークン出現行
|
223
|
+
# @param lineno [String] トークン出現行の行番号
|
224
|
+
# @return [void]
|
211
225
|
def process_one_line_for_start(token, line, lineno)
|
212
226
|
case token.kind
|
213
227
|
when :TABLE_START
|
@@ -229,10 +243,12 @@ module Mdextab
|
|
229
243
|
end
|
230
244
|
|
231
245
|
#
|
232
|
-
# OUT_OF_TABLE
|
233
|
-
#
|
234
|
-
# @param [
|
235
|
-
# @param [String]
|
246
|
+
# OUT_OF_TABLE状態でのトークンとトークン出現行の処理
|
247
|
+
#
|
248
|
+
# @param token [Token] 読み込んだトークン
|
249
|
+
# @param line [String] トークン出現行
|
250
|
+
# @param lineno [String] トークン出現行の行番号
|
251
|
+
# @return [void]
|
236
252
|
def process_one_line_for_out_of_table(token, line, lineno)
|
237
253
|
case token.kind
|
238
254
|
when :TABLE_START
|
@@ -257,20 +273,24 @@ module Mdextab
|
|
257
273
|
|
258
274
|
#
|
259
275
|
# TABLE_END状態でのトークン処理
|
260
|
-
#
|
276
|
+
#
|
277
|
+
# @param token [Token] 読み込んだトークン
|
278
|
+
# @return [void]
|
261
279
|
def process_one_line_for_table_end(token)
|
262
280
|
@layer.process_table_end(token)
|
263
|
-
return if @layer.
|
281
|
+
return if @layer.return_from_nested_layer
|
264
282
|
|
265
|
-
@mes.output_debug("1 - process_one_line_table_end cur_state=#{@layer.cur_state} @
|
266
|
-
@mes.exc_file_write(@o_fname) { @output.puts(@layer.table.
|
283
|
+
@mes.output_debug("1 - process_one_line_table_end cur_state=#{@layer.cur_state} @return_from_nested_layer~#{@layer.return_from_nested_layer}")
|
284
|
+
@mes.exc_file_write(@o_fname) { @output.puts(@layer.table.table_end) }
|
267
285
|
end
|
268
286
|
|
269
287
|
#
|
270
|
-
# IN_TABLE
|
271
|
-
#
|
272
|
-
# @param [
|
273
|
-
# @param [String]
|
288
|
+
# IN_TABLE状態でのトークンとトークン出現行の処理
|
289
|
+
#
|
290
|
+
# @param token [Token] 読み込んだトークン
|
291
|
+
# @param line [String] トークン出現行
|
292
|
+
# @param lineno [String] トークン出現行の行番号
|
293
|
+
# @return [void]
|
274
294
|
def process_one_line_for_in_table(token, line, lineno)
|
275
295
|
case token.kind
|
276
296
|
when :TBODY_START
|
@@ -302,10 +322,12 @@ module Mdextab
|
|
302
322
|
end
|
303
323
|
|
304
324
|
#
|
305
|
-
# IN_TABLE_BODY
|
306
|
-
#
|
307
|
-
# @param [
|
308
|
-
# @param [String]
|
325
|
+
# IN_TABLE_BODY状態でのトークンとトークン出現行の処理
|
326
|
+
#
|
327
|
+
# @param token [Token] 読み込んだトークン
|
328
|
+
# @param line [String] トークン出現行
|
329
|
+
# @param lineno [String] トークン出現行の行番号
|
330
|
+
# @return [void]
|
309
331
|
def process_one_line_for_in_table_body(token, line, lineno)
|
310
332
|
case token.kind
|
311
333
|
when :TH
|
@@ -316,7 +338,7 @@ module Mdextab
|
|
316
338
|
when :ELSE
|
317
339
|
output_in_else(token.opt[:content])
|
318
340
|
when :TABLE_START
|
319
|
-
@layer.process_nested_table_start(token, lineno, @
|
341
|
+
@layer.process_nested_table_start(token, lineno, @fname)
|
320
342
|
when :TBODY_END
|
321
343
|
true # don't call process_table_end(token)
|
322
344
|
when :TABLE_END
|
@@ -335,10 +357,12 @@ module Mdextab
|
|
335
357
|
end
|
336
358
|
|
337
359
|
#
|
338
|
-
# IN_TH
|
339
|
-
#
|
340
|
-
# @param [
|
341
|
-
# @param [String]
|
360
|
+
# IN_TH状態でのトークンとトークン出現行の処理
|
361
|
+
#
|
362
|
+
# @param token [Token] 読み込んだトークン
|
363
|
+
# @param line [String] トークン出現行
|
364
|
+
# @param lineno [String] トークン出現行の行番号
|
365
|
+
# @return [void]
|
342
366
|
def process_one_line_for_in_th(token, line, lineno)
|
343
367
|
case token.kind
|
344
368
|
when :ELSE
|
@@ -363,10 +387,12 @@ module Mdextab
|
|
363
387
|
end
|
364
388
|
|
365
389
|
#
|
366
|
-
# IN_TH_NO_TBODY
|
367
|
-
#
|
368
|
-
# @param [
|
369
|
-
# @param [String]
|
390
|
+
# IN_TH_NO_TBODY状態でのトークンとトークン出現行の処理
|
391
|
+
#
|
392
|
+
# @param token [Token] 読み込んだトークン
|
393
|
+
# @param line [String] トークン出現行
|
394
|
+
# @param lineno [String] トークン出現行の行番号
|
395
|
+
# @return [void]
|
370
396
|
def process_one_line_for_in_th_no_tbody(token, line, lineno)
|
371
397
|
case token.kind
|
372
398
|
when :ELSE
|
@@ -391,10 +417,12 @@ module Mdextab
|
|
391
417
|
end
|
392
418
|
|
393
419
|
#
|
394
|
-
# IN_TD
|
395
|
-
#
|
396
|
-
# @param [
|
397
|
-
# @param [String]
|
420
|
+
# IN_TD状態でのトークンとトークン出現行の処理
|
421
|
+
#
|
422
|
+
# @param token [Token] 読み込んだトークン
|
423
|
+
# @param line [String] トークン出現行
|
424
|
+
# @param lineno [String] トークン出現行の行番号
|
425
|
+
# @return [void]
|
398
426
|
def process_one_line_for_in_td(token, line, lineno)
|
399
427
|
case token.kind
|
400
428
|
when :ELSE
|
@@ -421,10 +449,12 @@ module Mdextab
|
|
421
449
|
end
|
422
450
|
|
423
451
|
#
|
424
|
-
# IN_TD_NO_TBODY
|
425
|
-
#
|
426
|
-
# @param [
|
427
|
-
# @param [String]
|
452
|
+
# IN_TD_NO_TBODY状態でのトークンとトークン出現行の処理
|
453
|
+
#
|
454
|
+
# @param token [Token] 読み込んだトークン
|
455
|
+
# @param line [String] トークン出現行
|
456
|
+
# @param lineno [String] トークン出現行の行番号
|
457
|
+
# @return [void]
|
428
458
|
def process_one_line_for_in_td_no_tbody(token, line, lineno)
|
429
459
|
case token.kind
|
430
460
|
when :ELSE
|
@@ -453,13 +483,15 @@ module Mdextab
|
|
453
483
|
end
|
454
484
|
|
455
485
|
#
|
456
|
-
#
|
486
|
+
# 現在の状態に対するトークンとトークン出現行の処理
|
487
|
+
#
|
457
488
|
# @param [Symbol] current_state 現在の状態
|
458
|
-
# @param [
|
459
|
-
# @param [String] line
|
460
|
-
# @param [String] lineno
|
489
|
+
# @param [Token] token 読み込んだトークン
|
490
|
+
# @param [String] line トークン出現行
|
491
|
+
# @param [String] lineno トークン出現行の行番号
|
492
|
+
# @return [void] テーブル拡張向け構文解析での次の状態
|
461
493
|
def process_one_line(current_state, token, line, lineno)
|
462
|
-
@layer.
|
494
|
+
@layer.return_from_nested_layer = false
|
463
495
|
|
464
496
|
case current_state
|
465
497
|
when :START
|
@@ -484,7 +516,7 @@ module Mdextab
|
|
484
516
|
exit(@mes.ec("EXIT_CODE_UNKNOWN"))
|
485
517
|
end
|
486
518
|
|
487
|
-
if @layer.
|
519
|
+
if @layer.return_from_nested_layer
|
488
520
|
next_state = @layer.cur_state
|
489
521
|
else
|
490
522
|
next_state = get_next_state(token, line, lineno)
|
data/mdextab.gemspec
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mdextab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yasuo kominami
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|