Правки, необходимые для корректной работы мержинга простых ассертов

Issue #280 closed
Former user created an issue

Originally reported on Google Code with ID 280

Для ^ и $:
1. Метод для определения, захватывает ли обратная ссылка символы, при построении.

Для \b:
1. Матчер не должен включать в длину совпадения символы из переходов с consumeschars
== false
2. Матчятся почему то переходы типа [a!&]  \W с символом a, хотя не должны.

Reported by eklepilkina on 2014-05-06 17:01:46

Comments (11)

  1. Oleg Sychev repo owner
    1.1 - надо бы сделать, это недолго - Валерий?
    
    2.1 - это отдельное issue - 114
    2.2 - это вообще на баг смахивает... - отладить СРОЧНО
    

    Reported by oasychev on 2014-07-10 18:31:30 - Labels added: Priority-Critical, Component-Preg - Labels removed: Priority-Medium

  2. Valeriy Streltsov
    2.2 пофикшено. срочность на релиз не повлияла, ошибка никак не проявлялась на элементарных
    днф, какие были.
    

    Reported by vostreltsov on 2014-09-12 18:15:59 - Status changed: InProgress

  3. Valeriy Streltsov
    2.1 вроде как сделал, оказалось просто. Надо теперь чтобы Лена пробовала свою часть.
    

    Reported by vostreltsov on 2014-09-12 18:40:45

  4. Former user Account Deleted
    2.1 и 2.2   у меня не работают, ссылки на тесты есть тут https://code.google.com/p/oasychev-moodle-plugins/issues/detail?id=232#c6
    

    Reported by eklepilkina on 2014-11-16 11:41:25

  5. Valeriy Streltsov
    Так, нам нужно четко определиться какие классы за какую генерацию отвечают и какие параметры
    идут в какие методы.
    
    Сейчас метод next_character добавился и в класс перехода. Если главный лист перехода
    не чарсет, он перенаправляет вызов в узлы и всё хорошо, иначе начинается дикая заморочка
    с проверкой ассертов и в переходе, и в листе - это необходимо упростить.
    
    Я сейчас выделил метод next_character_ranges в листе чарсета. Просто чтобы работало.
    Он на себя берет генерацию "желаемого символа". В порядке приоритета это 1) оригинальный
    символ, если таковой был в первоначальной строке на этом же месте 2) ascii-буква латинского
    алфавита 3) пробел для случаев \s - он красивее табуляции. Как мне кажется, придётся
    перенести эту логику на уровень перехода, потому что переходу нужно знать отрезки для
    проверки ассертов, а манипуляции с желаемыми отрезками в чарсете могут выкинуть часть
    оригинальных отрезков. Согласны?
    
    Как мне кажется, нужно
    1) сделать next_character чарсета максимально тупой заглушкой, он все равно не нужен
    2) убрать из чарсета next_character_ranges, который занимался логикой желаемого символа.
    в чарсете по-прежнему остается обычный метод ranges.
    3) переход теперь берет на себя ответственность за желаемый символ и проверку всех(!)
    ассертов, а не как сейчас: ^ и $ на уровне чарсета, остальные на уровне перехода.
    
    Остается вопрос с обратной ссылкой, но там вроде просто. Она всегда возвращает кусок
    строки какой ей нужен, а ассерты проверятся на уровне переходов. Итого, вся логика
    ассертов будет только в транзишене.
    

    Reported by vostreltsov on 2014-11-16 21:32:38

  6. Oleg Sychev repo owner
    Честно говоря не уверен в таком подходе.
    Во-первых, главным листом должен быть именно чарсет, это нормальная ситуация - именно
    к нему мержаться ассерты.
    Во-вторых, при генерации нет ничего странного сначала обратится к ассертам (которые
    вполне себе в состоянии сгенерировать допустимые диапазоны символов (либо же невозможность
    генерации, либо ends_there) - для ^ или $ это вообще будет либо невозможность, либо
    перевод строки. А потом он пересекается с тем, что сгенерировано обычным чарсетом.
    

    Reported by oasychev on 2014-11-16 21:37:02

  7. Valeriy Streltsov
    1) понятно, но есть всякие обратные ссылки или ассерты по краям. вообще, этот пункт
    - не суть
    2) ок, я про то, что нужно это делать в методе транзишена. вызвать генерацию и для
    ассертов, и для главного перехода, а потом пересечь. в конце попробовать пересечь с
    желаемыми диапазонами.
    
    собственно вопрос в том, что не нужно параметризовать next_character листов булевыми
    значениями $dollar и $circumflex как это сейчас делается
    

    Reported by vostreltsov on 2014-11-16 21:41:25

  8. Oleg Sychev repo owner
    Решили что генерация в листьях должна возвращать диапазоны, а переход уже их пересекает
    и генерирует конкретный символ.
    

    Reported by oasychev on 2014-11-16 21:46:40

  9. Oleg Sychev repo owner
    Это сделано? Или проблемы еще остались?
    

    Reported by oasychev on 2014-12-03 00:38:12 - Status changed: Fixed

  10. Oleg Sychev repo owner
    Issue 286 has been merged into this issue.
    

    Reported by oasychev on 2014-12-03 00:39:15

  11. Log in to comment