inclusio 0.0.2__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.
- inclusio-0.0.2/PKG-INFO +248 -0
- inclusio-0.0.2/README.md +210 -0
- inclusio-0.0.2/inclusio/__init__.py +1 -0
- inclusio-0.0.2/inclusio/cli/__init__.py +1 -0
- inclusio-0.0.2/inclusio/cli/audit.py +397 -0
- inclusio-0.0.2/inclusio/cli/build.py +1789 -0
- inclusio-0.0.2/inclusio/cli/import_resume.py +370 -0
- inclusio-0.0.2/inclusio/cli/render.py +793 -0
- inclusio-0.0.2/inclusio/cli/sitemap.py +209 -0
- inclusio-0.0.2/inclusio/cli/tailor.py +940 -0
- inclusio-0.0.2/inclusio/emit/__init__.py +17 -0
- inclusio-0.0.2/inclusio/emit/pandoc.py +360 -0
- inclusio-0.0.2/inclusio/judge/__init__.py +72 -0
- inclusio-0.0.2/inclusio/judge/ats.py +385 -0
- inclusio-0.0.2/inclusio/judge/citations.py +375 -0
- inclusio-0.0.2/inclusio/judge/cloud_llm.py +272 -0
- inclusio-0.0.2/inclusio/judge/jd_fit.py +432 -0
- inclusio-0.0.2/inclusio/judge/local_llm.py +235 -0
- inclusio-0.0.2/inclusio/mcp/__init__.py +23 -0
- inclusio-0.0.2/inclusio/mcp/server.py +311 -0
- inclusio-0.0.2/inclusio/provenance/__init__.py +46 -0
- inclusio-0.0.2/inclusio/provenance/c2pa.py +259 -0
- inclusio-0.0.2/inclusio/provenance/pades.py +237 -0
- inclusio-0.0.2/inclusio/tools/__init__.py +1 -0
- inclusio-0.0.2/inclusio/tools/fix_semantic.py +157 -0
- inclusio-0.0.2/inclusio/tools/overlay.py +100 -0
- inclusio-0.0.2/inclusio/tools/stamp_pdfs.py +289 -0
- inclusio-0.0.2/inclusio.egg-info/PKG-INFO +248 -0
- inclusio-0.0.2/inclusio.egg-info/SOURCES.txt +71 -0
- inclusio-0.0.2/inclusio.egg-info/dependency_links.txt +1 -0
- inclusio-0.0.2/inclusio.egg-info/entry_points.txt +3 -0
- inclusio-0.0.2/inclusio.egg-info/requires.txt +19 -0
- inclusio-0.0.2/inclusio.egg-info/top_level.txt +1 -0
- inclusio-0.0.2/pyproject.toml +173 -0
- inclusio-0.0.2/setup.cfg +4 -0
- inclusio-0.0.2/tests/test_ai_disclosure.py +128 -0
- inclusio-0.0.2/tests/test_assets.py +8 -0
- inclusio-0.0.2/tests/test_audit_edges.py +167 -0
- inclusio-0.0.2/tests/test_benchmark_hot_paths.py +233 -0
- inclusio-0.0.2/tests/test_build.py +49 -0
- inclusio-0.0.2/tests/test_build_script.py +2110 -0
- inclusio-0.0.2/tests/test_citation.py +75 -0
- inclusio-0.0.2/tests/test_cmd_emit.py +199 -0
- inclusio-0.0.2/tests/test_cmd_import_provenance.py +209 -0
- inclusio-0.0.2/tests/test_cmd_judge.py +333 -0
- inclusio-0.0.2/tests/test_coverage_gap_close.py +472 -0
- inclusio-0.0.2/tests/test_eaa.py +275 -0
- inclusio-0.0.2/tests/test_emit_pandoc.py +294 -0
- inclusio-0.0.2/tests/test_engine_smoke.py +69 -0
- inclusio-0.0.2/tests/test_fix_semantic.py +199 -0
- inclusio-0.0.2/tests/test_import_resume.py +379 -0
- inclusio-0.0.2/tests/test_judge_ats.py +265 -0
- inclusio-0.0.2/tests/test_judge_citations.py +336 -0
- inclusio-0.0.2/tests/test_judge_cloud_llm.py +320 -0
- inclusio-0.0.2/tests/test_judge_jd_fit.py +375 -0
- inclusio-0.0.2/tests/test_judge_local_llm.py +304 -0
- inclusio-0.0.2/tests/test_macro_contract.py +51 -0
- inclusio-0.0.2/tests/test_mcp_server.py +397 -0
- inclusio-0.0.2/tests/test_overlay.py +151 -0
- inclusio-0.0.2/tests/test_pdf_ua.py +245 -0
- inclusio-0.0.2/tests/test_pdf_ua_classes.py +178 -0
- inclusio-0.0.2/tests/test_pdf_validation.py +483 -0
- inclusio-0.0.2/tests/test_provenance_c2pa.py +281 -0
- inclusio-0.0.2/tests/test_provenance_pades.py +173 -0
- inclusio-0.0.2/tests/test_render.py +882 -0
- inclusio-0.0.2/tests/test_render_coverage.py +262 -0
- inclusio-0.0.2/tests/test_render_text.py +191 -0
- inclusio-0.0.2/tests/test_semantic.py +87 -0
- inclusio-0.0.2/tests/test_semantic_edges.py +53 -0
- inclusio-0.0.2/tests/test_sitemap.py +350 -0
- inclusio-0.0.2/tests/test_source_entrypoints.py +77 -0
- inclusio-0.0.2/tests/test_stamp_pdfs.py +358 -0
- inclusio-0.0.2/tests/test_tailor.py +1448 -0
inclusio-0.0.2/PKG-INFO
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: inclusio
|
|
3
|
+
Version: 0.0.2
|
|
4
|
+
Summary: Accessibility-first publishing engine — PDF/UA-2 + WTPDF + PDF/A-4f, C2PA + PAdES + SLSA provenance, multi-format emission, MCP server.
|
|
5
|
+
Author-email: Sebastien Rousseau <contact@sebastienrousseau.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/sebastienrousseau/inclusio
|
|
8
|
+
Project-URL: Documentation, https://github.com/sebastienrousseau/inclusio/tree/main/docs
|
|
9
|
+
Project-URL: Issues, https://github.com/sebastienrousseau/inclusio/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/sebastienrousseau/inclusio/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: latex,publishing,euxis,pdfa,pdfua,wtpdf,accessibility,eaa,wcag,tagged-pdf,uspto,arxiv
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Topic :: Text Processing :: Markup :: LaTeX
|
|
19
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
Requires-Dist: pyyaml>=6.0
|
|
23
|
+
Requires-Dist: jinja2>=3.1
|
|
24
|
+
Requires-Dist: pikepdf>=8.0
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
27
|
+
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
|
28
|
+
Requires-Dist: pytest-benchmark>=5.0; extra == "dev"
|
|
29
|
+
Requires-Dist: ruff>=0.6.0; extra == "dev"
|
|
30
|
+
Requires-Dist: interrogate>=1.7; extra == "dev"
|
|
31
|
+
Requires-Dist: sphinx>=7.0; extra == "dev"
|
|
32
|
+
Requires-Dist: myst-parser>=2.0; extra == "dev"
|
|
33
|
+
Requires-Dist: furo>=2024.0.0; extra == "dev"
|
|
34
|
+
Provides-Extra: mcp
|
|
35
|
+
Requires-Dist: mcp[cli]>=1.27.0; extra == "mcp"
|
|
36
|
+
Provides-Extra: provenance
|
|
37
|
+
Requires-Dist: pyhanko>=0.22; extra == "provenance"
|
|
38
|
+
|
|
39
|
+
<p align="center">
|
|
40
|
+
<img src="https://kura.pro/euxis/images/logos/euxis.svg" alt="Inclusio logo" width="128" />
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<h1 align="center">Inclusio</h1>
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<strong>Publishing that includes everyone.</strong>
|
|
47
|
+
</p>
|
|
48
|
+
|
|
49
|
+
<p align="center">
|
|
50
|
+
Accessibility-first publishing engine for LaTeX, packaged as a
|
|
51
|
+
Python CLI. PDF/UA-2 + WTPDF + PDF/A-4f triple-conformance,
|
|
52
|
+
C2PA + PAdES + SLSA provenance, multi-format emission (HTML5 /
|
|
53
|
+
JATS / EPUB3), LLM-augmented judges, and an MCP server for agent
|
|
54
|
+
integration. Built for macOS, Linux, and WSL.
|
|
55
|
+
</p>
|
|
56
|
+
|
|
57
|
+
<p align="center">
|
|
58
|
+
<a href="https://github.com/sebastienrousseau/inclusio/actions/workflows/engine-validation.yml"><img src="https://img.shields.io/github/actions/workflow/status/sebastienrousseau/inclusio/engine-validation.yml?style=for-the-badge&logo=github" alt="Engine Validation" /></a>
|
|
59
|
+
<a href="https://github.com/sebastienrousseau/inclusio/actions/workflows/verapdf.yml"><img src="https://img.shields.io/github/actions/workflow/status/sebastienrousseau/inclusio/verapdf.yml?style=for-the-badge&logo=github&label=veraPDF" alt="veraPDF Audit" /></a>
|
|
60
|
+
<a href="https://github.com/sebastienrousseau/inclusio"><img src="https://img.shields.io/badge/Python-%3E%3D3.11-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="Python >= 3.11" /></a>
|
|
61
|
+
<a href="https://github.com/sebastienrousseau/inclusio"><img src="https://img.shields.io/badge/PDF%2FUA--2%20%7C%20WTPDF%20%7C%20PDF%2FA--4f-blue?style=for-the-badge" alt="PDF/UA-2 | WTPDF | PDF/A-4f" /></a>
|
|
62
|
+
<a href="https://github.com/sebastienrousseau/inclusio/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-black?style=for-the-badge" alt="License" /></a>
|
|
63
|
+
</p>
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Install
|
|
68
|
+
|
|
69
|
+
Run the local bootstrap:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
./bin/setup
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Then validate the engine:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
make test
|
|
79
|
+
make coverage
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Requires** `python3`, `git`, and a TeX toolchain. Use WSL for full Windows support. Install `tagpdf.sty` if you need accessibility tagging.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Publish
|
|
87
|
+
|
|
88
|
+
Publish against the private content repository with the shell-agnostic form:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
make publish CONTENT_DIR=/absolute/path/to/inclusio-private
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Use the shell-specific form only when you need it:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Bash / Zsh / POSIX sh
|
|
98
|
+
INCLUSIO_CONTENT_DIR=/absolute/path/to/inclusio-private make publish
|
|
99
|
+
|
|
100
|
+
# fish
|
|
101
|
+
env INCLUSIO_CONTENT_DIR=/absolute/path/to/inclusio-private make publish
|
|
102
|
+
|
|
103
|
+
# PowerShell
|
|
104
|
+
$env:INCLUSIO_CONTENT_DIR = "/absolute/path/to/inclusio-private"
|
|
105
|
+
make publish
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`EUXIS_PUBLISHER_CONTENT_DIR` is **not** supported.
|
|
109
|
+
|
|
110
|
+
Drop supported briefs into `data/jobs/` in the private content repo, then run
|
|
111
|
+
`publish`. The build now promotes `.txt`, `.md`, `.markdown`, `.rtf`, `.doc`,
|
|
112
|
+
`.docx`, `.odt`, and `.html` briefs into `data/tailored/` automatically before
|
|
113
|
+
compiling PDFs.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Overview
|
|
118
|
+
|
|
119
|
+
Use this repository as the public engine layer of the Euxis publishing stack.
|
|
120
|
+
Keep private content in `inclusio-private`.
|
|
121
|
+
|
|
122
|
+
You get:
|
|
123
|
+
|
|
124
|
+
- **LaTeX classes and styles** through `core/cls/` and `core/sty/`
|
|
125
|
+
- **Packaged Python entrypoints** through `inclusio/cli/`
|
|
126
|
+
- **Operator utilities** through `inclusio/tools/`
|
|
127
|
+
- **Compatibility wrappers** through `scripts/`
|
|
128
|
+
- **Public fixture content** through `data/`, `src/`, and `templates/`
|
|
129
|
+
- **100% package coverage** over `inclusio`
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Architecture
|
|
134
|
+
|
|
135
|
+
First, render or tailor content. Then compile camera-ready output from the same engine.
|
|
136
|
+
|
|
137
|
+
```mermaid
|
|
138
|
+
graph TD
|
|
139
|
+
A[Private or Public Content] --> B{inclusio.cli.build}
|
|
140
|
+
B --> C[Render: Jinja2 to LaTeX or Markdown]
|
|
141
|
+
B --> D[Build: latexmk or TeX compiler]
|
|
142
|
+
B --> E[Tailor: Brief to structured YAML]
|
|
143
|
+
C --> F[build/.cache/rendered]
|
|
144
|
+
D --> G[PDF artifacts]
|
|
145
|
+
E --> H[data/tailored]
|
|
146
|
+
G --> I[Stamping and metadata tooling]
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Features
|
|
152
|
+
|
|
153
|
+
| | |
|
|
154
|
+
| :--- | :--- |
|
|
155
|
+
| **Engine** | Packaged Python CLI with `build`, `render`, `blog`, `tailor`, `lint`, and cleanup commands |
|
|
156
|
+
| **Typography** | Shared LaTeX classes and style packages for CVs, papers, patents, FAQs, guides, and bios |
|
|
157
|
+
| **Build Modes** | Draft, submission, and camera-ready flows managed from one orchestration layer |
|
|
158
|
+
| **Publishing** | PDF/A-oriented metadata flow with provenance stamping support |
|
|
159
|
+
| **Fixtures** | Public sample content for engine validation without exposing private briefs or templates |
|
|
160
|
+
| **Coverage** | 100% package coverage across `inclusio` |
|
|
161
|
+
| **Platforms** | macOS, Linux, and WSL |
|
|
162
|
+
| **Docs** | Sphinx docs plus folder-level READMEs for every major public surface |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Commands
|
|
167
|
+
|
|
168
|
+
| Command | Execute this to... |
|
|
169
|
+
| :--- | :--- |
|
|
170
|
+
| `make list` | inspect registered documents |
|
|
171
|
+
| `make draft` | compile all public documents in draft mode |
|
|
172
|
+
| `make final` | compile camera-ready output from the current content root |
|
|
173
|
+
| `make publish CONTENT_DIR=/absolute/path/to/inclusio-private` | auto-tailor briefs from `data/jobs/` and compile the full private set |
|
|
174
|
+
| `make render` | render Jinja2 templates to LaTeX |
|
|
175
|
+
| `make render-md` | render Markdown output |
|
|
176
|
+
| `make blog` | render blog posts |
|
|
177
|
+
| `make tailor BRIEF=data/jobs/job.txt` | generate one tailored document explicitly and build it |
|
|
178
|
+
| `make sitemap` | generate `build/site-map.json` |
|
|
179
|
+
| `make test` | run the public engine test target |
|
|
180
|
+
| `make coverage` | enforce the package coverage gate |
|
|
181
|
+
| `make docs` | build the Sphinx site |
|
|
182
|
+
|
|
183
|
+
Use the packaged CLIs directly when you need lower-level control:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
python3 -m inclusio.cli.build list
|
|
187
|
+
python3 -m inclusio.cli.render --doc cv
|
|
188
|
+
python3 -m inclusio.cli.sitemap --pretty
|
|
189
|
+
python3 -m inclusio.cli.tailor data/jobs/test.txt --no-ai
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
For bulk private publishing, prefer `make publish`. It scans `data/jobs/`,
|
|
193
|
+
refreshes stale tailored YAML, and compiles the resulting PDFs in one pass.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Public vs Private Boundary
|
|
198
|
+
|
|
199
|
+
Keep these surfaces public:
|
|
200
|
+
|
|
201
|
+
- `core/`
|
|
202
|
+
- `inclusio/`
|
|
203
|
+
- `scripts/`
|
|
204
|
+
- `tests/`
|
|
205
|
+
- non-sensitive fixtures in `data/`, `src/`, and `templates/`
|
|
206
|
+
- CI, docs, and build metadata
|
|
207
|
+
|
|
208
|
+
Keep these surfaces private:
|
|
209
|
+
|
|
210
|
+
- real briefs and client content
|
|
211
|
+
- proprietary templates and assets
|
|
212
|
+
- content-bearing metadata sets
|
|
213
|
+
- content-specific QA and linguistic validation
|
|
214
|
+
|
|
215
|
+
For the full boundary contract, read [docs/public-private-boundary.md](docs/public-private-boundary.md).
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Documentation
|
|
220
|
+
|
|
221
|
+
Start here:
|
|
222
|
+
|
|
223
|
+
- [docs/README.md](docs/README.md)
|
|
224
|
+
- [docs/architecture.md](docs/architecture.md)
|
|
225
|
+
- [docs/classes-and-styles.md](docs/classes-and-styles.md)
|
|
226
|
+
- [docs/package-reference.md](docs/package-reference.md)
|
|
227
|
+
- [docs/macro-reference.md](docs/macro-reference.md)
|
|
228
|
+
- [docs/usage.md](docs/usage.md)
|
|
229
|
+
- [docs/testing-and-ci.md](docs/testing-and-ci.md)
|
|
230
|
+
|
|
231
|
+
Folder guides:
|
|
232
|
+
|
|
233
|
+
- [bin/README.md](bin/README.md)
|
|
234
|
+
- [core/README.md](core/README.md)
|
|
235
|
+
- [data/README.md](data/README.md)
|
|
236
|
+
- [inclusio/README.md](inclusio/README.md)
|
|
237
|
+
- [inclusio/cli/README.md](inclusio/cli/README.md)
|
|
238
|
+
- [inclusio/tools/README.md](inclusio/tools/README.md)
|
|
239
|
+
- [scripts/README.md](scripts/README.md)
|
|
240
|
+
- [src/README.md](src/README.md)
|
|
241
|
+
- [templates/README.md](templates/README.md)
|
|
242
|
+
- [tests/README.md](tests/README.md)
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## License
|
|
247
|
+
|
|
248
|
+
Licensed under the **MIT License**. See [LICENSE](LICENSE) for details.
|
inclusio-0.0.2/README.md
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://kura.pro/euxis/images/logos/euxis.svg" alt="Inclusio logo" width="128" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Inclusio</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Publishing that includes everyone.</strong>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
Accessibility-first publishing engine for LaTeX, packaged as a
|
|
13
|
+
Python CLI. PDF/UA-2 + WTPDF + PDF/A-4f triple-conformance,
|
|
14
|
+
C2PA + PAdES + SLSA provenance, multi-format emission (HTML5 /
|
|
15
|
+
JATS / EPUB3), LLM-augmented judges, and an MCP server for agent
|
|
16
|
+
integration. Built for macOS, Linux, and WSL.
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="https://github.com/sebastienrousseau/inclusio/actions/workflows/engine-validation.yml"><img src="https://img.shields.io/github/actions/workflow/status/sebastienrousseau/inclusio/engine-validation.yml?style=for-the-badge&logo=github" alt="Engine Validation" /></a>
|
|
21
|
+
<a href="https://github.com/sebastienrousseau/inclusio/actions/workflows/verapdf.yml"><img src="https://img.shields.io/github/actions/workflow/status/sebastienrousseau/inclusio/verapdf.yml?style=for-the-badge&logo=github&label=veraPDF" alt="veraPDF Audit" /></a>
|
|
22
|
+
<a href="https://github.com/sebastienrousseau/inclusio"><img src="https://img.shields.io/badge/Python-%3E%3D3.11-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="Python >= 3.11" /></a>
|
|
23
|
+
<a href="https://github.com/sebastienrousseau/inclusio"><img src="https://img.shields.io/badge/PDF%2FUA--2%20%7C%20WTPDF%20%7C%20PDF%2FA--4f-blue?style=for-the-badge" alt="PDF/UA-2 | WTPDF | PDF/A-4f" /></a>
|
|
24
|
+
<a href="https://github.com/sebastienrousseau/inclusio/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-black?style=for-the-badge" alt="License" /></a>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Install
|
|
30
|
+
|
|
31
|
+
Run the local bootstrap:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
./bin/setup
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Then validate the engine:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
make test
|
|
41
|
+
make coverage
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Requires** `python3`, `git`, and a TeX toolchain. Use WSL for full Windows support. Install `tagpdf.sty` if you need accessibility tagging.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Publish
|
|
49
|
+
|
|
50
|
+
Publish against the private content repository with the shell-agnostic form:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
make publish CONTENT_DIR=/absolute/path/to/inclusio-private
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Use the shell-specific form only when you need it:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Bash / Zsh / POSIX sh
|
|
60
|
+
INCLUSIO_CONTENT_DIR=/absolute/path/to/inclusio-private make publish
|
|
61
|
+
|
|
62
|
+
# fish
|
|
63
|
+
env INCLUSIO_CONTENT_DIR=/absolute/path/to/inclusio-private make publish
|
|
64
|
+
|
|
65
|
+
# PowerShell
|
|
66
|
+
$env:INCLUSIO_CONTENT_DIR = "/absolute/path/to/inclusio-private"
|
|
67
|
+
make publish
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`EUXIS_PUBLISHER_CONTENT_DIR` is **not** supported.
|
|
71
|
+
|
|
72
|
+
Drop supported briefs into `data/jobs/` in the private content repo, then run
|
|
73
|
+
`publish`. The build now promotes `.txt`, `.md`, `.markdown`, `.rtf`, `.doc`,
|
|
74
|
+
`.docx`, `.odt`, and `.html` briefs into `data/tailored/` automatically before
|
|
75
|
+
compiling PDFs.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Overview
|
|
80
|
+
|
|
81
|
+
Use this repository as the public engine layer of the Euxis publishing stack.
|
|
82
|
+
Keep private content in `inclusio-private`.
|
|
83
|
+
|
|
84
|
+
You get:
|
|
85
|
+
|
|
86
|
+
- **LaTeX classes and styles** through `core/cls/` and `core/sty/`
|
|
87
|
+
- **Packaged Python entrypoints** through `inclusio/cli/`
|
|
88
|
+
- **Operator utilities** through `inclusio/tools/`
|
|
89
|
+
- **Compatibility wrappers** through `scripts/`
|
|
90
|
+
- **Public fixture content** through `data/`, `src/`, and `templates/`
|
|
91
|
+
- **100% package coverage** over `inclusio`
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Architecture
|
|
96
|
+
|
|
97
|
+
First, render or tailor content. Then compile camera-ready output from the same engine.
|
|
98
|
+
|
|
99
|
+
```mermaid
|
|
100
|
+
graph TD
|
|
101
|
+
A[Private or Public Content] --> B{inclusio.cli.build}
|
|
102
|
+
B --> C[Render: Jinja2 to LaTeX or Markdown]
|
|
103
|
+
B --> D[Build: latexmk or TeX compiler]
|
|
104
|
+
B --> E[Tailor: Brief to structured YAML]
|
|
105
|
+
C --> F[build/.cache/rendered]
|
|
106
|
+
D --> G[PDF artifacts]
|
|
107
|
+
E --> H[data/tailored]
|
|
108
|
+
G --> I[Stamping and metadata tooling]
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Features
|
|
114
|
+
|
|
115
|
+
| | |
|
|
116
|
+
| :--- | :--- |
|
|
117
|
+
| **Engine** | Packaged Python CLI with `build`, `render`, `blog`, `tailor`, `lint`, and cleanup commands |
|
|
118
|
+
| **Typography** | Shared LaTeX classes and style packages for CVs, papers, patents, FAQs, guides, and bios |
|
|
119
|
+
| **Build Modes** | Draft, submission, and camera-ready flows managed from one orchestration layer |
|
|
120
|
+
| **Publishing** | PDF/A-oriented metadata flow with provenance stamping support |
|
|
121
|
+
| **Fixtures** | Public sample content for engine validation without exposing private briefs or templates |
|
|
122
|
+
| **Coverage** | 100% package coverage across `inclusio` |
|
|
123
|
+
| **Platforms** | macOS, Linux, and WSL |
|
|
124
|
+
| **Docs** | Sphinx docs plus folder-level READMEs for every major public surface |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Commands
|
|
129
|
+
|
|
130
|
+
| Command | Execute this to... |
|
|
131
|
+
| :--- | :--- |
|
|
132
|
+
| `make list` | inspect registered documents |
|
|
133
|
+
| `make draft` | compile all public documents in draft mode |
|
|
134
|
+
| `make final` | compile camera-ready output from the current content root |
|
|
135
|
+
| `make publish CONTENT_DIR=/absolute/path/to/inclusio-private` | auto-tailor briefs from `data/jobs/` and compile the full private set |
|
|
136
|
+
| `make render` | render Jinja2 templates to LaTeX |
|
|
137
|
+
| `make render-md` | render Markdown output |
|
|
138
|
+
| `make blog` | render blog posts |
|
|
139
|
+
| `make tailor BRIEF=data/jobs/job.txt` | generate one tailored document explicitly and build it |
|
|
140
|
+
| `make sitemap` | generate `build/site-map.json` |
|
|
141
|
+
| `make test` | run the public engine test target |
|
|
142
|
+
| `make coverage` | enforce the package coverage gate |
|
|
143
|
+
| `make docs` | build the Sphinx site |
|
|
144
|
+
|
|
145
|
+
Use the packaged CLIs directly when you need lower-level control:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
python3 -m inclusio.cli.build list
|
|
149
|
+
python3 -m inclusio.cli.render --doc cv
|
|
150
|
+
python3 -m inclusio.cli.sitemap --pretty
|
|
151
|
+
python3 -m inclusio.cli.tailor data/jobs/test.txt --no-ai
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
For bulk private publishing, prefer `make publish`. It scans `data/jobs/`,
|
|
155
|
+
refreshes stale tailored YAML, and compiles the resulting PDFs in one pass.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Public vs Private Boundary
|
|
160
|
+
|
|
161
|
+
Keep these surfaces public:
|
|
162
|
+
|
|
163
|
+
- `core/`
|
|
164
|
+
- `inclusio/`
|
|
165
|
+
- `scripts/`
|
|
166
|
+
- `tests/`
|
|
167
|
+
- non-sensitive fixtures in `data/`, `src/`, and `templates/`
|
|
168
|
+
- CI, docs, and build metadata
|
|
169
|
+
|
|
170
|
+
Keep these surfaces private:
|
|
171
|
+
|
|
172
|
+
- real briefs and client content
|
|
173
|
+
- proprietary templates and assets
|
|
174
|
+
- content-bearing metadata sets
|
|
175
|
+
- content-specific QA and linguistic validation
|
|
176
|
+
|
|
177
|
+
For the full boundary contract, read [docs/public-private-boundary.md](docs/public-private-boundary.md).
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Documentation
|
|
182
|
+
|
|
183
|
+
Start here:
|
|
184
|
+
|
|
185
|
+
- [docs/README.md](docs/README.md)
|
|
186
|
+
- [docs/architecture.md](docs/architecture.md)
|
|
187
|
+
- [docs/classes-and-styles.md](docs/classes-and-styles.md)
|
|
188
|
+
- [docs/package-reference.md](docs/package-reference.md)
|
|
189
|
+
- [docs/macro-reference.md](docs/macro-reference.md)
|
|
190
|
+
- [docs/usage.md](docs/usage.md)
|
|
191
|
+
- [docs/testing-and-ci.md](docs/testing-and-ci.md)
|
|
192
|
+
|
|
193
|
+
Folder guides:
|
|
194
|
+
|
|
195
|
+
- [bin/README.md](bin/README.md)
|
|
196
|
+
- [core/README.md](core/README.md)
|
|
197
|
+
- [data/README.md](data/README.md)
|
|
198
|
+
- [inclusio/README.md](inclusio/README.md)
|
|
199
|
+
- [inclusio/cli/README.md](inclusio/cli/README.md)
|
|
200
|
+
- [inclusio/tools/README.md](inclusio/tools/README.md)
|
|
201
|
+
- [scripts/README.md](scripts/README.md)
|
|
202
|
+
- [src/README.md](src/README.md)
|
|
203
|
+
- [templates/README.md](templates/README.md)
|
|
204
|
+
- [tests/README.md](tests/README.md)
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## License
|
|
209
|
+
|
|
210
|
+
Licensed under the **MIT License**. See [LICENSE](LICENSE) for details.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Inclusio package."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""CLI entrypoints for Inclusio."""
|