diff --git a/Word2MXL/Ext/ObjectModule.bsl b/Word2MXL/Ext/ObjectModule.bsl index 3f27589..8a943a8 100644 --- a/Word2MXL/Ext/ObjectModule.bsl +++ b/Word2MXL/Ext/ObjectModule.bsl @@ -165,8 +165,8 @@ ЗакрытьДокумент(комДокумент); // без сохранения ЗакрытьВорд(комВорд); - - ИсправитьНедопустимыеСимволы(т); + + ИсправитьНедопустимыеСимволы(т); Возврат т; Исключение @@ -420,19 +420,19 @@ Возврат Результат; КонецФункции -Функция АлфавитСистемСчисления(Нотация=36) - Алфавит = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - ДлинаАлфавита = СтрДлина(Алфавит); - Результат = ""; - Если ДлинаАлфавита = Нотация Тогда - Результат = Алфавит; - ИначеЕсли ДлинаАлфавита > Нотация Тогда - Результат = Лев(Алфавит, Нотация); - Иначе - ВызватьИсключение "Алфавит слишком мал"; - КонецЕсли; - - Возврат Результат; +Функция АлфавитСистемСчисления(Нотация = 36) + Алфавит = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + ДлинаАлфавита = СтрДлина(Алфавит); + Результат = ""; + Если ДлинаАлфавита = Нотация Тогда + Результат = Алфавит; + ИначеЕсли ДлинаАлфавита > Нотация Тогда + Результат = Лев(Алфавит, Нотация); + Иначе + ВызватьИсключение "Алфавит слишком мал"; + КонецЕсли; + + Возврат Результат; КонецФункции Функция ЧислоВДругуюСистему(Знач Значение = 0, Нотация = 36) @@ -441,8 +441,8 @@ КонецЕсли; Значение = Цел(Число(Значение)); - Если Значение <= 0 Тогда - Возврат "0"; + Если Значение <= 0 Тогда + Возврат "0"; КонецЕсли; Алфавит = АлфавитСистемСчисления(Нотация); @@ -455,8 +455,8 @@ Возврат Результат; КонецФункции -Функция ЧислоИзДругойСистемы(Знач Значение = "0", Нотация = 36) - Если Нотация <= 0 Тогда +Функция ЧислоИзДругойСистемы(Знач Значение = "0", Нотация = 36) + Если Нотация <= 0 Тогда Возврат 0; КонецЕсли; @@ -464,15 +464,15 @@ Если Значение = "0" Тогда Возврат 0; КонецЕсли; - - Алфавит = АлфавитСистемСчисления(Нотация); + + Алфавит = АлфавитСистемСчисления(Нотация); Результат = 0; Длина = СтрДлина(Значение); Для Позиция = 1 По Длина Цикл Множитель = Pow(Нотация, Длина - Позиция); - ТекСимвол = Сред(Значение, Позиция, 1); - ИндексСимвола = СтрНайти(Алфавит, ТекСимвол) - 1; - Результат = Результат + ИндексСимвола * Множитель; + ТекСимвол = Сред(Значение, Позиция, 1); + ИндексСимвола = СтрНайти(Алфавит, ТекСимвол) - 1; + Результат = Результат + ИндексСимвола * Множитель; КонецЦикла; Возврат Окр(Результат); КонецФункции @@ -486,7 +486,7 @@ КонецФункции Процедура ЗаменитьТекстВТД(ТД, Текст, Замена) - Область = ТД.НайтиТекст(Текст); + Область = ТД.НайтиТекст(Текст); Пока НЕ Неопределено = Область Цикл Область.Текст = СтрЗаменить(Область.Текст, Текст, Замена); Область = ТД.НайтиТекст(Текст, Область); @@ -494,45 +494,44 @@ КонецПроцедуры Функция МассивПоДиапазонуЧисел(Число_С, Число_По) - Результат = Новый Массив; - Для ТекЧисло = Число_С По Число_По Цикл - Результат.Добавить(ТекЧисло); - КонецЦикла; - Возврат Результат; + Результат = Новый Массив; + Для ТекЧисло = Число_С По Число_По Цикл + Результат.Добавить(ТекЧисло); + КонецЦикла; + Возврат Результат; КонецФункции Функция СформироватьДиапазон(МассивОписанияДиапазона) - Результат = Неопределено; - Если 1 = МассивОписанияДиапазона.Количество() Тогда - Результат = Новый Массив; - Результат.Добавить(МассивОписанияДиапазона[0]); - ИначеЕсли 2 = МассивОписанияДиапазона.Количество() Тогда - Результат = МассивПоДиапазонуЧисел(МассивОписанияДиапазона[0], МассивОписанияДиапазона[1]); - Иначе - ВызватьИсключение СтрШаблон("Ошибка в описании диапазона: %1 элементов", МассивОписанияДиапазона.Количество()); - КонецЕсли; - Возврат Результат; + Результат = Неопределено; + Если 1 = МассивОписанияДиапазона.Количество() Тогда + Результат = Новый Массив; + Результат.Добавить(МассивОписанияДиапазона[0]); + ИначеЕсли 2 = МассивОписанияДиапазона.Количество() Тогда + Результат = МассивПоДиапазонуЧисел(МассивОписанияДиапазона[0], МассивОписанияДиапазона[1]); + Иначе + ВызватьИсключение СтрШаблон("Ошибка в описании диапазона: %1 элементов", МассивОписанияДиапазона.Количество()); + КонецЕсли; + Возврат Результат; КонецФункции Процедура ИсправитьНедопустимыеСимволы(ТабДок) - // список символов из: - // https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B - ИнтервалыКодов = "0-1F,7F,80-9F,034F,2008,200B-200F,2028-202E,2060-2061,2063,2066-206F," - + "FE00-FE0F,FEFF,FFF9-FFFD,E0100-E01EF"; - ИнтервалыКодов = СтрРазделить(ИнтервалыКодов, ","); - ИнтервалыКодов = Мап("Результат = СтрРазделить(Элемент, ""-"")", ИнтервалыКодов); - ИнтервалыКодов = Мап("Результат = Мап(""Результат = Ох(Элемент)"" ,Элемент)", ИнтервалыКодов); - ИнтервалыКодов = Мап("Результат = СформироватьДиапазон(Элемент)", ИнтервалыКодов); - УпрСимволы = Свернуть("ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Элемент)", ИнтервалыКодов, Новый Массив); - УпрСимволы = Мап("Результат = Символ(Элемент)", УпрСимволы); + // список символов из: + // https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B + ИнтервалыКодов = "0-1F,7F,80-9F,034F,2008,200B-200F,2028-202E,2060-2061,2063,2066-206F," + + "FE00-FE0F,FEFF,FFF9-FFFD,E0100-E01EF"; + ИнтервалыКодов = СтрРазделить(ИнтервалыКодов, ","); + ИнтервалыКодов = Мап("Результат = СтрРазделить(Элемент, ""-"")", ИнтервалыКодов); + ИнтервалыКодов = Мап("Результат = Мап(""Результат = Ох(Элемент)"" ,Элемент)", ИнтервалыКодов); + ИнтервалыКодов = Мап("Результат = СформироватьДиапазон(Элемент)", ИнтервалыКодов); + УпрСимволы = Свернуть("ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Элемент)", ИнтервалыКодов, Новый Массив); + УпрСимволы = Мап("Результат = Символ(Элемент)", УпрСимволы); УпрСимволы = ОбщегоНазначенияКлиентСервер.СвернутьМассив(УпрСимволы); - Исключения = Мап("Результат = Символы[Элемент]", СтрРазделить("ПС,ВК", ",")); - УпрСимволы = Фильтр("Условие = Неопределено = _.Найти(Элемент)", УпрСимволы, Исключения); + Исключения = Мап("Результат = Символы[Элемент]", СтрРазделить("ПС,ВК", ",")); + УпрСимволы = Фильтр("Условие = Неопределено = _.Найти(Элемент)", УпрСимволы, Исключения); ЗаменитьТекстВТД(ТабДок, Символы.ВТаб, Символы.ПС); Для Каждого ТекСимвол_Число Из УпрСимволы Цикл ЗаменитьТекстВТД(ТабДок, ТекСимвол_Число, ""); КонецЦикла; - КонецПроцедуры \ No newline at end of file