Skip to content

Привести конфигурацию к YAML (после перевода кодировки) #3789

Description

@kvirund

Мир давно на YAML и работает хорошо. Конфигурация при этом осталась в XML: 84 файла в
lib/cfg плюс 37 схем редактора. Предложение — привести к одному формату.

Заводится на потом, специально отдельно от перевода кодировки (#3788): кодировка и формат
— независимые изменения, и делать их разом значит при первой же поломке не отличить, что
виновато.

Что даёт

Один формат на весь проект. Инфраструктура готова: yaml-cpp уже в зависимостях, загрузчики
есть (мир, словари, сценарии симулятора). Правится руками легче, чем XML.

Что мешает — редактор Ведун

Из 84 конфигов 37 имеют схемы (lib/cfg/**/*.scheme) и правятся прямо в игре. Ведун —
это около 2000 строк поверх XML: типы полей, границы, подсказки, списки значений из реестра
перечислений, проверка при сохранении. Для них перевод на YAML означает переделку слоя данных
редактора, а не замену парсера.

Остальные 47 — обычные данные, конвертируются дёшево. Разумно начинать с них.

Комментарии: проверено, и вывод неожиданный

Сперва казалось, что XML сохраняет комментарии, а YAML потеряет. Оказалось, у нас не
сохраняет и XML.
parser_wrapper зовёт load_buffer с флагами по умолчанию, а
pugi::parse_default комментарии не включает:

=== по умолчанию ===          === с parse_comments ===
<root>                        <root>
    <item name="меч" />           <!-- поясняющий комментарий -->
</root>                           <item name="меч" />
                              </root>

То есть любой конфиг, сохранённый из Ведуна, уже сегодня теряет все комментарии. А их там
есть что терять: shops.xml — 57 штук, affects.xml — 15, включая большие пояснительные блоки
в шапке.

Это отдельный баг, к формату отношения не имеющий: лечится добавлением pugi::parse_comments
при разборе. Стоит починить до и независимо от любого перевода на YAML — иначе первое же
сохранение из игры съест пояснения, которые писали люди.

А для YAML вопрос комментариев тогда не является доводом против: терять нечего, потому что уже
теряем. Если захотим сохранять — в YAML это делается либо своим эмиттером (как у мира, где мы
сами дописываем поясняющие комментарии к значениям), либо явным полем.

Порядок

  1. починить потерю комментариев в XML (parse_comments) — независимо и прямо сейчас;
  2. перевести кодировку (UTF-8: перевести конфигурацию, справку и боевые данные #3788);
  3. перевести на YAML конфиги без схем — 47 файлов;
  4. решить отдельно, что делать с Ведуном и его 37 схемами.

Metadata

Metadata

Assignees

No one assigned

    Labels

    configsКонфигурация: lib/cfg, справка, доскиenhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions