YuS wrote:У AP традиционно не существует подробной документации. Всё познаётся чтением специальных файлов помощи, общей html-документации, изучением примеров и конечно же, эмпирическим путём... да, ещё, естественно, подсказками на форуме.
Да я в курсе, просто хотел ещё раз подчеркнуть, что это плохая традиция, её бы изменить...
YuS wrote:Coder-Rus.txt и сами файлы .coder, в которых описаны флаги для секций... рабочие примеры, в принципе, достаточно наглядны ведь.
В дефолтных .coder файлах возможности coder используются по минимуму, где сложные QuotesRE правила? Где связки пар QuotesRE правил?
YuS wrote:Конкретно с парами правил, именно из QuotesRE, может быть и нет, но там и нет принципиальной разницы, надо только последовательно и неспешно читать иерархию.
Вот потому, что их никто не использует - никто и не видит проблему/неудобство, которое вижу я: если в родительском правиле есть несколько групп подсветки, то подключить дочернее правило только к одной из групп - нельзя, т.к. существующий механизм подключает дочернее правило ко всему родительскому правилу (т.е. дочернее правило сработает в любой группе подсветки из родительского правила и даже вне групп подсветки, что чревато нежелательными срабатываниями).
YuS wrote:Здесь подробности нужны... крашится сразу после присвоения RuleID, без создания дочернего правила или оно таки есть? Учитывается ли то, что шаблоны из QuotesRE однострочны по своей природе?
Падает сразу.
Однострочность QuotesRE правил тут не причём, хотя это тоже ограничение, которое неудобно тем, что его нельзя обойти, а без этого невозможно сделать правильную подсветку
continuation (т.е. дробления вызова одной команды на несколько строк).
YuS wrote:И что именно будет искать дочерний шаблон из "ничего", т.е. в ""?
Сами кавычки и подсветит, вторая группа подсветки состоит из 0 символов, но т.к. в regexp'е у нас там использовалась звёздочка, то это гарантирует срабатывания правила и на
""
и на
"string"
если так понятней про что я (на таком примере тоже падает, само собой).
YuS wrote:Исходя из вышесказанного, понимаю, что дочернего правила не существует. Правильно? Если да и крашится сразу после присвоения RuleID=1, тогда где-то баг засел.
Мне тоже кажется, что баг. Но именно кажется, т.к. я не могу определить противоречит ли это падение документации или нет.
С другой стороны - падения вообще не должны происходить даже в случае ошибок в правилах подсветки: пускай хоть ошибку выдаст, но не падает.
Мне вот интересно, Instructor прочитает наши волны текста или может упустить упоминание об этих падениях?
Был бы баг-треккер (как я ранее уже неоднократно предлагал и даже просил сделать) - такой бы проблемы не было.
YuS wrote:Да нормально там описано. А если последовательно, то вот это вот, Ваше второе правило будет являться родителем для первого, причем неважно, что у первого правила в RuleID=0 или RuleID=1... Вы именно это задумывали? Может быть в этом у Вас путаница возникает?
В столбце ParentID пишется идентификатор родителя, в котором будет работать редактируемое правило, т.е. оно является дочерним.
А в столбце RuleID указываем идентификатор родителя, т.е. это правило будет родителем для других правил с таким же ParentID (естественно, учитывая дополнительные условия иерархии: типа оформленный или неоформленный диапазон, какая секция и для какой может быть родителем и т.п.)
Нет, с пониманием отношения родительских и дочерних правил в описанном вами контексте - у меня проблем нет.
Путаница там в том, что слово "родитель" используется в двух конструкциях:
Если родитель (Parent ID) равен -3
и
Внутри родителя с идентификатором (Rule ID) == 0
а фраза
см. обработку родителя (Parent ID) равного 0.
вносит дополнительную неясность, ведь про обработку правил с Parent ID == 0 есть только такой блок
- Если родитель (Parent ID) равен 0 (по умолчанию):
- Внутри не оформленного диапазона ("Quotes:", "QuotesRE:"), правило обрабатывается.
- Внутри оформленного диапазона ("Quotes:", "QuotesRE:"), правило игнорируется.
- Внутри не оформленного блока ("Folds:"), правило обрабатывается.
- Внутри оформленного блока ("Folds:"), правило из "Folds:" обрабатывается, из остальных секций игнорируется.
Что такое "оформленный диапазон" и "не оформленный диапазон"?
И снова няня
YuS wrote:Я бы сказал так, что у родительского правила нельзя выставлять ParentID<1, если не требуется, чтобы оно было дочерним для какого-либо правила с RuleID равном 0.
А если требуется - то можно? Или такое не поддерживается?
YuS wrote:На самом деле для родителя пофиг, что указано у дочернего правила в RuleID, дочернее правило будет считаться дочерним, как минимум, если у него ParentID совпадает с RuleID родителя или ParentID равно, либо меньше нуля, но с учётом доп.условий.
Ну вот а опыт доказывает, что не пофигу: в одном случае падение, а в другом - его нет.
YuS wrote:Начните разбор от простого к сложному=> Т.е. удалите абсолютно все правила, оставьте для тестов всего два и экспериментируйте с ними, чтобы не запутаться окончательно...
Так я так и делаю, но всё равно либо натыкаюсь на падения, либо на странную работу правил, вот свежий пример:
Code: Select all
0 `^\s*(Command)\s*,\s*(.*)$` `\1=(0,${OP},0) \2=(0,${AREA},0)` 0 1
0 `(")((?:[^"]|"")++)(")` `\1=(0,#f00,0) \2=(0,${STR},0) \3=(0,#f00,0)` 1 2
0 `(")"` `\1=(0,${DEL2},0)` 2 0

Вроде работает норм, но стоит захотеть в правиле подсветки удвоенных кавычек внутри строки сделать подсветку не левой, а правой кавычки, как всё немножко ломается:
Code: Select all
0 `^\s*(Command)\s*,\s*(.*)$` `\1=(0,${OP},0) \2=(0,${AREA},0)` 0 1
0 `(")((?:[^"]|"")++)(")` `\1=(0,#f00,0) \2=(0,${STR},0) \3=(0,#f00,0)` 1 2
0 `"(")` `\1=(0,${DEL2},0)` 2 0

Почему вдруг изменения в правиле подсвечивающем только двойные кавычки повлияло на подсветку остального текста, подсвечиваемого другим правилом?
Я уж молчу про то, что даже в первом варианте, где всё более или менее подсвечивается - нет возможности сделать так, чтобы цвет правой кавычки не слетал полностью, а происходил бы "fallback" к правилу выше, т.е. чтобы в этом случае цвет у неё был бы равен ${STR}.
На это мне тут же кто-то может возразить, что мне ничего не мешает в последнем правиле сделать две группы подсветки и раскрасить каждую кавычку по своему...
Но это же ведь даст желаемый результат только в этом конкретном случае, а не во всех: а что если у этого дочернего правила несколько родительских и в одном кавычка должна подсветиться как ${STR}, а в другом - иначе? Мне что, дублировать правила тогда?
Эх, было бы каскадное применение правил - не было бы никаких проблем.