Class: NovelSetting
- Inherits:
-
Object
- Object
- NovelSetting
- Defined in:
- lib/novelsetting.rb
Constant Summary collapse
- INI_NAME =
"setting.ini"- REPLACE_NAME =
"replace.txt"- ORIGINAL_SETTINGS =
{ name: "enable_convert_num_to_kanji", type: :boolean, value: true, help: "数字の漢数字変換を有効に" }, { name: "enable_kanji_num_with_units", type: :boolean, value: true, help: "漢数字変換した場合、千・万などに変換するか" }, { name: "kanji_num_with_units_lower_digit_zero", type: :integer, value: 3, help: "〇(ゼロ)が最低この数字以上付いてないと千・万などをつける対象にしない" }, { name: "enable_alphabet_force_zenkaku", type: :boolean, value: false, help: "アルファベットを強制的に全角にする。falseの場合英文は半角、それ以外は全角になる" }, { name: "enable_half_indent_bracket", type: :boolean, value: true, help: "行頭かぎ括弧に二分アキを挿入する" }, { name: "enable_auto_indent", type: :boolean, value: true, help: "自動行頭字下げ機能。行頭字下げが行われているかを判断し、適切に行頭字下げをする" }, { name: "enable_force_indent", type: :boolean, value: false, help: "行頭字下げを必ず行う。enable_auto_indent の設定は無視される" }, { name: "enable_auto_join_in_brackets", type: :boolean, value: true, help: "かぎ括弧内自動連結を有効に\n例)\n「~~~!\n ***?」 → 「~~~! ***?」" }, { name: "enable_inspect_invalid_openclose_brackets", type: :boolean, value: false, help: "かぎ括弧内のとじ開きが正しくされているかどうか調査する" }, { name: "enable_auto_join_line", type: :boolean, value: true, help: "行末が読点で終わっている部分を出来るだけ連結する" }, { name: "enable_enchant_midashi", type: :boolean, value: true, help: "[#改ページ]直後の行に中見出しを付与する(テキストファイルを直接変換する場合のみの設定)" }, { name: "enable_author_comments", type: :boolean, value: true, help: "作者コメントを検出するか(テキストファイルを直接変換する場合のみの設定)" }, { name: "enable_erase_introduction", type: :boolean, value: false, help: "前書きを削除するか" }, { name: "enable_erase_postscript", type: :boolean, value: false, help: "後書きを削除するか" }, { name: "enable_ruby", type: :boolean, value: true, help: "ルビ処理を有効に" }, { name: "enable_illust", type: :boolean, value: true, help: "挿絵タグを有効にする(false なら削除)" }, { name: "enable_transform_fraction", type: :boolean, value: false, help: "○/×表記を×分の○表記に変換する。日付表記(10/23)と誤爆しやすいので注意" }, { name: "enable_transform_date", type: :boolean, value: false, help: "日付表記(20yy/mm/dd)を任意の形式(date_formatで指定)に変換する" }, { name: "date_format", type: :string, value: "%Y年%m月%d日", help: "書式は http://bit.ly/1m5e3w7 を参考" }, { name: "enable_convert_horizontal_ellipsis", type: :boolean, value: true, help: "中黒(・)を並べて三点リーダーもどきにしているのを三点リーダーに変換する" }, { name: "enable_convert_page_break", type: :boolean, value: false, help: "`to_page_break_threshold` で設定した個数以上連続する空行を改ページに変換する" }, { name: "to_page_break_threshold", type: :integer, value: 10, help: "ここで設定した値が `enable_convert_page_break` に反映される" }, { name: "enable_dakuten_font", type: :boolean, value: true, help: "濁点フォントを使用するか。false の場合は縦中横による擬似表現を使用する" }, { name: "enable_display_end_of_book", type: :boolean, value: true, help: "小説の最後に本を読み終わった表示をするかどうか" }, { name: "enable_add_date_to_title", type: :boolean, value: false, help: "変換後の小説のタイトルに更新日の日付を付加するかどうか" }, { name: "title_date_format", type: :string, value: "(%-m/%-d)", help: "enable_add_date_to_title で付与する日付のフォーマット。書式は http://bit.ly/1m5e3w7 を参照" }, { name: "title_date_align", type: :select, value: "right", help: "enable_add_date_to_title で付与する日付の位置。left(タイトルの前) か right(タイトルの後)", select_keys: %w(left right), select_summaries: %w(タイトルの前 タイトルの後) }, { name: "enable_ruby_youon_to_big", type: :boolean, value: false, help: "ルビの拗音(ぁ、ぃ等)を商業書籍のように大きくするかどうか" }, { name: "enable_pack_blank_line", type: :boolean, value: true, help: "縦書きで読みやすいように空行を減らすかどうか" }, { name: "enable_kana_ni_to_kanji_ni", type: :boolean, value: true, help: "漢字の二と間違えてカタカナのニを使っていそうなのを、漢字に直すかどうか" }, { name: "enable_insert_word_separator", type: :boolean, value: false, help: "単語選択がしやすいように単語単位の区切りデータを挿入する(Kindle専用)" }, { name: "enable_insert_char_separator", type: :boolean, value: false, help: "文字選択がしやすいように1文字ずつ区切りデータを挿入する(Kindle専用。enable_insert_word_separator が有効な場合無この設定は無視される)" }
Instance Attribute Summary collapse
-
#archive_path ⇒ Object
Returns the value of attribute archive_path.
-
#author ⇒ Object
Returns the value of attribute author.
-
#id ⇒ Object
Returns the value of attribute id.
-
#replace_pattern ⇒ Object
Returns the value of attribute replace_pattern.
-
#settings ⇒ Object
Returns the value of attribute settings.
-
#title ⇒ Object
Returns the value of attribute title.
Class Method Summary collapse
-
.create(target, ignore_force, ignore_default) ⇒ Object
小説設定オブジェクトを作成する.
-
.load(target, ignore_force, ignore_default) ⇒ Object
データベースに登録されている小説の設定を取得する.
-
.load_default_settings ⇒ Object
default.* 設定を取得.
-
.load_force_settings ⇒ Object
force.* 設定を取得.
-
.load_settings_by_pattern(pattern) ⇒ Object
local_settings から group.name 形式のデータを取得.
Instance Method Summary collapse
-
#[](name) ⇒ Object
配列風のアクセサ定義.
- #[]=(name, value) ⇒ Object
-
#check_value_of_type(name, value) ⇒ Object
指定された設定の型チェック.
- #ini_path ⇒ Object
-
#initialize(target, ignore_force, ignore_default) ⇒ NovelSetting
constructor
A new instance of NovelSetting.
-
#load_replace_pattern ⇒ Object
replace.txt による置換定義を読み込む.
- #load_setting_ini ⇒ Object
-
#load_settings ⇒ Object
小説変換時の設定値読込.
-
#save_replace_pattern ⇒ Object
replace.txt に設定を書き戻す.
-
#save_settings ⇒ Object
設定を保存.
-
#set_attribute ⇒ Object
設定データ用アクセサ定義.
- #type_eq_value(type, value) ⇒ Object
Constructor Details
#initialize(target, ignore_force, ignore_default) ⇒ NovelSetting
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/novelsetting.rb', line 41 def initialize(target, ignore_force, ignore_default) if File.directory?(target.to_s) archive_path = target else archive_path = Downloader.get_novel_data_dir_by_target(target).to_s end @archive_path = File.(archive_path) @ignore_force = ignore_force @ignore_default = ignore_default @replace_pattern = [] @settings = {} end |
Instance Attribute Details
#archive_path ⇒ Object
Returns the value of attribute archive_path.
13 14 15 |
# File 'lib/novelsetting.rb', line 13 def archive_path @archive_path end |
#author ⇒ Object
Returns the value of attribute author.
13 14 15 |
# File 'lib/novelsetting.rb', line 13 def end |
#id ⇒ Object
Returns the value of attribute id.
13 14 15 |
# File 'lib/novelsetting.rb', line 13 def id @id end |
#replace_pattern ⇒ Object
Returns the value of attribute replace_pattern.
13 14 15 |
# File 'lib/novelsetting.rb', line 13 def replace_pattern @replace_pattern end |
#settings ⇒ Object
Returns the value of attribute settings.
13 14 15 |
# File 'lib/novelsetting.rb', line 13 def settings @settings end |
#title ⇒ Object
Returns the value of attribute title.
13 14 15 |
# File 'lib/novelsetting.rb', line 13 def title @title end |
Class Method Details
.create(target, ignore_force, ignore_default) ⇒ Object
小説設定オブジェクトを作成する
target には小説ID等の他、小説保存フォルダを指定できる。テキストファイル変換時はデータベースに登録されていないので load ではなくこちらを使用する
33 34 35 36 37 38 39 |
# File 'lib/novelsetting.rb', line 33 def self.create(target, ignore_force, ignore_default) setting = new(target, ignore_force, ignore_default) setting.load_settings setting.set_attribute setting.load_replace_pattern setting end |
.load(target, ignore_force, ignore_default) ⇒ Object
データベースに登録されている小説の設定を取得する
18 19 20 21 22 23 24 25 |
# File 'lib/novelsetting.rb', line 18 def self.load(target, ignore_force, ignore_default) setting = create(target, ignore_force, ignore_default) data = Downloader.get_data_by_target(target) setting.id = data["id"] setting. = data["author"] setting.title = data["title"] setting end |
.load_default_settings ⇒ Object
default.* 設定を取得
122 123 124 |
# File 'lib/novelsetting.rb', line 122 def self.load_default_settings load_settings_by_pattern("default") end |
.load_force_settings ⇒ Object
force.* 設定を取得
115 116 117 |
# File 'lib/novelsetting.rb', line 115 def self.load_force_settings load_settings_by_pattern("force") end |
.load_settings_by_pattern(pattern) ⇒ Object
local_settings から group.name 形式のデータを取得
{ name: value, … } 形式のハッシュとして返す
101 102 103 104 105 106 107 108 109 110 |
# File 'lib/novelsetting.rb', line 101 def self.load_settings_by_pattern(pattern) res = Inventory.load("local_setting", :local).map { |name, value| if name =~ /^#{pattern}\.(.+)$/ [$1, value] else nil end }.compact.flatten Hash[*res] end |
Instance Method Details
#[](name) ⇒ Object
配列風のアクセサ定義
179 180 181 |
# File 'lib/novelsetting.rb', line 179 def [](name) @settings[name] end |
#[]=(name, value) ⇒ Object
183 184 185 186 187 188 |
# File 'lib/novelsetting.rb', line 183 def []=(name, value) unless value.nil? check_value_of_type(name, value) end @settings[name] = value end |
#check_value_of_type(name, value) ⇒ Object
指定された設定の型チェック
149 150 151 152 153 154 155 156 |
# File 'lib/novelsetting.rb', line 149 def check_value_of_type(name, value) index = ORIGINAL_SETTINGS.index { |v| v[:name] == name } return unless index original = ORIGINAL_SETTINGS[index] if original && !type_eq_value(original[:type], value) raise Helper::InvalidVariableType, original[:type] end end |
#ini_path ⇒ Object
54 55 56 |
# File 'lib/novelsetting.rb', line 54 def ini_path File.join(@archive_path, INI_NAME) end |
#load_replace_pattern ⇒ Object
replace.txt による置換定義を読み込む
193 194 195 196 197 198 199 200 |
# File 'lib/novelsetting.rb', line 193 def load_replace_pattern @replace_pattern.clear replace_txt_path = File.join(@archive_path, REPLACE_NAME) if File.exist?(replace_txt_path) @replace_pattern = Narou.parse_replace_txt(File.read(replace_txt_path, mode: "r:BOM|UTF-8")) end @replace_pattern end |
#load_setting_ini ⇒ Object
58 59 60 |
# File 'lib/novelsetting.rb', line 58 def load_setting_ini Ini.load_file(ini_path) rescue Ini.load("") end |
#load_settings ⇒ Object
小説変換時の設定値読込
設定値の優先順位は
-
narou setting コマンドで設定した force.*
-
setting.ini
-
narou setting コマンドで設定した default.*
-
ORIGINAL_SETTINGS
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/novelsetting.rb', line 71 def load_settings @settings.clear ini = load_setting_ini force_settings = @ignore_force ? {} : NovelSetting.load_force_settings default_settings = @ignore_default ? {} : NovelSetting.load_default_settings ORIGINAL_SETTINGS.each do |element| name, value, type = element[:name], element[:value], element[:type] if force_settings.include?(name) @settings[name] = force_settings[name] elsif ini["global"].include?(name) && type_eq_value(type, ini["global"][name]) @settings[name] = ini["global"][name] elsif default_settings.include?(name) @settings[name] = default_settings[name] else @settings[name] = value end end # デフォルト設定以外を読み込む ini["global"].each do |key, value| unless @settings.include?(key) @settings[key] = value end end end |
#save_replace_pattern ⇒ Object
replace.txt に設定を書き戻す
205 206 207 208 |
# File 'lib/novelsetting.rb', line 205 def save_replace_pattern replace_txt_path = File.join(@archive_path, REPLACE_NAME) Narou.write_replace_txt(replace_txt_path, @replace_pattern) end |
#save_settings ⇒ Object
設定を保存
129 130 131 132 133 134 |
# File 'lib/novelsetting.rb', line 129 def save_settings ini = Ini.new ini.filename = File.join(@archive_path, INI_NAME) ini.object["global"].merge!(@settings) ini.save end |
#set_attribute ⇒ Object
設定データ用アクセサ定義
161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/novelsetting.rb', line 161 def set_attribute @settings.each_key do |key| instance_eval " def \#{key}\n @settings[\"\#{key}\"]\n end\n\n def \#{key}=(value)\n check_value_of_type(\"\#{key}\", value)\n @settings[\"\#{key}\"] = value\n end\n EOS\n end\nend\n" |
#type_eq_value(type, value) ⇒ Object
136 137 138 139 140 141 142 143 144 |
# File 'lib/novelsetting.rb', line 136 def type_eq_value(type, value) type_of_value = Helper.type_of_value(value) case type when :string, :select, :multiple :string == type_of_value else type == type_of_value end end |