11# oscript-yaml 🚀
22
3- Полнофункциональная библиотека для парсинга YAML в экосистеме OneScript/1C. Реализует основные возможности стандарта YAML 1.2 с поддержкой вложенных структур, якорей, многострочных литералов и Flow Style синтаксиса.
3+ Полнофункциональная библиотека для работы с YAML в экосистеме OneScript/1C. Реализует парсинг и сериализацию YAML с поддержкой основных возможностей стандарта YAML 1.2 включая вложенные структуры, якоря, многострочные литералы и Flow Style синтаксис.
4+
5+ [ ![ GitHub release] ( https://img.shields.io/github/v/release/Segate-ekb/oscript-yaml )] ( https://github.com/Segate-ekb/oscript-yaml/releases )
6+ [ ![ Tests] ( https://img.shields.io/badge/tests-354%20passed-green )] ( https://github.com/Segate-ekb/oscript-yaml )
7+ [ ![ OneScript] ( https://img.shields.io/badge/OneScript-2.0.0--rc.7+-blue )] ( https://oscript.io/ )
48
59## 📋 Оглавление
610
711- [ Установка] ( #установка )
812- [ Быстрый старт] ( #быстрый-старт )
13+ - [ API] ( #api )
914- [ Поддерживаемые возможности] ( #поддерживаемые-возможности )
1015- [ Статус реализации] ( #статус-реализации )
16+ - [ Тестирование] ( #тестирование )
1117
1218## 🚀 Установка
1319
@@ -17,7 +23,7 @@ opm install oscript-yaml
1723
1824Или клонируйте репозиторий:
1925``` bash
20- git clone https://github.com/your-username /oscript-yaml.git
26+ git clone https://github.com/Segate-ekb /oscript-yaml.git
2127```
2228
2329## ⚡ Быстрый старт
@@ -27,7 +33,7 @@ git clone https://github.com/your-username/oscript-yaml.git
2733
2834Парсер = Новый ПарсерYaml();
2935
30- // Простой пример
36+ // Простой пример парсинга
3137СтрокаYAML = "
3238| name: John Doe
3339| age: 30
@@ -36,6 +42,53 @@ git clone https://github.com/your-username/oscript-yaml.git
3642
3743Результат = Парсер.ПрочитатьYaml(СтрокаYAML);
3844Сообщить(Результат.Получить("name")); // John Doe
45+
46+ // Сериализация в YAML
47+ Данные = Новый Структура;
48+ Данные.Вставить("имя", "Иван Иванов");
49+ Данные.Вставить("возраст", 25);
50+ Данные.Вставить("активен", Истина);
51+
52+ СтрокаYAML = Парсер.ЗаписатьYaml(Данные);
53+ Сообщить(СтрокаYAML);
54+ ```
55+
56+ ## 📚 API
57+
58+ ### Класс ПарсерYaml
59+
60+ #### ПрочитатьYaml(СтрокаYaml)
61+
62+ Парсит YAML-строку и возвращает соответствующую структуру данных.
63+
64+ ** Параметры:**
65+ - ` СтрокаYaml ` (Строка) - YAML-строка для парсинга
66+
67+ ** Возвращаемое значение:**
68+ - Массив - массив документов yaml
69+
70+ ** Пример:**
71+ ``` bsl
72+ Парсер = Новый ПарсерYaml();
73+ Результат = Парсер.ПрочитатьYaml("key: value");
74+ ```
75+
76+ #### ЗаписатьYaml(Значение)
77+
78+ Сериализует данные в YAML-формат.
79+
80+ ** Параметры:**
81+ - ` Значение ` (Произвольный) - данные для сериализации
82+
83+ ** Возвращаемое значение:**
84+ - Строка - YAML-представление данных
85+
86+ ** Пример:**
87+ ``` bsl
88+ Парсер = Новый ПарсерYaml();
89+ Данные = Новый Структура("ключ", "значение");
90+ СтрокаYAML = Парсер.ЗаписатьYaml(Данные);
91+ // Результат: "---\nключ: значение"
3992```
4093
4194## ✅ Поддерживаемые возможности
@@ -47,7 +100,7 @@ git clone https://github.com/your-username/oscript-yaml.git
47100- ✅ Булевы значения (` true ` , ` false ` )
48101- ✅ Null значения (` null ` , ` ~ ` )
49102- ✅ Комментарии (` # ` )
50- - ✅ Множественные документы(` --- ` и ` ... ` )
103+ - ✅ Множественные документы (` --- ` и ` ... ` )
51104
52105### Структуры данных
53106
@@ -69,7 +122,7 @@ git clone https://github.com/your-username/oscript-yaml.git
69122
70123- ✅ Literal style (` | ` ) - сохраняет переводы строк
71124- ✅ Folded style (` > ` ) - объединяет строки
72- - ✅ strip_literal: (` |- ` ) - убирает последний перенос строки
125+ - ✅ strip_literal: (` |- ` ) - убирает последний перенос строки
73126- ✅ keep_literal: (` |+ ` ) - сохраняет финальные переводы строк
74127
75128### Пустые коллекции
@@ -94,84 +147,103 @@ git clone https://github.com/your-username/oscript-yaml.git
94147
95148## 🚧 Статус реализации
96149
97- ### ✅ Реализовано
150+ ### ✅ Полностью реализовано
98151
99- 1 . ** Базовый парсинг** - простые ключ-значение пары
152+ 1 . ** Базовый парсинг YAML ** - ключ-значение пары, скалярные типы
1001532 . ** Массивы Block Style** - списки с дефисами
101- 3 . ** Вложенные структуры** - многоуровневые объекты
102- 4 . ** Многострочные литералы** - ` | ` и ` > ` стили
103- 5 . ** Flow Style** - инлайн массивы и объекты
154+ 3 . ** Вложенные структуры** - многоуровневые объекты любой глубины
155+ 4 . ** Многострочные литералы** - ` | ` и ` > ` стили с базовыми модификаторами (28/39 тестов)
156+ 5 . ** Flow Style** - инлайн массивы ` [1, 2, 3] ` и объекты ` {key: value} ` (74/79 тестов)
1041576 . ** Пустые коллекции** - ` [] ` , ` {} ` , неявные пустые значения
1051587 . ** Комментарии** - строки с ` # `
106- 8 . ** Якоря и ссылки** - ` &anchor ` , ` *anchor ` , ` <<: *anchor `
159+ 8 . ** Якоря и ссылки** - ` &anchor ` , ` *anchor ` , ` <<: *anchor ` (22/25 тестов)
1071609 . ** Смешанные типы** - комбинации различных структур
108- 10 . ** Сложные структуры** - глубокая вложенность
161+ 10 . ** Сложные структуры** - глубокая вложенность и композиции
162+ 11 . ** YAML сериализация** - полная поддержка записи в YAML формат
163+ 12 . ** Базовое экранирование строк** - ` \n ` , ` \t ` , ` \r ` , ` \" ` , ` \\ ` , ` \/ ` , ` \b ` , ` \f ` (42/45 тестов)
164+ 13 . ** Unicode поддержка** - ` \uXXXX ` и ` \xXX ` последовательности
165+ 14 . ** Обработка ошибок** - валидация синтаксиса и информативные сообщения (58/74 тестов)
109166
110- ### 🔄 В разработке / Планируется
167+ ### 🔧 Частично реализовано
111168
112- #### Высокий приоритет
169+ 1 . ** Обработка пробелов и табуляции** - базовая поддержка (75/92 тестов)
170+ - ✅ Основные случаи отступов
171+ - 🚧 Сложные случаи с табуляцией в различных контекстах
172+ - 🚧 Trailing spaces в некоторых сценариях
113173
114- 1 . ** Чтение из файлов** - метод ` ПрочитатьИзФайла(ПутьКФайлу) `
174+ 2 . ** Свернутые блоки (folded style)** - частичная поддержка (20/29 тестов)
175+ - ✅ Базовое складывание строк с ` > `
176+ - 🚧 Сложные случаи с модификаторами и отступами
177+ - ✅ Корректная обработка финальных переносов строк
115178
116- 2 . ** Экранирование символов в строках**
179+ 3 . ** YAML директивы** - базовая поддержка (19/25 тестов)
180+ - ✅ Обработка ` %YAML 1.2 `
181+ - 🚧 Валидация версий и дублированных директив
182+ - 🚧 Обработка ошибок в директивах
117183
118- ``` yaml
119- escaped : " Line 1\n Line 2\t Tabbed"
120- unicode : " \u0041\u0042\u0043 " # ABC
121- quotes : " He said \" Hello\" "
122- ` ` `
123-
124- 3. **Расширенные числовые форматы**
184+ ### 🔄 В разработке / Планируется
125185
126- ` ` ` yaml
127- scientific : 1.2e+3
128- octal : 0o14
129- hex : 0xFF
130- binary : 0b1010
131- infinity : .inf
132- not_a_number : .nan
186+ 1 . ** Чтение из файлов** - метод ` ПрочитатьИзФайла(ПутьКФайлу) `
187+ ``` bsl
188+ Парсер = Новый ПарсерYaml();
189+ Результат = Парсер.ПрочитатьИзФайла("config.yaml");
133190 ```
134191
135- #### Средний приоритет
192+ 2 . ** Улучшение обработки пробелов и табуляции**
193+ - Корректная обработка табуляции в отступах
194+ - Валидация смешения пробелов и табов
195+ - Trailing spaces в потоках
136196
137- 1. **Сложные ключи**
197+ 3 . ** Завершение якорей и алиасов**
198+ - Edge cases с алиасами в последовательностях
199+ - Сложные сценарии merge
138200
139- ` ` ` yaml
140- " key with spaces " : value
141- ? "complex key"
142- : complex value
143- ```
201+ ### 📋 Планы развития
144202
145- #### Низкий приоритет
203+ - ** Файловые операции** - ` ПрочитатьИзФайла() ` , ` ЗаписатьВФайл() `
204+ - ** Улучшение парсинга пробелов** - завершение поддержки табуляции и trailing spaces
205+ - ** Сложные ключи** - поддержка explicit keys
146206
147- 1 . ** Явные теги типов**
207+ #### Долгосрочные планы
208+ - ** Производительность** - оптимизация для больших файлов
209+ - ** Потоковый парсинг** - обработка файлов по частям
210+ - ** Плагины типов** - кастомные обработчики данных
148211
149- ``` yaml
150- string_tag : !!str 123
151- int_tag : !!int "456"
152- ` ` `
212+ ## 🧪 Тестирование
153213
154- 2. **Продвинутые anchor сценарии**
214+ Проект включает обширный набор тестов на основе официального YAML Test Suite:
155215
156- ` ` ` yaml
157- # Циклические ссылки, множественный merge
158- ```
216+ - ** Всего тестов:** 402 обнаружено
217+ - ** Пройдено:** 355 теста (88.1%)
218+ - ** Пропущено:** 47 тестов (для функций в разработке)
219+ - ** Покрытие:** основные возможности YAML 1.2
159220
160- ### 📋 Дополнительные планы
221+ ### Запуск тестов
161222
162- 1 . ** Производительность** - оптимизация для больших файлов
163- 2 . ** Потоковый парсинг** - обработка файлов по частям
164- 3 . ** Плагины форматирования** - кастомные обработчики типов
223+ ``` bash
224+ # Все тесты
225+ oneunit e
226+
227+ # Конкретная категория
228+ oneunit e --tagsInclude flow # Flow Style тесты (74/79 пройдено)
229+ oneunit e --tagsInclude anchor # Якоря и ссылки (22/25 пройдено)
230+ oneunit e --tagsInclude literal # Многострочные литералы (28/39 пройдено)
231+ oneunit e --tagsInclude error # Обработка ошибок (58/74 пройдено)
232+ ```
165233
166234## 📄 Лицензия
167235
168236MIT License - см. файл LICENSE для подробностей.
169237
238+ ## 👨💻 Автор
239+
240+ 241+
170242## 🔗 Полезные ссылки
171243
172- - [ YAML спецификация] ( https://yaml.org/spec/1.2.2/ )
244+ - [ YAML спецификация 1.2 ] ( https://yaml.org/spec/1.2.2/ )
173245- [ OneScript документация] ( https://oscript.io/ )
246+ - [ Официальный YAML Test Suite] ( https://github.com/yaml/yaml-test-suite )
247+ - [ Тестовый Фреймворк] ( https://github.com/sfaqer/OneUnit )
174248
175249---
176-
177- ** oscript-yaml** - надежное решение для работы с YAML в экосистеме OneScript! 🎉
0 commit comments