Клас CommonMark\CQL

(cmark >= 1.1.0)

Вступ

CommonMark Query Language - це DSL для опису того, як проходити через дерево вузлів CommonMark, реалізоване у вигляді синтаксичного аналізатора та компілятора для невеликого набору інструкцій та віртуальної машини для виконання цих інструкцій.

Шляхи:

У найбільш спрощеній формі запит CQL поєднує такі шляхи та , щоб описати, як рухатися по дереву:

  • firstChild
  • lastChild
  • previous
  • next
  • parent

НаПриклад,/firstChild/lastChildбудет перемещаться к последнему дочернему узлу первого дочернего узла.

Цикли

CQL може бути заданий цикл, наприклад, через дочірні елементи або дочірні елементи до певного вузла з використанням шляху childrenилиsiblingsНаПриклад,/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) буде переміщатися до дочірніх елементів вузла, де типом є BlockQuoteилиList. Типи або об'єднання типів також можуть бути скасовані. Наприклад, /children(~BlockQuote) буде переміщатися до дочірніх елементів вузла, де тип не є BlockQuote, а/children(~BlockQuote|Paragraph)будет перемещаться к дочерним узлам, где тип не являетсяBlockQuoteилиParagraph

Обмеження шляхів

CQL можна доручити створити цикл для переміщення до вузла певного типу певним шляхом. Наприклад, /firstChild(BlockQuote) перейде до першого дочірнього вузла з типом BlockQuote. Зверніть увагу, що як і інші цикли, childrenиsiblings, цей тип шляху може супроводжуватися лише підзапитом.

Зауваження щодо реалізації

Хоча CQL реалізований як частина модуля PHP CommonMark, він стоїть окремо від PHP і не використовує віртуальну машину PHP або внутрішню виставу значень.

Огляд класів



    
    
     
      class CommonMark\CQL
     
     {
    

    /* Конструктор */
    
   public __construct(string $query)


    /* Методы */
    public __invoke(CommonMark\Node $root, callable $handler)

   }

Зміст