summaryrefslogtreecommitdiff
path: root/inc/parser/handler.php
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2006-02-17 23:20:40 +0100
committerAndreas Gohr <andi@splitbrain.org>2006-02-17 23:20:40 +0100
commit98c868589ee0757f176239cf289cbd007bb74852 (patch)
treeeb48a172b0f1a423b93ffff35f8adf8d579383c1 /inc/parser/handler.php
parent1c73890c5027011d808d38c583561abc309e8086 (diff)
downloadrpg-98c868589ee0757f176239cf289cbd007bb74852.tar.gz
rpg-98c868589ee0757f176239cf289cbd007bb74852.tar.bz2
file cleanups
This patch cleans up the source code to satisfy the coding guidelines (see http://wiki.splitbrain.org/wiki:development#coding_style) It converts files to UNIX lineendings and removes tabs and trailing whitespace. Not all files were cleaned yet. darcs-hash:20060217222040-7ad00-bba3d2bee3b5aa7cbb5184258abd50805cd071bf.gz
Diffstat (limited to 'inc/parser/handler.php')
-rw-r--r--inc/parser/handler.php590
1 files changed, 295 insertions, 295 deletions
diff --git a/inc/parser/handler.php b/inc/parser/handler.php
index a1f2fe4c7..3609e23a8 100644
--- a/inc/parser/handler.php
+++ b/inc/parser/handler.php
@@ -2,51 +2,51 @@
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
class Doku_Handler {
-
+
var $Renderer = NULL;
-
+
var $CallWriter = NULL;
-
+
var $calls = array();
-
+
var $meta = array(
'section' => FALSE,
'toc' => TRUE,
'cache' => TRUE,
);
-
+
var $rewriteBlocks = TRUE;
-
+
function Doku_Handler() {
$this->CallWriter = & new Doku_Handler_CallWriter($this);
}
-
+
function _addCall($handler, $args, $pos) {
$call = array($handler,$args, $pos);
$this->CallWriter->writeCall($call);
}
-
+
function _finalize(){
if ( $this->meta['section'] ) {
$S = & new Doku_Handler_Section();
$this->calls = $S->process($this->calls);
}
-
+
if ( $this->rewriteBlocks ) {
$B = & new Doku_Handler_Block();
$this->calls = $B->process($this->calls);
}
-
+
if ( $this->meta['toc'] ) {
$T = & new Doku_Handler_Toc();
$this->calls = $T->process($this->calls);
}
-
+
array_unshift($this->calls,array('document_start',array(),0));
$last_call = end($this->calls);
array_push($this->calls,array('document_end',array(),$last_call[2]));
}
-
+
function fetch() {
$call = each($this->calls);
if ( $call ) {
@@ -66,24 +66,24 @@ class Doku_Handler {
*/
function plugin($match, $state, $pos, $pluginname){
$data = array($match);
- $plugin =& plugin_load('syntax',$pluginname);
+ $plugin =& plugin_load('syntax',$pluginname);
if($plugin != null){
$data = $plugin->handle($match, $state, $pos, $this);
}
$this->_addCall('plugin',array($pluginname,$data,$pos),$pos);
return TRUE;
}
-
+
function base($match, $state, $pos) {
switch ( $state ) {
case DOKU_LEXER_UNMATCHED:
$this->_addCall('cdata',array($match), $pos);
return TRUE;
break;
-
+
}
}
-
+
function header($match, $state, $pos) {
$match = trim($match);
$levels = array(
@@ -95,23 +95,23 @@ class Doku_Handler {
);
$hsplit = preg_split( '/(={2,})/u', $match,-1,
PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );
-
+
// Locate the level - default to level 1 if no match (title contains == signs)
if ( isset($hsplit[0]) && array_key_exists($hsplit[0], $levels) ) {
$level = $levels[$hsplit[0]];
} else {
$level = 1;
}
-
+
// Strip markers and whitespaces
$title = trim($match,'=');
$title = trim($title,' ');
-
+
$this->_addCall('header',array($title,$level,$pos), $pos);
$this->meta['section'] = TRUE;
return TRUE;
}
-
+
function notoc($match, $state, $pos) {
$this->meta['toc'] = FALSE;
return TRUE;
@@ -121,22 +121,22 @@ class Doku_Handler {
$this->_addCall('nocache',array(),$pos);
return TRUE;
}
-
+
function linebreak($match, $state, $pos) {
$this->_addCall('linebreak',array(),$pos);
return TRUE;
}
-
+
function eol($match, $state, $pos) {
$this->_addCall('eol',array(),$pos);
return TRUE;
}
-
+
function hr($match, $state, $pos) {
$this->_addCall('hr',array(),$pos);
return TRUE;
}
-
+
function _nestingTag($match, $state, $pos, $name) {
switch ( $state ) {
case DOKU_LEXER_ENTER:
@@ -150,48 +150,48 @@ class Doku_Handler {
break;
}
}
-
+
function strong($match, $state, $pos) {
$this->_nestingTag($match, $state, $pos, 'strong');
return TRUE;
}
-
+
function emphasis($match, $state, $pos) {
$this->_nestingTag($match, $state, $pos, 'emphasis');
return TRUE;
}
-
+
function underline($match, $state, $pos) {
$this->_nestingTag($match, $state, $pos, 'underline');
return TRUE;
}
-
+
function monospace($match, $state, $pos) {
$this->_nestingTag($match, $state, $pos, 'monospace');
return TRUE;
}
-
+
function subscript($match, $state, $pos) {
$this->_nestingTag($match, $state, $pos, 'subscript');
return TRUE;
}
-
+
function superscript($match, $state, $pos) {
$this->_nestingTag($match, $state, $pos, 'superscript');
return TRUE;
}
-
+
function deleted($match, $state, $pos) {
$this->_nestingTag($match, $state, $pos, 'deleted');
return TRUE;
}
-
-
+
+
function footnote($match, $state, $pos) {
$this->_nestingTag($match, $state, $pos, 'footnote');
return TRUE;
}
-
+
function listblock($match, $state, $pos) {
switch ( $state ) {
case DOKU_LEXER_ENTER:
@@ -214,38 +214,38 @@ class Doku_Handler {
}
return TRUE;
}
-
+
function unformatted($match, $state, $pos) {
if ( $state == DOKU_LEXER_UNMATCHED ) {
$this->_addCall('unformatted',array($match), $pos);
}
return TRUE;
}
-
+
function php($match, $state, $pos) {
- global $conf;
+ global $conf;
if ( $state == DOKU_LEXER_UNMATCHED ) {
- if ($conf['phpok']) {
- $this->_addCall('php',array($match), $pos);
- } else {
- $this->_addCall('file',array($match), $pos);
- }
+ if ($conf['phpok']) {
+ $this->_addCall('php',array($match), $pos);
+ } else {
+ $this->_addCall('file',array($match), $pos);
+ }
}
return TRUE;
}
-
+
function html($match, $state, $pos) {
- global $conf;
+ global $conf;
if ( $state == DOKU_LEXER_UNMATCHED ) {
- if($conf['htmlok']){
- $this->_addCall('html',array($match), $pos);
- } else {
- $this->_addCall('file',array($match), $pos);
- }
+ if($conf['htmlok']){
+ $this->_addCall('html',array($match), $pos);
+ } else {
+ $this->_addCall('file',array($match), $pos);
+ }
}
return TRUE;
}
-
+
function preformatted($match, $state, $pos) {
switch ( $state ) {
case DOKU_LEXER_ENTER:
@@ -266,47 +266,47 @@ class Doku_Handler {
$this->_addCall('preformatted_content',array($match), $pos);
break;
}
-
+
return TRUE;
}
-
+
function file($match, $state, $pos) {
if ( $state == DOKU_LEXER_UNMATCHED ) {
$this->_addCall('file',array($match), $pos);
}
return TRUE;
}
-
+
function quote($match, $state, $pos) {
-
+
switch ( $state ) {
-
+
case DOKU_LEXER_ENTER:
$ReWriter = & new Doku_Handler_Quote($this->CallWriter);
$this->CallWriter = & $ReWriter;
$this->_addCall('quote_start',array($match), $pos);
break;
-
+
case DOKU_LEXER_EXIT:
$this->_addCall('quote_end',array(), $pos);
$this->CallWriter->process();
$ReWriter = & $this->CallWriter;
$this->CallWriter = & $ReWriter->CallWriter;
break;
-
+
case DOKU_LEXER_MATCHED:
$this->_addCall('quote_newline',array($match), $pos);
break;
-
+
case DOKU_LEXER_UNMATCHED:
$this->_addCall('cdata',array($match), $pos);
break;
-
+
}
-
+
return TRUE;
}
-
+
function code($match, $state, $pos) {
switch ( $state ) {
case DOKU_LEXER_UNMATCHED:
@@ -327,64 +327,64 @@ class Doku_Handler {
}
return TRUE;
}
-
+
function acronym($match, $state, $pos) {
$this->_addCall('acronym',array($match), $pos);
return TRUE;
}
-
+
function smiley($match, $state, $pos) {
$this->_addCall('smiley',array($match), $pos);
return TRUE;
}
-
+
function wordblock($match, $state, $pos) {
$this->_addCall('wordblock',array($match), $pos);
return TRUE;
}
-
+
function entity($match, $state, $pos) {
$this->_addCall('entity',array($match), $pos);
return TRUE;
}
-
+
function multiplyentity($match, $state, $pos) {
preg_match_all('/\d+/',$match,$matches);
$this->_addCall('multiplyentity',array($matches[0][0],$matches[0][1]), $pos);
return TRUE;
}
-
+
function singlequoteopening($match, $state, $pos) {
$this->_addCall('singlequoteopening',array(), $pos);
return TRUE;
}
-
+
function singlequoteclosing($match, $state, $pos) {
$this->_addCall('singlequoteclosing',array(), $pos);
return TRUE;
}
-
+
function doublequoteopening($match, $state, $pos) {
$this->_addCall('doublequoteopening',array(), $pos);
return TRUE;
}
-
+
function doublequoteclosing($match, $state, $pos) {
$this->_addCall('doublequoteclosing',array(), $pos);
return TRUE;
}
-
+
function camelcaselink($match, $state, $pos) {
$this->_addCall('camelcaselink',array($match), $pos);
return TRUE;
}
-
+
/*
*/
function internallink($match, $state, $pos) {
// Strip the opening and closing markup
$link = preg_replace(array('/^\[\[/','/\]\]$/u'),'',$match);
-
+
// Split title from URL
$link = preg_split('/\|/u',$link,2);
if ( !isset($link[1]) ) {
@@ -444,20 +444,20 @@ class Doku_Handler {
return TRUE;
}
-
+
function filelink($match, $state, $pos) {
$this->_addCall('filelink',array($match, NULL), $pos);
return TRUE;
}
-
+
function windowssharelink($match, $state, $pos) {
$this->_addCall('windowssharelink',array($match, NULL), $pos);
return TRUE;
}
-
+
function media($match, $state, $pos) {
$p = Doku_Handler_Parse_Media($match);
-
+
$this->_addCall(
$p['type'],
array($p['src'], $p['title'], $p['align'], $p['width'],
@@ -472,7 +472,7 @@ class Doku_Handler {
$this->_addCall('rss',array($link),$pos);
return TRUE;
}
-
+
function externallink($match, $state, $pos) {
// Prevent use of multibyte strings in URLs
// See: http://www.boingboing.net/2005/02/06/shmoo_group_exploit_.html
@@ -480,26 +480,26 @@ class Doku_Handler {
/*if ( strlen($match) != utf8_strlen($match) ) {
$this->_addCall('cdata',array($match), $pos);
} else {*/
-
+
$this->_addCall('externallink',array($match, NULL), $pos);
//}
return TRUE;
}
-
+
function emaillink($match, $state, $pos) {
$email = preg_replace(array('/^</','/>$/'),'',$match);
$this->_addCall('emaillink',array($email, NULL), $pos);
return TRUE;
}
-
+
function table($match, $state, $pos) {
switch ( $state ) {
-
+
case DOKU_LEXER_ENTER:
-
+
$ReWriter = & new Doku_Handler_Table($this->CallWriter);
$this->CallWriter = & $ReWriter;
-
+
$this->_addCall('table_start', array(), $pos);
//$this->_addCall('table_row', array(), $pos);
if ( trim($match) == '^' ) {
@@ -508,20 +508,20 @@ class Doku_Handler {
$this->_addCall('tablecell', array(), $pos);
}
break;
-
+
case DOKU_LEXER_EXIT:
$this->_addCall('table_end', array(), $pos);
$this->CallWriter->process();
$ReWriter = & $this->CallWriter;
$this->CallWriter = & $ReWriter->CallWriter;
break;
-
+
case DOKU_LEXER_UNMATCHED:
if ( trim($match) != '' ) {
$this->_addCall('cdata',array($match), $pos);
}
break;
-
+
case DOKU_LEXER_MATCHED:
if ( $match == ' ' ){
$this->_addCall('cdata', array($match), $pos);
@@ -551,15 +551,15 @@ function Doku_Handler_Parse_Media($match) {
// Strip the opening and closing markup
$link = preg_replace(array('/^\{\{/','/\}\}$/u'),'',$match);
-
+
// Split title from URL
$link = preg_split('/\|/u',$link,2);
-
-
+
+
// Check alignment
$ralign = (bool)preg_match('/^ /',$link[0]);
$lalign = (bool)preg_match('/ $/',$link[0]);
-
+
// Logic = what's that ;)...
if ( $lalign & $ralign ) {
$align = 'center';
@@ -570,15 +570,15 @@ function Doku_Handler_Parse_Media($match) {
} else {
$align = NULL;
}
-
+
// The title...
if ( !isset($link[1]) ) {
$link[1] = NULL;
}
-
+
//remove aligning spaces
$link[0] = trim($link[0]);
-
+
//split into src and parameters (using the very last questionmark)
$pos = strrpos($link[0], '?');
if($pos !== false){
@@ -606,14 +606,14 @@ function Doku_Handler_Parse_Media($match) {
}else{
$linking = 'details';
}
-
+
//get caching command
if (preg_match('/(nocache|recache)/i',$param,$cachemode)){
$cache = $cachemode[1];
}else{
$cache = 'cache';
}
-
+
// Check whether this is a local or remote image
if ( preg_match('#^(https?|ftp)#i',$src) ) {
$call = 'externalmedia';
@@ -631,23 +631,23 @@ function Doku_Handler_Parse_Media($match) {
'cache'=>$cache,
'linking'=>$linking,
);
-
+
return $params;
}
//------------------------------------------------------------------------
class Doku_Handler_CallWriter {
-
+
var $Handler;
-
+
function Doku_Handler_CallWriter(& $Handler) {
$this->Handler = & $Handler;
}
-
+
function writeCall($call) {
$this->Handler->calls[] = $call;
}
-
+
function writeCalls($calls) {
$this->Handler->calls = array_merge($this->Handler->calls, $calls);
}
@@ -655,27 +655,27 @@ class Doku_Handler_CallWriter {
//------------------------------------------------------------------------
class Doku_Handler_List {
-
+
var $CallWriter;
-
+
var $calls = array();
var $listCalls = array();
var $listStack = array();
-
+
function Doku_Handler_List(& $CallWriter) {
$this->CallWriter = & $CallWriter;
}
-
+
function writeCall($call) {
$this->calls[] = $call;
}
-
+
// Probably not needed but just in case...
function writeCalls($calls) {
$this->calls = array_merge($this->calls, $calls);
$this->CallWriter->writeCalls($this->calls);
}
-
+
//------------------------------------------------------------------------
function process() {
foreach ( $this->calls as $call ) {
@@ -694,26 +694,26 @@ class Doku_Handler_List {
break;
}
}
-
+
$this->CallWriter->writeCalls($this->listCalls);
}
-
+
//------------------------------------------------------------------------
function listStart($call) {
$depth = $this->interpretSyntax($call[1][0], $listType);
-
+
$this->initialDepth = $depth;
$this->listStack[] = array($listType, $depth);
-
+
$this->listCalls[] = array('list'.$listType.'_open',array(),$call[2]);
$this->listCalls[] = array('listitem_open',array(1),$call[2]);
$this->listCalls[] = array('listcontent_open',array(),$call[2]);
}
-
+
//------------------------------------------------------------------------
function listEnd($call) {
$closeContent = TRUE;
-
+
while ( $list = array_pop($this->listStack) ) {
if ( $closeContent ) {
$this->listCalls[] = array('listcontent_close',array(),$call[2]);
@@ -723,109 +723,109 @@ class Doku_Handler_List {
$this->listCalls[] = array('list'.$list[0].'_close', array(), $call[2]);
}
}
-
+
//------------------------------------------------------------------------
function listOpen($call) {
$depth = $this->interpretSyntax($call[1][0], $listType);
$end = end($this->listStack);
-
+
// Not allowed to be shallower than initialDepth
if ( $depth < $this->initialDepth ) {
$depth = $this->initialDepth;
}
-
+
//------------------------------------------------------------------------
if ( $depth == $end[1] ) {
-
+
// Just another item in the list...
if ( $listType == $end[0] ) {
$this->listCalls[] = array('listcontent_close',array(),$call[2]);
$this->listCalls[] = array('listitem_close',array(),$call[2]);
$this->listCalls[] = array('listitem_open',array($depth-1),$call[2]);
$this->listCalls[] = array('listcontent_open',array(),$call[2]);
-
+
// Switched list type...
} else {
-
+
$this->listCalls[] = array('listcontent_close',array(),$call[2]);
$this->listCalls[] = array('listitem_close',array(),$call[2]);
$this->listCalls[] = array('list'.$end[0].'_close', array(), $call[2]);
$this->listCalls[] = array('list'.$listType.'_open', array(), $call[2]);
$this->listCalls[] = array('listitem_open', array($depth-1), $call[2]);
$this->listCalls[] = array('listcontent_open',array(),$call[2]);
-
+
array_pop($this->listStack);
$this->listStack[] = array($listType, $depth);
}
-
+
//------------------------------------------------------------------------
// Getting deeper...
} else if ( $depth > $end[1] ) {
-
+
$this->listCalls[] = array('listcontent_close',array(),$call[2]);
$this->listCalls[] = array('list'.$listType.'_open', array(), $call[2]);
$this->listCalls[] = array('listitem_open', array($depth-1), $call[2]);
$this->listCalls[] = array('listcontent_open',array(),$call[2]);
-
+
$this->listStack[] = array($listType, $depth);
-
+
//------------------------------------------------------------------------
// Getting shallower ( $depth < $end[1] )
} else {
$this->listCalls[] = array('listcontent_close',array(),$call[2]);
$this->listCalls[] = array('listitem_close',array(),$call[2]);
$this->listCalls[] = array('list'.$end[0].'_close',array(),$call[2]);
-
+
// Throw away the end - done
array_pop($this->listStack);
-
+
while (1) {
$end = end($this->listStack);
-
+
if ( $end[1] <= $depth ) {
-
+
// Normalize depths
$depth = $end[1];
-
+
$this->listCalls[] = array('listitem_close',array(),$call[2]);
-
+
if ( $end[0] == $listType ) {
$this->listCalls[] = array('listitem_open',array($depth-1),$call[2]);
$this->listCalls[] = array('listcontent_open',array(),$call[2]);
-
+
} else {
// Switching list type...
$this->listCalls[] = array('list'.$end[0].'_close', array(), $call[2]);
$this->listCalls[] = array('list'.$listType.'_open', array(), $call[2]);
$this->listCalls[] = array('listitem_open', array($depth-1), $call[2]);
$this->listCalls[] = array('listcontent_open',array(),$call[2]);
-
+
array_pop($this->listStack);
$this->listStack[] = array($listType, $depth);
}
-
+
break;
-
+
// Haven't dropped down far enough yet.... ( $end[1] > $depth )
} else {
-
+
$this->listCalls[] = array('listitem_close',array(),$call[2]);
$this->listCalls[] = array('list'.$end[0].'_close',array(),$call[2]);
-
+
array_pop($this->listStack);
-
+
}
-
+
}
-
+
}
}
-
+
//------------------------------------------------------------------------
function listContent($call) {
$this->listCalls[] = $call;
}
-
+
//------------------------------------------------------------------------
function interpretSyntax($match, & $type) {
if ( substr($match,-1) == '*' ) {
@@ -839,29 +839,29 @@ class Doku_Handler_List {
//------------------------------------------------------------------------
class Doku_Handler_Preformatted {
-
+
var $CallWriter;
-
+
var $calls = array();
var $pos;
var $text ='';
-
-
-
+
+
+
function Doku_Handler_Preformatted(& $CallWriter) {
$this->CallWriter = & $CallWriter;
}
-
+
function writeCall($call) {
$this->calls[] = $call;
}
-
+
// Probably not needed but just in case...
function writeCalls($calls) {
$this->calls = array_merge($this->calls, $calls);
$this->CallWriter->writeCalls($this->calls);
}
-
+
function process() {
foreach ( $this->calls as $call ) {
switch ($call[0]) {
@@ -884,42 +884,42 @@ class Doku_Handler_Preformatted {
//------------------------------------------------------------------------
class Doku_Handler_Quote {
-
+
var $CallWriter;
-
+
var $calls = array();
-
+
var $quoteCalls = array();
-
+
function Doku_Handler_Quote(& $CallWriter) {
$this->CallWriter = & $CallWriter;
}
-
+
function writeCall($call) {
$this->calls[] = $call;
}
-
+
// Probably not needed but just in case...
function writeCalls($calls) {
$this->calls = array_merge($this->calls, $calls);
$this->CallWriter->writeCalls($this->calls);
}
-
+
function process() {
-
+
$quoteDepth = 1;
-
+
foreach ( $this->calls as $call ) {
switch ($call[0]) {
-
+
case 'quote_start':
-
+
$this->quoteCalls[] = array('quote_open',array(),$call[2]);
-
+
case 'quote_newline':
-
+
$quoteLength = $this->getDepth($call[1][0]);
-
+
if ( $quoteLength > $quoteDepth ) {
$quoteDiff = $quoteLength - $quoteDepth;
for ( $i = 1; $i <= $quoteDiff; $i++ ) {
@@ -931,32 +931,32 @@ class Doku_Handler_Quote {
$this->quoteCalls[] = array('quote_close',array(),$call[2]);
}
}
-
+
$quoteDepth = $quoteLength;
-
+
break;
-
+
case 'quote_end':
-
+
if ( $quoteDepth > 1 ) {
$quoteDiff = $quoteDepth - 1;
for ( $i = 1; $i <= $quoteDiff; $i++ ) {
$this->quoteCalls[] = array('quote_close',array(),$call[2]);
}
}
-
+
$this->quoteCalls[] = array('quote_close',array(),$call[2]);
-
+
$this->CallWriter->writeCalls($this->quoteCalls);
break;
-
+
default:
$this->quoteCalls[] = $call;
break;
}
}
}
-
+
function getDepth($marker) {
preg_match('/>{1,}/', $marker, $matches);
$quoteLength = strlen($matches[0]);
@@ -966,9 +966,9 @@ class Doku_Handler_Quote {
//------------------------------------------------------------------------
class Doku_Handler_Table {
-
+
var $CallWriter;
-
+
var $calls = array();
var $tableCalls = array();
var $maxCols = 0;
@@ -976,21 +976,21 @@ class Doku_Handler_Table {
var $currentCols = 0;
var $firstCell = FALSE;
var $lastCellType = 'tablecell';
-
+
function Doku_Handler_Table(& $CallWriter) {
$this->CallWriter = & $CallWriter;
}
-
+
function writeCall($call) {
$this->calls[] = $call;
}
-
+
// Probably not needed but just in case...
function writeCalls($calls) {
$this->calls = array_merge($this->calls, $calls);
$this->CallWriter->writeCalls($this->calls);
}
-
+
//------------------------------------------------------------------------
function process() {
foreach ( $this->calls as $call ) {
@@ -1017,18 +1017,18 @@ class Doku_Handler_Table {
}
$this->CallWriter->writeCalls($this->tableCalls);
}
-
+
function tableStart($call) {
$this->tableCalls[] = array('table_open',array(),$call[2]);
$this->tableCalls[] = array('tablerow_open',array(),$call[2]);
$this->firstCell = TRUE;
}
-
+
function tableEnd($call) {
$this->tableCalls[] = array('table_close',array(),$call[2]);
$this->finalizeTable();
}
-
+
function tableRowOpen($call) {
$this->tableCalls[] = $call;
$this->currentCols = 0;
@@ -1036,16 +1036,16 @@ class Doku_Handler_Table {
$this->lastCellType = 'tablecell';
$this->maxRows++;
}
-
+
function tableRowClose($call) {
// Strip off final cell opening and anything after it
while ( $discard = array_pop($this->tableCalls ) ) {
-
+
if ( $discard[0] == 'tablecell_open' || $discard[0] == 'tableheader_open') {
-
+
// Its a spanning element - put it back and close it
if ( $discard[1][0] > 1 ) {
-
+
$this->tableCalls[] = $discard;
if ( strstr($discard[0],'cell') ) {
$name = 'tablecell';
@@ -1054,50 +1054,50 @@ class Doku_Handler_Table {
}
$this->tableCalls[] = array($name.'_close',array(),$call[2]);
}
-
+
break;
}
}
$this->tableCalls[] = $call;
-
+
if ( $this->currentCols > $this->maxCols ) {
$this->maxCols = $this->currentCols;
}
}
-
+
function tableCell($call) {
if ( !$this->firstCell ) {
-
+
// Increase the span
$lastCall = end($this->tableCalls);
-
+
// A cell call which follows an open cell means an empty cell so span
if ( $lastCall[0] == 'tablecell_open' || $lastCall[0] == 'tableheader_open' ) {
$this->tableCalls[] = array('colspan',array(),$call[2]);
-
+
}
-
+
$this->tableCalls[] = array($this->lastCellType.'_close',array(),$call[2]);
$this->tableCalls[] = array($call[0].'_open',array(1,NULL),$call[2]);
$this->lastCellType = $call[0];
-
+
} else {
-
+
$this->tableCalls[] = array($call[0].'_open',array(1,NULL),$call[2]);
$this->lastCellType = $call[0];
$this->firstCell = FALSE;
-
+
}
-
+
$this->currentCols++;
}
-
+
function tableDefault($call) {
$this->tableCalls[] = $call;
}
-
+
function finalizeTable() {
-
+
// Add the max cols and rows to the table opening
if ( $this->tableCalls[0][0] == 'table_open' ) {
// Adjust to num cols not num col delimeters
@@ -1106,30 +1106,30 @@ class Doku_Handler_Table {
} else {
trigger_error('First element in table call list is not table_open');
}
-
+
$lastRow = 0;
$lastCell = 0;
$toDelete = array();
-
+
// Look for the colspan elements and increment the colspan on the
// previous non-empty opening cell. Once done, delete all the cells
// that contain colspans
foreach ( $this->tableCalls as $key => $call ) {
-
+
if ( $call[0] == 'tablerow_open' ) {
-
+
$lastRow = $key;
-
+
} else if ( $call[0] == 'tablecell_open' || $call[0] == 'tableheader_open' ) {
-
+
$lastCell = $key;
-
+
} else if ( $call[0] == 'table_align' ) {
-
+
// If the previous element was a cell open, align right
if ( $this->tableCalls[$key-1][0] == 'tablecell_open' || $this->tableCalls[$key-1][0] == 'tableheader_open' ) {
$this->tableCalls[$key-1][1][1] = 'right';
-
+
// If the next element if the close of an element, align either center or left
} else if ( $this->tableCalls[$key+1][0] == 'tablecell_close' || $this->tableCalls[$key+1][0] == 'tableheader_close' ) {
if ( $this->tableCalls[$lastCell][1][1] == 'right' ) {
@@ -1137,29 +1137,29 @@ class Doku_Handler_Table {
} else {
$this->tableCalls[$lastCell][1][1] = 'left';
}
-
+
}
-
+
// Now convert the whitespace back to cdata
$this->tableCalls[$key][0] = 'cdata';
} else if ( $call[0] == 'colspan' ) {
-
+
$this->tableCalls[$key-1][1][0] = FALSE;
-
+
for($i = $key-2; $i > $lastRow; $i--) {
-
+
if ( $this->tableCalls[$i][0] == 'tablecell_open' || $this->tableCalls[$i][0] == 'tableheader_open' ) {
-
+
if ( FALSE !== $this->tableCalls[$i][1][0] ) {
$this->tableCalls[$i][1][0]++;
break;
}
-
-
+
+
}
}
-
+
$toDelete[] = $key-1;
$toDelete[] = $key;
$toDelete[] = $key+1;
@@ -1191,36 +1191,36 @@ class Doku_Handler_Table {
//------------------------------------------------------------------------
class Doku_Handler_Section {
-
+
function process($calls) {
-
+
$sectionCalls = array();
$inSection = FALSE;
-
+
foreach ( $calls as $call ) {
-
+
if ( $call[0] == 'header' ) {
-
+
if ( $inSection ) {
$sectionCalls[] = array('section_close',array(), $call[2]);
}
-
+
$sectionCalls[] = $call;
$sectionCalls[] = array('section_open',array($call[1][1]), $call[2]);
$inSection = TRUE;
-
+
} else {
$sectionCalls[] = $call;
}
}
-
+
if ( $inSection ) {
$sectionCalls[] = array('section_close',array(), $call[2]);
}
-
+
return $sectionCalls;
}
-
+
}
/**
@@ -1229,15 +1229,15 @@ class Doku_Handler_Section {
* @author Harry Fuecks <hfuecks@gmail.com>
*/
class Doku_Handler_Block {
-
+
var $calls = array();
-
+
var $blockStack = array();
-
+
var $inParagraph = FALSE;
var $atStart = TRUE;
var $skipEolKey = -1;
-
+
// Blocks these should not be inside paragraphs
var $blockOpen = array(
'header',
@@ -1247,7 +1247,7 @@ class Doku_Handler_Block {
'section_open', // Needed to prevent p_open between header and section_open
'code','file','hr','preformatted',
);
-
+
var $blockClose = array(
'header',
'listu_close','listo_close','listitem_close','listcontent_close',
@@ -1256,16 +1256,16 @@ class Doku_Handler_Block {
'section_close', // Needed to prevent p_close after section_close
'code','file','hr','preformatted',
);
-
+
// Stacks can contain paragraphs
var $stackOpen = array(
'footnote_open','section_open',
);
-
+
var $stackClose = array(
'footnote_close','section_close',
);
-
+
/**
* Constructor. Adds loaded syntax plugins to the block and stack
@@ -1292,7 +1292,7 @@ class Doku_Handler_Block {
}
}
}
-
+
/**
* Close a paragraph if needed
*
@@ -1313,7 +1313,7 @@ class Doku_Handler_Block {
break;
}
}
-
+
if(trim($content)==''){
//remove the whole paragraph
array_splice($this->calls,$i);
@@ -1321,7 +1321,7 @@ class Doku_Handler_Block {
$this->calls[] = array('p_close',array(), $pos);
}
}
-
+
/**
* Processes the whole instruction stack to open and close paragraphs
*
@@ -1333,7 +1333,7 @@ class Doku_Handler_Block {
foreach ( $calls as $key => $call ) {
$cname = $call[0];
if($cname == 'plugin') $cname='plugin_'.$call[1][0];
-
+
// Process blocks which are stack like... (contain linefeeds)
if ( in_array($cname,$this->stackOpen ) ) {
/*
@@ -1344,7 +1344,7 @@ class Doku_Handler_Block {
}
*/
$this->calls[] = $call;
-
+
// Hack - footnotes shouldn't immediately contain a p_open
if ( $cname != 'footnote_open' ) {
$this->addToStack();
@@ -1353,9 +1353,9 @@ class Doku_Handler_Block {
}
continue;
}
-
+
if ( in_array($cname,$this->stackClose ) ) {
-
+
if ( $this->inParagraph ) {
//$this->calls[] = array('p_close',array(), $call[2]);
$this->closeParagraph($call[2]);
@@ -1364,11 +1364,11 @@ class Doku_Handler_Block {
$this->removeFromStack();
continue;
}
-
+
if ( !$this->atStart ) {
-
+
if ( $cname == 'eol' ) {
-
+
/* XXX
if ( $this->inParagraph ) {
@@ -1391,7 +1391,7 @@ class Doku_Handler_Block {
$this->calls[] = array('p_open',array(), $call[2]);
$this->inParagraph = TRUE;
-
+
# Mark the next instruction for skipping
$this->skipEolKey = $key+1;
@@ -1401,9 +1401,9 @@ class Doku_Handler_Block {
}
}
-
+
} else {
-
+
$storeCall = TRUE;
if ( $this->inParagraph && in_array($cname, $this->blockOpen) ) {
//$this->calls[] = array('p_close',array(), $call[2]);
@@ -1412,7 +1412,7 @@ class Doku_Handler_Block {
$this->calls[] = $call;
$storeCall = FALSE;
}
-
+
if ( in_array($cname, $this->blockClose) ) {
if ( $this->inParagraph ) {
//$this->calls[] = array('p_close',array(), $call[2]);
@@ -1423,7 +1423,7 @@ class Doku_Handler_Block {
$this->calls[] = $call;
$storeCall = FALSE;
}
-
+
// This really sucks and suggests this whole class sucks but...
if ( isset($calls[$key+1])
&&
@@ -1431,21 +1431,21 @@ class Doku_Handler_Block {
&&
!in_array($calls[$key+1][0], $this->blockClose)
) {
-
+
$this->calls[] = array('p_open',array(), $call[2]);
$this->inParagraph = TRUE;
}
}
-
+
if ( $storeCall ) {
$this->calls[] = $call;
}
-
+
}
-
-
+
+
} else {
-
+
// Unless there's already a block at the start, start a paragraph
if ( !in_array($cname,$this->blockOpen) ) {
$this->calls[] = array('p_open',array(), $call[2]);
@@ -1458,11 +1458,11 @@ class Doku_Handler_Block {
$this->calls[] = $call;
$this->atStart = FALSE;
}
-
+
}
-
+
}
-
+
if ( $this->inParagraph ) {
if ( $cname == 'p_open' ) {
// Ditch the last call
@@ -1477,16 +1477,16 @@ class Doku_Handler_Block {
$this->calls[] = $last_call;
}
}
-
+
return $this->calls;
}
-
+
function addToStack($newStart = TRUE) {
$this->blockStack[] = array($this->atStart, $this->inParagraph);
$this->atStart = $newStart;
$this->inParagraph = FALSE;
}
-
+
function removeFromStack() {
$state = array_pop($this->blockStack);
$this->atStart = $state[0];
@@ -1504,30 +1504,30 @@ define('DOKU_TOCBRANCH_CLOSE',6);
define('DOKU_TOC_CLOSE',7);
class Doku_Handler_Toc {
-
+
var $calls = array();
var $tocStack = array();
var $toc = array();
var $numHeaders = 0;
-
+
function process($calls) {
#FIXME can this be done better?
-
+
global $conf;
-
+
if ( isset($conf['toptoclevel']) ) {
// retrieve vars once to save time
$toplevel = $conf['toptoclevel'];
} else {
$toplevel = 0;
}
-
+
if ( isset($conf['maxtoclevel']) ) {
$maxlevel = $conf['maxtoclevel'];
} else {
$maxlevel = 0;
}
-
+
foreach ( $calls as $call ) {
if ( !isset($call[1][1]) ) {
$this->calls[] = $call;
@@ -1540,42 +1540,42 @@ class Doku_Handler_Toc {
}
$this->calls[] = $call;
}
-
+
// Complete the table of contents then prepend to the calls
$this->finalizeToc($call);
return $this->calls;
}
-
+
function addToToc($depth, $call) {
-
+
// If it's the opening item...
if ( count ( $this->toc) == 0 ) {
-
+
$this->addTocCall($call, DOKU_TOC_OPEN);
-
+
for ( $i = 1; $i <= $depth; $i++ ) {
-
+
$this->addTocCall(array($call[0],array($call[1][0],$i),$call[2]), DOKU_TOCBRANCH_OPEN);
-
+
if ( $i != $depth ) {
$this->addTocCall(array($call[0],array($call[1][0], $i, '', TRUE),$call[2]), DOKU_TOCITEM_OPEN);
} else {
$this->addTocCall(array($call[0],array($call[1][0], $i),$call[2]), DOKU_TOCITEM_OPEN);
$this->addTocCall(array($call[0],array($call[1][0], $i),$call[2]), DOKU_TOC_ELEMENT);
}
-
+
$this->tocStack[] = $i;
-
+
}
return;
}
-
+
$currentDepth = end($this->tocStack);
$initialDepth = $currentDepth;
-
+
// Create new branches as needed
if ( $depth > $currentDepth ) {
-
+
for ($i = $currentDepth+1; $i <= $depth; $i++ ) {
$this->addTocCall(array($call[0],array($call[1][0],$i),$call[2]), DOKU_TOCBRANCH_OPEN);
// It's just a filler
@@ -1586,11 +1586,11 @@ class Doku_Handler_Toc {
}
$this->tocStack[] = $i;
}
-
+
$currentDepth = $i-1;
-
+
}
-
+
// Going down
if ( $depth < $currentDepth ) {
for ( $i = $currentDepth; $i >= $depth; $i-- ) {
@@ -1606,27 +1606,27 @@ class Doku_Handler_Toc {
}
}
}
-
+
if ( $depth == $initialDepth ) {
$this->addTocCall($call, DOKU_TOCITEM_CLOSE);
$this->addTocCall($call, DOKU_TOCITEM_OPEN);
}
-
+
$this->addTocCall($call, DOKU_TOC_ELEMENT);
-
-
+
+
}
-
+
function addTocCall($call, $type) {
switch ( $type ) {
case DOKU_TOC_OPEN:
$this->toc[] = array('toc_open',array(),$call[2]);
break;
-
+
case DOKU_TOCBRANCH_OPEN:
$this->toc[] = array('tocbranch_open',array($call[1][1]),$call[2]);
break;
-
+
case DOKU_TOCITEM_OPEN:
if ( isset( $call[1][3] ) ) {
$this->toc[] = array('tocitem_open',array($call[1][1], TRUE),$call[2]);
@@ -1634,19 +1634,19 @@ class Doku_Handler_Toc {
$this->toc[] = array('tocitem_open',array($call[1][1]),$call[2]);
}
break;
-
+
case DOKU_TOC_ELEMENT:
$this->toc[] = array('tocelement',array($call[1][1],$call[1][0]),$call[2]);
break;
-
+
case DOKU_TOCITEM_CLOSE:
$this->toc[] = array('tocitem_close',array($call[1][1]),$call[2]);
break;
-
+
case DOKU_TOCBRANCH_CLOSE:
$this->toc[] = array('tocbranch_close',array($call[1][1]),$call[2]);
break;
-
+
case DOKU_TOC_CLOSE:
if ( count($this->toc) > 0 ) {
$this->toc[] = array('toc_close',array(),$call[2]);
@@ -1654,7 +1654,7 @@ class Doku_Handler_Toc {
break;
}
}
-
+
function finalizeToc($call) {
global $conf;
if ( isset($conf['maxtoclevel']) && $this->numHeaders < $conf['maxtoclevel'] ) {
@@ -1669,7 +1669,7 @@ class Doku_Handler_Toc {
$this->addTocCall($call, DOKU_TOC_CLOSE);
$this->calls = array_merge($this->toc, $this->calls);
}
-
+
}