2024年PHP开发者大会日本站

CommonMark\CQL 类

(cmark >= 1.1.0)

简介

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

路径

最简单的形式下,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