Validation, sanitization and metrics for Markdown manuscripts.
Project description
manuscript-tools
A QA toolkit for German Markdown manuscripts. Validates style, sanitizes encoding, converts quotation marks, and measures readability.
Installation
pip install manuscript-tools
Or as project dependency:
poetry add manuscript-tools
Commands
| Command | Description |
|---|---|
ms-check |
Style checks (5 core rules, --strict adds 3 prose rules) |
ms-sanitize |
Fix encoding, strip invisible chars, normalize Unicode |
ms-quotes |
Convert quotation marks to German typographic style „ " ‚ ' |
ms-metrics |
Word counts, sentence analysis, Flesch-DE readability score |
ms-validate |
Full QA pipeline (sanitize + quotes + check + readability) |
Quick start
# Full QA pipeline
ms-validate manuscript/
# Style check only (core rules)
ms-check manuscript/
# Style check with prose analysis (filler words, passive voice, sentence length)
ms-check manuscript/ --strict
# Readability report
ms-metrics manuscript/
# Fix quotation marks (dry-run)
ms-quotes manuscript/ --dry-run
Rules
Core (always active):
no-dashes, no-invisible-chars, no-repeated-words, no-double-spaces, non-german-quotes
Prose (with --strict or ms-validate):
max-sentence-length, filler-words-de, passive-voice-de
Custom rules are simple callables with the signature (text: str, path: Path) -> list[StyleViolation]. See the Wiki for a step-by-step tutorial.
Configuration
Configure via [tool.manuscript-tools] in your pyproject.toml:
[tool.manuscript-tools]
rules = ["max-sentence-length"] # merge with defaults
disable = ["passive-voice-de"] # remove from active set
max-sentence-words = 30 # default: 40
flesch-target = [65, 80] # warn if outside range
filler-words-extra = ["definitiv", "absolut"] # extend filler list
No config = all defaults. rules merges with defaults (union). disable removes from the active set and takes precedence over rules. See the Wiki for details.
Readability
ms-metrics computes the Flesch-DE reading ease score (Amstad, 1978) with German-optimized syllable counting. Score interpretation:
| Score | Level | Typical use |
|---|---|---|
| 80-100 | Very easy | Children's books |
| 60-80 | Easy to medium | Fiction, non-fiction |
| 30-60 | Difficult | Journalism, academic |
| 0-30 | Very difficult | Legal, scientific |
Development
git clone https://github.com/astrapi69/manuscript-tools.git
cd manuscript-tools
make install-dev
make ci # lint + format check + 112 tests
Documentation
Full documentation is available in the Wiki:
- Installation and Setup
- Usage
- Writing Custom Rules
- Integration into Projects
- Publishing to PyPI
- Development and CI
- FAQ
- Quick Start for Book Projects
- Configuration
License
BSD 3-Clause. See LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file manuscript_tools-0.6.0.tar.gz.
File metadata
- Download URL: manuscript_tools-0.6.0.tar.gz
- Upload date:
- Size: 21.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.11.13 Linux/6.8.0-101-lowlatency
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ff08619cba087886c0b9b97e70a9f02733f42a6b1e2b7ca2d9b186ecd9cad96
|
|
| MD5 |
a80b467c75dca15bd02bd28eed68a901
|
|
| BLAKE2b-256 |
c876787bc8c697393dc40053858e9585db62f9dfc97eacb9ece2983ebef32007
|
File details
Details for the file manuscript_tools-0.6.0-py3-none-any.whl.
File metadata
- Download URL: manuscript_tools-0.6.0-py3-none-any.whl
- Upload date:
- Size: 25.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.11.13 Linux/6.8.0-101-lowlatency
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d93cbc74b3542835119eb49a6e51569e00f574e007df403606a7454594838422
|
|
| MD5 |
d2676c84bbf8ff8d2693c95f95eed8bf
|
|
| BLAKE2b-256 |
d75ad8c3786dd4b9d154800894fcec16c890ce20b818b2df1693e98bb4bb4e98
|