The defect regions that fall out of the coordinate pass itself: a leading BOM,
and every run of bytes the ASCII normalization stood in for.
Both classes are isPositionalFacts, never errors — see that predicate
for why. They come from runs rather than from a second scan because
analyzeCoordinates has already decided, per code point, whether it is ASCII
(CharRun.ascii); re-deriving that would be a chance to disagree with it.
Non-ASCII runs are COALESCED: a CJK comment or an emoji-bearing value is one
region, not one per code point. Contiguity is measured in bytes, so adjacent
non-ASCII characters merge even across a surrogate pair.
Only a U+FEFF in LEADING position is a bom. The same code point later in the
document is a zero-width no-break space — ordinary content — and is reported
as part of its non-ascii run like any other character.
The defect regions that fall out of the coordinate pass itself: a leading BOM, and every run of bytes the ASCII normalization stood in for.
Both classes are isPositionalFacts, never errors — see that predicate for why. They come from
runsrather than from a second scan becauseanalyzeCoordinateshas already decided, per code point, whether it is ASCII (CharRun.ascii); re-deriving that would be a chance to disagree with it.Non-ASCII runs are COALESCED: a CJK comment or an emoji-bearing value is one region, not one per code point. Contiguity is measured in bytes, so adjacent non-ASCII characters merge even across a surrogate pair.
Only a U+FEFF in LEADING position is a
bom. The same code point later in the document is a zero-width no-break space — ordinary content — and is reported as part of itsnon-asciirun like any other character.