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.

298 lines (285 loc) 7.6 kB
'use strict'; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; }; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/rules/dates.js function applyDates(text) { return text.replace(FULL_DATE_REGEX, "$1.\xA0$2.\xA0$3").replace(DAY_MONTH_REGEX, "$1.\xA0$2."); } var FULL_DATE_REGEX, DAY_MONTH_REGEX; var init_dates = __esm({ "src/rules/dates.js"() { FULL_DATE_REGEX = /(\d{1,2})\.[ \t]+(\d{1,2})\.[ \t]+(\d{2,4})\b/g; DAY_MONTH_REGEX = /(\d{1,2})\.[ \t]+(\d{1,2})\.(?=[^\p{L}\p{N}]|$)/gu; } }); // src/rules/initials.js function applyInitials(text) { let previous; let current = text; do { previous = current; current = current.replace(INITIAL_REGEX, "$1.\xA0"); } while (current !== previous); return current; } var INITIAL_REGEX; var init_initials = __esm({ "src/rules/initials.js"() { INITIAL_REGEX = new RegExp("(\\b\\p{Lu})\\.[ \\t]+(?=\\p{Lu})", "gu"); } }); // src/rules/ordinals.js function applyOrdinals(text) { return text.replace(ORDINAL_REGEX, "$1.\xA0"); } var ORDINAL_REGEX; var init_ordinals = __esm({ "src/rules/ordinals.js"() { ORDINAL_REGEX = new RegExp("(\\d{1,2})\\.[ \\t]+(?=\\p{Ll})", "gu"); } }); // src/data/prepositions.js var PREPOSITIONS; var init_prepositions = __esm({ "src/data/prepositions.js"() { PREPOSITIONS = Object.freeze([ "a", "i", "k", "o", "s", "u", "v", "z" ]); } }); // src/rules/prepositions.js function applyPrepositions(text) { return text.replace(PREPOSITION_REGEX, "$1\xA0"); } var PREPOSITION_REGEX; var init_prepositions2 = __esm({ "src/rules/prepositions.js"() { init_prepositions(); PREPOSITION_REGEX = new RegExp( `(?<=^|[\\s(\\["'\xA0\u2018\u201C\xBB\u2014\u2013-])(${PREPOSITIONS.join("|")})[ \\t]+(?=\\S)`, "giu" ); } }); // src/rules/roman.js function applyRoman(text) { return text.replace(ROMAN_REGEX, "$1\xA0"); } var ROMAN_NUMERAL, ROMAN_REGEX; var init_roman = __esm({ "src/rules/roman.js"() { ROMAN_NUMERAL = "(?:(?=[IVXLCDM])M{0,3}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3}))"; ROMAN_REGEX = new RegExp( `(\\b\\p{Lu}\\p{L}+)[ \\t]+(?=${ROMAN_NUMERAL}\\.(?=[^\\p{L}\\p{N}]|$))`, "gu" ); } }); // src/rules/thousands.js function applyThousands(text) { let previous; let current = text; do { previous = current; current = current.replace(THOUSANDS_REGEX, "$1\xA0$2"); } while (current !== previous); return current; } var THOUSANDS_REGEX; var init_thousands = __esm({ "src/rules/thousands.js"() { THOUSANDS_REGEX = /(\d)[ \t](\d{3})(?=\D|$)/g; } }); // src/data/units.js var SAFE_UNITS, STRICT_UNITS; var init_units = __esm({ "src/data/units.js"() { SAFE_UNITS = Object.freeze( [ "km/h", "m/s", "kWh", "mAh", "mbar", "kbps", "Mbps", "Gbit", "kPa", "bar", "kg", "mg", "cm", "mm", "\xB5m", "nm", "km", "ml", "cl", "dl", "kJ", "Nm", "Wb", "lm", "lx", "cd", "mol", "min", "ms", "ns", "Hz", "Pa", "kW", "MW", "Ohm", "\xB0C", "\xB0F", "\xB0", "\u2030", "%", "px", "pt", "dpi", "bpm", "EUR", "USD", "CZK", "K\u010D", "mg/m\xB3", "str", "osob", "ks", "MJ", "TB", "GB", "MB", "kB", "bit", "GBit", "mol", "\u03A9", "\u20AC", "$", "\xA3" ].sort((a, b) => b.length - a.length) ); STRICT_UNITS = Object.freeze( ["m", "s", "l", "t", "g", "V", "A", "W", "J", "K", "B"].sort( (a, b) => b.length - a.length ) ); } }); // src/rules/units.js function escapeRegex(value) { return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } function applyUnits(text) { return text.replace(SAFE_UNIT_REGEX, "$1\xA0").replace(STRICT_UNIT_REGEX, "$1\xA0"); } var SAFE_PATTERN, STRICT_PATTERN, SAFE_UNIT_REGEX, STRICT_UNIT_REGEX; var init_units2 = __esm({ "src/rules/units.js"() { init_units(); SAFE_PATTERN = SAFE_UNITS.map(escapeRegex).join("|"); STRICT_PATTERN = STRICT_UNITS.map(escapeRegex).join("|"); SAFE_UNIT_REGEX = new RegExp( `(\\d)[ \\t]+(?=(?:${SAFE_PATTERN})(?![\\p{L}\\p{N}]))`, "gu" ); STRICT_UNIT_REGEX = new RegExp( `(\\d)[ \\t]+(?=(?:${STRICT_PATTERN})(?:[.,;:!?)\\]/\\u00A0]|$))`, "gu" ); } }); // src/fixCzech.js var fixCzech_exports = {}; __export(fixCzech_exports, { default: () => fixCzech_default, fixCzech: () => fixCzech }); function fixCzech(text, options) { if (typeof text !== "string" || text.length === 0) { return text; } const opts = options ? { ...DEFAULT_OPTIONS, ...options } : DEFAULT_OPTIONS; let result = text; if (opts.thousands) result = applyThousands(result); if (opts.dates) result = applyDates(result); if (opts.ordinals) result = applyOrdinals(result); if (opts.units) result = applyUnits(result); if (opts.initials) result = applyInitials(result); if (opts.roman) result = applyRoman(result); if (opts.prepositions) result = applyPrepositions(result); return result; } var DEFAULT_OPTIONS, fixCzech_default; var init_fixCzech = __esm({ "src/fixCzech.js"() { init_dates(); init_initials(); init_ordinals(); init_prepositions2(); init_roman(); init_thousands(); init_units2(); DEFAULT_OPTIONS = Object.freeze({ prepositions: true, units: true, initials: true, dates: true, ordinals: true, roman: true, thousands: true }); fixCzech_default = fixCzech; } }); // src/next/loader.cjs var require_loader = __commonJS({ "src/next/loader.cjs"(exports$1, module) { var { fixCzech: fixCzech2 } = (init_fixCzech(), __toCommonJS(fixCzech_exports)); var JSX_TEXT_REGEX = />([^<>{}]*?[a-zA-Záčďéěíňóřšťúůýž][^<>{}]*?)</g; module.exports = function czTypographyLoader(source) { const opts = this.getOptions ? this.getOptions() || {} : {}; return source.replace(JSX_TEXT_REGEX, function(full, text) { const fixed = fixCzech2(text, opts.options); if (fixed === text) return full; return ">" + fixed + "<"; }); }; } }); var loader = require_loader(); module.exports = loader; //# sourceMappingURL=loader.cjs.map //# sourceMappingURL=loader.cjs.map