review-retrovert 0.9.1 → 0.9.2
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/Gemfile.lock +3 -3
- data/lib/review/retrovert/cli.rb +2 -0
- data/lib/review/retrovert/converter.rb +102 -11
- data/lib/review/retrovert/version.rb +1 -1
- metadata +3 -4
- data/.travis.yml +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fdd00a05ee2fe184542575f75ff8b5f7541ea11ead119c28b1b00e00d38aeab8
|
|
4
|
+
data.tar.gz: 6a1dcf4eedabf43d6be0b8bf7814dc11d30d8798730a95e33ed6a95cda59173d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4f3748ae4c99d94ecb773de86501b720712f25381061055d42e12186f795775ad0a359e7c901b089fa804f82e9fb3d8506a17aeb693d51d14138a80a5b3a8256
|
|
7
|
+
data.tar.gz: 7126a6536e53cceb34e41c9b606d6974b336bd6afb8d6391a279db5ba16ba3b3939aea4b9efcda8a51c0a2221ef0f1226aa4849625e90cd8e25a2e5900d2299f
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
review-retrovert (0.
|
|
4
|
+
review-retrovert (0.9.2)
|
|
5
5
|
review (>= 3.2.0, < 4.0)
|
|
6
6
|
thor
|
|
7
7
|
|
|
@@ -60,7 +60,7 @@ GEM
|
|
|
60
60
|
ffi (1.13.1)
|
|
61
61
|
i18n (1.8.5)
|
|
62
62
|
concurrent-ruby (~> 1.0)
|
|
63
|
-
image_size (2.0
|
|
63
|
+
image_size (2.1.0)
|
|
64
64
|
middleware (0.1.0)
|
|
65
65
|
minitest (5.14.1)
|
|
66
66
|
multi_test (0.1.2)
|
|
@@ -74,7 +74,7 @@ GEM
|
|
|
74
74
|
image_size
|
|
75
75
|
rouge
|
|
76
76
|
rubyzip
|
|
77
|
-
rouge (3.
|
|
77
|
+
rouge (3.26.0)
|
|
78
78
|
rspec (3.9.0)
|
|
79
79
|
rspec-core (~> 3.9.0)
|
|
80
80
|
rspec-expectations (~> 3.9.0)
|
data/lib/review/retrovert/cli.rb
CHANGED
|
@@ -7,6 +7,8 @@ module ReVIEW
|
|
|
7
7
|
desc "convert {review_starter_configfile} {outdir}", "convert Re:VIEW Starter project to Re:VIEW project"
|
|
8
8
|
method_option "force", aliases: "f", desc: 'Force output', type: :boolean
|
|
9
9
|
method_option "strict", desc: 'Only process files registered in the catalog', type: :boolean
|
|
10
|
+
method_option "preproc", desc: 'Execute preproc after conversion', type: :boolean
|
|
11
|
+
method_option "tabwidth", desc: 'Preproc tabwidth option value', type: :numeric, default: 0
|
|
10
12
|
method_option "table-br-replace", desc: '@<br>{} in table replace string', type: :string, default: ''
|
|
11
13
|
method_option "table-empty-replace", desc: 'empty cell(.) in table replace string', type: :string, default: ' '
|
|
12
14
|
def convert(review_starter_configfile, outdir)
|
|
@@ -70,7 +70,11 @@ module ReVIEW
|
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
def replace_compatible_block_command_outline(content, command, new_command, option_count)
|
|
73
|
-
|
|
73
|
+
if option_count > 0
|
|
74
|
+
content.gsub!(/^\/\/#{command}(?<option>(\[[^\r\n]*?\]){0,#{option_count}})(\[[^\r\n]*\])*{(?<inner>.*?)\/\/}/m, "//#{new_command}\\k<option>{\\k<inner>//}")
|
|
75
|
+
else
|
|
76
|
+
content.gsub!(/^\/\/#{command}(\[[^\r\n]*\])*{(?<inner>.*?)\/\/}/m, "//#{new_command}{\\k<inner>//}")
|
|
77
|
+
end
|
|
74
78
|
end
|
|
75
79
|
|
|
76
80
|
def replace_compatible_block_command_to_outside(content, command, new_command, option_count, add_options="", new_body="")
|
|
@@ -105,22 +109,29 @@ module ReVIEW
|
|
|
105
109
|
content.gsub!(/@<#{command}>/, "@<#{new_command}>")
|
|
106
110
|
end
|
|
107
111
|
|
|
108
|
-
def
|
|
112
|
+
def replace_block_command_nested_boxed_article_i(content, box, depth)
|
|
109
113
|
found = false
|
|
110
114
|
content.dup.scan(/(^\/\/#{box})(\[[^\r\n]*?\])*(?:(\$)|(?:({)|(\|)))(.*?)(^\/\/)(?(3)(\$)|(?(4)(})|(\|)).*?[\r\n]+)/m) { |m|
|
|
111
115
|
matched = m[0..-1].join
|
|
112
116
|
inner = m[5]
|
|
117
|
+
# info depth
|
|
113
118
|
im = inner.match(/^\/\/(\w+)((\[.*?\])*)([$|{])/)
|
|
114
119
|
unless im.nil?
|
|
115
120
|
inner_cmd = im[1]
|
|
116
121
|
inner_open = im[4]
|
|
117
122
|
inner_opts = im[2]
|
|
118
|
-
|
|
123
|
+
first_opt_m = inner_opts.match(/^\[(.*?)\]/)
|
|
124
|
+
first_opt = ""
|
|
119
125
|
|
|
126
|
+
# is_commentout = false
|
|
120
127
|
is_commentout = true
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
128
|
+
if first_opt_m
|
|
129
|
+
first_opt_v = first_opt_m[1]
|
|
130
|
+
unless first_opt_v.empty?
|
|
131
|
+
if inner.match(/@<.*?>[$|{]#{first_opt}/)
|
|
132
|
+
is_commentout = false
|
|
133
|
+
first_opt = "\\[#{first_opt_v}\\]"
|
|
134
|
+
end
|
|
124
135
|
end
|
|
125
136
|
end
|
|
126
137
|
cmd_begin = m[0..4].join
|
|
@@ -129,10 +140,10 @@ module ReVIEW
|
|
|
129
140
|
if inner_open == m[2..4].join
|
|
130
141
|
# if same fence then cmd_end == inner_end
|
|
131
142
|
if is_commentout
|
|
132
|
-
inner.gsub!(/(^\/\/(\w
|
|
143
|
+
inner.gsub!(/(^\/\/(\w+(\[.*?\]|))*#{inner_open})/, '#@#\1')
|
|
133
144
|
content.gsub!(/#{Regexp.escape(matched)}/m, "#{cmd_begin}#{inner}#@##{cmd_end}")
|
|
134
145
|
else
|
|
135
|
-
imb = inner.match(/(\R((^\/\/\w+(\[.*?\])*)\s*)
|
|
146
|
+
imb = inner.match(/(\R((^\/\/\w+(\[.*?\])*)\s*)*^\/\/#{inner_cmd}#{first_opt}(\[.*?\])*#{inner_open}.*)\R/m)
|
|
136
147
|
to_out_block = imb[1]
|
|
137
148
|
inner.gsub!(/#{Regexp.escape(to_out_block)}/m, '')
|
|
138
149
|
content.gsub!(/#{Regexp.escape(matched)}/m, "#{cmd_begin}#{inner}#{cmd_end}#{to_out_block}")
|
|
@@ -140,10 +151,10 @@ module ReVIEW
|
|
|
140
151
|
else
|
|
141
152
|
close = inner_open == '{' ? '}' : inner_open
|
|
142
153
|
if is_commentout
|
|
143
|
-
inner.gsub!(/(^\/\/(\w
|
|
154
|
+
inner.gsub!(/(^\/\/(\w+(\[.*?\]|))*#{inner_open})(.*?)(^\/\/#{close})/m, '#@#\1\2#@#\3')
|
|
144
155
|
content.gsub!(/#{Regexp.escape(matched)}/m, "#{cmd_begin}#{inner}#{cmd_end}")
|
|
145
156
|
else
|
|
146
|
-
imb = inner.match(/\R((^\/\/\w+(\[.*?\])*)\s*)*^\/\/(
|
|
157
|
+
imb = inner.match(/\R((^\/\/\w+(\[.*?\])*)\s*)*^\/\/(#{inner_cmd})#{first_opt}(\[[^\r\n]*?\])*(?:(\$)|(?:({)|(\|)))(.*?)(^\/\/)(?(3)(\$)|(?(4)(})|(\|)))/m)
|
|
147
158
|
to_out_block = imb[0]
|
|
148
159
|
inner.gsub!(/#{Regexp.escape(to_out_block)}/m, '')
|
|
149
160
|
content.gsub!(/#{Regexp.escape(matched)}/m, "#{cmd_begin}#{inner}#{cmd_end}#{to_out_block}")
|
|
@@ -153,10 +164,14 @@ module ReVIEW
|
|
|
153
164
|
end
|
|
154
165
|
}
|
|
155
166
|
if found
|
|
156
|
-
|
|
167
|
+
replace_block_command_nested_boxed_article_i(content, box, depth+1)
|
|
157
168
|
end
|
|
158
169
|
end
|
|
159
170
|
|
|
171
|
+
def replace_block_command_nested_boxed_article(content, box)
|
|
172
|
+
replace_block_command_nested_boxed_article_i(content, box, 0)
|
|
173
|
+
end
|
|
174
|
+
|
|
160
175
|
def replace_block_command_nested_boxed_articles(content)
|
|
161
176
|
replace_block_command_nested_boxed_article(content, 'note')
|
|
162
177
|
replace_block_command_nested_boxed_article(content, 'memo')
|
|
@@ -263,11 +278,38 @@ module ReVIEW
|
|
|
263
278
|
end
|
|
264
279
|
end
|
|
265
280
|
|
|
281
|
+
def add_linkurl_footnote(content)
|
|
282
|
+
urls = {}
|
|
283
|
+
content.dup.scan(/(^.*)(@<href>{)(.*?)(,)(.*?)(})(.*)$/) { |m|
|
|
284
|
+
unless m[0].match(/^#@#/)
|
|
285
|
+
matched = m.join
|
|
286
|
+
prev = m[0]
|
|
287
|
+
url = m[2]
|
|
288
|
+
text = m[4]
|
|
289
|
+
post = m[6]
|
|
290
|
+
id = "link_auto_footnote#{urls.length}"
|
|
291
|
+
urls[id] = url
|
|
292
|
+
content.sub!(/#{matched}$/, "#{prev}@<href>{#{url},#{text}} @<fn>{#{id}} #{post}")
|
|
293
|
+
end
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
urls.each { |k,v|
|
|
297
|
+
content.sub!(/(@<href>{#{v},.*?} @<fn>{#{k}}.*?\R\R)/m, "\\1//footnote[#{k}][#{v}]\n")
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
urls.each { |k,v|
|
|
301
|
+
unless content.match(/\/\/footnote\[#{k}\]\[#{v}\]/)
|
|
302
|
+
content << "//footnote[#{k}][#{v}]\n"
|
|
303
|
+
end
|
|
304
|
+
}
|
|
305
|
+
end
|
|
306
|
+
|
|
266
307
|
def update_content(outdir, contentfile)
|
|
267
308
|
info contentfile
|
|
268
309
|
content = File.read(contentfile)
|
|
269
310
|
content.gsub!(/@<href>{(.*?)#.*?,(.*?)}/, '@<href>{\1,\2}')
|
|
270
311
|
content.gsub!(/@<href>{(.*?)#.*?}/, '@<href>{\1}')
|
|
312
|
+
linkurl_footnote = @config['starter']['linkurl_footnote']
|
|
271
313
|
# table 内の @ コマンドは不安定らしい
|
|
272
314
|
while !content.gsub!(/(\/\/table.*)@<br>{}(.*?\/\/})/m, "\\1#{@table_br_replace}\\2").nil? do
|
|
273
315
|
end
|
|
@@ -276,6 +318,7 @@ module ReVIEW
|
|
|
276
318
|
end
|
|
277
319
|
# Re:VIEW Starter commands
|
|
278
320
|
replace_compatible_block_command_outline(content, 'terminal', 'cmd', 1)
|
|
321
|
+
replace_compatible_block_command_outline(content, 'cmd', 'cmd', 0)
|
|
279
322
|
replace_compatible_block_command_to_outside(content, 'sideimage', 'image', 1, '[]')
|
|
280
323
|
replace_block_command_outline(content, 'abstract', 'lead', true)
|
|
281
324
|
delete_block_command(content, 'needvspace')
|
|
@@ -306,6 +349,10 @@ module ReVIEW
|
|
|
306
349
|
# special command
|
|
307
350
|
replace_sampleoutput(content)
|
|
308
351
|
|
|
352
|
+
if linkurl_footnote
|
|
353
|
+
add_linkurl_footnote(content)
|
|
354
|
+
end
|
|
355
|
+
|
|
309
356
|
# nested command
|
|
310
357
|
replace_block_command_nested_boxed_articles(content)
|
|
311
358
|
|
|
@@ -368,6 +415,45 @@ module ReVIEW
|
|
|
368
415
|
end
|
|
369
416
|
end
|
|
370
417
|
|
|
418
|
+
def preproc_content_files(outdir, pp, contentdir, contentfiles)
|
|
419
|
+
files = contentfiles.is_a?(String) ? contentfiles.split(/\R/) : contentfiles
|
|
420
|
+
files.each do |content|
|
|
421
|
+
contentpath = File.join(contentdir, content)
|
|
422
|
+
if File.exist?(contentpath)
|
|
423
|
+
info "preproc #{contentpath}"
|
|
424
|
+
buf = StringIO.new
|
|
425
|
+
pwd = Dir.pwd
|
|
426
|
+
Dir.chdir(outdir)
|
|
427
|
+
File.open(contentpath) { |f| pp.process(f, buf) }
|
|
428
|
+
Dir.chdir(pwd)
|
|
429
|
+
content = buf.string
|
|
430
|
+
content.gsub!(/^#[@]map.*$/, '')
|
|
431
|
+
File.write(contentpath, content)
|
|
432
|
+
end
|
|
433
|
+
end
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
def preproc_contents(outdir, options)
|
|
437
|
+
yamlfile = @config['catalogfile']
|
|
438
|
+
abspath = File.absolute_path(outdir)
|
|
439
|
+
contentdir = abspath
|
|
440
|
+
param = {}
|
|
441
|
+
param['tabwidth'] = options['tabwidth'].to_i
|
|
442
|
+
pp = ReVIEW::Preprocessor.new(ReVIEW::Repository.new(param), param)
|
|
443
|
+
|
|
444
|
+
if options['strict']
|
|
445
|
+
catalog = ReVIEW::Catalog.new(File.open(File.join(abspath, yamlfile)))
|
|
446
|
+
preproc_content_files(outdir, pp, contentdir, catalog.predef())
|
|
447
|
+
preproc_content_files(outdir, pp, contentdir, catalog.chaps())
|
|
448
|
+
preproc_content_files(outdir, pp, contentdir, catalog.appendix())
|
|
449
|
+
preproc_content_files(outdir, pp, contentdir, catalog.postdef())
|
|
450
|
+
else
|
|
451
|
+
# copy_contents(outdir)
|
|
452
|
+
contentsfiles = Pathname.glob(File.join(File.join(@basedir, @srccontentsdir), '*.re')).map(&:basename)
|
|
453
|
+
preproc_content_files(outdir, pp, contentdir, contentsfiles)
|
|
454
|
+
end
|
|
455
|
+
end
|
|
456
|
+
|
|
371
457
|
def clean_initial_project(outdir)
|
|
372
458
|
FileUtils.rm(File.join(outdir, 'config.yml'))
|
|
373
459
|
FileUtils.rm(File.join(outdir, 'catalog.yml'))
|
|
@@ -407,6 +493,11 @@ module ReVIEW
|
|
|
407
493
|
# updater.backup = false
|
|
408
494
|
updater.execute()
|
|
409
495
|
Dir.chdir(pwd)
|
|
496
|
+
|
|
497
|
+
if options['preproc']
|
|
498
|
+
info 'preproc'
|
|
499
|
+
preproc_contents(outdir, options)
|
|
500
|
+
end
|
|
410
501
|
end
|
|
411
502
|
|
|
412
503
|
def self.execute(yamlfile, outdir, options)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: review-retrovert
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- srz_zumix
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-01-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
@@ -74,7 +74,6 @@ files:
|
|
|
74
74
|
- ".gitignore"
|
|
75
75
|
- ".rspec"
|
|
76
76
|
- ".ruby-version"
|
|
77
|
-
- ".travis.yml"
|
|
78
77
|
- CHANGELOG.md
|
|
79
78
|
- Dockerfile
|
|
80
79
|
- Gemfile
|
|
@@ -196,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
196
195
|
- !ruby/object:Gem::Version
|
|
197
196
|
version: '0'
|
|
198
197
|
requirements: []
|
|
199
|
-
rubygems_version: 3.1.
|
|
198
|
+
rubygems_version: 3.1.4
|
|
200
199
|
signing_key:
|
|
201
200
|
specification_version: 4
|
|
202
201
|
summary: Re:VIEW Starter to Re:VIEW
|