2024 日本 PHP 研討會

CommonMark\CQL 類別

(cmark >= 1.1.0)

簡介

CommonMark 查詢語言 (CQL) 是一種 DSL,用於描述如何在 CommonMark 節點樹中移動,它被實現為一個小型指令集的解析器和編譯器,以及一個用於執行這些指令的虛擬機器。

路徑

在最簡化的形式中,CQL 查詢結合以下路徑和 / 來描述如何在樹中移動

  • firstChild(第一個子節點)
  • lastChild(最後一個子節點)
  • previous(前一個節點)
  • next(下一個節點)
  • 父節點
例如,/firstChild/lastChild 會移動到第一個子節點的最後一個子節點。

迴圈

CQL 可以被指示進行迴圈,例如透過特定節點的子節點或兄弟節點,使用路徑 childrensiblings。例如,/firstChild/children 會移動到第一個子節點的所有子節點。

子查詢

CQL 可以透過使用子查詢(例如 [/firstChild])來指示如何移動。例如,/firstChild/children[/firstChild] 會移動到第一個子節點的所有子節點的第一個子節點。

迴圈限制

在迴圈過程中,可以指示 CQL 將移動路徑限制為特定類型的節點。例如,/children(BlockQuote) 會移動到類型為 BlockQuote 的節點的子節點。以下類型會被識別(不區分大小寫)

  • BlockQuote(區塊引用)
  • List(列表)
  • Item(項目)
  • CodeBlock(程式碼區塊)
  • HtmlBlock(HTML 區塊)
  • CustomBlock(自訂區塊)
  • Paragraph(段落)
  • Heading(標題)
  • ThematicBreak(分隔線)
  • Text(文字)
  • SoftBreak(軟換行)
  • LineBreak(硬換行)
  • Code(程式碼)
  • HtmlInline(HTML 內聯)
  • 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 的虛擬機器或值的內部表示形式。

類別概要

類別 CommonMark\CQL {
/* 建構子 */
公開 __construct(字串 $query)
/* 方法 */
公開 __invoke(CommonMark\Node $root, 可呼叫 $handler)
}

目錄

新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top