Repository navigation
v4.10.0
Added
-
A page can declare its own sheet.
.pr or=(landscape/portrait)
measured against real WordStar 7: set at the top of a page it applies to
that page immediately; set in the middle of a page it waits for the next
page boundary, exactly as WS7 does. The Printed PDF now draws each page on
its own sheet size instead of one page size for the whole document, and
the running head/foot and automatic page number follow that page's own
height (a landscape page's number no longer resolves off the top of a
portrait document).layoutJSON version 13 publishes a page's own size
(width/height/orientation) only where it differs from the document's — the
same "omit unless it differs" rule every other per-page field here already
follows; a page that never changes size emits nothing new. Modern is
unchanged by design — it composes on one reflowed sheet regardless of what
the source document's pages asked for. -
The
layoutJSON says when a running head, foot or page number is off the
paper (version 12). WordStar commands such a row anyway and lets the printer
clip it — real WordStar 7 prints put the automatic number 14.4pt below the
bottom edge of a Letter sheet when.mbis smaller than.fm— so the PDF is
unchanged and still draws it there, with the page as its clip. A program
drawing pages from this JSON has no paper to clip with, so such a row now
carriesoff_sheet: trueand must not be drawn. The key is absent, not false,
on every row that is on the sheet.
Fixed
-
Page furniture is set in the document's own face, not in Times. Running
heads, running feet, the automatic page number and footnote/endnote text were
written in a hardcoded face and size in the RTF exports and in the Modern PDF
— Times New Roman 11 on a Printed page whose body is Courier 12, on every page
of a running-head document. They resolve through the same font chain body text
does now: a.h#/.f#that opens a font block prints in THAT face and size
(22 documents in the public test corpus, which the Printed PDF has always
honoured and the other three surfaces threw away); a head that declares
nothing takes the mode's body face — Courier in Printed, the reading face in
Modern, Courier in a document that declares itself non-proportional. Sizes
follow the same rule: Printed furniture is the body's size, Modern furniture
is the body size less 2pt (12pt against Modern's 14pt body, where the RTF and
the Modern PDF both used 11). Printed PDF is unchanged — it was already right. -
Modern: a list bullet and its text no longer read as one crowded word.
The square bullet was drawn on the same fixed-pitch cell Printed uses, but
the space after it was measured in the reading face — 3.5pt against the
cell's 7.2 — so the item's first word sat about half as far from the bullet
as it does in the Printed and Native views. It is now one cell, as it is
there: the first word starts two cells past the bullet in all three views.
Also fixed in the Modern RTF's hanging indent, which had computed a third
number again. Only bullets whose marker is a cp437 block glyph are
affected; a*or-marker is a real letter in the reading face and
keeps the spacing it had. -
Markdown: text that used to vanish now survives. A document that
literally says<SP>,<Enter>or<B>had that read as an HTML tag by
every Markdown renderer, which showed NOTHING — the word disappeared.
(<B>was worse: a real tag, switching bold on with nothing to switch it
off.)<and&are escaped now. Affects Sawyer's macro and patch
documentation heavily; none of the shipped samples. -
Markdown: strikeout no longer breaks where a bold or italic word sits
inside it. The emitter closed the strikeout and reopened it with nothing
in between (~~alpha~~~~**beta**~~~~gamma~~); four tildes are not
strikethrough in any flavour, so the strike was lost AND the tildes showed
up as text. The run is merged now. -
Markdown: a verse or stanza containing a blank line no longer emits a
line of invisible whitespace. The two-trailing-spaces hard break turned
such a blank into a line holding just two spaces, which CommonMark reads as
a blank line — so the paragraph split anyway, into pieces whose raw text
claimed otherwise. A blank line ends the unit now, which is what it always
rendered as. The dangling trailing spaces at a unit's end go too.All three are Modern-mode Markdown only. A Printed-mode body, and any
print-stream or ruler-driven document in either mode, is a fenced code
block whose content is literal and is untouched. -
ctrl-kd --versionno longer prints a PythonSyntaxWarningahead of its
own output. A docstring cited RTF's\margrcontrol word inside a plain
(non-raw) string, so Python read\mas an escape sequence it did not
recognise and warned about it. Nothing was broken, but the warning named a
file inside the package and was the first thing a new Homebrew or PyPI user
saw, which reads like a crash. It appeared only on a COLD bytecode cache —
the first run after an install — which is why no development machine ever
showed it. Every module is now compiled with warnings as errors by both the
test suite andtools/run-full-suite.sh, so it cannot come back. -
Printed RTF's text column is the document's own ruler width, not a
fixed arithmetic off the page margins. The column had been computed as
paper width minus twice the left margin, which has nothing to do with what
the author actually typed the page to hold; at the ordinary default it came
out one character narrower than a common 69-character line, so thousands of
facsimile lines across the public corpus arrived re-wrapped by the reader —
the one thing Printed mode exists to prevent. The column now follows the
widest ruler in the document (or the longest printed line itself, when box
art or a print stream runs past its own ruler), and the page grows to fit
it, up to Word's own maximum page size. A document whose lines are wider
than even that still re-wraps in the reader — there is no page any reader
accepts that would hold them, and that group shrank from 132 documents to
32 in a full sweep. -
A reverse-video banner ("white on black") is visible in RTF and HTML,
not white text on a white page. Both exporters kept WordStar's white
colour but never painted the black ground behind it, so the words were
simply not there — three documents in the public corpus lost a banner this
way, one of which says outright in its own text that it should read white
on black. The ground is drawn now; turning off inline styling removes it
along with the colour, same as it always has for every other colour. -
A Printed HTML page is no longer twice as tall as the document. The
facsimile block already breaks a line on its own newline; the emitter was
also writing a<br>at the end of every line, so each line was followed
by a blank one. A 57-page document rendered at double height with its line
grid gone. The extra break is removed. -
Newspaper-style columns (
.co) render as one column block per section,
in both Printed and Modern HTML, not one box per paragraph. Modern had
been opening a fresh pair of columns for every paragraph in a columnar
region, which balances each paragraph on its own and leaves ragged,
half-empty columns underneath; Printed dropped the columns entirely. Both
now open a single container for the whole section, closing it only where
the document itself ends the columns. -
A Modern HTML page no longer scrolls sideways on a phone. The Modern
stylesheet had no line-length limit at all — a wide window gave a line
roughly twice a comfortable reading length, and at phone width a long path,
a run of control words, or a wide row of block graphics pushed the whole
page off the edge of the screen. Modern HTML now keeps a reading-width
column and lets only the one unbreakable row (an embedded picture) scroll
inside itself, the way the Printed facsimile already does. Printed HTML is
untouched — it was already narrow enough.
Changed
-
Every quirk was renamed, and the names that shipped in 4.9.0 still work.
A quirk's name is text a reader reads and types —--list-quirksprints it,
--quirk/--no-quirktake it, thelayoutformat publishes it — so the six
now say what they do in plain words instead of naming the printer driver or
the code behind them:4.9.0 now driver-euro-signeuro-swaplj6dtp-typographysmart-punctuationlj6dtp-box-cornersbox-cornerslj6dtp-colour-as-graycolors-as-graylj6dtp-fill-patternsfill-patternsstray-style-strikeoutsawyer-strikeoutThe old names are still ACCEPTED wherever one can be typed or stored, so
nothing anyone has scripted or saved stops working. They are never PRINTED:
--list-quirks,quirks_applicable/quirks_appliedand every report say the
new name only, so one output can never show both spellings for one quirk. -
Descriptions and the quirk window's own row titles use US spelling: "Screen
colors as gray", "Colors 9–14 as hatch patterns". -
--headersand--page-numbersnow say outright, in their own--help
text, that they apply to PDF and RTF only. Text, Markdown and HTML are
unpaged by design and never carried running heads, feet or page numbers;
the flags are still accepted (and ignored, with no error) on those three
formats — nothing about how they convert has changed.
3,325 answer-key cells were re-recorded across this release's commits (a cell
can move more than once as later commits build on earlier ones): 796 for the
per-page-sheet schema bump (792 layout cells at the version number alone,
one document's pdf.printed/rtf.printed pair for its actual landscape
page, and that same document's layout cells re-recorded a second time for
a follow-up fix to the running-head model), 540 for the Printed RTF column
width (385 documents' rtf.printed, 148 rtf.modern), 508 for the doubled
HTML line height (352 html.printed,
149 html.modern), 246 for the Modern HTML reading measure (all html.modern),
154 for the quirk renames (72 documents' layout cells, where the applied-quirk
list is spelled out), 897 for page-furniture fonts (354 rtf.printed, 353
rtf.modern, 178 pdf.modern, plus the picture-bearing twin of each), 115 for
the three Markdown fixes (markdown.modern), 28 for the newspaper-column fix
(14 documents, both HTML cells), 19 for the Modern bullet gap (pdf.modern +
rtf.modern), 14 for off-sheet furniture (7 documents' layout cells), and 8
for the reverse-video ground (2 documents, all four RTF/HTML cells). The
--headers/--page-numbers help wording and the compile-warnings fix moved
no cells at all.