1
1
# oscript-yaml 🚀
2
2
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/ )
4
8
5
9
## 📋 Оглавление
6
10
7
11
- [ Установка] ( #установка )
8
12
- [ Быстрый старт] ( #быстрый-старт )
13
+ - [ API] ( #api )
9
14
- [ Поддерживаемые возможности] ( #поддерживаемые-возможности )
10
15
- [ Статус реализации] ( #статус-реализации )
16
+ - [ Тестирование] ( #тестирование )
11
17
12
18
## 🚀 Установка
13
19
@@ -17,7 +23,7 @@ opm install oscript-yaml
17
23
18
24
Или клонируйте репозиторий:
19
25
``` bash
20
- git clone https://github.com/your-username /oscript-yaml.git
26
+ git clone https://github.com/Segate-ekb /oscript-yaml.git
21
27
```
22
28
23
29
## ⚡ Быстрый старт
@@ -27,7 +33,7 @@ git clone https://github.com/your-username/oscript-yaml.git
27
33
28
34
Парсер = Новый ПарсерYaml();
29
35
30
- // Простой пример
36
+ // Простой пример парсинга
31
37
СтрокаYAML = "
32
38
| name: John Doe
33
39
| age: 30
@@ -36,6 +42,53 @@ git clone https://github.com/your-username/oscript-yaml.git
36
42
37
43
Результат = Парсер.ПрочитатьYaml(СтрокаYAML);
38
44
Сообщить(Результат.Получить("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ключ: значение"
39
92
```
40
93
41
94
## ✅ Поддерживаемые возможности
@@ -47,7 +100,7 @@ git clone https://github.com/your-username/oscript-yaml.git
47
100
- ✅ Булевы значения (` true ` , ` false ` )
48
101
- ✅ Null значения (` null ` , ` ~ ` )
49
102
- ✅ Комментарии (` # ` )
50
- - ✅ Множественные документы(` --- ` и ` ... ` )
103
+ - ✅ Множественные документы (` --- ` и ` ... ` )
51
104
52
105
### Структуры данных
53
106
@@ -69,7 +122,7 @@ git clone https://github.com/your-username/oscript-yaml.git
69
122
70
123
- ✅ Literal style (` | ` ) - сохраняет переводы строк
71
124
- ✅ Folded style (` > ` ) - объединяет строки
72
- - ✅ strip_literal: (` |- ` ) - убирает последний перенос строки
125
+ - ✅ strip_literal: (` |- ` ) - убирает последний перенос строки
73
126
- ✅ keep_literal: (` |+ ` ) - сохраняет финальные переводы строк
74
127
75
128
### Пустые коллекции
@@ -94,84 +147,103 @@ git clone https://github.com/your-username/oscript-yaml.git
94
147
95
148
## 🚧 Статус реализации
96
149
97
- ### ✅ Реализовано
150
+ ### ✅ Полностью реализовано
98
151
99
- 1 . ** Базовый парсинг** - простые ключ-значение пары
152
+ 1 . ** Базовый парсинг YAML ** - ключ-значение пары, скалярные типы
100
153
2 . ** Массивы 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 тестов)
104
157
6 . ** Пустые коллекции** - ` [] ` , ` {} ` , неявные пустые значения
105
158
7 . ** Комментарии** - строки с ` # `
106
- 8 . ** Якоря и ссылки** - ` &anchor ` , ` *anchor ` , ` <<: *anchor `
159
+ 8 . ** Якоря и ссылки** - ` &anchor ` , ` *anchor ` , ` <<: *anchor ` (22/25 тестов)
107
160
9 . ** Смешанные типы** - комбинации различных структур
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 тестов)
109
166
110
- ### 🔄 В разработке / Планируется
167
+ ### 🔧 Частично реализовано
111
168
112
- #### Высокий приоритет
169
+ 1 . ** Обработка пробелов и табуляции** - базовая поддержка (75/92 тестов)
170
+ - ✅ Основные случаи отступов
171
+ - 🚧 Сложные случаи с табуляцией в различных контекстах
172
+ - 🚧 Trailing spaces в некоторых сценариях
113
173
114
- 1 . ** Чтение из файлов** - метод ` ПрочитатьИзФайла(ПутьКФайлу) `
174
+ 2 . ** Свернутые блоки (folded style)** - частичная поддержка (20/29 тестов)
175
+ - ✅ Базовое складывание строк с ` > `
176
+ - 🚧 Сложные случаи с модификаторами и отступами
177
+ - ✅ Корректная обработка финальных переносов строк
115
178
116
- 2 . ** Экранирование символов в строках**
179
+ 3 . ** YAML директивы** - базовая поддержка (19/25 тестов)
180
+ - ✅ Обработка ` %YAML 1.2 `
181
+ - 🚧 Валидация версий и дублированных директив
182
+ - 🚧 Обработка ошибок в директивах
117
183
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
+ ### 🔄 В разработке / Планируется
125
185
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");
133
190
```
134
191
135
- #### Средний приоритет
192
+ 2 . ** Улучшение обработки пробелов и табуляции**
193
+ - Корректная обработка табуляции в отступах
194
+ - Валидация смешения пробелов и табов
195
+ - Trailing spaces в потоках
136
196
137
- 1. **Сложные ключи**
197
+ 3 . ** Завершение якорей и алиасов**
198
+ - Edge cases с алиасами в последовательностях
199
+ - Сложные сценарии merge
138
200
139
- ` ` ` yaml
140
- " key with spaces " : value
141
- ? "complex key"
142
- : complex value
143
- ```
201
+ ### 📋 Планы развития
144
202
145
- #### Низкий приоритет
203
+ - ** Файловые операции** - ` ПрочитатьИзФайла() ` , ` ЗаписатьВФайл() `
204
+ - ** Улучшение парсинга пробелов** - завершение поддержки табуляции и trailing spaces
205
+ - ** Сложные ключи** - поддержка explicit keys
146
206
147
- 1 . ** Явные теги типов**
207
+ #### Долгосрочные планы
208
+ - ** Производительность** - оптимизация для больших файлов
209
+ - ** Потоковый парсинг** - обработка файлов по частям
210
+ - ** Плагины типов** - кастомные обработчики данных
148
211
149
- ``` yaml
150
- string_tag : !!str 123
151
- int_tag : !!int "456"
152
- ` ` `
212
+ ## 🧪 Тестирование
153
213
154
- 2. **Продвинутые anchor сценарии**
214
+ Проект включает обширный набор тестов на основе официального YAML Test Suite:
155
215
156
- ` ` ` yaml
157
- # Циклические ссылки, множественный merge
158
- ```
216
+ - ** Всего тестов:** 402 обнаружено
217
+ - ** Пройдено:** 355 теста (88.1%)
218
+ - ** Пропущено:** 47 тестов (для функций в разработке)
219
+ - ** Покрытие:** основные возможности YAML 1.2
159
220
160
- ### 📋 Дополнительные планы
221
+ ### Запуск тестов
161
222
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
+ ```
165
233
166
234
## 📄 Лицензия
167
235
168
236
MIT License - см. файл LICENSE для подробностей.
169
237
238
+ ## 👨💻 Автор
239
+
240
+
241
+
170
242
## 🔗 Полезные ссылки
171
243
172
- - [ YAML спецификация] ( https://yaml.org/spec/1.2.2/ )
244
+ - [ YAML спецификация 1.2 ] ( https://yaml.org/spec/1.2.2/ )
173
245
- [ OneScript документация] ( https://oscript.io/ )
246
+ - [ Официальный YAML Test Suite] ( https://github.com/yaml/yaml-test-suite )
247
+ - [ Тестовый Фреймворк] ( https://github.com/sfaqer/OneUnit )
174
248
175
249
---
176
-
177
- ** oscript-yaml** - надежное решение для работы с YAML в экосистеме OneScript! 🎉
0 commit comments