# -*- Encoding: utf-8 -*- # # Copyright 2013 whiteleaf. All rights reserved. # require_relative "../lib/inspector" require_relative "../lib/novelsetting" require_relative "../lib/converterbase" describe ConverterBase do before do novelsetting = NovelSetting.new("", true) inspector = Inspector.new(novelsetting) @converter = ConverterBase.new(novelsetting, inspector, nil) end context "#erase_comments_block" do before do @converter.instance_variable_set(:@text_type, "textfile") end context "コメントブロックが存在した場合" do before do @text = <<-EOS abcdefg -------------------------------------------------- hijklmn -------------------------------------------------- opqrstu EOS end it "削除する" do expect(@converter.erase_comments_block(@text)).to eq <<-EOS abcdefg opqrstu EOS end context "複数のコメントブロックが存在した場合" do it "それぞれのブロックの中だけ削除する" do text = @text * 2 expect(@converter.erase_comments_block(text)).to eq <<-EOS abcdefg opqrstu abcdefg opqrstu EOS end end context "@text_file が \"textfile\" ではなかった場合" do it "削除しない" do @converter.instance_variable_set(:@text_type, "body") expect(@converter.erase_comments_block(@text)).to eq @text end end end it "コメントじゃなかった場合は削除しない(-が49文字以下)" do text = <<-EOS abcdefg ------------------------------------------------- hijklmn ------------------------------------------------- opqrstu EOS expect(@converter.erase_comments_block(text)).to eq text end end context "#modify_kana_ni_to_kanji_ni" do describe "ニ(カタカナ)の前後1文字がカタカナの場合" do it "カタカナのまま" do expect(@converter.modify_kana_ni_to_kanji_ni("イチニサン")).to eq "イチニサン" expect(@converter.modify_kana_ni_to_kanji_ni("ニーサン")).to eq "ニーサン" end end describe "ニ(カタカナ)の前後1文字がカタカナではなく、さらにその前後がカタカナの場合" do it "カタカナのまま" do expect(@converter.modify_kana_ni_to_kanji_ni("イチ、ニ、サン")).to eq "イチ、ニ、サン" expect(@converter.modify_kana_ni_to_kanji_ni("『ニ、ニンゲンの――』")).to eq "『ニ、ニンゲンの――』" expect(@converter.modify_kana_ni_to_kanji_ni("ニ、ニンゲン")).to eq "ニ、ニンゲン" end end describe "ニ(カタカナ)の前後1文字がカタカナではなく、さらにその前後がカタカナではない場合" do it "漢字の二に修正する" do expect(@converter.modify_kana_ni_to_kanji_ni("価格はニ千万円")).to eq "価格は二千万円" end end end context "#insert_word_separator" do before do @converter.instance_variable_set(:@text_type, "body") setting = @converter.instance_variable_get(:@setting) setting.enable_insert_word_separator = true end describe "Kindle以外" do before do @converter.instance_variable_set(:@device, Narou.get_device("reader")) end it "何も弄らない" do expect(@converter.insert_separator_for_selection("今日もいい天気ですね")).to eq "今日もいい天気ですね" end end describe "単語単位で区切る" do it do expect(@converter.insert_word_separator \ "今日もいい天気ですね").to eq \ "今日[#zws]もいい[#zws]天気[#zws]ですね[#zws]" end it do expect(@converter.insert_word_separator \ "合計1500円です").to eq \ "合計[#zws]1500[#zws]円[#zws]です[#zws]" end it do expect(@converter.insert_word_separator \ "[#二分アキ]「注釈内は区切らない」").to eq \ "[#二分アキ]「注釈内[#zws]は[#zws]区切[#zws]らない[#zws]」" end it do expect(@converter.insert_word_separator \ "あいう・えお").to eq \ "あいう[#zws]・[#zws]えお[#zws]" end it do expect(@converter.insert_word_separator \ "アイウ・エオ").to eq \ "アイウ・エオ[#zws]" end it do expect(@converter.insert_word_separator \ "彼は――そう……言った").to eq \ "彼[#zws]は[#zws]――[#zws]そう[#zws]……[#zws]言[#zws]った[#zws]" end it do expect(@converter.insert_word_separator \ "「あいう」、「えお」").to eq \ "「あいう[#zws]」、「えお[#zws]」" end it "ルビは除外" do expect(@converter.insert_word_separator \ "これは|漢字《かんじ》です").to eq \ "これは[#zws]|漢字《かんじ》[#zws]です[#zws]" expect(@converter.insert_word_separator \ "俺の妹がこんなに|可愛い《かわいい》わけがない").to eq \ "俺[#zws]の[#zws]妹[#zws]がこんなに[#zws]|可愛い《かわいい》[#zws]わけがない[#zws]" end it "外字注記は連続させる" do expect(@converter.insert_word_separator \ "失われし楽園※[#始め二重山括弧]パラダイスロスト※[#終わり二重山括弧]!!").to eq \ "失[#zws]われし[#zws]楽園[#zws]※[#始め二重山括弧][#zws]パラダイスロスト[#zws]※[#終わり二重山括弧]!!" end # zws があるせいで禁則処理が正常に働かないための対応 it "開きカッコの直後にzwsは挿入しない" do expect(@converter.insert_word_separator \ "そっちの『鈴』と一緒に入っていた").to eq \ "そっちの[#zws]『鈴[#zws]』[#zws]と[#zws]一緒[#zws]に[#zws]入[#zws]っていた[#zws]" end end describe "文字単位で区切る" do it do expect(@converter.insert_char_separator \ "今日もいい天気").to eq \ "今[#zws]日[#zws]も[#zws]い[#zws]い[#zws]天[#zws]気[#zws]" end it "連続させないとまずいものは連続させる" do expect(@converter.insert_char_separator \ "――何ということでしょう……。").to eq \ "――[#zws]何[#zws]と[#zws]い[#zws]う[#zws]こ[#zws]と[#zws]で[#zws]し[#zws]ょ[#zws]う[#zws]……[#zws]。[#zws]" end it "外字注記は連続させる" do expect(@converter.insert_char_separator \ "失われし楽園※[#始め二重山括弧]パラダイスロスト※[#終わり二重山括弧]!!").to eq \ "失[#zws]わ[#zws]れ[#zws]し[#zws]楽[#zws]園[#zws]※[#始め二重山括弧][#zws]パ[#zws]ラ[#zws]ダ[#zws]イ[#zws]ス[#zws]ロ[#zws]ス[#zws]ト[#zws]※[#終わり二重山括弧]!!" end end end describe "#to_ruby" do def to_ruby(match, m1, m2, open_close) @converter.to_ruby(match, m1, m2, open_close).gsub("[#ルビ用縦線]", "|") end describe "拗音の巨大化チェック" do before do @converter.instance_variable_get(:@setting).enable_ruby_youon_to_big = true end it "大きくなるべき" do expect(to_ruby( \ "ここは東京", "ここは東京", "とうきょう", ["(", ")"])).to eq \ "ここは|東京《とうきよう》" end it "大きくなるべき" do expect(to_ruby( \ "ここは|東京", "ここは|東京", "とうきょう", ["(", ")"])).to eq \ "ここは|東京《とうきよう》" end it "大きくなるべき" do expect(to_ruby( \ "ここは東京", "ここは東京", "トウキョウ", ["(", ")"])).to eq \ "ここは|東京《トウキヨウ》" end it "大きくなるべき" do expect(to_ruby( \ "ここは|東京", "ここは|東京", "トウキョウ", ["(", ")"])).to eq \ "ここは|東京《トウキヨウ》" end end end end