Class: ReVIEW::IDGXMLBuilder

Inherits:
Builder show all
Includes:
HTMLUtils, TextUtils
Defined in:
lib/review/idgxmlbuilder.rb

Constant Summary

Constants inherited from Builder

Builder::CAPTION_TITLES

Instance Attribute Summary

Attributes inherited from Builder

#doc_status, #location

Attributes included from Loggable

#logger

Instance Method Summary collapse

Methods included from HTMLUtils

#escape, #escape_comment, #highlight, #highlight?, #highlight_pygments, #highlight_rouge, #normalize_id, #strip_html, #unescape

Methods included from TextUtils

#add_space?, #detab, #join_lines_to_paragraph, #split_paragraph

Methods inherited from Builder

#beginchild, #bind, #caption_top?, #check_nest, #check_nested_minicolumn, #check_printendnotes, #compile_inline, #detab, #embed, #endchild, #endnote, #escape, #extract_chapter_id, #firstlinenum, #get_chap, #graph, #graph_aafigure, #graph_blockdiag, #graph_gnuplot, #graph_graphviz, #graph_plantuml, #highlight?, #image, #in_minicolumn?, #initialize, #inline_column, #inline_embed, #inline_hd, #inline_href, #inline_include, #inline_kw, #inline_ruby, #inline_tcy, #inline_w, #inline_wb, #line_num, #load_words, #minicolumn_block_name?, #over_secnolevel?, #parse_metric, #previous_list_type, #print, #printendnotes, #raw, #system_graph, #table_row_separator_regexp, #target_name, #tsize

Methods included from Loggable

#app_error, #debug, #error, #error!, #warn

Constructor Details

This class inherits a constructor from ReVIEW::Builder

Instance Method Details

#best(lines, caption = nil) ⇒ Object



1002
1003
1004
# File 'lib/review/idgxmlbuilder.rb', line 1002

def best(lines, caption = nil)
  captionblock('best', lines, caption)
end

#bibpaper(lines, id, caption) ⇒ Object



1276
1277
1278
1279
1280
1281
# File 'lib/review/idgxmlbuilder.rb', line 1276

def bibpaper(lines, id, caption)
  puts %Q(<bibitem id="bib-#{id}">)
  bibpaper_header(id, caption)
  bibpaper_bibpaper(id, caption, lines) unless lines.empty?
  puts '</bibitem>'
end

#bibpaper_bibpaper(_id, _caption, lines) ⇒ Object



1287
1288
1289
# File 'lib/review/idgxmlbuilder.rb', line 1287

def bibpaper_bibpaper(_id, _caption, lines)
  print split_paragraph(lines).join
end

#bibpaper_header(id, caption) ⇒ Object



1283
1284
1285
# File 'lib/review/idgxmlbuilder.rb', line 1283

def bibpaper_header(id, caption)
  puts "<caption><span type='bibno'>[#{@chapter.bibpaper(id).number}] </span>#{compile_inline(caption)}</caption>" if caption.present?
end

#blanklineObject



844
845
846
# File 'lib/review/idgxmlbuilder.rb', line 844

def blankline
  puts '<p/>'
end

#box(lines, caption = nil) ⇒ Object



1138
1139
1140
# File 'lib/review/idgxmlbuilder.rb', line 1138

def box(lines, caption = nil)
  syntaxblock('box', lines, caption)
end

#bpo(lines) ⇒ Object



1174
1175
1176
# File 'lib/review/idgxmlbuilder.rb', line 1174

