narou 1.5.11 → 1.6.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.

Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/ChangeLog.md +619 -432
  4. data/Gemfile +9 -0
  5. data/README.md +101 -76
  6. data/lib/color.rb +62 -22
  7. data/lib/command.rb +21 -19
  8. data/lib/command/alias.rb +9 -9
  9. data/lib/command/backup.rb +11 -4
  10. data/lib/command/browser.rb +8 -7
  11. data/lib/command/convert.rb +25 -77
  12. data/lib/command/diff.rb +67 -36
  13. data/lib/command/download.rb +5 -4
  14. data/lib/command/flag.rb +32 -6
  15. data/lib/command/folder.rb +7 -5
  16. data/lib/command/freeze.rb +21 -11
  17. data/lib/command/help.rb +29 -17
  18. data/lib/command/init.rb +7 -7
  19. data/lib/command/inspect.rb +6 -5
  20. data/lib/command/list.rb +106 -25
  21. data/lib/command/mail.rb +6 -7
  22. data/lib/command/remove.rb +9 -7
  23. data/lib/command/send.rb +6 -5
  24. data/lib/command/setting.rb +51 -16
  25. data/lib/command/tag.rb +179 -0
  26. data/lib/command/update.rb +9 -8
  27. data/lib/command/version.rb +4 -4
  28. data/lib/commandbase.rb +79 -8
  29. data/lib/commandline.rb +14 -8
  30. data/lib/converterbase.rb +78 -28
  31. data/lib/database.rb +3 -3
  32. data/lib/device.rb +26 -13
  33. data/lib/device/ibooks.rb +116 -0
  34. data/lib/device/ibunko.rb +45 -0
  35. data/lib/device/kindle.rb +4 -0
  36. data/lib/device/kobo.rb +4 -0
  37. data/lib/device/library/windows.rb +12 -4
  38. data/lib/device/reader.rb +9 -0
  39. data/lib/diffviewer.rb +147 -0
  40. data/lib/downloader.rb +195 -80
  41. data/lib/extensions/jruby.rb +33 -0
  42. data/lib/extensions/windows.rb +8 -9
  43. data/lib/helper.rb +79 -37
  44. data/lib/illustration.rb +1 -1
  45. data/lib/inspector.rb +2 -2
  46. data/lib/inventory.rb +48 -0
  47. data/lib/logger.rb +28 -4
  48. data/lib/narou.rb +9 -7
  49. data/lib/narou/api.rb +7 -2
  50. data/lib/novelconverter.rb +46 -19
  51. data/lib/novelinfo.rb +13 -3
  52. data/lib/novelsetting.rb +17 -9
  53. data/lib/version.rb +1 -1
  54. data/narou.gemspec +106 -27
  55. data/narou.rb +2 -2
  56. data/spec/convert_spec.rb +102 -0
  57. data/spec/data/convert_test/auto_indent/correct_test_auto_indent.txt +18 -0
  58. data/spec/data/convert_test/auto_indent/test_auto_indent.txt +21 -0
  59. data/spec/data/convert_test/auto_join_bracket/correct_test_auto_join_bracket.txt +12 -0
  60. data/spec/data/convert_test/auto_join_bracket/test_auto_join_bracket.txt +16 -0
  61. data/spec/data/convert_test/auto_join_line/correct_test_auto_join_line.txt +36 -0
  62. data/spec/data/convert_test/auto_join_line/test_auto_join_line.txt +51 -0
  63. data/spec/data/convert_test/convert_page_break/correct_test_convert_page_break.txt +21 -0
  64. data/spec/data/convert_test/convert_page_break/setting.ini +5 -0
  65. data/spec/data/convert_test/convert_page_break/test_convert_page_break.txt +60 -0
  66. data/spec/data/convert_test/force_indent_special_chapter/correct_test_force_indent_special_chapter.txt +64 -0
  67. data/spec/data/convert_test/force_indent_special_chapter/test_force_indent_special_chapter.txt +61 -0
  68. data/spec/data/convert_test/horizontal_ellipsis/correct_test_horizontal_ellipsis.txt +52 -0
  69. data/spec/data/convert_test/horizontal_ellipsis/test_horizontal_ellipsis.txt +57 -0
  70. data/spec/data/convert_test/kanji_num/correct_test_kanji_num.txt +49 -0
  71. data/spec/data/convert_test/kanji_num/test_kanji_num.txt +56 -0
  72. data/spec/data/convert_test/nonokagi/correct_test_nonokagi.txt +29 -0
  73. data/spec/data/convert_test/nonokagi/test_nonokagi.txt +34 -0
  74. data/spec/data/convert_test/replace/correct_test_replace.txt +12 -0
  75. data/spec/data/convert_test/replace/replace.txt +7 -0
  76. data/spec/data/convert_test/replace/test_replace.txt +14 -0
  77. data/spec/data/convert_test/ruby/correct_test_ruby.txt +131 -0
  78. data/spec/data/convert_test/ruby/test_ruby.txt +170 -0
  79. data/spec/data/convert_test/ruby_youon/correct_test_ruby_youon.txt +12 -0
  80. data/spec/data/convert_test/ruby_youon/setting.ini +2 -0
  81. data/spec/data/convert_test/ruby_youon/test_ruby_youon.txt +14 -0
  82. data/spec/data/convert_test/sesame/correct_test_sesame.txt +40 -0
  83. data/spec/data/convert_test/sesame/test_sesame.txt +52 -0
  84. data/spec/data/convert_test/to_odd_leader/correct_test_to_odd_leader.txt +20 -0
  85. data/spec/data/convert_test/to_odd_leader/test_to_odd_leader.txt +21 -0
  86. data/spec/device_spec.rb +3 -3
  87. data/spec/generator/convert_spec_gen.rb +95 -0
  88. data/spec/html_spec.rb +9 -8
  89. data/spec/ini_spec.rb +31 -31
  90. data/spec/novelinfo_spec.rb +2 -2
  91. data/spec/num_to_kanji_spec.rb +2 -2
  92. data/template/diff.txt.erb +5 -2
  93. data/template/ibunko_novel.txt.erb +2 -1
  94. data/template/novel.txt.erb +16 -3
  95. data/template/setting.ini.erb +1 -1
  96. data/webnovel/ncode.syosetu.com.yaml +7 -7
  97. data/webnovel/novel18.syosetu.com.yaml +7 -7
  98. data/webnovel/syosetu.org.yaml +8 -11
  99. metadata +193 -23
  100. data/lib/globalsetting.rb +0 -64
  101. data/lib/localsetting.rb +0 -63
