mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-12-10 11:10:31 +02:00
276 lines
11 KiB
Plaintext
276 lines
11 KiB
Plaintext
#Использовать "./internal"
|
|
|
|
Перем МассивСимволов;
|
|
Перем ЕстьНовыеСлова;
|
|
|
|
#Область СлужебныйПрограммныйИнтерфейс
|
|
|
|
Функция СоздатьНаборСловарей(Знач ФайлыМодулей, Знач Языки, Знач КаталогСловарей) Экспорт
|
|
|
|
ЕстьНовыеСлова = Ложь;
|
|
|
|
Для Каждого Язык Из Языки Цикл
|
|
|
|
ПутьСловаря = КаталогСловарей + Язык + ".json";
|
|
ФайлСловаря = Новый Файл(ПутьСловаря);
|
|
|
|
Если ФайлСловаря.Существует() Тогда
|
|
СоздатьСловарь(ФайлыМодулей, ПутьСловаря);
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
Возврат ЕстьНовыеСлова;
|
|
|
|
КонецФункции
|
|
|
|
Процедура СоздатьСловарь(Знач ФайлыМодулей, Знач ПутьСловаря) Экспорт
|
|
|
|
МассивСимволов = Инструменты.ПолучитьМассивСимволов();
|
|
|
|
СоответствиеСловаря = Инструменты.ПрочитатьФайлJSON(ПутьСловаря);
|
|
СписокСлов = Новый СписокЗначений();
|
|
|
|
Для Каждого Модуль Из ФайлыМодулей Цикл
|
|
|
|
ПолучитьМассивСловОригинала(Модуль.ПолноеИмя, СписокСлов);
|
|
|
|
КонецЦикла;
|
|
|
|
Для Каждого Слово Из СписокСлов Цикл
|
|
|
|
СловоОригинал = Слово.Значение;
|
|
СуществующийПеревод = СоответствиеСловаря[СловоОригинал];
|
|
|
|
Если Не ЗначениеЗаполнено(СуществующийПеревод) Тогда
|
|
СоответствиеСловаря.Вставить(СловоОригинал, "");
|
|
ЕстьНовыеСлова = Истина;
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря);
|
|
|
|
КонецПроцедуры
|
|
|
|
#КонецОбласти
|
|
|
|
#Область СлужебныеПроцедурыИФункции
|
|
|
|
Процедура ЗаписатьJSONСловаря(СоответствиеСловаря, ПутьСловаря)
|
|
|
|
ТЗ = Новый ТаблицаЗначений();
|
|
ТЗ.Колонки.Добавить("Ключ");
|
|
ТЗ.Колонки.Добавить("Значение");
|
|
ТЗ.Колонки.Добавить("ДлинаКлюча");
|
|
ТЗ.Колонки.Добавить("Заполнено");
|
|
|
|
Для Каждого Элемент Из СоответствиеСловаря Цикл
|
|
|
|
НоваяСтрока = ТЗ.Добавить();
|
|
НоваяСтрока.Ключ = Элемент.Ключ;
|
|
НоваяСтрока.Значение = Элемент.Значение;
|
|
НоваяСтрока.ДлинаКлюча = СтрДлина(Элемент.Ключ);
|
|
НоваяСтрока.Заполнено = ЗначениеЗаполнено(Элемент.Значение);
|
|
|
|
КонецЦикла;
|
|
|
|
ТЗ.Сортировать("Заполнено УБЫВ, ДлинаКлюча");
|
|
|
|
JSON = Новый ЗаписьJSON;
|
|
|
|
JSON.ОткрытьФайл(ПутьСловаря);
|
|
JSON.ЗаписатьНачалоОбъекта();
|
|
|
|
Для Каждого СтрокаТЗ Из ТЗ Цикл
|
|
|
|
JSON.ЗаписатьИмяСвойства(СтрокаТЗ["Ключ"]);
|
|
JSON.ЗаписатьЗначение(СтрокаТЗ["Значение"]);
|
|
|
|
КонецЦикла;
|
|
|
|
JSON.ЗаписатьКонецОбъекта();
|
|
JSON.Закрыть();
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПолучитьМассивСловОригинала(Знач ПутьКФайлу, СписокСлов)
|
|
|
|
Документ = Новый ТекстовыйДокумент();
|
|
Документ.Прочитать(ПутьКФайлу, "UTF-8");
|
|
|
|
Для Н = 1 По Документ.КоличествоСтрок() Цикл
|
|
|
|
ТекущаяСтрока = СокрЛП(Документ.ПолучитьСтроку(Н));
|
|
|
|
РазобратьСтрокуНаСлова(ТекущаяСтрока, СписокСлов);
|
|
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура РазобратьСтрокуНаСлова(Знач ТекущаяСтрока, СписокСлов)
|
|
|
|
Если СтрНачинаетсяС(ТекущаяСтрока, "// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог") Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
Если СтрНачинаетсяС(ТекущаяСтрока, "//") Тогда
|
|
|
|
РазобратьСтрокуКомментария(ТекущаяСтрока, СписокСлов);
|
|
|
|
Иначе
|
|
|
|
ЭтоВыражение = СтрНайти(ТекущаяСтрока, """") <> 0
|
|
Или СтрНайти(ТекущаяСтрока, "|") <> 0
|
|
Или СтрНайти(ТекущаяСтрока, "<") <> 0
|
|
Или СтрНайти(ТекущаяСтрока, ">") <> 0;
|
|
|
|
Если ЭтоВыражение Тогда
|
|
РазобратьВыражение(ТекущаяСтрока, СписокСлов);
|
|
Иначе
|
|
РазобратьОбычнуюСтроку(ТекущаяСтрока, СписокСлов);
|
|
КонецЕсли;
|
|
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура РазобратьСтрокуКомментария(ТекущаяСтрока, СписокСлов)
|
|
|
|
ТекущаяСтрока = СокрЛП(СтрЗаменить(ТекущаяСтрока, "//", ""));
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, " - ", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, ": [", "$");
|
|
МассивСтроки = СтрРазделить(ТекущаяСтрока, "$", Ложь);
|
|
|
|
Для Г = 0 По МассивСтроки.ВГраница() Цикл
|
|
ДобавитьСлово(СписокСлов, МассивСтроки[Г]);
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура РазобратьВыражение(ТекущаяСтрока, СписокСлов)
|
|
|
|
ТекущаяСтрока = " " + ТекущаяСтрока;
|
|
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, """<", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, ">""", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, """", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "|", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "<", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, ">", "$");
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "$$", """""");
|
|
|
|
МассивСтроки = СтрРазделить(ТекущаяСтрока, "$", Истина);
|
|
|
|
Цельный = Ложь;
|
|
Для Каждого Элемент Из МассивСтроки Цикл
|
|
|
|
Если Не ЗначениеЗаполнено(СокрЛП(Элемент)) Тогда
|
|
Продолжить;
|
|
КонецЕсли;
|
|
|
|
Если Цельный Тогда
|
|
ДобавитьСлово(СписокСлов, Элемент);
|
|
Иначе
|
|
РазобратьОбычнуюСтроку(Элемент, СписокСлов);
|
|
КонецЕсли;
|
|
|
|
Цельный = Не Цельный;
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура РазобратьОбычнуюСтроку(ТекущаяСтрока, СписокСлов)
|
|
|
|
Для Каждого Символ Из МассивСимволов Цикл
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, Символ, "$");
|
|
КонецЦикла;
|
|
|
|
Пока СтрНайти(ТекущаяСтрока, "$$") <> 0 Цикл
|
|
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, "$$", "$");
|
|
КонецЦикла;
|
|
|
|
МассивЭлемента = СтрРазделить(ТекущаяСтрока, "$", Ложь);
|
|
Для Каждого Дробный Из МассивЭлемента Цикл
|
|
ДобавитьСлово(СписокСлов, Дробный);
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ДобавитьСлово(Список, Слово)
|
|
|
|
НормализоватьСлово(Слово);
|
|
|
|
Если Не ЗначениеЗаполнено(Слово) Или Не НайтиКириллицу(Слово) Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
СуществующееЗначение = Список.НайтиПоЗначению(Слово);
|
|
|
|
Если СуществующееЗначение = Неопределено Тогда
|
|
Список.Добавить(Слово, СтрДлина(Слово));
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура НормализоватьСлово(Слово)
|
|
|
|
Слово = СокрЛП(Слово);
|
|
|
|
Нормализовано = Ложь;
|
|
|
|
Пока Не Нормализовано Цикл
|
|
|
|
ПервыйСимвол = Ложь;
|
|
ПоследнийСимвол = Ложь;
|
|
|
|
Для Каждого Символ Из МассивСимволов Цикл
|
|
|
|
ПервыйСимвол = СтрНачинаетсяС(Слово, Символ);
|
|
ПоследнийСимвол = СтрЗаканчиваетсяНа(Слово, Символ);
|
|
|
|
Если ПервыйСимвол Или ПоследнийСимвол Тогда
|
|
Прервать;
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
Если ПервыйСимвол Тогда
|
|
Слово = Прав(Слово, СтрДлина(Слово) - 1);
|
|
КонецЕсли;
|
|
|
|
Если ПоследнийСимвол Тогда
|
|
Слово = Лев(Слово, СтрДлина(Слово) - 1);
|
|
КонецЕсли;
|
|
|
|
Если Не ПервыйСимвол И Не ПоследнийСимвол Тогда
|
|
Нормализовано = Истина;
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
Слово = СокрЛП(Слово);
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция НайтиКириллицу(Знач Слово)
|
|
|
|
Алфавит = Инструменты.ПолучитьАлфавит();
|
|
СловоНРег = НРег(Слово);
|
|
|
|
Для Каждого Буква Из Алфавит Цикл
|
|
Если СтрНайти(СловоНРег, Буква) <> 0 Тогда
|
|
Возврат Истина;
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
Возврат Ложь;
|
|
|
|
КонецФункции
|
|
|
|
#КонецОбласти
|
|
|
|
|
|
|