def bpo(lines)
  puts %Q(<bpo>#{lines.join("\n")}</bpo>)
end

#captionblock(type, lines, caption, specialstyle = nil) ⇒ Object



970
971
972
973
974
975
976
# File 'lib/review/idgxmlbuilder.rb', line 970

def captionblock(type, lines, caption, specialstyle = nil)
  print "<#{type}>"
  style = specialstyle.nil? ? "#{type}-title" : specialstyle
  puts "<title aid:pstyle='#{style}'>#{compile_inline(caption)}</title>" if caption.present?
  blocked_lines = split_paragraph(lines)
  puts "#{blocked_lines.join}</#{type}>"
end

#caution(lines, caption = nil) ⇒ Object



1015
1016
1017
1018
# File 'lib/review/idgxmlbuilder.rb', line 1015

def caution(lines, caption = nil)
  check_nested_minicolumn
  captionblock('caution', lines, caption)
end

#centering(lines) ⇒ Object



966
967
968
# File 'lib/review/idgxmlbuilder.rb', line 966

def centering(lines)
  puts split_paragraph(lines).join.gsub('<p>', %Q(<p align='center'>))
end

#choice_multi_beginObject



186
187
188
# File 'lib/review/idgxmlbuilder.rb', line 186

def choice_multi_begin
  puts %Q(<choice type='multi'>)
end

#choice_multi_endObject



194
195
196
# File 'lib/review/idgxmlbuilder.rb', line 194

def choice_multi_end
  puts '</choice>'
end

#choice_single_beginObject



182
183
184
# File 'lib/review/idgxmlbuilder.rb', line 182

def choice_single_begin
  puts %Q(<choice type='single'>)
end

#choice_single_endObject



190
191
192
# File 'lib/review/idgxmlbuilder.rb', line 190

def choice_single_end
  puts '</choice>'
end

#circle_begin(_level, _label, caption) ⇒ Object



872
873
874
# File 'lib/review/idgxmlbuilder.rb', line 872

def circle_begin(_level, _label, caption)
  puts %Q(<title aid:pstyle="smallcircle">&#x2022;#{compile_inline(caption)}</title>)
end

#circle_end(level) ⇒ Object



876
877
# File 'lib/review/idgxmlbuilder.rb', line 876

def circle_end(level)
end

#cmd(lines, caption = nil) ⇒ Object



354
355
356
# File 'lib/review/idgxmlbuilder.rb', line 354

def cmd(lines, caption = nil)
  quotedlist(lines, 'cmd', caption)
end

#codelines_body(lines) ⇒ Object



288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
# File 'lib/review/idgxmlbuilder.rb', line 288

def codelines_body(lines)
  no = 1
  lines.each do |line|
    if @book.config['listinfo']
      print %Q(<listinfo line="#{no}")
      print %Q( begin="1") if no == 1
      print %Q( end="#{no}") if no == lines.size
      print '>'
    end
    print detab(line)
    print "\n"
    print '</listinfo>' if @book.config['listinfo']
    no += 1
  end
end

#column_begin(_level, _label, caption) ⇒ Object



890
891
892
# File 'lib/review/idgxmlbuilder.rb', line 890

def column_begin(_level, _label, caption)
  common_column_begin('', caption)
end

#column_end(_level) ⇒ Object



894
895
896
# File 'lib/review/idgxmlbuilder.rb', line 894

def column_end(_level)
  common_column_end('')
end

#comment(lines, comment = nil) ⇒ Object



638
639
640
641
642
643
644
645
# File 'lib/review/idgxmlbuilder.rb', line 638

def comment(lines, comment = nil)
  return unless @book.config['draft']

  lines ||= []
  lines.unshift(escape(comment)) unless comment.blank?
  str = lines.join("\n")
  print "<msg>#{str}</msg>"
end

#common_column_begin(type, caption) ⇒ Object



879
880
881
882
883
884
# File 'lib/review/idgxmlbuilder.rb', line 879

def common_column_begin(type, caption)
  @column += 1
  a_id = %Q(id="column-#{@column}")
  print "<#{type}column #{a_id}>"
  puts %Q(<title aid:pstyle="#{type}column-title">#{compile_inline(caption)}</title><?dtp level="9" section="#{escape(compile_inline(caption))}"?>)
end

#common_column_end(type) ⇒ Object



886
887
888
# File 'lib/review/idgxmlbuilder.rb', line 886

def common_column_end(type)
  puts "</#{type}column>"
end

#compile_href(url, label) ⇒ Object



702
703
704
# File 'lib/review/idgxmlbuilder.rb', line 702

def compile_href(url, label)
  %Q(<a linkurl='#{escape(url)}'>#{label.nil? ? escape(url) : escape(label)}</a>)
end

#compile_kw(word, alt) ⇒ Object



687
688
689
690
691
692
693
694
695
696
697
698
699
700
# File 'lib/review/idgxmlbuilder.rb', line 687

def compile_kw(word, alt)
  '<keyword>' +
    if alt
    then escape("#{word}#{alt.strip}")
    else escape(word)
    end +
    '</keyword>' +
    %Q(<index value="#{escape(word)}" />) +
    if alt
      alt.split(/\s*,\s*/).collect! { |e| %Q(<index value="#{escape(e.strip)}" />) }.join
    else
      ''
    end
end

#compile_ruby(base, ruby) ⇒ Object



683
684
685
# File 'lib/review/idgxmlbuilder.rb', line 683

def compile_ruby(base, ruby)
  %Q(<GroupRuby><aid:ruby xmlns:aid="http://ns.adobe.com/AdobeInDesign/3.0/"><aid:rb>#{escape(base.strip)}</aid:rb><aid:rt>#{escape(ruby.strip)}</aid:rt></aid:ruby></GroupRuby>)
end

#dd(lines) ⇒ Object



231
232
233
# File 'lib/review/idgxmlbuilder.rb', line 231

def dd(lines)
  puts "<dd>#{join_lines_to_paragraph(lines).chomp}</dd>"
end

#dl_beginObject



223
224
225
# File 'lib/review/idgxmlbuilder.rb', line 223

def dl_begin
  puts '<dl>'
end

#dl_endObject



235
236
237
# File 'lib/review/idgxmlbuilder.rb', line 235

def dl_end
  puts '</dl>'
end

#dt(line) ⇒ Object



227
228
229
# File 'lib/review/idgxmlbuilder.rb', line 227

def dt(line)
  puts "<dt>#{line}</dt>"
end

#dtp(str) ⇒ Object



1166
1167
1168
# File 'lib/review/idgxmlbuilder.rb', line 1166

def dtp(str)
  print %Q(<?dtp #{str} ?>)
end

#edition_begin(_level, _label, caption) ⇒ Object



922
923
924
# File 'lib/review/idgxmlbuilder.rb', line 922

def edition_begin(_level, _label, caption)
  common_column_begin('edition', caption)
end

#edition_end(_level) ⇒ Object



926
927
928
# File 'lib/review/idgxmlbuilder.rb', line 926

def edition_end(_level)
  common_column_end('edition')
end

#emlist(lines, caption = nil, _lang = nil) ⇒ Object



316
317
318
# File 'lib/review/idgxmlbuilder.rb', line 316

def emlist(lines, caption = nil, _lang = nil)
  quotedlist(lines, 'emlist', caption)
end

#emlistnum(lines, caption = nil, _lang = nil) ⇒ Object



320
321
322
323
324
325
326
327
# File 'lib/review/idgxmlbuilder.rb', line 320

def emlistnum(lines, caption = nil, _lang = nil)
  lines2 = []
  first_line_num = line_num
  lines.each_with_index do |line, i|
    lines2 << detab(%Q(<span type='lineno'>) + (i + first_line_num).to_s.rjust(2) + ': </span>' + line)
  end
  quotedlist(lines2, 'emlistnum', caption)
end

#emtable(lines, caption = nil) ⇒ Object



616
617
618
# File 'lib/review/idgxmlbuilder.rb', line 616

def emtable(lines, caption = nil)
  table(lines, nil, caption)
end

#endnote_beginObject



671
672
673
# File 'lib/review/idgxmlbuilder.rb', line 671

def endnote_begin
  puts '<endnotes>'
end

#endnote_endObject



675
676
677
# File 'lib/review/idgxmlbuilder.rb', line 675

def endnote_end
  puts '</endnotes>'
end

#endnote_item(id) ⇒ Object



679
680
681
# File 'lib/review/idgxmlbuilder.rb', line 679

def endnote_item(id)
  puts %Q(<endnote id='endnoteb-#{normalize_id(id)}'><span type='endnotenumber'>(#{@chapter.endnote(id).number})</span>\t#{compile_inline(@chapter.endnote(id).content)}</endnote>)
end

#expert(lines) ⇒ Object



1066
1067
1068
# File 'lib/review/idgxmlbuilder.rb', line 1066

def expert(lines)
  captionblock('expert', lines, nil)
end

#extnameObject



45
46
47
# File 'lib/review/idgxmlbuilder.rb', line 45

def extname
  '.xml'
end

#flushright(lines) ⇒ Object



962
963
964
# File 'lib/review/idgxmlbuilder.rb', line 962

def flushright(lines)
  puts split_paragraph(lines).join.gsub('<p>', %Q(<p align='right'>))
end

#footnote(id, str) ⇒ Object



655
656
657
# File 'lib/review/idgxmlbuilder.rb', line 655

def footnote(id, str)
  # see inline_fn
end

#handle_metric(str) ⇒ Object



413
414
415
416
# File 'lib/review/idgxmlbuilder.rb', line 413

def handle_metric(str)
  k, v = str.split('=', 2)
  %Q(#{k}="#{v.sub(/\A["']/, '').sub(/["']\Z/, '')}")
end

#headline(level, label, caption) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/review/idgxmlbuilder.rb', line 108

def headline(level, label, caption)
  output_close_sect_tags(level)
  case level
  when 1
    print %Q(<chapter id="chap:#{@chapter.number}">) if @secttags

    @section = 0
    @subsection = 0
    @subsubsection = 0
    @subsubsubsection = 0
  when 2
    @section += 1
    print %Q(<sect id="sect:#{@chapter.number}.#{@section}">) if @secttags

    @subsection = 0
    @subsubsection = 0
    @subsubsubsection = 0
  when 3
    @subsection += 1
    print %Q(<sect2 id="sect:#{@chapter.number}.#{@section}.#{@subsection}">) if @secttags

    @subsubsection = 0
    @subsubsubsection = 0
  when 4
    @subsubsection += 1
    print %Q(<sect3 id="sect:#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}">) if @secttags

    @subsubsubsection = 0
  when 5
    @subsubsubsection += 1
    print %Q(<sect4 id="sect:#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}.#{@subsubsubsection}">) if @secttags
  when 6 # rubocop:disable Lint/EmptyWhen
  else
    raise "caption level too deep or unsupported: #{level}"
  end

  prefix, _anchor = headline_prefix(level)

  label = label.nil? ? '' : %Q( id="#{label}")
  toccaption = escape(compile_inline(caption.gsub(/@<fn>\{.+?\}/, '')).gsub(/<[^>]+>/, ''))
  puts %Q(<title#{label} aid:pstyle="h#{level}">#{prefix}#{compile_inline(caption)}</title><?dtp level="#{level}" section="#{prefix}#{toccaption}"?>)
end

#hood_begin(_level, _label, caption) ⇒ Object



914
915
916
# File 'lib/review/idgxmlbuilder.rb', line 914

def hood_begin(_level, _label, caption)
  common_column_begin('hood', caption)
end

#hood_end(_level) ⇒ Object



918
919
920
# File 'lib/review/idgxmlbuilder.rb', line 918

def hood_end(_level)
  common_column_end('hood')
end

#hrObject



1170
1171
1172
# File 'lib/review/idgxmlbuilder.rb', line 1170

def hr
  print '<hr />'
end

#image_dummy(id, caption, lines) ⇒ Object



431
432
433
434
435
436
437
438
439
440
441
442
443
# File 'lib/review/idgxmlbuilder.rb', line 431

def image_dummy(id, caption, lines)
  puts '<img>'
  image_header(id, caption) if caption_top?('image')
  print %Q(<pre aid:pstyle="dummyimage">)
  lines.each do |line|
    print detab(line)
    print "\n"
  end
  print '</pre>'
  image_header(id, caption) unless caption_top?('image')
  puts '</img>'
  warn "image not bound: #{id}", location: location
end

#image_extObject



1317
1318
1319
# File 'lib/review/idgxmlbuilder.rb', line 1317

def image_ext
  'eps'
end

#image_header(id, caption) ⇒ Object



445
446
447
448
449
450
451
452
453
# File 'lib/review/idgxmlbuilder.rb', line 445

def image_header(id, caption)
  return true unless caption.present?

  if get_chap.nil?
    puts %Q(<caption>#{I18n.t('image')}#{I18n.t('format_number_without_chapter', [@chapter.image(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
  else
    puts %Q(<caption>#{I18n.t('image')}#{I18n.t('format_number', [get_chap, @chapter.image(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
  end
end

#image_image(id, caption, metric = nil) ⇒ Object



422
423
424
425
426
427
428
429
# File 'lib/review/idgxmlbuilder.rb', line 422

def image_image(id, caption, metric = nil)
  metrics = parse_metric('idgxml', metric)
  puts '<img>'
  image_header(id, caption) if caption_top?('image')
  puts %Q(<Image href="file://#{@chapter.image(id).path.sub(%r{\A./}, '')}"#{metrics} />)
  image_header(id, caption) unless caption_top?('image')
  puts '</img>'
end

#imgtable(lines, id, caption = nil, metric = nil) ⇒ Object



620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
# File 'lib/review/idgxmlbuilder.rb', line 620

def imgtable(lines, id, caption = nil, metric = nil)
  if @chapter.image_bound?(id)
    metrics = parse_metric('idgxml', metric)
    puts '<table>'
    if caption_top?('table') && caption.present?
      table_header(id, caption)
    end
    puts %Q(<imgtable><Image href="file://#{@chapter.image(id).path.sub(%r{\A./}, '')}"#{metrics} /></imgtable>)
    if !caption_top?('table') && caption.present?
      table_header(id, caption)
    end
    puts '</table>'
  else
    warn "image not bound: #{id}", location: location if @strict
    image_dummy(id, caption, lines)
  end
end

#important(lines, caption = nil) ⇒ Object



1006
1007
1008
1009
# File 'lib/review/idgxmlbuilder.rb', line 1006

def important(lines, caption = nil)
  check_nested_minicolumn
  captionblock('important', lines, caption)
end

#indepimage(_lines, id, caption = nil, metric = nil) ⇒ Object Also known as: numberlessimage



1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
# File 'lib/review/idgxmlbuilder.rb', line 1142

def indepimage(_lines, id, caption = nil, metric = nil)
  metrics = parse_metric('idgxml', metric)
  puts '<img>'
  if caption_top?('image')
    puts %Q(<caption>#{compile_inline(caption)}</caption>) if caption.present?
  end
  begin
    puts %Q(<Image href="file://#{@chapter.image(id).path.sub(%r{\A\./}, '')}"#{metrics} />)
  rescue
    warn %Q(image not bound: #{id}), location: location
  end
  unless caption_top?('image')
    puts %Q(<caption>#{compile_inline(caption)}</caption>) if caption.present?
  end
  puts '</img>'
end

#info(lines, caption = nil) ⇒ Object



993
994
995
996
# File 'lib/review/idgxmlbuilder.rb', line 993

def info(lines, caption = nil)
  check_nested_minicolumn
  captionblock('info', lines, caption)
end

#inline_ami(str) ⇒ Object



754
755
756
# File 'lib/review/idgxmlbuilder.rb', line 754

def inline_ami(str)
  %Q(<ami>#{escape(str)}</ami>)
end

#inline_b(str) ⇒ Object



762
763
764
# File 'lib/review/idgxmlbuilder.rb', line 762

def inline_b(str)
  %Q(<b>#{escape(str)}</b>)
end

#inline_balloon(str) ⇒ Object



827
828
829
# File 'lib/review/idgxmlbuilder.rb', line 827

def inline_balloon(str)
  %Q(<balloon>#{escape(str).gsub(/@maru\[(\d+)\]/) { inline_maru($1) }}</balloon>)
end

#inline_bib(id) ⇒ Object



1291
1292
1293
1294
1295
# File 'lib/review/idgxmlbuilder.rb', line 1291

def inline_bib(id)
  %Q(<span type='bibref' idref='#{id}'>[#{@chapter.bibpaper(id).number}]</span>)
rescue KeyError
  app_error "unknown bib: #{id}"
end

#inline_bou(str) ⇒ Object



809
810
811
# File 'lib/review/idgxmlbuilder.rb', line 809

def inline_bou(str)
  %Q(<bou>#{escape(str)}</bou>)
end

#inline_br(_str) ⇒ Object



1186
1187
1188
# File 'lib/review/idgxmlbuilder.rb', line 1186

def inline_br(_str)
  "\n"
end

#inline_chap(id) ⇒ Object



1233
1234
1235
1236
1237
1238
1239
1240
1241
# File 'lib/review/idgxmlbuilder.rb', line 1233

def inline_chap(id)
  if @book.config['chapterlink']
    %Q(<link href="#{id}">#{@book.chapter_index.number(id)}</link>)
  else
    @book.chapter_index.number(id)
  end
rescue KeyError
  app_error "unknown chapter: #{id}"
end

#inline_chapref(id) ⇒ Object



1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
# File 'lib/review/idgxmlbuilder.rb', line 1203

def inline_chapref(id)
  if @book.config.check_version('2', exception: false)
    # backward compatibility
    chs = ['', '', '']
    if @book.config['chapref']
      chs2 = @book.config['chapref'].split(',')
      if chs2.size == 3
        chs = chs2
      else
        app_error '--chapsplitter must have exactly 3 parameters with comma.'
      end
    end
    s = "#{chs[0]}#{@book.chapter_index.number(id)}#{chs[1]}#{@book.chapter_index.title(id)}#{chs[2]}"
    if @book.config['chapterlink']
      %Q(<link href="#{id}">#{s}</link>)
    else
      s
    end
  else
    title = super
    if @book.config['chapterlink']
      %Q(<link href="#{id}">#{title}</link>)
    else
      title
    end
  end
rescue KeyError
  app_error "unknown chapter: #{id}"
end

#inline_code(str) ⇒ Object



1182
1183
1184
# File 'lib/review/idgxmlbuilder.rb', line 1182

def inline_code(str)
  %Q(<tt type='inline-code'>#{escape(str)}</tt>)
end

#inline_column_chap(chapter, id) ⇒ Object



264
265
266
267
268
269
270
271
272
# File 'lib/review/idgxmlbuilder.rb', line 264

def inline_column_chap(chapter, id)
  if @book.config['chapterlink']
    %Q(<link href="#{column_label(id, chapter)}">#{I18n.t('column', compile_inline(chapter.column(id).caption))}</link>)
  else
    I18n.t('column', compile_inline(chapter.column(id).caption))
  end
rescue KeyError
  app_error "unknown column: #{id}"
end

#inline_comment(str) ⇒ Object



647
648
649
650
651
652
653
# File 'lib/review/idgxmlbuilder.rb', line 647

def inline_comment(str)
  if @book.config['draft']
    %Q(<msg>#{escape(str)}</msg>)
  else
    ''
  end
end

#inline_del(str) ⇒ Object



796
797
798
# File 'lib/review/idgxmlbuilder.rb', line 796

def inline_del(str)
  %Q(<del>#{escape(str)}</del>)
end

#inline_dtp(str) ⇒ Object



1178
1179
1180
# File 'lib/review/idgxmlbuilder.rb', line 1178

def inline_dtp(str)
  "<?dtp #{str} ?>"
end

#inline_em(str) ⇒ Object



766
767
768
# File 'lib/review/idgxmlbuilder.rb', line 766

def inline_em(str)
  %Q(<em>#{escape(str)}</em>)
end

#inline_endnote(id) ⇒ Object



665
666
667
668
669
# File 'lib/review/idgxmlbuilder.rb', line 665

def inline_endnote(id)
  %Q(<span type='endnoteref' idref='endnoteb-#{normalize_id(id)}'>(#{@chapter.endnote(id).number})</span>)
rescue KeyError
  app_error "unknown endnote: #{id}"
end

#inline_eq(id) ⇒ Object



398
399
400
# File 'lib/review/idgxmlbuilder.rb', line 398

def inline_eq(id)
  "<span type='eq'>#{super(id)}</span>"
end

#inline_fn(id) ⇒ Object



659
660
661
662
663
# File 'lib/review/idgxmlbuilder.rb', line 659

def inline_fn(id)
  %Q(<footnote>#{compile_inline(@chapter.footnote(id).content.strip)}</footnote>)
rescue KeyError
  app_error "unknown footnote: #{id}"
end

#inline_hd_chap(chap, id) ⇒ Object



1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
# File 'lib/review/idgxmlbuilder.rb', line 1297

def inline_hd_chap(chap, id)
  n = chap.headline_index.number(id)
  if n.present? && chap.number && over_secnolevel?(n)
    I18n.t('hd_quote', [n, compile_inline(chap.headline(id).caption)])
  else
    I18n.t('hd_quote_without_number', compile_inline(chap.headline(id).caption))
  end
rescue KeyError
  app_error "unknown headline: #{id}"
end

#inline_hidx(str) ⇒ Object



750
751
752
# File 'lib/review/idgxmlbuilder.rb', line 750

def inline_hidx(str)
  %Q(<index value="#{escape(str)}" />)
end

#inline_hint(str) ⇒ Object



718
719
720
721
722
723
724
# File 'lib/review/idgxmlbuilder.rb', line 718

def inline_hint(str)
  if @book.config['nolf']
    %Q(<hint>#{escape(str)}</hint>)
  else
    %Q(\n<hint>#{escape(str)}</hint>)
  end
end

#inline_i(str) ⇒ Object



758
759
760
# File 'lib/review/idgxmlbuilder.rb', line 758

def inline_i(str)
  %Q(<i>#{escape(str)}</i>)
end

#inline_icon(id) ⇒ Object



800
801
802
803
804
805
806
807
# File 'lib/review/idgxmlbuilder.rb', line 800

def inline_icon(id)
  begin
    %Q(<Image href="file://#{@chapter.image(id).path.sub(%r{\A\./}, '')}" type="inline" />)
  rescue
    warn "image not bound: #{id}", location: location
    ''
  end
end

#inline_idx(str) ⇒ Object



746
747
748
# File 'lib/review/idgxmlbuilder.rb', line 746

def inline_idx(str)
  %Q(#{escape(str)}<index value="#{escape(str)}" />)
end

#inline_img(id) ⇒ Object



394
395
396
# File 'lib/review/idgxmlbuilder.rb', line 394

def inline_img(id)
  "<span type='image'>#{super(id)}</span>"
end

#inline_imgref(id) ⇒ Object



402
403
404
405
406
407
408
409
410
411
# File 'lib/review/idgxmlbuilder.rb', line 402

def inline_imgref(id)
  chapter, id = extract_chapter_id(id)
  if chapter.image(id).caption.blank?
    inline_img(id)
  elsif get_chap(chapter).nil?
    "<span type='image'>#{I18n.t('image')}#{I18n.t('format_number_without_chapter', [chapter.image(id).number])}#{I18n.t('image_quote', chapter.image(id).caption)}</span>"
  else
    "<span type='image'>#{I18n.t('image')}#{I18n.t('format_number', [get_chap(chapter), chapter.image(id).number])}#{I18n.t('image_quote', chapter.image(id).caption)}</span>"
  end
end

#inline_ins(str) ⇒ Object



792
793
794
# File 'lib/review/idgxmlbuilder.rb', line 792

def inline_ins(str)
  %Q(<ins>#{escape(str)}</ins>)
end

#inline_keytop(str) ⇒ Object



813
814
815
# File 'lib/review/idgxmlbuilder.rb', line 813

def inline_keytop(str)
  %Q(<keytop>#{escape(str)}</keytop>)
end

#inline_labelref(idref) ⇒ Object Also known as: inline_ref



817
818
819
# File 'lib/review/idgxmlbuilder.rb', line 817

def inline_labelref(idref)
  %Q(<ref idref='#{escape(idref)}'>「#{I18n.t('label_marker')}#{escape(idref)}」</ref>) # FIXME: 節名とタイトルも込みで要出力
end

#inline_list(id) ⇒ Object



274
275
276
# File 'lib/review/idgxmlbuilder.rb', line 274

def inline_list(id)
  "<span type='list'>#{super(id)}</span>"
end

#inline_m(str) ⇒ Object



835
836
837
838
# File 'lib/review/idgxmlbuilder.rb', line 835

def inline_m(str)
  @texinlineequation += 1
  %Q(<replace idref="texinline-#{@texinlineequation}"><pre>#{escape(str)}</pre></replace>)
end

#inline_maru(str) ⇒ Object



726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
# File 'lib/review/idgxmlbuilder.rb', line 726

def inline_maru(str)
  if str =~ /\A\d+\Z/
    sprintf('&#x%x;', 9311 + str.to_i)
  elsif str =~ /\A[A-Z]\Z/
    begin
      sprintf('&#x%x;', 9398 + str.codepoints.to_a[0] - 65)
    rescue NoMethodError
      sprintf('&#x%x;', 9398 + str[0] - 65)
    end
  elsif str =~ /\A[a-z]\Z/
    begin
      sprintf('&#x%x;', 9392 + str.codepoints.to_a[0] - 65)
    rescue NoMethodError
      sprintf('&#x%x;', 9392 + str[0] - 65)
    end
  else
    app_error "can't parse maru: #{str}"
  end
end

#inline_pageref(idref) ⇒ Object



823
824
825
# File 'lib/review/idgxmlbuilder.rb', line 823

def inline_pageref(idref)
  %Q(<pageref idref='#{escape(idref)}'>●●</pageref>) # ページ番号を参照
end

#inline_raw(str) ⇒ Object



714
715
716
# File 'lib/review/idgxmlbuilder.rb', line 714

def inline_raw(str)
  super(str).gsub('\\n', "\n")
end

#inline_recipe(id) ⇒ Object



1308
1309
1310
1311
# File 'lib/review/idgxmlbuilder.rb', line 1308

def inline_recipe(id)
  # FIXME
  %Q(<recipe idref="#{escape(id)}">[XXX]「#{escape(id)}」 p.XX</recipe>)
end

#inline_strong(str) ⇒ Object



770
771
772
# File 'lib/review/idgxmlbuilder.rb', line 770

def inline_strong(str)
  %Q(<strong>#{escape(str)}</strong>)
end

#inline_sub(str) ⇒ Object



710
711
712
# File 'lib/review/idgxmlbuilder.rb', line 710

def inline_sub(str)
  %Q(<sub>#{escape(str)}</sub>)
end

#inline_sup(str) ⇒ Object



706
707
708
# File 'lib/review/idgxmlbuilder.rb', line 706

def inline_sup(str)
  %Q(<sup>#{escape(str)}</sup>)
end

#inline_table(id) ⇒ Object



390
391
392
# File 'lib/review/idgxmlbuilder.rb', line 390

def inline_table(id)
  "<span type='table'>#{super(id)}</span>"
end

#inline_title(id) ⇒ Object



1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
# File 'lib/review/idgxmlbuilder.rb', line 1243

def inline_title(id)
  title = super
  if @book.config['chapterlink']
    %Q(<link href="#{id}">#{title}</link>)
  else
    title
  end
rescue KeyError
  app_error "unknown chapter: #{id}"
end

#inline_tt(str) ⇒ Object



774
775
776
# File 'lib/review/idgxmlbuilder.rb', line 774

def inline_tt(str)
  %Q(<tt>#{escape(str)}</tt>)
end

#inline_ttb(str) ⇒ Object Also known as: inline_ttbold



778
779
780
# File 'lib/review/idgxmlbuilder.rb', line 778

def inline_ttb(str)
  %Q(<tt style='bold'>#{escape(str)}</tt>)
end

#inline_tti(str) ⇒ Object



784
785
786
# File 'lib/review/idgxmlbuilder.rb', line 784

def inline_tti(str)
  %Q(<tt style='italic'>#{escape(str)}</tt>)
end

#inline_u(str) ⇒ Object



788
789
790
# File 'lib/review/idgxmlbuilder.rb', line 788

def inline_u(str)
  %Q(<underline>#{escape(str)}</underline>)
end

#inline_uchar(str) ⇒ Object



831
832
833
# File 'lib/review/idgxmlbuilder.rb', line 831

def inline_uchar(str)
  %Q(&#x#{str};)
end

#insideout_begin(_level, _label, caption) ⇒ Object



930
931
932
# File 'lib/review/idgxmlbuilder.rb', line 930

def insideout_begin(_level, _label, caption)
  common_column_begin('insideout', caption)
end

#insideout_end(_level) ⇒ Object



934
935
936
# File 'lib/review/idgxmlbuilder.rb', line 934

def insideout_end(_level)
  common_column_end('insideout')
end

#insn(lines, caption = nil) ⇒ Object



1134
1135
1136
# File 'lib/review/idgxmlbuilder.rb', line 1134

def insn(lines, caption = nil)
  syntaxblock('insn', lines, caption)
end

#label(id) ⇒ Object



1161
1162
1163
1164
# File 'lib/review/idgxmlbuilder.rb', line 1161

def label(id)
  # FIXME
  print "<label id='#{id}' />"
end


1029
1030
1031
# File 'lib/review/idgxmlbuilder.rb', line 1029

def link(lines, caption = nil)
  captionblock('link', lines, caption)
end

#list(lines, id, caption, lang = nil) ⇒ Object



304
305
306
307
308
# File 'lib/review/idgxmlbuilder.rb', line 304

def list(lines, id, caption, lang = nil)
  puts '<codelist>'
  super(lines, id, caption, lang)
  puts '</codelist>'
end

#list_body(_id, lines, _lang) ⇒ Object



310
311
312
313
314
# File 'lib/review/idgxmlbuilder.rb', line 310

def list_body(_id, lines, _lang)
  print '<pre>'
  codelines_body(lines)
  print '</pre>'
end

#list_header(id, caption, _lang) ⇒ Object



278
279
280
281
282
283
284
285
286
# File 'lib/review/idgxmlbuilder.rb', line 278

def list_header(id, caption, _lang)
  return true unless caption.present?

  if get_chap.nil?
    puts %Q(<caption>#{I18n.t('list')}#{I18n.t('format_number_without_chapter', [@chapter.list(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
  else
    puts %Q(<caption>#{I18n.t('list')}#{I18n.t('format_number', [get_chap, @chapter.list(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
  end
end

#listnum(lines, id, caption, lang = nil) ⇒ Object



329
330
331
332
333
# File 'lib/review/idgxmlbuilder.rb', line 329

def listnum(lines, id, caption, lang = nil)
  puts '<codelist>'
  super(lines, id, caption, lang)
  puts '</codelist>'
end

#listnum_body(lines, _lang) ⇒ Object



335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
# File 'lib/review/idgxmlbuilder.rb', line 335

def listnum_body(lines, _lang)
  print '<pre>'
  no = 1
  first_line_num = line_num
  lines.each_with_index do |line, i|
    if @book.config['listinfo']
      print %Q(<listinfo line="#{no}")
      print %Q( begin="1") if no == 1
      print %Q( end="#{no}") if no == lines.size
      print '>'
    end
    print detab(%Q(<span type='lineno'>) + (i + first_line_num).to_s.rjust(2) + ': </span>' + line)
    print "\n"
    print '</listinfo>' if @book.config['listinfo']
    no += 1
  end
  print '</pre>'
end

#memo(lines, caption = nil) ⇒ Object



983
984
985
986
# File 'lib/review/idgxmlbuilder.rb', line 983

def memo(lines, caption = nil)
  check_nested_minicolumn
  captionblock('memo', lines, caption)
end

#nodisp_begin(level, label, caption) ⇒ Object



866
867
# File 'lib/review/idgxmlbuilder.rb', line 866

def nodisp_begin(level, label, caption)
end

#nodisp_end(level) ⇒ Object



869
870
# File 'lib/review/idgxmlbuilder.rb', line 869

def nodisp_end(level)
end

#nofunc_text(str) ⇒ Object



1313
1314
1315
# File 'lib/review/idgxmlbuilder.rb', line 1313

def nofunc_text(str)
  escape(str)
end

#noindentObject



840
841
842
# File 'lib/review/idgxmlbuilder.rb', line 840

def noindent
  @noindent = true
end

#nonum_begin(level, _label, caption) ⇒ Object



852
853
854
# File 'lib/review/idgxmlbuilder.rb', line 852

def nonum_begin(level, _label, caption)
  puts %Q(<title aid:pstyle="h#{level}">#{compile_inline(caption)}</title><?dtp level="#{level}" section="#{escape(compile_inline(caption))}"?>)
end

#nonum_end(level) ⇒ Object



856
857
# File 'lib/review/idgxmlbuilder.rb', line 856

def nonum_end(level)
end

#note(lines, caption = nil) ⇒ Object



978
979
980
981
# File 'lib/review/idgxmlbuilder.rb', line 978

def note(lines, caption = nil)
  check_nested_minicolumn
  captionblock('note', lines, caption)
end

#notice(lines, caption = nil) ⇒ Object



1033
1034
1035
1036
1037
1038
1039
1040
# File 'lib/review/idgxmlbuilder.rb', line 1033

def notice(lines, caption = nil)
  check_nested_minicolumn
  if caption
    captionblock('notice-t', lines, caption, 'notice-title')
  else
    captionblock('notice', lines, nil)
  end
end

#notoc_begin(level, _label, caption) ⇒ Object



859
860
861
# File 'lib/review/idgxmlbuilder.rb', line 859

def notoc_begin(level, _label, caption)
  puts %Q(<title aid:pstyle="h#{level}">#{compile_inline(caption)}</title>)
end

#notoc_end(level) ⇒ Object



863
864
# File 'lib/review/idgxmlbuilder.rb', line 863

def notoc_end(level)
end

#ol_beginObject



204
205
206
207
# File 'lib/review/idgxmlbuilder.rb', line 204

def ol_begin
  puts '<ol>'
  @ol_num ||= 1 # rubocop:disable Naming/MemoizedInstanceVariableName
end

#ol_endObject



214
215
216
217
# File 'lib/review/idgxmlbuilder.rb', line 214

def ol_end
  puts '</ol>'
  @ol_num = nil
end

#ol_item(lines, num) ⇒ Object



209
210
211
212
# File 'lib/review/idgxmlbuilder.rb', line 209

def ol_item(lines, num)
  puts %Q(<li aid:pstyle="ol-item" olnum="#{@ol_num}" num="#{num}">#{join_lines_to_paragraph(lines).chomp}</li>)
  @ol_num += 1
end

#olnum(num) ⇒ Object



219
220
221
# File 'lib/review/idgxmlbuilder.rb', line 219

def olnum(num)
  @ol_num = num.to_i
end

#output_close_sect_tags(level) ⇒ Object



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/review/idgxmlbuilder.rb', line 151

def output_close_sect_tags(level)
  if @secttags
    if level <= 5 && @subsubsubsection > 0
      print '</sect4>'
    end
    if level <= 4 && @subsubsection > 0
      print '</sect3>'
    end
    if level <= 3 && @subsection > 0
      print '</sect2>'
    end
    if level <= 2 && @section > 0
      print '</sect>'
    end
  end
end

#pagebreakObject



848
849
850
# File 'lib/review/idgxmlbuilder.rb', line 848

def pagebreak
  puts '<pagebreak />'
end

#paragraph(lines) ⇒ Object



239
240
241
242
243
244
245
246
247
248
249
250
# File 'lib/review/idgxmlbuilder.rb', line 239

def paragraph(lines)
  if @noindent.nil?
    if lines[0] =~ /\A(\t+)/
      puts %Q(<p inlist="#{$1.size}">#{join_lines_to_paragraph(lines).sub(/\A\t+/, '')}</p>)
    else
      puts "<p>#{join_lines_to_paragraph(lines)}</p>"
    end
  else
    puts %Q(<p aid:pstyle="noindent" noindent='1'>#{join_lines_to_paragraph(lines)}</p>)
    @noindent = nil
  end
end

#parse_table_rows(lines) ⇒ Object



514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
# File 'lib/review/idgxmlbuilder.rb', line 514

def parse_table_rows(lines)
  sepidx = nil
  rows = []
  lines.each_with_index do |line, idx|
    if /\A[=\-]{12}/ =~ line
      sepidx ||= idx
      next
    end
    if @tablewidth
      rows.push(line.gsub(/\t\.\t/, "\tDUMMYCELLSPLITTER\t").gsub(/\t\.\.\t/, "\t.\t").gsub(/\t\.\Z/, "\tDUMMYCELLSPLITTER").gsub(/\t\.\.\Z/, "\t.").gsub(/\A\./, ''))
    else
      rows.push(line.gsub(/\t\.\t/, "\t\t").gsub(/\t\.\.\t/, "\t.\t").gsub(/\t\.\Z/, "\t").gsub(/\t\.\.\Z/, "\t.").gsub(/\A\./, ''))
    end
    col2 = rows[rows.length - 1].split(table_row_separator_regexp).length
    @col = col2 if col2 > @col
  end
  app_error 'no rows in the table' if rows.empty?
  [sepidx, rows]
end

#planning(lines, caption = nil) ⇒ Object



998
999
1000
# File 'lib/review/idgxmlbuilder.rb', line 998

def planning(lines, caption = nil)
  captionblock('planning', lines, caption)
end

#point(lines, caption = nil) ⇒ Object



1042
1043
1044
1045
1046
1047
1048
# File 'lib/review/idgxmlbuilder.rb', line 1042

def point(lines, caption = nil)
  if caption
    captionblock('point-t', lines, caption, 'point-title')
  else
    captionblock('point', lines, nil)
  end
end

#post_paragraphObject



41
42
43
# File 'lib/review/idgxmlbuilder.rb', line 41

def post_paragraph
  '</p>'
end

#practice(lines) ⇒ Object



1062
1063
1064
# File 'lib/review/idgxmlbuilder.rb', line 1062

def practice(lines)
  captionblock('practice', lines, nil)
end

#pre_paragraphObject



37
38
39
# File 'lib/review/idgxmlbuilder.rb', line 37

def pre_paragraph
  '<p>'
end

#puts(arg) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/review/idgxmlbuilder.rb', line 72

def puts(arg)
  if @book.config['nolf'].present?
    print arg
  else
    super
  end
end

#quote(lines) ⇒ Object



385
386
387
388
# File 'lib/review/idgxmlbuilder.rb', line 385

def quote(lines)
  blocked_lines = split_paragraph(lines)
  puts "<quote>#{blocked_lines.join}</quote>"
end

#rawblock(lines) ⇒ Object



1190
1191
1192
1193
1194
1195
1196
1197
# File 'lib/review/idgxmlbuilder.rb', line 1190

def rawblock(lines)
  no = 1
  lines.each do |l|
    print l.gsub('&lt;', '<').gsub('&gt;', '>').gsub('&quot;', '"').gsub('&amp;', '&')
    print "\n" unless lines.length == no
    no += 1
  end
end

#read(lines) ⇒ Object Also known as: lead



252
253
254
# File 'lib/review/idgxmlbuilder.rb', line 252

def read(lines)
  puts %Q(<lead>#{split_paragraph(lines).join}</lead>)
end

#ref_begin(_level, label, _caption) ⇒ Object



938
939
940
941
942
943
944
# File 'lib/review/idgxmlbuilder.rb', line 938

def ref_begin(_level, label, _caption)
  if label
    puts "<reference id='#{label}'>"
  else
    puts '<reference>'
  end
end

#ref_end(_level) ⇒ Object



946
947
948
# File 'lib/review/idgxmlbuilder.rb', line 946

def ref_end(_level)
  puts '</reference>'
end

#reference(lines) ⇒ Object



1058
1059
1060
# File 'lib/review/idgxmlbuilder.rb', line 1058

def reference(lines)
  captionblock('reference', lines, nil)
end

#resultObject



80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/review/idgxmlbuilder.rb', line 80

def result
  check_printendnotes

  s = ''
  if @secttags
    s += '</sect4>' if @subsubsubsection > 0
    s += '</sect3>' if @subsubsection > 0
    s += '</sect2>' if @subsection > 0
    s += '</sect>' if @section > 0
    s += '</chapter>' if @chapter.number > 0
  end
  solve_nest(@output.string) + s + "</#{@rootelement}>\n"
end

#result_metric(array) ⇒ Object



418
419
420
# File 'lib/review/idgxmlbuilder.rb', line 418

def result_metric(array)
  " #{array.join(' ')}"
end

#security(lines, caption = nil) ⇒ Object



1011
1012
1013
# File 'lib/review/idgxmlbuilder.rb', line 1011

def security(lines, caption = nil)
  captionblock('security', lines, caption)
end

#shoot(lines, caption = nil) ⇒ Object



1050
1051
1052
1053
1054
1055
1056
# File 'lib/review/idgxmlbuilder.rb', line 1050

def shoot(lines, caption = nil)
  if caption
    captionblock('shoot-t', lines, caption, 'shoot-title')
  else
    captionblock('shoot', lines, nil)
  end
end

#solve_nest(s) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/review/idgxmlbuilder.rb', line 94

def solve_nest(s)
  check_nest
  s.gsub("</dd></dl>\x01→dl←\x01", '').
    gsub("\x01→/dl←\x01", "</dd></dl>←END\x01").
    gsub("</li></ul>\x01→ul←\x01", '').
    gsub("\x01→/ul←\x01", "</li></ul>←END\x01").
    gsub("</li></ol>\x01→ol←\x01", '').
    gsub("\x01→/ol←\x01", "</li></ol>←END\x01").
    gsub("</dl>←END\x01<dl>", '').
    gsub("</ul>←END\x01<ul>", '').
    gsub("</ol>←END\x01<ol>", '').
    gsub("←END\x01", '')
end

#source(lines, caption = nil, lang = nil) ⇒ Object



1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
# File 'lib/review/idgxmlbuilder.rb', line 1254

def source(lines, caption = nil, lang = nil)
  puts '<source>'
  if caption_top?('list')
    source_header(caption)
  end
  source_body(lines, lang)
  unless caption_top?('list')
    source_header(caption)
  end
  puts '</source>'
end

#source_body(lines, _lang) ⇒ Object



1270
1271
1272
1273
1274
# File 'lib/review/idgxmlbuilder.rb', line 1270

def source_body(lines, _lang)
  puts '<pre>'
  codelines_body(lines)
  print '</pre>'
end

#source_header(caption) ⇒ Object



1266
1267
1268
# File 'lib/review/idgxmlbuilder.rb', line 1266

def source_header(caption)
  puts %Q(<caption>#{compile_inline(caption)}</caption>) if caption.present?
end

#sup_begin(_level, label, _caption) ⇒ Object



950
951
952
953
954
955
956
# File 'lib/review/idgxmlbuilder.rb', line 950

def sup_begin(_level, label, _caption)
  if label
    puts "<supplement id='#{label}'>"
  else
    puts '<supplement>'
  end
end

#sup_end(_level) ⇒ Object



958
959
960
# File 'lib/review/idgxmlbuilder.rb', line 958

def sup_end(_level)
  puts '</supplement>'
end

#syntaxblock(type, lines, caption) ⇒ Object



1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
# File 'lib/review/idgxmlbuilder.rb', line 1097

def syntaxblock(type, lines, caption)
  captionstr = nil
  if caption.present?
    titleopentag = %Q(caption aid:pstyle="#{type}-title")
    titleclosetag = 'caption'
    if type == 'insn'
      titleopentag = %Q(floattitle type="insn")
      titleclosetag = 'floattitle'
    end
    captionstr = %Q(<#{titleopentag}>#{compile_inline(caption)}</#{titleclosetag}>)
  end
  print "<#{type}>"
  if caption_top?('list')
    puts captionstr
  else
    puts ''
  end

  no = 1
  lines.each do |line|
    if @book.config['listinfo']
      print %Q(<listinfo line="#{no}")
      print %Q( begin="1") if no == 1
      print %Q( end="#{no}") if no == lines.size
      print '>'
    end
    print detab(line)
    print "\n"
    print '</listinfo>' if @book.config['listinfo']
    no += 1
  end
  unless caption_top?('list')
    print captionstr
  end
  puts "</#{type}>"
end

#table(lines, id = nil, caption = nil) ⇒ Object



480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
# File 'lib/review/idgxmlbuilder.rb', line 480

def table(lines, id = nil, caption = nil)
  @tablewidth = nil
  if @book.config['tableopt']
    @tablewidth = @book.config['tableopt'].split(',')[0].to_f / @book.config['pt_to_mm_unit'].to_f
  end
  @col = 0

  sepidx, rows = parse_table_rows(lines)
  puts '<table>'

  begin
    if caption_top?('table') && caption.present?
      table_header(id, caption)
    end

    if @tablewidth.nil?
      print '<tbody>'
    else
      print %Q(<tbody xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/" aid:table="table" aid:trows="#{rows.length}" aid:tcols="#{@col}">)
    end
    @table_id = id
    table_rows(sepidx, rows)
    puts '</tbody>'

    if !caption_top?('table') && caption.present?
      table_header(id, caption)
    end
  rescue KeyError
    app_error "no such table: #{id}"
  end
  puts '</table>'
  @tsize = nil
end

#table_begin(ncols) ⇒ Object



598
599
# File 'lib/review/idgxmlbuilder.rb', line 598

def table_begin(ncols)
end

#table_endObject



613
614
# File 'lib/review/idgxmlbuilder.rb', line 613

def table_end
end

#table_header(id, caption) ⇒ Object



588
589
590
591
592
593
594
595
596
# File 'lib/review/idgxmlbuilder.rb', line 588

def table_header(id, caption)
  if id.nil?
    puts %Q(<caption>#{compile_inline(caption)}</caption>)
  elsif get_chap
    puts %Q(<caption>#{I18n.t('table')}#{I18n.t('format_number', [get_chap, @chapter.table(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
  else
    puts %Q(<caption>#{I18n.t('table')}#{I18n.t('format_number_without_chapter', [@chapter.table(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
  end
end

#table_rows(sepidx, rows) ⇒ Object



534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
# File 'lib/review/idgxmlbuilder.rb', line 534

def table_rows(sepidx, rows)
  cellwidth = []
  if @tablewidth
    if @tsize.nil?
      @col.times { |n| cellwidth[n] = @tablewidth / @col }
    else
      cellwidth = @tsize.split(/\s*,\s*/)
      totallength = 0
      cellwidth.size.times do |n|
        cellwidth[n] = cellwidth[n].to_f / @book.config['pt_to_mm_unit'].to_f
        totallength += cellwidth[n]
        warn "total length exceeds limit for table: #{@table_id}", location: location if totallength > @tablewidth
      end
      if cellwidth.size < @col
        cw = (@tablewidth - totallength) / (@col - cellwidth.size)
        warn "auto cell sizing exceeds limit for table: #{@table_id}", location: location if cw <= 0
        (cellwidth.size..(@col - 1)).each { |i| cellwidth[i] = cw }
      end
    end
  end

  if sepidx
    sepidx.times do |y|
      if @tablewidth.nil?
        puts %Q(<tr type="header">#{rows.shift}</tr>)
      else
        i = 0
        rows.shift.split(table_row_separator_regexp).each_with_index do |cell, x|
          print %Q(<td xyh="#{x + 1},#{y + 1},#{sepidx}" aid:table="cell" aid:theader="1" aid:crows="1" aid:ccols="1" aid:ccolwidth="#{sprintf('%.3f', cellwidth[i])}">#{cell.sub('DUMMYCELLSPLITTER', '')}</td>)
          i += 1
        end
      end
    end
  end
  trputs(@tablewidth, rows, cellwidth, sepidx)
end

#td(str) ⇒ Object



609
610
611
# File 'lib/review/idgxmlbuilder.rb', line 609

def td(str)
  str
end

#term(lines) ⇒ Object



1025
1026
1027
# File 'lib/review/idgxmlbuilder.rb', line 1025

def term(lines)
  captionblock('term', lines, nil)
end

#texequation(lines, id = nil, caption = '') ⇒ Object



455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
# File 'lib/review/idgxmlbuilder.rb', line 455

def texequation(lines, id = nil, caption = '')
  @texblockequation += 1
  caption_str = nil
  if id
    puts '<equationblock>'
    if get_chap.nil?
      caption_str = %Q(<caption>#{I18n.t('equation')}#{I18n.t('format_number_without_chapter', [@chapter.equation(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
    else
      caption_str = %Q(<caption>#{I18n.t('equation')}#{I18n.t('format_number', [get_chap, @chapter.equation(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}</caption>)
    end
    puts caption_str if caption_top?('equation')
  end

  puts %Q(<replace idref="texblock-#{@texblockequation}">)
  puts '<pre>'
  print lines.join("\n")
  puts '</pre>'
  puts '</replace>'

  if id
    puts caption_str unless caption_top?('equation')
    puts '</equationblock>'
  end
end

#text(str) ⇒ Object



1199
1200
1201
# File 'lib/review/idgxmlbuilder.rb', line 1199

def text(str)
  str
end

#th(str) ⇒ Object



605
606
607
# File 'lib/review/idgxmlbuilder.rb', line 605

def th(str)
  %Q(<?dtp tablerow header?>#{str})
end

#tip(lines, caption = nil) ⇒ Object



988
989
990
991
# File 'lib/review/idgxmlbuilder.rb', line 988

def tip(lines, caption = nil)
  check_nested_minicolumn
  captionblock('tip', lines, caption)
end

#tr(rows) ⇒ Object



601
602
603
# File 'lib/review/idgxmlbuilder.rb', line 601

def tr(rows)
  puts %Q(<tr>#{rows.join("\t")}</tr>)
end

#trputs(tablewidth, rows, cellwidth, sepidx) ⇒ Object



571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
# File 'lib/review/idgxmlbuilder.rb', line 571

def trputs(tablewidth, rows, cellwidth, sepidx)
  sepidx = 0 if sepidx.nil?
  if tablewidth
    rows.each_with_index do |row, y|
      i = 0
      row.split(table_row_separator_regexp).each_with_index do |cell, x|
        print %Q(<td xyh="#{x + 1},#{y + 1 + sepidx},#{sepidx}" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="#{sprintf('%.3f', cellwidth[i])}">#{cell.sub('DUMMYCELLSPLITTER', '')}</td>)
        i += 1
      end
    end
  else
    lastline = rows.pop
    rows.each { |row| puts "<tr>#{row}</tr>" }
    puts %Q(<tr type="lastline">#{lastline}</tr>) if lastline
  end
end

#ul_beginObject



168
169
170
171
172
# File 'lib/review/idgxmlbuilder.rb', line 168

def ul_begin
  level = block_given? ? yield : ''
  level = nil if level == 1
  puts "<ul#{level == 1 ? nil : level}>"
end

#ul_endObject



198
199
200
201
202
# File 'lib/review/idgxmlbuilder.rb', line 198

def ul_end
  level = block_given? ? yield : ''
  level = nil if level == 1
  puts "</ul#{level}>"
end

#ul_item_begin(lines) ⇒ Object



174
175
176
# File 'lib/review/idgxmlbuilder.rb', line 174

def ul_item_begin(lines)
  print %Q(<li aid:pstyle="ul-item">#{join_lines_to_paragraph(lines).chomp})
end

#ul_item_endObject



178
179
180
# File 'lib/review/idgxmlbuilder.rb', line 178

def ul_item_end
  puts '</li>'
end

#warning(lines, caption = nil) ⇒ Object



1020
1021
1022
1023
# File 'lib/review/idgxmlbuilder.rb', line 1020

def warning(lines, caption = nil)
  check_nested_minicolumn
  captionblock('warning', lines, caption)
end

#world_begin(_level, _label, caption) ⇒ Object



906
907
908
# File 'lib/review/idgxmlbuilder.rb', line 906

def world_begin(_level, _label, caption)
  common_column_begin('world', caption)
end

#world_end(_level) ⇒ Object



910
911
912
# File 'lib/review/idgxmlbuilder.rb', line 910

def world_end(_level)
  common_column_end('world')
end

#xcolumn_begin(_level, _label, caption) ⇒ Object



898
899
900
# File 'lib/review/idgxmlbuilder.rb', line 898

def xcolumn_begin(_level, _label, caption)
  common_column_begin('x', caption)
end

#xcolumn_end(_level) ⇒ Object



902
903
904
# File 'lib/review/idgxmlbuilder.rb', line 902

def xcolumn_end(_level)
  common_column_end('x')
end