diff --git a/Word2MXL/Ext/ObjectModule.bsl b/Word2MXL/Ext/ObjectModule.bsl index 1ba6883..09453b2 100644 --- a/Word2MXL/Ext/ObjectModule.bsl +++ b/Word2MXL/Ext/ObjectModule.bsl @@ -494,23 +494,41 @@ КонецЦикла; КонецПроцедуры +Функция МассивПоДиапазонуЧисел(Число_С, Число_По) + Результат = Новый Массив; + Для ТекЧисло = Число_С По Число_По Цикл + Результат.Добавить(ТекЧисло); + КонецЦикла; + Возврат Результат; +КонецФункции + +Функция СформироватьДиапазон(МассивОписанияДиапазона) + Результат = Неопределено; + Если 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 - УпрСимволы_ASCII = "0,1,2,3,4,5,6,7,8,9,0B,0C,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,7F"; - УпрСимволы_ISO = "80,81,82,83,84,85,86,87,88,89,8A,8B,8С,8D,8E,8F,90,91,92,93,94,95,96,97,98,99,9A,9B,9C,9D,9E,9F"; - УпрСимволы_Unicode = "034F,2008,200B,200C,200D,200E,200F,2028,2029,202A,202B,202C,202D,202E,2060,2061,2063,2066,2067,2068,2069,206A,206B,206C,206D,206E,206F," + - "FE00,FE01,FE02,FE03,FE04,FE05,FE06,FE07,FE08,FE09,FE0A,FE0B,FE0C,FE0D,FE0E,FE0F,FEFF,FFF9,FFFA,FFFB,FFFC,FFFD"; - - УпрСимволы = СтрШаблон("%1,%2,%3", УпрСимволы_ASCII, УпрСимволы_ISO, УпрСимволы_Unicode); - УпрСимволы = СтрРазделить(УпрСимволы, ","); - УпрСимволы = Мап("Результат = Ох(Элемент)", УпрСимволы); - УпрСимволы = Мап("Результат = Символ(Элемент)", УпрСимволы); + ИнтервалыКодов = "0-1F,7F,80-9F,034F,2008,200B-200F,2028-202E,2060-2061,2063,2066-206F," + + "FE00-FE0F,FEFF,FFF9-FFFD,E0100-E01EF"; + ИнтервалыКодов = СтрРазделить(ИнтервалыКодов, ","); + ИнтервалыКодов = Мап("Результат = СтрРазделить(Элемент, ""-"")", ИнтервалыКодов); + ИнтервалыКодов = Мап("Результат = Мап(""Результат = Ох(Элемент)"" ,Элемент)", ИнтервалыКодов); + ИнтервалыКодов = Мап("Результат = СформироватьДиапазон(Элемент)", ИнтервалыКодов); + УпрСимволы = Свернуть("ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Элемент)", ИнтервалыКодов, Новый Массив); + УпрСимволы = Мап("Результат = Символ(Элемент)", УпрСимволы); УпрСимволы = ОбщегоНазначенияКлиентСервер.СвернутьМассив(УпрСимволы); - - Для ТекСимвол_Число = Ох("E0100") По Ох("E01EF") Цикл - УпрСимволы.Добавить(Символ(ТекСимвол_Число)); - КонецЦикла; + Исключения = Мап("Результат = Символы[Элемент]", СтрРазделить("ПС,ВК", ",")); + УпрСимволы = Фильтр("Условие = Неопределено = _.Найти(Элемент)", УпрСимволы, Исключения); ЗаменитьТекстВТД(ТабДок, Символы.ВТаб, Символы.ПС);