aozora2html 0.7.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +34 -0
  3. data/.gitignore +8 -3
  4. data/.rubocop.yml +227 -0
  5. data/.travis.yml +5 -0
  6. data/CHANGELOG.md +33 -0
  7. data/LICENSE +116 -0
  8. data/README.md +16 -11
  9. data/aozora2html.gemspec +6 -6
  10. data/bin/aozora2html +6 -54
  11. data/lib/aozora2html/accent_parser.rb +91 -0
  12. data/lib/aozora2html/error.rb +16 -0
  13. data/lib/aozora2html/header.rb +139 -0
  14. data/lib/aozora2html/i18n.rb +28 -0
  15. data/lib/aozora2html/ruby_buffer.rb +81 -0
  16. data/lib/aozora2html/style_stack.rb +27 -0
  17. data/lib/aozora2html/tag/accent.rb +39 -0
  18. data/lib/aozora2html/tag/block.rb +19 -0
  19. data/lib/aozora2html/tag/chitsuki.rb +15 -0
  20. data/lib/aozora2html/tag/dakuten_katakana.rb +23 -0
  21. data/lib/aozora2html/tag/decorate.rb +18 -0
  22. data/lib/aozora2html/tag/dir.rb +15 -0
  23. data/lib/aozora2html/tag/editor_note.rb +16 -0
  24. data/lib/aozora2html/tag/embed_gaiji.rb +48 -0
  25. data/lib/aozora2html/tag/font_size.rb +17 -0
  26. data/lib/aozora2html/tag/gaiji.rb +11 -0
  27. data/lib/aozora2html/tag/img.rb +21 -0
  28. data/lib/aozora2html/tag/indent.rb +8 -0
  29. data/lib/aozora2html/tag/inline.rb +13 -0
  30. data/lib/aozora2html/tag/inline_caption.rb +15 -0
  31. data/lib/aozora2html/tag/inline_font_size.rb +18 -0
  32. data/lib/aozora2html/tag/inline_keigakomi.rb +15 -0
  33. data/lib/aozora2html/tag/inline_yokogumi.rb +16 -0
  34. data/lib/aozora2html/tag/jisage.rb +15 -0
  35. data/lib/aozora2html/tag/jizume.rb +16 -0
  36. data/lib/aozora2html/tag/kaeriten.rb +15 -0
  37. data/lib/aozora2html/tag/keigakomi.rb +13 -0
  38. data/lib/aozora2html/tag/kunten.rb +12 -0
  39. data/lib/aozora2html/tag/midashi.rb +18 -0
  40. data/lib/aozora2html/tag/multiline.rb +6 -0
  41. data/lib/aozora2html/tag/multiline_caption.rb +15 -0
  42. data/lib/aozora2html/tag/multiline_chitsuki.rb +8 -0
  43. data/lib/aozora2html/tag/multiline_jisage.rb +8 -0
  44. data/lib/aozora2html/tag/multiline_midashi.rb +22 -0
  45. data/lib/aozora2html/tag/multiline_style.rb +17 -0
  46. data/lib/aozora2html/tag/multiline_yokogumi.rb +17 -0
  47. data/lib/aozora2html/tag/okurigana.rb +15 -0
  48. data/lib/aozora2html/tag/oneline_chitsuki.rb +9 -0
  49. data/lib/aozora2html/tag/oneline_indent.rb +2 -0
  50. data/lib/aozora2html/tag/oneline_jisage.rb +7 -0
  51. data/lib/aozora2html/tag/reference_mentioned.rb +46 -0
  52. data/lib/aozora2html/tag/ruby.rb +98 -0
  53. data/lib/aozora2html/tag/un_embed_gaiji.rb +24 -0
  54. data/lib/aozora2html/tag.rb +55 -0
  55. data/lib/aozora2html/tag_parser.rb +53 -0
  56. data/lib/aozora2html/utils.rb +93 -0
  57. data/lib/aozora2html/version.rb +1 -1
  58. data/lib/aozora2html/yaml_loader.rb +31 -0
  59. data/lib/aozora2html.rb +0 -4
  60. data/lib/extensions.rb +44 -0
  61. data/lib/jstream.rb +68 -0
  62. data/lib/t2hs.rb +837 -1765
  63. data/test/test_aozora2html.rb +320 -43
  64. data/test/test_aozora_accent_parser.rb +13 -2
  65. data/test/test_command_parse.rb +213 -0
  66. data/test/test_dakuten_katakana_tag.rb +5 -4
  67. data/test/test_decorate_tag.rb +5 -4
  68. data/test/test_dir_tag.rb +5 -4
  69. data/test/test_editor_note_tag.rb +4 -4
  70. data/test/test_exception.rb +4 -4
  71. data/test/test_font_size_tag.rb +15 -7
  72. data/test/test_gaiji_tag.rb +14 -7
  73. data/test/test_header.rb +60 -0
  74. data/test/test_i18n.rb +23 -0
  75. data/test/test_img_tag.rb +5 -4
  76. data/test/test_inline_caption_tag.rb +5 -4
  77. data/test/test_inline_font_size_tag.rb +7 -6
  78. data/test/test_inline_keigakomi_tag.rb +5 -4
  79. data/test/test_inline_yokogumi_tag.rb +5 -4
  80. data/test/test_jizume_tag.rb +7 -6
  81. data/test/test_jstream.rb +5 -5
  82. data/test/test_kaeriten_tag.rb +5 -4
  83. data/test/test_keigakomi_tag.rb +8 -7
  84. data/test/test_midashi_tag.rb +38 -0
  85. data/test/test_multiline_caption_tag.rb +7 -6
  86. data/test/test_multiline_midashi_tag.rb +24 -7
  87. data/test/test_multiline_style_tag.rb +7 -6
  88. data/test/test_multiline_yokogumi_tag.rb +7 -6
  89. data/test/test_okurigana_tag.rb +5 -4
  90. data/test/test_ruby_parse.rb +130 -0
  91. data/test/test_ruby_tag.rb +5 -4
  92. data/test/test_tag_parser.rb +10 -10
  93. data/vendor/jis2ucs/README.md +3 -6
  94. data/yml/accent_table.yml +240 -0
  95. data/yml/command_table.yml +61 -0
  96. data/yml/jis2ucs.yml +11234 -0
  97. metadata +74 -42
  98. data/appveyor.yml +0 -19
  99. data/lib/accent_tag.rb +0 -23
  100. data/lib/aozora2html/jis2ucs.rb +0 -11237
  101. data/lib/embed_gaiji_tag.rb +0 -34
