CommonMark 확장

CommonMark 확장 (CommonMark)

Markdown은 널리 쓰이지만 문법이 딱 하나라고 말하기 어려워요. CommonMark는 Markdown 문법을 사양(스펙)으로 합리화한 버전인데, 이 확장은 바로 그 CommonMark의 참조 구현에 접근할 수 있게 해 줍니다.

출처: PHP 공식 매뉴얼 - CommonMark

본문

CommonMark 확장은 Markdown 텍스트를 파싱하고, 그 결과를 여러 형식으로 렌더링하는 API를 제공합니다.

파싱 (Parsing)

간단한 파싱 API가 하나 있어요.

CommonMark\Parse(string $content, int $options = ?): CommonMark\Node

문자열 $content를 파싱해 CommonMark\Node(AST)를 돌려줍니다.

렌더링 (Rendering)

파싱된 노드를 여러 형식으로 렌더링할 수 있어요.

CommonMark\Render(CommonMark\Node $node, int $options = ?, int $width = ?): string
CommonMark\Render\HTML(CommonMark\Node $node, int $options = ?): string
CommonMark\Render\XML(CommonMark\Node $node, int $options = ?): string
CommonMark\Render\Man(CommonMark\Node $node, int $options = ?, int $width = ?): string
CommonMark\Render\Latex(CommonMark\Node $node, int $options = ?, int $width = ?): string

Render는 여러 형식을 지원하고, Render\HTML, Render\XML, Render\Man, Render\Latex로 각각 특정 형식으로 렌더링할 수 있어요.

AST 방문 (Visitation)

CommonMark\Node 객체를 탐색하는 방문 API도 있습니다.

public CommonMark\Node::accept(CommonMark\Interfaces\IVisitor $visitor): void

CQL (CommonMark Query Language)

CommonMark 쿼리 언어에 대한 인터페이스도 제공돼요.

public CommonMark\CQL::__construct(string $query)

구성 요소

  • 설치/설정: Requirements, Installation, Predefined Constants

노드 클래스 일람

구체적인 노드 타입으로는 CommonMark\Node\Document, Heading, Paragraph, BlockQuote, BulletList, OrderedList, Item, Text, Text\Strong, Text\Emphasis, ThematicBreak, SoftBreak, LineBreak, Code, CodeBlock, HTMLBlock, HTMLInline, Image, Link, CustomBlock, CustomInline 등이 있어요. 추상 기반 클래스 CommonMark\Node가 모든 노드의 공통 조상이고, AST 조작을 위한 appendChild, prependChild, insertAfter, insertBefore, replace, unlink, accept 메서드를 제공합니다.

인터페이스·클래스 일람

  • CommonMark\Interfaces\IVisitorenter, leave
  • CommonMark\Interfaces\IVisitableaccept
  • CommonMark\Parser__construct, parse, finish
  • CommonMark\CQL__construct, __invoke
  • CommonMark\Node\* 노드 클래스들 — __construct

CommonMark 함수 일람

  • CommonMark\Parse — 파싱
  • CommonMark\Render — 렌더링
  • CommonMark\Render\HTML — HTML 렌더링
  • CommonMark\Render\Latex — LaTeX 렌더링
  • CommonMark\Render\Man — Man 렌더링
  • CommonMark\Render\XML — XML 렌더링

더 알아보기