review 3.1.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-win.yml +45 -0
  3. data/.github/workflows/ruby.yml +27 -0
  4. data/.rubocop.yml +161 -34
  5. data/.travis.yml +16 -15
  6. data/Dockerfile +21 -5
  7. data/NEWS.ja.md +394 -0
  8. data/NEWS.md +395 -1
  9. data/README.md +10 -7
  10. data/appveyor.yml +1 -3
  11. data/bin/review-catalog-converter +5 -5
  12. data/bin/review-check +10 -12
  13. data/bin/review-checkdep +2 -2
  14. data/bin/review-compile +17 -23
  15. data/bin/review-epubmaker +3 -35
  16. data/bin/review-idgxmlmaker +16 -0
  17. data/bin/review-index +2 -89
  18. data/bin/review-preproc +13 -13
  19. data/bin/review-validate +4 -4
  20. data/bin/review-vol +4 -78
  21. data/doc/config.yml.sample +47 -12
  22. data/doc/config.yml.sample-simple +3 -2
  23. data/doc/format.ja.md +120 -17
  24. data/doc/format.md +119 -27
  25. data/doc/makeindex.ja.md +2 -2
  26. data/doc/pdfmaker.ja.md +43 -1
  27. data/doc/pdfmaker.md +42 -1
  28. data/doc/quickstart.ja.md +45 -25
  29. data/doc/quickstart.md +37 -16
  30. data/lib/epubmaker/content.rb +3 -2
  31. data/lib/epubmaker/epubcommon.rb +34 -27
  32. data/lib/epubmaker/epubv2.rb +5 -6
  33. data/lib/epubmaker/epubv3.rb +21 -18
  34. data/lib/epubmaker/producer.rb +2 -1
  35. data/lib/review/book.rb +2 -2
  36. data/lib/review/book/base.rb +91 -96
  37. data/lib/review/book/bib.rb +21 -0
  38. data/lib/review/book/book_unit.rb +155 -0
  39. data/lib/review/book/chapter.rb +48 -29
  40. data/lib/review/book/index.rb +46 -240
  41. data/lib/review/book/index/item.rb +46 -0
  42. data/lib/review/book/page_metric.rb +7 -7
  43. data/lib/review/book/part.rb +45 -10
  44. data/lib/review/book/volume.rb +4 -5
  45. data/lib/review/builder.rb +172 -56
  46. data/lib/review/catalog.rb +14 -17
  47. data/lib/review/compiler.rb +219 -121
  48. data/lib/review/configure.rb +39 -7
  49. data/lib/review/converter.rb +1 -1
  50. data/lib/review/epub2html.rb +43 -5
  51. data/lib/review/epubmaker.rb +69 -27
  52. data/lib/review/extentions/string.rb +0 -4
  53. data/lib/review/htmlbuilder.rb +112 -101
  54. data/lib/review/htmlutils.rb +9 -13
  55. data/lib/review/i18n.rb +3 -3
  56. data/lib/review/idgxmlbuilder.rb +202 -78
  57. data/lib/review/idgxmlmaker.rb +186 -0
  58. data/lib/review/index_builder.rb +653 -0
  59. data/lib/review/init-web/finish.html +10 -0
  60. data/lib/review/init-web/index.html +190 -0
  61. data/lib/review/init-web/review-layout-design.js +691 -0
  62. data/lib/review/init.rb +129 -46
  63. data/lib/review/latexbuilder.rb +255 -92
  64. data/lib/review/lineinput.rb +1 -1
  65. data/lib/review/location.rb +32 -0
  66. data/lib/review/logger.rb +4 -8
  67. data/lib/review/makerhelper.rb +35 -5
  68. data/lib/review/markdownbuilder.rb +50 -38
  69. data/lib/review/md2inaobuilder.rb +3 -5
  70. data/lib/review/pdfmaker.rb +60 -57
  71. data/lib/review/plaintextbuilder.rb +154 -87
  72. data/lib/review/preprocessor.rb +20 -42
  73. data/lib/review/rstbuilder.rb +57 -38
  74. data/lib/review/sec_counter.rb +13 -0
  75. data/lib/review/textmaker.rb +23 -15
  76. data/lib/review/textutils.rb +76 -2
  77. data/lib/review/tocprinter.rb +230 -102
  78. data/lib/review/topbuilder.rb +139 -60
  79. data/lib/review/update.rb +24 -24
  80. data/lib/review/version.rb +1 -1
  81. data/lib/review/volumeprinter.rb +98 -0
  82. data/lib/review/webmaker.rb +20 -24
  83. data/lib/review/webtocprinter.rb +38 -35
  84. data/lib/review/yamlloader.rb +26 -16
  85. data/review.gemspec +6 -4
  86. data/samples/sample-book/README.md +7 -2
  87. data/samples/sample-book/src/.gitignore +154 -0
  88. data/samples/sample-book/src/config-ebook.yml +4 -0
  89. data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
  90. data/samples/sample-book/src/config-jlreq.yml +6 -0
  91. data/samples/sample-book/src/config.yml +2 -2
  92. data/samples/sample-book/src/lib/tasks/review.rake +29 -14
  93. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
  94. data/samples/syntax-book/Gemfile +1 -1
  95. data/samples/syntax-book/ch01.re +4 -2
  96. data/samples/syntax-book/ch02.re +8 -16
  97. data/samples/syntax-book/ch03.re +3 -6
  98. data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
  99. data/samples/syntax-book/config-jlreq.yml +5 -0
  100. data/samples/syntax-book/config-print.yml +3 -0
  101. data/samples/syntax-book/config.yml +1 -1
  102. data/samples/syntax-book/lib/tasks/review.rake +30 -15
  103. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
  104. data/templates/latex/config.erb +39 -25
  105. data/templates/latex/layout.tex.erb +1 -0
  106. data/templates/latex/review-jlreq/README.md +3 -1
  107. data/templates/latex/review-jlreq/review-base.sty +161 -50
  108. data/templates/latex/review-jlreq/review-jlreq.cls +21 -22
  109. data/templates/latex/review-jlreq/review-style.sty +4 -1
  110. data/templates/latex/review-jsbook/README.md +46 -5
  111. data/templates/latex/review-jsbook/review-base.sty +123 -35
  112. data/templates/latex/review-jsbook/review-jsbook.cls +10 -4
  113. data/templates/latex/review-jsbook/review-style.sty +5 -2
  114. data/templates/opf/epubv3.opf.erb +1 -0
  115. data/templates/web/html/layout-html5.html.erb +3 -3
  116. data/test/assets/test_template.tex +19 -7
  117. data/test/assets/test_template_backmatter.tex +19 -7
  118. data/test/book_test_helper.rb +11 -5
  119. data/test/test_book.rb +124 -79
  120. data/test/test_book_chapter.rb +97 -54
  121. data/test/test_book_part.rb +3 -3
  122. data/test/test_builder.rb +38 -13
  123. data/test/test_catalog.rb +24 -42
  124. data/test/test_catalog_converter_cmd.rb +1 -1
  125. data/test/test_converter.rb +1 -0
  126. data/test/test_epub3maker.rb +2 -2
  127. data/test/test_epubmaker.rb +8 -0
  128. data/test/test_epubmaker_cmd.rb +14 -7
  129. data/test/test_helper.rb +18 -7
  130. data/test/test_htmlbuilder.rb +1491 -205
  131. data/test/test_htmlutils.rb +0 -12
  132. data/test/test_i18n.rb +37 -37
  133. data/test/test_idgxmlbuilder.rb +744 -42
  134. data/test/test_idgxmlmaker_cmd.rb +46 -0
  135. data/test/test_image_finder.rb +52 -70
  136. data/test/test_index.rb +94 -44
  137. data/test/test_indexbuilder.rb +52 -0
  138. data/test/test_latexbuilder.rb +1784 -161
  139. data/test/test_latexbuilder_v2.rb +671 -102
  140. data/test/test_logger.rb +17 -4
  141. data/test/test_makerhelper.rb +2 -14
  142. data/test/test_markdownbuilder.rb +137 -16
  143. data/test/test_md2inaobuilder.rb +32 -9
  144. data/test/test_pdfmaker.rb +30 -12
  145. data/test/test_pdfmaker_cmd.rb +100 -6
  146. data/test/test_plaintextbuilder.rb +791 -30
  147. data/test/test_preprocessor.rb +2 -16
  148. data/test/test_review_ext.rb +2 -1
  149. data/test/test_rstbuilder.rb +274 -27
  150. data/test/test_sec_counter.rb +156 -0
  151. data/test/test_textmaker_cmd.rb +54 -0
  152. data/test/test_textutils.rb +109 -2
  153. data/test/test_topbuilder.rb +724 -34
  154. data/test/test_update.rb +20 -11
  155. data/test/test_webtocprinter.rb +75 -43
  156. data/test/test_yamlloader.rb +13 -0
  157. data/vendor/gentombow/LICENSE +1 -1
  158. data/vendor/gentombow/Makefile +0 -1
  159. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  160. data/vendor/gentombow/bounddvi-en.tex +1 -0
  161. data/vendor/gentombow/bounddvi.pdf +0 -0
  162. data/vendor/gentombow/bounddvi.sty +30 -7
  163. data/vendor/gentombow/bounddvi.tex +1 -0
  164. data/vendor/gentombow/create_archive.sh +1 -0
  165. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  166. data/vendor/gentombow/gentombow-ja.tex +9 -0
  167. data/vendor/gentombow/gentombow.pdf +0 -0
  168. data/vendor/gentombow/gentombow.sty +32 -10
  169. data/vendor/gentombow/gentombow.tex +8 -0
  170. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  171. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  172. data/vendor/jsclasses/LICENSE +1 -1
  173. data/vendor/jsclasses/Makefile +3 -2
  174. data/vendor/jsclasses/create_archive.sh +5 -5
  175. data/vendor/jsclasses/jis/Makefile +3 -2
  176. data/vendor/jsclasses/jis/jsarticle.cls +74 -31
  177. data/vendor/jsclasses/jis/jsbook.cls +74 -31
  178. data/vendor/jsclasses/jis/jsclasses.dtx +176 -36
  179. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  180. data/vendor/jsclasses/jis/jslogo.dtx +4 -4
  181. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  182. data/vendor/jsclasses/jis/jslogo.sty +4 -16
  183. data/vendor/jsclasses/jis/jspf.cls +73 -30
  184. data/vendor/jsclasses/jis/jsreport.cls +74 -31
  185. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  186. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  187. data/vendor/jsclasses/jis/kiyou.cls +74 -31
  188. data/vendor/jsclasses/jis/minijs.sty +65 -22
  189. data/vendor/jsclasses/jis/okumacro.dtx +4 -5
  190. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  191. data/vendor/jsclasses/jis/okumacro.sty +4 -17
  192. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  193. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  194. data/vendor/jsclasses/jis/winjis.sty +23 -19
  195. data/vendor/jsclasses/jsarticle.cls +74 -31
  196. data/vendor/jsclasses/jsbook.cls +74 -31
  197. data/vendor/jsclasses/jsclasses.dtx +176 -36
  198. data/vendor/jsclasses/jsclasses.ins +15 -5
  199. data/vendor/jsclasses/jsclasses.pdf +0 -0
  200. data/vendor/jsclasses/jslogo.dtx +4 -4
  201. data/vendor/jsclasses/jslogo.ins +9 -0
  202. data/vendor/jsclasses/jslogo.pdf +0 -0
  203. data/vendor/jsclasses/jslogo.sty +4 -16
  204. data/vendor/jsclasses/jspf.cls +73 -30
  205. data/vendor/jsclasses/jsreport.cls +74 -31
  206. data/vendor/jsclasses/jsverb.ins +9 -0
  207. data/vendor/jsclasses/jsverb.pdf +0 -0
  208. data/vendor/jsclasses/jsverb.sty +1 -13
  209. data/vendor/jsclasses/kiyou.cls +74 -31
  210. data/vendor/jsclasses/minijs.sty +68 -22
  211. data/vendor/jsclasses/okumacro.dtx +4 -5
  212. data/vendor/jsclasses/okumacro.ins +9 -0
  213. data/vendor/jsclasses/okumacro.pdf +0 -0
  214. data/vendor/jsclasses/okumacro.sty +4 -17
  215. data/vendor/jsclasses/okuverb.ins +9 -0
  216. data/vendor/jsclasses/okuverb.pdf +0 -0
  217. data/vendor/jsclasses/okuverb.sty +1 -13
  218. data/vendor/jsclasses/tests/relfont.tex +10 -0
  219. data/vendor/jsclasses/winjis.sty +23 -19
  220. metadata +65 -12
  221. data/.rubocop_todo.yml +0 -7
  222. data/lib/review/book/compilable.rb +0 -173
  223. data/lib/review/tocparser.rb +0 -271
  224. data/samples/syntax-book/review-ext.rb +0 -14
  225. data/test/test_tocparser.rb +0 -25
