novel-downloader 1.4.4__py3-none-any.whl → 1.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. novel_downloader/__init__.py +1 -1
  2. novel_downloader/cli/__init__.py +2 -2
  3. novel_downloader/cli/config.py +1 -83
  4. novel_downloader/cli/download.py +4 -5
  5. novel_downloader/cli/export.py +4 -1
  6. novel_downloader/cli/main.py +2 -0
  7. novel_downloader/cli/search.py +123 -0
  8. novel_downloader/config/__init__.py +3 -10
  9. novel_downloader/config/adapter.py +190 -54
  10. novel_downloader/config/loader.py +2 -3
  11. novel_downloader/core/__init__.py +13 -13
  12. novel_downloader/core/downloaders/__init__.py +10 -11
  13. novel_downloader/core/downloaders/base.py +152 -26
  14. novel_downloader/core/downloaders/biquge.py +5 -1
  15. novel_downloader/core/downloaders/common.py +157 -378
  16. novel_downloader/core/downloaders/esjzone.py +5 -1
  17. novel_downloader/core/downloaders/linovelib.py +5 -1
  18. novel_downloader/core/downloaders/qianbi.py +291 -4
  19. novel_downloader/core/downloaders/qidian.py +199 -285
  20. novel_downloader/core/downloaders/registry.py +67 -0
  21. novel_downloader/core/downloaders/sfacg.py +5 -1
  22. novel_downloader/core/downloaders/yamibo.py +5 -1
  23. novel_downloader/core/exporters/__init__.py +10 -11
  24. novel_downloader/core/exporters/base.py +87 -7
  25. novel_downloader/core/exporters/biquge.py +5 -8
  26. novel_downloader/core/exporters/common/__init__.py +2 -2
  27. novel_downloader/core/exporters/common/epub.py +82 -166
  28. novel_downloader/core/exporters/common/main_exporter.py +0 -60
  29. novel_downloader/core/exporters/common/txt.py +82 -83
  30. novel_downloader/core/exporters/epub_util.py +157 -1330
  31. novel_downloader/core/exporters/esjzone.py +5 -8
  32. novel_downloader/core/exporters/linovelib/__init__.py +2 -2
  33. novel_downloader/core/exporters/linovelib/epub.py +157 -212
  34. novel_downloader/core/exporters/linovelib/main_exporter.py +2 -59
  35. novel_downloader/core/exporters/linovelib/txt.py +67 -63
  36. novel_downloader/core/exporters/qianbi.py +5 -8
  37. novel_downloader/core/exporters/qidian.py +14 -4
  38. novel_downloader/core/exporters/registry.py +53 -0
  39. novel_downloader/core/exporters/sfacg.py +5 -8
  40. novel_downloader/core/exporters/txt_util.py +67 -0
  41. novel_downloader/core/exporters/yamibo.py +5 -8
  42. novel_downloader/core/fetchers/__init__.py +19 -24
  43. novel_downloader/core/fetchers/base/__init__.py +3 -3
  44. novel_downloader/core/fetchers/base/browser.py +23 -4
  45. novel_downloader/core/fetchers/base/session.py +30 -5
  46. novel_downloader/core/fetchers/biquge/__init__.py +3 -3
  47. novel_downloader/core/fetchers/biquge/browser.py +5 -0
  48. novel_downloader/core/fetchers/biquge/session.py +6 -1
  49. novel_downloader/core/fetchers/esjzone/__init__.py +3 -3
  50. novel_downloader/core/fetchers/esjzone/browser.py +5 -0
  51. novel_downloader/core/fetchers/esjzone/session.py +6 -1
  52. novel_downloader/core/fetchers/linovelib/__init__.py +3 -3
  53. novel_downloader/core/fetchers/linovelib/browser.py +6 -1
  54. novel_downloader/core/fetchers/linovelib/session.py +6 -1
  55. novel_downloader/core/fetchers/qianbi/__init__.py +3 -3
  56. novel_downloader/core/fetchers/qianbi/browser.py +5 -0
  57. novel_downloader/core/fetchers/qianbi/session.py +5 -0
  58. novel_downloader/core/fetchers/qidian/__init__.py +3 -3
  59. novel_downloader/core/fetchers/qidian/browser.py +12 -4
  60. novel_downloader/core/fetchers/qidian/session.py +11 -3
  61. novel_downloader/core/fetchers/registry.py +71 -0
  62. novel_downloader/core/fetchers/sfacg/__init__.py +3 -3
  63. novel_downloader/core/fetchers/sfacg/browser.py +5 -0
  64. novel_downloader/core/fetchers/sfacg/session.py +5 -0
  65. novel_downloader/core/fetchers/yamibo/__init__.py +3 -3
  66. novel_downloader/core/fetchers/yamibo/browser.py +5 -0
  67. novel_downloader/core/fetchers/yamibo/session.py +6 -1
  68. novel_downloader/core/interfaces/__init__.py +7 -5
  69. novel_downloader/core/interfaces/searcher.py +18 -0
  70. novel_downloader/core/parsers/__init__.py +10 -11
  71. novel_downloader/core/parsers/{biquge/main_parser.py → biquge.py} +7 -2
  72. novel_downloader/core/parsers/{esjzone/main_parser.py → esjzone.py} +7 -2
  73. novel_downloader/core/parsers/{linovelib/main_parser.py → linovelib.py} +7 -2
  74. novel_downloader/core/parsers/{qianbi/main_parser.py → qianbi.py} +7 -2
  75. novel_downloader/core/parsers/qidian/__init__.py +2 -2
  76. novel_downloader/core/parsers/qidian/chapter_encrypted.py +23 -21
  77. novel_downloader/core/parsers/qidian/chapter_normal.py +1 -1
  78. novel_downloader/core/parsers/qidian/main_parser.py +10 -21
  79. novel_downloader/core/parsers/qidian/utils/__init__.py +11 -11
  80. novel_downloader/core/parsers/qidian/utils/decryptor_fetcher.py +5 -6
  81. novel_downloader/core/parsers/qidian/utils/node_decryptor.py +2 -2
  82. novel_downloader/core/parsers/registry.py +68 -0
  83. novel_downloader/core/parsers/{sfacg/main_parser.py → sfacg.py} +7 -2
  84. novel_downloader/core/parsers/{yamibo/main_parser.py → yamibo.py} +7 -2
  85. novel_downloader/core/searchers/__init__.py +20 -0
  86. novel_downloader/core/searchers/base.py +92 -0
  87. novel_downloader/core/searchers/biquge.py +83 -0
  88. novel_downloader/core/searchers/esjzone.py +84 -0
  89. novel_downloader/core/searchers/qianbi.py +131 -0
  90. novel_downloader/core/searchers/qidian.py +87 -0
  91. novel_downloader/core/searchers/registry.py +63 -0
  92. novel_downloader/locales/en.json +12 -4
  93. novel_downloader/locales/zh.json +12 -4
  94. novel_downloader/models/__init__.py +4 -30
  95. novel_downloader/models/config.py +12 -6
  96. novel_downloader/models/search.py +16 -0
  97. novel_downloader/models/types.py +0 -2
  98. novel_downloader/resources/config/settings.toml +31 -4
  99. novel_downloader/resources/css_styles/intro.css +83 -0
  100. novel_downloader/resources/css_styles/main.css +30 -89
  101. novel_downloader/utils/__init__.py +52 -0
  102. novel_downloader/utils/chapter_storage.py +244 -224
  103. novel_downloader/utils/constants.py +1 -21
  104. novel_downloader/utils/epub/__init__.py +34 -0
  105. novel_downloader/utils/epub/builder.py +377 -0
  106. novel_downloader/utils/epub/constants.py +77 -0
  107. novel_downloader/utils/epub/documents.py +403 -0
  108. novel_downloader/utils/epub/models.py +134 -0
  109. novel_downloader/utils/epub/utils.py +212 -0
  110. novel_downloader/utils/file_utils/__init__.py +10 -14
  111. novel_downloader/utils/file_utils/io.py +20 -51
  112. novel_downloader/utils/file_utils/normalize.py +2 -2
  113. novel_downloader/utils/file_utils/sanitize.py +2 -3
  114. novel_downloader/utils/fontocr/__init__.py +5 -5
  115. novel_downloader/utils/{hash_store.py → fontocr/hash_store.py} +4 -3
  116. novel_downloader/utils/{hash_utils.py → fontocr/hash_utils.py} +2 -2
  117. novel_downloader/utils/fontocr/ocr_v1.py +13 -1
  118. novel_downloader/utils/fontocr/ocr_v2.py +13 -1
  119. novel_downloader/utils/fontocr/ocr_v3.py +744 -0
  120. novel_downloader/utils/i18n.py +2 -0
  121. novel_downloader/utils/logger.py +2 -0
  122. novel_downloader/utils/network.py +110 -251
  123. novel_downloader/utils/state.py +1 -0
  124. novel_downloader/utils/text_utils/__init__.py +18 -17
  125. novel_downloader/utils/text_utils/diff_display.py +4 -5
  126. novel_downloader/utils/text_utils/numeric_conversion.py +253 -0
  127. novel_downloader/utils/text_utils/text_cleaner.py +179 -0
  128. novel_downloader/utils/text_utils/truncate_utils.py +62 -0
  129. novel_downloader/utils/time_utils/__init__.py +3 -3
  130. novel_downloader/utils/time_utils/datetime_utils.py +4 -5
  131. novel_downloader/utils/time_utils/sleep_utils.py +2 -3
  132. {novel_downloader-1.4.4.dist-info → novel_downloader-1.5.0.dist-info}/METADATA +2 -2
  133. novel_downloader-1.5.0.dist-info/RECORD +164 -0
  134. novel_downloader/config/site_rules.py +0 -94
  135. novel_downloader/core/factory/__init__.py +0 -20
  136. novel_downloader/core/factory/downloader.py +0 -73
  137. novel_downloader/core/factory/exporter.py +0 -58
  138. novel_downloader/core/factory/fetcher.py +0 -96
  139. novel_downloader/core/factory/parser.py +0 -86
  140. novel_downloader/core/fetchers/common/__init__.py +0 -14
  141. novel_downloader/core/fetchers/common/browser.py +0 -79
  142. novel_downloader/core/fetchers/common/session.py +0 -79
  143. novel_downloader/core/parsers/biquge/__init__.py +0 -10
  144. novel_downloader/core/parsers/common/__init__.py +0 -13
  145. novel_downloader/core/parsers/common/helper.py +0 -323
  146. novel_downloader/core/parsers/common/main_parser.py +0 -106
  147. novel_downloader/core/parsers/esjzone/__init__.py +0 -10
  148. novel_downloader/core/parsers/linovelib/__init__.py +0 -10
  149. novel_downloader/core/parsers/qianbi/__init__.py +0 -10
  150. novel_downloader/core/parsers/sfacg/__init__.py +0 -10
  151. novel_downloader/core/parsers/yamibo/__init__.py +0 -10
  152. novel_downloader/models/browser.py +0 -21
  153. novel_downloader/models/site_rules.py +0 -99
  154. novel_downloader/models/tasks.py +0 -33
  155. novel_downloader/resources/css_styles/volume-intro.css +0 -56
  156. novel_downloader/resources/json/replace_word_map.json +0 -4
  157. novel_downloader/resources/text/blacklist.txt +0 -22
  158. novel_downloader/utils/text_utils/chapter_formatting.py +0 -46
  159. novel_downloader/utils/text_utils/font_mapping.py +0 -28
  160. novel_downloader/utils/text_utils/text_cleaning.py +0 -107
  161. novel_downloader-1.4.4.dist-info/RECORD +0 -165
  162. {novel_downloader-1.4.4.dist-info → novel_downloader-1.5.0.dist-info}/WHEEL +0 -0
  163. {novel_downloader-1.4.4.dist-info → novel_downloader-1.5.0.dist-info}/entry_points.txt +0 -0
  164. {novel_downloader-1.4.4.dist-info → novel_downloader-1.5.0.dist-info}/licenses/LICENSE +0 -0
  165. {novel_downloader-1.4.4.dist-info → novel_downloader-1.5.0.dist-info}/top_level.txt +0 -0
