|
259 | 259 | ОчищенныеСтроки = Новый Массив(); |
260 | 260 |
|
261 | 261 | Для Каждого Строка Из Строки Цикл |
262 | | - ОчищеннаяСтрока = СокрЛП(Строка); |
263 | | - |
264 | | - ОчищенныеСтроки.Добавить(УбратьКомментарийИзСтроки(ОчищеннаяСтрока)); |
| 262 | + ОчищеннаяСтрока = УбратьКомментарийИзСтроки(СокрЛП(Строка)); |
| 263 | + ОчищенныеСтроки.Добавить(ОчищеннаяСтрока); |
265 | 264 | КонецЦикла; |
266 | 265 |
|
267 | 266 | Возврат ОчищенныеСтроки; |
|
275 | 274 | // Булево - Истина, если строка пустая или комментарий |
276 | 275 | // |
277 | 276 | Функция ЭтоПустаяСтрокаИлиКомментарий(Знач Строка) |
278 | | - Если (Не СтрНайти(Строка, Символы.Таб) И СокрЛП(Строка) = "") ИЛИ Лев(СокрЛП(Строка), 1) = "#" Тогда |
| 277 | + Если (СокрЛП(Строка) = "") ИЛИ Лев(СокрЛП(Строка), 1) = "#" Тогда |
279 | 278 | Возврат Истина; |
280 | 279 | КонецЕсли; |
281 | 280 |
|
|
296 | 295 |
|
297 | 296 | Если ПозицияКомментария = 0 Тогда |
298 | 297 | Возврат Строка; |
299 | | - КонецЕсли; |
| 298 | + КонецЕсли; |
300 | 299 |
|
301 | 300 | Возврат Лев(Строка, ПозицияКомментария - 1); |
302 | 301 | КонецФункции |
|
317 | 316 | Лог.Отладка("Определение типа содержимого для " + Строки.Количество() + " строк"); |
318 | 317 |
|
319 | 318 | Для Каждого Строка Из Строки Цикл |
| 319 | + |
320 | 320 | Если ЭтоПустаяСтрокаИлиКомментарий(Строка) Тогда |
321 | 321 | Продолжить; |
322 | 322 | КонецЕсли; |
|
469 | 469 | Если ОбработатьЗакрытиеКавычек(Строка, Позиция, Символ, ВКавычках, ТипКавычек) Тогда |
470 | 470 | Продолжить; |
471 | 471 | КонецЕсли; |
472 | | - |
473 | 472 | // Поиск символа (не в кавычках и с пробелом после) |
474 | 473 | Если НЕ ВКавычках И Символ = ИскомыйСимвол Тогда |
475 | 474 | Если ЭтоЗначащийСимвол(Строка, Позиция, ИскомыйСимвол, ЭтоFlowСтиль) Тогда |
|
496 | 495 | Функция ЭтоЗначащийСимвол(Строка, Позиция, ИскомыйСимвол, ЭтоFlowСтиль = Ложь) |
497 | 496 |
|
498 | 497 | Если ИскомыйСимвол = "#" Тогда |
499 | | - |
| 498 | + Если Не Позиция = 1 |
| 499 | + И Не (Сред(Строка, Позиция - 1, 1) = " " |
| 500 | + Или Сред(Строка, Позиция - 1, 1) = Символы.Таб) Тогда |
| 501 | + Возврат Ложь; |
| 502 | + КонецЕсли; |
500 | 503 | Возврат Истина; |
501 | 504 |
|
502 | 505 | КонецЕсли; |
|
535 | 538 | Если ЭтоМногострочнаяСтрока Тогда |
536 | 539 | МассивДопустимыхСимволов.Добавить("-"); |
537 | 540 | МассивДопустимыхСимволов.Добавить("+"); |
| 541 | + МассивДопустимыхСимволов.Добавить("0"); |
| 542 | + МассивДопустимыхСимволов.Добавить("1"); |
| 543 | + МассивДопустимыхСимволов.Добавить("2"); |
| 544 | + МассивДопустимыхСимволов.Добавить("3"); |
| 545 | + МассивДопустимыхСимволов.Добавить("4"); |
| 546 | + МассивДопустимыхСимволов.Добавить("5"); |
| 547 | + МассивДопустимыхСимволов.Добавить("6"); |
| 548 | + МассивДопустимыхСимволов.Добавить("7"); |
| 549 | + МассивДопустимыхСимволов.Добавить("8"); |
| 550 | + МассивДопустимыхСимволов.Добавить("9"); |
| 551 | + |
538 | 552 | КонецЕсли; |
539 | 553 |
|
540 | 554 | СледующийСимвол = Сред(Строка, Позиция + 1, 1); |
|
577 | 591 | ИначеЕсли ТипСодержимого = "Скаляр" Тогда |
578 | 592 | Лог.Отладка("Обработка скалярного значения"); |
579 | 593 | ОчищенныеСтроки = ОчиститьСтроки(Строки); |
580 | | - ИтоговаяСтрока = СокрЛП(СтрЗаменить(СтрСоединить(ОчищенныеСтроки, " "), " ", Символы.ПС)); |
581 | | - |
| 594 | + ИтоговаяСтрока = СобратьСтрокуИзМассива(ОчищенныеСтроки); |
582 | 595 | // Убираем кавычки перед обработкой |
583 | 596 | ИтоговаяСтрока = УбратьКавычки(ИтоговаяСтрока); |
584 | 597 |
|
|
616 | 629 | // Заменяем экранированные символы |
617 | 630 | Результат = СтрЗаменить(Результат, "\""", """"); |
618 | 631 | Результат = СтрЗаменить(Результат, "\\", "\"); |
| 632 | + Результат = СтрЗаменить(Результат, "\/", "/"); |
619 | 633 | Результат = СтрЗаменить(Результат, "\n", Символы.ПС); |
620 | 634 | Результат = СтрЗаменить(Результат, "\t", Символы.Таб); |
621 | 635 | Результат = СтрЗаменить(Результат, "\r", Символы.ВК); |
622 | 636 | КонецЕсли; |
| 637 | + |
| 638 | + Если СтрНачинаетсяС(Строка, "'") Тогда |
| 639 | + // Заменяем экранированные символы |
| 640 | + Результат = СтрЗаменить(Результат, "''", "'"); |
| 641 | + КонецЕсли; |
623 | 642 |
|
624 | 643 | Возврат Результат; |
625 | 644 | КонецЕсли; |
|
728 | 747 | КонецЦикла; |
729 | 748 | Иначе |
730 | 749 | Лог.Отладка("Обработка объекта с ключом: " + Объект.ИмяОбъекта); |
731 | | - СоответствиеОбъектов.Вставить(УбратьКавычки(Объект.ИмяОбъекта), ДанныеИзМассиваСтрок(Объект.Содержимое)); |
| 750 | + СоответствиеОбъектов.Вставить(УбратьКавычки(Объект.ИмяОбъекта), ДанныеИзМассиваСтрок(Объект.Содержимое)); |
732 | 751 | КонецЕсли; |
733 | 752 | КонецЦикла; |
734 | 753 |
|
|
1077 | 1096 | Продолжить; // Пропускаем пустые строки и комментарии |
1078 | 1097 | КонецЕсли; |
1079 | 1098 |
|
| 1099 | + Строка = УбратьКомментарийИзСтроки(Строка); |
1080 | 1100 | ДанныеУправляющегоСимвола = НайтиУправляющийСимволИЕгоПозицию(Строка); |
1081 | 1101 |
|
1082 | 1102 | Если НЕ (ДанныеУправляющегоСимвола.Символ = "|" ИЛИ ДанныеУправляющегоСимвола.Символ = ">") тогда |
|
1086 | 1106 |
|
1087 | 1107 | УправляющийПодсимвол = ПолучитьУправляющийПодсимвол(Строка, ДанныеУправляющегоСимвола.Позиция + 1); |
1088 | 1108 | Лог.Отладка("Найден управляющий символ: " + ДанныеУправляющегоСимвола.Символ + " с подсимволом: " + УправляющийПодсимвол); |
1089 | | - |
| 1109 | + Если Не СокрЛП(СтрЗаменить(Строка, ДанныеУправляющегоСимвола.Символ+УправляющийПодсимвол, "")) = "" Тогда |
| 1110 | + Лог.Ошибка("В многострочной строке не должно быть ничего после управляющей последовательности"); |
| 1111 | + ВызватьИсключение "В многострочной строке не должно быть ничего после управляющей последовательности"; |
| 1112 | + КонецЕсли; |
| 1113 | + |
1090 | 1114 | // Определяем отступ для содержимого |
1091 | 1115 | ОтступСодержимого = 0; |
1092 | 1116 | Если Индекс + 1 < МассивСтрок.Количество() Тогда |
|
1181 | 1205 | Возврат ""; |
1182 | 1206 | КонецЕсли; |
1183 | 1207 |
|
1184 | | - // Определяем разделитель строк в зависимости от типа |
1185 | | - Разделитель = ?(Параметры.ТипСтроки = "|", Символы.ПС, " "); |
1186 | | - |
1187 | 1208 | // Соединяем строки разделителем |
1188 | | - РезультирующаяСтрока = СтрСоединить(СтрокиСодержимого, Разделитель); |
| 1209 | + |
1189 | 1210 |
|
1190 | 1211 | // Заменяем двойные пробелы на переносы строк для блочного стиля |
1191 | 1212 | Если Параметры.ТипСтроки = ">" Тогда |
1192 | | - РезультирующаяСтрока = СтрЗаменить(РезультирующаяСтрока, " ", Символы.ПС); |
| 1213 | + РезультирующаяСтрока = СобратьСтрокуИзМассива(СтрокиСодержимого); |
| 1214 | + Иначе |
| 1215 | + РезультирующаяСтрока = СтрСоединить(СтрокиСодержимого, Символы.ПС); |
1193 | 1216 | КонецЕсли; |
1194 | 1217 |
|
1195 | 1218 | // Добавляем перенос строки в конце если необходимо |
|
1205 | 1228 | Если СтрДлина(Строка) < Позиция Тогда |
1206 | 1229 | Возврат ""; // Нет подсимвола, возвращаем пустую строку |
1207 | 1230 | КонецЕсли; |
1208 | | - Возврат Сред(Строка, Позиция, 1); |
| 1231 | + Возврат СокрЛП(Сред(Строка, Позиция, 2)); |
| 1232 | +КонецФункции |
| 1233 | + |
| 1234 | +Функция СобратьСтрокуИзМассива(МассивСтрок) |
| 1235 | + Результат = ""; |
| 1236 | + СтрокаБезРазделителя = Истина; |
| 1237 | + Для Каждого Строка Из МассивСтрок Цикл |
| 1238 | + Если СокрЛП(Строка) = "" Тогда |
| 1239 | + Результат = Результат + Символы.ПС; |
| 1240 | + СтрокаБезРазделителя = Истина; |
| 1241 | + Иначе |
| 1242 | + Результат = Результат + ?(СтрокаБезРазделителя,"", " ")+ Строка; |
| 1243 | + СтрокаБезРазделителя = Ложь; |
| 1244 | + КонецЕсли; |
| 1245 | + КонецЦикла; |
| 1246 | + Возврат СокрЛП(Результат); |
| 1247 | + |
1209 | 1248 | КонецФункции |
1210 | 1249 |
|
1211 | 1250 | // Создает структуру параметров якоря |
|
0 commit comments