Last active
December 15, 2015 17:59
-
-
Save mikhail73/5300796 to your computer and use it in GitHub Desktop.
OpenOffice макрос для конвертации старой русской орфографии в новую
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
REM ***** BASIC ***** | |
Sub FromOldOrtho1 | |
' rev. 12 mikh Новые версии на основе массива развиваются отдельно https://gist.github.com/mikhail73/ce80bbab28ae2bfde7d7 | |
' Этот макрос изначльно написан для MS Word http://simposium.ru/ru/node/7 | |
' Участниками форума Инфа-Ресурс он был сконверирован для OpenOffice Writer http://community.i-rs.ru/index.php?topic=21745.0 | |
' Начиная с версии 10 с пометкой mikh идут версии улучшеные мной. Я не программист и не изменяю общую структуру макроса, а только добавляю слова и исправляю мелкие недочеты. | |
' Для того чтобы сравнить работу разных версий макроса обработайте один и тот же текст разными версиями и сохраните результаты в текстовых файлах, например результат1.txt и результат2.txt, после чего эти файлы можно сравнивать при помощи программ winmerge или KDiff3. | |
Dim oRD as Object | |
Dim Repl(37,1) as String | |
Dim ReplW(62,1) as String | |
Hiss = "шщч" 'Шипящие | |
Deaf = "шкпфсхцчщт" 'Глухие ("шк" д.б. впереди) | |
EOW = "([ " & chr(160) & ".,:;'!?\-–—\)""”»])" ' 160 -- неразрывный пробел | |
SOW = "([ " & chr(160) & chr(10) & chr(13) & chr(182) & "'\-–—\(""„«])" ' 160 -- неразрывный пробел | |
Repl(0,0) = "\u0462" : Repl(0,1) = "Е" ' Ѣ - Ять | |
Repl(1,0) = "\u0463" : Repl(1,1) = "е" ' ѣ - ять | |
Repl(2,0) = "\u0406" : Repl(2,1) = "И" ' І - И | |
Repl(3,0) = "\u0456" : Repl(3,1) = "и" ' і - и | |
Repl(4,0) = "\u0472" : Repl(4,1) = "Ф" ' Ѳ - Фита | |
Repl(5,0) = "\u0473" : Repl(5,1) = "ф" ' ѳ - фита | |
Repl(6,0) = "ъ\>" : Repl(6,1) = "" ' ъ в конце слов | |
' Замена окончаний прилагательных и причастий -аго (-яго) на -ого (-его) | |
' возможны неправильные срабатывания | |
Repl(7,0) = "аго\>" : Repl(7,1) = "ого" | |
Repl(8,0) = "яго\>" : Repl(8,1) = "его" | |
Repl(9,0) = "([" & Hiss & "])ого" & EOW ' исправим косяки - "его" после шипящих | |
Repl(9,1) = "$1его$2" | |
' Замена окончаний - родительный падеж, прилагательные, множественное число, женский род | |
' -ыя (-ия) на -ые (-ие) | |
Repl(10,0) = "ыя\>" : Repl(10,1) = "ые" | |
' окончание -ия напрямую не заменяем, будет путаться с существительными :( | |
' но нам помогут суффиксы прилагательных -ащ-, -ющ-, -ш-, -cк- | |
Repl(11,0) = "(ш|щ|к)ия" & EOW | |
Repl(11,1) = "$1ие$2" | |
' а теперь проделаем тоже самое, но учтем суффикс -ся | |
Repl(12,0) = "([иы])яся" & EOW | |
Repl(12,1) = "$1еся$2" | |
' приставки на З | |
' без-(бес-), вз-(вс-), воз-(вос-), из-(ис-), низ-(нис-), раз-(рас-), роз-(рос-), через-(черес-) | |
Repl(13,0) = SOW & "(бе|в|во|и|ра|ро|чере|обе|Бе|В|Во|И|Ра|Ро|Чере|Обе)з([" & Deaf & "])" | |
Repl(13,1) = "$1$2с$3" | |
' исправим косяк: образования от слова "низ" - низший, низкий и т.д. | |
' Мих: поскольку обработка приставки -низ мною отключена из-за ее редкости перед шипящими, то и обработка косяков не нужна | |
' Repl(14,0) = SOW & "(Н|н)ис([" & Mid(Deaf, 2) & "])" | |
' Repl(14,1) = "$1$2из$3" | |
' | |
Repl(15,0) = "-есть" : Repl(15,1) = " есть" | |
Repl(16,0) = "-ли\>" : Repl(16,1) = " ли" | |
Repl(17,0) = "-бы\>" : Repl(17,1) = " бы" | |
Repl(18,0) = "-же\>" : Repl(18,1) = " же" | |
Repl(19,0) = "-что" : Repl(19,1) = " что" | |
Repl(20,0) = "-будто" : Repl(20,1) = " будто" | |
Repl(21,0) = "(Э|э)ксплоат" : Repl(21,1) = "$1ксплуат" | |
Repl(22,0) = "(Г|г)аллере" : Repl(22,1) = "$1алере" | |
Repl(23,0) = "(К|к)онтр-" : Repl(23,1) = "$1онтр" | |
Repl(24,0) = "(К|к)онтрадмирал" : Repl(24,1) = "$1онтр-адмирал" | |
Repl(25,0) = "(Л|л)ойяльн" : Repl(25,1) = "$1ояльн" | |
Repl(26,0) = "(И|и)тти" : Repl(26,1) = "$1дти" | |
Repl(27,0) = "(В|в)озрост" : Repl(27,1) = "$1озраст" | |
Repl(28,0) = "(О|о)ффициал" : Repl(28,1) = "$1фициал" | |
Repl(29,0) = "(Г|г)остинни" : Repl(29,1) = "$1остини" | |
Repl(30,0) = "(Р|р)асчит" : Repl(30,1) = "$1ассчит" | |
Repl(31,0) = "(А|а)ггрес" : Repl(31,1) = "$1грес" | |
Repl(32,0) = "(А|а)некс" : Repl(32,1) = "$1ннекс" | |
Repl(33,0) = "(Б|б)аталион" : Repl(33,1) = "$1атальон" | |
Repl(34,0) = "(Э|э)мисар" : Repl(34,1) = "$1миссар" | |
Repl(35,0) = "(Г|г)енералад" : Repl(35,1) = "$1енерал-ад" | |
Repl(36,0) = "(Г|г)енералот" : Repl(36,1) = "$1енерал-от" | |
Repl(37,0) = "(ш|щ)агося" & EOW | |
Repl(37,1) = "$1егося$2" | |
' Repl(38,0) = "кия\>" : Repl(38,1) = "кие" | |
' --- целым словом --- .SearchRegularExpression = False : .SearchWords = True | |
' Замена местоимений: оне, одне, однех, однемъ, однеми на они, одни, одних, одним, одними; | |
' написание с учетом того, что яти и твердые знаки уже убраны | |
ReplW(0,0) = "оне" : ReplW(0,1) = "они" | |
ReplW(1,0) = "Оне" : ReplW(1,1) = "Они" | |
ReplW(2,0) = "одне" : ReplW(2,1) = "одни" | |
ReplW(3,0) = "Одне" : ReplW(3,1) = "Одни" | |
ReplW(4,0) = "однех" : ReplW(4,1) = "одних" | |
ReplW(5,0) = "Однех" : ReplW(5,1) = "Одних" | |
ReplW(6,0) = "однем" : ReplW(6,1) = "одним" | |
ReplW(7,0) = "Однем" : ReplW(7,1) = "Одним" | |
ReplW(8,0) = "однеми" : ReplW(8,1) = "одними" | |
ReplW(9,0) = "Однеми" : ReplW(9,1) = "Одними" | |
' Замена местоимений: ея (нея) - на её (неё). | |
ReplW(10,0) = "ея" : ReplW(10,1) = "её" | |
ReplW(11,0) = "Ея" : ReplW(11,1) = "Её" | |
ReplW(12,0) = "нея" : ReplW(12,1) = "неё" | |
ReplW(13,0) = "Нея" : ReplW(13,1) = "Неё" | |
' Несклоняемые слова и прилагательные оканчивающиеся на -ия, но не обработанные выше | |
ReplW(14,0) = "на-днях" : ReplW(14,1) = "на днях" | |
ReplW(15,0) = "На-днях" : ReplW(15,1) = "На днях" | |
ReplW(16,0) = "быть-может" : ReplW(16,1) = "быть может" | |
ReplW(17,0) = "Быть-может" : ReplW(17,1) = "Быть может" | |
ReplW(18,0) = "до ныне" : ReplW(18,1) = "доныне" | |
ReplW(19,0) = "До ныне" : ReplW(19,1) = "Доныне" | |
ReplW(20,0) = "в ручную" : ReplW(20,1) = "вручную" | |
ReplW(21,0) = "по наслышке" : ReplW(21,1) = "понаслышке" | |
ReplW(22,0) = "попрежнему" : ReplW(22,1) = "по-прежнему" | |
ReplW(23,0) = "нехватило" : ReplW(23,1) = "не хватило" | |
ReplW(24,0) = "нехватало" : ReplW(24,1) = "не хватало" | |
ReplW(25,0) = "повидимому" : ReplW(25,1) = "по видимому" | |
ReplW(26,0) = "приэтом" : ReplW(26,1) = "при этом" | |
ReplW(27,0) = "т.-е." : ReplW(27,1) = "т. е." | |
ReplW(28,0) = "Т.-е." : ReplW(28,1) = "Т. е." | |
ReplW(29,0) = "крайния" : ReplW(29,1) = "крайние" | |
ReplW(30,0) = "Крайния" : ReplW(30,1) = "Крайние" | |
ReplW(31,0) = "ветхия" : ReplW(31,1) = "ветхие" | |
ReplW(32,0) = "Ветхия" : ReplW(32,1) = "Ветхие" | |
ReplW(33,0) = "всякия" : ReplW(33,1) = "всякие" ' кия | |
ReplW(34,0) = "Всякия" : ReplW(34,1) = "Всякие" ' кия | |
ReplW(35,0) = "великия" : ReplW(35,1) = "великие" ' кия | |
ReplW(36,0) = "Великия" : ReplW(36,1) = "Великие" ' кия | |
ReplW(37,0) = "прочия" : ReplW(37,1) = "прочие" | |
ReplW(38,0) = "Прочия" : ReplW(38,1) = "Прочие" | |
ReplW(39,0) = "внешния" : ReplW(39,1) = "внешние" | |
ReplW(40,0) = "Внешния" : ReplW(40,1) = "Внешние" | |
ReplW(41,0) = "никакия" : ReplW(41,1) = "никакие" ' кия | |
ReplW(42,0) = "Никакия" : ReplW(42,1) = "Никакие" ' кия | |
ReplW(43,0) = "блого" : ReplW(43,1) = "благо" | |
ReplW(44,0) = "Блого" : ReplW(44,1) = "Благо" | |
ReplW(45,0) = "древния" : ReplW(45,1) = "древние" | |
ReplW(46,0) = "Древния" : ReplW(46,1) = "Древние" | |
ReplW(47,0) = "средния" : ReplW(47,1) = "средние" | |
ReplW(48,0) = "Средния" : ReplW(48,1) = "Средние" | |
ReplW(49,0) = "другия" : ReplW(49,1) = "другие" | |
ReplW(50,0) = "Другия" : ReplW(50,1) = "Другие" | |
ReplW(51,0) = "многия" : ReplW(51,1) = "многие" | |
ReplW(52,0) = "Многия" : ReplW(52,1) = "Многие" | |
ReplW(53,0) = "последния" : ReplW(53,1) = "последние" | |
ReplW(54,0) = "Последния" : ReplW(54,1) = "Последние" | |
ReplW(55,0) = "дальния" : ReplW(55,1) = "дальние" | |
ReplW(56,0) = "Дальния" : ReplW(56,1) = "Дальние" | |
' Несколько исправлений после замены -кия на -кие | |
ReplW(57,0) = "Казакея" : ReplW(57,1) = "Казакия" | |
ReplW(58,0) = "Туркея" : ReplW(58,1) = "Туркия" | |
ReplW(59,0) = "Калмыкея" : ReplW(59,1) = "Калмыкия" | |
ReplW(60,0) = "Фракея" : ReplW(60,1) = "Фракия" | |
ReplW(61,0) = "Словакея" : ReplW(61,1) = "Словакия" | |
ReplW(62,0) = "Евдокея" : ReplW(62,1) = "Евдокия" | |
oRD = thisComponent.createReplaceDescriptor | |
'xray oRD | |
oRD.SearchRegularExpression = True | |
oRD.SearchCaseSensitive = True | |
For i=0 to 37 | |
oRD.SearchString = Repl(i,0) | |
oRD.ReplaceString = Repl(i,1) | |
thisComponent.replaceAll(oRD) | |
Next | |
oRD.SearchRegularExpression = False | |
oRD.SearchWords = True | |
For i=0 to 62 | |
oRD.SearchString = ReplW(i,0) | |
oRD.ReplaceString = ReplW(i,1) | |
thisComponent.replaceAll(oRD) | |
Next | |
End Sub |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment