narou 2.7.2 → 2.8.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ad085db750e9517ea6e321687b914ea18275ea4
4
- data.tar.gz: fdfbe6a80526eab552540244dda1e37e6aa7fc6d
3
+ metadata.gz: e854b0124222d692eae2d73adde3e66308ae13eb
4
+ data.tar.gz: bd9954275c47a6e94052e442b31ec0529cee6787
5
5
  SHA512:
6
- metadata.gz: 084c69ed505c510ea2842beb88ab1b4252be05d8d2db280a8be22d1f3961368489cdfd4c31bef2a07bf88a6afd73973fcb6adc229551b473878648300602315e
7
- data.tar.gz: a401ff433b37e9b7c66d23684eb45e9e028bd3ec24af1ac4685ecfd1dbaf536a1e184661c3a9761d5a608ce1ef522748f7ff30ad66b67ef8b9d351ba63ea2380
6
+ metadata.gz: 8a04e6c4c8560af570c81d06a7a23b02bfdea7437f96bf59a63a2823516d3a155dcafc02c163001d93abb2c523e53a376eb028e3d8eb7c36592f3932d4a14366
7
+ data.tar.gz: 776a124167f7f0714782f31fa766281adc7c5e688e6be6c97373b9b89f6b82fb1bb77b89a62fe954940344af6789652efef37a0d9d1f030d4767ff20ddd32b5f
@@ -2,11 +2,68 @@
2
2
  更新履歴 - ChangeLog
3
3
  ====================
4
4
 
5
+ 2.8.0 : 2015/12/09
6
+ ------------------
7
+ #### 追加機能
8
+ - setting.ini に項目をいくつか追加しました
9
+ + `title_date_format` の拡張書式として $s と $t を追加しました。
10
+ * $s : 2045年くらいまでの残り時間(10分間隔)を4桁の文字列で埋め込めます。
11
+ タイトルの先頭に付加することで端末のタイトルソートで更新順に並び替えたり
12
+ 等に利用出来ます
13
+ * $t : 小説のタイトルそのものを埋め込めます。$t を利用することでタイトルの
14
+ 前後両方に日付等を付与することが可能になります。$t が使用された場合は
15
+ title_date_align は無視されます
16
+ + `enable_add_end_to_title` を追加しました。完結済小説のタイトルに(完結)と
17
+ 表示するかを制御出来ます
18
+ + `cut_old_subtitles` を追加しました。指定した話数分変換の対象外にすることで
19
+ 変換速度を上げたり容量を節約したり出来ます。(カットした分栞が後ろにずれる
20
+ と思うので注意して下さい)
21
+ + `author_comment_style` を追加しました。前書き・後書きの装飾方法を指定出来る
22
+ ようになります
23
+ * css:CSSで装飾。今までの奴です。何も設定しなければこれが使われます
24
+ * simple:シンプルに段落。字下げして文字を小さくしただけなのでデザインが崩れ
25
+ にくいです。CSSで装飾すると不具合がでるKoboやAdobe Digital Editionでは
26
+ こちらの使用をおすすめします
27
+ * plain:装飾しない。本文との間に区切り線をいれただけで、本文と同じ文字で
28
+ 表示します
29
+ * 一括で変更する場合は `narou s default.author_comment_style=simple` 等と
30
+ デフォルト値を設定して下さい
31
+ - ダイジェスト化時の選択肢を自動で選んでくれる
32
+ `download.choices-of-digest-options` という設定を追加しました
33
+ + `narou s download.choices-of-digest-options=4,1` のようにカンマ区切りで
34
+ 選択したい項目を順番に設定して下さい。詳細は `narou s` コマンドを参照。
35
+ WEB UI では「環境設定>詳細」にあります
36
+ - `convert.filename-to-ncode` という設定を追加しました。出力する書籍ファイル名
37
+ を「ドメイン名_Nコード」で固定出来ます
38
+ + `narou s convert.filename-to-ncode=true` で設定出来ます。WEB UI では
39
+ 「環境設定>一般」にあります
40
+ + この機能により、作者名や小説タイトルが変わった際に出力ファイル名まで一緒に
41
+ 変更されてしまい栞が消えるのを防いだり、Kobo端末で不正なファイル名と認識
42
+ されないようにすることが出来ます
43
+ + 注意:最低一度は対象小説を更新しないと、変換してもファイル名は変わりません
44
+
45
+ #### 仕様変更
46
+ - `enable_add_end_to_title` の追加に伴い、タイトルへの完結表示はデフォルトでは
47
+ 行わなくなりました
48
+ - rawデータや本文データを保存する際に長過ぎるファイル名を一定の長さで端折るよう
49
+ になりました
50
+ + この影響で、update 時にエラーが出る場合があります。その場合は再度 update を
51
+ することで以降は正常に更新することが出来ます(その際に新着と表示されますが
52
+ 仕様です)
53
+ - `author_comment_style` の追加に伴い、Koboの前書き・後書きの装飾を特別に切り替
54
+ える処理を削除しました。`narou s default.author_comment_style=simple` で変更
55
+ して下さい
56
+ - 行頭で半角スペースで字下げをしてものを全角スペースで置換するようになりました
57
+
58
+ #### Bug Fix
59
+ - 暁の小説で前書き・後書きがあった場合に正常に取得できなくなっていたのを修正
60
+
61
+
5
62
  2.7.2 : 2015/12/01
6
63
  ------------------
7
64
  #### Bug Fix
8
65
  - ハーメルンの仕様変更に伴い、本文が取得できなくなっていたのを修正
9
- - ハーメルンにおいて前書き・後書きが前話以前のもが使われてしまう場合があるのを
66
+ - ハーメルン、暁において前書き・後書きが前話以前のもが使われてしまう場合があるのを
10
67
  修正
11
68
  - 標準入力に null を渡すとエラーになっていたのを修正 #73
12
69
 
data/README.md CHANGED
@@ -37,91 +37,70 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
37
37
  更新履歴 - ChangeLog
38
38
  --------------------
39
39
 
40
- 2.7.1 : 2015/09/20
40
+ 2.8.0 : 2015/12/09
41
41
  ------------------
