From 92655603877e0743516b2218cf67cb011afcc7b5 Mon Sep 17 00:00:00 2001 From: Andreas Gohr <andi@splitbrain.org> Date: Sat, 11 Oct 2008 20:47:17 +0200 Subject: [PATCH] recognize smileys with proper boundaries only FS#1489 darcs-hash:20081011184717-7ad00-0f910f4d061e00ccfdf722a3f971656da1b7979b.gz --- .../inc/parser/parser_replacements.test.php | 66 +++++++++++++++---- inc/parser/parser.php | 2 +- 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 = '|'; } } -- GitLab