CommonMark\CQL 类

(cmark >= 1.1.0)

简介

CommonMark 查询语言 (CQL) 是一种 DSL,用于描述如何遍历 CommonMark 节点树,它实现为一个解析器和编译器,用于处理一小部分指令,以及一个用于执行这些指令的虚拟机。

路径

在最简单的形式中,CQL 查询将以下路径和 / 组合起来,以描述如何遍历树

  • firstChild
  • lastChild
  • previous
  • next
  • parent
例如,/firstChild/lastChild 将遍历到第一个子节点的最后一个子节点。

循环

CQL 可以被指示循环,例如通过某个特定节点的子节点或兄弟节点,方法是使用路径 childrensiblings。例如,/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) 将遍历类型为 BlockQuoteList 的节点的子节点。类型或类型的联合也可以被否定。例如,/children(~BlockQuote) 将遍历类型不为 BlockQuote 的节点的子节点,而 /children(~BlockQuote|Paragraph) 将遍历类型不为 BlockQuoteParagraph 的节点的子节点。

路径约束

CQL 可以被指示创建一个循环,以遍历特定路径上特定类型的节点。例如,/firstChild(BlockQuote) 将遍历类型为 BlockQuote 的第一个子节点。请注意,与其他针对 childrensiblings 的循环一样,这种路径只能被子查询跟随。

实现说明

虽然 CQL 已作为 PHP CommonMark 扩展的一部分实现,但它独立于 PHP,不使用 PHP 的虚拟机或内部值表示。

类概要

class CommonMark\CQL {
/* 构造函数 */
public __construct(string $query)
/* 方法 */
public __invoke(CommonMark\Node $root, callable $handler)
}

目录

添加笔记

用户贡献的笔记

此页面没有用户贡献的笔记。
To Top