ctrl-kd 4.5.1__tar.gz → 4.7.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.
- {ctrl_kd-4.5.1/src/ctrl_kd.egg-info → ctrl_kd-4.7.0}/PKG-INFO +3 -3
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/README.md +2 -2
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/pyproject.toml +1 -1
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0/src/ctrl_kd.egg-info}/PKG-INFO +3 -3
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrl_kd.egg-info/SOURCES.txt +38 -1
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/__init__.py +1 -1
- ctrl_kd-4.7.0/src/ctrlkd/afm.py +761 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/cli.py +11 -4
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/core.py +2186 -86
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/emit.py +1562 -205
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/fontmap.py +12 -4
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/info.py +22 -9
- ctrl_kd-4.7.0/src/ctrlkd/layout.py +1526 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/pdf.py +5377 -595
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/symbolmap.py +28 -0
- ctrl_kd-4.7.0/tests/test_bare_tab_modulus8.py +360 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_ctrlkd.py +1514 -69
- ctrl_kd-4.7.0/tests/test_dot_comment_prints_nothing.py +108 -0
- ctrl_kd-4.7.0/tests/test_driver_substitutions_exports.py +206 -0
- ctrl_kd-4.7.0/tests/test_fidelity_gate.py +1366 -0
- ctrl_kd-4.7.0/tests/test_form_feed_line_marks.py +180 -0
- ctrl_kd-4.7.0/tests/test_graphic_cell_ops.py +99 -0
- ctrl_kd-4.7.0/tests/test_graphic_cells.py +280 -0
- ctrl_kd-4.7.0/tests/test_head_foot_timing.py +143 -0
- ctrl_kd-4.7.0/tests/test_html_print_stylesheet.py +179 -0
- ctrl_kd-4.7.0/tests/test_justification.py +297 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_lj6dtp_char_substitution.py +66 -0
- ctrl_kd-4.7.0/tests/test_mailmerge_data_files.py +283 -0
- ctrl_kd-4.7.0/tests/test_merge_page_number_variable.py +414 -0
- ctrl_kd-4.7.0/tests/test_modern_blank_after_tightened_line.py +130 -0
- ctrl_kd-4.7.0/tests/test_modern_centring_clip.py +430 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_modern_line_spacing.py +20 -2
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_modern_lint.py +127 -24
- ctrl_kd-4.7.0/tests/test_modern_page_baseline.py +261 -0
- ctrl_kd-4.7.0/tests/test_modern_rtf_structure_rows.py +197 -0
- ctrl_kd-4.7.0/tests/test_modern_verse_defrow.py +543 -0
- ctrl_kd-4.7.0/tests/test_page_parity.py +181 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_paper_verdicts.py +31 -2
- ctrl_kd-4.7.0/tests/test_pcl_fidelity.py +179 -0
- ctrl_kd-4.7.0/tests/test_pcl_page_membership.py +132 -0
- ctrl_kd-4.7.0/tests/test_pcl_page_size_eject.py +131 -0
- ctrl_kd-4.7.0/tests/test_pcl_tolerance.py +1172 -0
- ctrl_kd-4.7.0/tests/test_pcl_transparent_print.py +80 -0
- ctrl_kd-4.7.0/tests/test_pcl_v4_column_geometry.py +407 -0
- ctrl_kd-4.7.0/tests/test_pcl_v4_untriaged_fixes.py +733 -0
- ctrl_kd-4.7.0/tests/test_pcl_vertical_wraparound.py +174 -0
- ctrl_kd-4.7.0/tests/test_peseta_euro_driver.py +411 -0
- ctrl_kd-4.7.0/tests/test_pf_print_reformat.py +288 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_pictures.py +120 -0
- ctrl_kd-4.7.0/tests/test_pn_page_timing.py +168 -0
- ctrl_kd-4.7.0/tests/test_print_control_labels_invisible.py +211 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_printed_fidelity.py +324 -41
- ctrl_kd-4.7.0/tests/test_rtf_facing_pages.py +199 -0
- ctrl_kd-4.7.0/tests/test_rtf_head_style_attrs.py +129 -0
- ctrl_kd-4.7.0/tests/test_rtf_keep_with_next.py +126 -0
- ctrl_kd-4.7.0/tests/test_rtf_page_numbers.py +183 -0
- ctrl_kd-4.7.0/tests/test_rtf_section_spine.py +238 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_samples.py +44 -1
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_sawyer_corpus.py +55 -2
- ctrl_kd-4.7.0/tests/test_structural_checks.py +367 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_style_leading.py +154 -23
- ctrl_kd-4.7.0/tests/test_symbol_span_graphic_chars.py +176 -0
- ctrl_kd-4.7.0/tests/test_trailing_pa_break.py +167 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_verse_spacing.py +33 -5
- ctrl_kd-4.7.0/tests/test_width_and_cp1252_memo.py +81 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_writer.py +61 -0
- ctrl_kd-4.7.0/tests/test_zero_width_tab.py +107 -0
- ctrl_kd-4.5.1/src/ctrlkd/afm.py +0 -337
- ctrl_kd-4.5.1/src/ctrlkd/layout.py +0 -652
- ctrl_kd-4.5.1/tests/test_fidelity_gate.py +0 -642
- ctrl_kd-4.5.1/tests/test_pcl_fidelity.py +0 -102
- ctrl_kd-4.5.1/tests/test_pcl_tolerance.py +0 -567
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/LICENSE +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/setup.cfg +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrl_kd.egg-info/dependency_links.txt +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrl_kd.egg-info/entry_points.txt +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrl_kd.egg-info/top_level.txt +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/convert.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/pictures.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/pix.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/piximg.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/samples/LYING.WS +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/samples/OCAPTAIN.WS +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/samples/TWAINLET.WS +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/samples/WARPRAYR.WS +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/typestyles.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/writer.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/src/ctrlkd/wschange.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_endnote_leading_gap.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_flags_toc_inline.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_glyph_aspect.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_layout_marks.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_lj6dtp_bullet_glyph.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_lj6dtp_colour_restore.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_lj6dtp_heading_face.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_lj6dtp_hp_patterns.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_lj6dtp_legend_line_spacing.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_lj6dtp_pcl_rectangles.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_lj6dtp_shading_table_rules.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_lj6dtp_table_rule_weight.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_load_plugins.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_modern_box_regions.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_note_rulings_20260824.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_pix.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_polarity_gate.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_screenplay_detection.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_screenplay_pdf.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_screenplay_rendering.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_sentence_spacing_n9.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_verse_quote_couplet.py +0 -0
- {ctrl_kd-4.5.1 → ctrl_kd-4.7.0}/tests/test_wschange.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ctrl-kd
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.7.0
|
|
4
4
|
Summary: Convert WordStar 4-7 documents and print-to-disk files to text, Markdown, HTML, RTF, or PDF. ^KD: save and done.
|
|
5
5
|
Author: Jon Michaels
|
|
6
6
|
License: MIT
|
|
@@ -28,8 +28,8 @@ Dynamic: license-file
|
|
|
28
28
|
|
|
29
29
|
Convert WordStar for DOS v4-v7 files to modern formats. **^KD: save and done.**
|
|
30
30
|
|
|
31
|
-
`ctrl-kd` reads WordStar for DOS documents,
|
|
32
|
-
and writes plain text, Markdown, HTML, RTF, or PDF (set on a viewer's
|
|
31
|
+
`ctrl-kd` reads WordStar for DOS documents, WordStar print stream files, and
|
|
32
|
+
MailMerge data files, and writes plain text, Markdown, HTML, RTF, or PDF (set on a viewer's
|
|
33
33
|
built-in base-14 fonts — no dependencies, nothing embedded, the page as it
|
|
34
34
|
would have printed: printed mode follows the document's own font blocks and
|
|
35
35
|
its own layout arithmetic, while modern mode is the same document reflowed
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
Convert WordStar for DOS v4-v7 files to modern formats. **^KD: save and done.**
|
|
11
11
|
|
|
12
|
-
`ctrl-kd` reads WordStar for DOS documents,
|
|
13
|
-
and writes plain text, Markdown, HTML, RTF, or PDF (set on a viewer's
|
|
12
|
+
`ctrl-kd` reads WordStar for DOS documents, WordStar print stream files, and
|
|
13
|
+
MailMerge data files, and writes plain text, Markdown, HTML, RTF, or PDF (set on a viewer's
|
|
14
14
|
built-in base-14 fonts — no dependencies, nothing embedded, the page as it
|
|
15
15
|
would have printed: printed mode follows the document's own font blocks and
|
|
16
16
|
its own layout arithmetic, while modern mode is the same document reflowed
|
|
@@ -61,6 +61,6 @@ testpaths = ["tests"]
|
|
|
61
61
|
markers = [
|
|
62
62
|
"sawyer: opt-in tier 2 -- an explicit, committed list of documents from Robert J. Sawyer's public WordStar 7 archive (arm with CTRLKD_SAWYER_ARCHIVE)",
|
|
63
63
|
"pcl: opt-in -- coordinate-level fidelity gate against real WordStar 7 LaserJet PCL captures (arm with CTRLKD_PRIVATE_CORPUS); see tools/pcl_tolerance.py and tests/test_pcl_fidelity.py",
|
|
64
|
-
"paper:
|
|
64
|
+
"paper: PARKED BY RULING 2026-09-14 (paper_verdicts.PARKED_BY_RULING) -- machine-readable verdicts for the 69 M479fdw paper-scan pages; every page skips with that citation and is reported as parked by ruling, never as a red. Arm with CTRLKD_PRIVATE_CORPUS to see the citation per page; see tools/PAPER-VERDICTS.md and tests/test_paper_verdicts.py",
|
|
65
65
|
]
|
|
66
66
|
addopts = "-m \"not sawyer and not pcl and not paper\""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ctrl-kd
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.7.0
|
|
4
4
|
Summary: Convert WordStar 4-7 documents and print-to-disk files to text, Markdown, HTML, RTF, or PDF. ^KD: save and done.
|
|
5
5
|
Author: Jon Michaels
|
|
6
6
|
License: MIT
|
|
@@ -28,8 +28,8 @@ Dynamic: license-file
|
|
|
28
28
|
|
|
29
29
|
Convert WordStar for DOS v4-v7 files to modern formats. **^KD: save and done.**
|
|
30
30
|
|
|
31
|
-
`ctrl-kd` reads WordStar for DOS documents,
|
|
32
|
-
and writes plain text, Markdown, HTML, RTF, or PDF (set on a viewer's
|
|
31
|
+
`ctrl-kd` reads WordStar for DOS documents, WordStar print stream files, and
|
|
32
|
+
MailMerge data files, and writes plain text, Markdown, HTML, RTF, or PDF (set on a viewer's
|
|
33
33
|
built-in base-14 fonts — no dependencies, nothing embedded, the page as it
|
|
34
34
|
would have printed: printed mode follows the document's own font blocks and
|
|
35
35
|
its own layout arithmetic, while modern mode is the same document reflowed
|
|
@@ -27,11 +27,20 @@ src/ctrlkd/samples/LYING.WS
|
|
|
27
27
|
src/ctrlkd/samples/OCAPTAIN.WS
|
|
28
28
|
src/ctrlkd/samples/TWAINLET.WS
|
|
29
29
|
src/ctrlkd/samples/WARPRAYR.WS
|
|
30
|
+
tests/test_bare_tab_modulus8.py
|
|
30
31
|
tests/test_ctrlkd.py
|
|
32
|
+
tests/test_dot_comment_prints_nothing.py
|
|
33
|
+
tests/test_driver_substitutions_exports.py
|
|
31
34
|
tests/test_endnote_leading_gap.py
|
|
32
35
|
tests/test_fidelity_gate.py
|
|
33
36
|
tests/test_flags_toc_inline.py
|
|
37
|
+
tests/test_form_feed_line_marks.py
|
|
34
38
|
tests/test_glyph_aspect.py
|
|
39
|
+
tests/test_graphic_cell_ops.py
|
|
40
|
+
tests/test_graphic_cells.py
|
|
41
|
+
tests/test_head_foot_timing.py
|
|
42
|
+
tests/test_html_print_stylesheet.py
|
|
43
|
+
tests/test_justification.py
|
|
35
44
|
tests/test_layout_marks.py
|
|
36
45
|
tests/test_lj6dtp_bullet_glyph.py
|
|
37
46
|
tests/test_lj6dtp_char_substitution.py
|
|
@@ -43,25 +52,53 @@ tests/test_lj6dtp_pcl_rectangles.py
|
|
|
43
52
|
tests/test_lj6dtp_shading_table_rules.py
|
|
44
53
|
tests/test_lj6dtp_table_rule_weight.py
|
|
45
54
|
tests/test_load_plugins.py
|
|
55
|
+
tests/test_mailmerge_data_files.py
|
|
56
|
+
tests/test_merge_page_number_variable.py
|
|
57
|
+
tests/test_modern_blank_after_tightened_line.py
|
|
46
58
|
tests/test_modern_box_regions.py
|
|
59
|
+
tests/test_modern_centring_clip.py
|
|
47
60
|
tests/test_modern_line_spacing.py
|
|
48
61
|
tests/test_modern_lint.py
|
|
62
|
+
tests/test_modern_page_baseline.py
|
|
63
|
+
tests/test_modern_rtf_structure_rows.py
|
|
64
|
+
tests/test_modern_verse_defrow.py
|
|
49
65
|
tests/test_note_rulings_20260824.py
|
|
66
|
+
tests/test_page_parity.py
|
|
50
67
|
tests/test_paper_verdicts.py
|
|
51
68
|
tests/test_pcl_fidelity.py
|
|
69
|
+
tests/test_pcl_page_membership.py
|
|
70
|
+
tests/test_pcl_page_size_eject.py
|
|
52
71
|
tests/test_pcl_tolerance.py
|
|
72
|
+
tests/test_pcl_transparent_print.py
|
|
73
|
+
tests/test_pcl_v4_column_geometry.py
|
|
74
|
+
tests/test_pcl_v4_untriaged_fixes.py
|
|
75
|
+
tests/test_pcl_vertical_wraparound.py
|
|
76
|
+
tests/test_peseta_euro_driver.py
|
|
77
|
+
tests/test_pf_print_reformat.py
|
|
53
78
|
tests/test_pictures.py
|
|
54
79
|
tests/test_pix.py
|
|
80
|
+
tests/test_pn_page_timing.py
|
|
55
81
|
tests/test_polarity_gate.py
|
|
82
|
+
tests/test_print_control_labels_invisible.py
|
|
56
83
|
tests/test_printed_fidelity.py
|
|
84
|
+
tests/test_rtf_facing_pages.py
|
|
85
|
+
tests/test_rtf_head_style_attrs.py
|
|
86
|
+
tests/test_rtf_keep_with_next.py
|
|
87
|
+
tests/test_rtf_page_numbers.py
|
|
88
|
+
tests/test_rtf_section_spine.py
|
|
57
89
|
tests/test_samples.py
|
|
58
90
|
tests/test_sawyer_corpus.py
|
|
59
91
|
tests/test_screenplay_detection.py
|
|
60
92
|
tests/test_screenplay_pdf.py
|
|
61
93
|
tests/test_screenplay_rendering.py
|
|
62
94
|
tests/test_sentence_spacing_n9.py
|
|
95
|
+
tests/test_structural_checks.py
|
|
63
96
|
tests/test_style_leading.py
|
|
97
|
+
tests/test_symbol_span_graphic_chars.py
|
|
98
|
+
tests/test_trailing_pa_break.py
|
|
64
99
|
tests/test_verse_quote_couplet.py
|
|
65
100
|
tests/test_verse_spacing.py
|
|
101
|
+
tests/test_width_and_cp1252_memo.py
|
|
66
102
|
tests/test_writer.py
|
|
67
|
-
tests/test_wschange.py
|
|
103
|
+
tests/test_wschange.py
|
|
104
|
+
tests/test_zero_width_tab.py
|