@@ -1,104 +1,45 @@
1
- html, body {
2
- height: 95%;
3
- padding: 0.5em;
1
+ body {
2
+ font-family: serif;
3
+ height: 95%;
4
+ line-height: 1.6;
5
+ margin: 1em;
4
6
  }
5
7
 
6
- .images img {
7
- width:100%; /*自适应*/
8
- }
9
- .color .images {
10
- margin:0 0 1.5em;
11
- }
12
- .article .images {
13
- margin:1.0em 0;
14
- border:1px solid #000
15
- }
16
-
17
- .new-page-after {
18
- page-break-after:always;
19
- }
20
-
21
- .cover {
22
- width:100%;
23
- padding:0px;
24
- }
25
- .center {
26
- text-align: center;
27
- margin-left: 0%;
28
- margin-right: 0%;
29
- }
30
- .left {
31
- text-align: center;
32
- margin-left: 0%;
33
- margin-right: 0%;
34
- }
35
- .right {
36
- text-align: right;
37
- margin-left: 0%;
38
- margin-right: 0%;
8
+ h2 {
9
+ font-size: 1.5em;
10
+ margin: 1.5em 0 0.75em;
11
+ text-align: center;
39
12
  }
40
13
 
41
- hr {
42
- margin: 0;
43
- border-style: dotted;
44
- border-width: 1px 0 0 0;
45
- margin-top: 0.5em;
46
- margin-bottom: 0.5em;
47
- }
48
-
49
- h1 {
50
- text-indent: 0;
51
- duokan-text-indent: 0;
52
- line-height: 110%;
53
- text-align: center;
54
- font-size: 1.2em;
55
- margin-top: 0.4em;
56
- margin-bottom: 0.4em;
57
- }
58
-
59
- h2, h3, h4, h5, h6 {
60
- text-indent: 0;
61
- duokan-text-indent: 0;
62
- line-height: 110%;
63
- font-size: 1.1em;
64
- margin-top: 0.4em;
65
- margin-bottom: 0.4em;
14
+ p {
15
+ text-indent: 2em;
16
+ margin: 0.5em 0;
66
17
  }
67
18
 
68
- p {
69
- text-align: justify; /* 让文本两端对齐 */
70
- text-indent: 2em;
71
- duokan-text-indent: 2em;
72
- line-height: 100%;
73
- margin-top: 0.4em;
74
- margin-bottom: 0.4em;
19
+ p.new-page-after {
20
+ margin: 0;
21
+ padding: 0;
22
+ page-break-after: always;
75
23
  }
76
24
 
77
- div.list {
78
- text-align: left;
79
- font-size: 0.85em;
80
- line-height: 130%;
25
+ .duokan-image-single {
26
+ text-align: center;
27
+ margin: 1em 0;
81
28
  }
82
29
 
83
- span {
84
- text-indent: 0;
85
- duokan-text-indent: 0;
86
- text-align: left;
87
- font-size: 1em;
30
+ .duokan-image-single img {
31
+ max-width: 100%;
32
+ height: auto;
33
+ display: inline-block;
88
34
  }
89
35
 
90
- ol {
91
- text-align: left;
92
- margin-top: 1.2em;
93
- margin-bottom: 1.2em;
94
- margin-left: 0;
95
- list-style-type: none;
36
+ hr {
37
+ border: none;
38
+ border-top: 1px solid #ccc;
39
+ margin: 1.5em 0;
96
40
  }
97
41
 
98
- li {
99
- text-align: left;
100
- margin-top: 0.4em;
101
- margin-bottom: 0.4em;
102
- margin-left: 0;
103
- list-style-type: none;
42
+ h3 {
43
+ font-size: 1.2em;
44
+ margin: 1em 0 0.5em;
104
45
  }
@@ -4,3 +4,55 @@ novel_downloader.utils
4
4
  ----------------------
5
5
 
6
6
  """
7
+
8
+ __all__ = [
9
+ "ChapterStorage",
10
+ "TextCleaner",
11
+ "resolve_cookies",
12
+ "parse_cookie_expires",
13
+ "find_cookie_value",
14
+ "rc4_crypt",
15
+ "sanitize_filename",
16
+ "save_as_json",
17
+ "save_as_txt",
18
+ "read_text_file",
19
+ "read_json_file",
20
+ "read_binary_file",
21
+ "download",
22
+ "get_cleaner",
23
+ "content_prefix",
24
+ "truncate_half_lines",
25
+ "diff_inline_display",
26
+ "calculate_time_difference",
27
+ "async_sleep_with_random_delay",
28
+ "sleep_with_random_delay",
29
+ ]
30
+
31
+ from .chapter_storage import ChapterStorage
32
+ from .cookies import (
33
+ find_cookie_value,
34
+ parse_cookie_expires,
35
+ resolve_cookies,
36
+ )
37
+ from .crypto_utils import rc4_crypt
38
+ from .file_utils import (
39
+ read_binary_file,
40
+ read_json_file,
41
+ read_text_file,
42
+ sanitize_filename,
43
+ save_as_json,
44
+ save_as_txt,
45
+ )
46
+ from .network import download
47
+ from .text_utils import (
48
+ TextCleaner,
49
+ content_prefix,
50
+ diff_inline_display,
51
+ get_cleaner,
52
+ truncate_half_lines,
53
+ )
54
+ from .time_utils import (
55
+ async_sleep_with_random_delay,
56
+ calculate_time_difference,
57
+ sleep_with_random_delay,
58
+ )