@@ -0,0 +1,31 @@
1
+ require 'yaml'
2
+ class Aozora2Html
3
+ class YamlLoader
4
+ def initialize(base_dir)
5
+ @base_dir = base_dir
6
+ end
7
+
8
+ def load(path)
9
+ tmp_data = YAML.load_file(File.join(@base_dir, path))
10
+ normalize_data(tmp_data)
11
+ end
12
+
13
+ def normalize_data(data)
14
+ case data
15
+ when String
16
+ data.encode("shift_jis")
17
+ when Hash
18
+ new_data = {}
19
+ data.each do |k, v|
20
+ new_data[normalize_data(k)] = normalize_data(v)
21
+ end
22
+ new_data
23
+ when Array
24
+ data.map{|item| normalize_data(item)}
25
+ else
26
+ # noop
27
+ data
28
+ end
29
+ end
30
+ end
31
+ end
data/lib/aozora2html.rb CHANGED
@@ -1,9 +1,5 @@
1
1
  require "aozora2html/version"
2
- require "aozora2html/zip"
3
- require "aozora2html/jis2ucs"
4
2
  require 't2hs'
5
- require 'embed_gaiji_tag'
6
- require 'accent_tag'
7
3
 
8
4
  ## already defined in t2hs.rb
9
5
  class Aozora2Html
data/lib/extensions.rb ADDED
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+ # 1.8 like to_s method to Array
3
+ class Array
4
+ def to_s
5
+ self.join
6
+ end
7
+ end
8
+
9
+ class String
10
+
11
+ # used in Aozora2Html#char_type
12
+ def char_type
13
+ ch = self
14
+ if ch.match(Regexp.new("[ぁ-んゝゞ]".encode("shift_jis")))
15
+ :hiragana
16
+ elsif ch.match(Regexp.new("[ァ-ンーヽヾヴ]".encode("shift_jis")))
17
+ :katakana
18
+ elsif ch.match(Regexp.new("[0-9A-Za-zΑ-Ωα-ωА-Яа-я−&’,.]".encode("shift_jis")))
19
+ :zenkaku
20
+ elsif ch.match(Regexp.new("[A-Za-z0-9#\\-\\&'\\,]".encode("shift_jis")))
21
+ :hankaku
22
+ elsif ch.match(Regexp.new("[亜-熙々※仝〆〇ヶ]".encode("shift_jis")))
23
+ :kanji
24
+ elsif ch.match(/[\.\;\"\?\!\)]/)
25
+ :hankaku_terminate
26
+ else
27
+ :else
28
+ end
29
+ end
30
+
31
+ def to_sjis
32
+ self.encode("shift_jis")
33
+ end
34
+ end
35
+
36
+ module Kernel
37
+ alias original_kernel_puts puts
38
+
39
+ def puts(*args)
40
+ original_kernel_puts(args)
41
+ rescue Encoding::CompatibilityError
42
+ original_kernel_puts(args.map { |arg| arg.force_encoding('utf-8') })
43
+ end
44
+ end
data/lib/jstream.rb ADDED
@@ -0,0 +1,68 @@
1
+ require "aozora2html/error"
2
+ require "aozora2html/i18n"
3
+
4
+ ##
5
+ # Stream class for reading a file.
6
+ #
7
+ # It's just a wrapper class of IO to read characters.
8
+ # when finished to read IO, return a symbol :eof.
9
+ # when found line terminator except CR+LF, exit.
10
+ #
11
+ class Jstream
12
+
13
+ attr_accessor :line
14
+
15
+ def initialize(file_io)
16
+ @line = 0
17
+ @entry = false
18
+ @file = file_io
19
+ begin
20
+ store_to_buffer
21
+ rescue Aozora2Html::Error => e
22
+ puts e.message(1)
23
+ if e.is_a?(Aozora2Html::Error)
24
+ exit(2)
25
+ end
26
+ end
27
+ end
28
+
29
+ def inspect
30
+ "#<jcode-stream input " + @file.inspect + ">"
31
+ end
32
+
33
+ def read_char
34
+ found = @buffer.shift
35
+ if @entry
36
+ @line += 1
37
+ @entry = false
38
+ end
39
+ if found
40
+ return found
41
+ end
42
+
43
+ begin
44
+ store_to_buffer
45
+ rescue EOFError
46
+ @buffer = [:eof]
47
+ end
48
+ "\r\n"
49
+ end
50
+
51
+ def peek_char(pos)
52
+ @buffer[pos] || "\r\n"
53
+ end
54
+
55
+ def close
56
+ @file.close
57
+ end
58
+
59
+ private
60
+ def store_to_buffer
61
+ if tmp = @file.readline.chomp!("\r\n")
62
+ @buffer = tmp.each_char.to_a
63
+ else
64
+ raise Aozora2Html::Error, Aozora2Html::I18n.t(:use_crlf)
65
+ end
66
+ @entry = true
67
+ end
68
+ end