Skip to content

Instantly share code, notes, and snippets.

@mikhail73
Last active December 15, 2015 17:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikhail73/5300796 to your computer and use it in GitHub Desktop.
Save mikhail73/5300796 to your computer and use it in GitHub Desktop.
OpenOffice макрос для конвертации старой русской орфографии в новую
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