diff options
author | Laria Carolin Chabowski <laria@laria.me> | 2020-05-01 17:52:50 +0200 |
---|---|---|
committer | Laria Carolin Chabowski <laria@laria.me> | 2020-05-01 17:55:59 +0200 |
commit | ec389d3441953bbd7cb27f59df61531ba856fb33 (patch) | |
tree | fc642e218ba83860c425464da0c12493e97f40e8 | |
parent | 6e86cd0f381de60f77845ea4a7b6cbcc5fda4a47 (diff) | |
download | ste-ec389d3441953bbd7cb27f59df61531ba856fb33.tar.gz ste-ec389d3441953bbd7cb27f59df61531ba856fb33.tar.bz2 ste-ec389d3441953bbd7cb27f59df61531ba856fb33.zip |
Fix parsing `]` as last input char
Previously ] was duplicated in the ouput
-rw-r--r-- | src/ste/Parser.php | 18 | ||||
-rw-r--r-- | tests/test_trailing_closing_array_bracket/.gitignore | 3 | ||||
-rw-r--r-- | tests/test_trailing_closing_array_bracket/code.php | 12 | ||||
-rw-r--r-- | tests/test_trailing_closing_array_bracket/test.tpl | 3 | ||||
-rw-r--r-- | tests/test_trailing_closing_array_bracket/want | 3 |
5 files changed, 35 insertions, 4 deletions
diff --git a/src/ste/Parser.php b/src/ste/Parser.php index 0280f6d..6e7bf62 100644 --- a/src/ste/Parser.php +++ b/src/ste/Parser.php @@ -43,12 +43,21 @@ class Parser * @param int $n * @return string */ - private function next($n = 1) + private function peek($n = 1) { if ($n <= 0) { throw new \InvalidArgumentException("\$n must be > 0"); } - $c = mb_substr($this->text, $this->off, $n); + return mb_substr($this->text, $this->off, $n); + } + + /** + * @param int $n + * @return string + */ + private function next($n = 1) + { + $c = $this->peek($n); $this->off = min($this->off + $n, $this->len); return $c; } @@ -455,7 +464,9 @@ class Parser $arrayfields = array(); - while ($this->next() == "[") { + while ($this->peek() == "[") { + $this->next(); + $openedat = $this->off - 1; $res = $this->parse_text( self::ESCAPES_DEFAULT, /* Escapes */ @@ -471,7 +482,6 @@ class Parser $arrayfields[] = $res[0]; } - $this->back(); return $arrayfields; } diff --git a/tests/test_trailing_closing_array_bracket/.gitignore b/tests/test_trailing_closing_array_bracket/.gitignore new file mode 100644 index 0000000..de2a41b --- /dev/null +++ b/tests/test_trailing_closing_array_bracket/.gitignore @@ -0,0 +1,3 @@ +have +*.ast +*.transc.php diff --git a/tests/test_trailing_closing_array_bracket/code.php b/tests/test_trailing_closing_array_bracket/code.php new file mode 100644 index 0000000..77f48be --- /dev/null +++ b/tests/test_trailing_closing_array_bracket/code.php @@ -0,0 +1,12 @@ +<?php + +use kch42\ste\STECore; + +function test_func(STECore $ste) +{ + $ste->set_var_by_name("foo", array( + "foo", + "bar", + "baz", + )); +} diff --git a/tests/test_trailing_closing_array_bracket/test.tpl b/tests/test_trailing_closing_array_bracket/test.tpl new file mode 100644 index 0000000..68f6caa --- /dev/null +++ b/tests/test_trailing_closing_array_bracket/test.tpl @@ -0,0 +1,3 @@ +$foo[0] +$foo[1] +$foo[2]
\ No newline at end of file diff --git a/tests/test_trailing_closing_array_bracket/want b/tests/test_trailing_closing_array_bracket/want new file mode 100644 index 0000000..86e041d --- /dev/null +++ b/tests/test_trailing_closing_array_bracket/want @@ -0,0 +1,3 @@ +foo +bar +baz |