Skip to content
Snippets Groups Projects
Commit 92655603 authored by Andreas Gohr's avatar Andreas Gohr
Browse files

recognize smileys with proper boundaries only FS#1489

darcs-hash:20081011184717-7ad00-0f910f4d061e00ccfdf722a3f971656da1b7979b.gz
parent e8f8d645
No related branches found
No related tags found
No related merge requests found
...@@ -59,18 +59,32 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser { ...@@ -59,18 +59,32 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
$this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); $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->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)')));
$this->P->parse('abc:-)xyz'); $this->P->parse('abc:-)xyz');
$calls = array ( $calls = array (
array('document_start',array()), array('document_start',array()),
array('p_open',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('smiley',array(':-)')),
array('cdata',array('xyz'."\n")), array('cdata',array(' xyz'."\n")),
array('p_close',array()), array('p_close',array()),
array('document_end',array()), array('document_end',array()),
); );
...@@ -78,37 +92,67 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser { ...@@ -78,37 +92,67 @@ class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
$this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); $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->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)','^_^')));
$this->P->parse('abc:-)x^_^yz'); $this->P->parse('abc:-)x^_^yz');
$calls = array ( $calls = array (
array('document_start',array()), array('document_start',array()),
array('p_open',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('smiley',array(':-)')),
array('cdata',array('x')), array('cdata',array(' x ')),
array('smiley',array('^_^')), array('smiley',array('^_^')),
array('cdata',array('yz'."\n")), array('cdata',array(' yz'."\n")),
array('p_close',array()), array('p_close',array()),
array('document_end',array()), array('document_end',array()),
); );
$this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); $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() { function testBackslashSmiley() {
// This smiley is really :-\\ but escaping makes like interesting // This smiley is really :-\\ but escaping makes like interesting
$this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-\\\\'))); $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-\\\\')));
$this->P->parse('abc:-\\\xyz'); $this->P->parse('abc :-\\\ xyz');
$calls = array ( $calls = array (
array('document_start',array()), array('document_start',array()),
array('p_open',array()), array('p_open',array()),
array('cdata',array("\n".'abc')), array('cdata',array("\n".'abc ')),
array('smiley',array(':-\\\\')), array('smiley',array(':-\\\\')),
array('cdata',array('xyz'."\n")), array('cdata',array(' xyz'."\n")),
array('p_close',array()), array('p_close',array()),
array('document_end',array()), array('document_end',array()),
); );
......
...@@ -652,7 +652,7 @@ class Doku_Parser_Mode_smiley extends Doku_Parser_Mode { ...@@ -652,7 +652,7 @@ class Doku_Parser_Mode_smiley extends Doku_Parser_Mode {
$sep = ''; $sep = '';
foreach ( $this->smileys as $smiley ) { foreach ( $this->smileys as $smiley ) {
$this->pattern .= $sep.Doku_Lexer_Escape($smiley); $this->pattern .= $sep.'(?<=\W)'.Doku_Lexer_Escape($smiley).'(?=\W)';
$sep = '|'; $sep = '|';
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment