summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
Diffstat (limited to 'inc')
-rw-r--r--inc/parser/parser.php298
-rw-r--r--inc/parserutils.php157
-rw-r--r--inc/plugins/info/syntax.php53
-rw-r--r--inc/pluginutils.php2
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;
}