scanlayer 1.0.2__tar.gz → 1.0.3__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 (43) hide show
  1. {scanlayer-1.0.2/scanlayer.egg-info → scanlayer-1.0.3}/PKG-INFO +25 -27
  2. {scanlayer-1.0.2 → scanlayer-1.0.3}/README.md +23 -26
  3. {scanlayer-1.0.2 → scanlayer-1.0.3}/pyproject.toml +2 -2
  4. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/pdf/fonts.py +4 -1
  5. {scanlayer-1.0.2 → scanlayer-1.0.3/scanlayer.egg-info}/PKG-INFO +25 -27
  6. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer.egg-info/requires.txt +1 -0
  7. {scanlayer-1.0.2 → scanlayer-1.0.3}/LICENSE.md +0 -0
  8. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/__init__.py +0 -0
  9. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/__main__.py +0 -0
  10. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/cli/__init__.py +0 -0
  11. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/cli/dry_run.py +0 -0
  12. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/cli/parser.py +0 -0
  13. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/cli/run.py +0 -0
  14. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/config.py +0 -0
  15. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/fonts/DejaVuSans.ttf +0 -0
  16. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/layout/__init__.py +0 -0
  17. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/layout/columns.py +0 -0
  18. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/main.py +0 -0
  19. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/ocr/__init__.py +0 -0
  20. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/ocr/engine.py +0 -0
  21. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/ocr/export.py +0 -0
  22. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/pdf/__init__.py +0 -0
  23. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/pdf/builder.py +0 -0
  24. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/preprocessing/__init__.py +0 -0
  25. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/preprocessing/enhance.py +0 -0
  26. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/utils/__init__.py +0 -0
  27. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/utils/debug_image.py +0 -0
  28. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/utils/errors.py +0 -0
  29. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/utils/logger.py +0 -0
  30. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer/utils/validators.py +0 -0
  31. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer.egg-info/SOURCES.txt +0 -0
  32. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer.egg-info/dependency_links.txt +0 -0
  33. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer.egg-info/entry_points.txt +0 -0
  34. {scanlayer-1.0.2 → scanlayer-1.0.3}/scanlayer.egg-info/top_level.txt +0 -0
  35. {scanlayer-1.0.2 → scanlayer-1.0.3}/setup.cfg +0 -0
  36. {scanlayer-1.0.2 → scanlayer-1.0.3}/tests/test_columns.py +0 -0
  37. {scanlayer-1.0.2 → scanlayer-1.0.3}/tests/test_config.py +0 -0
  38. {scanlayer-1.0.2 → scanlayer-1.0.3}/tests/test_dry_run.py +0 -0
  39. {scanlayer-1.0.2 → scanlayer-1.0.3}/tests/test_export.py +0 -0
  40. {scanlayer-1.0.2 → scanlayer-1.0.3}/tests/test_fonts.py +0 -0
  41. {scanlayer-1.0.2 → scanlayer-1.0.3}/tests/test_main_integration.py +0 -0
  42. {scanlayer-1.0.2 → scanlayer-1.0.3}/tests/test_pdf_builder.py +0 -0
  43. {scanlayer-1.0.2 → scanlayer-1.0.3}/tests/test_validators.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scanlayer
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: Image (scan/photo) to searchable PDF, or raw OCR export, via Tesseract.
5
5
  Author: Hyacinthe-primus
6
6
  Author-email: Hyacinthe-primus <hyacintheatho91@gmail.com>
@@ -19,6 +19,7 @@ Requires-Dist: numpy>=1.24.0
19
19
  Requires-Dist: pdf2image>=1.17.0
20
20
  Provides-Extra: test
21
21
  Requires-Dist: pytest>=7.0; extra == "test"
22
+ Requires-Dist: pytest-cov>=4.1; extra == "test"
22
23
  Provides-Extra: yaml
23
24
  Requires-Dist: PyYAML>=6.0; extra == "yaml"
24
25
  Dynamic: license-file
@@ -26,20 +27,27 @@ Dynamic: license-file
26
27
  <div align="center">
27
28
  <img src="scanlayer.png" alt="scanlayer" width="110"/>
28
29
  <h1>scanlayer</h1>
29
- <p><em>Scanned image or photographed document &rarr; searchable PDF, or raw OCR text/JSON/TSV/hOCR.</em></p>
30
+ <p><em> Turn scanned image or photographed document into searchable PDF, or raw OCR text/JSON/TSV/hOCR.</em></p>
30
31
  </div>
