@paroicms/server
Version:
The ParoiCMS server
48 lines • 1.71 kB
JavaScript
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