manuscripta 0.1.0__tar.gz

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 (64) hide show
  1. manuscripta-0.1.0/LICENSE +21 -0
  2. manuscripta-0.1.0/PKG-INFO +199 -0
  3. manuscripta-0.1.0/README.md +164 -0
  4. manuscripta-0.1.0/pyproject.toml +187 -0
  5. manuscripta-0.1.0/src/manuscripta/__init__.py +3 -0
  6. manuscripta-0.1.0/src/manuscripta/audiobook/__init__.py +0 -0
  7. manuscripta-0.1.0/src/manuscripta/audiobook/generator.py +862 -0
  8. manuscripta-0.1.0/src/manuscripta/audiobook/tts/__init__.py +0 -0
  9. manuscripta-0.1.0/src/manuscripta/audiobook/tts/base.py +10 -0
  10. manuscripta-0.1.0/src/manuscripta/audiobook/tts/edge_tts_adapter.py +239 -0
  11. manuscripta-0.1.0/src/manuscripta/audiobook/tts/elevenlabs_adapter.py +25 -0
  12. manuscripta-0.1.0/src/manuscripta/audiobook/tts/gtts_adapter.py +14 -0
  13. manuscripta-0.1.0/src/manuscripta/audiobook/tts/pyttsx3_adapter.py +18 -0
  14. manuscripta-0.1.0/src/manuscripta/config/__init__.py +0 -0
  15. manuscripta-0.1.0/src/manuscripta/config/loader.py +37 -0
  16. manuscripta-0.1.0/src/manuscripta/data/__init__.py +0 -0
  17. manuscripta-0.1.0/src/manuscripta/data/character_profiles.json +7 -0
  18. manuscripta-0.1.0/src/manuscripta/data/emoji_map.py +88 -0
  19. manuscripta-0.1.0/src/manuscripta/data/emoji_map_sanity.py +23 -0
  20. manuscripta-0.1.0/src/manuscripta/data/image_prompt_generation_template.json +45 -0
  21. manuscripta-0.1.0/src/manuscripta/data/image_prompts.json +20 -0
  22. manuscripta-0.1.0/src/manuscripta/data/symbol_map.py +24 -0
  23. manuscripta-0.1.0/src/manuscripta/enums/__init__.py +0 -0
  24. manuscripta-0.1.0/src/manuscripta/enums/book_type.py +8 -0
  25. manuscripta-0.1.0/src/manuscripta/export/__init__.py +0 -0
  26. manuscripta-0.1.0/src/manuscripta/export/book.py +834 -0
  27. manuscripta-0.1.0/src/manuscripta/export/comic.py +187 -0
  28. manuscripta-0.1.0/src/manuscripta/export/print_version.py +227 -0
  29. manuscripta-0.1.0/src/manuscripta/export/shortcuts.py +693 -0
  30. manuscripta-0.1.0/src/manuscripta/export/shortcuts_comic.py +82 -0
  31. manuscripta-0.1.0/src/manuscripta/export/validation.py +245 -0
  32. manuscripta-0.1.0/src/manuscripta/images/__init__.py +0 -0
  33. manuscripta-0.1.0/src/manuscripta/images/convert.py +250 -0
  34. manuscripta-0.1.0/src/manuscripta/images/generate.py +126 -0
  35. manuscripta-0.1.0/src/manuscripta/images/generate_deepai.py +238 -0
  36. manuscripta-0.1.0/src/manuscripta/images/inject.py +293 -0
  37. manuscripta-0.1.0/src/manuscripta/markdown/__init__.py +0 -0
  38. manuscripta-0.1.0/src/manuscripta/markdown/bullet_points.py +103 -0
  39. manuscripta-0.1.0/src/manuscripta/markdown/emojis.py +203 -0
  40. manuscripta-0.1.0/src/manuscripta/markdown/german_quotes.py +509 -0
  41. manuscripta-0.1.0/src/manuscripta/markdown/links_to_plain.py +114 -0
  42. manuscripta-0.1.0/src/manuscripta/markdown/normalize_toc.py +69 -0
  43. manuscripta-0.1.0/src/manuscripta/markdown/strip_links.py +191 -0
  44. manuscripta-0.1.0/src/manuscripta/markdown/unbold_headers.py +223 -0
  45. manuscripta-0.1.0/src/manuscripta/paths/__init__.py +0 -0
  46. manuscripta-0.1.0/src/manuscripta/paths/img_tags.py +205 -0
  47. manuscripta-0.1.0/src/manuscripta/paths/to_absolute.py +349 -0
  48. manuscripta-0.1.0/src/manuscripta/paths/to_relative.py +131 -0
  49. manuscripta-0.1.0/src/manuscripta/project/__init__.py +0 -0
  50. manuscripta-0.1.0/src/manuscripta/project/chapters.py +193 -0
  51. manuscripta-0.1.0/src/manuscripta/project/init.py +259 -0
  52. manuscripta-0.1.0/src/manuscripta/project/metadata.py +76 -0
  53. manuscripta-0.1.0/src/manuscripta/project/reorder.py +339 -0
  54. manuscripta-0.1.0/src/manuscripta/project/shortcuts_init.py +73 -0
  55. manuscripta-0.1.0/src/manuscripta/project/tag_message.py +889 -0
  56. manuscripta-0.1.0/src/manuscripta/translation/__init__.py +0 -0
  57. manuscripta-0.1.0/src/manuscripta/translation/deepl.py +225 -0
  58. manuscripta-0.1.0/src/manuscripta/translation/lmstudio.py +562 -0
  59. manuscripta-0.1.0/src/manuscripta/translation/shortcuts.py +117 -0
  60. manuscripta-0.1.0/src/manuscripta/translation/shortcuts_lms.py +117 -0
  61. manuscripta-0.1.0/src/manuscripta/utils/__init__.py +0 -0
  62. manuscripta-0.1.0/src/manuscripta/utils/bulk_extension.py +215 -0
  63. manuscripta-0.1.0/src/manuscripta/utils/git_cache.py +89 -0
  64. manuscripta-0.1.0/src/manuscripta/utils/pandoc_batch.py +338 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Asterios Raptis
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,199 @@
1
+ Metadata-Version: 2.4
2
+ Name: manuscripta
3
+ Version: 0.1.0
4
+ Summary: Book production pipeline for authors and self-publishers. Multi-format export (PDF, EPUB, DOCX, HTML, Markdown), audiobook generation, translation, and manuscript tooling.
5
+ License-Expression: MIT
6
+ License-File: LICENSE
7
+ Keywords: book,publishing,pandoc,epub,audiobook,self-publishing,kdp
8
+ Author: Asterios Raptis
9
+ Author-email: asteri.raptis@gmail.com
10
+ Requires-Python: >=3.11,<4.0
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: End Users/Desktop
13
+ Classifier: Topic :: Text Processing :: Markup :: Markdown
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Requires-Dist: beautifulsoup4 (>=4.14.3,<5.0.0)
19
+ Requires-Dist: ebooklib (>=0.20,<0.21)
20
+ Requires-Dist: edge-tts (>=7.2.7,<8.0.0)
21
+ Requires-Dist: ftfy (>=6.3.1,<7.0.0)
22
+ Requires-Dist: pandas (>=2.3.2,<3.0.0)
23
+ Requires-Dist: pillow (>=11.2.1,<12.0.0)
24
+ Requires-Dist: pymupdf (>=1.26.4,<2.0.0)
25
+ Requires-Dist: python-dotenv (>=1.1.0,<2.0.0)
26
+ Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
27
+ Requires-Dist: questionary (>=2.1.1,<3.0.0)
28
+ Requires-Dist: requests (>=2.32.5,<3.0.0)
29
+ Requires-Dist: toml (>=0.10.2,<0.11.0)
30
+ Project-URL: Homepage, https://github.com/astrapi69/manuscripta
31
+ Project-URL: Issues, https://github.com/astrapi69/manuscripta/issues
32
+ Project-URL: Repository, https://github.com/astrapi69/manuscripta
33
+ Description-Content-Type: text/markdown
34
+
35
+ # manuscripta
36
+
37
+ Book production pipeline for authors and self-publishers.
38
+
39
+ Multi-format export (PDF, EPUB, DOCX, HTML, Markdown), audiobook generation, translation, and manuscript tooling, powered by Pandoc.
40
+
41
+ ## Installation
42
+
43
+ ```bash
44
+ pip install manuscripta
45
+ ```
46
+
47
+ Or with Poetry:
48
+
49
+ ```bash
50
+ poetry add manuscripta
51
+ ```
52
+
53
+ ## Requirements
54
+
55
+ - Python 3.11+
56
+ - [Pandoc](https://pandoc.org/installing.html) installed and available on PATH
57
+ - For audiobook generation: internet connection (Edge TTS) or local TTS engine
58
+
59
+ ## Quick Start
60
+
61
+ Inside your book repository root:
62
+
63
+ ```bash
64
+ # Export to PDF
65
+ export-pdf
66
+
67
+ # Export to EPUB with cover
68
+ export-ewc --cover assets/covers/cover.jpg
69
+
70
+ # Export all formats
71
+ export-all
72
+
73
+ # Safe export (no source modifications, good for drafts)
74
+ export-pdf-safe
75
+
76
+ # Generate audiobook
77
+ manuscripta-audiobook --engine edge --voice en-US-JennyNeural
78
+
79
+ # Initialize a new book project
80
+ manuscripta-init
81
+ ```
82
+
83
+ ## Book Repository Structure
84
+
85
+ Each book repository should follow this layout:
86
+
87
+ ```
88
+ my-book/
89
+ manuscript/
90
+ front-matter/
91
+ toc.md
92
+ toc-print.md
93
+ foreword.md
94
+ preface.md
95
+ chapters/
96
+ 01-chapter-one.md
97
+ 02-chapter-two.md
98
+ back-matter/
99
+ epilogue.md
100
+ glossary.md
101
+ acknowledgments.md
102
+ about-the-author.md
103
+ bibliography.md
104
+ imprint.md
105
+ config/
106
+ metadata.yaml
107
+ export-settings.yaml
108
+ voice-settings.yaml
109
+ assets/
110
+ covers/
111
+ images/
112
+ fonts/
113
+ templates/
114
+ output/
115
+ pyproject.toml
116
+ ```
117
+
118
+ ## Configuration
119
+
120
+ ### export-settings.yaml
121
+
122
+ Controls output formats, TOC behavior, and section ordering per book type (ebook, paperback, hardcover, audiobook).
123
+
124
+ ### voice-settings.yaml
125
+
126
+ TTS configuration: language, voice, and sections to skip during audio generation.
127
+
128
+ ### metadata.yaml
129
+
130
+ Pandoc metadata: title, author, date, language.
131
+
132
+ ## Available Commands
133
+
134
+ ### Export
135
+
136
+ | Command | Description |
137
+ |---------|-------------|
138
+ | `export-pdf` / `export-p` | Export PDF |
139
+ | `export-epub` / `export-e` | Export EPUB |
140
+ | `export-docx` / `export-d` | Export DOCX |
141
+ | `export-html` / `export-h` | Export HTML |
142
+ | `export-md` | Export Markdown |
143
+ | `export-all` | Export all formats |
144
+ | `export-all-with-cover` | Export all with cover |
145
+ | `export-pvp` | Print version (paperback) |
146
+ | `export-pvh` | Print version (hardcover) |
147
+
148
+ All export commands have a `-safe` variant (e.g. `export-pdf-safe`) that skips source preprocessing for fast, non-destructive draft builds.
149
+
150
+ ### Audiobook
151
+
152
+ | Command | Description |
153
+ |---------|-------------|
154
+ | `manuscripta-audiobook` | Generate MP3 audiobook |
155
+
156
+ ### Translation
157
+
158
+ | Command | Description |
159
+ |---------|-------------|
160
+ | `translate-en-de` | English to German (DeepL) |
161
+ | `translate-de-en` | German to English (DeepL) |
162
+ | `translate-book-en-de` | English to German (LMStudio) |
163
+ | `translate-book-de-en` | German to English (LMStudio) |
164
+
165
+ ### Project Management
166
+
167
+ | Command | Description |
168
+ |---------|-------------|
169
+ | `manuscripta-init` | Initialize new book project |
170
+ | `create-chapters` | Create chapter files |
171
+ | `reorder-chapters` | Reorder and rename chapters |
172
+ | `manuscripta-tag` | Generate release tag message |
173
+
174
+ ## Module Structure
175
+
176
+ ```
177
+ manuscripta/
178
+ export/ # PDF, EPUB, DOCX, HTML, Markdown export
179
+ audiobook/ # TTS-based audiobook generation
180
+ tts/ # Pluggable TTS backends (Edge, gTTS, pyttsx3, ElevenLabs)
181
+ translation/ # DeepL and LMStudio translation
182
+ markdown/ # Markdown processing (quotes, links, emojis, TOC)
183
+ paths/ # Path conversion (absolute/relative, image tags)
184
+ images/ # Image conversion, generation, injection
185
+ project/ # Project init, chapters, metadata, tagging
186
+ config/ # Config file loading
187
+ enums/ # Book type enum
188
+ utils/ # Pandoc batch, git cache, bulk operations
189
+ data/ # Emoji/symbol maps, JSON data files
190
+ ```
191
+
192
+ ## Companion Tools
193
+
194
+ - [manuscript-tools](https://pypi.org/project/manuscript-tools/) - Validation, sanitization and metrics for Markdown manuscripts. Install separately for linting capabilities.
195
+
196
+ ## License
197
+
198
+ MIT
199
+
@@ -0,0 +1,164 @@
1
+ # manuscripta
2
+
3
+ Book production pipeline for authors and self-publishers.
4
+
5
+ Multi-format export (PDF, EPUB, DOCX, HTML, Markdown), audiobook generation, translation, and manuscript tooling, powered by Pandoc.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ pip install manuscripta
11
+ ```
12
+
13
+ Or with Poetry:
14
+
15
+ ```bash
16
+ poetry add manuscripta
17
+ ```
18
+
19
+ ## Requirements
20
+
21
+ - Python 3.11+
22
+ - [Pandoc](https://pandoc.org/installing.html) installed and available on PATH
23
+ - For audiobook generation: internet connection (Edge TTS) or local TTS engine
24
+
25
+ ## Quick Start
26
+
27
+ Inside your book repository root:
28
+
29
+ ```bash
30
+ # Export to PDF
31
+ export-pdf
32
+
33
+ # Export to EPUB with cover
34
+ export-ewc --cover assets/covers/cover.jpg
35
+
36
+ # Export all formats
37
+ export-all
38
+
39
+ # Safe export (no source modifications, good for drafts)
40
+ export-pdf-safe
41
+
42
+ # Generate audiobook
43
+ manuscripta-audiobook --engine edge --voice en-US-JennyNeural
44
+
45
+ # Initialize a new book project
46
+ manuscripta-init
47
+ ```
48
+
49
+ ## Book Repository Structure
50
+
51
+ Each book repository should follow this layout:
52
+
53
+ ```
54
+ my-book/
55
+ manuscript/
56
+ front-matter/
57
+ toc.md
58
+ toc-print.md
59
+ foreword.md
60
+ preface.md
61
+ chapters/
62
+ 01-chapter-one.md
63
+ 02-chapter-two.md
64
+ back-matter/
65
+ epilogue.md
66
+ glossary.md
67
+ acknowledgments.md
68
+ about-the-author.md
69
+ bibliography.md
70
+ imprint.md
71
+ config/
72
+ metadata.yaml
73
+ export-settings.yaml
74
+ voice-settings.yaml
75
+ assets/
76
+ covers/
77
+ images/
78
+ fonts/
79
+ templates/
80
+ output/
81
+ pyproject.toml
82
+ ```
83
+
84
+ ## Configuration
85
+
86
+ ### export-settings.yaml
87
+
88
+ Controls output formats, TOC behavior, and section ordering per book type (ebook, paperback, hardcover, audiobook).
89
+
90
+ ### voice-settings.yaml
91
+
92
+ TTS configuration: language, voice, and sections to skip during audio generation.
93
+
94
+ ### metadata.yaml
95
+
96
+ Pandoc metadata: title, author, date, language.
97
+
98
+ ## Available Commands
99
+
100
+ ### Export
101
+
102
+ | Command | Description |
103
+ |---------|-------------|
104
+ | `export-pdf` / `export-p` | Export PDF |
105
+ | `export-epub` / `export-e` | Export EPUB |
106
+ | `export-docx` / `export-d` | Export DOCX |
107
+ | `export-html` / `export-h` | Export HTML |
108
+ | `export-md` | Export Markdown |
109
+ | `export-all` | Export all formats |
110
+ | `export-all-with-cover` | Export all with cover |
111
+ | `export-pvp` | Print version (paperback) |
112
+ | `export-pvh` | Print version (hardcover) |
113
+
114
+ All export commands have a `-safe` variant (e.g. `export-pdf-safe`) that skips source preprocessing for fast, non-destructive draft builds.
115
+
116
+ ### Audiobook
117
+
118
+ | Command | Description |
119
+ |---------|-------------|
120
+ | `manuscripta-audiobook` | Generate MP3 audiobook |
121
+
122
+ ### Translation
123
+
124
+ | Command | Description |
125
+ |---------|-------------|
126
+ | `translate-en-de` | English to German (DeepL) |
127
+ | `translate-de-en` | German to English (DeepL) |
128
+ | `translate-book-en-de` | English to German (LMStudio) |
129
+ | `translate-book-de-en` | German to English (LMStudio) |
130
+
131
+ ### Project Management
132
+
133
+ | Command | Description |
134
+ |---------|-------------|
135
+ | `manuscripta-init` | Initialize new book project |
136
+ | `create-chapters` | Create chapter files |
137
+ | `reorder-chapters` | Reorder and rename chapters |
138
+ | `manuscripta-tag` | Generate release tag message |
139
+
140
+ ## Module Structure
141
+
142
+ ```
143
+ manuscripta/
144
+ export/ # PDF, EPUB, DOCX, HTML, Markdown export
145
+ audiobook/ # TTS-based audiobook generation
146
+ tts/ # Pluggable TTS backends (Edge, gTTS, pyttsx3, ElevenLabs)
147
+ translation/ # DeepL and LMStudio translation
148
+ markdown/ # Markdown processing (quotes, links, emojis, TOC)
149
+ paths/ # Path conversion (absolute/relative, image tags)
150
+ images/ # Image conversion, generation, injection
151
+ project/ # Project init, chapters, metadata, tagging
152
+ config/ # Config file loading
153
+ enums/ # Book type enum
154
+ utils/ # Pandoc batch, git cache, bulk operations
155
+ data/ # Emoji/symbol maps, JSON data files
156
+ ```
157
+
158
+ ## Companion Tools
159
+
160
+ - [manuscript-tools](https://pypi.org/project/manuscript-tools/) - Validation, sanitization and metrics for Markdown manuscripts. Install separately for linting capabilities.
161
+
162
+ ## License
163
+
164
+ MIT
@@ -0,0 +1,187 @@
1
+ [project]
2
+ name = "manuscripta"
3
+ version = "0.1.0"
4
+ description = "Book production pipeline for authors and self-publishers. Multi-format export (PDF, EPUB, DOCX, HTML, Markdown), audiobook generation, translation, and manuscript tooling."
5
+ readme = "README.md"
6
+ license = "MIT"
7
+ requires-python = ">=3.11,<4.0"
8
+ keywords = ["book", "publishing", "pandoc", "epub", "audiobook", "self-publishing", "kdp"]
9
+ classifiers = [
10
+ "Development Status :: 3 - Alpha",
11
+ "Intended Audience :: End Users/Desktop",
12
+ "Topic :: Text Processing :: Markup :: Markdown",
13
+ "License :: OSI Approved :: MIT License",
14
+ "Programming Language :: Python :: 3.11",
15
+ "Programming Language :: Python :: 3.12",
16
+ "Programming Language :: Python :: 3.13",
17
+ ]
18
+
19
+ [[project.authors]]
20
+ name = "Asterios Raptis"
21
+ email = "asteri.raptis@gmail.com"
22
+
23
+ [project.urls]
24
+ Homepage = "https://github.com/astrapi69/manuscripta"
25
+ Repository = "https://github.com/astrapi69/manuscripta"
26
+ Issues = "https://github.com/astrapi69/manuscripta/issues"
27
+
28
+ [project.scripts]
29
+ # --- Main commands ---
30
+ manuscripta-export = "manuscripta.export.book:main"
31
+ manuscripta-export-comic = "manuscripta.export.comic:main"
32
+ manuscripta-audiobook = "manuscripta.audiobook.generator:main"
33
+ manuscripta-init = "manuscripta.project.init:main"
34
+ manuscripta-tag = "manuscripta.project.tag_message:main"
35
+
36
+ # --- Export shortcuts ---
37
+ export-shortcuts = "manuscripta.export.shortcuts:main"
38
+ export-epub = "manuscripta.export.shortcuts:export_epub"
39
+ export-epub2 = "manuscripta.export.shortcuts:export_epub2"
40
+ export-e = "manuscripta.export.shortcuts:export_epub"
41
+ export-e2 = "manuscripta.export.shortcuts:export_epub2"
42
+ export-epub-with-cover = "manuscripta.export.shortcuts:export_epub_with_cover"
43
+ export-epub2-with-cover = "manuscripta.export.shortcuts:export_epub2_with_cover"
44
+ export-ewc = "manuscripta.export.shortcuts:export_epub_with_cover"
45
+ export-e2wc = "manuscripta.export.shortcuts:export_epub2_with_cover"
46
+ export-print-version-epub = "manuscripta.export.shortcuts:export_print_version_epub"
47
+ export-pve = "manuscripta.export.shortcuts:export_print_version_epub"
48
+ export-print-version-paperback = "manuscripta.export.shortcuts:export_print_version_paperback"
49
+ export-pvp = "manuscripta.export.shortcuts:export_print_version_paperback"
50
+ export-print-version-hardcover = "manuscripta.export.shortcuts:export_print_version_hardcover"
51
+ export-pvh = "manuscripta.export.shortcuts:export_print_version_hardcover"
52
+ export-markdown = "manuscripta.export.shortcuts:export_markdown"
53
+ export-md = "manuscripta.export.shortcuts:export_markdown"
54
+ export-pdf = "manuscripta.export.shortcuts:export_pdf"
55
+ export-p = "manuscripta.export.shortcuts:export_pdf"
56
+ export-docx = "manuscripta.export.shortcuts:export_docx"
57
+ export-d = "manuscripta.export.shortcuts:export_docx"
58
+ export-html = "manuscripta.export.shortcuts:export_html"
59
+ export-h = "manuscripta.export.shortcuts:export_html"
60
+ export-all-with-cover = "manuscripta.export.shortcuts:export_all_formats_with_cover"
61
+ export-all = "manuscripta.export.shortcuts:export_all_formats"
62
+ # Safe shortcuts (skip Step 1 & 4)
63
+ export-pdf-safe = "manuscripta.export.shortcuts:export_pdf_safe"
64
+ export-ps = "manuscripta.export.shortcuts:export_pdf_safe"
65
+ export-epub-safe = "manuscripta.export.shortcuts:export_epub_safe"
66
+ export-es = "manuscripta.export.shortcuts:export_epub_safe"
67
+ export-docx-safe = "manuscripta.export.shortcuts:export_docx_safe"
68
+ export-ds = "manuscripta.export.shortcuts:export_docx_safe"
69
+ export-markdown-safe = "manuscripta.export.shortcuts:export_markdown_safe"
70
+ export-mds = "manuscripta.export.shortcuts:export_markdown_safe"
71
+ export-html-safe = "manuscripta.export.shortcuts:export_html_safe"
72
+ export-hs = "manuscripta.export.shortcuts:export_html_safe"
73
+ export-print-version-paperback-safe = "manuscripta.export.shortcuts:export_print_version_paperback_safe"
74
+ export-pvps = "manuscripta.export.shortcuts:export_print_version_paperback_safe"
75
+ export-print-version-hardcover-safe = "manuscripta.export.shortcuts:export_print_version_hardcover_safe"
76
+ export-pvhs = "manuscripta.export.shortcuts:export_print_version_hardcover_safe"
77
+
78
+ # --- Comic shortcuts ---
79
+ export-comic-html = "manuscripta.export.shortcuts_comic:export_comic_html"
80
+ export-comic-pdf = "manuscripta.export.shortcuts_comic:export_comic_pdf"
81
+
82
+ # --- Init shortcuts ---
83
+ update-mdv = "manuscripta.project.shortcuts_init:run_update_metadata_values"
84
+ init-bp = "manuscripta.project.shortcuts_init:run_init_book_project"
85
+
86
+ # --- Markdown tools ---
87
+ fix-german-quotes = "manuscripta.markdown.german_quotes:main"
88
+ replace-md-bullet-points = "manuscripta.markdown.bullet_points:main"
89
+ unbold-md-headers = "manuscripta.markdown.unbold_headers:main"
90
+ replace-emojis = "manuscripta.markdown.emojis:main"
91
+
92
+ # --- Translation (DeepL) ---
93
+ translate = "manuscripta.translation.shortcuts:translate"
94
+ translate-de-es = "manuscripta.translation.shortcuts:translate_manuscript_from_german_to_spanish"
95
+ translate-en-es = "manuscripta.translation.shortcuts:translate_manuscript_from_english_to_spanish"
96
+ translate-en-de = "manuscripta.translation.shortcuts:translate_manuscript_to_german"
97
+ translate-de-en = "manuscripta.translation.shortcuts:translate_manuscript_from_german_to_english"
98
+ translate-book-deepl = "manuscripta.translation.deepl:main"
99
+
100
+ # --- Translation (LMStudio) ---
101
+ translate-book = "manuscripta.translation.lmstudio:main"
102
+ translate-book-lmstudio = "manuscripta.translation.lmstudio:main"
103
+ translate-book-en-es = "manuscripta.translation.shortcuts_lms:translate_manuscript_from_english_to_spanish"
104
+ translate-book-en-de = "manuscripta.translation.shortcuts_lms:translate_manuscript_from_english_to_german"
105
+ translate-book-en-fr = "manuscripta.translation.shortcuts_lms:translate_manuscript_from_english_to_french"
106
+ translate-book-de-en = "manuscripta.translation.shortcuts_lms:translate_manuscript_from_german_to_english"
107
+
108
+ # --- Utilities ---
109
+ full-export = "manuscripta.export.book:main"
110
+ generate-audiobook = "manuscripta.audiobook.generator:main"
111
+ reorder-chapters = "manuscripta.project.reorder:main"
112
+ make-tag-message = "manuscripta.project.tag_message:main"
113
+ bulk-change-ext = "manuscripta.utils.bulk_extension:main"
114
+ convert-images = "manuscripta.images.convert:main"
115
+ generate-images = "manuscripta.images.generate:main"
116
+ generate-images-deepai = "manuscripta.images.generate_deepai:main"
117
+ inject-images = "manuscripta.images.inject:main"
118
+ pandoc-batch = "manuscripta.utils.pandoc_batch:main"
119
+ clean-git-cache = "manuscripta.utils.git_cache:main"
120
+ create-chapters = "manuscripta.project.chapters:main"
121
+ update-metadata-values = "manuscripta.project.metadata:main"
122
+ convert-paths-to-absolute = "manuscripta.paths.to_absolute:main"
123
+ convert-paths-to-relative = "manuscripta.paths.to_relative:main"
124
+ print-version-build = "manuscripta.export.print_version:main"
125
+ strip-links = "manuscripta.markdown.strip_links:main"
126
+ normalize-toc = "manuscripta.markdown.normalize_toc:main"
127
+
128
+ [tool.poetry.dependencies]
129
+ python = ">=3.11,<4.0"
130
+ pandas = "^2.3.2"
131
+ python-dotenv = "^1.1.0"
132
+ requests = "^2.32.5"
133
+ pillow = "^11.2.1"
134
+ pyyaml = "^6.0.2"
135
+ toml = "^0.10.2"
136
+ ftfy = "^6.3.1"
137
+ questionary = "^2.1.1"
138
+ pymupdf = "^1.26.4"
139
+ edge-tts = "^7.2.7"
140
+ ebooklib = "^0.20"
141
+ beautifulsoup4 = "^4.14.3"
142
+
143
+ [tool.poetry.group.dev.dependencies]
144
+ hypothesis = "^6.138.13"
145
+ types-pyyaml = "^6.0.12.20250915"
146
+ types-toml = "^0.10.8.20240310"
147
+ ruff = "^0.14.0"
148
+ black = "^25.9.0"
149
+ codespell = "^2.4.1"
150
+ pre-commit = "^4.3.0"
151
+ types-requests = "^2.32.4.20250913"
152
+ mypy = "^1.11"
153
+ pytest-cov = "^4.1.0"
154
+
155
+ [tool.poetry.group.test.dependencies]
156
+ hypothesis = ">=6,<7"
157
+ pytest = "^8.2"
158
+ pytest-mock = "^3.10.0"
159
+
160
+ [tool.pytest.ini_options]
161
+ testpaths = ["tests"]
162
+ addopts = "--cov=src/manuscripta --cov-report=term-missing"
163
+ pythonpath = ["src"]
164
+
165
+ [build-system]
166
+ requires = ["poetry-core>=2.0.0,<3.0.0"]
167
+ build-backend = "poetry.core.masonry.api"
168
+
169
+ [tool.mypy]
170
+ python_version = "3.11"
171
+ ignore_missing_imports = true
172
+ no_implicit_optional = false
173
+ check_untyped_defs = false
174
+ warn_unused_ignores = false
175
+ allow_redefinition = true
176
+
177
+ [[tool.mypy.overrides]]
178
+ module = "tests.*"
179
+ disallow_untyped_defs = false
180
+ check_untyped_defs = false
181
+
182
+ [tool.ruff]
183
+ fix = true
184
+ unsafe-fixes = true
185
+
186
+ [tool.codespell]
187
+ ignore-words-list = "prozess"
@@ -0,0 +1,3 @@
1
+ """manuscripta - Book production pipeline for authors and self-publishers."""
2
+
3
+ __version__ = "0.1.0"