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
JavaScript
;
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