[prg] Имитация повторения групп в lua
Всех приветствую. Мой вопрос не про тифлопрограммирование,а про
алгоритм,хотя работа,которую мы делаем,сможет помочь незрячим
пользователям. Мне понадобилось заменить в lualatex $$ на \[\] и $ на
\(\). Я решил делать это средствами lua,используя соответствующий вызов.
Поскольку на вход я могу получить только одну строку,мне легче делать по
одной замене в цикле. $$ и $ мне нужно заменять,если он вначале строки
или перед ним есть n символов \,где n чётное и больше либо равно нулю.
Замену нужно делать до тех пор,пока мы не встретим комментарий,т.е
символ %,перед которым тоже может быть чётное количество \\,большее либо
равное нулю. Чётное количество здесь нужно потому,что \\ в latex это
новая строка,а вот просто \ - это экранирование символа,замену которого
делать не нужно. Я написал алгоритм,но он работает корректно,только если
перед $$ или перед $ есть максимум три символа \ и то,если компилировать
очень большой документ без этого алгоритма,он компилируется где-то за
2-3 минуты,а вот если компилировать этот документ с моим алгоритмом,то
компиляция будет проходить где-то 6-7 минут. В python,к примеру,для того
же $$ я мог бы написать примерно такую регулярку (\\)*$\$ и работать с
ней,но в lua очень сильно ограничены регулярные выражения,поэтому и
называются в lua шаблоны или patterns. Я видел на github библиотеку для
lua,которая использует питоновский синтаксис регулярных выражений,но
во-первых она требует apolo (название написано не точно),которой нет в
lualatex,во-вторых мой код выкладывается на github,поэтому я не
уверен,что не возникнет проблем с авторскими правами,а в-третьих я не
уверен,что в ней будут все возможности регулярок в python
(https://github.com/NexusInstruments/RegExpUtils). Я читал,что для
регулярок вроде есть модуль библиотеки lpag (lpag.re),но я не могу с
помощью этой библиотеки делать по одной замене,т.е я только могу делать
замены сразу всех совпадений в тексте а,как я ранее писал,для моего
алгоритма нужно делать одну замену,т.к может получиться так,что $$ или $
может начинаться в одной строке и заканчиваться в другой строке. На
форуме tex.stackexchange.com мне предложили вариант замены двух \ на
какую-то подстроку,которой нет в исходной строке,а потом,после
проделанных операций,делать обратную замену,но тогда мне надо будет
искать,есть ли,к примеру,в строке один пробел,потом два пробела и т.д,я
имею ввиду реализовывать алгоритм поиска уникальной подстроки,но тогда у
меня ухудшиться быстродействие,а у меня с ним,как я ранее писал,уже есть
проблемы. В общем помогите пожалуйста мне решить проблему с поиском и
заменой $$ и $ если перед ним есть чётное количество символов \,большее
либо равное нулю и если перед ним нету комментария,т.е символа %,перед
которым есть чётное количество символов \,большее либо равное нулю.
Вообще суть проблемы,как я понимаю,сводится к нахождению
алгоритма,который возвращал бы и заменял бы подстроку,к примеру тот же
$$,перед которой есть чётное количество символов \. Заранее всем
огромное спасибо за помощь.