31
32
 
32
33
  **Turn a scanned image or photographed document into a searchable PDF**, or
33
34
  export the raw OCR result as plain text, JSON, TSV, or hOCR. Use it as a
34
35
  command-line tool or as a Python library; both are the same engine underneath.
35
36
 
36
- [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue)](#)
37
+ [![PyPI version](https://badge.fury.io/py/scanlayer.svg)](https://badge.fury.io/py/scanlayer)
38
+ [![codecov](https://codecov.io/gh/Hyacinthe-primus/scanlayer/branch/main/graph/badge.svg)](https://codecov.io/gh/Hyacinthe-primus/scanlayer)
39
+ [![Python](https://img.shields.io/badge/python-3.9%2B-3776AB)](#)
37
40
  ![Platforms](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)
38
41
  [![](https://img.shields.io/badge/-documentation-green)](https://Hyacinthe-primus.github.io/scanlayer/)
42
+ [![GitHub last commit](https://img.shields.io/github/last-commit/Hyacinthe-primus/scanlayer)](https://github.com/Hyacinthe-primus/scanlayer)
39
43
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE.md)
40
44
 
41
45
  ---
42
46
 
47
+ ## Documentation
48
+
49
+ [Full documentation](https://Hyacinthe-primus.github.io/scanlayer/) – installation, CLI & API reference, configuration, output formats, examples, and troubleshooting.
50
+
43
51
  ## What it does
44
52
 
45
53
  A scanned invoice, a phone photo of a letter, a stack of photographed pages:
@@ -172,28 +180,6 @@ scanlayer.convert_merge(["page1.jpg", "page2.jpg", "page3.jpg"], "report.pdf")
172
180
  scanlayer.convert("invoice.jpg", "invoice.json", output_format="json")
173
181
  ```
174
182
 
175
- ## Documentation
176
-
177
- | | |
178
- |---|---|
179
- | **[Installation](https://Hyacinthe-primus.github.io/scanlayer/installation.html)** | Tesseract, poppler, and the two ways to install scanlayer itself |
180
- | **[Examples](https://Hyacinthe-primus.github.io/scanlayer/examples.html)** | Every feature, CLI and library side by side |
181
- | **[CLI Reference](https://Hyacinthe-primus.github.io/scanlayer/cli-reference.html)** | Every flag and exit code |
182
- | **[Library API](https://Hyacinthe-primus.github.io/scanlayer/library-api.html)** | `convert()`, `convert_batch()`, `convert_merge()`, exceptions, and the full low-level pipeline API |
183
- | **[Feature Catalog](https://Hyacinthe-primus.github.io/scanlayer/features.html)** | Everything scanlayer does, by pipeline stage |
184
- | **[Configuration](https://Hyacinthe-primus.github.io/scanlayer/configuration.html)** | `configure()`, config files, precedence, every tunable |
185
- | **[Output Formats](https://Hyacinthe-primus.github.io/scanlayer/output-formats.html)** | The `pdf`/`txt`/`json`/`tsv`/`hocr` schemas |
186
- | **[Multi-Page & Merge](https://Hyacinthe-primus.github.io/scanlayer/multi-page-merge.html)** | Batching, merging, native PDF input |
187
- | **[Debug Visualization](https://Hyacinthe-primus.github.io/scanlayer/debug-visualization.html)** | Reading the `--debug-image` confidence overlay |
188
- | **[Bundling Tesseract](https://Hyacinthe-primus.github.io/scanlayer/bundling-tesseract.html)** | Shipping your own Tesseract binary |
189
- | **[Troubleshooting](https://Hyacinthe-primus.github.io/scanlayer/troubleshooting.html)** | Common errors and fixes |
190
- | **[Roadmap & Limitations](https://Hyacinthe-primus.github.io/scanlayer/roadmap.html)** | What's missing and what's deliberately out of scope |
191
-
192
- The site is published from the `gh-pages` branch at
193
- https://Hyacinthe-primus.github.io/scanlayer/. To browse it locally, open
194
- `index.html` in a `gh-pages` worktree (e.g. `git worktree add <path> gh-pages`);
195
- it has no build step or server-side dependency.
196
-
197
183
  ## Repository layout
198
184
 
199
185
  ```
@@ -226,8 +212,20 @@ Bug reports, fixes, and feature discussions are welcome: see
226
212
  [CONTRIBUTING.md](CONTRIBUTING.md) for how to set up a development
227
213
  environment and what to include in a pull request. There is a `tests/`
228
214
  directory (now including `utils/validators.py` and the `--dry-run` flag, with
229
- cross-platform coverage for Tesseract discovery on Windows/macOS/Linux) and it runs with `pytest`, but no CI yet; see [Roadmap & Limitations](https://Hyacinthe-primus.github.io/scanlayer/roadmap.html) and the [Adding tests](CONTRIBUTING.md#adding-tests) section of the contributing guide for where coverage is thinnest.
215
+ cross-platform coverage for Tesseract discovery on Windows/macOS/Linux) and it runs with `pytest` automatically in CI on every push and pull request; see [Roadmap & Limitations](https://Hyacinthe-primus.github.io/scanlayer/roadmap.html) and the [Adding tests](CONTRIBUTING.md#adding-tests) section of the contributing guide for where coverage is thinnest.
216
+
217
+ ## Support the project
218
+
219
+ scanlayer is free and MIT-licensed, maintained in spare time. If it saves you
220
+ time, there is no fee – but a little support goes a long way:
221
+
222
+ - **Star the repository** – the simplest signal that the project is worth
223
+ maintaining.
224
+ - **Report bugs or request features** by opening a
225
+ [GitHub Issue](https://github.com/Hyacinthe-primus/scanlayer/issues).
226
+ - **Contribute** a fix, test, or example – see
227
+ [CONTRIBUTING.md](CONTRIBUTING.md).
230
228
 
231
229
  ## License
232
230
 
233
- [MIT](LICENSE.md).
231
+ This project is licensed under the [MIT License](LICENSE.md).
@@ -1,20 +1,27 @@
1
1
  <div align="center">
2
2
  <img src="scanlayer.png" alt="scanlayer" width="110"/>
3
3
  <h1>scanlayer</h1>
4
- <p><em>Scanned image or photographed document &rarr; searchable PDF, or raw OCR text/JSON/TSV/hOCR.</em></p>
4
+ <p><em> Turn scanned image or photographed document into searchable PDF, or raw OCR text/JSON/TSV/hOCR.</em></p>
5
5
  </div>
6
6
 
7
7
  **Turn a scanned image or photographed document into a searchable PDF**, or
8
8
  export the raw OCR result as plain text, JSON, TSV, or hOCR. Use it as a
9
9
  command-line tool or as a Python library; both are the same engine underneath.
10
10
 
11
- [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue)](#)
11
+ [![PyPI version](https://badge.fury.io/py/scanlayer.svg)](https://badge.fury.io/py/scanlayer)
12
+ [![codecov](https://codecov.io/gh/Hyacinthe-primus/scanlayer/branch/main/graph/badge.svg)](https://codecov.io/gh/Hyacinthe-primus/scanlayer)
13
+ [![Python](https://img.shields.io/badge/python-3.9%2B-3776AB)](#)
12
14
  ![Platforms](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)
13
15
  [![](https://img.shields.io/badge/-documentation-green)](https://Hyacinthe-primus.github.io/scanlayer/)
16
+ [![GitHub last commit](https://img.shields.io/github/last-commit/Hyacinthe-primus/scanlayer)](https://github.com/Hyacinthe-primus/scanlayer)
14
17
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE.md)
15
18
 
16
19
  ---
17
20
 
21
+ ## Documentation
22
+
23
+ [Full documentation](https://Hyacinthe-primus.github.io/scanlayer/) – installation, CLI & API reference, configuration, output formats, examples, and troubleshooting.
24
+
18
25
  ## What it does
19
26
 
20
27
  A scanned invoice, a phone photo of a letter, a stack of photographed pages:
@@ -147,28 +154,6 @@ scanlayer.convert_merge(["page1.jpg", "page2.jpg", "page3.jpg"], "report.pdf")
147
154
  scanlayer.convert("invoice.jpg", "invoice.json", output_format="json")
148
155
  ```
149
156
 
150
- ## Documentation
151
-
152
- | | |
153
- |---|---|
154
- | **[Installation](https://Hyacinthe-primus.github.io/scanlayer/installation.html)** | Tesseract, poppler, and the two ways to install scanlayer itself |
155
- | **[Examples](https://Hyacinthe-primus.github.io/scanlayer/examples.html)** | Every feature, CLI and library side by side |
156
- | **[CLI Reference](https://Hyacinthe-primus.github.io/scanlayer/cli-reference.html)** | Every flag and exit code |
157
- | **[Library API](https://Hyacinthe-primus.github.io/scanlayer/library-api.html)** | `convert()`, `convert_batch()`, `convert_merge()`, exceptions, and the full low-level pipeline API |
158
- | **[Feature Catalog](https://Hyacinthe-primus.github.io/scanlayer/features.html)** | Everything scanlayer does, by pipeline stage |
159
- | **[Configuration](https://Hyacinthe-primus.github.io/scanlayer/configuration.html)** | `configure()`, config files, precedence, every tunable |
160
- | **[Output Formats](https://Hyacinthe-primus.github.io/scanlayer/output-formats.html)** | The `pdf`/`txt`/`json`/`tsv`/`hocr` schemas |
161
- | **[Multi-Page & Merge](https://Hyacinthe-primus.github.io/scanlayer/multi-page-merge.html)** | Batching, merging, native PDF input |
162
- | **[Debug Visualization](https://Hyacinthe-primus.github.io/scanlayer/debug-visualization.html)** | Reading the `--debug-image` confidence overlay |
163
- | **[Bundling Tesseract](https://Hyacinthe-primus.github.io/scanlayer/bundling-tesseract.html)** | Shipping your own Tesseract binary |
164
- | **[Troubleshooting](https://Hyacinthe-primus.github.io/scanlayer/troubleshooting.html)** | Common errors and fixes |
165
- | **[Roadmap & Limitations](https://Hyacinthe-primus.github.io/scanlayer/roadmap.html)** | What's missing and what's deliberately out of scope |
166
-
167
- The site is published from the `gh-pages` branch at
168
- https://Hyacinthe-primus.github.io/scanlayer/. To browse it locally, open
169
- `index.html` in a `gh-pages` worktree (e.g. `git worktree add <path> gh-pages`);
170
- it has no build step or server-side dependency.
171
-
172
157
  ## Repository layout
173
158
 
174
159
  ```
@@ -201,8 +186,20 @@ Bug reports, fixes, and feature discussions are welcome: see
201
186
  [CONTRIBUTING.md](CONTRIBUTING.md) for how to set up a development
202
187
  environment and what to include in a pull request. There is a `tests/`
203
188
  directory (now including `utils/validators.py` and the `--dry-run` flag, with
204
- cross-platform coverage for Tesseract discovery on Windows/macOS/Linux) and it runs with `pytest`, but no CI yet; see [Roadmap & Limitations](https://Hyacinthe-primus.github.io/scanlayer/roadmap.html) and the [Adding tests](CONTRIBUTING.md#adding-tests) section of the contributing guide for where coverage is thinnest.
189
+ cross-platform coverage for Tesseract discovery on Windows/macOS/Linux) and it runs with `pytest` automatically in CI on every push and pull request; see [Roadmap & Limitations](https://Hyacinthe-primus.github.io/scanlayer/roadmap.html) and the [Adding tests](CONTRIBUTING.md#adding-tests) section of the contributing guide for where coverage is thinnest.
190
+
191
+ ## Support the project
192
+
193
+ scanlayer is free and MIT-licensed, maintained in spare time. If it saves you
194
+ time, there is no fee – but a little support goes a long way:
195
+
196
+ - **Star the repository** – the simplest signal that the project is worth
197
+ maintaining.
198
+ - **Report bugs or request features** by opening a
199
+ [GitHub Issue](https://github.com/Hyacinthe-primus/scanlayer/issues).
200
+ - **Contribute** a fix, test, or example – see
201
+ [CONTRIBUTING.md](CONTRIBUTING.md).
205
202
 
206
203
  ## License
207
204
 
208
- [MIT](LICENSE.md).
205
+ This project is licensed under the [MIT License](LICENSE.md).
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "scanlayer"
7
- version = "1.0.2"
7
+ version = "1.0.3"
8
8
  description = "Image (scan/photo) to searchable PDF, or raw OCR export, via Tesseract."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -23,7 +23,7 @@ dependencies = [
23
23
  ]
24
24
 
25
25
  [project.optional-dependencies]
26
- test = ["pytest>=7.0"]
26
+ test = ["pytest>=7.0", "pytest-cov>=4.1"]
27
27
  yaml = ["PyYAML>=6.0"]
28
28
 
29
29
  [project.scripts]
@@ -12,6 +12,7 @@ Set config.FONT_PATH to force a specific TTF and skip auto-selection.
12
12
  from __future__ import annotations
13
13
 
14
14
  import os
15
+ import sys
15
16
 
16
17
  from reportlab.pdfbase import pdfmetrics
17
18
  from reportlab.pdfbase.cidfonts import UnicodeCIDFont
@@ -25,7 +26,9 @@ log = get_logger(__name__)
25
26
  FALLBACK_FONT = "Helvetica"
26
27
 
27
28
  _UNICODE_TTF_NAME = "ScanlayerUnicode"
28
- _UNICODE_TTF_PATH = os.path.join(os.path.dirname(__file__), "..", "fonts", "DejaVuSans.ttf")
29
+ _scanlayer_root = os.path.dirname(os.path.dirname(__file__))
30
+ _bundle_root = getattr(sys, "_MEIPASS", os.path.dirname(_scanlayer_root))
31
+ _UNICODE_TTF_PATH = os.path.join(_bundle_root, "scanlayer", "fonts", "DejaVuSans.ttf")
29
32
 
30
33
  _CUSTOM_TTF_NAME = "ScanlayerCustom"
31
34
  _custom_registered_path: str | None = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scanlayer
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: Image (scan/photo) to searchable PDF, or raw OCR export, via Tesseract.
5
5
  Author: Hyacinthe-primus
6
6
  Author-email: Hyacinthe-primus <hyacintheatho91@gmail.com>
@@ -19,6 +19,7 @@ Requires-Dist: numpy>=1.24.0
19
19
  Requires-Dist: pdf2image>=1.17.0
20
20
  Provides-Extra: test
21
21
  Requires-Dist: pytest>=7.0; extra == "test"
22
+ Requires-Dist: pytest-cov>=4.1; extra == "test"
22
23
  Provides-Extra: yaml
23
24
  Requires-Dist: PyYAML>=6.0; extra == "yaml"
24
25
  Dynamic: license-file
@@ -26,20 +27,27 @@ Dynamic: license-file
26
27
  <div align="center">
27
28
  <img src="scanlayer.png" alt="scanlayer" width="110"/>
28
29
  <h1>scanlayer</h1>
29
- <p><em>Scanned image or photographed document &rarr; searchable PDF, or raw OCR text/JSON/TSV/hOCR.</em></p>
30
+ <p><em> Turn scanned image or photographed document into searchable PDF, or raw OCR text/JSON/TSV/hOCR.</em></p>
30
31
  </div>
31
32
 
32
33
  **Turn a scanned image or photographed document into a searchable PDF**, or
33
34
  export the raw OCR result as plain text, JSON, TSV, or hOCR. Use it as a
34
35
  command-line tool or as a Python library; both are the same engine underneath.
35
36
 
36
- [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue)](#)
37
+ [![PyPI version](https://badge.fury.io/py/scanlayer.svg)](https://badge.fury.io/py/scanlayer)
38
+ [![codecov](https://codecov.io/gh/Hyacinthe-primus/scanlayer/branch/main/graph/badge.svg)](https://codecov.io/gh/Hyacinthe-primus/scanlayer)
39
+ [![Python](https://img.shields.io/badge/python-3.9%2B-3776AB)](#)
37
40
  ![Platforms](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)
38
41
  [![](https://img.shields.io/badge/-documentation-green)](https://Hyacinthe-primus.github.io/scanlayer/)
42
+ [![GitHub last commit](https://img.shields.io/github/last-commit/Hyacinthe-primus/scanlayer)](https://github.com/Hyacinthe-primus/scanlayer)
39
43
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE.md)
40
44
 
41
45
  ---
42
46
 
47
+ ## Documentation
48
+
49
+ [Full documentation](https://Hyacinthe-primus.github.io/scanlayer/) – installation, CLI & API reference, configuration, output formats, examples, and troubleshooting.
50
+
43
51
  ## What it does
44
52
 
45
53
  A scanned invoice, a phone photo of a letter, a stack of photographed pages:
@@ -172,28 +180,6 @@ scanlayer.convert_merge(["page1.jpg", "page2.jpg", "page3.jpg"], "report.pdf")
172
180
  scanlayer.convert("invoice.jpg", "invoice.json", output_format="json")
173
181
  ```
174
182
 
175
- ## Documentation
176
-
177
- | | |
178
- |---|---|
179
- | **[Installation](https://Hyacinthe-primus.github.io/scanlayer/installation.html)** | Tesseract, poppler, and the two ways to install scanlayer itself |
180
- | **[Examples](https://Hyacinthe-primus.github.io/scanlayer/examples.html)** | Every feature, CLI and library side by side |
181
- | **[CLI Reference](https://Hyacinthe-primus.github.io/scanlayer/cli-reference.html)** | Every flag and exit code |
182
- | **[Library API](https://Hyacinthe-primus.github.io/scanlayer/library-api.html)** | `convert()`, `convert_batch()`, `convert_merge()`, exceptions, and the full low-level pipeline API |
183
- | **[Feature Catalog](https://Hyacinthe-primus.github.io/scanlayer/features.html)** | Everything scanlayer does, by pipeline stage |
184
- | **[Configuration](https://Hyacinthe-primus.github.io/scanlayer/configuration.html)** | `configure()`, config files, precedence, every tunable |
185
- | **[Output Formats](https://Hyacinthe-primus.github.io/scanlayer/output-formats.html)** | The `pdf`/`txt`/`json`/`tsv`/`hocr` schemas |
186
- | **[Multi-Page & Merge](https://Hyacinthe-primus.github.io/scanlayer/multi-page-merge.html)** | Batching, merging, native PDF input |
187
- | **[Debug Visualization](https://Hyacinthe-primus.github.io/scanlayer/debug-visualization.html)** | Reading the `--debug-image` confidence overlay |
188
- | **[Bundling Tesseract](https://Hyacinthe-primus.github.io/scanlayer/bundling-tesseract.html)** | Shipping your own Tesseract binary |
189
- | **[Troubleshooting](https://Hyacinthe-primus.github.io/scanlayer/troubleshooting.html)** | Common errors and fixes |
190
- | **[Roadmap & Limitations](https://Hyacinthe-primus.github.io/scanlayer/roadmap.html)** | What's missing and what's deliberately out of scope |
191
-
192
- The site is published from the `gh-pages` branch at
193
- https://Hyacinthe-primus.github.io/scanlayer/. To browse it locally, open
194
- `index.html` in a `gh-pages` worktree (e.g. `git worktree add <path> gh-pages`);
195
- it has no build step or server-side dependency.
196
-
197
183
  ## Repository layout
198
184
 
199
185
  ```
@@ -226,8 +212,20 @@ Bug reports, fixes, and feature discussions are welcome: see
226
212
  [CONTRIBUTING.md](CONTRIBUTING.md) for how to set up a development
227
213
  environment and what to include in a pull request. There is a `tests/`
228
214
  directory (now including `utils/validators.py` and the `--dry-run` flag, with
229
- cross-platform coverage for Tesseract discovery on Windows/macOS/Linux) and it runs with `pytest`, but no CI yet; see [Roadmap & Limitations](https://Hyacinthe-primus.github.io/scanlayer/roadmap.html) and the [Adding tests](CONTRIBUTING.md#adding-tests) section of the contributing guide for where coverage is thinnest.
215
+ cross-platform coverage for Tesseract discovery on Windows/macOS/Linux) and it runs with `pytest` automatically in CI on every push and pull request; see [Roadmap & Limitations](https://Hyacinthe-primus.github.io/scanlayer/roadmap.html) and the [Adding tests](CONTRIBUTING.md#adding-tests) section of the contributing guide for where coverage is thinnest.
216
+
217
+ ## Support the project
218
+
219
+ scanlayer is free and MIT-licensed, maintained in spare time. If it saves you
220
+ time, there is no fee – but a little support goes a long way:
221
+
222
+ - **Star the repository** – the simplest signal that the project is worth
223
+ maintaining.
224
+ - **Report bugs or request features** by opening a
225
+ [GitHub Issue](https://github.com/Hyacinthe-primus/scanlayer/issues).
226
+ - **Contribute** a fix, test, or example – see
227
+ [CONTRIBUTING.md](CONTRIBUTING.md).
230
228
 
231
229
  ## License
232
230
 
233
- [MIT](LICENSE.md).
231
+ This project is licensed under the [MIT License](LICENSE.md).
@@ -7,6 +7,7 @@ pdf2image>=1.17.0
7
7
 
8
8
  [test]
9
9
  pytest>=7.0
10
+ pytest-cov>=4.1
10
11
 
11
12
  [yaml]
12
13
  PyYAML>=6.0
File without changes
File without changes
File without changes
File without changes
File without changes