42
- #### お知らせ
43
- - 今バージョンから動作対象をRuby2.1.0以上へと引き上げます
44
-
45
42
  #### 追加機能
46
- - 設定プリセット追加
47
- + n9463br 僕と彼女と実弾兵器(アンティーク)
43
+ - setting.ini に項目をいくつか追加しました
44
+ + `title_date_format` の拡張書式として $s と $t を追加しました。
45
+ * $s : 2045年くらいまでの残り時間(10分間隔)を4桁の文字列で埋め込めます。
46
+ タイトルの先頭に付加することで端末のタイトルソートで更新順に並び替えたり
47
+ 等に利用出来ます
48
+ * $t : 小説のタイトルそのものを埋め込めます。$t を利用することでタイトルの
49
+ 前後両方に日付等を付与することが可能になります。$t が使用された場合は
50
+ title_date_align は無視されます
51
+ + `enable_add_end_to_title` を追加しました。完結済小説のタイトルに(完結)と
52
+ 表示するかを制御出来ます
53
+ + `cut_old_subtitles` を追加しました。指定した話数分変換の対象外にすることで
54
+ 変換速度を上げたり容量を節約したり出来ます。(カットした分栞が後ろにずれる
55
+ と思うので注意して下さい)
56
+ + `author_comment_style` を追加しました。前書き・後書きの装飾方法を指定出来る
57
+ ようになります
58
+ * css:CSSで装飾。今までの奴です。何も設定しなければこれが使われます
59
+ * simple:シンプルに段落。字下げして文字を小さくしただけなのでデザインが崩れ
60
+ にくいです。CSSで装飾すると不具合がでるKoboやAdobe Digital Editionでは
61
+ こちらの使用をおすすめします
62
+ * plain:装飾しない。本文との間に区切り線をいれただけで、本文と同じ文字で
63
+ 表示します
64
+ * 一括で変更する場合は `narou s default.author_comment_style=simple` 等と
65
+ デフォルト値を設定して下さい
66
+ - ダイジェスト化時の選択肢を自動で選んでくれる
67
+ `download.choices-of-digest-options` という設定を追加しました
68
+ + `narou s download.choices-of-digest-options=4,1` のようにカンマ区切りで
69
+ 選択したい項目を順番に設定して下さい。詳細は `narou s` コマンドを参照。
70
+ WEB UI では「環境設定>詳細」にあります
71
+ - `convert.filename-to-ncode` という設定を追加しました。出力する書籍ファイル名
72
+ を「ドメイン名_Nコード」で固定出来ます
73
+ + `narou s convert.filename-to-ncode=true` で設定出来ます。WEB UI では
74
+ 「環境設定>一般」にあります
75
+ + この機能により、作者名や小説タイトルが変わった際に出力ファイル名まで一緒に
76
+ 変更されてしまい栞が消えるのを防いだり、Kobo端末で不正なファイル名と認識
77
+ されないようにすることが出来ます
78
+ + 注意:最低一度は対象小説を更新しないと、変換してもファイル名は変わりません
48
79
 
49
- #### WEB UI
50
- - 「Narou.rbについて」にバージョンが最新かどうかチェックする機能を追加しました
51
- - タグカラーのwhiteを調整しました
80
+ #### 仕様変更
81
+ - `enable_add_end_to_title` の追加に伴い、タイトルへの完結表示はデフォルトでは
82
+ 行わなくなりました
83
+ - rawデータや本文データを保存する際に長過ぎるファイル名を一定の長さで端折るよう
84
+ になりました
85
+ + この影響で、update 時にエラーが出る場合があります。その場合は再度 update を
86
+ することで以降は正常に更新することが出来ます(その際に新着と表示されますが
87
+ 仕様です)
88
+ - `author_comment_style` の追加に伴い、Koboの前書き・後書きの装飾を特別に切り替
89
+ える処理を削除しました。`narou s default.author_comment_style=simple` で変更
90
+ して下さい
91
+ - 行頭で半角スペースで字下げをしてものを全角スペースで置換するようになりました
52
92
 
53
93
  #### Bug Fix
54
- - 小説URLが大文字になっている場合にダウンロード、アップデートが出来なかったのを
55
- 修正
56
- - 本文ファイルが削除されていた場合に、変換時にエラーが出ていたのを修正。また、
57
- update 実行時に削除されたファイルがあった場合は再ダウンロードをするようにした
58
- - Windows においてユーザー名にASCII以外(日本語等)が含まれていると変換時に
59
- エラーが起きていた問題を修正
94
+ - 暁の小説で前書き・後書きがあった場合に正常に取得できなくなっていたのを修正
60
95
 
61
96
 
62
- 2.7.0 : 2015/08/23
97
+ 2.7.2 : 2015/12/01
63
98
  ------------------
