UNPKG

@paroicms/server

Version:
48 lines 1.71 kB
export function formatFrenchText(text) { if (text.length === 0) return text; let result = text; result = removeNonBreakingSpaces(result); result = ensureSpaceBeforePunctuation(result); result = replaceQuotesWithGuillemets(result); result = addNonBreakingSpacesBeforePunctuation(result); result = formatNumbersAndUnits(result); result = formatNamesAndTitles(result); result = formatAbbreviations(result); return result; } function removeNonBreakingSpaces(text) { return text.replace(/\u00A0/g, " "); } function ensureSpaceBeforePunctuation(text) { return text.replace(/([^\s])([!?;:])/g, "$1 $2"); } function replaceQuotesWithGuillemets(text) { return text.replace(/"([^"]*)"/g, "«\u202F$1\u202F»"); } function addNonBreakingSpacesBeforePunctuation(text) { return text .replace(/(\s|^)([!?;:])/g, "\u202F$2") .replace(/«\s?/g, "«\u202F") .replace(/\s?»/g, "\u202F»"); } function formatNumbersAndUnits(text) { return text .replace(/(\d)\s+(°|′|″|€|h|p\.|%)/g, "$1\u202F$2") .replace(/(n°)\s+(\d)/g, "$1\u202F$2") .replace(/\b(\d{1,3}(?:[ \u00A0]\d{3})+)\b/g, (match) => { return match.replace(/[ \u00A0]/g, "\u202F"); }); } function formatNamesAndTitles(text) { return text .replace(/(\b[A-Z]\.)\s+([A-Z][a-z])/g, "$1\u202F$2") .replace(/(M\.|Mme\.|J\.-P\.)\s+([A-Z][a-z])/g, "$1\u202F$2"); } function formatAbbreviations(text) { return text .replace(/(\betc\.)\s+(\w)/g, "$1\u202F$2") .replace(/(\bcf\.)\s+(\w)/g, "$1\u202F$2") .replace(/,\s+etc\./g, ",\u202Fetc."); } //# sourceMappingURL=normalize-typography-fr-FR.js.map