|
19 | 19 | // Значение - Произвольный - значение для сохранения
|
20 | 20 | //
|
21 | 21 | Процедура СохранитьЯкорь(ИмяЯкоря, Значение) Экспорт
|
22 |
| - Если НЕ ПустаяСтрока(ИмяЯкоря) Тогда |
23 |
| - Якоря.Вставить(ИмяЯкоря, Значение); |
24 |
| - КонецЕсли; |
| 22 | + Якоря.Вставить(ИмяЯкоря, Значение); |
25 | 23 | КонецПроцедуры
|
26 | 24 |
|
27 | 25 | // Получение значения по якорю
|
|
30 | 28 | // ИмяЯкоря - Строка - имя якоря
|
31 | 29 | //
|
32 | 30 | // Возвращаемое значение:
|
33 |
| -// Произвольный - значение якоря или Неопределено |
| 31 | +// Произвольный - значение якоря или Неопределено, если якорь не найден |
34 | 32 | //
|
35 | 33 | Функция ПолучитьЗначениеЯкоря(ИмяЯкоря) Экспорт
|
36 | 34 | Возврат Якоря.Получить(ИмяЯкоря);
|
37 | 35 | КонецФункции
|
38 | 36 |
|
39 |
| -// Преобразует алиас (*anchor) в соответствующее значение |
| 37 | +// Проверка существования якоря |
40 | 38 | //
|
41 | 39 | // Параметры:
|
42 |
| -// ЗначениеСтрока - Строка - строка с алиасом |
| 40 | +// ИмяЯкоря - Строка - имя якоря |
43 | 41 | //
|
44 | 42 | // Возвращаемое значение:
|
45 |
| -// Произвольный - значение из якоря или Неопределено |
| 43 | +// Булево - Истина, если якорь существует |
46 | 44 | //
|
47 |
| -Функция ПреобразоватьАлиас(ЗначениеСтрока) Экспорт |
48 |
| - ИмяЯкоря = Сред(ЗначениеСтрока, 2); |
49 |
| - ЗначениеЯкоря = Якоря.Получить(ИмяЯкоря); |
50 |
| - Если ЗначениеЯкоря <> Неопределено Тогда |
51 |
| - Возврат ЗначениеЯкоря; |
52 |
| - Иначе |
53 |
| - Возврат Неопределено; |
54 |
| - КонецЕсли; |
| 45 | +Функция ЯкорьСуществует(ИмяЯкоря) Экспорт |
| 46 | + Возврат НЕ Якоря.Получить(ИмяЯкоря) = Неопределено; |
55 | 47 | КонецФункции
|
56 | 48 |
|
57 |
| -// Обработка якоря и алиаса в значении |
| 49 | +// Извлечение имени якоря из строки (для &anchor) |
58 | 50 | //
|
59 | 51 | // Параметры:
|
60 |
| -// ЗначениеСтрока - Строка - строка со значением |
61 |
| -// Ключ - Строка - ключ |
62 |
| -// ТекущийКонтекст - Соответствие - текущий контекст |
| 52 | +// Строка - Строка - строка с определением якоря |
63 | 53 | //
|
64 | 54 | // Возвращаемое значение:
|
65 |
| -// Структура - результат обработки с полями: Якорь, ЗначениеСтрока, АлиасОбработан |
| 55 | +// Строка - имя якоря или пустая строка, если якорь не найден |
66 | 56 | //
|
67 |
| -Функция ОбработатьЯкорьИАлиас(ЗначениеСтрока, Ключ, ТекущийКонтекст) Экспорт |
68 |
| - Результат = Новый Структура("Якорь, ЗначениеСтрока, АлиасОбработан", "", ЗначениеСтрока, Ложь); |
| 57 | +Функция ИзвлечьИмяЯкоряИлиАлиаса(Строка) Экспорт |
69 | 58 |
|
70 |
| - // Обработка якоря: key: &anchor value (только если есть значение после якоря) |
71 |
| - Если Лев(ЗначениеСтрока, 1) = "&" Тогда |
72 |
| - Пробел = Найти(ЗначениеСтрока, " "); |
73 |
| - Если Пробел > 0 Тогда |
74 |
| - Результат.Якорь = Сред(ЗначениеСтрока, 2, Пробел - 2); |
75 |
| - Результат.ЗначениеСтрока = СокрЛП(Сред(ЗначениеСтрока, Пробел + 1)); |
76 |
| - Иначе |
77 |
| - // Якорь без значения (для структур) |
78 |
| - Результат.Якорь = Сред(ЗначениеСтрока, 2); |
79 |
| - Результат.ЗначениеСтрока = ""; |
| 59 | + Строка = СокрЛП(Строка); |
| 60 | + Позиция = 1; |
| 61 | + Попытка |
| 62 | + Если не Лев(Строка, 1) = "&" И Не Лев(Строка, 1) = "*" Тогда |
| 63 | + Возврат ""; |
80 | 64 | КонецЕсли;
|
81 |
| - КонецЕсли; |
82 | 65 |
|
83 |
| - // Обработка алиаса: key: *anchor |
84 |
| - Если Лев(ЗначениеСтрока, 1) = "*" Тогда |
85 |
| - ИмяЯкоря = Сред(ЗначениеСтрока, 2); |
86 |
| - ЗначениеЯкоря = Якоря.Получить(ИмяЯкоря); |
87 |
| - Если ЗначениеЯкоря <> Неопределено Тогда |
88 |
| - ТекущийКонтекст.Вставить(Ключ, ЗначениеЯкоря); |
89 |
| - КонецЕсли; |
90 |
| - Результат.АлиасОбработан = Истина; |
91 |
| - КонецЕсли; |
| 66 | + // Извлекаем имя якоря (до пробела или до конца строки) |
| 67 | + НачалоИмени = Позиция + 1; |
| 68 | + КонецИмени = СтрДлина(Строка); |
| 69 | + |
| 70 | + Для Позиция = НачалоИмени По КонецИмени Цикл |
| 71 | + Символ = Сред(Строка, Позиция, 1); |
| 72 | + Если Символ = " " ИЛИ Символ = Символы.Таб Тогда |
| 73 | + КонецИмени = Позиция - 1; |
| 74 | + Прервать; |
| 75 | + КонецЕсли; |
| 76 | + КонецЦикла; |
| 77 | + |
| 78 | + Возврат Сред(Строка, НачалоИмени, КонецИмени - НачалоИмени + 1); |
| 79 | + Исключение |
| 80 | + Возврат ""; |
| 81 | + // Если произошла ошибка, возвращаем пустую строку |
| 82 | + КонецПопытки; |
92 | 83 |
|
93 |
| - Возврат Результат; |
94 | 84 | КонецФункции
|
95 | 85 |
|
96 |
| -// Проверка, является ли ключ только определением якоря |
| 86 | +// Удаление определения якоря из строки |
97 | 87 | //
|
98 | 88 | // Параметры:
|
99 |
| -// Ключ - Строка - ключ для проверки |
| 89 | +// Строка - Строка - строка с определением якоря |
100 | 90 | //
|
101 | 91 | // Возвращаемое значение:
|
102 |
| -// Булево - Истина, если ключ используется только для якоря |
103 |
| -// |
104 |
| -Функция ЭтоТолькоОпределениеЯкоря(Ключ) Экспорт |
105 |
| - // Список ключей, которые используются только для определения якорей |
106 |
| - // и не должны попадать в итоговый результат |
107 |
| - КлючиДляИсключения = СтрРазделить("shared_value,default_db,app_config,service_name,default_timeout", ","); |
108 |
| - Возврат КлючиДляИсключения.Найти(Ключ) <> Неопределено; |
109 |
| -КонецФункции |
110 |
| - |
111 |
| -// Установка значения с учетом якоря |
| 92 | +// Строка - строка без определения якоря |
112 | 93 | //
|
113 |
| -// Параметры: |
114 |
| -// Ключ - Строка - ключ |
115 |
| -// Якорь - Строка - якорь (если есть) |
116 |
| -// Значение - Произвольный - значение для установки |
117 |
| -// ТекущийКонтекст - Соответствие - текущий контекст |
118 |
| -// |
119 |
| -Процедура УстановитьЗначениеСЯкорем(Ключ, Якорь, Значение, ТекущийКонтекст) Экспорт |
120 |
| - Если Якорь <> "" Тогда |
121 |
| - СохранитьЯкорь(Якорь, Значение); |
122 |
| - Если НЕ ЭтоТолькоОпределениеЯкоря(Ключ) Тогда |
123 |
| - ТекущийКонтекст.Вставить(Ключ, Значение); |
124 |
| - КонецЕсли; |
125 |
| - Иначе |
126 |
| - ТекущийКонтекст.Вставить(Ключ, Значение); |
| 94 | +Функция УдалитьОпределениеЯкоря(Строка) Экспорт |
| 95 | + ПозицияЯкоря = СтрНайти(Строка, "&"); |
| 96 | + Если ПозицияЯкоря = 0 Тогда |
| 97 | + Возврат Строка; |
127 | 98 | КонецЕсли;
|
128 |
| -КонецПроцедуры |
| 99 | + |
| 100 | + // Находим конец имени якоря |
| 101 | + КонецИмени = СтрДлина(Строка); |
| 102 | + Для Позиция = ПозицияЯкоря + 1 По СтрДлина(Строка) Цикл |
| 103 | + Символ = Сред(Строка, Позиция, 1); |
| 104 | + Если Символ = " " ИЛИ Символ = Символы.Таб ИЛИ Символ = ":" Тогда |
| 105 | + КонецИмени = Позиция - 1; |
| 106 | + Прервать; |
| 107 | + КонецЕсли; |
| 108 | + КонецЦикла; |
| 109 | + |
| 110 | + // Удаляем определение якоря из строки |
| 111 | + ЧастьДо = Лев(Строка, ПозицияЯкоря - 1); |
| 112 | + ЧастьПосле = Сред(Строка, КонецИмени + 1); |
| 113 | + |
| 114 | + Возврат СокрЛП(ЧастьДо + ЧастьПосле); |
| 115 | +КонецФункции |
0 commit comments