lexer: add seven more unicode operators (#26074)

closes nim-lang/RFCs#571

Adds `⟑ ⟇ ⩓ ⩔ ■ □ ☆` with the same priority as `*`.

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
This commit is contained in:
Emmanuel M. Smith🔸
2026-08-05 16:12:17 +02:00
committed by GitHub
parent c69cf36610
commit 27763495bc
4 changed files with 44 additions and 5 deletions

View File

@@ -845,8 +845,8 @@ proc getCharacter(L: var Lexer; tok: var Token) =
const
UnicodeOperatorStartChars = {'\226', '\194', '\195'}
# the allowed unicode characters ("∙ ∘ × ★ ⊗ ⊘ ⊙ ⊛ ⊠ ⊡ ∩ ∧ ⊓ ± ⊕ ⊖ ⊞ ⊟ ⊔")
# all start with one of these.
# the allowed unicode characters ("∙ ∘ × ⊗ ⊘ ⊙ ⊛ ⊠ ⊡ ∩ ∧ ⊓ ⟑ ⟇ ⩓ ⩔ ■ □
# ± ⊕ ⊖ ⊞ ⊟ ⊔") all start with one of these.
type
UnicodeOprPred = enum
@@ -878,7 +878,18 @@ proc unicodeOprLen(buf: cstring; pos: int): (int8, UnicodeOprPred) =
elif buf[pos+2] == '\159': result = 3.a # ⊟
elif buf[pos+2] == '\160': result = 3.m # ⊠
elif buf[pos+2] == '\161': result = 3.m # ⊡
elif buf[pos+1] == '\152' and buf[pos+2] == '\133': result = 3.m # ★
elif buf[pos+1] == '\150':
if buf[pos+2] == '\160': result = 3.m # ■
elif buf[pos+2] == '\161': result = 3.m # □
elif buf[pos+1] == '\152':
if buf[pos+2] == '\133': result = 3.m # ★
elif buf[pos+2] == '\134': result = 3.m # ☆
elif buf[pos+1] == '\159':
if buf[pos+2] == '\135': result = 3.m # ⟇
elif buf[pos+2] == '\145': result = 3.m # ⟑
elif buf[pos+1] == '\169':
if buf[pos+2] == '\147': result = 3.m # ⩓
elif buf[pos+2] == '\148': result = 3.m # ⩔
of '\194':
if buf[pos+1] == '\177': result = 2.a # ±
of '\195':