UNPKG

cz-typography

Version:

Universal Czech typography fixer for JavaScript, React, Next.js, and any SSR framework. Non-breaking spaces after one-letter prepositions, units, dates, ordinals and more.

1 lines 30.5 kB
{"version":3,"sources":["../../src/rules/dates.js","../../src/rules/initials.js","../../src/rules/ordinals.js","../../src/data/prepositions.js","../../src/rules/prepositions.js","../../src/rules/roman.js","../../src/rules/thousands.js","../../src/data/units.js","../../src/rules/units.js","../../src/fixCzech.js","../../src/fixCzechHtml.js","../../src/next/middleware.js"],"names":["NextResponse"],"mappings":"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","file":"middleware.cjs","sourcesContent":["const FULL_DATE_REGEX = /(\\d{1,2})\\.[ \\t]+(\\d{1,2})\\.[ \\t]+(\\d{2,4})\\b/g;\r\nconst DAY_MONTH_REGEX = /(\\d{1,2})\\.[ \\t]+(\\d{1,2})\\.(?=[^\\p{L}\\p{N}]|$)/gu;\r\n\r\n/**\r\n * Glues date components together with non-breaking spaces.\r\n *\r\n * - `5. 12. 2024` → `5.\\u00A012.\\u00A02024`\r\n * - `5. 12.` → `5.\\u00A012.`\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyDates(text) {\r\n return text\r\n .replace(FULL_DATE_REGEX, '$1.\\u00A0$2.\\u00A0$3')\r\n .replace(DAY_MONTH_REGEX, '$1.\\u00A0$2.');\r\n}\r\n","const INITIAL_REGEX = /(\\b\\p{Lu})\\.[ \\t]+(?=\\p{Lu})/gu;\r\n\r\n/**\r\n * Glues an initial (a single uppercase letter followed by a dot) to the\r\n * following word with a non-breaking space. Repeats until stable so chains\r\n * like `J. R. R. Tolkien` are fully fixed.\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyInitials(text) {\r\n let previous;\r\n let current = text;\r\n do {\r\n previous = current;\r\n current = current.replace(INITIAL_REGEX, '$1.\\u00A0');\r\n } while (current !== previous);\r\n return current;\r\n}\r\n","const ORDINAL_REGEX = /(\\d{1,2})\\.[ \\t]+(?=\\p{Ll})/gu;\r\n\r\n/**\r\n * Glues ordinal numbers to the following word with a non-breaking space.\r\n * Triggers only when the next character is a Unicode lowercase letter so\r\n * sentences ending with an ordinal (e.g. `žil v 19. století. Měl…`)\r\n * are not affected at the sentence boundary.\r\n *\r\n * - `1. ledna` → `1.\\u00A0ledna`\r\n * - `25. listopadu 2024` → `25.\\u00A0listopadu 2024`\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyOrdinals(text) {\r\n return text.replace(ORDINAL_REGEX, '$1.\\u00A0');\r\n}\r\n","/**\r\n * Czech one-letter prepositions and conjunctions that should not be left\r\n * at the end of a line (per Czech orthography rules).\r\n *\r\n * Source: https://prirucka.ujc.cas.cz/?id=880\r\n *\r\n * @type {readonly string[]}\r\n */\r\nexport const PREPOSITIONS = Object.freeze([\r\n 'a',\r\n 'i',\r\n 'k',\r\n 'o',\r\n 's',\r\n 'u',\r\n 'v',\r\n 'z',\r\n]);\r\n","import { PREPOSITIONS } from '../data/prepositions.js';\r\n\r\nconst PREPOSITION_REGEX = new RegExp(\r\n `(?<=^|[\\\\s(\\\\[\"'\\u00A0\\u2018\\u201C\\u00BB\\u2014\\u2013-])(${PREPOSITIONS.join('|')})[ \\\\t]+(?=\\\\S)`,\r\n 'giu',\r\n);\r\n\r\n/**\r\n * Glues Czech one-letter prepositions and conjunctions (a, i, k, o, s, u,\r\n * v, z) to the following word with a non-breaking space.\r\n *\r\n * Case-insensitive – also handles capitalised forms at the start of a\r\n * sentence (`K Tobě`, `V domě`, `S Petrem`).\r\n *\r\n * Uses a lookbehind so consecutive prepositions (`v a z`) are all fixed\r\n * in a single pass.\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyPrepositions(text) {\r\n return text.replace(PREPOSITION_REGEX, '$1\\u00A0');\r\n}\r\n","const ROMAN_NUMERAL =\r\n '(?:(?=[IVXLCDM])M{0,3}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3}))';\r\nconst ROMAN_REGEX = new RegExp(\r\n `(\\\\b\\\\p{Lu}\\\\p{L}+)[ \\\\t]+(?=${ROMAN_NUMERAL}\\\\.(?=[^\\\\p{L}\\\\p{N}]|$))`,\r\n 'gu',\r\n);\r\n\r\n/**\r\n * Glues a name to a following Roman numeral (with optional dot) using a\r\n * non-breaking space.\r\n *\r\n * - `Karel IV.` → `Karel\\u00A0IV.`\r\n * - `Jindřich VIII.` → `Jindřich\\u00A0VIII.`\r\n * - `papež Jan Pavel II.` → `papež Jan Pavel\\u00A0II.`\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyRoman(text) {\r\n return text.replace(ROMAN_REGEX, '$1\\u00A0');\r\n}\r\n","const THOUSANDS_REGEX = /(\\d)[ \\t](\\d{3})(?=\\D|$)/g;\r\n\r\n/**\r\n * Replaces a regular space used as a thousand separator with a non-breaking\r\n * space so the number stays on one line (`10 000` → `10\\u00A0000`).\r\n *\r\n * Applied repeatedly to handle multiple separators in a single number\r\n * (`1 000 000`).\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyThousands(text) {\r\n let previous;\r\n let current = text;\r\n do {\r\n previous = current;\r\n current = current.replace(THOUSANDS_REGEX, '$1\\u00A0$2');\r\n } while (current !== previous);\r\n return current;\r\n}\r\n","/**\r\n * Units of measurement that are safe to glue to a preceding number with a\r\n * non-breaking space, regardless of what follows.\r\n *\r\n * Sorted from longest to shortest so the regex alternation matches the most\r\n * specific unit first (e.g. `kWh` before `kW` before `W`).\r\n *\r\n * @type {readonly string[]}\r\n */\r\nexport const SAFE_UNITS = Object.freeze(\r\n [\r\n 'km/h',\r\n 'm/s',\r\n 'kWh',\r\n 'mAh',\r\n 'mbar',\r\n 'kbps',\r\n 'Mbps',\r\n 'Gbit',\r\n 'kPa',\r\n 'bar',\r\n 'kg',\r\n 'mg',\r\n 'cm',\r\n 'mm',\r\n 'µm',\r\n 'nm',\r\n 'km',\r\n 'ml',\r\n 'cl',\r\n 'dl',\r\n 'kJ',\r\n 'Nm',\r\n 'Wb',\r\n 'lm',\r\n 'lx',\r\n 'cd',\r\n 'mol',\r\n 'min',\r\n 'ms',\r\n 'ns',\r\n 'Hz',\r\n 'Pa',\r\n 'kW',\r\n 'MW',\r\n 'Ohm',\r\n '°C',\r\n '°F',\r\n '°',\r\n '‰',\r\n '%',\r\n 'px',\r\n 'pt',\r\n 'dpi',\r\n 'bpm',\r\n 'EUR',\r\n 'USD',\r\n 'CZK',\r\n 'Kč',\r\n 'mg/m³',\r\n 'str',\r\n 'osob',\r\n 'ks',\r\n 'MJ',\r\n 'TB',\r\n 'GB',\r\n 'MB',\r\n 'kB',\r\n 'bit',\r\n 'GBit',\r\n 'mol',\r\n 'Ω',\r\n '€',\r\n '$',\r\n '£',\r\n ].sort((a, b) => b.length - a.length),\r\n);\r\n\r\n/**\r\n * Units that collide with common Czech words/letters when used as a\r\n * single character (e.g. `s` is also a preposition, `m` matches `m` in\r\n * \"5 mužů\"). They are applied only when the unit is followed by a clear\r\n * word boundary that is not another letter (interpunction or end of string).\r\n *\r\n * @type {readonly string[]}\r\n */\r\nexport const STRICT_UNITS = Object.freeze(\r\n ['m', 's', 'l', 't', 'g', 'V', 'A', 'W', 'J', 'K', 'B'].sort(\r\n (a, b) => b.length - a.length,\r\n ),\r\n);\r\n","import { SAFE_UNITS, STRICT_UNITS } from '../data/units.js';\r\n\r\nfunction escapeRegex(value) {\r\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n\r\nconst SAFE_PATTERN = SAFE_UNITS.map(escapeRegex).join('|');\r\nconst STRICT_PATTERN = STRICT_UNITS.map(escapeRegex).join('|');\r\n\r\nconst SAFE_UNIT_REGEX = new RegExp(\r\n `(\\\\d)[ \\\\t]+(?=(?:${SAFE_PATTERN})(?![\\\\p{L}\\\\p{N}]))`,\r\n 'gu',\r\n);\r\n\r\nconst STRICT_UNIT_REGEX = new RegExp(\r\n `(\\\\d)[ \\\\t]+(?=(?:${STRICT_PATTERN})(?:[.,;:!?)\\\\]/\\\\u00A0]|$))`,\r\n 'gu',\r\n);\r\n\r\n/**\r\n * Glues a number to its unit of measurement with a non-breaking space.\r\n *\r\n * Two passes:\r\n * 1. **Safe units** – multi-character or symbolic units (`km`, `°C`, `Kč`,\r\n * `Ω`) match whenever they follow a digit and are not the prefix of a\r\n * longer word.\r\n * 2. **Strict units** – single-letter units that collide with common Czech\r\n * words (`s`, `m`, `g`, `K`, `V`, `A`, `W`) match only when followed by\r\n * interpunction or end-of-string – never when followed by another\r\n * letter (avoids false positives like `5 mužů`).\r\n *\r\n * @param {string} text\r\n * @returns {string}\r\n */\r\nexport function applyUnits(text) {\r\n return text\r\n .replace(SAFE_UNIT_REGEX, '$1\\u00A0')\r\n .replace(STRICT_UNIT_REGEX, '$1\\u00A0');\r\n}\r\n","import { applyDates } from './rules/dates.js';\r\nimport { applyInitials } from './rules/initials.js';\r\nimport { applyOrdinals } from './rules/ordinals.js';\r\nimport { applyPrepositions } from './rules/prepositions.js';\r\nimport { applyRoman } from './rules/roman.js';\r\nimport { applyThousands } from './rules/thousands.js';\r\nimport { applyUnits } from './rules/units.js';\r\n\r\n/**\r\n * @typedef {object} FixCzechOptions\r\n * @property {boolean} [prepositions=true] Glue one-letter prepositions/conjunctions to the next word.\r\n * @property {boolean} [units=true] Glue numbers to units of measurement.\r\n * @property {boolean} [initials=true] Glue initials (J., A.) to surnames.\r\n * @property {boolean} [dates=true] Glue dates (5. 12. 2024) together.\r\n * @property {boolean} [ordinals=true] Glue ordinal numbers (1. ledna) to the next word.\r\n * @property {boolean} [roman=true] Glue names to Roman numerals (Karel IV.).\r\n * @property {boolean} [thousands=true] Replace thousands separators (10 000) with nbsp.\r\n */\r\n\r\nconst DEFAULT_OPTIONS = Object.freeze({\r\n prepositions: true,\r\n units: true,\r\n initials: true,\r\n dates: true,\r\n ordinals: true,\r\n roman: true,\r\n thousands: true,\r\n});\r\n\r\n/**\r\n * Apply Czech typography rules to a string.\r\n *\r\n * Returns the input unchanged when it isn't a string, so the function is\r\n * safe to call on `null`, `undefined`, numbers etc. without guarding.\r\n *\r\n * Pipeline order matters – `thousands` runs before `units`, otherwise the\r\n * \"10 000 km\" case would steal the thousand-separator space as the\r\n * number-to-unit space.\r\n *\r\n * @param {string} text\r\n * @param {FixCzechOptions} [options]\r\n * @returns {string}\r\n */\r\nexport function fixCzech(text, options) {\r\n if (typeof text !== 'string' || text.length === 0) {\r\n return text;\r\n }\r\n\r\n const opts = options ? { ...DEFAULT_OPTIONS, ...options } : DEFAULT_OPTIONS;\r\n\r\n let result = text;\r\n if (opts.thousands) result = applyThousands(result);\r\n if (opts.dates) result = applyDates(result);\r\n if (opts.ordinals) result = applyOrdinals(result);\r\n if (opts.units) result = applyUnits(result);\r\n if (opts.initials) result = applyInitials(result);\r\n if (opts.roman) result = applyRoman(result);\r\n if (opts.prepositions) result = applyPrepositions(result);\r\n return result;\r\n}\r\n\r\nexport default fixCzech;\r\n","import { fixCzech } from './fixCzech.js';\r\n\r\nconst RAW_TEXT_TAGS = new Set(['script', 'style', 'pre', 'code', 'textarea']);\r\n\r\nconst TOKEN_REGEX =\r\n /<!--[\\s\\S]*?-->|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>|<![A-Za-z][^>]*>|<\\?[\\s\\S]*?\\?>|<\\/?([A-Za-z][A-Za-z0-9-]*)\\b[^>]*>|[^<]+/g;\r\n\r\nconst SENTINEL = '\\u0001';\r\n\r\nfunction isTextToken(match) {\r\n return match.charCodeAt(0) !== 60;\r\n}\r\n\r\nfunction isTagToken(match) {\r\n return (\r\n match.charCodeAt(0) === 60 &&\r\n !match.startsWith('<!--') &&\r\n !match.startsWith('<![') &&\r\n !match.startsWith('<!') &&\r\n !match.startsWith('<?')\r\n );\r\n}\r\n\r\nfunction fixWithLookahead(text, options, nextChar) {\r\n if (nextChar && /\\S/.test(nextChar)) {\r\n const padded = text + nextChar + SENTINEL;\r\n const fixed = fixCzech(padded, options);\r\n if (fixed.endsWith(nextChar + SENTINEL)) {\r\n return fixed.slice(0, -(nextChar.length + SENTINEL.length));\r\n }\r\n return fixed.endsWith(SENTINEL) ? fixed.slice(0, -SENTINEL.length) : fixed;\r\n }\r\n return fixCzech(text, options);\r\n}\r\n\r\nfunction transformOne(match, tagName, rawTextStack, options, nextChar) {\r\n if (!isTagToken(match) && match.charCodeAt(0) === 60) {\r\n return match;\r\n }\r\n\r\n if (isTagToken(match)) {\r\n const isClosing = match.charCodeAt(1) === 47;\r\n const tag = tagName ? tagName.toLowerCase() : '';\r\n if (isClosing) {\r\n const top = rawTextStack[rawTextStack.length - 1];\r\n if (top && top === tag) rawTextStack.pop();\r\n } else if (RAW_TEXT_TAGS.has(tag) && !/\\/\\s*>$/.test(match)) {\r\n rawTextStack.push(tag);\r\n }\r\n return match;\r\n }\r\n\r\n if (rawTextStack.length > 0) return match;\r\n return fixWithLookahead(match, options, nextChar);\r\n}\r\n\r\nfunction tokenize(html) {\r\n const tokens = [];\r\n TOKEN_REGEX.lastIndex = 0;\r\n let m;\r\n while ((m = TOKEN_REGEX.exec(html))) {\r\n tokens.push({ match: m[0], tagName: m[1], end: m.index + m[0].length });\r\n }\r\n return tokens;\r\n}\r\n\r\nfunction lookaheadOf(tokens, index, fallback) {\r\n const next = tokens[index + 1];\r\n if (!next) return fallback || '';\r\n if (isTextToken(next.match)) return next.match.charAt(0);\r\n return '<';\r\n}\r\n\r\nfunction transformTokens(tokens, rawTextStack, options, trailingChar) {\r\n let output = '';\r\n for (let i = 0; i < tokens.length; i++) {\r\n const { match, tagName } = tokens[i];\r\n const nextChar = lookaheadOf(tokens, i, trailingChar);\r\n output += transformOne(match, tagName, rawTextStack, options, nextChar);\r\n }\r\n return output;\r\n}\r\n\r\n/**\r\n * Apply Czech typography rules to an HTML string. Tags, attributes,\r\n * comments, doctypes and the contents of `script`/`style`/`pre`/`code`/\r\n * `textarea` elements are left untouched.\r\n *\r\n * @param {string} html\r\n * @param {import('./fixCzech.js').FixCzechOptions} [options]\r\n * @returns {string}\r\n */\r\nexport function fixCzechHtml(html, options) {\r\n if (typeof html !== 'string' || html.length === 0) return html;\r\n return transformTokens(tokenize(html), [], options, '');\r\n}\r\n\r\nconst STREAM_TAIL = 64;\r\n\r\n/**\r\n * Stateful streaming processor – feeds chunks of HTML through the same\r\n * transformation as {@link fixCzechHtml} while keeping a small tail\r\n * buffer to handle words and tags split across chunk boundaries.\r\n *\r\n * @param {import('./fixCzech.js').FixCzechOptions} [options]\r\n * @returns {{ feed(chunk: string): string, flush(): string }}\r\n */\r\nexport function createFixCzechProcessor(options) {\r\n let buffer = '';\r\n const rawTextStack = [];\r\n\r\n function flushUpTo(cutPoint, trailingChar) {\r\n if (cutPoint === 0) return '';\r\n const processable = buffer.slice(0, cutPoint);\r\n const tokens = tokenize(processable);\r\n const output = transformTokens(tokens, rawTextStack, options, trailingChar);\r\n buffer = buffer.slice(cutPoint);\r\n return output;\r\n }\r\n\r\n return {\r\n feed(chunk) {\r\n if (typeof chunk !== 'string') chunk = String(chunk);\r\n buffer += chunk;\r\n if (buffer.length === 0) return '';\r\n\r\n let cutPoint = Math.max(0, buffer.length - STREAM_TAIL);\r\n const lastLt = buffer.lastIndexOf('<');\r\n const lastGt = buffer.lastIndexOf('>');\r\n if (lastLt > lastGt) cutPoint = Math.min(cutPoint, lastLt);\r\n\r\n while (cutPoint > 0 && !/\\s/.test(buffer[cutPoint - 1])) cutPoint--;\r\n while (cutPoint > 0 && /\\s/.test(buffer[cutPoint - 1])) cutPoint--;\r\n while (cutPoint > 0 && !/\\s/.test(buffer[cutPoint - 1])) cutPoint--;\r\n\r\n if (cutPoint === 0) return '';\r\n\r\n const trailingChar = buffer.charAt(cutPoint);\r\n return flushUpTo(cutPoint, trailingChar);\r\n },\r\n\r\n flush() {\r\n if (buffer.length === 0) return '';\r\n return flushUpTo(buffer.length, '');\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Create a Web-Streams `TransformStream` that applies Czech typography\r\n * rules to an HTML response on the fly. Compatible with Vercel Edge,\r\n * Cloudflare Workers, Node.js 18+, Deno and Bun.\r\n *\r\n * @param {import('./fixCzech.js').FixCzechOptions} [options]\r\n * @returns {TransformStream<Uint8Array | string, Uint8Array>}\r\n */\r\nexport function createFixCzechStream(options) {\r\n if (typeof TransformStream === 'undefined') {\r\n throw new Error(\r\n 'createFixCzechStream requires the Web Streams API. Use Node 18+, Deno, Bun, or run in a browser/Edge runtime.',\r\n );\r\n }\r\n\r\n const decoder = new TextDecoder('utf-8');\r\n const encoder = new TextEncoder();\r\n const processor = createFixCzechProcessor(options);\r\n\r\n return new TransformStream({\r\n transform(chunk, controller) {\r\n const text =\r\n typeof chunk === 'string' ? chunk : decoder.decode(chunk, { stream: true });\r\n const out = processor.feed(text);\r\n if (out.length > 0) controller.enqueue(encoder.encode(out));\r\n },\r\n flush(controller) {\r\n const tail = decoder.decode();\r\n if (tail.length > 0) {\r\n const out = processor.feed(tail);\r\n if (out.length > 0) controller.enqueue(encoder.encode(out));\r\n }\r\n const final = processor.flush();\r\n if (final.length > 0) controller.enqueue(encoder.encode(final));\r\n },\r\n });\r\n}\r\n","import { NextResponse } from 'next/server';\r\nimport { createFixCzechStream } from '../fixCzechHtml.js';\r\n\r\n/**\r\n * @typedef {object} WithCzTypographyOptions\r\n * @property {import('../fixCzech.js').FixCzechOptions} [options] Rule toggles.\r\n * @property {(request: any) => boolean} [shouldProcess] Custom predicate – return false to skip.\r\n * @property {string[]} [contentTypes=['text/html']] Content-Type substrings that trigger transformation.\r\n */\r\n\r\nconst DEFAULT_CONTENT_TYPES = ['text/html'];\r\n\r\n/**\r\n * Build a Next.js middleware that pipes every HTML response through\r\n * {@link createFixCzechStream}. Streaming-friendly – the response body\r\n * is not buffered, which keeps Suspense and RSC payload behaviour\r\n * intact.\r\n *\r\n * Usage in `middleware.ts`:\r\n *\r\n * ```ts\r\n * import { withCzTypography } from 'cz-typography/next/middleware';\r\n *\r\n * export const middleware = withCzTypography();\r\n *\r\n * export const config = {\r\n * matcher: '/((?!api|_next/static|_next/image|favicon.ico).*)',\r\n * };\r\n * ```\r\n *\r\n * @param {WithCzTypographyOptions} [config]\r\n */\r\nexport function withCzTypography(config = {}) {\r\n const {\r\n options,\r\n shouldProcess,\r\n contentTypes = DEFAULT_CONTENT_TYPES,\r\n } = config;\r\n\r\n return async function middleware(request) {\r\n if (typeof shouldProcess === 'function' && !shouldProcess(request)) {\r\n return NextResponse.next();\r\n }\r\n\r\n const response = NextResponse.next();\r\n\r\n const contentType = response.headers.get('content-type') ?? '';\r\n const matches = contentTypes.some((ct) => contentType.includes(ct));\r\n if (!matches || !response.body) {\r\n return response;\r\n }\r\n\r\n const transformed = response.body.pipeThrough(createFixCzechStream(options));\r\n const headers = new Headers(response.headers);\r\n headers.delete('content-length');\r\n\r\n return new NextResponse(transformed, {\r\n status: response.status,\r\n statusText: response.statusText,\r\n headers,\r\n });\r\n };\r\n}\r\n\r\nexport { withCzTypography as default };\r\n"]}