Полнофункциональная библиотека для работы с YAML в экосистеме OneScript/1C. Реализует парсинг и сериализацию YAML с поддержкой основных возможностей стандарта YAML 1.2 включая вложенные структуры, якоря, многострочные литералы и Flow Style синтаксис.
opm install oscript-yamlИли клонируйте репозиторий:
git clone https://github.com/Segate-ekb/oscript-yaml.git#Использовать oscript-yaml
Парсер = Новый ПарсерYaml();
// Простой пример парсинга
СтрокаYAML = "
| name: John Doe
| age: 30
| active: true
|";
Результат = Парсер.ПрочитатьYaml(СтрокаYAML);
Сообщить(Результат.Получить("name")); // John Doe
// Сериализация в YAML
Данные = Новый Структура;
Данные.Вставить("имя", "Иван Иванов");
Данные.Вставить("возраст", 25);
Данные.Вставить("активен", Истина);
СтрокаYAML = Парсер.ЗаписатьYaml(Данные);
Сообщить(СтрокаYAML);Парсит YAML-строку и возвращает соответствующую структуру данных.
Параметры:
СтрокаYaml(Строка) - YAML-строка для парсинга
Возвращаемое значение:
- Массив - массив документов yaml
Пример:
Парсер = Новый ПарсерYaml();
Результат = Парсер.ПрочитатьYaml("key: value");Сериализует данные в YAML-формат.
Параметры:
Значение(Произвольный) - данные для сериализации
Возвращаемое значение:
- Строка - YAML-представление данных
Пример:
Парсер = Новый ПарсерYaml();
Данные = Новый Структура("ключ", "значение");
СтрокаYAML = Парсер.ЗаписатьYaml(Данные);
// Результат: "---\nключ: значение"- ✅ Строки (с кавычками и без)
- ✅ Числа (целые и вещественные)
- ✅ Булевы значения (
true,false) - ✅ Null значения (
null,~) - ✅ Комментарии (
#) - ✅ Множественные документы (
---и...)
- ✅ Соответствия (объекты)
- ✅ Массивы (списки)
- ✅ Вложенные структуры любой глубины
- ✅ Смешанные типы в массивах
- ✅ Массивы в квадратных скобках
[1, 2, 3] - ✅ Объекты в фигурных скобках
{key: value} - ✅ Вложенные Flow структуры
- ✅ Пустые коллекции
[],{} - ✅ Смешанный Flow и Block стили
- ✅ Literal style (
|) - сохраняет переводы строк - ✅ Folded style (
>) - объединяет строки - ✅ strip_literal: (
|-) - убирает последний перенос строки - ✅ keep_literal: (
|+) - сохраняет финальные переводы строк
- ✅ Пустые массивы в Flow style
[] - ✅ Пустые объекты в Flow style
{} - ✅ Неявные пустые значения (Block style)
- ✅ Null значения (
null,~)
- ✅ Определение якорей
&anchor - ✅ Ссылки на якоря
*anchor - ✅ Слияние объектов
<<: *anchor - ✅ Простые ссылки на скалярные значения
- ✅ Проверка синтаксиса Flow Style
- ✅ Валидация парных скобок и кавычек
- ✅ Информативные сообщения об ошибках
- Базовый парсинг YAML - ключ-значение пары, скалярные типы
- Массивы Block Style - списки с дефисами
- Вложенные структуры - многоуровневые объекты любой глубины
- Многострочные литералы -
|и>стили с базовыми модификаторами (28/39 тестов) - Flow Style - инлайн массивы
[1, 2, 3]и объекты{key: value}(74/79 тестов) - Пустые коллекции -
[],{}, неявные пустые значения - Комментарии - строки с
# - Якоря и ссылки -
&anchor,*anchor,<<: *anchor(22/25 тестов) - Смешанные типы - комбинации различных структур
- Сложные структуры - глубокая вложенность и композиции
- YAML сериализация - полная поддержка записи в YAML формат
- Базовое экранирование строк -
\n,\t,\r,\",\\,\/,\b,\f(42/45 тестов) - Unicode поддержка -
\uXXXXи\xXXпоследовательности - Обработка ошибок - валидация синтаксиса и информативные сообщения (58/74 тестов)
-
Обработка пробелов и табуляции - базовая поддержка (75/92 тестов)
- ✅ Основные случаи отступов
- 🚧 Сложные случаи с табуляцией в различных контекстах
- 🚧 Trailing spaces в некоторых сценариях
-
Свернутые блоки (folded style) - частичная поддержка (20/29 тестов)
- ✅ Базовое складывание строк с
> - 🚧 Сложные случаи с модификаторами и отступами
- ✅ Корректная обработка финальных переносов строк
- ✅ Базовое складывание строк с
-
YAML директивы - базовая поддержка (19/25 тестов)
- ✅ Обработка
%YAML 1.2 - 🚧 Валидация версий и дублированных директив
- 🚧 Обработка ошибок в директивах
- ✅ Обработка
-
Чтение из файлов - метод
ПрочитатьИзФайла(ПутьКФайлу)Парсер = Новый ПарсерYaml(); Результат = Парсер.ПрочитатьИзФайла("config.yaml");
-
Улучшение обработки пробелов и табуляции
- Корректная обработка табуляции в отступах
- Валидация смешения пробелов и табов
- Trailing spaces в потоках
-
Завершение якорей и алиасов
- Edge cases с алиасами в последовательностях
- Сложные сценарии merge
- Файловые операции -
ПрочитатьИзФайла(),ЗаписатьВФайл() - Улучшение парсинга пробелов - завершение поддержки табуляции и trailing spaces
- Сложные ключи - поддержка explicit keys
- Производительность - оптимизация для больших файлов
- Потоковый парсинг - обработка файлов по частям
- Плагины типов - кастомные обработчики данных
Проект включает обширный набор тестов на основе официального YAML Test Suite:
- Всего тестов: 402 обнаружено
- Пройдено: 355 теста (88.1%)
- Пропущено: 47 тестов (для функций в разработке)
- Покрытие: основные возможности YAML 1.2
# Все тесты
oneunit e
# Конкретная категория
oneunit e --tagsInclude flow # Flow Style тесты (74/79 пройдено)
oneunit e --tagsInclude anchor # Якоря и ссылки (22/25 пройдено)
oneunit e --tagsInclude literal # Многострочные литералы (28/39 пройдено)
oneunit e --tagsInclude error # Обработка ошибок (58/74 пройдено)MIT License - см. файл LICENSE для подробностей.
Egor Ivanov - [email protected]