Организация выделения в тестовых строках
Originally reported on Google Code with ID 322
текст, выделенный в элементах textarea отправляется на сервер и обрабатывается в файле
preg/authoring_tools/capture.php и выводиться с помощью alert'a
https://code.google.com/r/1invaderzim1-pregselectiontext/source/list
Reported by 1invaderzim1
on 2015-01-12 10:00:54
Comments (22)
-
Account Deleted -
Account Deleted репозиторий теперь находится здесь https://code.google.com/r/1invaderzim1-textsending/source/list
Reported by
1invaderzim1
on 2015-01-23 10:29:53 -
repo owner Issue 313 has been merged into this issue.
Reported by
oasychev
on 2015-01-23 13:50:39 -
repo owner * Описание в комментарии наверху устарело.
Reported by
oasychev
on 2015-01-23 13:51:03 -
repo owner К рассмотрению представлен код, осуществляющий выделение в тестовой строке (в зеленой ее части) и отправку на сервер координат (индекса строки, индекса начала выделения и его длины). При этом индекс начала выделения считается от начала строки, но в выделение может входить только зеленая часть строки (это не бага, это фича (с)). Нужно а) провести обзор яваскрипт кода по стабильности и посмотреть его на разных браузерах. Кто возьмется - отзовитесь - Пахомов? Терехов? б) организовать получение testing_tool и обработку результата - Сычев в) реализовать в КА матчере возможность по matching results, индексу начала и длине отрезка совпавшей строки возвращать узел дерева регулярного выражения, с которым совпал указанный отрезок (округление вверх по дереву) - Стрельцов г) реализовать возможность отключения выделения в зависимости от настроек (на данный момент - при PHP Preg matchere выделение в тестах не должно работать) - Пидопригора Всех жду, особенно по пунктам а и г.
Reported by
oasychev
on 2015-01-23 13:58:19 - Status changed:InProgress
- Labels added: Type-Enhancement, Priority-High, Component-Preg - Labels removed: Type-Review, Priority-Medium -
Account Deleted по пункту а несколько мыслей нашел только 1 коммит https://code.google.com/r/1invaderzim1-textsending/source/detail?r=5aea80f0c927373060788138582408d949221673 думаю о нем и речь 1) 153 строка - if(selection = window.getSelection) - == наверно? 2) строки 33-55 у нас подключен jQuery и он это лучше умеет делать, не стоит вручную писать http://api.jquery.com/jquery.ajax/
Reported by
TOPT.iiiii
on 2015-01-25 19:36:36 -
Account Deleted if(selection = window.getSelection) - так и должно быть строки 33-55 у нас подключен jQuery и он это лучше умеет делать - изменил реализовать возможность отключения выделения в зависимости от настроек (на данный момент - при PHP Preg matchere выделение в тестах не должно работать) - изменил
Reported by
1invaderzim1
on 2015-01-26 23:01:46 -
repo owner - edited description
-
assigned issue to
- changed component to Preg
Работаем в этой задаче. Немножко дискуссии об описании есть также в
#326, если есть конкретно вопросы по структуре тегов в описании это там, можете подписаться. Общее обсуждение ведем здесь. Жду предложений по методу вообще и в условиях наших конкретных строк.Учитываем что нас интересуют координаты в видимых пользователю строках, а не в HTML с тегами. Если в описании есть id в тегах то там задача упрощается подбором такого наименьшего тега, который накрывал бы все выделение.
В тестовых строках нас интересует выделенная часть из зеленого и желтого, красный это несовпавший текст...
-
План решения задачи:
Добавить в каждую часть формы regex_constructor по кнопке для описания и проверки текста по регулярному выражению.
По нажатию на кнопки будет происходить следующее:
1) Получить выделение на странице в заданных границах(описания регулярного выражения или проверки текста). На выходе получим индекс начала и конца выделения.
2) Если есть выделение в заданной границе:
2.1) Получить в границах описания/проверки текста элементы регулярного выражения, описания которых выделены.
2.2) Выделить в регулярном выражении части по полученным границам.
-
На данный момент в форке HighlightedTextShowing реализовано следующее:
Для области "Описание":
1) Функция получения выделения из заданной области - получает индексы начала и конца выделения.
2) Функция получения индексов начального и конечного тега из регулярного выражения по индексам выделения.
3) Для отображения выделением используется функция, которая выделяет часть регулярного выражения и ее описание.
Для области "Проверка текста":
1) Используется та же функция получения выделения.
2) Для определения индексов начального и конечного тега из регулярного выражения по индексам выделения будет написана функция, т.к. в сравниваемом с регулярным выражением текст могут присутствовать несоответствия регулярному выражению.
3) Для отображения выделением будет использоваться так же функция выделения части регулярного выражения и его описания.
-
repo owner 1) Для описания - вышлите мне пример текущего варианта описания в html, выделенного из него куска и результата вашей функции. Без примера про такое количество индексов сложно понять... Я вам покажу куда что надо передать если вы подойдете ко мне на экзамене или консультации и дождетесь пока будет свободное время (во вторник после 13-30, в среду - до 13-30).
2) Для строк проверки - учитывается выделение в одной строке, в принципе интересует только та часть выделения которая в зеленой зоне - зоне совпадения - но индексы лучше от начала строки (хотя можно и в зеленой, пересчитать несложно). При попадании в выделение красного участка слева или справа он внутрь выделения не считается (но опять же, это и на стороне сервера пересчитать можно, в PHP если вам так проще).
-
Для описания найдено такое решение (на вход по прежнему подается выделение в строке, на выходе должны быть индексы первого и последнего элемента в regex, описание которых выделено):
- Рекурсивная ф-ия (т.к. вложенность узлов может быть любая), которая проходит по дочерним элементам и определяет, какие дочерние узлы выделены - возвращает список выделенных узлов.
- Удаление повторяющихся узлов из предыдущего списка (элементы в списке идут в порядке следования в регулярном выражении).
- По списку определяются индексы первого и последнего элемента в regex, описание которых выделено.
-
Начальный план тестирования работы ф-ии для выделении текста в описании:
- Отсутствие выделения. Результат - ничего не выделено
- Выделение текста за границами блока описания. Результат - ничего не выделено
- Выделение текста в границах блока описания и после него. Результат - ничего не выделено
- Выделение текста в границах блока описания и до него. Результат - ничего не выделено
- Выделение текста в границах блока описание, а также до и после него. Результат - ничего не выделено
- Выделение символов в строке, не относящихся к описанию частей регулярных выражения(слова-связки). Результат - ничего не выделено
- Выделение полностью фрагмента текста, описывающего 1 элемент регулярного выражения. Результат - выделение этого элемента регулярного выражения.
- Выделение части от фрагмента текста, описывающего 1 элемент регулярного выражения. Результат - выделение этого элемента регулярного выражения.
- Выделение полностью фрагмента текста, описывающего 1 элемент регулярного выражения и слова связки после элемента. Результат - выделение этого элемента регулярного выражения.
- Выделение полностью фрагмента текста, описывающего 1 элемент регулярного выражения и слова связки до этого элемента. Результат - выделение этого элемента регулярного выражения.
- Выделение полностью фрагмента текста, описывающего 1 элемент регулярного выражения и слов связки до и после этого элемента. Результат - выделение этого элемента регулярного выражения.
- Выделение полностью описаний двух элементов и слова-связки между ними. Результат - выделение этих элементов регулярного выражения.
- Выделение полностью описания действия, которое не используется без аргументов(или, кол-во раз и т.д.). Результат - выделение этого действия и связанных с ним аргументов в регулярном выражении.
- Выделение описания частей регулярного выражения, находяшихся на разных уровнях иерархии(разноуровневые или, скобки и т.д.). Результат - выделение в регулярном выражении части, которая из выделенных находится на самом высоком уровне(вложенные части попадут в ее выделение).
- Выделение всего текста описания регулярного выражения. Результат - выделено все регулярное выражение
-
Доделал рекурсивную ф-ию для определения выделенных частей описания регулярного выражения. Как по спанам, которые я получил из выделения, получить индексы в регулярном выражении, которым они соответствуют?
-
repo owner Там вам надо получать не индексы, а id узлов синтаксического дерева. Они в спанах должны быть прописаны. Посмотрите на дерево - там id узлов прописаны в виде меток узлов и используются при посылке запроса на выделение из дерева (используется id верхнего узла). Проблемы возникают в ситуации, когда выделена часть N-арного узла конкатенации или альтернативы т.к. в вашем случае его еще нет и id тоже - и спана для него тоже.
По тестам - сможете сделать их с помощью behat?
-
Тесты будут описаны без behat
Доделано выделение части регулярного выражения в описании и по нажатию на кнопку его выделение.
-
Набор необходимых правок по имеющемуся решению:
- переименовать переменные в php
- комментарии в js перевести на английский
- добавить комментарий в php про then/or и перевод на другие языки
- переделать определение по цвету спана: добавить спец. флаг в имя класса и по нему определять это
- проверить php codechecker'om
- коммит-сообщения перевести на русский язык
- закомментировать ф-ию get_text_from_node при использовании для разных браузеров
делать исправления внутри коммита и вразумительное описание абзацем
Протестировать следующие случаи:
(ab)c(?(1)de|fg)df\b.
subpattern
#1: [ ab ] then c then if the subpattern#1has been successfully matched then check: [de] else check: [fg] then df then a word boundary then .-
Выделено "hen c then "
-
Сделать в спанах несколько выделений сразу и проверить работоспособность.
-
Внесены все правки.
Протестирован первый случай.
Не протестирован случай множественных выделений.
-
repo owner У вас там судя по bitbucket две несвязные ветки в репозитории, что происходит? Какая правильная, откуда вторая взялась?
-
Вторая ветка взялась при переделывании коммитов (перевел коммиты в драфт, удалил/слил лишние, изменил коммит-сообщения и сделал force push).
Вторая ветка с русскими названиями коммитов верная.
-
repo owner Бросать неоконченную ветку плохо. Можно перезалить репозиторий так, чтобы ветка осталась одна - вас ведь никто не вытягивал. Другие смогли оставить одну ветку.
-
Перезалил репозиторий
- Log in to comment
Reported by
1invaderzim1
on 2015-01-21 00:08:53