data/Gemfile CHANGED
@@ -1,4 +1,13 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ if RUBY_VERSION =~ /1.9/
4
+ Encoding.default_external = Encoding::UTF_8
5
+ Encoding.default_internal = Encoding::UTF_8
6
+ end
7
+
3
8
  # Specify your gem's dependencies in narou.gemspec
4
9
  gemspec
10
+
11
+ gem "rspec"
12
+ gem "rspec-core"
13
+
data/README.md CHANGED
@@ -23,83 +23,108 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
23
23
 
24
24
  更新履歴 - ChangeLog
25
25
  --------------------
26
- 2014/07/24 : **1.5.11**
27
- * 追加機能もしくは仕様変更
28
- - 改稿の更新漏れ対策として、 `update.strong` オプションが追加されました
29
- + `narou s update.strong=true` として設定して下さい
30
- + 改稿日の更新は必ずダウンロードされるようになります(当日はアップデートする度にDLします)。
31
- 何度も改稿された小説では、更新のタイミングによっては改稿内容を取りこぼす可能性があるため、
32
- このオプションを有効にすることで必ず拾えるようにします
33
- + ファイルのタイムスタンプをチェックするので、更新動作が多少遅くなります
34
- - 指定の話数ごとにウェイトを入れられる `download.wait-steps` オプションが追加されました
35
- + `narou s download.wait-steps=10` として設定して下さい
36
- + 小説家になろうの場合は11話以上を指定しても10話ごとにウェイトが入ります
37
- - `backup` コマンドを追加しました
38
- + 使用例: `narou backup 0` 、 `narou ba 0`
39
- + 小説保存フォルダ直下の backup フォルダに、バックアップ以外の全てのファイルをZIPで固めて保存します
40
- - ダイジェスト化検出時の処理項目に「バックアップの作成」と「保存フォルダを開く」を追加しました
41
- * Bug Fix
42
- - まのわ(n3730bn)のプリセット変換スクリプトの挙動を調整
43
- - 暁で一部あらすじが正常に取れていない小説があったので修正
44
26
 
