|
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