summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_test/cases/inc/parser/parser_replacements.test.php66
-rw-r--r--inc/parser/parser.php2
2 files changed, 56 insertions, 12 deletions
diff --git a/_test/cases/inc/parser/parser_replacements.test.php b/_test/cases/inc/parser/parser_replacements.test.php
index efd20f397..1534f9ce8 100644
--- a/_test/cases/inc/parser/parser_replacements.test.php
+++ b/_test/cases/inc/parser/parser_replacements.test.php
@@ -59,18 +59,32 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
$this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
}
- //
- function testSingleSmiley() {
+ function testSingleSmileyFail() {
$this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)')));
$this->P->parse('abc:-)xyz');
$calls = array (
array('document_start',array()),
array('p_open',array()),
- array('cdata',array("\n".'abc')),
+ array('cdata',array("\nabc:-)xyz\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testSingleSmiley() {
+ $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)')));
+ $this->P->parse('abc :-) xyz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
array('smiley',array(':-)')),
- array('cdata',array('xyz'."\n")),
+ array('cdata',array(' xyz'."\n")),
array('p_close',array()),
array('document_end',array()),
);
@@ -78,37 +92,67 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
$this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
}
- function testMultipleSmileys() {
+ function testMultipleSmileysFail() {
$this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)','^_^')));
$this->P->parse('abc:-)x^_^yz');
$calls = array (
array('document_start',array()),
array('p_open',array()),
- array('cdata',array("\n".'abc')),
+ array('cdata',array("\nabc:-)x^_^yz\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testMultipleSmileys() {
+ $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)','^_^')));
+ $this->P->parse('abc :-) x ^_^ yz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
array('smiley',array(':-)')),
- array('cdata',array('x')),
+ array('cdata',array(' x ')),
array('smiley',array('^_^')),
- array('cdata',array('yz'."\n")),
+ array('cdata',array(' yz'."\n")),
array('p_close',array()),
array('document_end',array()),
);
$this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testBackslashSmileyFail() {
+ // This smiley is really :-\\ but escaping makes like interesting
+ $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-\\\\')));
+ $this->P->parse('abc:-\\\xyz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc".':-\\\\'."xyz\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
}
function testBackslashSmiley() {
// This smiley is really :-\\ but escaping makes like interesting
$this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-\\\\')));
- $this->P->parse('abc:-\\\xyz');
+ $this->P->parse('abc :-\\\ xyz');
$calls = array (
array('document_start',array()),
array('p_open',array()),
- array('cdata',array("\n".'abc')),
+ array('cdata',array("\n".'abc ')),
array('smiley',array(':-\\\\')),
- array('cdata',array('xyz'."\n")),
+ array('cdata',array(' xyz'."\n")),
array('p_close',array()),
array('document_end',array()),
);
diff --git a/inc/parser/parser.php b/inc/parser/parser.php
index 37da712cc..58c0c4623 100644
--- a/inc/parser/parser.php
+++ b/inc/parser/parser.php
@@ -652,7 +652,7 @@ class Doku_Parser_Mode_smiley extends Doku_Parser_Mode {
$sep = '';
foreach ( $this->smileys as $smiley ) {
- $this->pattern .= $sep.Doku_Lexer_Escape($smiley);
+ $this->pattern .= $sep.'(?<=\W)'.Doku_Lexer_Escape($smiley).'(?=\W)';
$sep = '|';
}
}