Skip to content

fix: support unicode characters in HTML and XML tag names - #237

Open
Akiyo974 wants to merge 1 commit into
tempestphp:mainfrom
Akiyo974:fix/unicode-tag-names
Open

Akiyo974 wants to merge 1 commit into
tempestphp:mainfrom
Akiyo974:fix/unicode-tag-names

Conversation

@Akiyo974

Copy link
Copy Markdown

Fixes #196. Tag name patterns now accept non-ASCII characters (matched as UTF-8 bytes, so invalid UTF-8 input keeps working without the /u modifier). HTML still requires an ASCII letter first, per spec; XML allows non-ASCII name start chars. Added pattern and language tests.

Copilot AI balanced review requested due to automatic review settings October 20, 2026 11:47
@github-actions

Copy link
Copy Markdown

Benchmark Results

Comparison of fix/unicode-tag-names against main (3d96482ee77208c8e445d4f68667918c7f440f62).

Open to see the benchmark results
benchmark subject set revs its mem_peak mode rstdev
HighlighterBench benchParse apache 100 5 2.105mb 0.00% 39.651429μs -1.82% ±1.25% +112.34%
HighlighterBench benchParse bash 100 5 2.136mb 0.00% 113.529452μs -3.14% ±1.28% -40.18%
HighlighterBench benchParse bbcode 100 5 2.092mb 0.00% 42.972935μs +3.60% ±2.43% +208.03%
HighlighterBench benchParse blade 100 5 2.775mb +0.06% 564.703131μs -1.24% ±0.83% +92.87%
HighlighterBench benchParse css 100 5 2.123mb 0.00% 77.028102μs -2.32% ±0.73% -21.50%
HighlighterBench benchParse diff 100 5 2.127mb 0.00% 50.807456μs +0.04% ±0.63% -35.12%
HighlighterBench benchParse dockerfile 100 5 2.097mb 0.00% 49.115479μs -0.09% ±1.95% +14.33%
HighlighterBench benchParse dotenv 100 5 2.108mb 0.00% 42.671331μs -1.24% ±1.32% +46.59%
HighlighterBench benchParse gdscript 100 5 2.203mb 0.00% 182.727123μs -1.42% ±1.17% +94.33%
HighlighterBench benchParse graphql 100 5 2.123mb 0.00% 84.316869μs +0.19% ±0.59% +6.18%
HighlighterBench benchParse html 100 5 2.127mb +0.08% 64.553249μs +1.05% ±1.83% +54.11%
HighlighterBench benchParse http 100 5 2.096mb 0.00% 13.493229μs -0.26% ±0.52% -59.87%
HighlighterBench benchParse ini 100 5 2.112mb 0.00% 47.504129μs -0.43% ±0.72% -12.02%
HighlighterBench benchParse javascript 100 5 2.191mb 0.00% 148.040098μs -1.75% ±0.61% -43.77%
HighlighterBench benchParse json 100 5 2.166mb 0.00% 130.511996μs -1.35% ±1.44% +102.87%
HighlighterBench benchParse markdown 100 5 2.114mb 0.00% 42.204012μs +0.71% ±0.82% -12.45%
HighlighterBench benchParse nginx 100 5 2.178mb 0.00% 148.661233μs -0.42% ±0.79% -19.03%
HighlighterBench benchParse php 100 5 2.469mb 0.00% 391.256047μs +2.63% ±0.47% -76.93%
HighlighterBench benchParse python 100 5 2.367mb 0.00% 227.483464μs -0.65% ±0.67% -0.23%
HighlighterBench benchParse ruby 100 5 2.413mb 0.00% 130.576771μs +0.55% ±0.75% +24.96%
HighlighterBench benchParse scss 100 5 2.139mb 0.00% 101.872407μs +0.40% ±0.75% -23.49%
HighlighterBench benchParse sema 100 5 2.307mb 0.00% 118.582290μs +1.10% ±1.38% +143.22%
HighlighterBench benchParse sql 100 5 2.138mb 0.00% 87.707691μs +0.54% ±0.84% -15.33%
HighlighterBench benchParse svelte 100 5 2.412mb +0.07% 564.161429μs +0.70% ±1.12% +60.46%
HighlighterBench benchParse swift 100 5 2.185mb 0.00% 136.305597μs -1.49% ±0.77% -65.80%
HighlighterBench benchParse terminal 100 5 2.133mb 0.00% 101.002387μs -0.99% ±2.46% +739.69%
HighlighterBench benchParse terraform 100 5 2.138mb 0.00% 96.054579μs +0.10% ±2.61% +143.28%
HighlighterBench benchParse typescript 100 5 2.563mb 0.00% 134.993072μs -0.14% ±0.70% -6.74%
HighlighterBench benchParse txt 100 5 2.067mb 0.00% 5.021800μs -1.21% ±1.33% -44.02%
HighlighterBench benchParse twig 100 5 19.245mb +0.01% 838.741585μs -1.57% ±1.01% +34.59%
HighlighterBench benchParse vue 100 5 2.420mb +0.07% 215.024031μs -4.04% ±0.69% -61.30%
HighlighterBench benchParse xml 100 5 2.141mb +0.08% 99.066536μs -0.12% ±0.62% -75.21%
HighlighterBench benchParse yaml 100 5 2.199mb 0.00% 177.011331μs -4.61% ±1.76% -39.75%
HighlighterBench benchParse jsx 100 5 2.135mb 0.00% 28.473562μs -7.79% ±0.71% -35.81%
HighlighterBench benchParse tsx 100 5 2.219mb 0.00% 41.438532μs -1.76% ±0.64% -64.57%

Generated by phpbench against commit b830309

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The focused pattern changes have regression coverage for opening and closing tags, with no identified blocking issues.

No open issues 🎉

What changed in this PR

Adds Unicode tag-name highlighting for HTML and XML, addressing #196 while preserving byte-based matching without the /u modifier.

Changes:

  • Extends opening and closing tag patterns to accept non-ASCII bytes.
  • Preserves HTML’s ASCII-letter start requirement while allowing non-ASCII XML starts.
  • Adds pattern-level and full-language regression cases.
File Description
tests/​Languages/​Xml/​XmlLanguageTest.php Tests Unicode XML tag highlighting.
tests/​Languages/​Html/​HtmlLanguageTest.php Tests Greek and emoji HTML tag names.
src/​Languages/​Xml/​Patterns/​XmlOpenTagPattern.php Extends XML opening-tag matching and tests.
src/​Languages/​Xml/​Patterns/​XmlCloseTagPattern.php Extends XML closing-tag matching and tests.
src/​Languages/​Html/​Patterns/​HtmlOpenTagPattern.php Extends HTML opening-tag matching and tests.
src/​Languages/​Html/​Patterns/​HtmlCloseTagPattern.php Extends HTML closing-tag matching and tests.

Review effort: Balanced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Unicode support for XML and HTML tags name

2 participants