64
- #### 追加機能
65
- - setting.ini に `enable_double_dash_to_image` を追加しました
66
- + 2倍ダッシュ(――)を画像に差し替えます。細めに調整してあるので、Kindle の
67
- デフォルトフォントの様にダッシュが太い環境でご使用ください(iBooksだと崩れる
68
- ので使わない方が良いです)
69
- + `narou init` が必要です
70
- - `csv` コマンドを実装しました。管理している小説の情報をCSV形式で出力したり、
71
- インポートしたり出来ます。詳細は `narou csv -h` を参照して下さい
72
- - 容量節約のための設定 `economy` を追加しました。変換後の作業ファイルの削除等を
73
- 制御できます
74
- + 設定は `narou s economy=設定値をカンマ区切り` or WEB UI の環境設定>詳細
75
- - cleanup_temp : 変換後に作業ファイルを削除
76
- - send_delete : 送信後に書籍ファイルを削除
77
- - nosave_diff : 差分ファイルを保存しない
78
- - nosave_raw : rawデータを保存しない
79
- - ネタバレ防止設定 `guard-spoiler` を追加しました。ダウンロード時に各話タイトル
80
- を伏せ字で表示します
81
- + 設定は `narou s guard-spoiler=true` or WEB UI の環境設定>詳細
82
- - 処理の中断関係を強化しました
83
- + update 中に中断した場合は以降の更新は全てキャンセルされるようになります
84
- + 変換中に処理を中断した場合、次回の update コマンド実行時に再変換されます
85
-
86
- #### WEB UI
87
- - タグの色を変更出来るようにしました
88
- - 「処理の中断」ボタンをコンソール右上に追加しました。現在処理しているものも
89
- 含めて、全てのキューを破棄します
90
- - 「個別>差分を表示」で表示されるダイアログに「差分を消去」ボタンを追加しました
91
- - リンクのドラッグ&ドロップに対応しました。Downloadボタンを押すか「ツール>D&D
92
- ウィンドウを開く」を実行して下さい
93
- + 文章内リンク及びMacとWindowsのショートカットファイル(複数可)に対応
94
- + IEにおいて、ドメイン間でリンクをD&Dするためには設定が必要です。
95
- http://whiteleaf.hatenablog.com/entry/ie_dnd_setting を参照して下さい
96
- - 「ツール>CSV形式でリストをダウンロード」を追加しました
97
- - 「ツール>CSVファイルからインポート」を追加しました
98
- - 新しいブックマークレット「DLボタンを設置」を追加しました。WEB UIのヘルプから
99
- 取得できます
100
- - 選択モードにハイブリッド選択モードを追加しました。クリックで選択、ドラッグで
101
- 範囲選択が出来ます
102
- - hotentry が有効な場合に Send ボタンに「hotentry を送信」を追加するようにしました
103
- - ブックマークレットで表示されるウィンドウにキューアイコンを表示するように変更
104
- - fix: FirefoxとIEで小説リスト上のタグ検索の解除ボタンを押した場合、ツールチップが
105
- 消えない場合があったのを修正
106
- - fix: IEでメニューのタグ一覧が自動で更新されていなかったのを修正
107
- - fix: メニューが隠れた際にメニュー部分の背景色が消えていたのを修正
108
- - fix: 差分表示で変更後の行が太字になっていないのを修正
109
- - fix: リストが自動更新された際に範囲選択モードのままボタンが押せなかったのを修正
110
-
111
- #### 仕様変更
112
- - `tag` コマンドで対象小説を指定しなくてもタグの色を変更出来るようにしました
113
- - 変換設定の `enable_auto_join_line` が有効な場合で、行末読点の次の行頭に全角
114
- スペースが2個以上ある場合は連結しないようにしました
115
- - converter.rb 内から処理中の小説に関するデータを取得できるようにしました
116
- + @subtitles: その小説の処理対象の情報(Hash)が入っている配列。hotentry 処理中
117
- の場合は新規部分のみしか入っていない
118
- + @current_index: 現在何話目を処理しているか(0から@subtitles.size-1まで)
119
-
120
- #### BugFix
121
- - Windowsにおいて日本語を含むフォルダで narou init しようとするとエラーが出て
122
- いたのを修正
123
- - `update --gl` コマンドでエラーが起きる場合があったのを修正
124
-
99
+ #### Bug Fix
100
+ - ハーメルンの仕様変更に伴い、本文が取得できなくなっていたのを修正
101
+ - ハーメルン、暁において前書き・後書きが前話以前のもが使われてしまう場合があるのを
102
+ 修正
103
+ - 標準入力に null を渡すとエラーになっていたのを修正 #73
125
104
 
126
105
 
127
106
  ----
@@ -400,7 +400,11 @@ module Command
400
400
  tab: :general
401
401
  },
402
402
  "convert.copy-to-grouping" => {
403
- type: :boolean, help: "copy-toで指定したフォルダの中で更にdevice毎にフォルダを振り分ける",
403
+ type: :boolean, help: "copy-toで指定したフォルダの中で更に端末毎にフォルダを振り分ける",
404
+ tab: :general
405
+ },
406
+ "convert.filename-to-ncode" => {
407
+ type: :boolean, help: "書籍ファイル名をNコードで出力する(ドメイン_Nコードの形式)",
404
408
  tab: :general
405
409
  },
406
410
  "download.interval" => {
@@ -419,6 +423,14 @@ module Command
419
423
  " ※注意:小説を大量に同一フォルダに保存するとパフォーマンスが劣化する回避策",
420
424
  tab: :detail
421
425
  },
