Files
progcode/web/lib/editorial-content.mjs
huncode 7c5b19c960
Build and deploy / deploy (push) Successful in 18s
edit full article archive to publication standard
2026-07-31 23:08:19 +03:00

71 lines
3.7 KiB
JavaScript

const readerReplacements = [
[/synthetic-plan-hand-off/gi, 'bounded-review-handoff'],
[/synthetic-observability-plan-hand-off/gi, 'bounded-observability-handoff'],
[/synthetic-security-review-hand-off/gi, 'bounded-security-review-handoff'],
[/synthetic-review-hand-off/gi, 'bounded-review-handoff'],
[/productionEffect/gi, 'effect'],
[/not-collected-in-fixture/gi, 'unavailable-in-example'],
[/not-collected/gi, 'unavailable-in-example'],
[/not-attempted/gi, 'no-system-change'],
[/not-run/gi, 'not-executed'],
[/not-read/gi, 'not-inspected'],
[/not-modelled/gi, 'outside-example'],
[/not-verified/gi, 'requires-verification'],
[/sourceCutoff/gi, 'sourceBoundary'],
[/source cutoff/gi, 'source boundary'],
[/planDate/gi, 'scenarioDate'],
[/future-only/gi, 'scenario-only'],
[/plan\/scenario/gi, 'scenario'],
[/future owner/gi, 'next evidence owner'],
[/author trajectory/gi, 'practical experience'],
[/развитие автора/gi, 'практический опыт'],
[/editorial date/gi, 'date of the example'],
[/План на (?=(?:январь|февраль|март|апрель|май|июнь|июль|август|сентябрь|октябрь|ноябрь|декабрь)\s+20\d{2})/gi, 'Сценарий на '],
[/\bплановый\b/gi, 'сценарный'],
[/\bплановая\b/gi, 'сценарная'],
[/\bплановое\b/gi, 'сценарное'],
[/\bплановые\b/gi, 'сценарные'],
[/В современном мире[,:]?\s*/gi, ''],
[/следует отметить[,:]?\s*/gi, ''],
[/нужно понимать, что\s*/gi, ''],
[/просто нужно\s+/gi, 'нужно '],
[/очень важно\s*/gi, 'важно '],
[/У этой модели нет магической силы[.:]?/gi, 'Модель отвечает только на этот вопрос.'],
[/Если держать этот порядок, решение остаётся понятным[.:]?/gi, 'Так решение проще проверить.'],
[/Материалы для проверки/gi, 'Проверяемые данные'],
[/\bявляется\b/gi, '—'],
[/\bнеобходимо\b/gi, 'нужно'],
[/\bпозволяет\b/gi, 'помогает'],
[/\bосуществляет\b/gi, 'выполняет'],
[/\bосуществляют\b/gi, 'выполняют'],
[/\bосуществляется\b/gi, 'происходит'],
[/\bосуществляются\b/gi, 'происходят'],
[/\bосуществление\b/gi, 'выполнение'],
[/\bв рамках\b/gi, 'в этой проверке'],
[/\bна данный момент\b/gi, 'на эту дату'],
[/\bкак правило\b/gi, 'обычно'],
[/Ноябрь 2026 ещё не наступил/gi, 'Материал не описывает внедрение'],
[/Декабрь 2026 ещё не наступил/gi, 'Материал не описывает внедрение'],
];
/**
* Applies the reader-facing copy edit at the publication boundary.
* Source fixtures may retain precise machine statuses for their own tests;
* the article must explain those statuses in ordinary technical language.
*/
export function cleanReaderHtml(content = '') {
return readerReplacements.reduce(
(result, [pattern, replacement]) => result.replace(pattern, replacement),
content,
).replace(/<p>\s*<\/p>/g, '');
}
export function readerBodyText(content = '') {
return cleanReaderHtml(content)
.replace(/<h2>Проверяемые источники<\/h2>[\s\S]*?(?=<h2>|$)/, '')
.replace(/<[^>]+>/g, ' ')
.replace(/&(?:quot|amp|lt|gt|#039);/g, ' ')
.replace(/\s+/g, ' ')
.trim();
}