Skip to content

Commit 0626240

Browse files
author
e.ivanov
committed
0.2.0
1 parent 9afedc3 commit 0626240

File tree

3 files changed

+127
-56
lines changed

3 files changed

+127
-56
lines changed

README.md

Lines changed: 126 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
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** - ключ-значение пары, скалярные типы
100153
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 тестов)
104157
6. **Пустые коллекции** - `[]`, `{}`, неявные пустые значения
105158
7. **Комментарии** - строки с `#`
106-
8. **Якоря и ссылки** - `&anchor`, `*anchor`, `<<: *anchor`
159+
8. **Якоря и ссылки** - `&anchor`, `*anchor`, `<<: *anchor` (22/25 тестов)
107160
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 тестов)
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\nLine 2\tTabbed"
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

168236
MIT License - см. файл LICENSE для подробностей.
169237

238+
## 👨‍💻 Автор
239+
240+
**Egor Ivanov** - [[email protected]](mailto:[email protected])
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! 🎉

packagedef

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//
44

55
Описание.Имя("oscript-yaml")
6-
.Версия("0.1.0")
6+
.Версия("0.2.0")
77
.Автор("Egor Ivanov")
88
.АдресАвтора("[email protected]")
99
.Описание("Реализация Yaml")

tests/yaml_test_suite.os

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1605,7 +1605,6 @@
16051605
&ОтображаемоеИмя("6H3V: Backslashes in singlequotes")
16061606
&Тег("single")
16071607
&Тег("scalar")
1608-
&Выключен("Ошибка парсинга одинарных кавычек с обратными слешами")
16091608

16101609
Процедура Test_6H3V() Экспорт
16111610
ВыполнитьТест("6H3V");

0 commit comments

Comments
 (0)