diff options
Diffstat (limited to 'inc')
-rw-r--r-- | inc/parser/parser.php | 298 | ||||
-rw-r--r-- | inc/parserutils.php | 157 | ||||
-rw-r--r-- | inc/plugins/info/syntax.php | 53 | ||||
-rw-r--r-- | inc/pluginutils.php | 2 |
4 files changed, 310 insertions, 200 deletions
diff --git a/inc/parser/parser.php b/inc/parser/parser.php index f1a10fb00..5f40856fb 100644 --- a/inc/parser/parser.php +++ b/inc/parser/parser.php @@ -74,7 +74,7 @@ class Doku_Parser { */ function addMode($name, & $Mode) { if ( !isset($this->modes['base']) ) { - $this->addBaseMode(new Doku_Parser_Mode_Base()); + $this->addBaseMode(new Doku_Parser_Mode_base()); } $Mode->Lexer = & $this->Lexer; $this->modes[$name] = & $Mode; @@ -141,11 +141,17 @@ class Doku_Parser_Mode { var $allowedModes = array(); + // returns a number used to determine in which order modes are added + function getSort() { + trigger_error('getSort() not implemented in '.get_class($this), E_USER_WARNING); + } + // Called before any calls to connectTo function preConnect() {} - + + // Connects the mode function connectTo($mode) {} - + // Called after all calls to connectTo function postConnect() {} @@ -156,9 +162,9 @@ class Doku_Parser_Mode { } //------------------------------------------------------------------- -class Doku_Parser_Mode_Base extends Doku_Parser_Mode { +class Doku_Parser_Mode_base extends Doku_Parser_Mode { - function Doku_Parser_Mode_Base() { + function Doku_Parser_Mode_base() { global $PARSER_MODES; $this->allowedModes = array_merge ( @@ -171,12 +177,16 @@ class Doku_Parser_Mode_Base extends Doku_Parser_Mode { $PARSER_MODES['disabled'] ); } + + function getSort() { + return 0; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Footnote extends Doku_Parser_Mode { +class Doku_Parser_Mode_footnote extends Doku_Parser_Mode { - function Doku_Parser_Mode_Footnote() { + function Doku_Parser_Mode_footnote() { global $PARSER_MODES; $this->allowedModes = array_merge ( @@ -202,10 +212,13 @@ class Doku_Parser_Mode_Footnote extends Doku_Parser_Mode { } + function getSort() { + return 150; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Header extends Doku_Parser_Mode { +class Doku_Parser_Mode_header extends Doku_Parser_Mode { function preConnect() { //we're not picky about the closing ones, two are enough @@ -227,36 +240,49 @@ class Doku_Parser_Mode_Header extends Doku_Parser_Mode { } } + function getSort() { + return 50; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_NoToc extends Doku_Parser_Mode { +class Doku_Parser_Mode_notoc extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addSpecialPattern('~~NOTOC~~',$mode,'notoc'); } + function getSort() { + return 30; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_NoCache extends Doku_Parser_Mode { +class Doku_Parser_Mode_nocache extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addSpecialPattern('~~NOCACHE~~',$mode,'nocache'); } + function getSort() { + return 40; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Linebreak extends Doku_Parser_Mode { +class Doku_Parser_Mode_linebreak extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addSpecialPattern('\x5C{2}(?=\s)',$mode,'linebreak'); } + + function getSort() { + return 140; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Eol extends Doku_Parser_Mode { +class Doku_Parser_Mode_eol extends Doku_Parser_Mode { function connectTo($mode) { $badModes = array('listblock','table'); @@ -265,59 +291,73 @@ class Doku_Parser_Mode_Eol extends Doku_Parser_Mode { } $this->Lexer->addSpecialPattern('\n',$mode,'eol'); } + + function getSort() { + return 370; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_HR extends Doku_Parser_Mode { +class Doku_Parser_Mode_hr extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addSpecialPattern('\n[ \t]*-{4,}[ \t]*(?=\n)',$mode,'hr'); } - + + function getSort() { + return 160; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Formatting extends Doku_Parser_Mode { +class Doku_Parser_Mode_formatting extends Doku_Parser_Mode { var $type; var $formatting = array ( 'strong' => array ( 'entry'=>'\*\*(?=.*\*\*)', 'exit'=>'\*\*', + 'sort'=>70 ), 'emphasis'=> array ( 'entry'=>'//(?=.*//)', 'exit'=>'//', + 'sort'=>80 ), 'underline'=> array ( 'entry'=>'__(?=.*__)', 'exit'=>'__', + 'sort'=>90 ), 'monospace'=> array ( 'entry'=>'\x27\x27(?=.*\x27\x27)', 'exit'=>'\x27\x27', + 'sort'=>100 ), 'subscript'=> array ( 'entry'=>'<sub>(?=.*\x3C/sub\x3E)', 'exit'=>'</sub>', + 'sort'=>110 ), 'superscript'=> array ( 'entry'=>'<sup>(?=.*\x3C/sup\x3E)', 'exit'=>'</sup>', + 'sort'=>120 ), 'deleted'=> array ( 'entry'=>'<del>(?=.*\x3C/del\x3E)', 'exit'=>'</del>', + 'sort'=>130 ), ); - function Doku_Parser_Mode_Formatting($type) { + function Doku_Parser_Mode_formatting($type) { global $PARSER_MODES; if ( !array_key_exists($type, $this->formatting) ) { @@ -362,12 +402,16 @@ class Doku_Parser_Mode_Formatting extends Doku_Parser_Mode { ); } + + function getSort() { + return $this->formatting[$this->type]['sort']; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_ListBlock extends Doku_Parser_Mode { +class Doku_Parser_Mode_listblock extends Doku_Parser_Mode { - function Doku_Parser_Mode_ListBlock() { + function Doku_Parser_Mode_listblock() { global $PARSER_MODES; $this->allowedModes = array_merge ( @@ -392,23 +436,24 @@ class Doku_Parser_Mode_ListBlock extends Doku_Parser_Mode { function postConnect() { $this->Lexer->addExitPattern('\n','listblock'); } + + function getSort() { + return 10; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Table extends Doku_Parser_Mode { +class Doku_Parser_Mode_table extends Doku_Parser_Mode { - function Doku_Parser_Mode_Table() { + function Doku_Parser_Mode_table() { global $PARSER_MODES; $this->allowedModes = array_merge ( $PARSER_MODES['formatting'], $PARSER_MODES['substition'], $PARSER_MODES['disabled'], - $PARSER_MODES['protected'] #XXX new + $PARSER_MODES['protected'] ); - #$this->allowedModes[] = 'footnote'; - #$this->allowedModes[] = 'preformatted'; - #$this->allowedModes[] = 'unformatted'; } function connectTo($mode) { @@ -424,10 +469,14 @@ class Doku_Parser_Mode_Table extends Doku_Parser_Mode { $this->Lexer->addPattern('\|','table'); $this->Lexer->addExitPattern('\n','table'); } + + function getSort() { + return 60; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Unformatted extends Doku_Parser_Mode { +class Doku_Parser_Mode_unformatted extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addEntryPattern('<nowiki>(?=.*\x3C/nowiki\x3E)',$mode,'unformatted'); @@ -440,10 +489,13 @@ class Doku_Parser_Mode_Unformatted extends Doku_Parser_Mode { $this->Lexer->mapHandler('unformattedalt','unformatted'); } + function getSort() { + return 170; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_PHP extends Doku_Parser_Mode { +class Doku_Parser_Mode_php extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addEntryPattern('<php>(?=.*\x3C/php\x3E)',$mode,'php'); @@ -453,10 +505,13 @@ class Doku_Parser_Mode_PHP extends Doku_Parser_Mode { $this->Lexer->addExitPattern('</php>','php'); } + function getSort() { + return 180; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_HTML extends Doku_Parser_Mode { +class Doku_Parser_Mode_html extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addEntryPattern('<html>(?=.*\x3C/html\x3E)',$mode,'html'); @@ -466,10 +521,13 @@ class Doku_Parser_Mode_HTML extends Doku_Parser_Mode { $this->Lexer->addExitPattern('</html>','html'); } + function getSort() { + return 190; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Preformatted extends Doku_Parser_Mode { +class Doku_Parser_Mode_preformatted extends Doku_Parser_Mode { function connectTo($mode) { // Has hard coded awareness of lists... @@ -485,11 +543,14 @@ class Doku_Parser_Mode_Preformatted extends Doku_Parser_Mode { function postConnect() { $this->Lexer->addExitPattern('\n','preformatted'); } - + + function getSort() { + return 20; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Code extends Doku_Parser_Mode { +class Doku_Parser_Mode_code extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addEntryPattern('<code(?=.*\x3C/code\x3E)',$mode,'code'); @@ -499,10 +560,13 @@ class Doku_Parser_Mode_Code extends Doku_Parser_Mode { $this->Lexer->addExitPattern('</code>','code'); } + function getSort() { + return 200; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_File extends Doku_Parser_Mode { +class Doku_Parser_Mode_file extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addEntryPattern('<file>(?=.*\x3C/file\x3E)',$mode,'file'); @@ -512,12 +576,15 @@ class Doku_Parser_Mode_File extends Doku_Parser_Mode { $this->Lexer->addExitPattern('</file>','file'); } + function getSort() { + return 210; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Quote extends Doku_Parser_Mode { +class Doku_Parser_Mode_quote extends Doku_Parser_Mode { - function Doku_Parser_Mode_Quote() { + function Doku_Parser_Mode_quote() { global $PARSER_MODES; $this->allowedModes = array_merge ( @@ -540,15 +607,18 @@ class Doku_Parser_Mode_Quote extends Doku_Parser_Mode { $this->Lexer->addExitPattern('\n','quote'); } + function getSort() { + return 220; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Acronym extends Doku_Parser_Mode { +class Doku_Parser_Mode_acronym extends Doku_Parser_Mode { // A list var $acronyms = array(); var $pattern = ''; - function Doku_Parser_Mode_Acronym($acronyms) { + function Doku_Parser_Mode_acronym($acronyms) { $this->acronyms = $acronyms; } @@ -566,15 +636,18 @@ class Doku_Parser_Mode_Acronym extends Doku_Parser_Mode { } } + function getSort() { + return 240; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Smiley extends Doku_Parser_Mode { +class Doku_Parser_Mode_smiley extends Doku_Parser_Mode { // A list var $smileys = array(); var $pattern = ''; - function Doku_Parser_Mode_Smiley($smileys) { + function Doku_Parser_Mode_smiley($smileys) { $this->smileys = $smileys; } @@ -592,15 +665,18 @@ class Doku_Parser_Mode_Smiley extends Doku_Parser_Mode { } } + function getSort() { + return 230; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Wordblock extends Doku_Parser_Mode { +class Doku_Parser_Mode_wordblock extends Doku_Parser_Mode { // A list var $badwords = array(); var $pattern = ''; - function Doku_Parser_Mode_Wordblock($badwords) { + function Doku_Parser_Mode_wordblock($badwords) { $this->badwords = $badwords; } @@ -624,18 +700,21 @@ class Doku_Parser_Mode_Wordblock extends Doku_Parser_Mode { } } + function getSort() { + return 250; + } } //------------------------------------------------------------------- /** * @TODO Quotes and 640x480 are not supported - just straight replacements here */ -class Doku_Parser_Mode_Entity extends Doku_Parser_Mode { +class Doku_Parser_Mode_entity extends Doku_Parser_Mode { // A list var $entities = array(); var $pattern = ''; - function Doku_Parser_Mode_Entity($entities) { + function Doku_Parser_Mode_entity($entities) { $this->entities = $entities; } @@ -653,11 +732,14 @@ class Doku_Parser_Mode_Entity extends Doku_Parser_Mode { } } + function getSort() { + return 260; + } } //------------------------------------------------------------------- // Implements the 640x480 replacement -class Doku_Parser_Mode_MultiplyEntity extends Doku_Parser_Mode { +class Doku_Parser_Mode_multiplyentity extends Doku_Parser_Mode { function connectTo($mode) { @@ -667,10 +749,13 @@ class Doku_Parser_Mode_MultiplyEntity extends Doku_Parser_Mode { } + function getSort() { + return 270; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Quotes extends Doku_Parser_Mode { +class Doku_Parser_Mode_quotes extends Doku_Parser_Mode { function connectTo($mode) { @@ -689,10 +774,13 @@ class Doku_Parser_Mode_Quotes extends Doku_Parser_Mode { } + function getSort() { + return 280; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_CamelCaseLink extends Doku_Parser_Mode { +class Doku_Parser_Mode_camelcaselink extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addSpecialPattern( @@ -700,39 +788,51 @@ class Doku_Parser_Mode_CamelCaseLink extends Doku_Parser_Mode { ); } + function getSort() { + return 290; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_InternalLink extends Doku_Parser_Mode { +class Doku_Parser_Mode_internallink extends Doku_Parser_Mode { function connectTo($mode) { // Word boundaries? $this->Lexer->addSpecialPattern("\[\[.+?\]\]",$mode,'internallink'); } + function getSort() { + return 300; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_Media extends Doku_Parser_Mode { +class Doku_Parser_Mode_media extends Doku_Parser_Mode { function connectTo($mode) { // Word boundaries? $this->Lexer->addSpecialPattern("\{\{[^\}]+\}\}",$mode,'media'); } + function getSort() { + return 320; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_RSS extends Doku_Parser_Mode { +class Doku_Parser_Mode_rss extends Doku_Parser_Mode { function connectTo($mode) { $this->Lexer->addSpecialPattern("\{\{rss>[^\}]+\}\}",$mode,'rss'); } + function getSort() { + return 310; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_ExternalLink extends Doku_Parser_Mode { +class Doku_Parser_Mode_externallink extends Doku_Parser_Mode { var $schemes = array('http','https','telnet','gopher','wais','ftp','ed2k','irc'); var $patterns = array(); @@ -759,10 +859,13 @@ class Doku_Parser_Mode_ExternalLink extends Doku_Parser_Mode { } } + function getSort() { + return 330; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_FileLink extends Doku_Parser_Mode { +class Doku_Parser_Mode_filelink extends Doku_Parser_Mode { var $pattern; @@ -782,12 +885,14 @@ class Doku_Parser_Mode_FileLink extends Doku_Parser_Mode { $this->Lexer->addSpecialPattern( $this->pattern,$mode,'filelink'); } - + function getSort() { + return 360; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_WindowsShareLink extends Doku_Parser_Mode { +class Doku_Parser_Mode_windowssharelink extends Doku_Parser_Mode { var $pattern; @@ -807,101 +912,22 @@ class Doku_Parser_Mode_WindowsShareLink extends Doku_Parser_Mode { $this->pattern,$mode,'windowssharelink'); } - + function getSort() { + return 350; + } } //------------------------------------------------------------------- -class Doku_Parser_Mode_EmailLink extends Doku_Parser_Mode { +class Doku_Parser_Mode_emaillink extends Doku_Parser_Mode { function connectTo($mode) { - //<([\w0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)> $this->Lexer->addSpecialPattern("<[\w0-9\-_.]+?@[\w\-]+\.[\w\-\.]+\.*[\w]+>",$mode,'emaillink'); } -} - -//------------------------------------------------------------------- -// -// XXX deprecated - replace by $PARSER_MODES -// -// Help fns to keep mode lists - used to make it easier to populate -// the list of modes another mode accepts - -/* - -// Can contain many other modes -// E.g. a footnote can containing formatting etc. -function Doku_Parser_BlockContainers() { - $modes = array( - 'footnote', 'listblock', 'table','quote', - // hr breaks the principle but HRs should not be used in tables / lists - // so put it here - 'hr', - ); - return $modes; -} - -// Used to mark paragraph boundaries -function Doku_Parser_Paragraphs() { - $modes = array( - 'eol' - ); - return $modes; -} - -// Can only be used by the base mode -function Doku_Parser_BaseOnly() { - $modes = array( - 'header' - ); - return $modes; -} - -// "Styling" modes that format text. -function Doku_Parser_Formatting($remove = '') { - $modes = array( - 'strong', 'emphasis', 'underline', 'monospace', - 'subscript', 'superscript', 'deleted', - ); - $key = array_search($remove, $modes); - if ( is_int($key) ) { - unset($modes[$key]); + function getSort() { + return 340; } - - return $modes; -} - -// Modes where the token is simply replaced - contain no -// other modes -function Doku_Parser_Substition() { - $modes = array( - 'acronym','smiley','wordblock','entity','camelcaselink', - 'internallink','media','externallink','linebreak','emaillink', - 'windowssharelink','filelink','notoc','nocache','multiplyentity', - 'quotes','rss', - ); - return $modes; -} - -// Modes which have a start and end token but inside which -// no other modes should be applied -function Doku_Parser_Protected() { - $modes = array( - 'preformatted','code','file', - 'php','html','quote', - ); - return $modes; -} - -// Disable wiki markup inside this mode -function Doku_Parser_Disabled() { - $modes = array( - 'unformatted' - ); - return $modes; } -*/ -// -------------------------------------------------------------------------- //Setup VIM: ex: et ts=4 enc=utf-8 : diff --git a/inc/parserutils.php b/inc/parserutils.php index 9c0e4fd9c..bd5317e1b 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -154,86 +154,123 @@ function p_cached_instructions($file,$cacheonly=false){ * @author Andreas Gohr <andi@splitbrain.org> */ function p_get_instructions($text){ + + $modes = p_get_parsermodes(); + + // Create the parser + $Parser = & new Doku_Parser(); + + // Add the Handler + $Parser->Handler = & new Doku_Handler(); + + //add modes to parser + foreach($modes as $mode){ + $Parser->addMode($mode['mode'],$mode['obj']); + } + + // Do the parsing + $p = $Parser->parse($text); +// dbg($p); + return $p; +} + +/** + * returns all available parser syntax modes in correct order + * + * @author Andreas Gohr <andi@splitbrain.org> + */ +function p_get_parsermodes(){ global $conf; + //reuse old data + static $modes = null; + if($modes != null){ + return $modes; + } + //import parser classes and mode definitions require_once DOKU_INC . 'inc/parser/parser.php'; - // load syntax plugins + // we now collect all syntax modes and their objects, then they will + // be sorted and added to the parser in correct order + $modes = array(); + + // add syntax plugins $pluginlist = plugin_list('syntax'); if(count($pluginlist)){ global $PARSER_MODES; - $plugins = array(); + $obj = null; foreach($pluginlist as $p){ - plugin_load('syntax',$p,$plugin[$p]); //load plugin into $plugin array - $PARSER_MODES[$plugin[$p]->getType()][] = "plugin_$p"; //register mode type + plugin_load('syntax',$p,$obj); //load plugin into $obj + $PARSER_MODES[$obj->getType()][] = "plugin_$p"; //register mode type + //add to modes + $modes[] = array( + 'sort' => $obj->getSort(), + 'mode' => "plugin_$p", + 'obj' => $obj, + ); } } - - // Create the parser - $Parser = & new Doku_Parser(); - - // Add the Handler - $Parser->Handler = & new Doku_Handler(); - // Load all the modes - $Parser->addMode('listblock',new Doku_Parser_Mode_ListBlock()); - $Parser->addMode('preformatted',new Doku_Parser_Mode_Preformatted()); - $Parser->addMode('notoc',new Doku_Parser_Mode_NoToc()); - $Parser->addMode('nocache',new Doku_Parser_Mode_NoCache()); - $Parser->addMode('header',new Doku_Parser_Mode_Header()); - $Parser->addMode('table',new Doku_Parser_Mode_Table()); - - $formats = array ( - 'strong', 'emphasis', 'underline', 'monospace', - 'subscript', 'superscript', 'deleted', - ); - foreach ( $formats as $format ) { - $Parser->addMode($format,new Doku_Parser_Mode_Formatting($format)); + // add default modes + $std_modes = array('listblock','preformatted','notoc','nocache', + 'header','table','linebreak','footnote','hr', + 'unformatted','php','html','code','file','quote', + 'multiplyentity','quotes','internallink','rss', + 'media','externallink','emaillink','windowssharelink', + 'eol'); + foreach($std_modes as $m){ + $class = "Doku_Parser_Mode_$m"; + $obj = new $class(); + $modes[] = array( + 'sort' => $obj->getSort(), + 'mode' => $m, + 'obj' => $obj + ); } - $Parser->addMode('linebreak',new Doku_Parser_Mode_Linebreak()); - $Parser->addMode('footnote',new Doku_Parser_Mode_Footnote()); - $Parser->addMode('hr',new Doku_Parser_Mode_HR()); - - $Parser->addMode('unformatted',new Doku_Parser_Mode_Unformatted()); - $Parser->addMode('php',new Doku_Parser_Mode_PHP()); - $Parser->addMode('html',new Doku_Parser_Mode_HTML()); - $Parser->addMode('code',new Doku_Parser_Mode_Code()); - $Parser->addMode('file',new Doku_Parser_Mode_File()); - $Parser->addMode('quote',new Doku_Parser_Mode_Quote()); + // add formatting modes + $fmt_modes = array('strong','emphasis','underline','monospace', + 'subscript','superscript','deleted'); + foreach($fmt_modes as $m){ + $obj = new Doku_Parser_Mode_formatting($m); + $modes[] = array( + 'sort' => $obj->getSort(), + 'mode' => $m, + 'obj' => $obj + ); + } + + // add modes which need files + $obj = new Doku_Parser_Mode_smiley(array_keys(getSmileys())); + $modes[] = array('sort' => $obj->getSort(), 'mode' => 'smiley','obj' => $obj ); + $obj = new Doku_Parser_Mode_acronym(array_keys(getAcronyms())); + $modes[] = array('sort' => $obj->getSort(), 'mode' => 'acronym','obj' => $obj ); + $obj = new Doku_Parser_Mode_entity(array_keys(getEntities())); + $modes[] = array('sort' => $obj->getSort(), 'mode' => 'entity','obj' => $obj ); - $Parser->addMode('smiley',new Doku_Parser_Mode_Smiley(array_keys(getSmileys()))); - $Parser->addMode('acronym',new Doku_Parser_Mode_Acronym(array_keys(getAcronyms()))); - #$Parser->addMode('wordblock',new Doku_Parser_Mode_Wordblock($Modes,getBadWords())); - $Parser->addMode('entity',new Doku_Parser_Mode_Entity(array_keys(getEntities()))); - $Parser->addMode('multiplyentity',new Doku_Parser_Mode_MultiplyEntity()); - $Parser->addMode('quotes',new Doku_Parser_Mode_Quotes()); - - if($conf['camelcase']){ - $Parser->addMode('camelcaselink',new Doku_Parser_Mode_CamelCaseLink()); + // add optional camelcase mode + if($conf['camelcase']){ + $obj = new Doku_Parser_Mode_camelcaselink(); + $modes[] = array('sort' => $obj->getSort(), 'mode' => 'camelcaselink','obj' => $obj ); } - //add plugins FIXME since order is important we, need to find a better way! - foreach ( array_keys($plugin) as $p ) { - $Parser->addMode("plugin_$p",$plugin[$p]); - } + //sort modes + usort($modes,'p_sort_modes'); - $Parser->addMode('internallink',new Doku_Parser_Mode_InternalLink()); - $Parser->addMode('rss',new Doku_Parser_Mode_RSS()); - $Parser->addMode('media',new Doku_Parser_Mode_Media()); - $Parser->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); - $Parser->addMode('emaillink',new Doku_Parser_Mode_EmailLink()); - $Parser->addMode('windowssharelink',new Doku_Parser_Mode_WindowsShareLink()); - //$Parser->addMode('filelink',new Doku_Parser_Mode_FileLink()); //FIXME ??? - $Parser->addMode('eol',new Doku_Parser_Mode_Eol()); + return $modes; +} - // Do the parsing - $p = $Parser->parse($text); -// dbg($p); - return $p; -} +/** + * Callback function for usort + * + * @author Andreas Gohr <andi@splitbrain.org> + */ +function p_sort_modes($a, $b){ + if($a['sort'] == $b['sort']) return 0; + return ($a['sort'] < $b['sort']) ? -1 : 1; +} /** * Renders a list of instruction to the specified output mode diff --git a/inc/plugins/info/syntax.php b/inc/plugins/info/syntax.php index 4567de685..bf45e5d11 100644 --- a/inc/plugins/info/syntax.php +++ b/inc/plugins/info/syntax.php @@ -22,7 +22,14 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin { function getType(){ return 'substition'; } - + + /** + * Where to sort in? + */ + function getSort(){ + return 155; + } + /** * Connect pattern to lexer @@ -47,8 +54,14 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin { if($mode == 'xhtml'){ //handle various info stuff switch ($data[0]){ - case 'foo': - $renderer->doc .= "foo is foo"; + case 'version'; + $renderer->doc .= getVersion(); + break; + case 'syntaxmodes'; + $renderer->doc .= $this->_syntaxmodes_xhtml(); + break; + case 'syntaxtypes'; + $renderer->doc .= $this->_syntaxtypes_xhtml(); break; default: $renderer->doc .= "no info about ".htmlspecialchars($data[0]); @@ -58,6 +71,40 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin { return false; } + /** + * lists all known syntax types and their registered modes + */ + function _syntaxtypes_xhtml(){ + global $PARSER_MODES; + $doc = ''; + + $doc .= '<table class="inline"><tbody>'; + foreach($PARSER_MODES as $mode => $modes){ + $doc .= '<tr>'; + $doc .= '<td class="leftalign">'; + $doc .= $mode; + $doc .= '</td>'; + $doc .= '<td class="leftalign">'; + $doc .= join(', ',$modes); + $doc .= '</td>'; + $doc .= '</tr>'; + } + $doc .= '</tbody></table>'; + return $doc; + } + + /** + * lists all known syntax modes and their sorting value + */ + function _syntaxmodes_xhtml(){ + $modes = p_get_parsermodes(); + $doc = ''; + + foreach ($modes as $mode){ + $doc .= $mode['mode'].' ('.$mode['sort'].'), '; + } + return $doc; + } } //Setup VIM: ex: et ts=4 enc=utf-8 : diff --git a/inc/pluginutils.php b/inc/pluginutils.php index 3be57f2d7..49dd44816 100644 --- a/inc/pluginutils.php +++ b/inc/pluginutils.php @@ -48,7 +48,7 @@ function plugin_load($type,$name,&$ref){ } //try to load the wanted plugin file - if(!@include_once(DOKU_PLUGIN.$name.'/'.$type.'.php')){ + if(!include_once(DOKU_PLUGIN.$name.'/'.$type.'.php')){ return false; } |