refactor(эмиттеры): копии канон-writer'а приведены к одному виду

Навыки автономны, общей библиотеки нет — значит копии функции записи должны быть
буквально одинаковыми, иначе теряется смысл копипасты. PS-порт дисциплину держал
(7 копий байт-в-байт), а py разъехались: три варианта имени параметра, два стиля
кавычек, у cfe-borrow ещё и другое имя функции (save_xml_file).

Сведено к одной форме: имя write_xml_file, параметр content, одинаковое тело.
Различаются ровно две вещи, и обе осмысленные: вызов локального базового writer'а
(имена исторические — write_utf8_bom / write_text_with_bom / save_text_bom) и одна
строка примечания там, где у навыка есть исключение (модуль .bsl, HTML).

Текст комментария в PS выровнен с docstring'ом py: раньше он описывал ПРИЧИНУ
(here-string наследует LF), а не правило, и после правки py ports разъехались по
смыслу. Синтаксис остаётся разным по природе языков: в py docstring (в портах их
421 против 73 функций с #-комментарием — это местная норма), в PS — #.

Windows 641/641 обоими портами.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-05 19:22:43 +03:00
co-authored by Claude Opus 5
parent d05c91be03
commit 67185657c1
15 changed files with 102 additions and 74 deletions
+7 -4
View File
@@ -15,12 +15,15 @@ def write_utf8_bom(path, content):
f.write(content)
def write_xml_file(path, content):
# Канон выгрузки Конфигуратора: CRLF в разделителях строк, без перевода в конце
# файла. Скелет собирается тройными кавычками, а .py хранится с LF — отсюда LF и
# смешанный EOL. Нормализация здесь безопасна: многострочных текстовых узлов в
# скелете нет. Модули .bsl и текстовые макеты через неё НЕ пишутся.
"""XML в каноне выгрузки Конфигуратора: CRLF в разделителях, без перевода в конце.
Копия этой функции есть в каждом навыке-эмиттере (навыки автономны). Держать
копии одинаковыми — сознательно: разошедшиеся копии сводят на нет весь смысл.
"""
text = content.replace('\r\n', '\n').replace('\n', '\r\n').rstrip('\r\n')
write_utf8_bom(path, text)
def main():
sys.stdout.reconfigure(encoding="utf-8")
sys.stderr.reconfigure(encoding="utf-8")