CommonMark The CommonMark\CQL class
(cmark >= 1.0.0)
소개
CommonMark Query Language는 작은 명령어 세트에 대한 파서 및 컴파일러로 구현된 CommonMark 노드 트리와 이러한 명령어를 실행하기 위한 가상 머신을 통해 이동하는 방법을 설명하기 위한 DSL입니다.
Paths:
가장 단순한 형태의 CQL 쿼리는 다음 경로를 결합하고/트리를 통해 이동하는 방법을 설명합니다.
- firstChild
- lastChild
- previous
- next
- parent
예를 들어 /firstChild/lastChild
는 첫 번째 자식 노드의 마지막 자식 노드로 이동합니다.
Loops
CQL은 경로 children
또는 siblings
를 사용하여 특정 노드의 하위 또는 형제를 통해 루프하도록 지시할 수 있습니다. 예를 들어 /firstChild/children
은 첫 번째 자식 노드의 모든 자식으로 이동합니다.
Subqueries
CQL은 [/firstChild]
와 같은 하위 쿼리를 사용하여 이동하는 방법을 지시할 수 있습니다. 예를 들어 /firstChild/children[/firstChild]
는 첫 번째 자식 노드의 모든 자식 중 첫 번째 자식 노드로 이동합니다.
Loop Constraints
루핑하는 동안 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
가 아닌 노드의 자식으로 이동합니다.
Path Constraints
CQL은 특정 경로에서 특정 유형의 노드로 이동하는 루프를 생성하도록 지시할 수 있습니다. 예를 들어 /firstChild(BlockQuote)
는 유형이 BlockQuote
인 첫 번째 자식 노드로 이동합니다. children
및 siblings
에 대한 다른 루프와 마찬가지로 이러한 종류의 경로 뒤에는 하위 쿼리만 올 수 있습니다.
Implementation Notes
CQL은 PHP CommonMark 확장의 일부로 구현되었지만 PHP와 별도로 존재하며 PHP의 가상 머신이나 값의 내부 표현을 사용하지 않습니다.
클래스 개요
class CommonMark\CQL {
/* Constructor */
public __construct(string $query)
/* Methods */
public __invoke(CommonMark\Node $root, callable $handler)
}
목차
- CommonMark\CQL::__construct - CQL Construction
- CommonMark\CQL::__invoke - CQL Execution