@docen/pretext
v0.7.0
Published
Vendored fork of @chenglou/pretext 0.0.8 (text measurement & line breaking) with docen-local fixes: CJK canvas->DOM advance correction, empty-text atom retention, and future Word/CJK layout work that upstream won't carry
Downloads
274
Maintainers
Readme
@docen/pretext
Vendored fork of
@chenglou/pretext0.0.8 (commita79a6a5) — fast, deterministic text measurement and line breaking — maintained in-tree so docen can carry Word/CJK layout fixes upstream won't.
The upstream project measures and breaks text through the canvas 2d API with pure arithmetic on top; the rich-inline entry adds multi-font inline runs, collapsed spaces, and extra-width atoms. This fork exists because docen's editor needs edit == render at Word-level CJK fidelity, which requires deep changes to the measurement internals — beyond what a patch file can sanely carry.
Vendored changes
- CJK canvas→DOM advance correction (
measurement.ts) — canvasmeasureTextrounds fullwidth CJK advances up to whole pixels; at fractional font sizes (11pt = 14.67px) every glyph over-measures by ~0.33px, flipping wrapped line counts versus the DOM render. A per-font hidden-span probe measures the delta andgetCorrectedSegmentWidthsubtracts it per CJK grapheme. - Empty-text atom retention (
rich-inline.ts) — an inline item whose text is pure whitespace but carriesextraWidth(an inline image's padding/border chrome) survivesprepareRichInlineas a zero-text unbreakable atom instead of being collapsed away. - The
.entry keeps the full upstream surface (prepare/layout/layoutWithLines…); docen consumes./rich-inlinefrom@docen/layout(line breaking) and@docen/editor(paginator measurement).
Installation
# Install with pnpm
$ pnpm add @docen/pretext
# Install with npm
$ npm install @docen/pretextQuick Start
import { prepareRichInline, layoutNextRichInlineLineRange } from "@docen/pretext/rich-inline";
const prepared = prepareRichInline([{ text: "甲乙丙丁", font: "16px serif" }]);
const range = layoutNextRichInlineLineRange(prepared, 64);License
- MIT © Demo Macro — includes vendored code © Pretext contributors, MIT.
