Поддержка нечуствительности к регистру по стандарту PCRE

Issue #32 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 32 ``` 1. Нечуствительность к регистру должна поддерживаться preg_nodes, через поле $caseinsensitive заполняемое на этапе компиляции выражения. Параметр $cs в функции match необходимо убрать.

2. Чуствительность к регистру должна регулироваться модификаторами, а также непосредственно в шаблоне в соответствии с http://www.pcre.org/pcre.txt раздел INTERNAL OPTION SETTING ```

Reported by `oasychev` on 2011-07-12 10:24:32

Comments (22)

  1. Oleg Sychev reporter

    ``` В основной код вытолкнуты изменения, организующие заполнение поля $caseinsensitive для листьев по глобальным опциям. Сливайте. Теперь можно переделывать match в листьях на использование его. (Параметр $cs пока не убирать, а дать ему значение по умолчанию. Уберем когда исправим все матчеры.).

    С локальными надо еще разобраться, как они ```

    Reported by `oasychev` on 2011-07-15 19:15:44

  2. Oleg Sychev reporter

    ``` volstreltsov: Мне непонятно изменение if ($next->pregleaf->match($str, $startpos + $pos, &$length, !$next->pregleaf->caseinsensitive )) разве последний параметр теперь вообще не нужно убрать? ```

    Reported by `oasychev` on 2011-07-26 19:14:12

  3. Oleg Sychev reporter

    ``` Теме задан новый владелец в соответствии с распределением задач.

    Начать надо с экспериментов по точному определению работы локальных опций в PCRE (она же preg_match в PHP) и составлению/кодированию тестовых примеров на основе этого. Если там будут заметны явные глупости, можно дать предложения по их исправлению...

    Для работы по этому изменению создать отдельный клон, чтобы можно было его вытянуть без изменений в матчере.... ```

    Reported by `oasychev` on 2011-09-09 13:12:34

  4. Oleg Sychev reporter

    ``` Мне совершенно не нравится даже регулярное выражение, которое ловит локальные опции. Оно много чего не того может поймать похоже... ```

    Reported by `oasychev` on 2011-11-23 20:16:45

  5. Former user Account Deleted

    ``` Поправил локальные опции, теперь лексер их корректно переваривает. ```

    Reported by `Xapuyc7` on 2011-12-03 18:40:22

  6. Oleg Sychev reporter

    ``` 1)Мне не очень нравится mod_top_opt в текущем ее виде. Я бы поступил по другому: сделал два отдельных правила c - и без - , чтобы избавиться от альтернативы и последующего условия. Тогда mod_top_opt становится тривиальной и скорее всего вообще не потребуется. Или ей можно уже будет передать два параметра: букву (буквы) и true/false.

    Возможно при наличии серии букв будет удобнее использовать массивы со строковыми индексами, чем объекты со свойствами для хранения состояния локальных опций - чтобы проще было перебрать циклом список букв при одновременной установке нескольких опций. Хотя переменные имена свойств PHP тоже допускает. Но если уж сохранять функцию - пусть она будет универсальной, принимает буквы (вырезать "(?", "(?-" и ")" несложно до вызова при двух правилах) и наличие минуса. Чтобы уже ее не править...

    2) PCRE поддерживает еще синтаксис опций вида (?i: для опций, которые набираются в начале группировки без захвата. Его добавить несложно, давайте уж сразу это сделаем. ```

    Reported by `oasychev` on 2011-12-04 11:31:01

  7. Oleg Sychev reporter

    ``` 3) Теперь не работают глобальные модификаторы. Раньше они работали за счет того, что копировались в локальные (см. preg_regex_hadndler строки 151 и рядом, настройка сканера. Теперь локальные хранятся по-другому и данные не используются. Нужно чтобы 0 уровень инициализировался глобальными данными. Скорее всего придется делать public если JLex не даст задать дополнительные параметры конструктору. ```

    Reported by `oasychev` on 2011-12-04 11:47:28

  8. Oleg Sychev reporter

    ``` Еще ваш последний код содержит табуляцию. Напоминаю что она должна заменяться на 4 пробела. Уберите из кода и перенастройте свой текстовый редактор соответственно. ```

    Reported by `oasychev` on 2011-12-04 11:57:00

  9. Oleg Sychev reporter

    ``` Дмитрий, вы вообще полный набор юнит-тестов не забываете запускать перед коммитом?!

    testparser.php дает фатальную ошибку. Когда есть лишние закрывающие скобки у вас optcount уходит в 0.

    Понятно что выражение с ошибкой, но не вылетать же... Нужно в pop_opt_lvl поставить условие, чтобы не уменьшать optcount если оно уже равно 1.

    И давайте чтобы подобной халтуры больше не было. Юнит-тесты надо перезапускать все - надеюсь эта ситуация послужит вам хорошим уроком... ```

    Reported by `oasychev` on 2011-12-04 12:02:32

  10. Oleg Sychev reporter

    ``` СРОЧНО исправить замечания выше. Вы поломали очень много - глобальные модификаторы, обработку ошибок. Я не могу вытолкнуть такой код в репозиторий с бетой... ```

    Reported by `oasychev` on 2011-12-04 20:14:14

  11. Oleg Sychev reporter

    ``` Я что-то не вижу коммита, который как-то исправлял бы глобальные модификаторы. Только исправляющий фаталку.

    За счет чего будут работать глобальные модификаторы? И вообще, приведите код в порядок в соответствии с замечаниями к его структуре... ```

    Reported by `oasychev` on 2011-12-04 22:47:24

  12. Oleg Sychev reporter

    ``` СРОЧНО исправить глобальные модификаторы - это очень плохая регрессия.

    Нужно корректно инициализировать уровень 0 данными о глобальных модификаторах, а не фиксированным значением. В конструкторе может не получится, но если сделать public то можно позже до начала разбора это сделать... ```

    Reported by `oasychev` on 2011-12-05 15:47:08

  13. Former user Account Deleted

    ``` Исправил обработку опций, глобальные работают, локальные поправлены в соответствии с вышенаписанным. Изменения в моем клоне. ```

    Reported by `Xapuyc7` on 2011-12-05 17:31:13

  14. Oleg Sychev reporter

    ``` Только не забывайте что строки в файл каталога lang добавляются по алфавиту строк в квадратных скобках...

    И переводить в fixed - вообще-то ваша часть работы. ```

    Reported by `oasychev` on 2011-12-06 18:00:08 - Status changed: `Fixed`

  15. Oleg Sychev reporter

    ``` НЕМЕДЛЕННО - убрать внесенные вами Tabы для форматирования и перенастроить наконец редактор так, чтобы он показывал пробельные символы и заменял Tab на 4 пробела!

    Табуляция против правил кодирования в Moodle. Сильно против... ```

    Reported by `oasychev` on 2011-12-06 20:52:44

  16. Former user Account Deleted

    ``` Табуляцию извел, изменения в клоне. ```

    Reported by `Xapuyc7` on 2011-12-07 12:19:55

  17. Oleg Sychev reporter

    ``` Чтобы отладочная печать не лезла в репозиторий, бывает удобно иметь клон вопроса отдельно от инсталляции Мудла, а в инсталляцию Мудла копировать батником все файлы.

    Тогда вы можете вставлять отладочную печать в инсталляцию не беспокоясь о том, что она будет закоммичена. ```

    Reported by `oasychev` on 2011-12-07 13:07:23

  18. Oleg Sychev reporter

    ``` Синтаксис (?i: и (?-i: поддерживается? ```

    Reported by `oasychev` on 2011-12-12 12:55:19

  19. Oleg Sychev reporter

    ``` Юнит-тест на (?-i: есть, а на (?i: нет. Добавьте, это несложно, скопировав предыдущий. ```

    Reported by `oasychev` on 2011-12-13 10:41:15

  20. Log in to comment