aozora2html 2.0.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rubocop.yml +19 -0
  3. data/.github/workflows/ruby.yml +5 -3
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +38 -151
  6. data/.rubocop_todo.yml +7 -0
  7. data/CHANGELOG.md +41 -0
  8. data/Gemfile +2 -0
  9. data/Guardfile +3 -1
  10. data/HACKING.md +45 -0
  11. data/README.md +14 -6
  12. data/Rakefile +12 -5
  13. data/aozora2html.gemspec +25 -23
  14. data/bin/aozora2html +21 -19
  15. data/lib/aozora2html/accent_parser.rb +62 -54
  16. data/lib/aozora2html/error.rb +5 -4
  17. data/lib/aozora2html/header.rb +20 -18
  18. data/lib/aozora2html/i18n.rb +40 -20
  19. data/lib/aozora2html/midashi_counter.rb +32 -0
  20. data/lib/aozora2html/ruby_buffer.rb +63 -28
  21. data/lib/aozora2html/string_refinements.rb +36 -0
  22. data/lib/aozora2html/style_stack.rb +6 -0
  23. data/lib/aozora2html/tag/accent.rb +10 -12
  24. data/lib/aozora2html/tag/block.rb +11 -9
  25. data/lib/aozora2html/tag/chitsuki.rb +6 -2
  26. data/lib/aozora2html/tag/dakuten_katakana.rb +10 -8
  27. data/lib/aozora2html/tag/decorate.rb +4 -3
  28. data/lib/aozora2html/tag/dir.rb +4 -2
  29. data/lib/aozora2html/tag/editor_note.rb +7 -4
  30. data/lib/aozora2html/tag/embed_gaiji.rb +15 -11
  31. data/lib/aozora2html/tag/font_size.rb +5 -2
  32. data/lib/aozora2html/tag/gaiji.rb +4 -3
  33. data/lib/aozora2html/tag/img.rb +4 -4
  34. data/lib/aozora2html/tag/indent.rb +3 -3
  35. data/lib/aozora2html/tag/inline.rb +10 -7
  36. data/lib/aozora2html/tag/inline_caption.rb +4 -2
  37. data/lib/aozora2html/tag/inline_font_size.rb +4 -3
  38. data/lib/aozora2html/tag/inline_keigakomi.rb +4 -2
  39. data/lib/aozora2html/tag/inline_yokogumi.rb +4 -3
  40. data/lib/aozora2html/tag/jisage.rb +3 -1
  41. data/lib/aozora2html/tag/jizume.rb +3 -0
  42. data/lib/aozora2html/tag/kaeriten.rb +4 -2
  43. data/lib/aozora2html/tag/keigakomi.rb +15 -9
  44. data/lib/aozora2html/tag/kunten.rb +4 -4
  45. data/lib/aozora2html/tag/midashi.rb +3 -1
  46. data/lib/aozora2html/tag/multiline.rb +3 -0
  47. data/lib/aozora2html/tag/multiline_caption.rb +6 -8
  48. data/lib/aozora2html/tag/multiline_chitsuki.rb +3 -1
  49. data/lib/aozora2html/tag/multiline_jisage.rb +3 -1
  50. data/lib/aozora2html/tag/multiline_midashi.rb +6 -3
  51. data/lib/aozora2html/tag/multiline_style.rb +5 -3
  52. data/lib/aozora2html/tag/multiline_yokogumi.rb +6 -9
  53. data/lib/aozora2html/tag/okurigana.rb +4 -2
  54. data/lib/aozora2html/tag/oneline_chitsuki.rb +3 -2
  55. data/lib/aozora2html/tag/oneline_indent.rb +8 -1
  56. data/lib/aozora2html/tag/oneline_jisage.rb +3 -0
  57. data/lib/aozora2html/tag/reference_mentioned.rb +22 -21
  58. data/lib/aozora2html/tag/ruby.rb +174 -70
  59. data/lib/aozora2html/tag/un_embed_gaiji.rb +8 -2
  60. data/lib/aozora2html/tag.rb +40 -38
  61. data/lib/aozora2html/tag_parser.rb +23 -16
  62. data/lib/aozora2html/text_buffer.rb +50 -0
  63. data/lib/aozora2html/utils.rb +113 -50
  64. data/lib/aozora2html/version.rb +3 -1
  65. data/lib/aozora2html/yaml_loader.rb +8 -2
  66. data/lib/aozora2html/zip.rb +4 -0
  67. data/lib/aozora2html.rb +1329 -3
  68. data/lib/extensions.rb +2 -34
  69. data/lib/jstream.rb +96 -25
  70. data/sample/chukiichiran_kinyurei.html +42 -29
  71. data/sample/chukiichiran_kinyurei.txt +16 -3
  72. metadata +80 -83
  73. data/.travis.yml +0 -12
  74. data/lib/t2hs.rb +0 -1607
  75. data/test/test_aozora2html.rb +0 -379
  76. data/test/test_aozora_accent_parser.rb +0 -31
  77. data/test/test_command_parse.rb +0 -213
  78. data/test/test_compat.rb +0 -11
  79. data/test/test_dakuten_katakana_tag.rb +0 -27
  80. data/test/test_decorate_tag.rb +0 -24
  81. data/test/test_dir_tag.rb +0 -24
  82. data/test/test_editor_note_tag.rb +0 -22
  83. data/test/test_exception.rb +0 -23
  84. data/test/test_font_size_tag.rb +0 -41
  85. data/test/test_gaiji_tag.rb +0 -49
  86. data/test/test_header.rb +0 -60
  87. data/test/test_helper.rb +0 -5
  88. data/test/test_i18n.rb +0 -23
  89. data/test/test_img_tag.rb +0 -23
  90. data/test/test_inline_caption_tag.rb +0 -24
  91. data/test/test_inline_font_size_tag.rb +0 -34
  92. data/test/test_inline_keigakomi_tag.rb +0 -24
  93. data/test/test_inline_yokogumi_tag.rb +0 -24
  94. data/test/test_jizume_tag.rb +0 -25
  95. data/test/test_jstream.rb +0 -57
  96. data/test/test_kaeriten_tag.rb +0 -24
  97. data/test/test_keigakomi_tag.rb +0 -31
  98. data/test/test_midashi_tag.rb +0 -38
  99. data/test/test_multiline_caption_tag.rb +0 -25
  100. data/test/test_multiline_midashi_tag.rb +0 -55
  101. data/test/test_multiline_style_tag.rb +0 -25
  102. data/test/test_multiline_yokogumi_tag.rb +0 -25
  103. data/test/test_okurigana_tag.rb +0 -24
  104. data/test/test_ruby_parse.rb +0 -130
  105. data/test/test_ruby_tag.rb +0 -24
  106. data/test/test_tag_parser.rb +0 -80
