narou 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of narou might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/ChangeLog.md +24 -0
- data/README.md +6 -5
- data/lib/color.rb +7 -0
- data/lib/command/list.rb +1 -1
- data/lib/command/remove.rb +1 -1
- data/lib/command/send.rb +27 -10
- data/lib/command/setting.rb +6 -0
- data/lib/command/update.rb +1 -1
- data/lib/commandline.rb +8 -1
- data/lib/converterbase.rb +57 -14
- data/lib/database.rb +8 -0
- data/lib/device.rb +17 -10
- data/lib/extensions/windows.rb +3 -3
- data/lib/inspector.rb +1 -1
- data/lib/version.rb +1 -1
- data/narou.rb +12 -12
- data/preset/DMincho.ttf +0 -0
- metadata +20 -18
- data/lib/command/interactive.rb +0 -16
- data/lib/command/new.rb +0 -12
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b86024bfac26c1b58b5cb7f1fdd823a087956f2e
|
4
|
+
data.tar.gz: 0508f7d5fc19bcb92eced3f3b83650f57ee0dabf
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 932b6d2806200072c305cd593a73dc325f26c91a5b731bc1afe90a25f0987559ea5e9e7851fc4998ec62fc7706488464e62f455f82165e7b4f62a23412940a55
|
7
|
+
data.tar.gz: f93648aa0f82b39fe6a632044553ac3e64f249559e26b696637e0b3981e3e887175bed18a0904ca71beb806f2c1b6a2d396b6f8a194e030c9a7f054d908679d0
|
data/ChangeLog.md
CHANGED
@@ -1,6 +1,30 @@
|
|
1
1
|
|
2
2
|
更新履歴 - ChangeLog
|
3
3
|
--------------------
|
4
|
+
2013/03/?? : **1.2.1**
|
5
|
+
* Bug Fix
|
6
|
+
- ノノカギのとじ忘れがあると以降のノノカギのとじ開きが逆になってしまうバグを修正
|
7
|
+
* この修正によって改行を含んだノノカギでおかしくなるが、仕様とする
|
8
|
+
- 濁点フォント(DMincho.ttf)に含まれていない文字は縦中横の擬似表現にする
|
9
|
+
- アラビア数字の漢数字化がちゃんと変換できていなかったのを修正
|
10
|
+
* 追加機能もしくは仕様変更
|
11
|
+
- `send` コマンドで管理する全ての小説を送信する機能追加
|
12
|
+
* `send` を引数なしで実行することで、端末にある書籍データより新しければ送信する
|
13
|
+
- DMincho.ttfの濁点対応文字を増やした(ι゛ および カタカナに濁点)。 **narou init でAozoraEpub3の再設定が必要です**
|
14
|
+
- コマンドのデフォルトのオプションを指定できる機能を追加
|
15
|
+
* `narou setting default_args.コマンド名="オプション"` で設定出来ます。注意:これは、直接コマンドを発行した時のみ有効です。
|
16
|
+
他のコマンド経由で呼ばれる場合には有効にはなりません。
|
17
|
+
```
|
18
|
+
# 使用例
|
19
|
+
# list コマンドで、「更新日の」「古い順」に表示するオプションを設定(リストが長くなった時に便利)
|
20
|
+
narou setting default_args.list="-lr"
|
21
|
+
# オプションを指定しなくても、default_args.listで設定したオプションが使われる
|
22
|
+
narou list
|
23
|
+
|
24
|
+
# 削除確認メッセージ毎回表示しない
|
25
|
+
narou setting default_args.remove="-y"
|
26
|
+
narou remove 0
|
27
|
+
```
|
4
28
|
|
5
29
|
2013/03/19 : **1.2.0**
|
6
30
|
* Bug Fix 及び機能改善
|
data/README.md
CHANGED
@@ -3,16 +3,17 @@ Narou.rb ― 小説家になろうダウンローダ&縦書用整形スクリ
|
|
3
3
|
|
4
4
|
概要 - Summary
|
5
5
|
--------------
|
6
|
-
このアプリは[小説家になろう](http://syosetu.com/)
|
7
|
-
|
6
|
+
このアプリは[小説家になろう](http://syosetu.com/)、[小説を読もう!](http://yomou.syosetu.com/)で公開されている小説の管理、
|
7
|
+
及び電子書籍データへの変換を支援します。縦書用に特化されており、
|
8
|
+
横書き用に特化されたWEB小説を違和感なく縦書で読むことが出来るようになります。
|
9
|
+
また、若干の校正機能もありますので、小説としては許されない記述法などは矯正します。(例:感嘆符のあとにはスペースが必ずくる)
|
10
|
+
|
11
|
+
[ノクターンノベルズ](http://noc.syosetu.com/)及び[ムーンライトノベルズ](http://mnlt.syosetu.com/)にも対応しています。
|
8
12
|
|
9
13
|
全てコンソールで操作するCUIアプリケーションです。
|
10
14
|
|
11
15
|
主な機能は小説家になろうの小説のダウンロード、更新管理、テキスト整形、AozoraEpub3・kindlegen連携によるEPUB/MOBI出力です。
|
12
16
|
|
13
|
-
縦書に特化しており、どんな文章だろうとほぼ違和感なく縦書で読むことができるように変換します。また、若干の校正機能もありますので、
|
14
|
-
小説としては許されない記述法などは矯正します。(例:感嘆符のあとにはスペースが必ずくる)
|
15
|
-
|
16
17
|
詳細な説明やインストール方法は **[Narou.rb 説明書](https://github.com/whiteleaf7/narou/wiki)** を御覧ください。
|
17
18
|
|
18
19
|
更新履歴 - ChangeLog
|
data/lib/color.rb
CHANGED
@@ -27,8 +27,15 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
27
27
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
28
28
|
=end
|
29
29
|
|
30
|
+
alias :original_warn :warn
|
31
|
+
unless $debug
|
32
|
+
def warn(*a); end
|
33
|
+
end
|
34
|
+
|
30
35
|
require "termcolor"
|
31
36
|
|
37
|
+
alias :warn :original_warn
|
38
|
+
|
32
39
|
if RUBY_PLATFORM =~ /mswin(?!ce)|mingw|bccwin/i # without cygwin
|
33
40
|
require_relative "extensions/windows"
|
34
41
|
|
data/lib/command/list.rb
CHANGED
@@ -40,7 +40,7 @@ module Command
|
|
40
40
|
id = novel["id"]
|
41
41
|
frozen = Narou.novel_frozen?(id)
|
42
42
|
disp_id = ((frozen ? "*" : "") + id.to_s).rjust(4)
|
43
|
-
disp_id = disp_id.sub("*", "<
|
43
|
+
disp_id = disp_id.sub("*", "<cyan>*</cyan>").termcolor if frozen
|
44
44
|
puts [
|
45
45
|
disp_id,
|
46
46
|
novel["last_update"].strftime("%y/%m/%d"),
|
data/lib/command/remove.rb
CHANGED
data/lib/command/send.rb
CHANGED
@@ -14,24 +14,29 @@ module Command
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def initialize
|
17
|
-
super("<device> <target1>
|
17
|
+
super("<device> [<target1> <target2> ...]")
|
18
18
|
@opt.separator <<-EOS
|
19
19
|
|
20
|
-
|
20
|
+
・<target>で指定した小説の電子書籍データ(#{Device::DEVICES.map{|_,d| d::EBOOK_FILE_EXT}.join(", ")})を<device>で指定した端末に送信します。
|
21
21
|
<device>には現在 #{Device::DEVICES.keys.join(", ")} が指定出来ます。
|
22
22
|
・narou setting device=<device>としておけば、<device>の入力を省略できます。
|
23
23
|
また、convertコマンドで変換時に(端末がPCに接続されていれば)自動でデータを送信するようになります。
|
24
|
+
・<target>を省略した場合、管理している小説全てのファイルのタイムスタンプを端末のものと比べて新しければ送信します。
|
24
25
|
|
25
26
|
Example:
|
26
27
|
narou send kindle 6
|
27
28
|
narou send kobo 6
|
29
|
+
|
30
|
+
# <device>の省略
|
28
31
|
narou setting device=kindle
|
29
|
-
narou send 6
|
32
|
+
narou send 6
|
33
|
+
|
34
|
+
narou send # 端末のファイルより新しいファイルがあれば送信
|
30
35
|
EOS
|
31
36
|
end
|
32
37
|
|
33
38
|
def get_device(argv)
|
34
|
-
if Device.exists?(argv.first)
|
39
|
+
if argv.first && Device.exists?(argv.first)
|
35
40
|
return Narou.get_device(argv.shift)
|
36
41
|
end
|
37
42
|
Narou.get_device
|
@@ -39,10 +44,6 @@ module Command
|
|
39
44
|
|
40
45
|
def execute(argv)
|
41
46
|
super
|
42
|
-
if argv.empty?
|
43
|
-
puts @opt.help
|
44
|
-
return
|
45
|
-
end
|
46
47
|
device = get_device(argv)
|
47
48
|
unless device
|
48
49
|
error "デバイス名を指定して下さい"
|
@@ -52,6 +53,15 @@ module Command
|
|
52
53
|
error "#{device.name}が接続されていません"
|
53
54
|
exit 1
|
54
55
|
end
|
56
|
+
send_all = false
|
57
|
+
titles = {}
|
58
|
+
if argv.empty?
|
59
|
+
send_all = true
|
60
|
+
Database.instance.each do |id, data|
|
61
|
+
argv << id
|
62
|
+
titles[id] = data["title"]
|
63
|
+
end
|
64
|
+
end
|
55
65
|
argv.each do |target|
|
56
66
|
ebook_path = Narou.get_ebook_file_path(target, device.ebook_file_ext)
|
57
67
|
unless ebook_path
|
@@ -59,9 +69,16 @@ module Command
|
|
59
69
|
next
|
60
70
|
end
|
61
71
|
unless File.exists?(ebook_path)
|
62
|
-
error "まだファイル(#{File.basename(ebook_path)})が無いようです"
|
72
|
+
error "まだファイル(#{File.basename(ebook_path)})が無いようです" unless send_all
|
63
73
|
next
|
64
74
|
end
|
75
|
+
if send_all
|
76
|
+
if device.ebook_file_old?(ebook_path)
|
77
|
+
puts "<green>ID:#{target} #{titles[target]}</green>".termcolor
|
78
|
+
else
|
79
|
+
next
|
80
|
+
end
|
81
|
+
end
|
65
82
|
print "#{device.name}へ送信しています"
|
66
83
|
exit_copy = false
|
67
84
|
copy_to_path = nil
|
@@ -73,8 +90,8 @@ module Command
|
|
73
90
|
print "."
|
74
91
|
sleep(0.5)
|
75
92
|
end
|
76
|
-
puts
|
77
93
|
if copy_to_path
|
94
|
+
puts
|
78
95
|
puts copy_to_path + " へコピーしました"
|
79
96
|
else
|
80
97
|
error "#{device.name}が見つからなかったためコピー出来ませんでした"
|
data/lib/command/setting.rb
CHANGED
@@ -240,6 +240,7 @@ module Command
|
|
240
240
|
"convert.inspect" => [:boolean, "常に変換時に調査結果を表示するか"],
|
241
241
|
"download.interval" => [:float, "各話DL時に指定した秒数待機する。デフォルト0"],
|
242
242
|
"device" => [:string, "変換、送信対象の端末(sendの--help参照)"],
|
243
|
+
|
243
244
|
},
|
244
245
|
global: {
|
245
246
|
"aozoraepub3dir" => [:directory, "AozoraEpub3のあるフォルダを指定", INVISIBLE],
|
@@ -256,5 +257,10 @@ module Command
|
|
256
257
|
TYPE_OF_VALUE[default[:value].class], "", INVISIBLE
|
257
258
|
]
|
258
259
|
end
|
260
|
+
|
261
|
+
Dir.glob(File.expand_path(File.join(File.dirname(__FILE__), "*.rb"))) do |path|
|
262
|
+
cmd_name = File.basename(path, ".rb")
|
263
|
+
SETTING_VARIABLES[:local]["default_args." + cmd_name] = [:string, "", INVISIBLE]
|
264
|
+
end
|
259
265
|
end
|
260
266
|
end
|
data/lib/command/update.rb
CHANGED
data/lib/commandline.rb
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
require_relative "narou"
|
7
7
|
require_relative "command"
|
8
8
|
require_relative "helper"
|
9
|
+
require_relative "localsetting"
|
9
10
|
|
10
11
|
module CommandLine
|
11
12
|
def self.run(argv)
|
@@ -29,6 +30,12 @@ module CommandLine
|
|
29
30
|
puts
|
30
31
|
arg = "help"
|
31
32
|
end
|
32
|
-
|
33
|
+
default_arguments = load_default_arguments(arg)
|
34
|
+
Command.get_list[arg].execute(argv + default_arguments)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.load_default_arguments(cmd)
|
38
|
+
default_arguments_list = LocalSetting.get["local_setting"]
|
39
|
+
(default_arguments_list["default_args.#{cmd}"] || "").split
|
33
40
|
end
|
34
41
|
end
|
data/lib/converterbase.rb
CHANGED
@@ -41,6 +41,7 @@ class ConverterBase
|
|
41
41
|
@english_sentences = []
|
42
42
|
@url_list = []
|
43
43
|
@illust_chuki_list = []
|
44
|
+
@kanji_num_list = {}
|
44
45
|
@in_author_comment_block = nil
|
45
46
|
end
|
46
47
|
|
@@ -81,8 +82,10 @@ class ConverterBase
|
|
81
82
|
# アラビア数字を漢数字に
|
82
83
|
#
|
83
84
|
# カンマ区切りの数字はアラビア数字のままにしておく
|
85
|
+
# もともと漢数字なのは他の変換を受けないように退避させておく
|
84
86
|
#
|
85
87
|
def num_to_kanji(data)
|
88
|
+
stash_kanji_num(data)
|
86
89
|
data.gsub!(/[\d0-9,,]+/) do |match|
|
87
90
|
if match =~ /[,,]/
|
88
91
|
match
|
@@ -93,6 +96,22 @@ class ConverterBase
|
|
93
96
|
data
|
94
97
|
end
|
95
98
|
|
99
|
+
def stash_kanji_num(data)
|
100
|
+
data.gsub!(/[#{KANJI_NUM}十百千万億兆京]+/).with_index do |match, i|
|
101
|
+
if "#{$`[-1]}#{$'[0]}" =~ /[\d0-9]/
|
102
|
+
next match
|
103
|
+
end
|
104
|
+
@kanji_num_list[convert_numbers(i.to_s)] = match
|
105
|
+
"[#漢数字=#{i}]"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def rebuild_kanji_num(data)
|
110
|
+
data.gsub!(/[#漢数字=(.+?)]/) do
|
111
|
+
@kanji_num_list[$1]
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
96
115
|
#
|
97
116
|
# 全角アラビア数字を漢数字に
|
98
117
|
#
|
@@ -105,6 +124,25 @@ class ConverterBase
|
|
105
124
|
KANJI_NUM_UNITS_DIGIT = {
|
106
125
|
"十" => 1, "百" => 2, "千" => 3, "万" => 4, "億" => 8, "兆" => 12, "京" => 16
|
107
126
|
}
|
127
|
+
|
128
|
+
def __calc_kanji_num_with_unit(string)
|
129
|
+
total = 0
|
130
|
+
string.scan(/([#{KANJI_NUM}]*)([十百千]*)/) do |num, units|
|
131
|
+
break if num + units == ""
|
132
|
+
num = "1" if num.empty?
|
133
|
+
total += (num.tr(KANJI_NUM, "0-9") + units.each_char.map { |c| "0" * KANJI_NUM_UNITS_DIGIT[c] }.join).to_i
|
134
|
+
end
|
135
|
+
total
|
136
|
+
end
|
137
|
+
|
138
|
+
def kanji_num_to_integer(string)
|
139
|
+
total = 0
|
140
|
+
string.scan(/([#{KANJI_NUM}十百千]+)([万億兆京]*)/) do |num, units|
|
141
|
+
total += (__calc_kanji_num_with_unit(num).to_s + units.each_char.map { |c| "0" * KANJI_NUM_UNITS_DIGIT[c] }.join).to_i
|
142
|
+
end
|
143
|
+
total
|
144
|
+
end
|
145
|
+
|
108
146
|
#
|
109
147
|
# 漢数字を単位を使った表現に変換
|
110
148
|
#
|
@@ -114,16 +152,13 @@ class ConverterBase
|
|
114
152
|
def convert_kanji_num_with_unit(data, lower_digit_zero = 0)
|
115
153
|
#data.gsub!(/([#{KANJI_NUM}]+)([十百千万億兆京]?)/) do |match|
|
116
154
|
data.gsub!(/([#{KANJI_NUM}十百千万億兆京]+)/) do |match|
|
117
|
-
total =
|
118
|
-
$1.scan(/([#{KANJI_NUM}]+)([十百千万億兆京]*)/) do |num, units|
|
119
|
-
total += (num.tr(KANJI_NUM, "0-9") + units.each_char.map { |c| "0" * KANJI_NUM_UNITS_DIGIT[c] }.join).to_i
|
120
|
-
end
|
155
|
+
total = kanji_num_to_integer($1)
|
121
156
|
m1 = total.to_s.tr("0-9", KANJI_NUM)
|
122
157
|
if m1 =~ /〇{#{lower_digit_zero},}$/
|
123
158
|
digits = m1.reverse.scan(/.{1,4}/).map(&:reverse).reverse # 下の桁から4桁ずつ区切った配列を作成
|
124
159
|
keta = digits.count - 1
|
125
160
|
digits.map.with_index { |nums, keta_i|
|
126
|
-
nums.scan(/./).map.with_index { |d, di|
|
161
|
+
four_digit_num = nums.scan(/./).map.with_index { |d, di|
|
127
162
|
next "" if d == "〇"
|
128
163
|
kurai = KANJI_KURAI[nums.length - di - 1]
|
129
164
|
if d == "一"
|
@@ -134,7 +169,12 @@ class ConverterBase
|
|
134
169
|
end
|
135
170
|
end
|
136
171
|
d + kurai
|
137
|
-
}.join
|
172
|
+
}.join
|
173
|
+
if four_digit_num.length > 0
|
174
|
+
four_digit_num + KANJI_NUM_UNITS[keta - keta_i]
|
175
|
+
else
|
176
|
+
""
|
177
|
+
end
|
138
178
|
}.join
|
139
179
|
else
|
140
180
|
match
|
@@ -246,8 +286,8 @@ class ConverterBase
|
|
246
286
|
#
|
247
287
|
def symbols_to_zenkaku(data)
|
248
288
|
data.tr!("“”‘’〝〟", %!""''""!)
|
249
|
-
data.gsub!(/"([^"]+)"/, "〝\\1〟")
|
250
|
-
data.gsub!(/'([^']+)'/, "〝\\1〟") # MEMO: シングルミュート(ノノカギ)を表示出来るフォントはほとんど無い
|
289
|
+
data.gsub!(/"([^"\n]+)"/, "〝\\1〟")
|
290
|
+
data.gsub!(/'([^'\n]+)'/, "〝\\1〟") # MEMO: シングルミュート(ノノカギ)を表示出来るフォントはほとんど無い
|
251
291
|
data.gsub!("≪", "※[#始め二重山括弧]")
|
252
292
|
data.gsub!("≫", "※[#終わり二重山括弧]")
|
253
293
|
data.tr!("-=+/*《》'\"%$#&!?、<><>()|‐,._;:",
|
@@ -309,11 +349,13 @@ class ConverterBase
|
|
309
349
|
#
|
310
350
|
def convert_dakuten_char_to_font(data)
|
311
351
|
data.gsub!(/(.)[゛゙]/) do
|
312
|
-
|
313
|
-
|
352
|
+
if $1 =~ /[ぁ-んァ-ヶι]/
|
353
|
+
@use_dakuten_font = true
|
354
|
+
"[#濁点]#{$1}[#濁点終わり]"
|
355
|
+
else
|
356
|
+
tcy($1 + "゛")
|
357
|
+
end
|
314
358
|
end
|
315
|
-
#data.gsub!(/(.)[゛゙]/, "\\1゙[#「\\1゙」は縦中横]")
|
316
|
-
#data.gsub!(/(.)[゜゚]/, "\\1゚[#「\\1゚」は縦中横]")
|
317
359
|
end
|
318
360
|
|
319
361
|
#
|
@@ -667,7 +709,7 @@ class ConverterBase
|
|
667
709
|
end
|
668
710
|
# ()なルビの対処
|
669
711
|
if @text_type != "subtitle"
|
670
|
-
data.gsub!(/(.+?)(([
|
712
|
+
data.gsub!(/(.+?)(([ぁ-んァ-ヶーゝゞ・A-Za-zA-Za-z ]{,20}))/) do |match|
|
671
713
|
to_ruby(match, $1, $2, ["(", ")"])
|
672
714
|
end
|
673
715
|
end
|
@@ -942,7 +984,8 @@ class ConverterBase
|
|
942
984
|
rebuild_illust(data)
|
943
985
|
rebuild_url(data)
|
944
986
|
rebuild_english_sentences(data)
|
945
|
-
|
987
|
+
rebuild_kanji_num(data)
|
988
|
+
# 再構築された文章にルビがふられる可能性を考慮して、
|
946
989
|
# この位置でルビの処理を行う
|
947
990
|
narou_ruby(data) if @setting.enable_ruby
|
948
991
|
# 三点リーダーの変換は、ルビで圏点として・・・を使っている場合を考慮して、ルビ処理後にする
|
data/lib/database.rb
CHANGED
data/lib/device.rb
CHANGED
@@ -59,6 +59,17 @@ class Device
|
|
59
59
|
nil
|
60
60
|
end
|
61
61
|
|
62
|
+
def ebook_file_old?(src_file)
|
63
|
+
documents_path = get_documents_path
|
64
|
+
if documents_path
|
65
|
+
dst_path = File.join(documents_path, File.basename(src_file))
|
66
|
+
if File.exists?(dst_path)
|
67
|
+
return File.mtime(src_file) > File.mtime(dst_path)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
true
|
71
|
+
end
|
72
|
+
|
62
73
|
def copy_to_documents(src_file)
|
63
74
|
documents_path = get_documents_path
|
64
75
|
if documents_path
|
@@ -68,23 +79,19 @@ class Device
|
|
68
79
|
cmd = "copy /B " + %!"#{src_file}" "#{dst_path}"!.gsub("/", "\\").encode(Encoding::Windows_31J)
|
69
80
|
capture = `#{cmd}`
|
70
81
|
if $?.exitstatus > 0
|
71
|
-
|
72
|
-
error capture.force_encoding(Encoding::Windows_31J).rstrip
|
73
|
-
exit 1
|
82
|
+
raise capture.force_encoding(Encoding::Windows_31J).rstrip
|
74
83
|
end
|
75
84
|
else
|
76
|
-
|
77
|
-
FileUtils.cp(src_file, dst_path)
|
78
|
-
rescue => e
|
79
|
-
puts
|
80
|
-
error e.message
|
81
|
-
exit 1
|
82
|
-
end
|
85
|
+
FileUtils.cp(src_file, dst_path)
|
83
86
|
end
|
84
87
|
dst_path
|
85
88
|
else
|
86
89
|
nil
|
87
90
|
end
|
91
|
+
rescue Exception => e
|
92
|
+
puts
|
93
|
+
error $@.shift + ": #{e.message} (#{e.class})"
|
94
|
+
exit 1
|
88
95
|
end
|
89
96
|
|
90
97
|
private
|
data/lib/extensions/windows.rb
CHANGED
@@ -47,9 +47,9 @@ rescue LoadError
|
|
47
47
|
begin
|
48
48
|
dlload "kernel32"
|
49
49
|
extern "long GetLogicalDriveStrings(long, void*)"
|
50
|
-
extern "long SetConsoleTextAttribute(long, long)"
|
51
|
-
extern "long GetConsoleScreenBufferInfo(long, void*)"
|
52
|
-
extern "long GetStdHandle(long)"
|
50
|
+
extern "unsigned long SetConsoleTextAttribute(unsigned long, unsigned long)"
|
51
|
+
extern "unsigned long GetConsoleScreenBufferInfo(unsigned long, void*)"
|
52
|
+
extern "unsigned long GetStdHandle(unsigned long)"
|
53
53
|
extern "long GetLastError()"
|
54
54
|
rescue DL::DLError
|
55
55
|
raise InvalidOS, "not Windows"
|
data/lib/inspector.rb
CHANGED
@@ -19,7 +19,7 @@ class Inspector
|
|
19
19
|
|
20
20
|
KLASS_TAG = { ERROR => "エラー", WARNING => "警告", INFO => "INFO" }
|
21
21
|
|
22
|
-
IGNORE_INDENT_CHAR = " (
|
22
|
+
IGNORE_INDENT_CHAR = " ((「『〈《≪【〔―・※"
|
23
23
|
AUTO_INDENT_THRESHOLD_RATIO = 0.6 # 全行のうちこの割合以上字下げされてなければ強制字下げする
|
24
24
|
|
25
25
|
attr_writer :messages, :subtitle
|
data/lib/version.rb
CHANGED
data/narou.rb
CHANGED
@@ -6,23 +6,23 @@
|
|
6
6
|
# Copyright 2013 whiteleaf. All rights reserved.
|
7
7
|
#
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
Encoding.default_external = Encoding::UTF_8
|
9
|
+
$debug = File.exists?(File.join(File.expand_path(File.dirname($0)), "debug"))
|
10
|
+
Encoding.default_external = Encoding::UTF_8
|
12
11
|
|
13
|
-
|
12
|
+
require_relative "lib/globalsetting"
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
display_backtrace = ARGV.delete("--backtrace")
|
15
|
+
display_backtrace ||= $debug
|
16
|
+
$disable_color = ARGV.delete("--no-color")
|
17
|
+
$disable_color ||= GlobalSetting.get["global_setting"]["no-color"]
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
require_relative "lib/logger"
|
20
|
+
require_relative "lib/version"
|
21
|
+
require_relative "lib/commandline"
|
23
22
|
|
24
|
-
|
23
|
+
rescue_level = $debug ? Exception : StandardError
|
25
24
|
|
25
|
+
begin
|
26
26
|
CommandLine.run(ARGV.map { |v| v.dup })
|
27
27
|
rescue rescue_level => e
|
28
28
|
warn $@.shift + ": #{e.message} (#{e.class})"
|
data/preset/DMincho.ttf
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,30 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: narou
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
5
|
-
prerelease:
|
4
|
+
version: 1.2.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- whiteleaf7
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
11
|
+
date: 2013-03-22 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: termcolor
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 1.2.2
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 1.2.2
|
30
27
|
description: 小説家になろうで公開されている小説の管理、及び電子書籍データへの変換を支援します。縦書用に特化されており、横書き用に特化されたWEB小説を違和感なく縦書で読むことが出来るようになります。
|
@@ -54,9 +51,7 @@ files:
|
|
54
51
|
- lib/command/help.rb
|
55
52
|
- lib/command/init.rb
|
56
53
|
- lib/command/inspect.rb
|
57
|
-
- lib/command/interactive.rb
|
58
54
|
- lib/command/list.rb
|
59
|
-
- lib/command/new.rb
|
60
55
|
- lib/command/remove.rb
|
61
56
|
- lib/command/send.rb
|
62
57
|
- lib/command/setting.rb
|
@@ -119,29 +114,36 @@ files:
|
|
119
114
|
- commitversion
|
120
115
|
homepage: http://whiteleaf.hatenablog.com/
|
121
116
|
licenses: []
|
122
|
-
|
123
|
-
|
124
|
-
|
117
|
+
metadata: {}
|
118
|
+
post_install_message: |
|
119
|
+
*******************************************************************************
|
120
|
+
|
121
|
+
narou コマンドのインストール or アップデートが完了しました。
|
122
|
+
詳しい説明は `narou help' コマンドをご覧下さい。
|
123
|
+
|
124
|
+
NOTICE
|
125
|
+
初めてこのアプリケーションを使う場合、小説管理用のフォルダを初期化する必要があります。
|
126
|
+
任意のフォルダで `narou init' を実行して下さい。
|
127
|
+
|
128
|
+
*******************************************************************************
|
125
129
|
rdoc_options: []
|
126
130
|
require_paths:
|
127
131
|
- lib
|
128
132
|
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
133
|
requirements:
|
131
|
-
- -
|
134
|
+
- - '>='
|
132
135
|
- !ruby/object:Gem::Version
|
133
136
|
version: 1.9.3
|
134
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
-
none: false
|
136
138
|
requirements:
|
137
|
-
- -
|
139
|
+
- - '>='
|
138
140
|
- !ruby/object:Gem::Version
|
139
141
|
version: '0'
|
140
142
|
requirements: []
|
141
143
|
rubyforge_project:
|
142
|
-
rubygems_version:
|
144
|
+
rubygems_version: 2.0.0
|
143
145
|
signing_key:
|
144
|
-
specification_version:
|
146
|
+
specification_version: 4
|
145
147
|
summary: Narou.rb ― 小説家になろうダウンローダ&縦書用整形スクリプト
|
146
148
|
test_files:
|
147
149
|
- test/data/test.ini
|
data/lib/command/interactive.rb
DELETED