45
- 2014/07/18 : **1.5.10.1**
46
- * Bug Fix
47
- - replace.txt による置換が正常に行えなかった問題を修正
48
-
49
- 2014/07/14 : **1.5.10**
50
- * 追加機能もしくは仕様変更
51
- - `download` コマンドに対話モードを追加しました
52
- + `narou d` と対象小説を指定せずに実行すると対話モードに移行します(-f 等のオプションは指定出来ます)
53
- + 連続してNコードもしくはURLを入力できるモードです。ArcadiaのURLは " " で囲む必要がありません
54
- + 想定される使い方:
55
- * 複数のURLを書いたテキストをコピペして流しこむ
56
- * テキストファイルからリダイレクトで入力する
57
- - `narou d < list.txt`
58
- * BATファイル等で `narou d` のみを実行し、新規DL時の入力を簡便にする
59
- - 自動生成される converter.rb に簡単な説明を付け加えるようにしました
60
- - `remove` コマンドの `--with-file` オプションに短縮版 `-w` を追加しました
61
- - `narou init` 実行時に現在の AozoraEpub3 の場所を表示するようになりました
62
- - `update` コマンドに新着小説のみを変換するオプション `--convert-only-new-arrival` (短縮 `-a` )が
63
- 追加されました(naoh87さんによる実装)
64
- + もしこのオプションをデフォルトの挙動にしたければ、 `narou s default_args.update=-a` として下さい
65
- - 変換用のプリセットデータを追加
66
- + デスマーチからはじまる異世界狂想曲(n9902bn)
67
- + この世界がゲームだと俺だけが知っている(n9078bd)
68
- + まのわ ~魔物倒す・能力奪う・私強くなる~(n3730bn)
69
- - すでに同梱されているプリセットデータを一部更新
70
- + 異世界迷宮で奴隷ハーレムを(n4259s)
71
- + ログ・ホライズン(n8725k)
72
- * Bug Fix
73
- - replace.txt で置換対象を削除するという表現(あいう<tab><改行>)が出来なかったのを修正
74
- - `--time` オプションで表示される実行時間がより正確になるように調整しました
75
-
76
- 2014/07/04 : **1.5.9**
77
- * Bug Fix
78
- - 作者名が半角数字だけの場合にクラッシュする問題を修正
79
-
80
- 2014/06/25 : **1.5.8**
81
- * 追加機能もしくは仕様変更
82
- - 小説が削除されていた場合に自動で凍結するようになりました
83
- - 小説が削除されている場合に `list` コマンドで(削除)と表示されるようになりました
84
- - 更新に失敗した小説を表示するときにIDも合わせて表示するようにしました
85
- - `flag` コマンドに強制設定用の `--on` 及び `--off` オプションを追加しました
86
- - `flag` コマンドに `delete` フラグを追加しました(削除表示への対応)
87
- - ルビの拗音(ぁ、ぃ、ゃ等)を商業書籍のように大きくする機能を追加しました
88
- + `narou s force.enable_ruby_youon_to_big=true` とするか、
89
- setting.ini `enable_ruby_youon_to_big=true` を追加して下さい(標準ではオフ)
90
- - 今バージョン以降ダウンロードした小説は、小説タイトルが変わっても converter.rb に関するエラーが
91
- 発生しないように調整しました。ただし、すでにダウンロード済み小説には適用されないため、エラーが出た場合は
92
- converter.rb の削除で対応をお願いします
93
-
94
- 2014/06/15 : **1.5.7.1**
95
- * 追加機能もしくは仕様変更
96
- - 10話ごとの制限が復活していたので、1.5.7で外したウェイトを復活させました
97
-
98
- 2014/06/14 : **1.5.7**
99
- * 追加機能もしくは仕様変更
100
- - 小説家になろうにおいて、10話ごとにかけていたウェイトを削除
101
- * Bug Fix
102
- - &#39; (') のエンティティ変換を追加
27
+ ### 1.6.0 : 2014/08/28
28
+
29
+ #### 追加機能
30
+ - **iBooks** での管理に対応しました
31
+ + Mac OS X Mavericks以上が対象です
32
+ + `narou s device=ibooks` で変更できます
33
+ + 初回登録時はiBooksでEPUBファイルを開くので、ウィンドウが大量に開くことに
34
+ ご注意ください。次回以降はiBooksの管理フォルダを直接更新してウィンドウが
35
+ 開くことはありません
36
+ - **JRuby** での実行に対応しました(Windowsでは環境変数JAVA_OPTSに
37
+ -Dfile.encoding=UTF8を設定して下さい)
38
+ - `diff` コマンドで外部ツールがなくても更新された部分の差分を表示できるように
39
+ なりました
40
+ + `difftool` が設定されていない場合、独自の差分表示処理を行います。
41
+ 小説用なので一文字単位の修正がわかりやすいように調整してあります
42
+
43
+ ![diff使用時のイメージ](https://raw.github.com/wiki/whiteleaf7/narou/images/diff_cap.png)
44
+ - `tag` コマンドが追加されました
45
+ + 小説に自由にタグを付けることができ、絞り込み等で使用出来ます
46
+ + タグを追加: `narou tag -a akatsuki 0`
47
+ + タグが付いた小説を表示: `narou tag akatsuki`
48
+ + コマンドの対象小説をタグで指定: `narou update akatsuki`
49
+ + その他詳細な説明は `narou tag -h` を参照して下さい
50
+ - `list` コマンドが拡張されます
51
+ + `--site` オプション(短縮: -s)が追加されました。掲載小説サイト名を合わせて
52
+ 表示します
53
+ + `--author` オプション(短縮:-a)が追加されました。作者名を合わせて表示します
54
+ + `--tag` オプション(短縮: -t)が追加されました。タグで小説を検索出来ます
55
+ * `narou l -t tagname` 、 `narou l -t "tag1 tag2"`
56
+ * `narou l -t` と引数を省略すると全ての小説をタグつきで表示
57
+ + `--grep` オプション(短縮: -g)が追加されました。リストの中から指定された
58
+ 文字列で検索します。最終的に表示される内容から検索するため、作者名やサイト
59
+ 名等そのままでは表示されない要素から検索したい場合、それぞれを表示するオプ
60
+ ションも合わせて指定して下さい
61
+ * 例1: リストから作者名に“紫炎”が含まれる小説を探したい場合
62
+ - `narou list --author --grep 紫炎` 或いは `narou l -ag 紫炎`
63
+ * 例2: 小説家になろう以外の小説を表示したい場合
64
+ - `narou list --site --grep "-小説家になろう"` 或いは
65
+ `narou l -sg "-小説家になろう"` (-をつけることでNOT検索)
66
+ * 例3: ハーメルンの小説からSAOを含む小説を探す
67
+ - `narou l -sg "ハーメルン SAO"` (スペース区切りによるAND検索)
68
+ + listコマンドの結果をパイプで他のコマンドに接続できるようになりました
69
+ * 例1: ハーメルに掲載されている小説にhamelnタグを付けたい
70
+ - `narou l -sg ハーメルン | narou t -a hameln`
71
+ * 例2: 短編を全て凍結したい
72
+ - `narou l -f ss | narou freeze --on`
73
+ * 注意点として、パイプでつないだ場合は remove コマンドは確認メッセージを
74
+ 出さずに削除します
75
+ - `convert` コマンドに `--ignore-force` オプションが追加されました。
76
+ `narou s force.設定名=値` として強制上書きされる設定を一時的に無効にします
77
+ - 空改行の削除処理を制御する `enable_pack_blank_line` オプションが追加されました
78
+ + デフォルトでは有効です。無効にするには各小説の setting.ini に
79
+ `enable_pack_blank_line=false` を追加するか、
80
+ `narou s force.enable_pack_blank_line=false` を実行して下さい
81
+ - `freeze` コマンドに強制凍結及び解除する `--on` 及び `--off` オプションが追加
82
+ されました
83
+
84
+ #### 仕様変更
85
+ - `update.strong` の挙動を、「当日分は必ずDLする」から「当日分は内容を見て更新
86
+ されているか確認する」に変更しました。またタイムスタンプを記録するようにし、
87
+ アップデート時のパフォーマンスを向上させました
88
+ - デバイス設定時に最低限必要な関連項目を設定変更するようになりました
89
+ - 空改行の間引き具合を若干弱くしました
90
+ - `list` コマンドの `--type` オプションを `--kind` (短縮:-k)に変更しました
91
+ - 差分オブジェクトの書式を `20YY.MM.DD@hh;mm;ss` から `20YY.MM.DD@hh.mm.ss` に
92
+ 変更します
93
+ + このバージョンから反映。以前のバージョンで作成された差分は旧書式のままです
94
+ - 新着のみの更新の場合差分データを作成しないように変更しました
95
+ - `backup` コマンドで作成するZIPファイルの内部ファイルパス文字エンコーディング
96
+ をOS毎に変更するようにしました
97
+ + Windows = Windows-31J、その他OS = UTF-8
98
+ - `flag` コマンドは非推奨になり、tagコマンドに統一されます。今後完結フラグを立
99
+ てる場合、 `narou tag -a end 0` として下さい。flagコマンドは1.7.0で廃止される
100
+ 予定です
101
+ + flagデータをtagデータに移行する場合は `narou flag --convert-tag` を実行
102
+ して下さい
103
+ - 完結の情報を自動で付与するようになりました。完結を検知したら end タグを追加
104
+ します
105
+ + 現在は小説家になろう関連サイトとハーメルンのみ自動検知します
106
+ - 選択肢を選ぶときエンターを押す必要がなくなりました
107
+ - このバージョンからセマンティックバージョニングに移行します
108
+ + Major.Minor.Teen という形式で、特別なアップデートでMajor、追加機能を含む
109
+ アップデートでMinor、バグ修正のみのアップデートでTeenの番号を増やします
110
+
111
+ #### Bug Fix
112
+ - 小説が掲載サイトから削除されていない時(500や503)にも自動凍結していたのを修正
113
+ - iBooksで閲覧時章タイトルページのレイアウトが崩れていたのを修正
114
+ - iBooksで閲覧時Arcadiaの掲載アドレスがあるページでエラーがでていたのを修正 #47
115
+ - ハーメルンで作者名が正常に取得できない場合があったのを修正 #48
116
+ - ハーメルンで連載形式の短編が1話目しか取得できていなかったのを修正 #49
117
+ - 自動字下げの判定処理が正常に動作していなかったのを修正
118
+ - `diff` コマンドの差分表示時に更新日が挿入されない場合があったのを修正
119
+ - `diff` コマンドで小説家になろう以外の小説の差分がHTMLタグ付きのまま表示されて
120
+ いたのを修正
121
+ - 未対応のURLを入力した場合にエラーが出るようになっていたのを修正
122
+ - 小説家になろうの短編のあらすじで改行が無視されていたのを修正
123
+ - 小説家になろうの短編のあらすじで先頭に縦棒(|)が入ってしまう問題に対応 #46
124
+ - 小説家になろうの挿絵を認識出来ない場合があったのを修正
125
+ - 前書き・後書き内にある挿絵を単ページ化出来なかったのを修正 #8
126
+ - 漢数字変換で対応桁数以上を変換しようとしてクラッシュしていたのを修正
127
+ - その他ヘルプ文の訂正や無駄な処理削減等多数の細かい調整
103
128
 
104
129
  ----
105
130
 
data/lib/color.rb CHANGED
@@ -1,8 +1,11 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  =begin
4
+ original source is
4
5
  https://github.com/termtter/termtter/blob/master/lib/termtter/system_extensions/windows.rb
5
6
 
7
+ customed by whiteleaf
8
+
6
9
  (The MIT License)
7
10
 
8
11
  Copyright (c) 2008-2012 The Termtter Development Team
@@ -36,43 +39,80 @@ require "termcolor"
36
39
 
37
40
  alias :warn :original_warn
38
41
 
39
- if RUBY_PLATFORM =~ /mswin(?!ce)|mingw|bccwin/i # without cygwin
42
+ if RbConfig::CONFIG["host_os"] =~ /mswin(?!ce)|mingw|bccwin/i
40
43
  require_relative "extensions/windows"
41
44
 
42
45
  $hStdOut = WinAPI.GetStdHandle(0xFFFFFFF5)
43
46
  lpBuffer = ' ' * 22
44
47
  WinAPI.GetConsoleScreenBufferInfo($hStdOut, lpBuffer)
45
48
  $oldColor = lpBuffer.unpack('SSSSSssssSS')[4]
49
+ $default_foreground = $oldColor & 0x0f
50
+ $default_background = $oldColor & 0xf0
46
51
 
47
52
  $colorMap = {
48
- 0 => 0x07|0x00|0x00|0x00, # black/white
49
- 37 => 0x08|0x00|0x00|0x00, # white/intensity
50
- 31 => 0x04|0x08|0x00|0x00, # red/red
51
- 32 => 0x02|0x08|0x00|0x00, # green/green
52
- 33 => 0x06|0x08|0x00|0x00, # yellow/yellow
53
- 34 => 0x01|0x08|0x00|0x00, # blue/blue
54
- 35 => 0x05|0x08|0x00|0x00, # magenta/purple
55
- 36 => 0x03|0x08|0x00|0x00, # cyan/aqua
56
- 39 => 0x07, # default
57
- 40 => 0x00|0x00|0xf0|0x00, # background:white
58
- 41 => 0x07|0x00|0x40|0x00, # background:red
59
- 42 => 0x07|0x00|0x20|0x00, # background:green
60
- 43 => 0x07|0x00|0x60|0x00, # background:yellow
61
- 44 => 0x07|0x00|0x10|0x00, # background:blue
62
- 45 => 0x07|0x00|0x50|0x80, # background:magenta
63
- 46 => 0x07|0x00|0x30|0x80, # background:cyan
64
- 47 => 0x07|0x00|0x70|0x80, # background:gray
65
- 49 => 0x70, # default
53
+ 0 => 0x07|0x00|0x00|0x00, # black/white
54
+ 1 => 0x08 , # foreground_intensity
55
+ 4 => 0x8000 , # underline
56
+ 7 => 0x4000 , # reverse
57
+ 30 => 0x00|0x00|0x00|0x00, # black
58
+ 31 => 0x04|0x00|0x00|0x00, # red/red
59
+ 32 => 0x02|0x00|0x00|0x00, # green/green
60
+ 33 => 0x06|0x00|0x00|0x00, # yellow/yellow
61
+ 34 => 0x01|0x00|0x00|0x00, # blue/blue
62
+ 35 => 0x05|0x00|0x00|0x00, # magenta/purple
63
+ 36 => 0x03|0x00|0x00|0x00, # cyan/aqua
64
+ 37 => 0x07|0x00|0x00|0x00, # white/gray
65
+ 39 => $default_foreground, # default
66
+ 40 => 0x00|0x00|0x00|0x00, # background:black
67
+ 41 => 0x00|0x00|0x40|0x00, # background:red
68
+ 42 => 0x00|0x00|0x20|0x00, # background:green
69
+ 43 => 0x00|0x00|0x60|0x00, # background:yellow
70
+ 44 => 0x00|0x00|0x10|0x00, # background:blue
71
+ 45 => 0x00|0x00|0x50|0x00, # background:magenta
72
+ 46 => 0x00|0x00|0x30|0x00, # background:cyan
73
+ 47 => 0x00|0x00|0x70|0x00, # background:white
74
+ 49 => $default_background, # default
66
75
  90 => 0x07|0x00|0x00|0x00, # erase/white
67
76
  }
68
77
 
69
78
  def write_color(str, console = STDOUT)
79
+ @decoration ||= 0
80
+ @foreground ||= $default_foreground
81
+ @background ||= $default_background
82
+ @reverse ||= false
70
83
  str.gsub("\xef\xbd\x9e", "\xe3\x80\x9c").split(/(\e\[\d*[a-zA-Z])/).each do |token|
71
84
  case token
72
85
  when /\e\[(\d+)m/
73
- color = $1.to_i > 90 ? ($1.to_i % 60) : $1.to_i
86
+ code = $1.to_i
87
+ code = code > 90 ? (code % 60) : code
88
+ case code
89
+ when 0
90
+ @decoration = 0
91
+ @foreground = $default_foreground
92
+ @background = $default_background
93
+ @reverse = false
94
+ when 1
95
+ @decoration |= $colorMap[1]
96
+ when 4
97
+ @decoration |= $colorMap[4]
98
+ when 7
99
+ @reverse = true
100
+ when 30..39
101
+ @foreground = $colorMap[code].to_i
102
+ when 40..49
103
+ @background = $colorMap[code].to_i
104
+ end
105
+ foreground = @foreground
106
+ background = @background
107
+ if @reverse
108
+ foreground <<= 4
109
+ background >>= 4
110
+ # reverse では intensity 情報も文字と背景で入れ替わるでの、
111
+ # 下位4bitと上位4bitをスワップ
112
+ @decoration = @decoration & 0xff00 | @decoration >> 4 & 0xf | (@decoration & 0xf) << 4
113
+ end
74
114
  loop do
75
- error_code = WinAPI.SetConsoleTextAttribute $hStdOut, $colorMap[color].to_i
115
+ error_code = WinAPI.SetConsoleTextAttribute $hStdOut, @decoration | foreground | background
76
116
  if error_code == 0
77
117
  if WinAPI.GetLastError == 6
78
118
  $hStdOut = WinAPI.GetStdHandle(0xFFFFFFF5)
@@ -81,7 +121,7 @@ if RUBY_PLATFORM =~ /mswin(?!ce)|mingw|bccwin/i # without cygwin
81
121
  end
82
122
  break
83
123
  end
84
- when /\e\[\d*[a-zA-Z]/
124
+ when /\e\[\d*[a-zA-Z]/, ""
85
125
  # do nothing
86
126
  else
87
127
  console.write token
data/lib/command.rb CHANGED
@@ -17,26 +17,28 @@ module Command
17
17
  COMMAND_LIST
18
18
  end
19
19
 
20
+ # この順番がヘルプに表示される順番
20
21
  COMMAND_LIST = {
21
- "download" => Download.new,
22
- "update" => Update.new,
23
- "list" => List.new,
24
- "convert" => Convert.new,
25
- "diff" => Diff.new,
26
- "setting" => Setting.new,
27
- "alias" => Alias.new,
28
- "inspect"=> Inspect.new,
29
- "send" => Send.new,
30
- "folder" => Folder.new,
31
- "browser" => Browser.new,
32
- "remove" => Remove.new,
33
- "freeze" => Freeze.new,
34
- "flag" => Flag.new,
35
- "mail" => Mail.new,
36
- "backup" => Backup.new,
37
- "help" => Help.new,
38
- "version" => Version.new,
39
- "init" => Init.new
22
+ "download" => Download,
23
+ "update" => Update,
24
+ "list" => List,
25
+ "convert" => Convert,
26
+ "diff" => Diff,
27
+ "setting" => Setting,
28
+ "alias" => Alias,
29
+ "inspect"=> Inspect,
30
+ "send" => Send,
31
+ "folder" => Folder,
32
+ "browser" => Browser,
33
+ "remove" => Remove,
34
+ "freeze" => Freeze,
35
+ "tag" => Tag,
36
+ "flag" => Flag,
37
+ "mail" => Mail,
38
+ "backup" => Backup,
39
+ "help" => Help,
40
+ "version" => Version,
41
+ "init" => Init
40
42
  }
41
43
 
42
44
  # ショートカット定義
data/lib/command/alias.rb CHANGED
@@ -3,10 +3,14 @@
3
3
  # Copyright 2013 whiteleaf. All rights reserved.
4
4
  #
5
5
 
6
- require_relative "../localsetting"
6
+ require_relative "../inventory"
7
7
 
8
8
  module Command
9
9
  class Alias < CommandBase
10
+ def self.oneline_help
11
+ "小説のIDに紐付けた別名を作成します"
12
+ end
13
+
10
14
  def initialize
11
15
  super("[<alias_name>=<target> ...] [options]")
12
16
  @opt.separator <<-EOS
@@ -15,7 +19,7 @@ module Command
15
19
  ・<alias_name>にはアルファベット及び数字、アンダースコアが使用出来ます。
16
20
  ・<target>は他のコマンドで指定出来るものがそのまま使えますが、すでにダウンロード済みである必要があります。
17
21
 
18
- Example:
22
+ Examples:
19
23
  narou alias --list
20
24
  narou alias musyoku=n9669bk
21
25
  narou alias harem=1
@@ -31,7 +35,7 @@ module Command
31
35
  end
32
36
 
33
37
  def output_aliases_list
34
- aliases = LocalSetting.get["alias"]
38
+ aliases = Inventory.load("alias", :local)
35
39
  database = Database.instance
36
40
  aliases.each do |name, id|
37
41
  title = database[id]["title"] rescue "(すでに削除されています)"
@@ -45,7 +49,7 @@ module Command
45
49
  puts @opt.help
46
50
  return
47
51
  end
48
- aliases = LocalSetting.get["alias"]
52
+ aliases = Inventory.load("alias", :local)
49
53
  argv.each_with_index do |arg, i|
50
54
  Helper.print_horizontal_rule if i > 0
51
55
  alias_name, target = arg.split("=", 2)
@@ -72,11 +76,7 @@ module Command
72
76
  aliases[alias_name] = id
73
77
  puts "#{alias_name} を #{title} の別名に設定しました"
74
78
  end
75
- LocalSetting.get.save_settings
76
- end
77
-
78
- def oneline_help
79
- "小説のIDに紐付けた別名を作成します"
79
+ aliases.save
80
80
  end
81
81
  end
82
82
  end
@@ -10,7 +10,7 @@ module Command
10
10
  class Backup < CommandBase
11
11
  BACKUP_DIR_NAME = "backup"
12
12
 
13
- def oneline_help
13
+ def self.oneline_help
14
14
  "小説のバックアップを作成します"
15
15
  end
16
16
 
@@ -22,7 +22,7 @@ module Command
22
22
  ・バックアップファイルはZIP圧縮され、小説保存フォルダ直下の#{BACKUP_DIR_NAME}フォルダに保存されます。
23
23
  ・バックアップ対象は、バックアップファイル以外の小説保存フォルダにあるファイル全てが対象です。
24
24
 
25
- Example:
25
+ Examples:
26
26
  narou backup 0
27
27
  narou backup n9669bk
28
28
  narou backup 0 1 musyoku
@@ -42,10 +42,16 @@ module Command
42
42
  File.file?(path) && path.split("/", 2)[0] != BACKUP_DIR_NAME
43
43
  }
44
44
  FileUtils.mkdir(BACKUP_DIR_NAME) unless File.exists?(BACKUP_DIR_NAME)
45
- Zip.unicode_names = true
45
+ Zip.unicode_names = true unless Helper.os_windows?
46
46
  Zip::File.open(File.join(BACKUP_DIR_NAME, zipfilename), Zip::File::CREATE) do |zip|
47
47
  paths.each do |path|
48
- zip.add(path, path)
48
+ if Helper.os_windows?
49
+ zipped_filename = path.encode(Encoding::Windows_31J,
50
+ invalid: :replace, undef: :replace, replace: "_")
51
+ else
52
+ zipped_filename = path
53
+ end
54
+ zip.add(zipped_filename, path)
49
55
  end
50
56
  end
51
57
  Dir.chdir(pwd)
@@ -58,6 +64,7 @@ module Command
58
64
  puts @opt.help
59
65
  return
60
66
  end
67
+ tagname_to_ids(argv)
61
68
  require "zip"
62
69
  argv.each_with_index do |target, i|
63
70
  Helper.print_horizontal_rule if i > 0