Функция, через которую можно пропустить текст, чтобы он стал красивым и офигенным.
const NON_BREAKING_SPACE = String.fromCharCode(160);
const NON_BREAKING_HYPHEN = String.fromCharCode(8209);
function trimEnd(str) {
return str.replace(/\\s+$/g, '');
}
function typography(str) {
return str
// Сделать нормальные кавычки
.replace(
/("|"|")(.+?)("|"|")/gi,
(_1, _2, inner) => `«${inner}»`,
)
// Тире правильной длинны
.replace(
/(\\s*?)(—)(\\s*)/gi,
` — `,
)
// Неразрывные пробелы в нужных местах
.replace(
/\\s+.{1,2}(\\s+)/gi,
(match) => `${trimEnd(match)}${NON_BREAKING_SPACE}`,
)
// Неразрывный минус в нужных местах
.replace(
'-',
NON_BREAKING_HYPHEN,
);
}
Известные проблемы — не заменяет двойные пробелы одинарными, не учитывает кавычки в кавычках.