Класс CommonMark\CQL
(cmark >= 1.1.0)
Введение
CommonMark Query Language - это DSL для описания того, как проходить через дерево узлов CommonMark, реализованное в виде синтаксического анализатора и компилятора для небольшого набора инструкций, и виртуальной машины для выполнения этих инструкций.
Пути:
В наиболее упрощенной форме запрос CQL объединяет следующие пути и /, чтобы описать, как перемещаться по дереву:
- firstChild
- lastChild
- previous
- next
- parent
/firstChild/lastChild будет перемещаться к последнему дочернему узлу первого дочернего узла.
Циклы
В CQL может быть задан цикл, например, через дочерние элементы или дочерние элементы к определенному узлу с использованием пути children или siblings. Например, /firstChild/children будет перемещаться по всем дочерним элементам первого дочернего узла.
Подзапросы
CQL можно проинструктировать, как перемещаться, используя подзапрос, такой как [/firstChild]. Например, /firstChild/children[/firstChild] перейдет к первому дочернему узлу всех дочерних узлов первого дочернего узла.
Ограничения циклов
Во время цикла CQL может быть проинструктирован ограничивать пройденный путь до узлов определенного типа. Например, /children(BlockQuote) будет перемещаться к дочерним элементам узла, где типом является BlockQuote. Следующие типы распознаются (без учета регистра):
- BlockQuote
- List
- Item
- CodeBlock
- HtmlBlock
- CustomBlock
- Paragraph
- Heading
- ThematicBreak
- Text
- SoftBreak
- LineBreak
- Code
- HtmlInline
- CustomInline
- Emphasis
- Strong
- Link
- Image
/children(BlockQuote|List) будет перемещаться к дочерним элементам узла, где типом является BlockQuote или List. Типы или объединения типов, также могут быть отменены. Например, /children(~BlockQuote) будет перемещаться к дочерним элементам узла, где тип не является BlockQuote, а /children(~BlockQuote|Paragraph) будет перемещаться к дочерним узлам, где тип не является BlockQuote или Paragraph.
Ограничения путей
CQL можно поручить создать цикл для перемещения к узлу определенного типа по определенному пути. Например, /firstChild(BlockQuote) перейдет к первому дочернему узлу с типом BlockQuote. Обратите внимание, что как и другие циклы, для children и siblings, этот тип пути может сопровождаться только подзапросом.
Замечания по реализации
Хотя CQL реализован как часть модуля PHP CommonMark, он стоит отдельно от PHP и не использует виртуальную машину PHP или внутреннее представление значений.
Обзор классов
Содержание
- CommonMark\CQL::__construct — Конструктор класса CQL
- CommonMark\CQL::__invoke — Выполнение CQL