diff options
-rw-r--r-- | _test/cases/inc/parser/parser_eol.test.php | 18 | ||||
-rw-r--r-- | _test/cases/inc/parser/parser_footnote.test.php | 23 | ||||
-rw-r--r-- | _test/cases/inc/parser/parser_headers.test.php | 6 | ||||
-rw-r--r-- | _test/cases/inc/parser/parser_lists.test.php | 3 | ||||
-rw-r--r-- | _test/cases/inc/parser/parser_quote.test.php | 3 | ||||
-rw-r--r-- | _test/cases/inc/parser/parser_table.test.php | 6 | ||||
-rw-r--r-- | inc/parser/handler.php | 32 |
7 files changed, 43 insertions, 48 deletions
diff --git a/_test/cases/inc/parser/parser_eol.test.php b/_test/cases/inc/parser/parser_eol.test.php index dcfcb1e60..1beeef952 100644 --- a/_test/cases/inc/parser/parser_eol.test.php +++ b/_test/cases/inc/parser/parser_eol.test.php @@ -13,10 +13,7 @@ class TestOfDoku_Parser_Eol extends TestOfDoku_Parser { $calls = array ( array('document_start',array()), array('p_open',array()), - array('cdata',array("Foo")), - array('cdata',array(DOKU_PARSER_EOL)), - array('cdata',array("Bar")), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array("Foo".DOKU_PARSER_EOL."Bar".DOKU_PARSER_EOL)), array('p_close',array()), array('document_end',array()), ); @@ -32,10 +29,7 @@ class TestOfDoku_Parser_Eol extends TestOfDoku_Parser { array('cdata',array("Foo")), array('p_close',array()), array('p_open',array()), - array('cdata',array("bar")), - array('cdata',array(DOKU_PARSER_EOL)), - array('cdata',array("Foo")), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array("bar".DOKU_PARSER_EOL."Foo".DOKU_PARSER_EOL)), array('p_close',array()), array('document_end',array()), ); @@ -48,10 +42,7 @@ class TestOfDoku_Parser_Eol extends TestOfDoku_Parser { $calls = array ( array('document_start',array()), array('p_open',array()), - array('cdata',array("Foo")), - array('cdata',array(DOKU_PARSER_EOL)), - array('cdata',array("Bar")), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array("Foo".DOKU_PARSER_EOL."Bar".DOKU_PARSER_EOL)), array('p_close',array()), array('document_end',array()), ); @@ -85,8 +76,7 @@ class TestOfDoku_Parser_Eol extends TestOfDoku_Parser { array('linebreak',array()), array('p_close',array()), array('p_open',array()), - array('cdata',array("Bar")), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array("Bar".DOKU_PARSER_EOL)), array('p_close',array()), array('document_end',array()), ); diff --git a/_test/cases/inc/parser/parser_footnote.test.php b/_test/cases/inc/parser/parser_footnote.test.php index dc729e861..6f0789106 100644 --- a/_test/cases/inc/parser/parser_footnote.test.php +++ b/_test/cases/inc/parser/parser_footnote.test.php @@ -54,8 +54,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser { array('cdata',array(" testing\ntesting ")), array('footnote_close',array()), ))), - array('cdata',array(' Bar')), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array(' Bar'.DOKU_PARSER_EOL)), array('p_close',array()), array('document_end',array()), ); @@ -86,18 +85,13 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser { $calls = array ( array('document_start',array()), array('p_open',array()), - array('cdata',array('Foo ')), - array('cdata',array(DOKU_PARSER_EOL)), - array('cdata',array('X')), + array('cdata',array('Foo '.DOKU_PARSER_EOL.'X')), array('nest', array ( array ( array('footnote_open',array()), array('cdata',array(" test\ning ")), array('footnote_close',array()), ))), - array('cdata',array('Y')), - array('cdata',array(DOKU_PARSER_EOL)), - array('cdata',array(' Bar')), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array('Y'.DOKU_PARSER_EOL.' Bar'.DOKU_PARSER_EOL)), array('p_close',array()), array('document_end',array()), ); @@ -205,8 +199,7 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser { array('cdata',array(' ')), array('footnote_close',array()), ))), - array('cdata',array(' Bar')), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array(' Bar'.DOKU_PARSER_EOL)), array('p_close',array()), array('document_end',array()), ); @@ -384,16 +377,12 @@ class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser { array('footnote_open',array()), array('cdata',array(' a ')), array('strong_open',array()), - array('cdata',array(' ')), - array('cdata',array('((')), - array('cdata',array(' b ')), + array('cdata',array(' (( b ')), array('footnote_close',array()), ))), array('cdata',array(" ")), array('strong_close',array()), - array('cdata',array(" c ")), - array('cdata',array("))")), - array('cdata',array("\n")), + array('cdata',array(" c ))\n")), array('p_close',array()), array('document_end',array()), ); diff --git a/_test/cases/inc/parser/parser_headers.test.php b/_test/cases/inc/parser/parser_headers.test.php index 9162d0fdc..8e6517123 100644 --- a/_test/cases/inc/parser/parser_headers.test.php +++ b/_test/cases/inc/parser/parser_headers.test.php @@ -259,15 +259,13 @@ class TestOfDoku_Parser_Headers extends TestOfDoku_Parser { $calls = array ( array('document_start',array()), array('p_open',array()), - array('cdata',array('abc ')), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array('abc '.DOKU_PARSER_EOL)), array('p_close',array()), array('section_edit',array(-1,5,1,'')), array('header',array('Header',1, 6)), array('section_open',array(1)), array('p_open',array()), - array('cdata',array(' def')), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array(' def'.DOKU_PARSER_EOL)), array('p_close',array()), array('section_close',array()), array('section_edit',array(6,0,1,'Header')), diff --git a/_test/cases/inc/parser/parser_lists.test.php b/_test/cases/inc/parser/parser_lists.test.php index 4fe3f6f34..751e7e1af 100644 --- a/_test/cases/inc/parser/parser_lists.test.php +++ b/_test/cases/inc/parser/parser_lists.test.php @@ -211,8 +211,7 @@ Bar'); array('listitem_close',array()), array('listu_close',array()), array('p_open',array()), - array('cdata',array("Bar")), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array("Bar".DOKU_PARSER_EOL)), array('p_close',array()), array('document_end',array()), ); diff --git a/_test/cases/inc/parser/parser_quote.test.php b/_test/cases/inc/parser/parser_quote.test.php index e216604fc..5d5a7e2a5 100644 --- a/_test/cases/inc/parser/parser_quote.test.php +++ b/_test/cases/inc/parser/parser_quote.test.php @@ -86,8 +86,7 @@ class TestOfDoku_Parser_Quote extends TestOfDoku_Parser { array('quote_close',array()), array('quote_close',array()), array('p_open',array()), - array('cdata',array("klm")), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array("klm".DOKU_PARSER_EOL)), array('p_close',array()), array('document_end',array()), diff --git a/_test/cases/inc/parser/parser_table.test.php b/_test/cases/inc/parser/parser_table.test.php index 155909b0c..9ec7dab4f 100644 --- a/_test/cases/inc/parser/parser_table.test.php +++ b/_test/cases/inc/parser/parser_table.test.php @@ -278,8 +278,7 @@ def'); $calls = array ( array('document_start',array()), array('p_open',array()), - array('cdata',array(DOKU_PARSER_EOL)), - array('cdata',array("abc")), + array('cdata',array(DOKU_PARSER_EOL."abc")), array('p_close',array()), array('table_open',array(3,2)), array('tablerow_open',array()), @@ -306,8 +305,7 @@ def'); array('tablerow_close',array()), array('table_close',array()), array('p_open',array()), - array('cdata',array('def')), - array('cdata',array(DOKU_PARSER_EOL)), + array('cdata',array('def'.DOKU_PARSER_EOL)), array('p_close',array()), array('document_end',array()), ); diff --git a/inc/parser/handler.php b/inc/parser/handler.php index 9011554bc..61c143bae 100644 --- a/inc/parser/handler.php +++ b/inc/parser/handler.php @@ -789,9 +789,24 @@ class Doku_Handler_Nest { } function process() { + // merge consecutive cdata + $unmerged_calls = $this->calls; + $this->calls = array(); + + foreach ($unmerged_calls as $call) $this->addCall($call); + $first_call = reset($this->calls); $this->CallWriter->writeCall(array("nest", array($this->calls), $first_call[2])); } + + function addCall($call) { + $key = count($this->calls); + if ($key and ($call[0] == 'cdata') and ($this->calls[$key-1][0] == 'cdata')) { + $this->calls[$key-1][1][0] .= $call[1][0]; + } else { + $this->calls[] = $call; + } + } } class Doku_Handler_List { @@ -1060,7 +1075,6 @@ class Doku_Handler_Quote { // Probably not needed but just in case... function writeCalls($calls) { $this->calls = array_merge($this->calls, $calls); -# $this->CallWriter->writeCalls($this->calls); } function finalise() { @@ -1156,7 +1170,6 @@ class Doku_Handler_Table { // Probably not needed but just in case... function writeCalls($calls) { $this->calls = array_merge($this->calls, $calls); -# $this->CallWriter->writeCalls($this->calls); } function finalise() { @@ -1577,7 +1590,7 @@ class Doku_Handler_Block { }else{ //if this is just a single eol make a space from it - $this->calls[] = array('cdata',array(DOKU_PARSER_EOL), $call[2]); + $this->addCall(array('cdata',array(DOKU_PARSER_EOL), $call[2])); } } @@ -1623,7 +1636,7 @@ class Doku_Handler_Block { } if ( $storeCall ) { - $this->calls[] = $call; + $this->addCall($call); } } @@ -1640,7 +1653,7 @@ class Doku_Handler_Block { $this->atStart = false; $this->inParagraph = true; } else { - $this->calls[] = $call; + $this->addCall($call); $this->atStart = false; } @@ -1677,6 +1690,15 @@ class Doku_Handler_Block { $this->atStart = $state[0]; $this->inParagraph = $state[1]; } + + function addCall($call) { + $key = count($this->calls); + if ($key and ($call[0] == 'cdata') and ($this->calls[$key-1][0] == 'cdata')) { + $this->calls[$key-1][1][0] .= $call[1][0]; + } else { + $this->calls[] = $call; + } + } } //Setup VIM: ex: et ts=4 enc=utf-8 : |