summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_test/cases/inc/parser/parser_eol.test.php18
-rw-r--r--_test/cases/inc/parser/parser_footnote.test.php23
-rw-r--r--_test/cases/inc/parser/parser_headers.test.php6
-rw-r--r--_test/cases/inc/parser/parser_lists.test.php3
-rw-r--r--_test/cases/inc/parser/parser_quote.test.php3
-rw-r--r--_test/cases/inc/parser/parser_table.test.php6
-rw-r--r--inc/parser/handler.php32
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 :