]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(python): update rendering of Unicode named literals in syntax script
authorZvezdan Petkovic <zpetkovic@acm.org>
Sun, 13 Jul 2025 06:23:24 +0000 (08:23 +0200)
committerChristian Brabandt <cb@256bit.org>
Sun, 13 Jul 2025 06:23:24 +0000 (08:23 +0200)
This change:

* enforces that the alias starts with a letter
* allows the other words in an alias to be separated by either a space
  or a hyphen, but not both or double separators
* allows only a letter after space, possibly followed by letters or
  digits
* allows both letters and digits after a hyphen

Tested with:

    a = '\N{Cyrillic Small Letter Zhe} is pronounced as zh in pleasure'
    b = '\N{NO-BREAK SPACE} is needed here'
    # ... other tests here
    r = '\N{HENTAIGANA LETTER E-1} is a Japanese hiragana letter archaic ye'
    s = '\N{CUNEIFORM SIGN NU11 TENU} is a correction alias'
    t = '\N{RECYCLING SYMBOL FOR TYPE-1 PLASTICS} base shape is a triangle'
    print(a)
    print(b)
    print(r)
    print(s)
    print(t)

The tests confirm the behavior and are selected from real Unicode
tables/aliases to check these combinations based on the specification.

fixes: #17323
closes: #17735

Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/syntax/python.vim

index 7aa82f1b982c4fad94cfe8953a6159b302a750e0..68036f5905bf26f6c6ffa26e0f0ff4c6409ded5c 100644 (file)
@@ -160,7 +160,8 @@ syn match   pythonEscape    "\\\o\{1,3}" contained
 syn match   pythonEscape       "\\x\x\{2}" contained
 syn match   pythonEscape       "\%(\\u\x\{4}\|\\U\x\{8}\)" contained
 " Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
-syn match   pythonEscape       "\\N{\a\+\%(\s\a\+\)*}" contained
+" The specification: https://www.unicode.org/versions/Unicode16.0.0/core-spec/chapter-4/#G135165
+syn match   pythonEscape       "\\N{\a\+\%(\%(\s\a\+[[:alnum:]]*\)\|\%(-[[:alnum:]]\+\)\)*}" contained
 syn match   pythonEscape       "\\$"
 
 " It is very important to understand all details before changing the