@@ -0,0 +1,186 @@
1
+ # Copyright (c) 2019 Kenshi Muto
2
+ #
3
+ # This program is free software.
4
+ # You can distribute or modify this program under the terms of
5
+ # the GNU LGPL, Lesser General Public License version 2.1.
6
+ # For details of the GNU LGPL, see the file "COPYING".
7
+ #
8
+ require 'optparse'
9
+ require 'yaml'
10
+ require 'fileutils'
11
+
12
+ require 'review/converter'
13
+ require 'review/configure'
14
+ require 'review/book'
15
+ require 'review/yamlloader'
16
+ require 'review/idgxmlbuilder'
17
+ require 'review/version'
18
+ require 'review/makerhelper'
19
+
20
+ module ReVIEW
21
+ class IDGXMLMaker
22
+ include MakerHelper
23
+
24
+ attr_accessor :config, :basedir
25
+
26
+ def initialize
27
+ @basedir = nil
28
+ @logger = ReVIEW.logger
29
+ @plaintext = nil
30
+ end
31
+
32
+ def error(msg)
33
+ @logger.error "#{File.basename($PROGRAM_NAME, '.*')}: #{msg}"
34
+ exit 1
35
+ end
36
+
37
+ def warn(msg)
38
+ @logger.warn "#{File.basename($PROGRAM_NAME, '.*')}: #{msg}"
39
+ end
40
+
41
+ def self.execute(*args)
42
+ self.new.execute(*args)
43
+ end
44
+
45
+ def parse_opts(args)
46
+ cmd_config = {}
47
+ opts = OptionParser.new
48
+ @table = nil
49
+ @filter = nil
50
+ @buildonly = nil
51
+
52
+ opts.banner = 'Usage: review-idgxmlmaker [options] configfile'
53
+ opts.version = ReVIEW::VERSION
54
+ opts.on('-w', '--width widthoftypepage', 'Specify the width of type page for layouting tables (mm).') { |v| @table = v }
55
+ opts.on('-f', '--filter filterprogrampath', 'Specify the filter path.') { |v| @filter = v }
56
+ opts.on('-y', '--only file1,file2,...', 'Build only specified files.') { |v| @buildonly = v.split(/\s*,\s*/).map { |m| m.strip.sub(/\.re\Z/, '') } }
57
+ opts.on('--help', 'Prints this message and quit.') do
58
+ puts opts.help
59
+ exit 0
60
+ end
61
+
62
+ opts.parse!(args)
63
+ if args.size != 1
64
+ puts opts.help
65
+ exit 0
66
+ end
67
+
68
+ [cmd_config, args[0]]
69
+ end
70
+
71
+ def build_path
72
+ "#{@config['bookname']}-idgxml"
73
+ end
74
+
75
+ def remove_old_files(path)
76
+ FileUtils.rm_rf(path)
77
+ end
78
+
79
+ def execute(*args)
80
+ cmd_config, yamlfile = parse_opts(args)
81
+ error "#{yamlfile} not found." unless File.exist?(yamlfile)
82
+
83
+ @config = ReVIEW::Configure.create(maker: 'idgxmlmaker',
84
+ yamlfile: yamlfile,
85
+ config: cmd_config)
86
+ I18n.setup(@config['language'])
87
+ begin
88
+ generate_idgxml_files(yamlfile)
89
+ rescue ApplicationError => e
90
+ raise if @config['debug']
91
+ error(e.message)
92
+ end
93
+ end
94
+
95
+ def generate_idgxml_files(yamlfile)
96
+ @basedir = File.dirname(yamlfile)
97
+ @path = build_path
98
+ remove_old_files(@path)
99
+ Dir.mkdir(@path)
100
+
101
+ @book = ReVIEW::Book::Base.new(@basedir, config: @config)
102
+ if @table
103
+ @book.config['tableopt'] = @table
104
+ end
105
+
106
+ build_body(@path, yamlfile)
107
+ end
108
+
109
+ def apply_filter(xmlfile)
110
+ return unless @filter
111
+
112
+ # pass filename information to filter by environment variable
113
+ ENV['REVIEW_FNAME'] = File.basename(xmlfile).sub(/.xml\Z/, '.re')
114
+ begin
115
+ o, e, s = Open3.capture3(@filter, stdin_data: File.read(xmlfile))
116
+ unless e.empty?
117
+ warn("filter error for #{xmlfile}: #{e}")
118
+ end
119
+ if s.success?
120
+ File.write(xmlfile, o) # override
121
+ end
122
+ rescue => e
123
+ warn("filter error for #{xmlfile}: #{e.message}")
124
+ end
125
+ end
126
+
127
+ def build_body(basetmpdir, _yamlfile)
128
+ base_path = Pathname.new(@basedir)
129
+ @converter = ReVIEW::Converter.new(@book, ReVIEW::IDGXMLBuilder.new)
130
+ @book.parts.each do |part|
131
+ if part.name.present?
132
+ if part.file?
133
+ build_chap(part, base_path, basetmpdir, true)
134
+ else
135
+ xmlfile = "part_#{part.number}.xml"
136
+ build_part(part, basetmpdir, xmlfile)
137
+ end
138
+ end
139
+
140
+ part.chapters.each { |chap| build_chap(chap, base_path, basetmpdir, false) }
141
+ end
142
+ end
143
+
144
+ def build_part(part, basetmpdir, xmlfile)
145
+ File.open(File.join(basetmpdir, xmlfile), 'w') do |f|
146
+ title = ReVIEW::I18n.t('part', part.number)
147
+ if part.name.strip.present?
148
+ title << ReVIEW::I18n.t('chapter_postfix')
149
+ title << part.name.strip
150
+ end
151
+ f.puts '<?xml version="1.0" encoding="UTF-8"?>'
152
+ f.print '<doc xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"><title aid:pstyle="h1">'
153
+ f.print h(title)
154
+ f.print '</title><?dtp level="1" section="'
155
+ f.print h(title)
156
+ f.puts '"?></doc>'
157
+ end
158
+ apply_filter(File.join(basetmpdir, xmlfile))
159
+ end
160
+
161
+ def build_chap(chap, base_path, basetmpdir, ispart)
162
+ filename = ''
163
+
164
+ if ispart.present?
165
+ filename = chap.path
166
+ else
167
+ filename = Pathname.new(chap.path).relative_path_from(base_path).to_s
168
+ end
169
+ id = File.basename(filename).sub(/\.re\Z/, '')
170
+ if @buildonly && !@buildonly.include?(id)
171
+ warn "skip #{id}.re"
172
+ return
173
+ end
174
+
175
+ xmlfile = "#{id}.xml"
176
+
177
+ begin
178
+ @converter.convert(filename, File.join(basetmpdir, xmlfile))
179
+ apply_filter(File.join(basetmpdir, xmlfile))
180
+ rescue => e
181
+ warn "compile error in #{filename} (#{e.class})"
182
+ warn e.message
183
+ end
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,653 @@
1
+ # Copyright (c) 2008-2020 Minero Aoki, Kenshi Muto, Masayoshi Takahashi,
2
+ # KADO Masanori
3
+ #
4
+ # This program is free software.
5
+ # You can distribute or modify this program under the terms of
6
+ # the GNU LGPL, Lesser General Public License version 2.1.
7
+ #
8
+
9
+ require 'review/book/index'
10
+ require 'review/exception'
11
+ require 'review/builder'
12
+ require 'review/sec_counter'
13
+
14
+ module ReVIEW
15
+ class IndexBuilder < Builder
16
+ attr_reader :list_index, :table_index, :equation_index, :footnote_index,
17
+ :numberless_image_index, :image_index, :icon_index, :indepimage_index,
18
+ :headline_index, :column_index, :bibpaper_index
19
+
20
+ def initialize(strict = false, *args)
21
+ super
22
+ end
23
+
24
+ def check_id(id)
25
+ if id
26
+ if id =~ %r![#%\\{}\[\]~/$'"|*?&<>`\s]!
27
+ warn "deprecated ID: `#{$&}` in `#{id}`"
28
+ elsif id.start_with?('.')
29
+ warn "deprecated ID: `#{id}` begins from `.`"
30
+ end
31
+ end
32
+ end
33
+
34
+ def pre_paragraph
35
+ ''
36
+ end
37
+
38
+ def post_paragraph
39
+ ''
40
+ end
41
+
42
+ def bind(compiler, chapter, location)
43
+ @compiler = compiler
44
+ @chapter = chapter
45
+ @location = location
46
+ @output = StringIO.new
47
+ if @chapter.present?
48
+ @book = @chapter.book
49
+ end
50
+ builder_init_file
51
+ end
52
+
53
+ def builder_init_file
54
+ @sec_counter = SecCounter.new(5, @chapter)
55
+
56
+ @headline_stack = []
57
+
58
+ @list_index = ReVIEW::Book::ListIndex.new
59
+ @table_index = ReVIEW::Book::TableIndex.new
60
+ @equation_index = ReVIEW::Book::EquationIndex.new
61
+ @footnote_index = ReVIEW::Book::FootnoteIndex.new
62
+ @headline_index = ReVIEW::Book::HeadlineIndex.new(@chapter)
63
+ @column_index = ReVIEW::Book::ColumnIndex.new
64
+ @chapter_index = ReVIEW::Book::ChapterIndex.new
65
+ @bibpaper_index = ReVIEW::Book::BibpaperIndex.new
66
+
67
+ if @book
68
+ @image_index = ReVIEW::Book::ImageIndex.new(@chapter)
69
+ @icon_index = ReVIEW::Book::IconIndex.new(@chapter)
70
+ @numberless_image_index = ReVIEW::Book::NumberlessImageIndex.new(@chapter)
71
+ @indepimage_index = ReVIEW::Book::IndepImageIndex.new(@chapter)
72
+ end
73
+ end
74
+ private :builder_init_file
75
+
76
+ def result
77
+ nil
78
+ end
79
+
80
+ def target_name
81
+ 'index'
82
+ end
83
+
84
+ def headline(level, label, caption)
85
+ check_id(label)
86
+ @sec_counter.inc(level)
87
+ return if level < 2
88
+
89
+ cursor = level - 2
90
+
91
+ if label
92
+ @headline_stack[cursor] = label
93
+ else
94
+ @headline_stack[cursor] = caption
95
+ end
96
+ if @headline_stack.size > cursor + 1
97
+ @headline_stack = @headline_stack.take(cursor + 1)
98
+ end
99
+
100
+ item_id = @headline_stack.join('|')
101
+
102
+ item = ReVIEW::Book::Index::Item.new(item_id, @sec_counter.number_list, caption)
103
+ @headline_index.add_item(item)
104
+ end
105
+
106
+ def nonum_begin(level, label, caption)
107
+ check_id(label)
108
+ return if level < 2
109
+
110
+ cursor = level - 2
111
+
112
+ if label
113
+ @headline_stack[cursor] = label
114
+ else
115
+ @headline_stack[cursor] = caption
116
+ end
117
+ if @headline_stack.size > cursor + 1
118
+ @headline_stack = @headline_stack.take(cursor + 1)
119
+ end
120
+
121
+ item_id = @headline_stack.join('|')
122
+
123
+ item = ReVIEW::Book::Index::Item.new(item_id, nil, caption)
124
+ @headline_index.add_item(item)
125
+ end
126
+
127
+ def nonum_end(_level)
128
+ end
129
+
130
+ def notoc_begin(level, label, caption)
131
+ check_id(label)
132
+ return if level < 2
133
+
134
+ cursor = level - 2
135
+
136
+ if label
137
+ @headline_stack[cursor] = label
138
+ else
139
+ @headline_stack[cursor] = caption
140
+ end
141
+ if @headline_stack.size > cursor + 1
142
+ @headline_stack = @headline_stack.take(cursor + 1)
143
+ end
144
+
145
+ item_id = @headline_stack.join('|')
146
+
147
+ item = ReVIEW::Book::Index::Item.new(item_id, nil, caption)
148
+ @headline_index.add_item(item)
149
+ end
150
+
151
+ def notoc_end(_level)
152
+ end
153
+
154
+ def nodisp_begin(level, label, caption)
155
+ check_id(label)
156
+ return if level < 2
157
+
158
+ cursor = level - 2
159
+
160
+ if label
161
+ @headline_stack[cursor] = label
162
+ else
163
+ @headline_stack[cursor] = caption
164
+ end
165
+ if @headline_stack.size > cursor + 1
166
+ @headline_stack = @headline_stack.take(cursor + 1)
167
+ end
168
+
169
+ item_id = @headline_stack.join('|')
170
+
171
+ item = ReVIEW::Book::Index::Item.new(item_id, nil, caption)
172
+ @headline_index.add_item(item)
173
+ end
174
+
175
+ def nodisp_end(_level)
176
+ end
177
+
178
+ def column_begin(_level, label, caption)
179
+ check_id(label)
180
+ item_id = label || caption
181
+ item = ReVIEW::Book::Index::Item.new(item_id, @column_index.size + 1, caption)
182
+ @column_index.add_item(item)
183
+ end
184
+
185
+ def column_end(_level)
186
+ end
187
+
188
+ def xcolumn_begin(_level, label, _caption)
189
+ check_id(label)
190
+ end
191
+
192
+ def xcolumn_end(_level)
193
+ end
194
+
195
+ def sup_begin(_level, label, _caption)
196
+ check_id(label)
197
+ end
198
+
199
+ def sup_end(_level)
200
+ end
201
+
202
+ def ul_begin
203
+ end
204
+
205
+ def ul_item_begin(lines)
206
+ end
207
+
208
+ def ul_item_end
209
+ end
210
+
211
+ def ul_end
212
+ end
213
+
214
+ def ol_begin
215
+ end
216
+
217
+ def ol_item(lines, _num)
218
+ end
219
+
220
+ def ol_end
221
+ end
222
+
223
+ def dl_begin
224
+ end
225
+
226
+ def dt(line)
227
+ end
228
+
229
+ def dd(lines)
230
+ end
231
+
232
+ def dl_end
233
+ end
234
+
235
+ def paragraph(lines)
236
+ end
237
+
238
+ def parasep
239
+ ''
240
+ end
241
+
242
+ def nofunc_text(_str)
243
+ ''
244
+ end
245
+
246
+ def read(_lines)
247
+ end
248
+
249
+ alias_method :lead, :read
250
+
251
+ def list(_lines, id, _caption, _lang = nil)
252
+ check_id(id)
253
+ item = ReVIEW::Book::Index::Item.new(id, @list_index.size + 1)
254
+ @list_index.add_item(item)
255
+ end
256
+
257
+ def source(_lines, _caption = nil, _lang = nil)
258
+ end
259
+
260
+ def listnum(_lines, id, _caption, _lang = nil)
261
+ check_id(id)
262
+ item = ReVIEW::Book::Index::Item.new(id, @list_index.size + 1)
263
+ @list_index.add_item(item)
264
+ end
265
+
266
+ def emlist(lines, caption = nil, lang = nil)
267
+ end
268
+
269
+ def emlistnum(lines, caption = nil, lang = nil)
270
+ end
271
+
272
+ def cmd(lines, caption = nil)
273
+ end
274
+
275
+ def quote(lines)
276
+ end
277
+
278
+ def image(_lines, id, caption, _metric = nil)
279
+ check_id(id)
280
+ item = ReVIEW::Book::Index::Item.new(id, @image_index.size + 1, caption)
281
+ @image_index.add_item(item)
282
+ end
283
+
284
+ def table(_lines, id = nil, caption = nil)
285
+ check_id(id)
286
+ if id
287
+ item = ReVIEW::Book::Index::Item.new(id, @table_index.size + 1, caption)
288
+ @table_index.add_item(item)
289
+ end
290
+ end
291
+
292
+ def emtable(_lines, _caption = nil)
293
+ # item = ReVIEW::Book::TableIndex::Item.new(id, @table_index.size + 1)
294
+ # @table_index << item
295
+ end
296
+
297
+ def comment(lines, comment = nil)
298
+ end
299
+
300
+ def imgtable(_lines, id, _caption = nil, _metric = nil)
301
+ check_id(id)
302
+ item = ReVIEW::Book::Index::Item.new(id, @table_index.size + 1)
303
+ @table_index.add_item(item)
304
+
305
+ ## to find image path
306
+ item = ReVIEW::Book::Index::Item.new(id, @indepimage_index.size + 1)
307
+ @indepimage_index.add_item(item)
308
+ end
309
+
310
+ def footnote(id, str)
311
+ check_id(id)
312
+ item = ReVIEW::Book::Index::Item.new(id, @footnote_index.size + 1, str)
313
+ @footnote_index.add_item(item)
314
+ end
315
+
316
+ def indepimage(_lines, id, _caption = '', _metric = nil)
317
+ check_id(id)
318
+ item = ReVIEW::Book::Index::Item.new(id, @indepimage_index.size + 1)
319
+ @indepimage_index.add_item(item)
320
+ end
321
+
322
+ def numberlessimage(_lines, id, _caption = '', _metric = nil)
323
+ check_id(id)
324
+ item = ReVIEW::Book::Index::Item.new(id, @indepimage_index.size + 1)
325
+ @indepimage_index.add_item(item)
326
+ end
327
+
328
+ def hr
329
+ end
330
+
331
+ def label(id)
332
+ check_id(id)
333
+ end
334
+
335
+ def blankline
336
+ end
337
+
338
+ def flushright(_lines)
339
+ end
340
+
341
+ def centering(lines)
342
+ end
343
+
344
+ def olnum(_num)
345
+ end
346
+
347
+ def pagebreak
348
+ end
349
+
350
+ def bpo(_lines)
351
+ end
352
+
353
+ def noindent
354
+ end
355
+
356
+ def compile_inline(s)
357
+ @compiler.text(s)
358
+ end
359
+
360
+ def inline_chapref(_id)
361
+ ''
362
+ end
363
+
364
+ def inline_chap(_id)
365
+ ''
366
+ end
367
+
368
+ def inline_title(_id)
369
+ ''
370
+ end
371
+
372
+ def inline_list(_id)
373
+ ''
374
+ end
375
+
376
+ def inline_img(_id)
377
+ ''
378
+ end
379
+
380
+ def inline_imgref(_id)
381
+ ''
382
+ end
383
+
384
+ def inline_table(_id)
385
+ ''
386
+ end
387
+
388
+ def inline_eq(_id)
389
+ ''
390
+ end
391
+
392
+ def inline_fn(_id)
393
+ ''
394
+ end
395
+
396
+ def inline_i(_str)
397
+ ''
398
+ end
399
+
400
+ def inline_b(_str)
401
+ ''
402
+ end
403
+
404
+ def inline_ami(_str)
405
+ ''
406
+ end
407
+
408
+ def inline_bou(str)
409
+ str
410
+ end
411
+
412
+ def inline_tti(_str)
413
+ ''
414
+ end
415
+
416
+ def inline_ttb(_str)
417
+ ''
418
+ end
419
+
420
+ def inline_dtp(_str)
421
+ ''
422
+ end
423
+
424
+ def inline_code(_str)
425
+ ''
426
+ end
427
+
428
+ def inline_idx(_str)
429
+ ''
430
+ end
431
+
432
+ def inline_hidx(_str)
433
+ ''
434
+ end
435
+
436
+ def inline_br(_str)
437
+ ''
438
+ end
439
+
440
+ def inline_m(_str)
441
+ ''
442
+ end
443
+
444
+ def firstlinenum(_num)
445
+ ''
446
+ end
447
+
448
+ def inline_ruby(_arg)
449
+ ''
450
+ end
451
+
452
+ def inline_kw(_arg)
453
+ ''
454
+ end
455
+
456
+ def inline_href(_arg)
457
+ ''
458
+ end
459
+
460
+ def inline_hr(_arg)
461
+ ''
462
+ end
463
+
464
+ def text(_str)
465
+ ''
466
+ end
467
+
468
+ def bibpaper(_lines, id, caption)
469
+ check_id(id)
470
+ item = ReVIEW::Book::Index::Item.new(id, @bibpaper_index.size + 1, caption)
471
+ @bibpaper_index.add_item(item)
472
+ end
473
+
474
+ def inline_hd(_id)
475
+ ''
476
+ end
477
+
478
+ def inline_bib(_id)
479
+ ''
480
+ end
481
+
482
+ def inline_column(_id)
483
+ ''
484
+ end
485
+
486
+ def inline_column_chap(_chapter, _id)
487
+ ''
488
+ end
489
+
490
+ def inline_pageref(_id)
491
+ ''
492
+ end
493
+
494
+ def inline_tcy(_arg)
495
+ ''
496
+ end
497
+
498
+ def inline_balloon(_arg)
499
+ ''
500
+ end
501
+
502
+ def inline_w(_s)
503
+ ''
504
+ end
505
+
506
+ def inline_wb(_s)
507
+ ''
508
+ end
509
+
510
+ def inline_abbr(_str)
511
+ ''
512
+ end
513
+
514
+ def inline_acronym(_str)
515
+ ''
516
+ end
517
+
518
+ def inline_cite(_str)
519
+ ''
520
+ end
521
+
522
+ def inline_dfn(_str)
523
+ ''
524
+ end
525
+
526
+ def inline_em(_str)
527
+ ''
528
+ end
529
+
530
+ def inline_kbd(_str)
531
+ ''
532
+ end
533
+
534
+ def inline_samp(_str)
535
+ ''
536
+ end
537
+
538
+ def inline_strong(_str)
539
+ ''
540
+ end
541
+
542
+ def inline_var(_str)
543
+ ''
544
+ end
545
+
546
+ def inline_big(_str)
547
+ ''
548
+ end
549
+
550
+ def inline_small(_str)
551
+ ''
552
+ end
553
+
554
+ def inline_sub(_str)
555
+ ''
556
+ end
557
+
558
+ def inline_sup(_str)
559
+ ''
560
+ end
561
+
562
+ def inline_tt(_str)
563
+ ''
564
+ end
565
+
566
+ def inline_del(_str)
567
+ ''
568
+ end
569
+
570
+ def inline_ins(_str)
571
+ ''
572
+ end
573
+
574
+ def inline_u(_str)
575
+ ''
576
+ end
577
+
578
+ def inline_recipe(_str)
579
+ ''
580
+ end
581
+
582
+ def inline_icon(id)
583
+ check_id(id)
584
+ item = ReVIEW::Book::Index::Item.new(id, @icon_index.size + 1)
585
+ @icon_index.add_item(item)
586
+ ''
587
+ end
588
+
589
+ def inline_uchar(_str)
590
+ ''
591
+ end
592
+
593
+ def raw(_str)
594
+ ''
595
+ end
596
+
597
+ def embed(_lines, _arg = nil)
598
+ ''
599
+ end
600
+
601
+ def warn(msg)
602
+ @logger.warn "#{@location}: #{msg}"
603
+ end
604
+
605
+ def error(msg = '(no message)')
606
+ if msg =~ /builder does not support command/
607
+ # ignore
608
+ return
609
+ end
610
+ super
611
+ end
612
+
613
+ def texequation(_lines, id = nil, _caption = '')
614
+ check_id(id)
615
+ if id
616
+ item = ReVIEW::Book::Index::Item.new(id, @equation_index.size + 1)
617
+ @equation_index.add_item(item)
618
+ end
619
+ end
620
+
621
+ def get_chap(_chapter = nil)
622
+ ''
623
+ end
624
+
625
+ def extract_chapter_id(_chap_ref)
626
+ ''
627
+ end
628
+
629
+ def captionblock(_type, _lines, _caption, _specialstyle = nil)
630
+ ''
631
+ end
632
+
633
+ def tsize(_str)
634
+ ''
635
+ end
636
+
637
+ def inline_raw(_args)
638
+ ''
639
+ end
640
+
641
+ def inline_embed(_args)
642
+ ''
643
+ end
644
+
645
+ def highlight?
646
+ false
647
+ end
648
+
649
+ def unknown_command(*_args)
650
+ # ignore
651
+ end
652
+ end
653
+ end # module ReVIEW