You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Мир давно на 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 комментарии не включает:
То есть любой конфиг, сохранённый из Ведуна, уже сегодня теряет все комментарии. А их там
есть что терять: shops.xml — 57 штук, affects.xml — 15, включая большие пояснительные блоки
в шапке.
Это отдельный баг, к формату отношения не имеющий: лечится добавлением pugi::parse_comments
при разборе. Стоит починить до и независимо от любого перевода на YAML — иначе первое же
сохранение из игры съест пояснения, которые писали люди.
А для YAML вопрос комментариев тогда не является доводом против: терять нечего, потому что уже
теряем. Если захотим сохранять — в YAML это делается либо своим эмиттером (как у мира, где мы
сами дописываем поясняющие комментарии к значениям), либо явным полем.
Порядок
починить потерю комментариев в XML (parse_comments) — независимо и прямо сейчас;
Мир давно на 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комментарии не включает:То есть любой конфиг, сохранённый из Ведуна, уже сегодня теряет все комментарии. А их там
есть что терять:
shops.xml— 57 штук,affects.xml— 15, включая большие пояснительные блокив шапке.
Это отдельный баг, к формату отношения не имеющий: лечится добавлением
pugi::parse_commentsпри разборе. Стоит починить до и независимо от любого перевода на YAML — иначе первое же
сохранение из игры съест пояснения, которые писали люди.
А для YAML вопрос комментариев тогда не является доводом против: терять нечего, потому что уже
теряем. Если захотим сохранять — в YAML это делается либо своим эмиттером (как у мира, где мы
сами дописываем поясняющие комментарии к значениям), либо явным полем.
Порядок
parse_comments) — независимо и прямо сейчас;