lib/novelsetting.rb in narou-1.7.0 vs lib/novelsetting.rb in narou-1.7.1
- old
+ new
@@ -1,258 +1,258 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright 2013 whiteleaf. All rights reserved.
-#
-
-require "fileutils"
-require_relative "ini"
-
-class NovelSetting
- INI_NAME = "setting.ini"
- REPLACE_NAME = "replace.txt"
-
- attr_accessor :id, :author, :title, :archive_path, :replace_pattern
-
- def self.load(target, ignore_force)
- archive_path = Downloader.get_novel_data_dir_by_target(target)
- if archive_path
- setting = new(archive_path, ignore_force)
- data = Downloader.get_data_by_target(target)
- setting.id = data["id"]
- setting.author = data["author"]
- setting.title = data["title"]
- setting
- else
- nil
- end
- end
-
- def initialize(archive_path, ignore_force)
- @archive_path = File.expand_path(archive_path)
- @ignore_force = ignore_force
- load_settings
- set_attribute
- load_replace_pattern
- end
-
- #
- # 小説変換時の設定値読込
- #
- # 設定値の優先順位は
- # 1. narou setting コマンドで設定した force.*
- # 2. setting.ini
- # 3. DEFAULT_SETTINGS
- #
- def load_settings
- @setting = {}
- ini_path = File.join(@archive_path, INI_NAME)
- ini = Ini.load_file(ini_path) rescue Ini.load("")
- force_settings = {}
- # 設定値を強制的に上書きするデータの読込
- unless @ignore_force
- Inventory.load("local_setting", :local).each { |name, value|
- if name =~ /^force\.(.+)$/
- force_settings[$1] = value
- end
- }
- end
- DEFAULT_SETTINGS.each do |element|
- name, value = element[:name], element[:value]
- if force_settings.include?(name)
- @setting[name] = force_settings[name]
- elsif ini["global"].include?(name)
- @setting[name] = ini["global"][name]
- else
- @setting[name] = value
- end
- end
- # デフォルト設定以外を読み込む
- ini["global"].each do |key, value|
- unless @setting.include?(key)
- @setting[key] = value
- end
- end
- end
-
- #
- # 設定データ用アクセサ定義
- #
- def set_attribute
- @setting.each_key do |key|
- instance_eval <<-EOS
- def #{key}
- @setting["#{key}"]
- end
-
- def #{key}=(value)
- @setting["#{key}"] = value
- end
- EOS
- end
- end
-
- #
- # replace.txt による置換定義を読み込む
- #
- def load_replace_pattern
- @replace_pattern = []
- replace_txt_path = File.join(@archive_path, REPLACE_NAME)
- if File.exist?(replace_txt_path)
- open(replace_txt_path, "r:BOM|UTF-8") do |fp|
- fp.each do |line|
- line.sub!(/[\r\n]+\z/, "")
- next if line[0] == ";" # コメント記号
- pattern = line.split("\t", 2)
- if pattern.length == 2 && pattern[0]
- @replace_pattern << pattern
- end
- end
- end
- end
- end
-
- DEFAULT_SETTINGS = [
- # name: 変数名
- # value: 初期値
- # help: 説明(setting.ini に書き出される)
- {
- name: "enable_convert_num_to_kanji",
- value: true,
- help: "数字の漢数字変換を有効に"
- },
- {
- name: "enable_kanji_num_with_units",
- value: true,
- help: "漢数字変換した場合、千・万などに変換するか"
- },
- {
- name: "kanji_num_with_units_lower_digit_zero",
- value: 3,
- help: "〇(ゼロ)が最低この数字以上付いてないと千・万などをつける対象にしない"
- },
- {
- name: "enable_alphabet_force_zenkaku",
- value: false,
- help: "アルファベットを強制的に全角にする。falseの場合英文は半角、それ以外は全角になる"
- },
- {
- name: "enable_half_indent_bracket",
- value: true,
- help: "行頭かぎ括弧に二分アキを挿入する"
- },
- {
- name: "enable_auto_indent",
- value: true,
- help: "自動行頭字下げ機能。行頭字下げが行われているかを判断し、適切に行頭字下げをする"
- },
- {
- name: "enable_auto_join_in_brackets",
- value: true,
- help: "かぎ括弧内自動連結を有効に\n例)\n「~~~!\n ***?」 → 「~~~! ***?」"
- },
- {
- name: "enable_inspect_invalid_openclose_brackets",
- value: false,
- help: "かぎ括弧内のとじ開きが正しくされているかどうか調査する"
- },
- {
- name: "enable_auto_join_line",
- value: true,
- help: "行末が読点で終わっている部分を出来るだけ連結する"
- },
- {
- name: "enable_enchant_midashi",
- value: true,
- help: "[#改ページ]直後の行に中見出しを付与する(テキストファイルを直接変換する場合のみの設定)"
- },
- {
- name: "enable_author_comments",
- value: true,
- help: "作者コメントを検出するか(テキストファイルを直接変換する場合のみの設定)"
- },
- {
- name: "enable_erase_introduction",
- value: false,
- help: "前書きを削除するか"
- },
- {
- name: "enable_erase_postscript",
- value: false,
- help: "後書きを削除するか"
- },
- {
- name: "enable_ruby",
- value: true,
- help: "ルビ処理を有効に"
- },
- {
- name: "enable_illust",
- value: true,
- help: "挿絵タグを有効にする(false なら削除)"
- },
- {
- name: "enable_transform_fraction",
- value: false,
- help: "○/×表記を×分の○表記に変換する。日付表記(10/23)と誤爆しやすいので注意"
- },
- {
- name: "enable_transform_date",
- value: false,
- help: "日付表記(20yy/mm/dd)を任意の形式(date_formatで指定)に変換する"
- },
- {
- name: "date_format",
- value: "%Y年%m月%d日",
- help: "書式は http://bit.ly/1m5e3w7 を参考"
- },
- {
- name: "enable_convert_horizontal_ellipsis",
- value: true,
- help: "中黒(・)を並べて三点リーダーもどきにしているのを三点リーダーに変換する"
- },
- {
- name: "enable_convert_page_break",
- value: false,
- help: "`to_page_break_threshold` で設定した個数以上連続する空行を改ページに変換する"
- },
- {
- name: "to_page_break_threshold",
- value: 10,
- help: "ここで設定した値が `enable_convert_page_break` に反映される"
- },
- {
- name: "enable_dakuten_font",
- value: true,
- help: "濁点フォントを使用するか。false の場合は縦中横による擬似表現を使用する"
- },
- {
- name: "enable_display_end_of_book",
- value: true,
- help: "小説の最後に本を読み終わった表示をするかどうか"
- },
- {
- name: "enable_add_date_to_title",
- value: false,
- help: "変換後の小説のタイトルに更新日の日付を付加するかどうか"
- },
- {
- name: "title_date_format",
- value: "(%-m/%-d)",
- help: "enable_add_date_to_title で付与する日付のフォーマット。書式は http://bit.ly/1m5e3w7 を参照"
- },
- {
- name: "title_date_align",
- value: "right",
- help: "enable_add_date_to_title で付与する日付の位置。left か right"
- },
- {
- name: "enable_ruby_youon_to_big",
- value: false,
- help: "ルビの拗音(ぁ、ぃ等)を商業書籍のように大きくするかどうか"
- },
- {
- name: "enable_pack_blank_line",
- value: true,
- help: "縦書きで読みやすいように空行を減らすかどうか"
- },
- ]
-end
+# -*- coding: utf-8 -*-
+#
+# Copyright 2013 whiteleaf. All rights reserved.
+#
+
+require "fileutils"
+require_relative "ini"
+
+class NovelSetting
+ INI_NAME = "setting.ini"
+ REPLACE_NAME = "replace.txt"
+
+ attr_accessor :id, :author, :title, :archive_path, :replace_pattern
+
+ def self.load(target, ignore_force)
+ archive_path = Downloader.get_novel_data_dir_by_target(target)
+ if archive_path
+ setting = new(archive_path, ignore_force)
+ data = Downloader.get_data_by_target(target)
+ setting.id = data["id"]
+ setting.author = data["author"]
+ setting.title = data["title"]
+ setting
+ else
+ nil
+ end
+ end
+
+ def initialize(archive_path, ignore_force)
+ @archive_path = File.expand_path(archive_path)
+ @ignore_force = ignore_force
+ load_settings
+ set_attribute
+ load_replace_pattern
+ end
+
+ #
+ # 小説変換時の設定値読込
+ #
+ # 設定値の優先順位は
+ # 1. narou setting コマンドで設定した force.*
+ # 2. setting.ini
+ # 3. DEFAULT_SETTINGS
+ #
+ def load_settings
+ @setting = {}
+ ini_path = File.join(@archive_path, INI_NAME)
+ ini = Ini.load_file(ini_path) rescue Ini.load("")
+ force_settings = {}
+ # 設定値を強制的に上書きするデータの読込
+ unless @ignore_force
+ Inventory.load("local_setting", :local).each { |name, value|
+ if name =~ /^force\.(.+)$/
+ force_settings[$1] = value
+ end
+ }
+ end
+ DEFAULT_SETTINGS.each do |element|
+ name, value = element[:name], element[:value]
+ if force_settings.include?(name)
+ @setting[name] = force_settings[name]
+ elsif ini["global"].include?(name)
+ @setting[name] = ini["global"][name]
+ else
+ @setting[name] = value
+ end
+ end
+ # デフォルト設定以外を読み込む
+ ini["global"].each do |key, value|
+ unless @setting.include?(key)
+ @setting[key] = value
+ end
+ end
+ end
+
+ #
+ # 設定データ用アクセサ定義
+ #
+ def set_attribute
+ @setting.each_key do |key|
+ instance_eval <<-EOS
+ def #{key}
+ @setting["#{key}"]
+ end
+
+ def #{key}=(value)
+ @setting["#{key}"] = value
+ end
+ EOS
+ end
+ end
+
+ #
+ # replace.txt による置換定義を読み込む
+ #
+ def load_replace_pattern
+ @replace_pattern = []
+ replace_txt_path = File.join(@archive_path, REPLACE_NAME)
+ if File.exist?(replace_txt_path)
+ open(replace_txt_path, "r:BOM|UTF-8") do |fp|
+ fp.each do |line|
+ line.sub!(/[\r\n]+\z/, "")
+ next if line[0] == ";" # コメント記号
+ pattern = line.split("\t", 2)
+ if pattern.length == 2 && pattern[0]
+ @replace_pattern << pattern
+ end
+ end
+ end
+ end
+ end
+
+ DEFAULT_SETTINGS = [
+ # name: 変数名
+ # value: 初期値
+ # help: 説明(setting.ini に書き出される)
+ {
+ name: "enable_convert_num_to_kanji",
+ value: true,
+ help: "数字の漢数字変換を有効に"
+ },
+ {
+ name: "enable_kanji_num_with_units",
+ value: true,
+ help: "漢数字変換した場合、千・万などに変換するか"
+ },
+ {
+ name: "kanji_num_with_units_lower_digit_zero",
+ value: 3,
+ help: "〇(ゼロ)が最低この数字以上付いてないと千・万などをつける対象にしない"
+ },
+ {
+ name: "enable_alphabet_force_zenkaku",
+ value: false,
+ help: "アルファベットを強制的に全角にする。falseの場合英文は半角、それ以外は全角になる"
+ },
+ {
+ name: "enable_half_indent_bracket",
+ value: true,
+ help: "行頭かぎ括弧に二分アキを挿入する"
+ },
+ {
+ name: "enable_auto_indent",
+ value: true,
+ help: "自動行頭字下げ機能。行頭字下げが行われているかを判断し、適切に行頭字下げをする"
+ },
+ {
+ name: "enable_auto_join_in_brackets",
+ value: true,
+ help: "かぎ括弧内自動連結を有効に\n例)\n「~~~!\n ***?」 → 「~~~! ***?」"
+ },
+ {
+ name: "enable_inspect_invalid_openclose_brackets",
+ value: false,
+ help: "かぎ括弧内のとじ開きが正しくされているかどうか調査する"
+ },
+ {
+ name: "enable_auto_join_line",
+ value: true,
+ help: "行末が読点で終わっている部分を出来るだけ連結する"
+ },
+ {
+ name: "enable_enchant_midashi",
+ value: true,
+ help: "[#改ページ]直後の行に中見出しを付与する(テキストファイルを直接変換する場合のみの設定)"
+ },
+ {
+ name: "enable_author_comments",
+ value: true,
+ help: "作者コメントを検出するか(テキストファイルを直接変換する場合のみの設定)"
+ },
+ {
+ name: "enable_erase_introduction",
+ value: false,
+ help: "前書きを削除するか"
+ },
+ {
+ name: "enable_erase_postscript",
+ value: false,
+ help: "後書きを削除するか"
+ },
+ {
+ name: "enable_ruby",
+ value: true,
+ help: "ルビ処理を有効に"
+ },
+ {
+ name: "enable_illust",
+ value: true,
+ help: "挿絵タグを有効にする(false なら削除)"
+ },
+ {
+ name: "enable_transform_fraction",
+ value: false,
+ help: "○/×表記を×分の○表記に変換する。日付表記(10/23)と誤爆しやすいので注意"
+ },
+ {
+ name: "enable_transform_date",
+ value: false,
+ help: "日付表記(20yy/mm/dd)を任意の形式(date_formatで指定)に変換する"
+ },
+ {
+ name: "date_format",
+ value: "%Y年%m月%d日",
+ help: "書式は http://bit.ly/1m5e3w7 を参考"
+ },
+ {
+ name: "enable_convert_horizontal_ellipsis",
+ value: true,
+ help: "中黒(・)を並べて三点リーダーもどきにしているのを三点リーダーに変換する"
+ },
+ {
+ name: "enable_convert_page_break",
+ value: false,
+ help: "`to_page_break_threshold` で設定した個数以上連続する空行を改ページに変換する"
+ },
+ {
+ name: "to_page_break_threshold",
+ value: 10,
+ help: "ここで設定した値が `enable_convert_page_break` に反映される"
+ },
+ {
+ name: "enable_dakuten_font",
+ value: true,
+ help: "濁点フォントを使用するか。false の場合は縦中横による擬似表現を使用する"
+ },
+ {
+ name: "enable_display_end_of_book",
+ value: true,
+ help: "小説の最後に本を読み終わった表示をするかどうか"
+ },
+ {
+ name: "enable_add_date_to_title",
+ value: false,
+ help: "変換後の小説のタイトルに更新日の日付を付加するかどうか"
+ },
+ {
+ name: "title_date_format",
+ value: "(%-m/%-d)",
+ help: "enable_add_date_to_title で付与する日付のフォーマット。書式は http://bit.ly/1m5e3w7 を参照"
+ },
+ {
+ name: "title_date_align",
+ value: "right",
+ help: "enable_add_date_to_title で付与する日付の位置。left か right"
+ },
+ {
+ name: "enable_ruby_youon_to_big",
+ value: false,
+ help: "ルビの拗音(ぁ、ぃ等)を商業書籍のように大きくするかどうか"
+ },
+ {
+ name: "enable_pack_blank_line",
+ value: true,
+ help: "縦書きで読みやすいように空行を減らすかどうか"
+ },
+ ]
+end