426
+ "download.choices-of-digest-options" => {
427
+ type: :string,
428
+ help: "ダイジェスト化選択肢が出た場合に、自動で項目を選択する。" \
429
+ "カンマ区切りで選択したい順番に数字で記入する。" \
430
+ "最終的に更新かキャンセルが選択されなかった場合はキャンセル扱いになる\n" \
431
+ "#{Downloader.choices_to_string(width: 27)}",
432
+ tab: :detail
433
+ },
422
434
  "send.without-freeze" => {
423
435
  type: :boolean, help: "一括送信時に凍結された小説は対象外にする",
424
436
  tab: :general
@@ -334,6 +334,7 @@ class ConverterBase
334
334
  convert_tatechuyoko(data)
335
335
  convert_novel_rule(data)
336
336
  convert_arrow(data)
337
+ convert_head_half_spaces(data)
337
338
  end
338
339
 
339
340
  #
@@ -417,6 +418,16 @@ class ConverterBase
417
418
  end
418
419
  end
419
420
 
421
+ #
422
+ # 間違えて行頭字下げに半角スペースを使ってるっぽいのを全角スペースにする
423
+ #
424
+ def convert_head_half_spaces(data)
425
+ data.gsub!(/^ +/) do |match|
426
+ # 半角スペースの数に応じて全角スペースの数も調整してみる
427
+ " " * (match.count(" ") / 2.0).ceil
428
+ end
429
+ end
430
+
420
431
  #
421
432
  # 先に外字注記にしてしまうと border_symbol? 等で困るので、あとで外字注記化出来るようにする
422
433
  #
@@ -456,6 +456,23 @@ class Downloader
456
456
  @setting.clear
457
457
  end
458
458
 
459
+ CHOICES = {
460
+ "1" => "このまま更新する",
461
+ "2" => "更新をキャンセル",
462
+ "3" => "更新をキャンセルして小説を凍結する",
463
+ "4" => "バックアップを作成する",
464
+ "5" => "最新のあらすじを表示する",
465
+ "6" => "小説ページをブラウザで開く",
466
+ "7" => "保存フォルダを開く",
467
+ default: "2"
468
+ }.freeze
469
+
470
+ def self.choices_to_string(width: 0)
471
+ CHOICES.dup.tap { |h| h.delete(:default) }.map { |key, summary|
472
+ "#{key.rjust(width)}: #{summary}"
473
+ }.join("\n")
474
+ end
475
+
459
476
  #
460
477
  # ダイジェスト化に関する処理
461
478
  #
@@ -475,18 +492,21 @@ class Downloader
475
492
  更新後の話数: #{latest_subtitles_count}
476
493
 
477
494
  EOS
478
- choices = {
479
- "1" => "このまま更新する",
480
- "2" => "更新をキャンセル",
481
- "3" => "更新をキャンセルして小説を凍結する",
482
- "4" => "バックアップを作成する",
483
- "5" => "最新のあらすじを表示する",
484
- "6" => "小説ページをブラウザで開く",
485
- "7" => "保存フォルダを開く",
486
- default: "2"
487
- }
495
+
496
+ auto_choices = Inventory.load("local_setting")["download.choices-of-digest-options"]
497
+ auto_choices &&= auto_choices.split(",")
498
+
488
499
  loop do
489
- choice = Narou::Input.choose(title, message, choices)
500
+ if auto_choices
501
+ # 自動入力
502
+ choice = auto_choices.shift || CHOICES[:default]
503
+ puts title
504
+ puts message
505
+ puts self.class.choices_to_string
506
+ puts "> #{choice}"
507
+ else
508
+ choice = Narou::Input.choose(title, message, CHOICES)
509
+ end
490
510
  case choice
491
511
  when "1"
492
512
  return false
@@ -593,6 +613,8 @@ class Downloader
593
613
  "general_firstup" => info["general_firstup"],
594
614
  "novelupdated_at" => get_novelupdated_at,
595
615
  "general_lastup" => get_general_lastup,
616
+ "ncode" => @setting["ncode"],
617
+ "domain" => @setting["domain"],
596
618
  }
597
619
  if @@database[@id]
598
620
  @@database[@id].merge!(data)
@@ -868,6 +890,10 @@ class Downloader
868
890
  download_time
869
891
  end
870
892
 
893
+ def title_to_filename(title)
894
+ Helper.replace_filename_special_chars(Helper.truncate_path(title))
895
+ end
896
+
871
897
  #
872
898
  # 各話の情報を取得
873
899
  #
@@ -897,7 +923,7 @@ class Downloader
897
923
  "href" => @setting["href"],
898
924
  "chapter" => @setting["chapter"],
899
925
  "subtitle" => @setting["subtitle"].gsub("\n", ""),
900
- "file_subtitle" => Helper.replace_filename_special_chars(@setting["subtitle"]),
926
+ "file_subtitle" => title_to_filename(@setting["subtitle"]),
901
927
  "subdate" => subdate,
902
928
  "subupdate" => @setting["subupdate"]
903
929
  }
@@ -914,7 +940,7 @@ class Downloader
914
940
  "href" => @setting.replace_group_values("href", "index" => "1"),
915
941
  "chapter" => "",
916
942
  "subtitle" => @setting["title"],
917
- "file_subtitle" => Helper.replace_filename_special_chars(@setting["title"]),
943
+ "file_subtitle" => title_to_filename(@setting["title"]),
918
944
  "subdate" => info["general_firstup"],
919
945
  "subupdate" => info["novelupdated_at"]
920
946
  }
@@ -14,6 +14,7 @@ module Helper
14
14
  module_function
15
15
 
16
16
  HOST_OS = RbConfig::CONFIG["host_os"]
17
+ FILENAME_LENGTH_LIMIT = 50
17
18
 
18
19
  def os_windows?
19
20
  @@os_is_windows ||= HOST_OS =~ /mswin(?!ce)|mingw|bccwin/i
@@ -306,6 +307,23 @@ module Helper
306
307
  result
307
308
  end
308
309
 
310
+ #
311
+ # 長過ぎるファイルパスを詰める
312
+ # ファイル名部分のみを詰める。拡張子は維持する
313
+ #
314
+ def truncate_path(path, limit = FILENAME_LENGTH_LIMIT)
315
+ dirname = File.dirname(path)
316
+ extname = File.extname(path)
317
+ basename = File.basename(path, extname)
318
+ if basename.length > limit
319
+ basename = basename[0...limit]
320
+ dirname = nil if dirname == "."
321
+ [dirname, "#{basename}#{extname}"].compact.join("/")
322
+ else
323
+ path
324
+ end
325
+ end
326
+
309
327
  #
310
328
  # 外部コマンド実行中の待機ループの処理を書けるクラス
311
329
  #
@@ -184,10 +184,19 @@ module Narou
184
184
  memoize :get_aozoraepub3_path
185
185
 
186
186
  def create_novel_filename(novel_data, ext = "")
187
- author, title = %w(author title).map { |k|
188
- Helper.replace_filename_special_chars(novel_data[k], true)
189
- }
190
- "[#{author}] #{title}#{ext}"
187
+ filename_to_ncode = Inventory.load("local_setting")["convert.filename-to-ncode"]
188
+ if filename_to_ncode && novel_data["ncode"]
189
+ serialized_domain = novel_data["domain"].to_s.gsub(".", "_")
190
+ %!#{serialized_domain}_#{novel_data["ncode"]}#{ext}!
191
+ else
192
+ if filename_to_ncode
193
+ puts "<yellow>ファイル名をNコードにするには一度以上小説を更新して下さい</yellow>".termcolor
194
+ end
195
+ author, title = %w(author title).map { |k|
196
+ Helper.replace_filename_special_chars(novel_data[k], true)
197
+ }
198
+ "[#{author}] #{title}#{ext}"
199
+ end
191
200
  end
