diff --git a/ChangeLog b/ChangeLog index 3ea3f2c69..127549481 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,6 +21,7 @@ Bug fixes: * Fixed broken CSV exports * Fixed identical background color for LetterAvatar on 32bits platforms (Hash greater than PHP_MAX_INT) +* Fixed lexer issue with non word characters Version 1.0.30 -------------- diff --git a/app/Core/Filter/Lexer.php b/app/Core/Filter/Lexer.php index fa5b8d2d6..3ff57641a 100644 --- a/app/Core/Filter/Lexer.php +++ b/app/Core/Filter/Lexer.php @@ -30,7 +30,7 @@ class Lexer '/^([<=>]{1,2}\w+)/u' => 'T_STRING', '/^([<=>]{1,2}".+")/' => 'T_STRING', '/^("(.+)")/' => 'T_STRING', - '/^(\w+)/u' => 'T_STRING', + '/^(\S+)/u' => 'T_STRING', '/^(#\d+)/' => 'T_STRING', ); diff --git a/tests/units/Core/Filter/LexerTest.php b/tests/units/Core/Filter/LexerTest.php index b777531df..d57a7953a 100644 --- a/tests/units/Core/Filter/LexerTest.php +++ b/tests/units/Core/Filter/LexerTest.php @@ -214,4 +214,48 @@ class LexerTest extends Base $this->assertSame($expected, $lexer->tokenize('tag:"tag 1" tag:tag2')); } + + public function testTokenizeWithDash() + { + $lexer = new Lexer(); + $lexer->addToken("/^(test:)/", 'T_TEST'); + + $expected = array( + 'T_TEST' => array('PO-123'), + ); + + $this->assertSame($expected, $lexer->tokenize('test:PO-123')); + + $lexer = new Lexer(); + $lexer->setDefaultToken('myDefaultToken'); + + $expected = array( + 'myDefaultToken' => array('PO-123'), + ); + + $this->assertSame($expected, $lexer->tokenize('PO-123')); + } + + public function testTokenizeWithUnderscore() + { + $lexer = new Lexer(); + $lexer->addToken("/^(test:)/", 'T_TEST'); + + $expected = array( + 'T_TEST' => array('PO_123'), + ); + + $this->assertSame($expected, $lexer->tokenize('test:PO_123')); + + $lexer = new Lexer(); + $lexer->addToken("/^(test:)/", 'T_TEST'); + $lexer->setDefaultToken('myDefaultToken'); + + $expected = array( + 'T_TEST' => array('ABC-123'), + 'myDefaultToken' => array('PO_123'), + ); + + $this->assertSame($expected, $lexer->tokenize('test:ABC-123 PO_123')); + } }