@@ -1,25 +0,0 @@
1
- require 'test_helper'
2
- require 'aozora2html'
3
-
4
- class MultilineStyleTagTest < Test::Unit::TestCase
5
- def setup
6
- @parser = Object.new
7
- stub(@parser).block_allowed_context?{true}
8
- end
9
-
10
- def test_multiline_style_new
11
- tag = Aozora2Html::Tag::MultilineStyle.new(@parser,"style1")
12
- assert_equal Aozora2Html::Tag::MultilineStyle, tag.class
13
- assert_equal true, tag.kind_of?(Aozora2Html::Tag::Block)
14
- assert_equal true, tag.kind_of?(Aozora2Html::Tag::Multiline)
15
- end
16
-
17
- def test_to_s
18
- tag = Aozora2Html::Tag::MultilineStyle.new(@parser,"s1")
19
- assert_equal "<div class=\"s1\">", tag.to_s
20
- assert_equal "</div>", tag.close_tag
21
- end
22
-
23
- def teardown
24
- end
25
- end
@@ -1,25 +0,0 @@
1
- require 'test_helper'
2
- require 'aozora2html'
3
-
4
- class MultilineYokogumiTagTest < Test::Unit::TestCase
5
- def setup
6
- @parser = Object.new
7
- stub(@parser).block_allowed_context?{true}
8
- end
9
-
10
- def test_multiline_yokogumi_new
11
- tag = Aozora2Html::Tag::MultilineYokogumi.new(@parser)
12
- assert_equal Aozora2Html::Tag::MultilineYokogumi, tag.class
13
- assert_equal true, tag.kind_of?(Aozora2Html::Tag::Block)
14
- assert_equal true, tag.kind_of?(Aozora2Html::Tag::Multiline)
15
- end
16
-
17
- def test_to_s
18
- tag = Aozora2Html::Tag::MultilineYokogumi.new(@parser)
19
- assert_equal "<div class=\"yokogumi\">", tag.to_s
20
- assert_equal "</div>", tag.close_tag
21
- end
22
-
23
- def teardown
24
- end
25
- end
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
- require 'test_helper'
3
- require 'aozora2html'
4
-
5
- class OkuriganaTagTest < Test::Unit::TestCase
6
- def setup
7
- @parser = Object.new
8
- stub(@parser).block_allowed_context?{true}
9
- end
10
-
11
- def test_okurigana_new
12
- tag = Aozora2Html::Tag::Okurigana.new(@parser,"aaa")
13
- assert_equal Aozora2Html::Tag::Okurigana, tag.class
14
- assert_equal true, tag.kind_of?(Aozora2Html::Tag::Inline)
15
- end
16
-
17
- def test_to_s
18
- tag = Aozora2Html::Tag::Okurigana.new(@parser,"テスト".encode("shift_jis"))
19
- assert_equal "<sup class=\"okurigana\">テスト</sup>", tag.to_s.encode("utf-8")
20
- end
21
-
22
- def teardown
23
- end
24
- end
@@ -1,130 +0,0 @@
1
- # encoding: utf-8
2
- require 'test_helper'
3
- require 'aozora2html'
4
-
5
- class RubyParseTest < Test::Unit::TestCase
6
- def setup
7
- end
8
-
9
- def test_parse_ruby1
10
- src = "青空文庫《あおぞらぶんこ》\r\n"
11
- parsed = parse_text(src)
12
- expected = "<ruby><rb>青空文庫</rb><rp>(</rp><rt>あおぞらぶんこ</rt><rp>)</rp></ruby><br />\r\n"
13
- assert_equal expected, parsed
14
- end
15
-
16
- def test_parse_ruby1b
17
- src = "身装《みなり》\r\n"
18
- parsed = parse_text(src)
19
- expected = "<ruby><rb>身装</rb><rp>(</rp><rt>みなり</rt><rp>)</rp></ruby><br />\r\n"
20
- assert_equal expected, parsed
21
- end
22
-
23
- def test_parse_ruby2
24
- src = "霧の|ロンドン警視庁《スコットランドヤード》\r\n"
25
- parsed = parse_text(src)
26
- expected = "霧の<ruby><rb>ロンドン警視庁</rb><rp>(</rp><rt>スコットランドヤード</rt><rp>)</rp></ruby><br />\r\n"
27
- assert_equal expected, parsed
28
- end
29
-
30
- def test_parse_ruby2b
31
- src = "いかにも最|猛者《もさ》のように\r\n"
32
- parsed = parse_text(src)
33
- expected = "いかにも最<ruby><rb>猛者</rb><rp>(</rp><rt>もさ</rt><rp>)</rp></ruby>のように<br />\r\n"
34
- assert_equal expected, parsed
35
- end
36
-
37
- def test_parse_ruby3
38
- src = "〆切《しめきり》を逃れるために、市ヶ谷《いちがや》から転々《てんてん》と、居を移した。\r\n"
39
- parsed = parse_text(src)
40
- expected = "<ruby><rb>〆切</rb><rp>(</rp><rt>しめきり</rt><rp>)</rp></ruby>を逃れるために、<ruby><rb>市ヶ谷</rb><rp>(</rp><rt>いちがや</rt><rp>)</rp></ruby>から<ruby><rb>転々</rb><rp>(</rp><rt>てんてん</rt><rp>)</rp></ruby>と、居を移した。<br />\r\n"
41
- assert_equal expected, parsed
42
- end
43
-
44
- def test_parse_ruby4
45
- src = "水鉢を置いた※[#「木+靈」、第3水準1-86-29]子窓《れんじまど》の下には\r\n"
46
- parsed = parse_text(src)
47
- expected = "水鉢を置いた<ruby><rb><img src=\"../../../gaiji/1-86/1-86-29.png\" alt=\"※(「木+靈」、第3水準1-86-29)\" class=\"gaiji\" />子窓</rb><rp>(</rp><rt>れんじまど</rt><rp>)</rp></ruby>の下には<br />\r\n"
48
- assert_equal expected, parsed
49
- end
50
-
51
- def test_parse_ruby5
52
- src = "それが彼の 〔E'tude〕《エチュード》 だった。\r\n"
53
- parsed = parse_text(src)
54
- expected = "それが彼の <ruby><rb><img src=\"../../../gaiji/1-09/1-09-32.png\" alt=\"※(アキュートアクセント付きE)\" class=\"gaiji\" />tude</rb><rp>(</rp><rt>エチュード</rt><rp>)</rp></ruby> だった。<br />\r\n"
55
- assert_equal expected, parsed
56
- end
57
-
58
- def test_parse_ruby6
59
- src = "青空文庫[#「青空文庫」の左に「あおぞらぶんこ」のルビ]\r\n"
60
- parsed = parse_text(src)
61
- expected = "青空文庫<span class=\"notes\">[#「青空文庫」の左に「あおぞらぶんこ」のルビ]</span><br />\r\n"
62
- assert_equal expected, parsed
63
- end
64
-
65
- def test_parse_ruby7
66
- src = "青空文庫《あおぞらぶんこ》[#「青空文庫」の左に「aozora bunko」のルビ]\r\n"
67
- parsed = parse_text(src)
68
- expected = %Q|<ruby><rb>青空文庫</rb><rp>(</rp><rt>あおぞらぶんこ</rt><rp>)</rp></ruby><span class="notes">[#「青空文庫」の左に「aozora bunko」のルビ]</span><br />\r\n|
69
- assert_equal expected, parsed
70
- end
71
-
72
- def test_parse_ruby8
73
- src = "大空文庫[#「大空文庫」に「ママ」の注記]\r\n"
74
- parsed = parse_text(src)
75
- expected = %Q|<ruby><rb>大空文庫</rb><rp>(</rp><rt>ママ</rt><rp>)</rp></ruby><br />\r\n|
76
- assert_equal expected, parsed
77
- end
78
-
79
- def test_parse_ruby9
80
- src = "大空文庫[#「大空文庫」の左に「ママ」の注記]\r\n"
81
- parsed = parse_text(src)
82
- expected = %Q|大空文庫<span class="notes">[#「大空文庫」の左に「ママ」の注記]</span><br />\r\n|
83
- assert_equal expected, parsed
84
- end
85
-
86
- def test_parse_ruby10
87
- src = "大空文庫《あおぞらぶんこ》[#「大空文庫」の左に「ママ」の注記]\r\n"
88
- parsed = parse_text(src)
89
- expected = %Q|<ruby><rb>大空文庫</rb><rp>(</rp><rt>あおぞらぶんこ</rt><rp>)</rp></ruby><span class="notes">[#「大空文庫」の左に「ママ」の注記]</span><br />\r\n|
90
- assert_equal expected, parsed
91
- end
92
-
93
- def test_parse_ruby11
94
- src = "大空文庫《あおぞらぶんこ》[#「大空文庫」の左に「ママ」の注記]\r\n"
95
- parsed = parse_text(src)
96
- expected = %Q|<ruby><rb>大空文庫</rb><rp>(</rp><rt>あおぞらぶんこ</rt><rp>)</rp></ruby><span class="notes">[#「大空文庫」の左に「ママ」の注記]</span><br />\r\n|
97
- assert_equal expected, parsed
98
- end
99
-
100
- def test_parse_ruby12
101
- src = "大空文庫《あおぞらぶんこ》[#「大空文庫」に「ママ」の注記]\r\n"
102
- assert_raise(Aozora2Html::Error.new("同じ箇所に2つのルビはつけられません".encode("shift_jis"))) do
103
- _parsed = parse_text(src)
104
- end
105
- end
106
-
107
- def test_parse_ruby13
108
- src = "[#注記付き]名※[#二の字点、1-2-22][#「(銘々)」の注記付き終わり]\r\n"
109
- parsed = parse_text(src)
110
- expected = %Q|<ruby><rb>名<img src="../../../gaiji/1-02/1-02-22.png" alt="※(二の字点、1-2-22)" class="gaiji" /></rb><rp>(</rp><rt>(銘々)</rt><rp>)</rp></ruby><br />\r\n|
111
- assert_equal expected, parsed
112
- end
113
-
114
- def parse_text(input_text)
115
- input = StringIO.new(input_text.encode("shift_jis"))
116
- output = StringIO.new
117
- parser = Aozora2Html.new(input, output)
118
- parser.instance_eval{@section=:tail}
119
- catch(:terminate) do
120
- loop do
121
- parser.parse
122
- end
123
- end
124
-
125
- output.string.encode("utf-8")
126
- end
127
-
128
- end
129
-
130
-
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
- require 'test_helper'
3
- require 'aozora2html'
4
-
5
- class RubyTagTest < Test::Unit::TestCase
6
- def setup
7
- @parser = Object.new
8
- stub(@parser).block_allowed_context?{true}
9
- end
10
-
11
- def test_ruby_new
12
- tag = Aozora2Html::Tag::Ruby.new(@parser,"aaa".encode("shift_jis"),"bb")
13
- assert_equal Aozora2Html::Tag::Ruby, tag.class
14
- assert_equal true, tag.kind_of?(Aozora2Html::Tag::Inline)
15
- end
16
-
17
- def test_to_s
18
- tag = Aozora2Html::Tag::Ruby.new(@parser,"テスト".encode("shift_jis"),"てすと".encode("shift_jis"))
19
- assert_equal "<ruby><rb>テスト</rb><rp>(</rp><rt>てすと</rt><rp>)</rp></ruby>", tag.to_s.encode("utf-8")
20
- end
21
-
22
- def teardown
23
- end
24
- end
@@ -1,80 +0,0 @@
1
- # encoding: utf-8
2
- require 'test_helper'
3
- require 'aozora2html'
4
- require 'fileutils'
5
- require 'tmpdir'
6
-
7
- class TagParserTest < Test::Unit::TestCase
8
- def setup
9
- @jisx0213 = Aozora2Html::Tag::EmbedGaiji.use_jisx0213
10
- end
11
-
12
- def test_parse_katakana
13
- str = "テスト!あいうえお\r\n".encode("shift_jis")
14
- strio = StringIO.new(str)
15
- stream = Jstream.new(strio)
16
- command, _raw = Aozora2Html::TagParser.new(stream,"!".encode("shift_jis"),{},[]).process
17
- expected = "テスト"
18
- assert_equal expected, command.to_s.encode("utf-8")
19
- end
20
-
21
- def test_parse_bouten
22
- str = "腹がへっても[#「腹がへっても」に傍点]、ひもじゅうない[#「ひもじゅうない」に傍点]とかぶりを振っている…\r\n".encode("shift_jis")
23
- strio = StringIO.new(str)
24
- stream = Jstream.new(strio)
25
- command, _raw = Aozora2Html::TagParser.new(stream,"…".encode("shift_jis"),{},[]).process
26
- expected = '<em class="sesame_dot">腹がへっても</em>、<em class="sesame_dot">ひもじゅうない</em>とかぶりを振っている'
27
- assert_equal expected, command.to_s.encode("utf-8")
28
- end
29
-
30
- def test_parse_gaiji
31
- str = "※[#「てへん+劣」、第3水準1-84-77]…\r\n".encode("shift_jis")
32
- strio = StringIO.new(str)
33
- stream = Jstream.new(strio)
34
- command, _raw = Aozora2Html::TagParser.new(stream,"…".encode("shift_jis"),{},[]).process
35
- expected = '<img src="../../../gaiji/1-84/1-84-77.png" alt="※(「てへん+劣」、第3水準1-84-77)" class="gaiji" />'
36
- assert_equal expected, command.to_s.encode("utf-8")
37
- end
38
-
39
- def test_parse_gaiji_a
40
- str = "※[#「口+世」、ページ数-行数]…\r\n".encode("shift_jis")
41
- strio = StringIO.new(str)
42
- stream = Jstream.new(strio)
43
- command, _raw = Aozora2Html::TagParser.new(stream,"…".encode("shift_jis"),{},[]).process
44
- expected = '※<span class="notes">[#「口+世」、ページ数-行数]</span>'
45
- assert_equal expected, command.to_s.encode("utf-8")
46
- end
47
-
48
- def test_parse_gaiji_b
49
- str = "※[#二の字点、1-2-22]…\r\n".encode("shift_jis")
50
- strio = StringIO.new(str)
51
- stream = Jstream.new(strio)
52
- command, _raw = Aozora2Html::TagParser.new(stream,"…".encode("shift_jis"),{},[]).process
53
- expected = '<img src="../../../gaiji/1-02/1-02-22.png" alt="※(二の字点、1-2-22)" class="gaiji" />'
54
- assert_equal expected, command.to_s.encode("utf-8")
55
- end
56
-
57
- def test_parse_gaiji_kaeri
58
- str = "自[#二]女王國[#一]東度[#レ]海千餘里。…\r\n".encode("shift_jis")
59
- strio = StringIO.new(str)
60
- stream = Jstream.new(strio)
61
- command, _raw = Aozora2Html::TagParser.new(stream,"…".encode("shift_jis"),{},[]).process
62
- expected = '自<sub class="kaeriten">二</sub>女王國<sub class="kaeriten">一</sub>東度<sub class="kaeriten">レ</sub>海千餘里。'
63
- assert_equal expected, command.to_s.encode("utf-8")
64
- end
65
-
66
- def test_parse_gaiji_jisx0213
67
- Aozora2Html::Tag::EmbedGaiji.use_jisx0213 = true
68
- str = "※[#「てへん+劣」、第3水準1-84-77]…\r\n".encode("shift_jis")
69
- strio = StringIO.new(str)
70
- stream = Jstream.new(strio)
71
- command, _raw = Aozora2Html::TagParser.new(stream,"…".encode("shift_jis"),{},[]).process
72
- expected = '&#x6318;'
73
- assert_equal expected, command.to_s.encode("utf-8")
74
- end
75
-
76
- def teardown
77
- Aozora2Html::Tag::EmbedGaiji.use_jisx0213 = @jisx0213
78
- end
79
- end
80
-