El Analizador Sintáctico de la DokuWiki
Este documento explica los detalles del analizador sintàctico (parser) de la DokuWiki y está destinado a desarrolladores que desean modificar el comportamiento del analizador u obtener un mayor control sobre el documento de salida, modificando el código HTML generado o implementando diferentes formatos de salida.
Información general
El parser1) descompone en etapas discretas el proceso de transformar un documento DokuWiki crudo en el documento de salida final2).
En términos generales estos elementos son:
- Parser8): “conecta” el Lexer con el Handler, proporcionando las reglas de sintaxis de la DokuWiki, así como el punto de acceso al sistema (el método Parser::parse())
- Renderer9): acepta las instrucciones del Handler y “dibuja” el documento listo para su visualización (por ejemplo, como XHTML)
No se proporciona ningún mecanismo para conectar el Handler con el Renderer - es necesaria una codificación para cada caso específico.
Diagrama aproximado de las relaciones entre estos componentes :
+-----------+ +-----------+ | | Input | Código | | Parser |<---------| Cliente | | | String | | +-----.-----+ +-----|-----+ Modes | /|\ + | Renderer | Input | Instructions| String \|/ | +-----'-----+ +-----------+ | | | | | Lexer |--------->| Handler | | | Tokens | | +-----.-----+ +-----------+ | | +----+---+ | Modes |-+ +--------+ |-+ +--------+ | +--------+
El “Código Cliente” (código enviado al Parser) invoca al Parser, dándole la cadena de entrada. Recibe, a cambio, la lista de las “Instrucciones de Renderer”, construidas por el Handler. Estas pueden alimentar a algún objeto que implementa el Renderer.
Doku_Lexer
y al contenido del archivo inc/parser/lexer.php
Doku_Handler
y al contenido del archivo inc/parser/handler.php
$calls
, que es una propiedad del Handler. Está diseñada para ser utilizada con call_user_func_arrayDoku_Parser
y al contenido del archivo inc/parser/parser.php
Doku_Renderer
- ver inc/renderer/renderer.php
y inc/parser/xhtml.php