review 0.6.0 → 0.9.0
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.
- data/ChangeLog +441 -0
- data/README.rdoc +25 -0
- data/Rakefile +13 -1
- data/VERSION +1 -1
- data/bin/review-check +1 -1
- data/bin/review-compile +19 -10
- data/bin/review-epubmaker +114 -17
- data/bin/review-index +8 -1
- data/bin/review-pdfmaker +378 -0
- data/bin/review-preproc +2 -3
- data/bin/review-vol +1 -2
- data/debian/README.Debian +12 -0
- data/debian/README.source +5 -0
- data/debian/changelog +5 -0
- data/debian/compat +1 -0
- data/debian/control +22 -0
- data/debian/copyright +60 -0
- data/debian/docs +5 -0
- data/debian/manpage.1.ex +59 -0
- data/debian/patches/path.diff +91 -0
- data/debian/patches/series +1 -0
- data/debian/review.install +13 -0
- data/debian/review.links +4 -0
- data/debian/rules +13 -0
- data/debian/source/format +1 -0
- data/doc/format.rdoc +477 -0
- data/doc/format.re +19 -0
- data/doc/format_idg.rdoc +180 -0
- data/doc/ruby-uuid/README +11 -0
- data/doc/ruby-uuid/README.ja +34 -0
- data/doc/sample.css +17 -0
- data/doc/sample.yaml +8 -4
- data/lib/lineinput.rb +1 -1
- data/lib/review/book.rb +43 -36
- data/lib/review/builder.rb +78 -33
- data/lib/review/compiler.rb +45 -48
- data/lib/review/epubbuilder.rb +1 -675
- data/lib/review/exception.rb +1 -1
- data/lib/review/htmlbuilder.rb +627 -49
- data/lib/review/htmlutils.rb +5 -0
- data/lib/review/idgxmlbuilder.rb +239 -250
- data/lib/review/index.rb +84 -7
- data/lib/review/latexbuilder.rb +261 -42
- data/lib/review/latexutils.rb +15 -6
- data/lib/review/preprocessor.rb +40 -6
- data/lib/review/textutils.rb +22 -0
- data/lib/review/topbuilder.rb +4 -1
- data/lib/uuid.rb +312 -0
- data/review.gemspec +44 -12
- data/test/CHAPS +2 -0
- data/test/bib.re +13 -0
- data/test/test.re +43 -0
- data/test/test_book.rb +1191 -0
- data/test/test_builder.rb +147 -0
- data/test/test_htmlbuilder.rb +191 -10
- data/test/test_htmlutils.rb +24 -0
- data/test/test_idgxmlbuilder.rb +310 -0
- data/test/test_index.rb +15 -0
- data/test/test_latexbuilder.rb +217 -6
- data/test/test_lineinput.rb +198 -0
- data/test/test_textutils.rb +68 -0
- data/test/test_uuid.rb +156 -0
- metadata +43 -10
- data/doc/format.txt +0 -434
- data/doc/format_idg.txt +0 -194
- data/doc/format_sjis.txt +0 -313
- data/setup.rb +0 -1587
- data/test/test_epubbuilder.rb +0 -73
    
        data/lib/review/builder.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            #
         | 
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 2 | 
             
            #
         | 
| 3 3 | 
             
            # Copyright (c) 2002-2009 Minero Aoki
         | 
| 4 4 | 
             
            #
         | 
| @@ -16,6 +16,13 @@ module ReVIEW | |
| 16 16 |  | 
| 17 17 | 
             
              class Builder
         | 
| 18 18 |  | 
| 19 | 
            +
                def pre_paragraph
         | 
| 20 | 
            +
                  nil
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
                def post_paragraph
         | 
| 23 | 
            +
                  nil
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 19 26 | 
             
                def initialize(strict = false, *args)
         | 
| 20 27 | 
             
                  @strict = strict
         | 
| 21 28 | 
             
                  builder_init(*args)
         | 
| @@ -25,10 +32,6 @@ module ReVIEW | |
| 25 32 | 
             
                end
         | 
| 26 33 | 
             
                private :builder_init
         | 
| 27 34 |  | 
| 28 | 
            -
                def setParameter(param)
         | 
| 29 | 
            -
                  @param = param
         | 
| 30 | 
            -
                end
         | 
| 31 | 
            -
             | 
| 32 35 | 
             
                def bind(compiler, chapter, location)
         | 
| 33 36 | 
             
                  @compiler = compiler
         | 
| 34 37 | 
             
                  @chapter = chapter
         | 
| @@ -46,28 +49,30 @@ module ReVIEW | |
| 46 49 | 
             
                  @output.string
         | 
| 47 50 | 
             
                end
         | 
| 48 51 |  | 
| 49 | 
            -
                 | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
                   | 
| 53 | 
            -
                     | 
| 54 | 
            -
                  elsif  | 
| 55 | 
            -
                     | 
| 52 | 
            +
                alias :raw_result result
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def convert_outencoding(*s)
         | 
| 55 | 
            +
                  if ReVIEW.book.param["outencoding"] =~ /^EUC$/i
         | 
| 56 | 
            +
                    NKF.nkf("-W, -e", *s)
         | 
| 57 | 
            +
                  elsif ReVIEW.book.param["outencoding"] =~ /^SJIS$/i
         | 
| 58 | 
            +
                    NKF.nkf("-W, -s", *s)
         | 
| 59 | 
            +
                  elsif ReVIEW.book.param["outencoding"] =~ /^JIS$/i
         | 
| 60 | 
            +
                    NKF.nkf("-W, -j", *s)
         | 
| 56 61 | 
             
                  else
         | 
| 57 | 
            -
                     | 
| 62 | 
            +
                    ## for 1.9 compatibility
         | 
| 63 | 
            +
                    if s.size == 1
         | 
| 64 | 
            +
                      return s[0]
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
                    return *s
         | 
| 58 67 | 
             
                  end
         | 
| 59 68 | 
             
                end
         | 
| 60 69 |  | 
| 70 | 
            +
                def print(*s)
         | 
| 71 | 
            +
                  @output.print(convert_outencoding(*s))
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
             | 
| 61 74 | 
             
                def puts(*s)
         | 
| 62 | 
            -
                   | 
| 63 | 
            -
                    @output.puts(NKF.nkf("-W, -e", *s))
         | 
| 64 | 
            -
                  elsif @param["outencoding"] =~ /^SJIS$/i
         | 
| 65 | 
            -
                    @output.puts(NKF.nkf("-W, -s", *s))
         | 
| 66 | 
            -
                  elsif @param["outencoding"] =~ /^JIS$/i
         | 
| 67 | 
            -
                    @output.puts(NKF.nkf("-W, -j", *s))
         | 
| 68 | 
            -
                  else
         | 
| 69 | 
            -
                    @output.puts(*s)
         | 
| 70 | 
            -
                  end
         | 
| 75 | 
            +
                  @output.puts(convert_outencoding(*s))
         | 
| 71 76 | 
             
                end
         | 
| 72 77 |  | 
| 73 78 | 
             
                def list(lines, id, caption)
         | 
| @@ -93,15 +98,9 @@ module ReVIEW | |
| 93 98 | 
             
                  source_body lines
         | 
| 94 99 | 
             
                end
         | 
| 95 100 |  | 
| 96 | 
            -
                def image(lines, id,  | 
| 97 | 
            -
                  if caption
         | 
| 98 | 
            -
                    metric = caption_or_metric
         | 
| 99 | 
            -
                  else
         | 
| 100 | 
            -
                    metric = nil
         | 
| 101 | 
            -
                    caption = caption_or_metric
         | 
| 102 | 
            -
                  end
         | 
| 101 | 
            +
                def image(lines, id, caption, metric = nil)
         | 
| 103 102 | 
             
                  if @chapter.image(id).bound?
         | 
| 104 | 
            -
                    image_image id,  | 
| 103 | 
            +
                    image_image id, caption, metric
         | 
| 105 104 | 
             
                  else
         | 
| 106 105 | 
             
                    warn "image not bound: #{id}" if @strict
         | 
| 107 106 | 
             
                    image_dummy id, caption, lines
         | 
| @@ -131,15 +130,15 @@ module ReVIEW | |
| 131 130 | 
             
                  table_begin rows.first.size
         | 
| 132 131 | 
             
                  if sepidx
         | 
| 133 132 | 
             
                    sepidx.times do
         | 
| 134 | 
            -
                      tr rows.shift.map {|s| th( | 
| 133 | 
            +
                      tr rows.shift.map {|s| th(s) }
         | 
| 135 134 | 
             
                    end
         | 
| 136 135 | 
             
                    rows.each do |cols|
         | 
| 137 | 
            -
                      tr cols.map {|s| td( | 
| 136 | 
            +
                      tr cols.map {|s| td(s) }
         | 
| 138 137 | 
             
                    end
         | 
| 139 138 | 
             
                  else
         | 
| 140 139 | 
             
                    rows.each do |cols|
         | 
| 141 140 | 
             
                      h, *cs = *cols
         | 
| 142 | 
            -
                      tr [th( | 
| 141 | 
            +
                      tr [th(h)] + cs.map {|s| td(s) }
         | 
| 143 142 | 
             
                    end
         | 
| 144 143 | 
             
                  end
         | 
| 145 144 | 
             
                  table_end
         | 
| @@ -257,10 +256,41 @@ module ReVIEW | |
| 257 256 | 
             
                  puts "</div>"
         | 
| 258 257 | 
             
                end
         | 
| 259 258 |  | 
| 259 | 
            +
                def inline_hd(id)
         | 
| 260 | 
            +
                  m = /\A(\w+)\|(.+)/.match(id)
         | 
| 261 | 
            +
                  chapter = @book.chapters.detect{|chap| chap.id == m[1]} if m && m[1]
         | 
| 262 | 
            +
                  return inline_hd_chap(chapter, m[2]) if chapter
         | 
| 263 | 
            +
                  return inline_hd_chap(@chapter, id)
         | 
| 264 | 
            +
                end
         | 
| 265 | 
            +
             | 
| 260 266 | 
             
                def raw(str)
         | 
| 261 267 | 
             
                  print str.gsub("\\n", "\n")
         | 
| 262 268 | 
             
                end
         | 
| 263 269 |  | 
| 270 | 
            +
                def find_pathes(id)
         | 
| 271 | 
            +
                  if ReVIEW.book.param["subdirmode"].nil?
         | 
| 272 | 
            +
                    re = /\A#{@chapter.name}-#{id}(?i:#{@book.image_types.join('|')})\z/x
         | 
| 273 | 
            +
                    entries().select {|ent| re =~ ent }\
         | 
| 274 | 
            +
                    .sort_by {|ent| @book.image_types.index(File.extname(ent).downcase) }\
         | 
| 275 | 
            +
                    .map {|ent| "#{@book.basedir}/#{ent}" }
         | 
| 276 | 
            +
                  else
         | 
| 277 | 
            +
                    re = /\A#{id}(?i:#{@chapter.name.join('|')})\z/x
         | 
| 278 | 
            +
                    entries().select {|ent| re =~ ent }\
         | 
| 279 | 
            +
                    .sort_by {|ent| @book.image_types.index(File.extname(ent).downcase) }\
         | 
| 280 | 
            +
                    .map {|ent| "#{@book.asedir}/#{@chapter.name}/#{ent}" }
         | 
| 281 | 
            +
                  end
         | 
| 282 | 
            +
                end
         | 
| 283 | 
            +
                
         | 
| 284 | 
            +
                def entries
         | 
| 285 | 
            +
                  if ReVIEW.book.param["subdirmode"].nil?
         | 
| 286 | 
            +
                    @entries ||= Dir.entries(@book.basedir + @book.image_dir)
         | 
| 287 | 
            +
                  else
         | 
| 288 | 
            +
                    @entries ||= Dir.entries(File.join(@book.basedir + @book.image_dir, @chapter.name))
         | 
| 289 | 
            +
                  end
         | 
| 290 | 
            +
                rescue Errno::ENOENT
         | 
| 291 | 
            +
                @entries = []
         | 
| 292 | 
            +
                end
         | 
| 293 | 
            +
             | 
| 264 294 | 
             
                def warn(msg)
         | 
| 265 295 | 
             
                  $stderr.puts "#{@location}: warning: #{msg}"
         | 
| 266 296 | 
             
                end
         | 
| @@ -269,6 +299,21 @@ module ReVIEW | |
| 269 299 | 
             
                  raise ApplicationError, "#{@location}: error: #{msg}"
         | 
| 270 300 | 
             
                end
         | 
| 271 301 |  | 
| 302 | 
            +
                def getChap(chapter = @chapter)
         | 
| 303 | 
            +
                  if ReVIEW.book.param["secnolevel"] > 0 && !chapter.number.nil? && !chapter.number.to_s.empty?
         | 
| 304 | 
            +
                    return "#{chapter.number}."
         | 
| 305 | 
            +
                  end
         | 
| 306 | 
            +
                  return ""
         | 
| 307 | 
            +
                end
         | 
| 308 | 
            +
             | 
| 309 | 
            +
                def extract_chapter_id(chap_ref)
         | 
| 310 | 
            +
                  m = /\A(\w+)\|(.+)/.match(chap_ref)
         | 
| 311 | 
            +
                  if m
         | 
| 312 | 
            +
                    return [@book.chapters.detect{|chap| chap.id == m[1]}, m[2]]
         | 
| 313 | 
            +
                  else
         | 
| 314 | 
            +
                    return [@chapter, chap_ref]
         | 
| 315 | 
            +
                  end
         | 
| 316 | 
            +
                end
         | 
| 272 317 | 
             
              end
         | 
| 273 318 |  | 
| 274 319 | 
             
            end   # module ReVIEW
         | 
    
        data/lib/review/compiler.rb
    CHANGED
    
    | @@ -1,3 +1,4 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 1 2 | 
             
            #
         | 
| 2 3 | 
             
            # Copyright (c) 2002-2007 Minero Aoki
         | 
| 3 4 | 
             
            # Copyright (c) 2009-2010 Minero Aoki, Kenshi Muto
         | 
| @@ -27,7 +28,11 @@ module ReVIEW | |
| 27 28 | 
             
                end
         | 
| 28 29 |  | 
| 29 30 | 
             
                def string
         | 
| 30 | 
            -
                   | 
| 31 | 
            +
                  begin
         | 
| 32 | 
            +
                    "#{@filename}:#{@f.lineno}"
         | 
| 33 | 
            +
                  rescue
         | 
| 34 | 
            +
                    "#{@filename}:nil"
         | 
| 35 | 
            +
                  end
         | 
| 31 36 | 
             
                end
         | 
| 32 37 |  | 
| 33 38 | 
             
                alias to_s string
         | 
| @@ -42,14 +47,8 @@ module ReVIEW | |
| 42 47 |  | 
| 43 48 | 
             
                attr_reader :strategy
         | 
| 44 49 |  | 
| 45 | 
            -
                def setParameter(param)
         | 
| 46 | 
            -
                  @param = param
         | 
| 47 | 
            -
                  @strategy.setParameter(@param)
         | 
| 48 | 
            -
                end
         | 
| 49 | 
            -
             | 
| 50 50 | 
             
                def compile(chap)
         | 
| 51 51 | 
             
                  @chapter = chap
         | 
| 52 | 
            -
                  @chapter.setParameter(@param)
         | 
| 53 52 | 
             
                  do_compile
         | 
| 54 53 | 
             
                  @strategy.result
         | 
| 55 54 | 
             
                end
         | 
| @@ -141,17 +140,24 @@ module ReVIEW | |
| 141 140 | 
             
                defblock :listnum, 2
         | 
| 142 141 | 
             
                defblock :emlistnum, 0..1
         | 
| 143 142 | 
             
                defblock :bibpaper, 2..3, true
         | 
| 143 | 
            +
                defblock :doorquote, 1
         | 
| 144 | 
            +
                defblock :talk, 0
         | 
| 145 | 
            +
                defblock :texequation, 0
         | 
| 146 | 
            +
             | 
| 144 147 | 
             
                defblock :address, 0
         | 
| 145 148 | 
             
                defblock :blockquote, 0
         | 
| 146 149 | 
             
                defblock :bpo, 0
         | 
| 147 150 | 
             
                defblock :flushright, 0
         | 
| 148 151 | 
             
                defblock :note, 0..1
         | 
| 152 | 
            +
                defblock :box, 0..1
         | 
| 149 153 |  | 
| 150 154 | 
             
                defsingle :footnote, 2
         | 
| 151 155 | 
             
                defsingle :comment, 1
         | 
| 152 156 | 
             
                defsingle :noindent, 0
         | 
| 153 157 | 
             
                defsingle :linebreak, 0
         | 
| 154 158 | 
             
                defsingle :pagebreak, 0
         | 
| 159 | 
            +
                defsingle :indepimage, 1..3
         | 
| 160 | 
            +
                defsingle :numberlessimage, 1..3
         | 
| 155 161 | 
             
                defsingle :hr, 0
         | 
| 156 162 | 
             
                defsingle :parasep, 0
         | 
| 157 163 | 
             
                defsingle :label, 1
         | 
| @@ -173,6 +179,7 @@ module ReVIEW | |
| 173 179 | 
             
                definline :dtp
         | 
| 174 180 | 
             
                definline :code
         | 
| 175 181 | 
             
                definline :bib
         | 
| 182 | 
            +
                definline :hd
         | 
| 176 183 | 
             
                definline :href
         | 
| 177 184 | 
             
                definline :recipe
         | 
| 178 185 |  | 
| @@ -194,8 +201,15 @@ module ReVIEW | |
| 194 201 | 
             
                definline :sub
         | 
| 195 202 | 
             
                definline :tt
         | 
| 196 203 | 
             
                definline :i
         | 
| 197 | 
            -
             | 
| 204 | 
            +
                definline :tti
         | 
| 205 | 
            +
                definline :ttb
         | 
| 206 | 
            +
                definline :u
         | 
| 198 207 | 
             
                definline :raw
         | 
| 208 | 
            +
                definline :br
         | 
| 209 | 
            +
                definline :m
         | 
| 210 | 
            +
                definline :uchar
         | 
| 211 | 
            +
                definline :idx
         | 
| 212 | 
            +
                definline :hidx
         | 
| 199 213 |  | 
| 200 214 | 
             
                private
         | 
| 201 215 |  | 
| @@ -209,13 +223,9 @@ module ReVIEW | |
| 209 223 | 
             
                      compile_headline f.gets
         | 
| 210 224 | 
             
                    when %r<\A\s+\*>
         | 
| 211 225 | 
             
                      compile_ulist f
         | 
| 212 | 
            -
                    when %r<\A\s+□>
         | 
| 213 | 
            -
                      compile_multichoice f
         | 
| 214 | 
            -
                    when %r<\A\s+○>
         | 
| 215 | 
            -
                      compile_singlechoice f
         | 
| 216 226 | 
             
                    when %r<\A\s+\d+\.>
         | 
| 217 227 | 
             
                      compile_olist f
         | 
| 218 | 
            -
                    when %r<\A | 
| 228 | 
            +
                    when %r<\A\s*:\s>
         | 
| 219 229 | 
             
                      compile_dlist f
         | 
| 220 230 | 
             
                    when %r<\A//\}>
         | 
| 221 231 | 
             
                      error 'block end seen but not opened'
         | 
| @@ -248,23 +258,34 @@ module ReVIEW | |
| 248 258 | 
             
                end
         | 
| 249 259 |  | 
| 250 260 | 
             
                def compile_headline(line)
         | 
| 261 | 
            +
                  @headline_indexs ||= [@chapter.number.to_i - 1]
         | 
| 251 262 | 
             
                  m = /\A(=+)(?:\[(.+?)\])?(?:\{(.+?)\})?(.*)/.match(line)
         | 
| 252 263 | 
             
                  level = m[1].size
         | 
| 253 264 | 
             
                  tag = m[2]
         | 
| 254 265 | 
             
                  label = m[3]
         | 
| 255 266 | 
             
                  caption = m[4].strip
         | 
| 256 | 
            -
                   | 
| 257 | 
            -
                    close_tagged_section(* @tagged_section.pop)
         | 
| 258 | 
            -
                  end
         | 
| 267 | 
            +
                  index = level - 1
         | 
| 259 268 | 
             
                  if tag
         | 
| 260 269 | 
             
                    open_tagged_section tag, level, label, caption
         | 
| 261 270 | 
             
                  else
         | 
| 262 | 
            -
                    @ | 
| 271 | 
            +
                    if @headline_indexs.size > (index + 1)
         | 
| 272 | 
            +
                      @headline_indexs = @headline_indexs[0..index]
         | 
| 273 | 
            +
                    end
         | 
| 274 | 
            +
                    @headline_indexs[index] = 0 if @headline_indexs[index].nil?
         | 
| 275 | 
            +
                    @headline_indexs[index] += 1
         | 
| 276 | 
            +
                    while @tagged_section.last and @tagged_section.last[1] >= level
         | 
| 277 | 
            +
                      close_tagged_section(* @tagged_section.pop)
         | 
| 278 | 
            +
                    end
         | 
| 279 | 
            +
                    if ReVIEW.book.param["hdnumberingmode"]
         | 
| 280 | 
            +
                      caption = @chapter.on_CHAPS? ? "#{@headline_indexs.join('.')} #{caption}" : caption
         | 
| 281 | 
            +
                      warn "--hdnumberingmode is deprecated. use --level option."
         | 
| 282 | 
            +
                    end
         | 
| 283 | 
            +
                    @strategy.headline level, label, caption
         | 
| 263 284 | 
             
                  end
         | 
| 264 285 | 
             
                end
         | 
| 265 286 |  | 
| 266 287 | 
             
                def headline(level, label, caption)
         | 
| 267 | 
            -
                  @strategy.headline level, label,  | 
| 288 | 
            +
                  @strategy.headline level, label, caption
         | 
| 268 289 | 
             
                end
         | 
| 269 290 |  | 
| 270 291 | 
             
                def tagged_section_init
         | 
| @@ -279,7 +300,7 @@ module ReVIEW | |
| 279 300 | 
             
                    return
         | 
| 280 301 | 
             
                  end
         | 
| 281 302 | 
             
                  @tagged_section.push [tag, level]
         | 
| 282 | 
            -
                  @strategy.__send__ mid, level, label,  | 
| 303 | 
            +
                  @strategy.__send__ mid, level, label, caption
         | 
| 283 304 | 
             
                end
         | 
| 284 305 |  | 
| 285 306 | 
             
                def close_tagged_section(tag, level)
         | 
| @@ -309,30 +330,6 @@ module ReVIEW | |
| 309 330 | 
             
                  @strategy.ul_end
         | 
| 310 331 | 
             
                end
         | 
| 311 332 |  | 
| 312 | 
            -
                def compile_multichoice(f)
         | 
| 313 | 
            -
                  @strategy.choice_multi_begin
         | 
| 314 | 
            -
                  f.while_match(/\A\s+□/) do |line|
         | 
| 315 | 
            -
                    buf = [text(line.sub(/□/, '').strip)]
         | 
| 316 | 
            -
                    f.while_match(/\A\s+(?!□)\S/) do |cont|
         | 
| 317 | 
            -
                      buf.push text(cont.strip)
         | 
| 318 | 
            -
                    end
         | 
| 319 | 
            -
                    @strategy.ul_item buf
         | 
| 320 | 
            -
                  end
         | 
| 321 | 
            -
                  @strategy.choice_multi_end
         | 
| 322 | 
            -
                end
         | 
| 323 | 
            -
             | 
| 324 | 
            -
                def compile_singlechoice(f)
         | 
| 325 | 
            -
                  @strategy.choice_single_begin
         | 
| 326 | 
            -
                  f.while_match(/\A\s+○/) do |line|
         | 
| 327 | 
            -
                    buf = [text(line.sub(/○/, '').strip)]
         | 
| 328 | 
            -
                    f.while_match(/\A\s+(?!○)\S/) do |cont|
         | 
| 329 | 
            -
                      buf.push text(cont.strip)
         | 
| 330 | 
            -
                    end
         | 
| 331 | 
            -
                    @strategy.ul_item buf
         | 
| 332 | 
            -
                  end
         | 
| 333 | 
            -
                  @strategy.choice_single_end
         | 
| 334 | 
            -
                end
         | 
| 335 | 
            -
             | 
| 336 333 | 
             
                def compile_olist(f)
         | 
| 337 334 | 
             
                  @strategy.ol_begin
         | 
| 338 335 | 
             
                  f.while_match(/\A\s+\d+\./) do |line|
         | 
| @@ -348,9 +345,9 @@ module ReVIEW | |
| 348 345 |  | 
| 349 346 | 
             
                def compile_dlist(f)
         | 
| 350 347 | 
             
                  @strategy.dl_begin
         | 
| 351 | 
            -
                  while /\A | 
| 352 | 
            -
                    @strategy.dt text(f.gets.sub( | 
| 353 | 
            -
                    @strategy.dd f.break(/\A\S/).map {|line| text(line.strip) }
         | 
| 348 | 
            +
                  while /\A\s*:/ =~ f.peek
         | 
| 349 | 
            +
                    @strategy.dt text(f.gets.sub(/\A\s*:/, '').strip)
         | 
| 350 | 
            +
                    @strategy.dd f.break(/\A(\S|\s*:)/).map {|line| text(line.strip) }
         | 
| 354 351 | 
             
                    f.skip_blank_lines
         | 
| 355 352 | 
             
                  end
         | 
| 356 353 | 
             
                  @strategy.dl_end
         | 
| @@ -368,7 +365,7 @@ module ReVIEW | |
| 368 365 | 
             
                def read_command(f)
         | 
| 369 366 | 
             
                  line = f.gets
         | 
| 370 367 | 
             
                  name = line.slice(/[a-z]+/).intern
         | 
| 371 | 
            -
                  args = parse_args(line.sub(%r<\A//[a-z]+>, '').rstrip.chomp('{'))
         | 
| 368 | 
            +
                  args = parse_args(line.sub(%r<\A//[a-z]+>, '').rstrip.chomp('{'), name)
         | 
| 372 369 | 
             
                  lines = block_open?(line) ? read_block(f) : nil
         | 
| 373 370 | 
             
                  return name, args, lines
         | 
| 374 371 | 
             
                end
         | 
| @@ -391,7 +388,7 @@ module ReVIEW | |
| 391 388 | 
             
                  buf
         | 
| 392 389 | 
             
                end
         | 
| 393 390 |  | 
| 394 | 
            -
                def parse_args(str)
         | 
| 391 | 
            +
                def parse_args(str, name=nil)
         | 
| 395 392 | 
             
                  return [] if str.empty?
         | 
| 396 393 | 
             
                  unless str[0,1] == '[' and str[-1,1] == ']'
         | 
| 397 394 | 
             
                    error "argument syntax error: #{str.inspect}"
         | 
    
        data/lib/review/epubbuilder.rb
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            # epubbuilder.rb
         | 
| 2 | 
            -
            #    | 
| 2 | 
            +
            #   just for compatibility
         | 
| 3 3 | 
             
            #
         | 
| 4 4 | 
             
            # Copyright (c) 2010 Kenshi Muto
         | 
| 5 5 | 
             
            #
         | 
| @@ -8,685 +8,11 @@ | |
| 8 8 | 
             
            # the GNU LGPL, Lesser General Public License version 2.1.
         | 
| 9 9 | 
             
            #
         | 
| 10 10 |  | 
| 11 | 
            -
            require 'review/builder'
         | 
| 12 | 
            -
            require 'review/htmlutils'
         | 
| 13 | 
            -
            require 'review/htmllayout'
         | 
| 14 | 
            -
            require 'review/textutils'
         | 
| 15 11 | 
             
            require 'review/htmlbuilder'
         | 
| 16 12 |  | 
| 17 13 | 
             
            module ReVIEW
         | 
| 18 14 |  | 
| 19 15 | 
             
              class EPUBBuilder < HTMLBuilder
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                [:u, :tti, :idx, :hidx].each {|e|
         | 
| 22 | 
            -
                  Compiler.definline(e)
         | 
| 23 | 
            -
                }
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                Compiler.defsingle(:indepimage, 1)
         | 
| 26 | 
            -
                Compiler.defblock(:memo, 0..1)
         | 
| 27 | 
            -
                Compiler.defblock(:tip, 0..1)
         | 
| 28 | 
            -
                Compiler.defblock(:info, 0..1)
         | 
| 29 | 
            -
                Compiler.defblock(:planning, 0..1)
         | 
| 30 | 
            -
                Compiler.defblock(:best, 0..1)
         | 
| 31 | 
            -
                Compiler.defblock(:important, 0..1)
         | 
| 32 | 
            -
                Compiler.defblock(:security, 0..1)
         | 
| 33 | 
            -
                Compiler.defblock(:caution, 0..1)
         | 
| 34 | 
            -
                Compiler.defblock(:notice, 0..1)
         | 
| 35 | 
            -
                Compiler.defblock(:point, 0..1)
         | 
| 36 | 
            -
                Compiler.defblock(:shoot, 0..1)
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                def builder_init(no_error = false)
         | 
| 39 | 
            -
                  @no_error = no_error
         | 
| 40 | 
            -
                  @section = 0
         | 
| 41 | 
            -
                  @subsection = 0
         | 
| 42 | 
            -
                  @subsubsection = 0
         | 
| 43 | 
            -
                  @subsubsubsection = 0
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
                private :builder_init
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                def extname
         | 
| 48 | 
            -
                  '.html'
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                def raw_result
         | 
| 52 | 
            -
                  @output.string
         | 
| 53 | 
            -
                end
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                def result
         | 
| 56 | 
            -
                  layout_file = File.join(@book.basedir, "layouts", "layout.erb")
         | 
| 57 | 
            -
                  if File.exists?(layout_file)
         | 
| 58 | 
            -
                    messages() +
         | 
| 59 | 
            -
                      HTMLLayout.new(@output.string, @chapter.title, layout_file).result
         | 
| 60 | 
            -
                  else
         | 
| 61 | 
            -
                    # FIXME
         | 
| 62 | 
            -
                    header = <<EOT
         | 
| 63 | 
            -
            <?xml version="1.0" encoding="UTF-8"?>
         | 
| 64 | 
            -
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
         | 
| 65 | 
            -
            <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="ja">
         | 
| 66 | 
            -
            <head>
         | 
| 67 | 
            -
              <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
         | 
| 68 | 
            -
              <meta http-equiv="Content-Style-Type" content="text/css"/>
         | 
| 69 | 
            -
            EOT
         | 
| 70 | 
            -
                    unless @param["stylesheet"].nil?
         | 
| 71 | 
            -
                      header += <<EOT
         | 
| 72 | 
            -
              <link rel="stylesheet" type="text/css" href="#{@param["stylesheet"]}"/>
         | 
| 73 | 
            -
            EOT
         | 
| 74 | 
            -
                    end
         | 
| 75 | 
            -
                    header += <<EOT
         | 
| 76 | 
            -
              <meta name="generator" content="ReVIEW EPUB Maker"/>
         | 
| 77 | 
            -
              <title>#{@chapter.title}</title>
         | 
| 78 | 
            -
            </head>
         | 
| 79 | 
            -
            <body>
         | 
| 80 | 
            -
            EOT
         | 
| 81 | 
            -
                    footer = <<EOT
         | 
| 82 | 
            -
            </body>
         | 
| 83 | 
            -
            </html>
         | 
| 84 | 
            -
            EOT
         | 
| 85 | 
            -
                    header + messages() + @output.string + footer
         | 
| 86 | 
            -
                  end
         | 
| 87 | 
            -
                end
         | 
| 88 | 
            -
             | 
| 89 | 
            -
                def headline_prefix(level)
         | 
| 90 | 
            -
                  anchor = ""
         | 
| 91 | 
            -
                  case level
         | 
| 92 | 
            -
                  when 1
         | 
| 93 | 
            -
                    @section = 0
         | 
| 94 | 
            -
                    @subsection = 0
         | 
| 95 | 
            -
                    @subsubsection = 0
         | 
| 96 | 
            -
                    @subsubsubsection = 0
         | 
| 97 | 
            -
                    anchor = "#{@chapter.number}"
         | 
| 98 | 
            -
                    if @param["secnolevel"] >= 1
         | 
| 99 | 
            -
                      if @chapter.number.to_s =~ /\A\d+$/
         | 
| 100 | 
            -
                        prefix = "第#{@chapter.number}章 "
         | 
| 101 | 
            -
                      elsif !@chapter.number.nil? && !@chapter.number.to_s.empty?
         | 
| 102 | 
            -
                        prefix = "#{@chapter.number} "
         | 
| 103 | 
            -
                      end
         | 
| 104 | 
            -
                    end
         | 
| 105 | 
            -
                  when 2
         | 
| 106 | 
            -
                    @section += 1
         | 
| 107 | 
            -
                    @subsection = 0
         | 
| 108 | 
            -
                    @subsubsection = 0
         | 
| 109 | 
            -
                    @subsubsubsection = 0
         | 
| 110 | 
            -
                    anchor = "#{@chapter.number}-#{@section}"
         | 
| 111 | 
            -
                    if @param["secnolevel"] >= 2
         | 
| 112 | 
            -
                      if @chapter.number.to_s =~ /\A\d+$/
         | 
| 113 | 
            -
                        prefix = "#{@chapter.number}.#{@section} "
         | 
| 114 | 
            -
                      elsif !@chapter.number.nil? && !@chapter.number.to_s.empty?
         | 
| 115 | 
            -
                        prefix = "#{@chapter.number}.#{@section} "
         | 
| 116 | 
            -
                      end
         | 
| 117 | 
            -
                    end
         | 
| 118 | 
            -
                  when 3
         | 
| 119 | 
            -
                    @subsection += 1
         | 
| 120 | 
            -
                    @subsubsection = 0
         | 
| 121 | 
            -
                    @subsubsubsection = 0
         | 
| 122 | 
            -
                    anchor = "#{@chapter.number}-#{@section}-#{@subsection}"
         | 
| 123 | 
            -
                    if @param["secnolevel"] >= 3
         | 
| 124 | 
            -
                      if @chapter.number.to_s =~ /\A\d+$/
         | 
| 125 | 
            -
                        prefix = "#{@chapter.number}.#{@section}.#{@subsection} "
         | 
| 126 | 
            -
                      elsif !@chapter.number.nil? && !@chapter.number.to_s.empty?
         | 
| 127 | 
            -
                        prefix = "#{@chapter.number}.#{@section}.#{@subsection} "
         | 
| 128 | 
            -
                      end
         | 
| 129 | 
            -
                    end
         | 
| 130 | 
            -
                  when 4
         | 
| 131 | 
            -
                    @subsubsection += 1
         | 
| 132 | 
            -
                    @subsubsubsection = 0
         | 
| 133 | 
            -
                    anchor = "#{@chapter.number}-#{@section}-#{@subsection}-#{@subsubsection}"
         | 
| 134 | 
            -
                    if @param["secnolevel"] >= 4
         | 
| 135 | 
            -
                      if @chapter.number.to_s =~ /\A\d+$/
         | 
| 136 | 
            -
                        prefix = "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection} "
         | 
| 137 | 
            -
                      elsif !@chapter.number.nil? && !@chapter.number.to_s.empty?
         | 
| 138 | 
            -
                        prefix = "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection} "
         | 
| 139 | 
            -
                      end
         | 
| 140 | 
            -
                    end
         | 
| 141 | 
            -
                  when 5
         | 
| 142 | 
            -
                    @subsubsubsection += 1
         | 
| 143 | 
            -
                    anchor = "#{@chapter.number}-#{@section}-#{@subsection}-#{@subsubsection}-#{@subsubsubsection}"
         | 
| 144 | 
            -
                    if @param["secnolevel"] >= 5
         | 
| 145 | 
            -
                      if @chapter.number.to_s =~ /\A\d+$/
         | 
| 146 | 
            -
                        prefix = "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}.#{@subsubsubsection} "
         | 
| 147 | 
            -
                      elsif !@chapter.number.nil? && !@chapter.number.to_s.empty?
         | 
| 148 | 
            -
                        prefix = "#{@chapter.number}.#{@section}.#{@subsection}.#{@subsubsection}.#{@subsubsubsection} "
         | 
| 149 | 
            -
                      end
         | 
| 150 | 
            -
                    end
         | 
| 151 | 
            -
                  end
         | 
| 152 | 
            -
                  [prefix, anchor]
         | 
| 153 | 
            -
                end
         | 
| 154 | 
            -
                private :headline_prefix
         | 
| 155 | 
            -
             | 
| 156 | 
            -
                def headline(level, label, caption)
         | 
| 157 | 
            -
                  prefix, anchor = headline_prefix(level)
         | 
| 158 | 
            -
                  puts '' if level > 1
         | 
| 159 | 
            -
                  a_id = ""
         | 
| 160 | 
            -
                  unless anchor.empty?
         | 
| 161 | 
            -
                    a_id = "<a id=\"h#{anchor}\" />"
         | 
| 162 | 
            -
                  end
         | 
| 163 | 
            -
                  if caption.empty?
         | 
| 164 | 
            -
                    puts a_id unless label.nil?
         | 
| 165 | 
            -
                  else
         | 
| 166 | 
            -
                    if label.nil?
         | 
| 167 | 
            -
                      puts "<h#{level}>#{a_id}#{prefix}#{escape_html(caption)}</h#{level}>"
         | 
| 168 | 
            -
                    else
         | 
| 169 | 
            -
                      puts "<h#{level} id='#{label}'>#{a_id}#{prefix}#{escape_html(caption)}</h#{level}>"
         | 
| 170 | 
            -
                    end
         | 
| 171 | 
            -
                  end
         | 
| 172 | 
            -
                end
         | 
| 173 | 
            -
             | 
| 174 | 
            -
                def column_begin(level, label, caption)
         | 
| 175 | 
            -
                  puts "<div class='column'>"
         | 
| 176 | 
            -
                  headline(level, label, caption)   # FIXME
         | 
| 177 | 
            -
                end
         | 
| 178 | 
            -
             | 
| 179 | 
            -
                def column_end(level)
         | 
| 180 | 
            -
                  puts '</div>'
         | 
| 181 | 
            -
                end
         | 
| 182 | 
            -
             | 
| 183 | 
            -
                def xcolumn_begin(level, label, caption)
         | 
| 184 | 
            -
                  puts "<div class='xcolumn'>"
         | 
| 185 | 
            -
                  headline(level, label, caption)   # FIXME
         | 
| 186 | 
            -
                end
         | 
| 187 | 
            -
             | 
| 188 | 
            -
                def xcolumn_end(level)
         | 
| 189 | 
            -
                  puts '</div>'
         | 
| 190 | 
            -
                end
         | 
| 191 | 
            -
             | 
| 192 | 
            -
                def ref_begin(level, label, caption)
         | 
| 193 | 
            -
                  print "<div class='reference'>"
         | 
| 194 | 
            -
                  headline(level, label, caption)
         | 
| 195 | 
            -
                end
         | 
| 196 | 
            -
             | 
| 197 | 
            -
                def ref_end(level)
         | 
| 198 | 
            -
                  puts '</div>'
         | 
| 199 | 
            -
                end
         | 
| 200 | 
            -
             | 
| 201 | 
            -
                def sup_begin(level, label, caption)
         | 
| 202 | 
            -
                  print "<div class='supplement'>"
         | 
| 203 | 
            -
                  headline(level, label, caption)
         | 
| 204 | 
            -
                end
         | 
| 205 | 
            -
             | 
| 206 | 
            -
                def sup_end(level)
         | 
| 207 | 
            -
                  puts '</div>'
         | 
| 208 | 
            -
                end
         | 
| 209 | 
            -
             | 
| 210 | 
            -
                def tsize(str)
         | 
| 211 | 
            -
                  # null
         | 
| 212 | 
            -
                end
         | 
| 213 | 
            -
             | 
| 214 | 
            -
                def captionblock(type, lines, caption)
         | 
| 215 | 
            -
                  puts "<div class=\"#{type}\">"
         | 
| 216 | 
            -
                  unless caption.nil?
         | 
| 217 | 
            -
                    puts "<p class=\"#{type}-title\">#{escape_html(caption)}</p>"
         | 
| 218 | 
            -
                  end
         | 
| 219 | 
            -
                  lines.each {|l|
         | 
| 220 | 
            -
                    puts "<p>#{l}</p>"
         | 
| 221 | 
            -
                  }
         | 
| 222 | 
            -
                  puts '</div>'
         | 
| 223 | 
            -
                end
         | 
| 224 | 
            -
             | 
| 225 | 
            -
                def memo(lines, caption = nil)
         | 
| 226 | 
            -
                  captionblock("memo", lines, caption)
         | 
| 227 | 
            -
                end
         | 
| 228 | 
            -
             | 
| 229 | 
            -
                def tip(lines, caption = nil)
         | 
| 230 | 
            -
                  captionblock("tip", lines, caption)
         | 
| 231 | 
            -
                end
         | 
| 232 | 
            -
             | 
| 233 | 
            -
                def info(lines, caption = nil)
         | 
| 234 | 
            -
                  captionblock("info", lines, caption)
         | 
| 235 | 
            -
                end
         | 
| 236 | 
            -
             | 
| 237 | 
            -
                def planning(lines, caption = nil)
         | 
| 238 | 
            -
                  captionblock("planning", lines, caption)
         | 
| 239 | 
            -
                end
         | 
| 240 | 
            -
             | 
| 241 | 
            -
                def best(lines, caption = nil)
         | 
| 242 | 
            -
                  captionblock("best", lines, caption)
         | 
| 243 | 
            -
                end
         | 
| 244 | 
            -
             | 
| 245 | 
            -
                def important(lines, caption = nil)
         | 
| 246 | 
            -
                  captionblock("important", lines, caption)
         | 
| 247 | 
            -
                end
         | 
| 248 | 
            -
             | 
| 249 | 
            -
                def security(lines, caption = nil)
         | 
| 250 | 
            -
                  captionblock("security", lines, caption)
         | 
| 251 | 
            -
                end
         | 
| 252 | 
            -
             | 
| 253 | 
            -
                def caution(lines, caption = nil)
         | 
| 254 | 
            -
                  captionblock("caution", lines, caption)
         | 
| 255 | 
            -
                end
         | 
| 256 | 
            -
             | 
| 257 | 
            -
                def notice(lines, caption = nil)
         | 
| 258 | 
            -
                  captionblock("notice", lines, caption)
         | 
| 259 | 
            -
                end
         | 
| 260 | 
            -
             | 
| 261 | 
            -
                def point(lines, caption = nil)
         | 
| 262 | 
            -
                  captionblock("point", lines, caption)
         | 
| 263 | 
            -
                end
         | 
| 264 | 
            -
             | 
| 265 | 
            -
                def shot(lines, caption = nil)
         | 
| 266 | 
            -
                  captionblock("shoot", lines, caption)
         | 
| 267 | 
            -
                end
         | 
| 268 | 
            -
             | 
| 269 | 
            -
                def list(lines, id, caption)
         | 
| 270 | 
            -
                  puts '<div class="caption-code">'
         | 
| 271 | 
            -
                  begin
         | 
| 272 | 
            -
                    list_header id, caption
         | 
| 273 | 
            -
                  rescue KeyError
         | 
| 274 | 
            -
                    error "no such list: #{id}"
         | 
| 275 | 
            -
                  end
         | 
| 276 | 
            -
                  list_body lines
         | 
| 277 | 
            -
                  puts '</div>'
         | 
| 278 | 
            -
                end
         | 
| 279 | 
            -
             | 
| 280 | 
            -
                def list_header(id, caption)
         | 
| 281 | 
            -
                  puts %Q[<p class="listcaption">リスト#{getChap}#{@chapter.list(id).number}: #{escape_html(caption)}</p>]
         | 
| 282 | 
            -
                end
         | 
| 283 | 
            -
             | 
| 284 | 
            -
                def list_body(lines)
         | 
| 285 | 
            -
                  puts '<pre class="list">'
         | 
| 286 | 
            -
                  lines.each do |line|
         | 
| 287 | 
            -
                    puts detab(line)
         | 
| 288 | 
            -
                  end
         | 
| 289 | 
            -
                  puts '</pre>'
         | 
| 290 | 
            -
                end
         | 
| 291 | 
            -
             | 
| 292 | 
            -
                def source(lines, caption)
         | 
| 293 | 
            -
                  puts '<div class="caption-code">'
         | 
| 294 | 
            -
                  source_header caption
         | 
| 295 | 
            -
                  source_body lines
         | 
| 296 | 
            -
                  puts '</div>'
         | 
| 297 | 
            -
                end
         | 
| 298 | 
            -
             | 
| 299 | 
            -
                def source_header(caption)
         | 
| 300 | 
            -
                  puts %Q[<p class="sourcecaption">#{escape_html(caption)}</p>]
         | 
| 301 | 
            -
                end
         | 
| 302 | 
            -
             | 
| 303 | 
            -
                def source_body(lines)
         | 
| 304 | 
            -
                  puts '<pre class="source">'
         | 
| 305 | 
            -
                  lines.each do |line|
         | 
| 306 | 
            -
                    puts detab(line)
         | 
| 307 | 
            -
                  end
         | 
| 308 | 
            -
                  puts '</pre>'
         | 
| 309 | 
            -
                end
         | 
| 310 | 
            -
             | 
| 311 | 
            -
                def listnum(lines, id, caption)
         | 
| 312 | 
            -
                  puts '<div class="code">'
         | 
| 313 | 
            -
                  begin
         | 
| 314 | 
            -
                    list_header id, caption
         | 
| 315 | 
            -
                  rescue KeyError
         | 
| 316 | 
            -
                    error "no such list: #{id}"
         | 
| 317 | 
            -
                  end
         | 
| 318 | 
            -
                  listnum_body lines
         | 
| 319 | 
            -
                  puts '</div>'
         | 
| 320 | 
            -
                end
         | 
| 321 | 
            -
             | 
| 322 | 
            -
                def listnum_body(lines)
         | 
| 323 | 
            -
                  puts '<pre class="list">'
         | 
| 324 | 
            -
                  lines.each_with_index do |line, i|
         | 
| 325 | 
            -
                    puts detab((i+1).to_s.rjust(2) + ": " + line)
         | 
| 326 | 
            -
                  end
         | 
| 327 | 
            -
                  puts '</pre>'
         | 
| 328 | 
            -
                 end
         | 
| 329 | 
            -
             | 
| 330 | 
            -
                def emlist(lines, caption = nil)
         | 
| 331 | 
            -
                  puts '<div class="code">'
         | 
| 332 | 
            -
                  puts %Q(<p class="emlistcaption">#{caption}</p>) unless caption.nil?
         | 
| 333 | 
            -
                  puts '<pre class="emlist">'
         | 
| 334 | 
            -
                  lines.each do |line|
         | 
| 335 | 
            -
                    puts detab(line)
         | 
| 336 | 
            -
                  end
         | 
| 337 | 
            -
                  puts '</pre>'
         | 
| 338 | 
            -
                  puts '</div>'
         | 
| 339 | 
            -
                end
         | 
| 340 | 
            -
             | 
| 341 | 
            -
                def emlistnum(lines)
         | 
| 342 | 
            -
                  puts '<div class="code">'
         | 
| 343 | 
            -
                  puts '<pre class="emlist">'
         | 
| 344 | 
            -
                  lines.each_with_index do |line, i|
         | 
| 345 | 
            -
                    puts detab((i+1).to_s.rjust(2) + ": " + line)
         | 
| 346 | 
            -
                  end
         | 
| 347 | 
            -
                  puts '</pre>'
         | 
| 348 | 
            -
                  puts '</div>'
         | 
| 349 | 
            -
                end
         | 
| 350 | 
            -
             | 
| 351 | 
            -
                def cmd(lines)
         | 
| 352 | 
            -
                  puts '<div class="code">'
         | 
| 353 | 
            -
                  puts '<pre class="cmd">'
         | 
| 354 | 
            -
                  lines.each do |line|
         | 
| 355 | 
            -
                    puts detab(line)
         | 
| 356 | 
            -
                  end
         | 
| 357 | 
            -
                  puts '</pre>'
         | 
| 358 | 
            -
                  puts '</div>'
         | 
| 359 | 
            -
                end
         | 
| 360 | 
            -
             | 
| 361 | 
            -
                def quotedlist(lines, css_class)
         | 
| 362 | 
            -
                  puts %Q[<blockquote><pre class="#{css_class}">]
         | 
| 363 | 
            -
                  lines.each do |line|
         | 
| 364 | 
            -
                    puts detab(line)
         | 
| 365 | 
            -
                  end
         | 
| 366 | 
            -
                  puts '</pre></blockquote>'
         | 
| 367 | 
            -
                end
         | 
| 368 | 
            -
                private :quotedlist
         | 
| 369 | 
            -
             | 
| 370 | 
            -
                def quote(lines)
         | 
| 371 | 
            -
                  puts "<blockquote>#{lines.join("\n")}</blockquote>"
         | 
| 372 | 
            -
                end
         | 
| 373 | 
            -
             | 
| 374 | 
            -
                def image_image(id, metric, caption)
         | 
| 375 | 
            -
                  puts %Q[<div class="image">]
         | 
| 376 | 
            -
                  puts %Q[<img src="#{@chapter.image(id).path.sub(/^\.\//, "")}" alt="(#{escape_html(caption)})" />]
         | 
| 377 | 
            -
                  image_header id, caption
         | 
| 378 | 
            -
                  puts %Q[</div>]
         | 
| 379 | 
            -
                end
         | 
| 380 | 
            -
             | 
| 381 | 
            -
                def image_dummy(id, caption, lines)
         | 
| 382 | 
            -
                  puts %Q[<div class="image">]
         | 
| 383 | 
            -
                  puts %Q[<pre class="dummyimage">]
         | 
| 384 | 
            -
                  lines.each do |line|
         | 
| 385 | 
            -
                    puts detab(line)
         | 
| 386 | 
            -
                  end
         | 
| 387 | 
            -
                  puts %Q[</pre>]
         | 
| 388 | 
            -
                  image_header id, caption
         | 
| 389 | 
            -
                  puts %Q[</div>]
         | 
| 390 | 
            -
                end
         | 
| 391 | 
            -
             | 
| 392 | 
            -
                def image_header(id, caption)
         | 
| 393 | 
            -
                  puts %Q[<p class="imagecaption">]
         | 
| 394 | 
            -
                  puts %Q[図#{getChap}#{@chapter.image(id).number}: #{escape_html(caption)}]
         | 
| 395 | 
            -
                  puts %Q[</p>]
         | 
| 396 | 
            -
                end
         | 
| 397 | 
            -
             | 
| 398 | 
            -
                def table(lines, id = nil, caption = nil)
         | 
| 399 | 
            -
                  rows = []
         | 
| 400 | 
            -
                  sepidx = nil
         | 
| 401 | 
            -
                  lines.each_with_index do |line, idx|
         | 
| 402 | 
            -
                    if /\A[\=\-]{12}/ =~ line
         | 
| 403 | 
            -
                      # just ignore
         | 
| 404 | 
            -
                      #error "too many table separator" if sepidx
         | 
| 405 | 
            -
                      sepidx ||= idx
         | 
| 406 | 
            -
                      next
         | 
| 407 | 
            -
                    end
         | 
| 408 | 
            -
                    rows.push line.strip.split(/\t+/).map {|s| s.sub(/\A\./, '') }
         | 
| 409 | 
            -
                  end
         | 
| 410 | 
            -
                  rows = adjust_n_cols(rows)
         | 
| 411 | 
            -
             | 
| 412 | 
            -
                  begin
         | 
| 413 | 
            -
                    table_header id, caption unless caption.nil?
         | 
| 414 | 
            -
                  rescue KeyError => err
         | 
| 415 | 
            -
                    error "no such table: #{id}"
         | 
| 416 | 
            -
                  end
         | 
| 417 | 
            -
                  table_begin rows.first.size
         | 
| 418 | 
            -
                  return if rows.empty?
         | 
| 419 | 
            -
                  if sepidx
         | 
| 420 | 
            -
                    sepidx.times do
         | 
| 421 | 
            -
                      tr rows.shift.map {|s| th(compile_inline(s)) }
         | 
| 422 | 
            -
                    end
         | 
| 423 | 
            -
                    rows.each do |cols|
         | 
| 424 | 
            -
                      tr cols.map {|s| td(compile_inline(s)) }
         | 
| 425 | 
            -
                    end
         | 
| 426 | 
            -
                  else
         | 
| 427 | 
            -
                    rows.each do |cols|
         | 
| 428 | 
            -
                      h, *cs = *cols
         | 
| 429 | 
            -
                      tr [th(compile_inline(h))] + cs.map {|s| td(compile_inline(s)) }
         | 
| 430 | 
            -
                    end
         | 
| 431 | 
            -
                  end
         | 
| 432 | 
            -
                  table_end
         | 
| 433 | 
            -
                end
         | 
| 434 | 
            -
             | 
| 435 | 
            -
                def table_header(id, caption)
         | 
| 436 | 
            -
                  puts %Q[<p class="tablecaption">表#{getChap}#{@chapter.table(id).number}: #{escape_html(caption)}</p>]
         | 
| 437 | 
            -
                end
         | 
| 438 | 
            -
             | 
| 439 | 
            -
                def table_begin(ncols)
         | 
| 440 | 
            -
                  puts '<table>'
         | 
| 441 | 
            -
                end
         | 
| 442 | 
            -
             | 
| 443 | 
            -
                def tr(rows)
         | 
| 444 | 
            -
                  puts "<tr>#{rows.join('')}</tr>"
         | 
| 445 | 
            -
                end
         | 
| 446 | 
            -
             | 
| 447 | 
            -
                def th(str)
         | 
| 448 | 
            -
                  "<th>#{str}</th>"
         | 
| 449 | 
            -
                end
         | 
| 450 | 
            -
             | 
| 451 | 
            -
                def td(str)
         | 
| 452 | 
            -
                  "<td>#{str}</td>"
         | 
| 453 | 
            -
                end
         | 
| 454 | 
            -
                
         | 
| 455 | 
            -
                def table_end
         | 
| 456 | 
            -
                  puts '</table>'
         | 
| 457 | 
            -
                end
         | 
| 458 | 
            -
             | 
| 459 | 
            -
                def comment(str)
         | 
| 460 | 
            -
                  puts %Q(<!-- #{escape_html(str)} -->)
         | 
| 461 | 
            -
                end
         | 
| 462 | 
            -
             | 
| 463 | 
            -
                def footnote(id, str)
         | 
| 464 | 
            -
                  puts %Q(<div class="footnote"><p class="footnote"><a id="fn-#{id}">[*#{@chapter.footnote(id).number}] #{escape_html(str)}</a></p></div>)
         | 
| 465 | 
            -
                end
         | 
| 466 | 
            -
             | 
| 467 | 
            -
                def hr
         | 
| 468 | 
            -
                  puts "<hr/>"
         | 
| 469 | 
            -
                end
         | 
| 470 | 
            -
             | 
| 471 | 
            -
                def label(id)
         | 
| 472 | 
            -
                  puts %Q(<a id="#{id}" />)
         | 
| 473 | 
            -
                end
         | 
| 474 | 
            -
             | 
| 475 | 
            -
                def linebreak
         | 
| 476 | 
            -
                  puts "<br />"
         | 
| 477 | 
            -
                end
         | 
| 478 | 
            -
             | 
| 479 | 
            -
                def pagebreak
         | 
| 480 | 
            -
                  puts %Q(<br class="pagebreak" />)
         | 
| 481 | 
            -
                end
         | 
| 482 | 
            -
             | 
| 483 | 
            -
                def bpo(lines)
         | 
| 484 | 
            -
                  puts "<bpo>"
         | 
| 485 | 
            -
                  lines.each do |line|
         | 
| 486 | 
            -
                    puts detab(line)
         | 
| 487 | 
            -
                  end
         | 
| 488 | 
            -
                  puts "</bpo>"
         | 
| 489 | 
            -
                end
         | 
| 490 | 
            -
             | 
| 491 | 
            -
                def flushright(lines)
         | 
| 492 | 
            -
                  puts "<p align='right'>#{lines.join("\n")}</p>"
         | 
| 493 | 
            -
                end
         | 
| 494 | 
            -
             | 
| 495 | 
            -
                def note(lines, caption = nil)
         | 
| 496 | 
            -
                  puts '<div class="note">'
         | 
| 497 | 
            -
                  puts "<p class='notecaption'>#{escape_html(caption)}</p>" unless caption.nil?
         | 
| 498 | 
            -
                  puts "#{lines.join("\n")}</div>"
         | 
| 499 | 
            -
                end
         | 
| 500 | 
            -
             | 
| 501 | 
            -
                def inline_fn(id)
         | 
| 502 | 
            -
                  %Q(<a href="\#fn-#{id}">*#{@chapter.footnote(id).number}</a>)
         | 
| 503 | 
            -
                end
         | 
| 504 | 
            -
             | 
| 505 | 
            -
                def compile_ruby(base, ruby)
         | 
| 506 | 
            -
                  %Q[<ruby><rb>{escape_html(base)}</rb><rp>(</rp><rt>#{ruby}</rt><rp>)</rp></ruby>]
         | 
| 507 | 
            -
                end
         | 
| 508 | 
            -
             | 
| 509 | 
            -
                def compile_kw(word, alt)
         | 
| 510 | 
            -
                  '<span class="kw">' +
         | 
| 511 | 
            -
                    if alt
         | 
| 512 | 
            -
                    #then escape_html(word + sprintf(@locale[:parens], alt.strip))
         | 
| 513 | 
            -
                    then escape_html(word + " (#{alt.strip})")
         | 
| 514 | 
            -
                    else escape_html(word)
         | 
| 515 | 
            -
                    end +
         | 
| 516 | 
            -
                  "</span><!-- IDX:#{escape_html(word)} -->"
         | 
| 517 | 
            -
                end
         | 
| 518 | 
            -
             | 
| 519 | 
            -
                def compile_href(url, label)
         | 
| 520 | 
            -
                  %Q(<a href="#{escape_html(url)}" class="link">#{label.nil? ? escape_html(url) : escape_html(label)}</a>)
         | 
| 521 | 
            -
                end
         | 
| 522 | 
            -
             | 
| 523 | 
            -
                def inline_i(str)
         | 
| 524 | 
            -
                  %Q(<i>#{escape_html(str)}</i>)
         | 
| 525 | 
            -
                end
         | 
| 526 | 
            -
             | 
| 527 | 
            -
                def inline_b(str)
         | 
| 528 | 
            -
                  %Q(<b>#{escape_html(str)}</b>)
         | 
| 529 | 
            -
                end
         | 
| 530 | 
            -
             | 
| 531 | 
            -
                def inline_ami(str)
         | 
| 532 | 
            -
                  %Q(<span class="ami">#{escape_html(str)}</span>)
         | 
| 533 | 
            -
                end
         | 
| 534 | 
            -
             | 
| 535 | 
            -
                def inline_tti(str)
         | 
| 536 | 
            -
                  %Q(<tt><i>#{escape_html(str)}</i></tt>)
         | 
| 537 | 
            -
                end
         | 
| 538 | 
            -
             | 
| 539 | 
            -
                def inline_dtp(arg)
         | 
| 540 | 
            -
                  # ignore all
         | 
| 541 | 
            -
                  ''
         | 
| 542 | 
            -
                end
         | 
| 543 | 
            -
             | 
| 544 | 
            -
                def inline_code(str)
         | 
| 545 | 
            -
                  %Q(<span class="inline-code">#{str}</span>)
         | 
| 546 | 
            -
                end
         | 
| 547 | 
            -
             | 
| 548 | 
            -
                def inline_idx(str)
         | 
| 549 | 
            -
                  %Q(#{escape_html(str)}<!-- IDX:#{escape_html(str)} -->)
         | 
| 550 | 
            -
                end
         | 
| 551 | 
            -
             | 
| 552 | 
            -
                def inline_hidx(str)
         | 
| 553 | 
            -
                  %Q(<!-- IDX:#{escape_html(str)} -->)
         | 
| 554 | 
            -
                end
         | 
| 555 | 
            -
             | 
| 556 | 
            -
                def text(str)
         | 
| 557 | 
            -
                  str
         | 
| 558 | 
            -
                end
         | 
| 559 | 
            -
             | 
| 560 | 
            -
                def bibpaper_header(id, caption)
         | 
| 561 | 
            -
                  puts %Q(<a id="bib-#{id}">)
         | 
| 562 | 
            -
                  puts "[#{@chapter.bibpaper(id).number}] #{caption}"
         | 
| 563 | 
            -
                  puts %Q(</a>)
         | 
| 564 | 
            -
                end
         | 
| 565 | 
            -
             | 
| 566 | 
            -
                def bibpaper_bibpaper(id, caption, lines)
         | 
| 567 | 
            -
                  puts %Q(<p>)
         | 
| 568 | 
            -
                  lines.each do |line|
         | 
| 569 | 
            -
                    puts detab(line)
         | 
| 570 | 
            -
                  end
         | 
| 571 | 
            -
                  puts %Q(</p>)
         | 
| 572 | 
            -
                end
         | 
| 573 | 
            -
             | 
| 574 | 
            -
                def noindent
         | 
| 575 | 
            -
                  # dummy
         | 
| 576 | 
            -
                end
         | 
| 577 | 
            -
             | 
| 578 | 
            -
                def inline_bib(id)
         | 
| 579 | 
            -
                  %Q(<a href=".#{@book.bib_file.gsub(/re$/, "html")}\#bib-#{id}">[#{@chapter.bibpaper(id).number}]</a>)
         | 
| 580 | 
            -
                end
         | 
| 581 | 
            -
             | 
| 582 | 
            -
                def nofunc_text(str)
         | 
| 583 | 
            -
                  escape_html(str)
         | 
| 584 | 
            -
                end
         | 
| 585 | 
            -
             | 
| 586 | 
            -
                def inline_list(id)
         | 
| 587 | 
            -
                  "リスト#{getChap}#{@chapter.list(id).number}"
         | 
| 588 | 
            -
                rescue KeyError
         | 
| 589 | 
            -
                  error "unknown list: #{id}"
         | 
| 590 | 
            -
                  nofunc_text("[UnknownList:#{id}]")
         | 
| 591 | 
            -
                end
         | 
| 592 | 
            -
             | 
| 593 | 
            -
                def inline_img(id)
         | 
| 594 | 
            -
                  "図#{getChap}#{@chapter.image(id).number}"
         | 
| 595 | 
            -
                rescue KeyError
         | 
| 596 | 
            -
                  error "unknown image: #{id}"
         | 
| 597 | 
            -
                  nofunc_text("[UnknownImage:#{id}]")
         | 
| 598 | 
            -
                end
         | 
| 599 | 
            -
             | 
| 600 | 
            -
                def inline_table(id)
         | 
| 601 | 
            -
                  "表#{getChap}#{@chapter.table(id).number}"
         | 
| 602 | 
            -
                rescue KeyError
         | 
| 603 | 
            -
                  error "unknown table: #{id}"
         | 
| 604 | 
            -
                  nofunc_text("[UnknownTable:#{id}]")
         | 
| 605 | 
            -
                end
         | 
| 606 | 
            -
             | 
| 607 | 
            -
                def inline_asis(str, tag)
         | 
| 608 | 
            -
                  %Q(<#{tag}>#{escape_html(str)}</#{tag}>)
         | 
| 609 | 
            -
                end
         | 
| 610 | 
            -
             | 
| 611 | 
            -
                def inline_abbr(str)
         | 
| 612 | 
            -
                  inline_asis(str, "abbr")
         | 
| 613 | 
            -
                end
         | 
| 614 | 
            -
             | 
| 615 | 
            -
                def inline_acronym(str)
         | 
| 616 | 
            -
                  inline_asis(str, "acronym")
         | 
| 617 | 
            -
                end
         | 
| 618 | 
            -
             | 
| 619 | 
            -
                def inline_cite(str)
         | 
| 620 | 
            -
                  inline_asis(str, "cite")
         | 
| 621 | 
            -
                end
         | 
| 622 | 
            -
             | 
| 623 | 
            -
                def inline_dfn(str)
         | 
| 624 | 
            -
                  inline_asis(str, "dfn")
         | 
| 625 | 
            -
                end
         | 
| 626 | 
            -
             | 
| 627 | 
            -
                def inline_em(str)
         | 
| 628 | 
            -
                  inline_asis(str, "em")
         | 
| 629 | 
            -
                end
         | 
| 630 | 
            -
             | 
| 631 | 
            -
                def inline_kbd(str)
         | 
| 632 | 
            -
                  inline_asis(str, "kbd")
         | 
| 633 | 
            -
                end
         | 
| 634 | 
            -
             | 
| 635 | 
            -
                def inline_samp(str)
         | 
| 636 | 
            -
                  inline_asis(str, "samp")
         | 
| 637 | 
            -
                end
         | 
| 638 | 
            -
             | 
| 639 | 
            -
                def inline_strong(str)
         | 
| 640 | 
            -
                  inline_asis(str, "strong")
         | 
| 641 | 
            -
                end
         | 
| 642 | 
            -
             | 
| 643 | 
            -
                def inline_var(str)
         | 
| 644 | 
            -
                  inline_asis(str, "var")
         | 
| 645 | 
            -
                end
         | 
| 646 | 
            -
             | 
| 647 | 
            -
                def inline_big(str)
         | 
| 648 | 
            -
                  inline_asis(str, "big")
         | 
| 649 | 
            -
                end
         | 
| 650 | 
            -
             | 
| 651 | 
            -
                def inline_small(str)
         | 
| 652 | 
            -
                  inline_asis(str, "small")
         | 
| 653 | 
            -
                end
         | 
| 654 | 
            -
             | 
| 655 | 
            -
                def inline_sub(str)
         | 
| 656 | 
            -
                  inline_asis(str, "sub")
         | 
| 657 | 
            -
                end
         | 
| 658 | 
            -
             | 
| 659 | 
            -
                def inline_sup(str)
         | 
| 660 | 
            -
                  inline_asis(str, "sup")
         | 
| 661 | 
            -
                end
         | 
| 662 | 
            -
             | 
| 663 | 
            -
                def inline_tt(str)
         | 
| 664 | 
            -
                  inline_asis(str, "tt")
         | 
| 665 | 
            -
                end
         | 
| 666 | 
            -
             | 
| 667 | 
            -
                def inline_del(str)
         | 
| 668 | 
            -
                  inline_asis(str, "del")
         | 
| 669 | 
            -
                end
         | 
| 670 | 
            -
             | 
| 671 | 
            -
                def inline_ins(str)
         | 
| 672 | 
            -
                  inline_asis(str, "ins")
         | 
| 673 | 
            -
                end
         | 
| 674 | 
            -
             | 
| 675 | 
            -
                def inline_u(str)
         | 
| 676 | 
            -
                  %Q(<span class="u">#{escape_html(str)}</span>)
         | 
| 677 | 
            -
                end
         | 
| 678 | 
            -
             | 
| 679 | 
            -
                def inline_recipe(str)
         | 
| 680 | 
            -
                  # FIXME
         | 
| 681 | 
            -
                  %Q(<span class="recipe">「#{escape_html(str)}」</span>)
         | 
| 682 | 
            -
                end
         | 
| 683 | 
            -
             | 
| 684 | 
            -
                def getChap
         | 
| 685 | 
            -
                  if @param["secnolevel"] > 0 && !@chapter.number.nil? && !@chapter.number.to_s.empty?
         | 
| 686 | 
            -
                    return "#{@chapter.number}."
         | 
| 687 | 
            -
                  end
         | 
| 688 | 
            -
                  return ""
         | 
| 689 | 
            -
                end
         | 
| 690 16 | 
             
              end
         | 
| 691 17 |  | 
| 692 18 | 
             
            end   # module ReVIEW
         |