192
201
 
193
202
  def get_mobi_path(target)
@@ -343,6 +343,7 @@ class NovelConverter
343
343
  @use_dakuten_font = false
344
344
  @converter = create_converter
345
345
  @converter.output_text_dir = output_text_dir
346
+ @data = @novel_id ? Database.instance.get_data("id", @novel_id) : {}
346
347
  end
347
348
 
348
349
  #
@@ -408,28 +409,62 @@ class NovelConverter
408
409
  cover_chuki = create_cover_chuki
409
410
  device = Narou.get_device
410
411
  setting = @setting
411
- processed_title = toc["title"]
412
- data = Database.instance.get_data("id", @novel_id)
413
- # タイトルに新着更新日を付加する
412
+ processed_title = decorate_title(toc["title"])
413
+ tempalte_name = (device && device.ibunko? ? NOVEL_TEXT_TEMPLATE_NAME_FOR_IBUNKO : NOVEL_TEXT_TEMPLATE_NAME)
414
+ Template.get(tempalte_name, binding, 1.1)
415
+ end
416
+
417
+ #
418
+ # 2045年くらいまでの残り時間を10分単位の36進数で取得する
419
+ # hyff のような文字列が取得可能
420
+ #
421
+ def calc_reverse_short_time(time)
422
+ ((2396736000 - time.to_i) / (10 * 60)).to_s(36).rjust(4, "0")
423
+ end
424
+
425
+ #
426
+ # タイトルに日付を付与する。
427
+ # 日付の種類は title_date_target で指定する
428
+ #
429
+ # strftime の書式の他に拡張書式として $s, $t をサポートする
430
+ # $s: 2045年くらいまでの残り時間を10分単位の36進数(4桁)
431
+ # $t: タイトル自身。書式の中で自由な位置にタイトルを埋め込める
432
+ #
433
+ # ※ $t を使用した場合、title_date_align を無視する
434
+ #
435
+ def add_date_to_title(title)
436
+ result = title
414
437
  if @setting.enable_add_date_to_title
415
- new_arrivals_date = data[@setting.title_date_target] || Time.now
416
- date_str = new_arrivals_date.strftime(@setting.title_date_format)
417
- if @setting.title_date_align == "left"
418
- processed_title = date_str + processed_title
419
- else # right
420
- processed_title += date_str
438
+ new_arrivals_date = @data[@setting.title_date_target] || Time.now
439
+ reverse_time = calc_reverse_short_time(new_arrivals_date)
440
+ date_str = new_arrivals_date.strftime(@setting.title_date_format).gsub("$s", reverse_time)
441
+ if date_str.include?("$t")
442
+ # $t で任意の位置にタイトルを埋め込むために title_date_align は無視する
443
+ result = date_str.gsub("$t", title)
444
+ else
445
+ if @setting.title_date_align == "left"
446
+ result = date_str + result
447
+ else # right
448
+ result = title + date_str
449
+ end
421
450
  end
422
451
  end
452
+ result
453
+ end
454
+
455
+ def decorate_title(title)
456
+ processed_title = add_date_to_title(title)
423
457
  # タイトルに完結したかどうかを付加する
424
- tags = data["tags"] || []
425
- if tags.include?("end")
426
- processed_title += " (完結)"
458
+ if @setting.enable_add_end_to_title
459
+ tags = @data["tags"] || []
460
+ if tags.include?("end")
461
+ processed_title += " (完結)"
462
+ end
427
463
  end
428
464
  # タイトルがルビ化されてしまうのを抑制
429
465
  processed_title = processed_title.gsub("《", "※[#始め二重山括弧]")
430
466
  .gsub("》", "※[#終わり二重山括弧]")
431
- tempalte_name = (device && device.ibunko? ? NOVEL_TEXT_TEMPLATE_NAME_FOR_IBUNKO : NOVEL_TEXT_TEMPLATE_NAME)
432
- Template.get(tempalte_name, binding, 1.1)
467
+ processed_title
433
468
  end
434
469
 
435
470
  #
@@ -482,8 +517,13 @@ class NovelConverter
482
517
  else
483
518
  if is_text_file_mode
484
519
  info = get_title_and_author_by_text(converted_text)
520
+ info["ncode"] = info["title"]
521
+ info["domain"] = "text"
485
522
  else
486
- info = { "author" => @novel_author, "title" => @novel_title }
523
+ info = {
524
+ "author" => @novel_author, "title" => @novel_title,
525
+ "ncode" => @data["ncode"], "domain" => @data["domain"]
526
+ }
487
527
  end
488
528
  filename = Narou.create_novel_filename(info)
489
529
  output_path = File.join(@setting.archive_path, filename)
@@ -520,7 +560,9 @@ class NovelConverter
520
560
  #
521
561
  def convert_main_for_novel(subtitles = nil, is_hotentry = false)
522
562
  toc = Downloader.get_toc_data(@setting.archive_path)
523
- subtitles ||= toc["subtitles"]
563
+ unless subtitles
564
+ subtitles = cut_subtitles(toc["subtitles"])
565
+ end
524
566
  @converter.subtitles = subtitles
525
567
  toc["story"] = @converter.convert(toc["story"], "story")
526
568
  html = HTML.new
@@ -535,6 +577,20 @@ class NovelConverter
535
577
  converted_text
536
578
  end
537
579
 
580
+ def cut_subtitles(subtitles)
581
+ case cut_size = @setting.cut_old_subtitles
582
+ when 0
583
+ result = subtitles
584
+ when 1...subtitles.size
585
+ puts "#{cut_size}話分カットして変換します"
586
+ result = subtitles[cut_size..-1]
587
+ else
588
+ puts "最新話のみ変換します"
589
+ result = [subtitles[-1]]
590
+ end
591
+ result
592
+ end
593
+
538
594
  #
539
595
  # subtitle info から変換処理をする
540
596
  #
@@ -543,6 +599,7 @@ class NovelConverter
543
599
  section_save_dir = Downloader.get_novel_section_save_dir(@setting.archive_path)
544
600
 
545
601
  trigger(:"convert_main.init", subtitles)
