|
47 | 47 | Строка = СтрЗаменить(Строка, "...", ""); |
48 | 48 | Иначе |
49 | 49 | Если Документ = Неопределено Тогда |
| 50 | + |
| 51 | + Если СокрЛП(Строка) = "" Тогда |
| 52 | + Продолжить; // мы вне документа, может там после и есть что-то, но эти строки нам не нужны |
| 53 | + КонецЕсли; |
50 | 54 | ВызватьИсключение "Найдено содержимое вне документа YAML: " + Строка; |
51 | 55 | КонецЕсли; |
52 | 56 |
|
53 | 57 | Документ.Добавить(Строка); |
54 | 58 | КонецЕсли; |
55 | 59 |
|
56 | 60 | КонецЦикла; |
57 | | - Если Документ.Количество() > 0 Тогда |
| 61 | + Если Не Документ = Неопределено и Документ.Количество() > 0 Тогда |
58 | 62 | МассивСтрокДокументов.Добавить(Документ); |
59 | 63 | КонецЕсли; |
60 | 64 | Возврат МассивСтрокДокументов; |
|
75 | 79 | Для Каждого Строка Из Строки Цикл |
76 | 80 | ОчищеннаяСтрока = СокрЛП(Строка); |
77 | 81 |
|
78 | | - Если ЭтоПустаяСтрокаИлиКомментарий(ОчищеннаяСтрока) Тогда |
79 | | - Продолжить; |
80 | | - КонецЕсли; |
81 | | - |
82 | 82 | ОчищенныеСтроки.Добавить(УбратьКомментарийИзСтроки(ОчищеннаяСтрока)); |
83 | 83 | КонецЦикла; |
84 | 84 |
|
|
93 | 93 | // Булево - Истина, если строка пустая или комментарий |
94 | 94 | // |
95 | 95 | Функция ЭтоПустаяСтрокаИлиКомментарий(Знач Строка) |
96 | | - Строка = СокрЛП(Строка); |
97 | | - Если ПустаяСтрока(Строка) ИЛИ Лев(Строка, 1) = "#" Тогда |
| 96 | + Если (Не СтрНайти(Строка, Символы.Таб) И СокрЛП(Строка) = "") ИЛИ Лев(СокрЛП(Строка), 1) = "#" Тогда |
98 | 97 | Возврат Истина; |
99 | 98 | КонецЕсли; |
100 | 99 |
|
|
113 | 112 |
|
114 | 113 | ПозицияКомментария = ПозицияНеЭкранированногоСимвола(Строка, "#"); |
115 | 114 |
|
116 | | - Если ПозицияКомментария > 0 Тогда |
117 | | - Возврат Лев(Строка, ПозицияКомментария - 1); |
118 | | - КонецЕсли; |
119 | | - |
120 | | - Возврат Строка; |
| 115 | + Если ПозицияКомментария = 0 Тогда |
| 116 | + Возврат Строка; |
| 117 | + КонецЕсли; |
| 118 | + |
| 119 | + Возврат Лев(Строка, ПозицияКомментария - 1); |
121 | 120 | КонецФункции |
122 | 121 |
|
123 | 122 | // Определение типа содержимого строки |
|
134 | 133 | Если ЭтоПустаяСтрокаИлиКомментарий(Строка) Тогда |
135 | 134 | Продолжить; |
136 | 135 | КонецЕсли; |
137 | | - |
138 | 136 | // Если это не пустая строка, то управляющий символ должен быть в ней. |
139 | 137 | // Если мы не нашли его, то это Строка или число, или что-то другое. |
140 | 138 | Возврат НайтиТипДанныхПоСтроке(Строка); |
|
151 | 149 | // Строка - тип данных: "Объект", "Массив", "Json", "МногострочнаяСтрока" |
152 | 150 | Функция НайтиТипДанныхПоСтроке(Знач Строка) |
153 | 151 | ДанныеУправляющегоСимвола = НайтиУправляющийСимволИЕгоПозицию(Строка); |
154 | | - |
155 | 152 | Если ДанныеУправляющегоСимвола.Позиция = 0 Тогда |
156 | 153 | Возврат "Скаляр"; |
157 | 154 | ИначеЕсли ДанныеУправляющегоСимвола.Символ = "{" или ДанныеУправляющегоСимвола.Символ = "[" Тогда |
|
249 | 246 | Если ИскомыйСимвол = "#" Тогда |
250 | 247 | // Это комментарий, и он работает только если через пробел |
251 | 248 | ПредыдущийСимвол = Сред(Строка, Позиция -1, 1); |
252 | | - Возврат ПредыдущийСимвол = " " Или ПредыдущийСимвол = Символы.Таб; |
| 249 | + Если Позиция > 1 И Не (ПредыдущийСимвол = " " Или ПредыдущийСимвол = Символы.Таб) Тогда |
| 250 | + ВызватьИсключение "Комментарий должен начинаться с пробела или табуляции: " + Строка; |
| 251 | + КонецЕсли; |
| 252 | + |
| 253 | + Возврат Истина; |
253 | 254 |
|
254 | 255 | КонецЕсли; |
255 | 256 |
|
|
306 | 307 | Возврат ПарсерАлиасов(Строки); |
307 | 308 | ИначеЕсли ТипСодержимого = "Скаляр" Тогда |
308 | 309 | ОчищенныеСтроки = ОчиститьСтроки(Строки); |
309 | | - ИтоговаяСтрока = СтрЗаменить(СтрСоединить(ОчищенныеСтроки, " "), " ", Символы.ПС); |
| 310 | + ИтоговаяСтрока = СокрЛП(СтрЗаменить(СтрСоединить(ОчищенныеСтроки, " "), " ", Символы.ПС)); |
| 311 | + |
310 | 312 | Попытка |
311 | | - Возврат ДесериализоватьJSON(ИтоговаяСтрока); |
| 313 | + Возврат Число(ИтоговаяСтрока); |
312 | 314 | Исключение |
313 | | - Возврат ИтоговаяСтрока; // Если не число, то возвращаем строку |
| 315 | + ИтоговаяСтрока = УбратьКавычки(ИтоговаяСтрока); |
| 316 | + Возврат ИтоговаяСтрока; |
314 | 317 | КонецПопытки; |
315 | 318 | ИначеЕсли ТипСодержимого = "Json" Тогда |
316 | 319 | ОчищенныеСтроки = ОчиститьСтроки(Строки); |
|
321 | 324 |
|
322 | 325 | КонецФункции |
323 | 326 |
|
| 327 | +Функция УбратьКавычки(Строка) |
| 328 | + // Убираем кавычки из строки, если они есть |
| 329 | + Если (СтрНачинаетсяС(Строка, """") И СтрЗаканчиваетсяНа(Строка, """")) |
| 330 | + Или (СтрНачинаетсяС(Строка, "'") И СтрЗаканчиваетсяНа(Строка, "'")) Тогда |
| 331 | + Возврат Сред(Строка, 2, СтрДлина(Строка) - 2); |
| 332 | + КонецЕсли; |
| 333 | + |
| 334 | + Возврат Строка; // Если кавычек нет, возвращаем строку как есть |
| 335 | + |
| 336 | +КонецФункции |
| 337 | + |
324 | 338 | // Парсер объектов |
325 | 339 | // |
326 | 340 | // Параметры: |
|
346 | 360 | СоответствиеОбъектов.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); |
347 | 361 | КонецЦикла; |
348 | 362 | Иначе |
349 | | - СоответствиеОбъектов.Вставить(Объект.ИмяОбъекта, ДанныеИзМассиваСтрок(Объект.Содержимое)); |
| 363 | + СоответствиеОбъектов.Вставить(УбратьКавычки(Объект.ИмяОбъекта), ДанныеИзМассиваСтрок(Объект.Содержимое)); |
350 | 364 | КонецЕсли; |
351 | 365 | КонецЦикла; |
352 | 366 | Возврат СоответствиеОбъектов; |
|
660 | 674 |
|
661 | 675 | Для Индекс = Параметры.ИндексНачалаСодержимого По МассивСтрок.Количество() - 1 Цикл |
662 | 676 | ИсходнаяСтрока = МассивСтрок[Индекс]; |
663 | | - Если ОпределитьОтступ(ИсходнаяСтрока) < Параметры.ОтступСодержимого Тогда |
| 677 | + |
| 678 | + Если ОпределитьОтступ(ИсходнаяСтрока) < Параметры.ОтступСодержимого |
| 679 | + И Не ЭтоПустаяСтрокаИлиКомментарий(ИсходнаяСтрока) Тогда |
664 | 680 | ВызватьИсключение "Отступ строки меньше требуемого"; // Прерываем, если отступ меньше, чем заданный |
665 | | - КонецЕсли; |
| 681 | + КонецЕсли; |
666 | 682 | // Убираем отступ с учетом базового отступа содержимого |
667 | 683 | СтрокаБезОтступа = Сред(ИсходнаяСтрока, Параметры.ОтступСодержимого + 1); |
668 | 684 | СтрокиСодержимого.Добавить(СтрокаБезОтступа); |
|
689 | 705 |
|
690 | 706 | // Удаляем пустые строки с конца |
691 | 707 | Пока СтрокиСодержимого.Количество() > 0 |
692 | | - И СокрЛП(СтрокиСодержимого[СтрокиСодержимого.Количество() - 1]) = "" Цикл |
| 708 | + И СтрЗаменить(СтрокиСодержимого[СтрокиСодержимого.Количество() - 1], " ", "") = "" Цикл |
693 | 709 | СтрокиСодержимого.Удалить(СтрокиСодержимого.Количество() - 1); |
694 | 710 | КонецЦикла; |
695 | 711 |
|
|
0 commit comments