71 lines
3.7 KiB
JavaScript
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();
|
|
}
|