A classe CommonMark\CQL
(cmark >= 1.1.0)
Introdução
CommonMark Query Language (CQL) é uma DSL para descrever como navegar por uma árvore de Nós CommonMark implementada como um analisador e compilador para um pequeno conjunto de instruções e uma máquina virtual para executar essas instruções.
Paths:
Em sua forma mais simplista, uma consulta CQL combina os caminhos a seguir e o caminho /
para descrever como navegar em uma árvore:
- firstChild
- lastChild
- previous
- next
- parent
/firstChild/lastChild
navegaria para o último nó filho (lastChild) do primeiro nó filho (firstChild).
Laços de repetição
A CQL pode ser instruída para fazer laços de repetição, por exemplo passando pelos filhos ou irmãos de um nó em particular, usando o caminho children
(filhos), ou siblings
(irmãos). Por exemplo, /firstChild/children
navegará para todos os filhos do primeiro nó filho.
Sub-consultas
A CQL pode ser instruída sobre como navegar usando uma sub-consulta como [/firstChild]
. Por exemplo, /firstChild/children[/firstChild]
navegará até o primeiro nó filho de todos os filhos do primeiro nó filho.
Restrições nos Laços
Durante um laço de repetição, a CQL pode ser instruída a restringir o caminho percorrido a nós de um determinado tipo. Por exemplo, /children(BlockQuote)
navegará até os filhos de um nó onde o tipo seja BlockQuote
. Os tipos a seguir são reconhecidos (insensíveis a maiúsculas/minúsculas):
- BlockQuote
- List
- Item
- CodeBlock
- HtmlBlock
- CustomBlock
- Paragraph
- Heading
- ThematicBreak
- Text
- SoftBreak
- LineBreak
- Code
- HtmlInline
- CustomInline
- Emphasis
- Strong
- Link
- Image
/children(BlockQuote|List)
navegará até os filhos de um nó onde o tipo seja BlockQuote
ou List
. Tipos ou uniões de tipos também podem ser negados. Por exemplo, /children(~BlockQuote)
navegará até os filhos de um nó onde o tipo não seja BlockQuote
, e /children(~BlockQuote|Paragraph)
navegará até os filhos de um nó onde o tipo não seja BlockQuote
ou Paragraph
.
Restrições em Caminhos
A CQL pode ser instruída a criar um laço para navegar até um nó de um determinado tipo, em um determinado caminho. Por exemplo, /firstChild(BlockQuote)
navegará até o primeiro nó filho onde o tipo seja BlockQuote
. Observe que como em outros laços para children
e siblings
, este tipo de caminho só pode ser seguido por uma sub-consulta.
Notas de Implementação
Mesmo que a CQL tenha sido implementada como parte da extensão PHP CommonMark, ela é separada do PHP e não usa a máquina virtual ou a representação interna de valores do PHP.
Resumo da classe
Table of Contents
- CommonMark\CQL::__construct — Construção CQL
- CommonMark\CQL::__invoke — Execução CQL