602
+
546
603
  subtitles.each_with_index do |subinfo, i|
547
604
  trigger(:"convert_main.loop", i)
548
605
  @converter.current_index = i
@@ -376,13 +376,13 @@ class NovelSetting
376
376
  name: "title_date_format",
377
377
  type: :string,
378
378
  value: "(%-m/%-d)",
379
- help: "enable_add_date_to_title で付与する日付のフォーマット。書式は http://bit.ly/1m5e3w7 を参照"
379
+ help: "enable_add_date_to_title で付与する日付のフォーマット。書式は http://bit.ly/1m5e3w7 を参照。Narou.rb専用の書式として $s (2045年までの残り時間(10分単位の4桁の36進数))、$t (小説のタイトル) も使用可能"
380
380
  },
381
381
  {
382
382
  name: "title_date_align",
383
383
  type: :select,
384
384
  value: "right",
385
- help: "enable_add_date_to_title で付与する日付の位置。left(タイトルの前) か right(タイトルの後)",
385
+ help: "enable_add_date_to_title が有効な場合に付与される日付の位置。left(タイトルの前) か right(タイトルの後)。title_date_format で $t を使用した場合この設定は無視される",
386
386
  select_keys: %w(left right),
387
387
  select_summaries: %w(タイトルの前 タイトルの後)
388
388
  },
@@ -436,6 +436,27 @@ class NovelSetting
436
436
  value: false,
437
437
  help: "2倍ダッシュ(――)を画像に差し替える。Kindleのデフォルトフォントみたいにダッシュが太くて気になる人用"
438
438
  },
439
+ {
440
+ name: "enable_add_end_to_title",
441
+ type: :boolean,
442
+ value: false,
443
+ help: "完結済み小説のタイトルに(完結)と表示する"
444
+ },
445
+ {
446
+ name: "cut_old_subtitles",
447
+ type: :integer,
448
+ value: 0,
449
+ help: "1話目から指定した話数分、変換の対象外にする。" \
450
+ "全話数分以上の数値を指定した場合、最新話だけ変換する"
451
+ },
452
+ {
453
+ name: "author_comment_style",
454
+ type: :select,
455
+ value: "css",
456
+ help: "作者コメント(前書き・後書き)の装飾方法を指定する。KoboやAdobe Digital Editionでは「CSSで装飾」にするとデザインが崩れるのでそれ以外を推奨。css:CSSで装飾、simple:シンプルに段落、plain:装飾しない",
457
+ select_keys: %w(css simple plain),
458
+ select_summaries: %w(CSSで装飾 シンプルに段落 装飾しない)
459
+ },
439
460
  ]
440
461
 
