DokuWiki

It's better when it's simple

사용자 도구

사이트 도구


ko:devel:parser

도쿠위키 Parser

이 문서는 parser의 행동방식을 수정하고 싶은 개발자들을 위한 도쿠위키 Parser 설명 문서입니다. HTML 이나 다른 결과 포맷도구를 수정할 수도 있습니다.

개요

parser 로 기존 도쿠위키 문서를 변화시키는 작업을 하면서 별개의 최종 문서를 만듭니다. 각 단계는 한개 이상의 PHP 클래스들에 의해 표현됩니다.

대체로 이러한 요소들은;

  1. Lexer1): 문서의 구문을 통해 상호작용하면서 scan2) 과 “tokens” 3)의 시퀀스로 출력합니다.
  2. Handler4): Lexer 로부터 token 을 받습니다. 그리고 “instructions” 5) 시퀀스로 변화시킵니다. 이것은 렌더러가 상태를 처음부터 끝까지 따라갈 필요 없이 문서가 어떻게 렌더되는지를 설명해줍니다.
  3. Parser6): “connects up” 핸들러를 가진 Lexer 는 도쿠위키의 구문 규칙에 시스템에 접근할 수 있는 포인트를 제공합니다. (the Parser::parse() method)
  4. Renderer7): 핸들러로부터 규칙을 받아들이고 문서가 ready 되었을 때 view 에서 보여줍니다. (e.g. as XHTML)

핸들러를 렌더러와 연결시키기 위해 필요한 메커니즘은 따로 없습니다. - 이 경우는 특별한 케이스입니다.

밑의 그림은 구성요소들 간의 관계를 그린 대략적인 다이어그램입니다.

                                                               
      +-----------+          +-----------+
      |           |  Input   |  Client   |
      |  Parser   |<---------|   Code    |
      |           |  String  |           |
      +-----.-----+          +-----|-----+
    Modes   |                     /|\
      +     |             Renderer |
    Input   |          Instructions|
    String \|/                     |
      +-----'-----+          +-----------+
      |           |          |           |
      |  Lexer    |--------->|  Handler  |
      |           |  Tokens  |           |
      +-----.-----+          +-----------+
            |
            |
       +----+---+
       | Modes  |-+
       +--------+ |-+
         +--------+ |
           +--------+

“Client Code”(parser 를 사용하는 코드) 는 Input 과 String 에게 제공하는 parser 를 내포하고 있습니다. 이건 핸들러에 의해 만들어진 “Renderer Instructions”의 리스트를 return 값으로 받습니다. 이것들은 렌더러를 포함하는 오프젝트들에게 전달해주게 됩니다.

Note: 이 디자인의 중요한 포인트는 렌더러가 가능한 “” 같아 지도록 한다는 것입니다. 이건 앞으로의 해석을 만들 필요가 없습니다. 수정할 수는 있지만 결과물을 렌더링 하는 데에는 주의해야 합니다.(e.g. XHTML) - 특히 렌더러 상태를 추적할 필요가 없습니다. 렌더러를 쉬운 요소로 만들며 원칙을 지킨다면 렌더러가 호환이 가능하도록 만들 수 있게 될 것입니다.(e.g. XHTML 로 대체가능한 PDF) 동시에, 핸들러의 지침서는 XHTML 로 렌더하기 적합해집니다.

Lexer

inc/parser/lexer.php 에 정의되어 있습니다.

1)
Lexer Doku_Lexer클래스를 포함하고 inc/parser/lexer.php 파일의 컨텐츠들 입니다.
2)
scan: 처음부터 끝까지 PHP 스트링을 읽어옴
3)
Lexer 에 의해 만들어진, 문서에 있는 정규표현식과 일치하는 것입니다. 핸들러를 통해 메서드를 불러옵니다.
4)
Handler Doku_Handler클래스를 포함하고 inc/parser/handler.php파일의 컨텐츠입니다.
5)
instructions 의 시퀀스는 저장된 핸들러의 속성인 $calls배열을 호출합니다. 이것은 call_user_func_array를 사용하는 것을 의미합니다.
6)
Parser Doku_Parser클래스와 관련있고 inc/parser/parser.php파일의 컨텐츠들 입니다.
7)
Render Doku_Renderer를 포함하는 몇몇 클래스와 관련이 있습니다. - see inc/parser/renderer.php and inc/parser/xhtml.php
ko/devel/parser.txt · 마지막으로 수정됨: 2015-08-04 06:52 저자 61.74.136.114

별도로 명시하지 않을 경우, 이 위키의 내용은 다음 라이선스에 따라 사용할 수 있습니다: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki