review 1.7.2 → 2.0.0.beta1
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/.rubocop.yml +1 -43
- data/.travis.yml +0 -9
- data/ChangeLog +0 -16
- data/Gemfile +1 -0
- data/README.rdoc +1 -1
- data/Rakefile +12 -1
- data/bin/review-check +21 -8
- data/bin/review-compile +15 -9
- data/bin/review-epubmaker-legacy +6 -6
- data/bin/review-index +13 -2
- data/bin/review-init +18 -12
- data/bin/review-preproc +14 -1
- data/bin/review-validate +1 -1
- data/bin/review-vol +13 -1
- data/doc/quickstart.ja.md +1 -1
- data/doc/quickstart.md +1 -1
- data/lib/epubmaker/content.rb +3 -3
- data/lib/epubmaker/epubcommon.rb +108 -91
- data/lib/epubmaker/epubv2.rb +67 -14
- data/lib/epubmaker/epubv3.rb +59 -25
- data/lib/epubmaker/producer.rb +1 -13
- data/lib/lineinput.rb +0 -48
- data/lib/review/book/base.rb +4 -12
- data/lib/review/book/compilable.rb +3 -1
- data/lib/review/book/index.rb +4 -4
- data/lib/review/builder.rb +54 -47
- data/lib/review/compiler.rb +4662 -326
- data/lib/review/compiler/literals_1_8.kpeg +19 -0
- data/lib/review/compiler/literals_1_8.rb +432 -0
- data/lib/review/compiler/literals_1_9.kpeg +22 -0
- data/lib/review/compiler/literals_1_9.rb +435 -0
- data/lib/review/configure.rb +8 -20
- data/lib/review/epubbuilder.rb +1 -1
- data/lib/review/epubmaker.rb +122 -52
- data/lib/review/ewbbuilder.rb +4 -4
- data/lib/review/exception.rb +1 -1
- data/lib/review/extentions.rb +1 -0
- data/lib/review/extentions/array.rb +25 -0
- data/lib/review/htmlbuilder.rb +286 -275
- data/lib/review/htmllayout.rb +0 -2
- data/lib/review/htmlutils.rb +4 -4
- data/lib/review/i18n.rb +2 -6
- data/lib/review/i18n.yml +1 -1
- data/lib/review/idgxmlbuilder.rb +239 -204
- data/lib/review/inaobuilder.rb +75 -73
- data/lib/review/latexbuilder.rb +265 -219
- data/lib/review/latexutils.rb +6 -6
- data/lib/review/layout.tex.erb +1 -1
- data/lib/review/location.rb +24 -0
- data/lib/review/markdownbuilder.rb +124 -79
- data/lib/review/node.rb +267 -0
- data/lib/review/pdfmaker.rb +92 -92
- data/lib/review/preprocessor.rb +51 -14
- data/lib/review/review.kpeg +724 -0
- data/lib/review/textbuilder.rb +1 -1
- data/lib/review/textutils.rb +24 -18
- data/lib/review/tocparser.rb +3 -3
- data/lib/review/tocprinter.rb +31 -8
- data/lib/review/topbuilder.rb +119 -111
- data/lib/review/unfold.rb +2 -2
- data/lib/review/version.rb +1 -1
- data/review.gemspec +2 -2
- data/rubocop-todo.yml +456 -0
- data/test/assets/test_template.tex +1 -1
- data/test/sample-book/src/config.yml +0 -1
- data/test/test.re +1 -1
- data/test/test_book.rb +4 -4
- data/test/test_book_chapter.rb +70 -0
- data/test/test_book_part.rb +1 -1
- data/test/test_builder.rb +6 -28
- data/test/test_compiler.rb +59 -14
- data/test/test_helper.rb +47 -4
- data/test/test_htmlbuilder.rb +104 -73
- data/test/test_i18n.rb +5 -3
- data/test/test_idgxmlbuilder.rb +5 -2
- data/test/test_inaobuilder.rb +4 -2
- data/test/test_latexbuilder.rb +18 -37
- data/test/test_lineinput.rb +25 -4
- data/test/test_markdownbuilder.rb +4 -22
- data/test/test_pdfmaker.rb +12 -11
- data/test/test_textutils.rb +0 -36
- data/test/test_topbuilder.rb +2 -0
- metadata +14 -28
- data/.rubocop_todo.yml +0 -605
- data/Dockerfile +0 -22
- data/doc/NEWS.ja.md +0 -362
- data/doc/NEWS.md +0 -366
- data/lib/review/htmltoc.rb +0 -45
- data/lib/review/template.rb +0 -21
- data/templates/html/layout-html5.html.erb +0 -17
- data/templates/html/layout-xhtml1.html.erb +0 -20
- data/templates/ncx/epubv2.ncx.erb +0 -11
- data/templates/opf/epubv2.opf.erb +0 -21
- data/templates/opf/epubv3.opf.erb +0 -18
- data/templates/xml/container.xml.erb +0 -6
- data/test/assets/test.xml.erb +0 -3
- data/test/sample-book/src/config-epub2.yml +0 -186
- data/test/test_configure.rb +0 -50
- data/test/test_htmltoc.rb +0 -32
- data/test/test_template.rb +0 -26
data/lib/review/latexutils.rb
CHANGED
@@ -17,18 +17,18 @@ module ReVIEW
|
|
17
17
|
module LaTeXUtils
|
18
18
|
|
19
19
|
METACHARS = {
|
20
|
-
'#'
|
21
|
-
"$"
|
20
|
+
'#' => '\#',
|
21
|
+
"$" => '\textdollar{}',
|
22
22
|
'%' => '\%',
|
23
23
|
'&' => '\&',
|
24
24
|
'{' => '\{',
|
25
25
|
'}' => '\}',
|
26
|
-
'_'
|
26
|
+
'_' => '\textunderscore{}',
|
27
27
|
'^' => '\textasciicircum{}',
|
28
28
|
'~' => '\textasciitilde{}',
|
29
29
|
'|' => '\textbar{}',
|
30
|
-
'<'
|
31
|
-
'>'
|
30
|
+
'<' => '\textless{}',
|
31
|
+
'>' => '\textgreater{}',
|
32
32
|
"\\" => '\reviewbackslash{}',
|
33
33
|
"-" => '{-}',
|
34
34
|
|
@@ -70,7 +70,7 @@ module ReVIEW
|
|
70
70
|
alias_method :escape, :escape_latex
|
71
71
|
|
72
72
|
def unescape_latex(str)
|
73
|
-
metachars_invert_re = Regexp.new(METACHARS_INVERT.keys.collect{|key|
|
73
|
+
metachars_invert_re = Regexp.new(METACHARS_INVERT.keys.collect{|key| Regexp.escape(key)}.join('|'))
|
74
74
|
str.gsub(metachars_invert_re) {|s|
|
75
75
|
METACHARS_INVERT[s] or raise "unknown trans char: #{s}"
|
76
76
|
}
|
data/lib/review/layout.tex.erb
CHANGED
@@ -250,7 +250,7 @@
|
|
250
250
|
<%= authors %>
|
251
251
|
\end{tabular}\par}%
|
252
252
|
\vfill
|
253
|
-
{\large <%= values["date"] %> <%= I18n.t("
|
253
|
+
{\large <%= values["date"] %> <%= I18n.t("version")%>\hspace{2zw}<%= I18n.t("published_by", values["prt"])%>\par}%
|
254
254
|
\vskip4zw\mbox{}
|
255
255
|
\end{center}%
|
256
256
|
\end{titlepage}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ReVIEW
|
2
|
+
class Location
|
3
|
+
def initialize(filename, compiler)
|
4
|
+
@filename = filename
|
5
|
+
@f = compiler
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :filename
|
9
|
+
|
10
|
+
def lineno
|
11
|
+
@f.current_line
|
12
|
+
end
|
13
|
+
|
14
|
+
def string
|
15
|
+
begin
|
16
|
+
"#{@filename}:#{self.lineno}"
|
17
|
+
rescue
|
18
|
+
"#{@filename}:nil"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
alias to_s string
|
23
|
+
end
|
24
|
+
end
|
@@ -21,117 +21,136 @@ module ReVIEW
|
|
21
21
|
end
|
22
22
|
private :builder_init_file
|
23
23
|
|
24
|
-
def
|
24
|
+
def blank_reset
|
25
25
|
@blank_seen = false
|
26
|
-
super
|
27
26
|
end
|
28
27
|
|
28
|
+
# def puts(str)
|
29
|
+
# @blank_seen = false
|
30
|
+
# "#{str}\n"
|
31
|
+
# end
|
32
|
+
|
29
33
|
def blank
|
30
|
-
|
34
|
+
buf = ""
|
35
|
+
unless @blank_seen
|
36
|
+
buf = "\n"
|
37
|
+
end
|
31
38
|
@blank_seen = true
|
39
|
+
buf
|
32
40
|
end
|
33
41
|
|
34
42
|
def headline(level, label, caption)
|
35
|
-
|
43
|
+
buf = ""
|
44
|
+
buf << blank
|
36
45
|
prefix = "#" * level
|
37
|
-
|
38
|
-
|
46
|
+
buf << "#{prefix} #{caption}\n"
|
47
|
+
blank_reset
|
48
|
+
buf << "\n"
|
49
|
+
buf
|
39
50
|
end
|
40
51
|
|
41
52
|
def quote(lines)
|
42
|
-
|
43
|
-
|
44
|
-
|
53
|
+
buf = ""
|
54
|
+
buf << blank
|
55
|
+
buf << lines.map{|line| line.chomp!;line.chomp!;"> #{line}"}.join("\n") << "\n"
|
56
|
+
blank_reset
|
57
|
+
buf << "\n"
|
58
|
+
buf
|
45
59
|
end
|
46
60
|
|
47
61
|
def paragraph(lines)
|
48
|
-
|
49
|
-
|
62
|
+
buf = lines.join << "\n"
|
63
|
+
blank_reset
|
64
|
+
buf << "\n"
|
65
|
+
buf
|
50
66
|
end
|
51
67
|
|
52
68
|
def list_header(id, caption, lang)
|
69
|
+
lang ||= ""
|
53
70
|
if get_chap.nil?
|
54
|
-
|
71
|
+
%Q[リスト#{@chapter.list(id).number} #{compile_inline(caption)}\n] + "```#{lang}\n"
|
55
72
|
else
|
56
|
-
|
73
|
+
%Q[リスト#{get_chap}.#{@chapter.list(id).number} #{compile_inline(caption)}\n] + "```#{lang}\n"
|
57
74
|
end
|
58
|
-
lang ||= ""
|
59
|
-
puts "```#{lang}"
|
60
75
|
end
|
61
76
|
|
62
77
|
def list_body(id, lines, lang)
|
78
|
+
buf = ""
|
63
79
|
lines.each do |line|
|
64
|
-
|
80
|
+
buf << detab(line) << "\n"
|
65
81
|
end
|
66
|
-
|
82
|
+
buf << '```' << "\n"
|
83
|
+
buf
|
67
84
|
end
|
68
85
|
|
69
86
|
def ul_begin
|
70
|
-
|
87
|
+
buf = ""
|
88
|
+
buf << blank if @ul_indent == 0
|
71
89
|
@ul_indent += 1
|
90
|
+
buf
|
72
91
|
end
|
73
92
|
|
74
93
|
def ul_item(lines)
|
75
|
-
|
94
|
+
blank_reset
|
95
|
+
" " * (@ul_indent - 1) + "* " + "#{lines.join}" + "\n"
|
76
96
|
end
|
77
97
|
|
78
98
|
def ul_item_begin(lines)
|
79
|
-
|
99
|
+
blank_reset
|
100
|
+
" " * (@ul_indent - 1) + "* " + "#{lines.join}" + "\n"
|
80
101
|
end
|
81
102
|
|
82
103
|
def ul_item_end
|
104
|
+
""
|
83
105
|
end
|
84
106
|
|
85
107
|
def ul_end
|
108
|
+
buf = ""
|
86
109
|
@ul_indent -= 1
|
87
|
-
blank if @ul_indent == 0
|
110
|
+
buf << blank if @ul_indent == 0
|
111
|
+
buf
|
88
112
|
end
|
89
113
|
|
90
114
|
def ol_begin
|
91
|
-
|
115
|
+
buf = ""
|
116
|
+
buf << blank
|
117
|
+
buf
|
92
118
|
end
|
93
119
|
|
94
120
|
def ol_item(lines, num)
|
95
|
-
|
121
|
+
buf = ""
|
122
|
+
buf << "#{num}. #{lines.join}" << "\n"
|
123
|
+
blank_reset
|
124
|
+
buf
|
96
125
|
end
|
97
126
|
|
98
127
|
def ol_end
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
def dl_begin
|
103
|
-
puts '<dl>'
|
104
|
-
end
|
105
|
-
|
106
|
-
def dt(line)
|
107
|
-
puts "<dt>#{line}</dt>"
|
108
|
-
end
|
109
|
-
|
110
|
-
def dd(lines)
|
111
|
-
puts "<dd>#{lines.join}</dd>"
|
112
|
-
end
|
113
|
-
|
114
|
-
def dl_end
|
115
|
-
puts '</dl>'
|
128
|
+
buf = ""
|
129
|
+
buf << blank
|
130
|
+
buf
|
116
131
|
end
|
117
132
|
|
118
133
|
def emlist(lines, caption = nil, lang = nil)
|
119
|
-
|
134
|
+
buf = ""
|
135
|
+
buf << blank
|
120
136
|
if caption
|
121
|
-
|
122
|
-
print "\n"
|
137
|
+
buf << caption << "\n"
|
123
138
|
end
|
124
139
|
lang ||= ""
|
125
|
-
|
140
|
+
buf << "```#{lang}\n"
|
141
|
+
blank_reset
|
126
142
|
lines.each do |line|
|
127
|
-
|
143
|
+
buf << detab(line) << "\n"
|
128
144
|
end
|
129
|
-
|
130
|
-
blank
|
145
|
+
buf << "```\n"
|
146
|
+
buf << blank
|
147
|
+
buf
|
131
148
|
end
|
132
149
|
|
133
150
|
def hr
|
134
|
-
|
151
|
+
buf << "----\n"
|
152
|
+
blank_reset
|
153
|
+
buf
|
135
154
|
end
|
136
155
|
|
137
156
|
def compile_href(url, label)
|
@@ -165,45 +184,60 @@ module ReVIEW
|
|
165
184
|
|
166
185
|
|
167
186
|
def image_image(id, caption, metric)
|
168
|
-
|
169
|
-
|
170
|
-
|
187
|
+
buf = ""
|
188
|
+
buf << blank
|
189
|
+
buf << ".path.sub(/\A\.\//, "")})" << "\n"
|
190
|
+
blank_reset
|
191
|
+
buf << blank
|
192
|
+
buf
|
171
193
|
end
|
172
194
|
|
173
195
|
def image_dummy(id, caption, lines)
|
174
|
-
|
196
|
+
buf = ""
|
197
|
+
buf << lines.join << "\n"
|
198
|
+
blank_reset
|
199
|
+
buf
|
175
200
|
end
|
176
201
|
|
177
202
|
def inline_img(id)
|
178
203
|
"#{I18n.t("image")}#{@chapter.image(id).number}"
|
179
204
|
rescue KeyError
|
180
205
|
error "unknown image: #{id}"
|
181
|
-
|
206
|
+
"[UnknownImage:#{id}]"
|
182
207
|
end
|
183
208
|
|
184
209
|
def indepimage(id, caption="", metric=nil)
|
185
|
-
|
186
|
-
|
187
|
-
|
210
|
+
buf = ""
|
211
|
+
buf << blank
|
212
|
+
buf << ".path.sub(/\A\.\//, "")})" << "\n"
|
213
|
+
blank_reset
|
214
|
+
buf << blank
|
215
|
+
buf
|
188
216
|
end
|
189
217
|
|
190
218
|
def pagebreak
|
191
|
-
|
219
|
+
buf = ""
|
220
|
+
buf << "{pagebreak}" << "\n"
|
221
|
+
buf
|
192
222
|
end
|
193
223
|
|
194
224
|
def image_ext
|
195
225
|
"jpg"
|
196
226
|
end
|
197
227
|
|
198
|
-
def cmd(lines)
|
199
|
-
|
228
|
+
def cmd(lines, caption = nil)
|
229
|
+
buf = ""
|
230
|
+
buf << "```shell-session" << "\n"
|
231
|
+
blank_reset
|
200
232
|
lines.each do |line|
|
201
|
-
|
233
|
+
buf << detab(line) << "\n"
|
202
234
|
end
|
203
|
-
|
235
|
+
buf << "```" << "\n"
|
236
|
+
buf
|
204
237
|
end
|
205
238
|
|
206
239
|
def table(lines, id = nil, caption = nil)
|
240
|
+
buf = ""
|
207
241
|
rows = []
|
208
242
|
sepidx = nil
|
209
243
|
lines.each_with_index do |line, idx|
|
@@ -213,52 +247,58 @@ module ReVIEW
|
|
213
247
|
sepidx ||= idx
|
214
248
|
next
|
215
249
|
end
|
216
|
-
rows.push line.strip.split(/\t+/).map
|
250
|
+
rows.push line.strip.split(/\t+/).map{|s| s.sub(/\A\./, '') }
|
217
251
|
end
|
218
252
|
rows = adjust_n_cols(rows)
|
219
253
|
|
220
254
|
begin
|
221
|
-
table_header
|
255
|
+
buf << table_header(id, caption) unless caption.nil?
|
222
256
|
rescue KeyError
|
223
257
|
error "no such table: #{id}"
|
224
258
|
end
|
225
|
-
table_begin
|
226
|
-
return if rows.empty?
|
259
|
+
buf << table_begin(rows.first.size)
|
260
|
+
return buf if rows.empty?
|
227
261
|
if sepidx
|
228
262
|
sepidx.times do
|
229
|
-
tr
|
263
|
+
buf << tr(rows.shift.map{|s| th(s) })
|
230
264
|
end
|
231
|
-
table_border
|
265
|
+
buf << table_border(rows.first.size)
|
232
266
|
rows.each do |cols|
|
233
|
-
tr
|
267
|
+
buf << tr(cols.map{|s| td(s) })
|
234
268
|
end
|
235
269
|
else
|
236
270
|
rows.each do |cols|
|
237
271
|
h, *cs = *cols
|
238
|
-
tr
|
272
|
+
tr([th(h)] + cs.map {|s| td(s) })
|
239
273
|
end
|
240
274
|
end
|
241
|
-
table_end
|
275
|
+
buf << table_end
|
276
|
+
buf
|
242
277
|
end
|
243
278
|
|
244
279
|
def table_header(id, caption)
|
280
|
+
buf = ""
|
245
281
|
if get_chap.nil?
|
246
|
-
|
282
|
+
buf << %Q[#{I18n.t("table")}#{I18n.t("format_number_header_without_chapter", [@chapter.table(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}] << "\n"
|
247
283
|
else
|
248
|
-
|
284
|
+
buf << %Q[#{I18n.t("table")}#{I18n.t("format_number_header", [get_chap, @chapter.table(id).number])}#{I18n.t("caption_prefix")}#{compile_inline(caption)}] << "\n"
|
249
285
|
end
|
250
|
-
|
286
|
+
blank_reset
|
287
|
+
buf << blank
|
288
|
+
buf
|
251
289
|
end
|
252
290
|
|
253
291
|
def table_begin(ncols)
|
292
|
+
""
|
254
293
|
end
|
255
294
|
|
256
295
|
def tr(rows)
|
257
|
-
|
296
|
+
"|#{rows.join("|")}|\n"
|
258
297
|
end
|
259
298
|
|
260
299
|
def table_border(ncols)
|
261
|
-
|
300
|
+
blank_reset
|
301
|
+
(0..ncols).map{"|"}.join(":--") + "\n"
|
262
302
|
end
|
263
303
|
|
264
304
|
def th(str)
|
@@ -270,12 +310,17 @@ module ReVIEW
|
|
270
310
|
end
|
271
311
|
|
272
312
|
def table_end
|
273
|
-
|
313
|
+
buf = ""
|
314
|
+
buf << blank
|
315
|
+
buf
|
274
316
|
end
|
275
317
|
|
276
318
|
def footnote(id, str)
|
277
|
-
|
278
|
-
|
319
|
+
buf = ""
|
320
|
+
buf << "[^#{id}]: #{compile_inline(str)}" << "\n"
|
321
|
+
blank_reset
|
322
|
+
buf << blank
|
323
|
+
buf
|
279
324
|
end
|
280
325
|
|
281
326
|
def inline_fn(id)
|
@@ -291,4 +336,4 @@ module ReVIEW
|
|
291
336
|
end
|
292
337
|
end
|
293
338
|
|
294
|
-
end
|
339
|
+
end # module ReVIEW
|
data/lib/review/node.rb
ADDED
@@ -0,0 +1,267 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module ReVIEW
|
4
|
+
class Node
|
5
|
+
attr_accessor :content
|
6
|
+
|
7
|
+
def to_raw
|
8
|
+
to_s_by(:to_raw)
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_doc
|
12
|
+
to_s_by(:to_doc)
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_s_by(meth)
|
16
|
+
if content.kind_of? String
|
17
|
+
@content
|
18
|
+
elsif content == nil
|
19
|
+
nil
|
20
|
+
elsif !content.kind_of? Array
|
21
|
+
@content.__send__(meth)
|
22
|
+
else
|
23
|
+
##@content.map(&meth).join("")
|
24
|
+
@content.map{|o| o.__send__(meth)}.join("")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_json(*args)
|
29
|
+
if content.kind_of? String
|
30
|
+
val = '"'+@content.gsub(/\"/,'\\"').gsub(/\n/,'\\n')+'"'
|
31
|
+
elsif content == nil
|
32
|
+
val = "null"
|
33
|
+
elsif !content.kind_of? Array
|
34
|
+
val = @content.to_json
|
35
|
+
else
|
36
|
+
val = "["+@content.map(&:to_json).join(",")+"]"
|
37
|
+
end
|
38
|
+
'{"ruleName":"' + self.class.to_s.sub(/ReVIEW::/,"").sub(/Node$/,"") + '",' +
|
39
|
+
"\"offset\":#{position.pos},\"line\":#{position.line},\"column\":#{position.col}," +
|
40
|
+
'"childNodes":' + val +
|
41
|
+
'}'
|
42
|
+
end
|
43
|
+
|
44
|
+
def inspect
|
45
|
+
self.to_json
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
class HeadlineNode < Node
|
51
|
+
|
52
|
+
def to_doc
|
53
|
+
content_str = super
|
54
|
+
cmd = @cmd ? @cmd.to_doc : nil
|
55
|
+
label = @label
|
56
|
+
@compiler.compile_headline(@level, cmd, label, content_str)
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_json
|
60
|
+
'{"ruleName":"' + self.class.to_s.sub(/ReVIEW::/,"").sub(/Node$/,"") + '",' +
|
61
|
+
%Q|"cmd":"#{@cmd.to_json}",|+
|
62
|
+
%Q|"label":"#{@label.to_json}",|+
|
63
|
+
"\"offset\":#{position.pos},\"line\":#{position.line},\"column\":#{position.col}," +
|
64
|
+
'"childNodes":' + @content.to_json + '}'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
class ParagraphNode < Node
|
69
|
+
|
70
|
+
def to_doc
|
71
|
+
#content = @content.map(&:to_doc)
|
72
|
+
content = super.split(/\n/)
|
73
|
+
@compiler.compile_paragraph(content)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class BlockElementNode < Node
|
78
|
+
|
79
|
+
def to_doc
|
80
|
+
# content_str = super
|
81
|
+
args = @args.map(&:to_doc)
|
82
|
+
if @content
|
83
|
+
content_lines = @content.map(&:to_doc)
|
84
|
+
else
|
85
|
+
content_lines = nil
|
86
|
+
end
|
87
|
+
@compiler.compile_command(@name, @args, content_lines, self)
|
88
|
+
end
|
89
|
+
|
90
|
+
def parse_args(*patterns)
|
91
|
+
patterns.map.with_index do |pattern, i|
|
92
|
+
if @args[i]
|
93
|
+
@args[i].__send__("to_#{pattern}")
|
94
|
+
else
|
95
|
+
nil
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class CodeBlockElementNode < Node
|
102
|
+
|
103
|
+
def to_doc
|
104
|
+
# content_str = super
|
105
|
+
args = @args.map(&:to_doc)
|
106
|
+
if @content
|
107
|
+
content_lines = raw_lines
|
108
|
+
else
|
109
|
+
content_lines = nil
|
110
|
+
end
|
111
|
+
@compiler.compile_command(@name, @args, content_lines, self)
|
112
|
+
end
|
113
|
+
|
114
|
+
def parse_args(*patterns)
|
115
|
+
patterns.map.with_index do |pattern, i|
|
116
|
+
if @args[i]
|
117
|
+
@args[i].__send__("to_#{pattern}")
|
118
|
+
else
|
119
|
+
nil
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def raw_lines
|
125
|
+
self.content.to_doc.split(/\n/)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
|
130
|
+
class InlineElementNode < Node
|
131
|
+
|
132
|
+
def to_raw
|
133
|
+
content_str = super
|
134
|
+
"@<#{@symbol.to_s}>{#{content_str}}"
|
135
|
+
end
|
136
|
+
|
137
|
+
def to_doc
|
138
|
+
#content_str = super
|
139
|
+
@compiler.compile_inline(@symbol, @content)
|
140
|
+
end
|
141
|
+
|
142
|
+
def to_json
|
143
|
+
'{"ruleName":"' + self.class.to_s.sub(/ReVIEW::/,"").sub(/Node$/,"") + '",' +
|
144
|
+
%Q|"symbol":"#{@symbol}",| +
|
145
|
+
"\"offset\":#{position.pos},\"line\":#{position.line},\"column\":#{position.col}," +
|
146
|
+
'"childNodes":[' + @content.map(&:to_json).join(",") + ']}'
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
class InlineElementContentNode < Node
|
151
|
+
end
|
152
|
+
|
153
|
+
class TextNode < Node
|
154
|
+
|
155
|
+
def to_raw
|
156
|
+
content_str = super
|
157
|
+
content_str.to_s
|
158
|
+
end
|
159
|
+
|
160
|
+
def to_doc
|
161
|
+
content_str = super
|
162
|
+
@compiler.compile_text(content_str)
|
163
|
+
end
|
164
|
+
|
165
|
+
def to_json(*args)
|
166
|
+
val = '"'+@content.gsub(/\"/,'\\"').gsub(/\n/,'\\n')+'"'
|
167
|
+
'{"ruleName":"' + self.class.to_s.sub(/ReVIEW::/,"").sub(/Node$/,"") + '",' +
|
168
|
+
"\"offset\":#{position.pos},\"line\":#{position.line},\"column\":#{position.col}," +
|
169
|
+
'"text":' + val + '}'
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
class NewLineNode < Node
|
174
|
+
|
175
|
+
def to_doc
|
176
|
+
""
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
class RawNode < Node
|
181
|
+
|
182
|
+
def to_doc
|
183
|
+
@compiler.compile_raw(@builder, @content.join(""))
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
class BracketArgNode < Node
|
188
|
+
end
|
189
|
+
|
190
|
+
class BraceArgNode < Node
|
191
|
+
end
|
192
|
+
|
193
|
+
class SinglelineCommentNode < Node
|
194
|
+
def to_doc
|
195
|
+
""
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
class SinglelineContentNode < Node
|
200
|
+
end
|
201
|
+
|
202
|
+
class UlistNode < Node
|
203
|
+
def to_doc
|
204
|
+
@compiler.compile_ulist(@content)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
class UlistElementNode < Node
|
209
|
+
def level=(level)
|
210
|
+
@level = level
|
211
|
+
end
|
212
|
+
|
213
|
+
def to_doc
|
214
|
+
@content.map(&:to_doc).join("")
|
215
|
+
end
|
216
|
+
|
217
|
+
def concat(elem)
|
218
|
+
@content << elem
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
class OlistNode < Node
|
223
|
+
def to_doc
|
224
|
+
@compiler.compile_olist(@content)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
class OlistElementNode < Node
|
229
|
+
def num=(num)
|
230
|
+
@num = num
|
231
|
+
end
|
232
|
+
|
233
|
+
def to_doc
|
234
|
+
@content.map(&:to_doc).join("")
|
235
|
+
end
|
236
|
+
|
237
|
+
def concat(elem)
|
238
|
+
@content << elem
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
class DlistNode < Node
|
243
|
+
def to_doc
|
244
|
+
@compiler.compile_dlist(@content)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
class DlistElementNode < Node
|
249
|
+
def to_doc
|
250
|
+
@content.map(&:to_doc).join("")
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
class DocumentNode < Node
|
255
|
+
end
|
256
|
+
|
257
|
+
class ColumnNode < Node
|
258
|
+
|
259
|
+
def to_doc
|
260
|
+
level = @level
|
261
|
+
label = @label
|
262
|
+
caption = @caption ? @caption.to_doc : nil
|
263
|
+
@compiler.compile_column(level, label, caption, @content)
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
end
|