441
462
  ORIGINAL_SETTINGS_KEY_INDEXES = {}.tap { |hash|
@@ -3,5 +3,4 @@
3
3
  # Copyright 2013 whiteleaf. All rights reserved.
4
4
  #
5
5
 
6
- Version = "2.7.2"
7
-
6
+ Version = "2.8.0"
@@ -683,7 +683,7 @@ class Narou::AppServer < Sinatra::Base
683
683
  end
684
684
 
685
685
  get "/api/version/latest.json" do
686
- open("http://rubygems.org/api/v1/versions/narou/latest.json?#{Time.now.to_i}") do |fp|
686
+ open("https://rubygems.org/api/v1/versions/narou/latest.json?#{Time.now.to_i}") do |fp|
687
687
  fp.read
688
688
  end
689
689
  end
@@ -79,7 +79,7 @@
79
79
  更新履歴を確認する。
80
80
  .error
81
81
  %span.text-danger
82
- バージョンの取得に失敗しました。
82
+ 最新バージョンの取得に失敗しました。
83
83
  .well.well-sm(style="font-size:80%; margin-top: 10px")
84
84
  #{@ruby_version}<br>
85
85
  #{env["HTTP_USER_AGENT"]}
@@ -32,26 +32,61 @@ Gem::Specification.new do |gem|
32
32
  install_message = <<-EOS
33
33
  #{"*" * 79}
34
34
 
35
- 2.7.1 : 2015/09/20
35
+ 2.8.0 : 2015/12/09
36
36
  ------------------
37
- #### お知らせ
38
- - 今バージョンから動作対象をRuby2.1.0以上へと引き上げます
39
-
40
37
  #### 追加機能
41
- - 設定プリセット追加
42
- + n9463br 僕と彼女と実弾兵器(アンティーク)
38
+ - setting.ini に項目をいくつか追加しました
39
+ + `title_date_format` の拡張書式として $s と $t を追加しました。
40
+ * $s : 2045年くらいまでの残り時間(10分間隔)を4桁の文字列で埋め込めます。
41
+ タイトルの先頭に付加することで端末のタイトルソートで更新順に並び替えたり
42
+ 等に利用出来ます
43
+ * $t : 小説のタイトルそのものを埋め込めます。$t を利用することでタイトルの
44
+ 前後両方に日付等を付与することが可能になります。$t が使用された場合は
45
+ title_date_align は無視されます
46
+ + `enable_add_end_to_title` を追加しました。完結済小説のタイトルに(完結)と
47
+ 表示するかを制御出来ます
48
+ + `cut_old_subtitles` を追加しました。指定した話数分変換の対象外にすることで
49
+ 変換速度を上げたり容量を節約したり出来ます。(カットした分栞が後ろにずれる
50
+ と思うので注意して下さい)
51
+ + `author_comment_style` を追加しました。前書き・後書きの装飾方法を指定出来る
52
+ ようになります
53
+ * css:CSSで装飾。今までの奴です。何も設定しなければこれが使われます
54
+ * simple:シンプルに段落。字下げして文字を小さくしただけなのでデザインが崩れ
55
+ にくいです。CSSで装飾すると不具合がでるKoboやAdobe Digital Editionでは
56
+ こちらの使用をおすすめします
57
+ * plain:装飾しない。本文との間に区切り線をいれただけで、本文と同じ文字で
58
+ 表示します
59
+ * 一括で変更する場合は `narou s default.author_comment_style=simple` 等と
60
+ デフォルト値を設定して下さい
61
+ - ダイジェスト化時の選択肢を自動で選んでくれる
62
+ `download.choices-of-digest-options` という設定を追加しました
63
+ + `narou s download.choices-of-digest-options=4,1` のようにカンマ区切りで
64
+ 選択したい項目を順番に設定して下さい。詳細は `narou s` コマンドを参照。
65
+ WEB UI では「環境設定>詳細」にあります
66
+ - `convert.filename-to-ncode` という設定を追加しました。出力する書籍ファイル名
67
+ を「ドメイン名_Nコード」で固定出来ます
68
+ + `narou s convert.filename-to-ncode=true` で設定出来ます。WEB UI では
69
+ 「環境設定>一般」にあります
70
+ + この機能により、作者名や小説タイトルが変わった際に出力ファイル名まで一緒に
71
+ 変更されてしまい栞が消えるのを防いだり、Kobo端末で不正なファイル名と認識
72
+ されないようにすることが出来ます
73
+ + 注意:最低一度は対象小説を更新しないと、変換してもファイル名は変わりません
43
74
 
44
- #### WEB UI
45
- - 「Narou.rbについて」にバージョンが最新かどうかチェックする機能を追加しました
46
- - タグカラーのwhiteを調整しました
75
+ #### 仕様変更
76
+ - `enable_add_end_to_title` の追加に伴い、タイトルへの完結表示はデフォルトでは
77
+ 行わなくなりました
78
+ - rawデータや本文データを保存する際に長過ぎるファイル名を一定の長さで端折るよう
79
+ になりました
80
+ + この影響で、update 時にエラーが出る場合があります。その場合は再度 update を
81
+ することで以降は正常に更新することが出来ます(その際に新着と表示されますが
82
+ 仕様です)
83
+ - `author_comment_style` の追加に伴い、Koboの前書き・後書きの装飾を特別に切り替
84
+ える処理を削除しました。`narou s default.author_comment_style=simple` で変更
85
+ して下さい
86
+ - 行頭で半角スペースで字下げをしてものを全角スペースで置換するようになりました
47
87
 
48
88
  #### Bug Fix
49
- - 小説URLが大文字になっている場合にダウンロード、アップデートが出来なかったのを
50
- 修正
51
- - 本文ファイルが削除されていた場合に、変換時にエラーが出ていたのを修正。また、
52
- update 実行時に削除されたファイルがあった場合は再ダウンロードをするようにした
53
- - Windows においてユーザー名にASCII以外(日本語等)が含まれていると変換時に
54
- エラーが起きていた問題を修正
89
+ - 暁の小説で前書き・後書きがあった場合に正常に取得できなくなっていたのを修正
55
90
 
56
91
  #{"*" * 79}
57
92
  EOS
@@ -17,6 +17,8 @@ describe "convert" do
17
17
  test_text_dir = File.join(File.dirname(__FILE__), "data/convert_test")
18
18
  @pwd = Dir.pwd
19
19
  Dir.chdir(test_text_dir)
20
+
21
+ Inventory.load("local_setting")["convert.filename-to-ncode"] = false
20
22
  end
21
23
 
22
24
  after :all do
@@ -20,3 +20,9 @@ whiteleaf
20
20
 
21
21
  ・英文のインデント
22
22
   Deus ex machina
23
+
24
+ ・半角スペースを全角スペースで字下げ
25
+  半角スペースで字下げしたつもりの行
26
+  半角スペースで字下げしたつもりの行
27
+   半角スペース四個分は全角二個
28
+    奇数の場合は二で割って切り上
@@ -23,3 +23,10 @@ whiteleaf
23
23
 
24
24
  ・英文のインデント
25
25
  Deus ex machina
26
+
27
+
28
+ ・半角スペースを全角スペースで字下げ
29
+ 半角スペースで字下げしたつもりの行
30
+ 半角スペースで字下げしたつもりの行
31
+ 半角スペース4個分は全角2個
32
+ 奇数の場合は2で割って切り上
@@ -31,14 +31,20 @@
31
31
  [#3字下げ][#中見出し]<%= section["subtitle"].rstrip %>[#中見出し終わり]
32
32
  <% if section["element"]["introduction"] != "" -%>
33
33
  <% introduction, illust_chuki_array = Helper.extract_illust_chuki(section["element"]["introduction"]) -%>
34
- <% if device && device.kobo? -%>
35
- <%# koboだと前書き・後書き注記がうまくレイアウト出来ないため %>
34
+ <% if setting.author_comment_style == "simple" -%>
36
35
 
37
36
  [#ここから8字下げ]
38
37
  [#ここから2段階小さな文字]
39
38
  <%= introduction %>
40
39
  [#ここで小さな文字終わり]
41
40
  [#ここで字下げ終わり]
41
+ <% elsif setting.author_comment_style == "plain" -%>
42
+
43
+
44
+ <%= introduction %>
45
+
46
+ [#区切り線]
47
+
42
48
  <% else -%>
43
49
  [#ここから前書き]
44
50
  <%= introduction %>
@@ -53,13 +59,18 @@
53
59
  <%= section["element"]["body"] %>
54
60
  <% if section["element"]["postscript"] != "" -%>
55
61
  <% postscript, illust_chuki_array = Helper.extract_illust_chuki(section["element"]["postscript"]) -%>
56
- <% if device && device.kobo? -%>
62
+ <% if setting.author_comment_style == "simple" -%>
57
63
 
58
64
  [#ここから8字下げ]
59
65
  [#ここから2段階小さな文字]
60
66
  <%= postscript %>
61
67
  [#ここで小さな文字終わり]
62
68
  [#ここで字下げ終わり]
69
+ <% elsif setting.author_comment_style == "plain" -%>
70
+
71
+ [#区切り線]
72
+
73
+ <%= postscript %>
63
74
  <% else -%>
64
75
  [#ここから後書き]
65
76
  <%= postscript %>
@@ -32,7 +32,7 @@ error_message: この小説は作者の諸事情により非公開にしてい
32
32
  # ------------------------------------------------------------
33
33
  # 本文取得設定
34
34
  body_pattern: |-
35
- </h2>(?:<div> </div><div><b>前書き</b></div><div class="body-novel">(?<introduction>.+?) </div><hr width="100%"><div> </div>)?<div class="body-novel">(?<body>.+?) </div>(?:<div> </div><hr width="100%"><div> </div><div><b>後書き</b></div><div class="body-novel">(?<postscript>.+?) </div>)?
35
+ </h2>(?:<div>&nbsp;</div><div><b>前書き</b></div><div class="body-novel">(?<introduction>.+?)&nbsp;</div><hr width="100%"><div>&nbsp;</div>)?<div class="body-novel">(?<body>.+?)&nbsp;</div>(?:<div>&nbsp;</div><hr width="100%"><div>&nbsp;</div><div><b>後書き</b></div><div class="body-novel">(?<postscript>.+?)&nbsp;</div>)?
36
36
 
37
37
  introduction_pattern: null
38
38
  postscript_pattern: null
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: narou
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.2
4
+ version: 2.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - whiteleaf7
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-01 00:00:00.000000000 Z
11
+ date: 2015-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: termcolorlight
@@ -509,26 +509,61 @@ metadata: {}
509
509
  post_install_message: |
510
510
  *******************************************************************************
511
511
 
512
- 2.7.1 : 2015/09/20
512
+ 2.8.0 : 2015/12/09
513
513
  ------------------
514
- #### お知らせ
515
- - 今バージョンから動作対象をRuby2.1.0以上へと引き上げます
516
-
517
514
  #### 追加機能
518
- - 設定プリセット追加
519
- + n9463br 僕と彼女と実弾兵器(アンティーク)
515
+ - setting.ini に項目をいくつか追加しました
516
+ + `title_date_format` の拡張書式として $s と $t を追加しました。
517
+ * $s : 2045年くらいまでの残り時間(10分間隔)を4桁の文字列で埋め込めます。
518
+ タイトルの先頭に付加することで端末のタイトルソートで更新順に並び替えたり
519
+ 等に利用出来ます
520
+ * $t : 小説のタイトルそのものを埋め込めます。$t を利用することでタイトルの
521
+ 前後両方に日付等を付与することが可能になります。$t が使用された場合は
522
+ title_date_align は無視されます
523
+ + `enable_add_end_to_title` を追加しました。完結済小説のタイトルに(完結)と
524
+ 表示するかを制御出来ます
525
+ + `cut_old_subtitles` を追加しました。指定した話数分変換の対象外にすることで
526
+ 変換速度を上げたり容量を節約したり出来ます。(カットした分栞が後ろにずれる
527
+ と思うので注意して下さい)
528
+ + `author_comment_style` を追加しました。前書き・後書きの装飾方法を指定出来る
529
+ ようになります
530
+ * css:CSSで装飾。今までの奴です。何も設定しなければこれが使われます
531
+ * simple:シンプルに段落。字下げして文字を小さくしただけなのでデザインが崩れ
532
+ にくいです。CSSで装飾すると不具合がでるKoboやAdobe Digital Editionでは
533
+ こちらの使用をおすすめします
534
+ * plain:装飾しない。本文との間に区切り線をいれただけで、本文と同じ文字で
535
+ 表示します
536
+ * 一括で変更する場合は `narou s default.author_comment_style=simple` 等と
537
+ デフォルト値を設定して下さい
538
+ - ダイジェスト化時の選択肢を自動で選んでくれる
539
+ `download.choices-of-digest-options` という設定を追加しました
540
+ + `narou s download.choices-of-digest-options=4,1` のようにカンマ区切りで
541
+ 選択したい項目を順番に設定して下さい。詳細は `narou s` コマンドを参照。
542
+ WEB UI では「環境設定>詳細」にあります
543
+ - `convert.filename-to-ncode` という設定を追加しました。出力する書籍ファイル名
544
+ を「ドメイン名_Nコード」で固定出来ます
545
+ + `narou s convert.filename-to-ncode=true` で設定出来ます。WEB UI では
546
+ 「環境設定>一般」にあります
547
+ + この機能により、作者名や小説タイトルが変わった際に出力ファイル名まで一緒に
548
+ 変更されてしまい栞が消えるのを防いだり、Kobo端末で不正なファイル名と認識
549
+ されないようにすることが出来ます
550
+ + 注意:最低一度は対象小説を更新しないと、変換してもファイル名は変わりません
520
551
 
521
- #### WEB UI
522
- - 「Narou.rbについて」にバージョンが最新かどうかチェックする機能を追加しました
523
- - タグカラーのwhiteを調整しました
552
+ #### 仕様変更
553
+ - `enable_add_end_to_title` の追加に伴い、タイトルへの完結表示はデフォルトでは
554
+ 行わなくなりました
555
+ - rawデータや本文データを保存する際に長過ぎるファイル名を一定の長さで端折るよう
556
+ になりました
557
+ + この影響で、update 時にエラーが出る場合があります。その場合は再度 update を
558
+ することで以降は正常に更新することが出来ます(その際に新着と表示されますが
559
+ 仕様です)
560
+ - `author_comment_style` の追加に伴い、Koboの前書き・後書きの装飾を特別に切り替
561
+ える処理を削除しました。`narou s default.author_comment_style=simple` で変更
562
+ して下さい
563
+ - 行頭で半角スペースで字下げをしてものを全角スペースで置換するようになりました
524
564
 
525
565
  #### Bug Fix
526
- - 小説URLが大文字になっている場合にダウンロード、アップデートが出来なかったのを
527
- 修正
528
- - 本文ファイルが削除されていた場合に、変換時にエラーが出ていたのを修正。また、
529
- update 実行時に削除されたファイルがあった場合は再ダウンロードをするようにした
530
- - Windows においてユーザー名にASCII以外(日本語等)が含まれていると変換時に
531
- エラーが起きていた問題を修正
566
+ - 暁の小説で前書き・後書きがあった場合に正常に取得できなくなっていたのを修正
532
567
 
533
568
  *******************************************************************************
534
569
  rdoc_options: []