commit 2181853574a98ce7fb55a967a8452e3925cb2a51
parent 281197895f65e84147d233db204c002724eb0be9
Author: Benno Schulenberg <bensberg@telfort.nl>
Date: Thu, 8 May 2025 08:56:30 +0200
syntaxes: use character classes instead of range expressions
In some locales certain normal ASCII characters are not included in
the ranges [A-Z] and [a-z]. So, use [[:upper:]] and [[:lower:]]
instead, and [[:alpha:]] for [A-Za-z], and similarly for others.
This fixes https://savannah.gnu.org/bugs/?67094.
Diffstat:
22 files changed, 41 insertions(+), 41 deletions(-)
diff --git a/syntax/asm.nanorc b/syntax/asm.nanorc
@@ -6,11 +6,11 @@ syntax asm "\.(S|s|asm)$"
magic "assembler source"
comment "//"
-color red "\<[A-Z_]{2,}\>"
+color red "\<[[:alpha:]_]{2,}\>"
color brightgreen "\.(data|subsection|text)\>"
color green "\.(align|file|globl|global|hidden|section|size|type|weak)\>"
color brightyellow "\.(ascii|asciz|byte|double|float|hword|int|long|short|single|struct|word)\>"
-color brightred "^[[:blank:]]*[.0-9A-Za-z_]*:"
+color brightred "^[[:blank:]]*[[:alnum:]_.]*:"
color brightcyan "^[[:blank:]]*#[[:blank:]]*(define|undef|include|ifn?def|endif|elif|else|if|warning|error)\>"
# Strings and names of included files.
diff --git a/syntax/autoconf.nanorc b/syntax/autoconf.nanorc
@@ -11,7 +11,7 @@ color yellow "\<(if|test|then|elif|else|fi|case|esac|ifelse|for|in|do|done)\>"
color yellow "=|!=|&&|\|\|"
# Macros:
-color cyan "\<[[:upper:]_[:digit:]]+\>"
+color cyan "\<[[:upper:][:digit:]_]+\>"
# Version numbers:
color red "\<[-_.0-9]+\>"
diff --git a/syntax/awk.nanorc b/syntax/awk.nanorc
@@ -8,7 +8,7 @@ magic "awk script"
comment "#"
# Records.
-color brightred "\$[0-9A-Za-z_!@#$*?-]+"
+color brightred "\$[[:alnum:]_!@#$*?-]+"
# Awk-set variables.
color red "\<(ARGC|ARGIND|ARGV|BINMODE|CONVFMT|ENVIRON|ERRNO|FIELDWIDTHS)\>"
color red "\<(FILENAME|FNR|FS|IGNORECASE|LINT|NF|NR|OFMT|OFS|ORS)\>"
diff --git a/syntax/c.nanorc b/syntax/c.nanorc
@@ -6,9 +6,9 @@ magic "^(C|C\+\+) (source|program)"
comment "//"
# Constants.
-color brightred "\<[A-Z_][0-9A-Z_]*\>"
+color brightred "\<[[:upper:]_][[:upper:][:digit:]_]*\>"
# Labels.
-color brightmagenta "^[[:blank:]]*[A-Z_a-z][0-9A-Z_a-z]*:[[:blank:]]*$"
+color brightmagenta "^[[:blank:]]*[[:alpha:]_][[:alnum:]_]*:[[:blank:]]*$"
color normal ":[[:blank:]]*$"
# Types and related keywords.
diff --git a/syntax/changelog.nanorc b/syntax/changelog.nanorc
@@ -8,24 +8,24 @@ syntax changelog "Change[Ll]og[^/]*$"
# Author lines.
color green "^(19|20).*"
# Dates.
-color red "^(19|20)[0-9-]{8}"
+color red "^(19|20)[[:digit:]-]{8}"
# Email addresses.
color yellow "<[^>]*@[^>]*>"
# Command-line options.
-color cyan "[[:blank:]]-[a-zA-Z\$]|--[8a-z-]+"
+color cyan "[[:blank:]]-[[:alpha:]$]|--[[:lower:]8-]+"
# Bug and patch numbers.
-color cyan "(BZ|bug|patch)[ ]#[0-9]+|PR [[:alnum:]]+/[0-9]+"
+color cyan "(BZ|bug|patch) #[[:digit:]]+|PR [[:alnum:]]+/[[:digit:]]+"
# Probable constants, for variety.
-color brightred "\<[A-Z_][0-9A-Z_]+\>"
+color brightred "\<[[:upper:]_][[:upper:][:digit:]_]+\>"
# Key sequences.
-color brightblue "\^[A-Z^\]|\<M-.|\<F1?[0-9]|(\^|M-)Space"
+color brightblue "\^[[:upper:]\^_]|\<M-.|\<F1?[[:digit:]]|(\^|M-)Space"
# Changed files.
color magenta start="^( | {8})\* " end="(:( |$)|^$)"
# Release markers.
-color brightblue "^(GNU )?nano[- ][0-9]\.[0-9]\.[^ ]+"
+color brightblue "^(GNU )?nano[- ][[:digit:]]\.[[:digit:]]\.[^ ]+"
# Trailing whitespace.
color ,green "[[:space:]]+$"
diff --git a/syntax/cmake.nanorc b/syntax/cmake.nanorc
@@ -5,7 +5,7 @@
syntax cmake "(CMakeLists\.txt|\.cmake)$"
comment "#"
-color green "^[[:blank:]]*[0-9A-Za-z_]+"
+color green "^[[:blank:]]*[[:alnum:]_]+"
icolor brightyellow "^[[:blank:]]*(include|include_directories|include_external_msproject)\>"
icolor brightgreen "^[[:blank:]]*((else|end)?if|else|(end)?while|(end)?foreach|break)\>"
diff --git a/syntax/go.nanorc b/syntax/go.nanorc
@@ -42,7 +42,7 @@ color brightblue "//.*"
color brightblue start="/\*" end="\*/"
# Special comments.
-color brightcyan "//[[:blank:]]*\+build[[:blank:]]+(([a-zA-Z_0-9]+[[:blank:]]*)+,[[:blank:]]*)*[a-zA-Z_0-9]+"
+color brightcyan "//[[:blank:]]*\+build[[:blank:]]+(([[:alnum:]_]+[[:blank:]]*)+,[[:blank:]]*)*[[:alnum:]_]+"
# Trailing whitespace.
color ,green "[[:space:]]+$"
diff --git a/syntax/makefile.nanorc b/syntax/makefile.nanorc
@@ -14,7 +14,7 @@ color magenta "^(if|ifn?def|ifn?eq|else|endif|(-|s)?include)\>"
color magenta "^((override +)?(un)?define|endef|(un)?export|private|vpath)\>"
# Variable expansions.
-color blue "\$+[{(][a-zA-Z0-9_-]+[})]"
+color blue "\$+[{(][[:alnum:]_-]+[})]"
# Targets.
color brightblue "^[^ ].*:"
diff --git a/syntax/nanohelp.nanorc b/syntax/nanohelp.nanorc
@@ -4,7 +4,7 @@
syntax nanohelp
# Key combos:
-color cyan "\^[]/4-8@A-Z\^_`◂▸▴▾-]" "[◂▸▴▾]" "\<(M|S[Hh]-[Mm])-[^")”»“」]" "\<F([1-9]|1[0-9]|2[0-4])"
+color cyan "\^[]/4-8@[:upper:]\^_`◂▸▴▾-]|[◂▸▴▾]|\<(M|S[Hh]-[Mm])-[^")”»“」]|\<F([1-9]|1[0-9]|2[0-4])"
color cyan "\<((Sh-)?Tab|Enter|Ins|(Sh-\^?)?Del|Space|Bsp|Up|Down|Left|Right|Home|End|PgUp|PgDn)\>"
# Colorize M-) and M-" only when between parentheses...
diff --git a/syntax/nanorc.nanorc b/syntax/nanorc.nanorc
@@ -17,8 +17,8 @@ color lime "^[[:blank:]]*extendsyntax[[:blank:]]+[[:alpha:]]+[[:blank:]]+(i?colo
color brightgreen "^[[:blank:]]*(set|unset)[[:blank:]]+(afterends|allow_insecure_backup|atblanks|autoindent|backup|boldtext|bookstyle|breaklonglines|casesensitive|colonparsing|constantshow|cutfromcursor|emptyline|historylog|indicator|jumpyscrolling|linenumbers|locking|magic|minibar|mouse|multibuffer|noconvert|nohelp|nonewlines|positionlog|preserve|quickblank|rawsequences|rebinddelete|regexp|saveonexit|showcursor|smarthome|softwrap|stateflags|tabstospaces|trimblanks|unix|whitespacedisplay|wordbounds|zap|zero)\>"
color brightgreen "^[[:blank:]]*set[[:blank:]]+(backupdir|brackets|errorcolor|functioncolor|keycolor|matchbrackets|minicolor|numbercolor|operatingdir|promptcolor|punct|quotestr|scrollercolor|selectedcolor|speller|spotlightcolor|statuscolor|stripecolor|titlecolor|whitespace|wordchars)[[:blank:]]+"
color brightgreen "^[[:blank:]]*set[[:blank:]]+(fill[[:blank:]]+-?[[:digit:]]+|(guidestripe|tabsize)[[:blank:]]+[1-9][0-9]*)\>"
-color brightgreen "^[[:blank:]]*bind[[:blank:]]+((\^([A-Za-z]|[]/@\^_`-]|Space)|([Ss][Hh]-)?[Mm]-[A-Za-z]|[Mm]-([][!"#$%&'()*+,./0-9:;<=>?@\^_`{|}~-]|Space))|F([1-9]|1[0-9]|2[0-4])|Ins|Del)[[:blank:]]+([a-z]+|".*")[[:blank:]]+(main|help|search|replace(with)?|yesno|gotoline|writeout|insert|execute|browser|whereisfile|gotodir|spell|linter|all)\>"
-color brightgreen "^[[:blank:]]*unbind[[:blank:]]+((\^([A-Za-z]|[]/@\^_`-]|Space)|([Ss][Hh]-)?[Mm]-[A-Za-z]|[Mm]-([][!"#$%&'()*+,./0-9:;<=>?@\^_`{|}~-]|Space))|F([1-9]|1[0-9]|2[0-4])|Ins|Del)[[:blank:]]+(main|help|search|replace(with)?|yesno|gotoline|writeout|insert|execute|browser|whereisfile|gotodir|spell|linter|all)\>"
+color brightgreen "^[[:blank:]]*bind[[:blank:]]+((\^([[:alpha:]]|[]/@\^_`-]|Space)|([Ss][Hh]-)?[Mm]-[[:alpha:]]|[Mm]-([][!"#$%&'()*+,./0-9:;<=>?@\^_`{|}~-]|Space))|F([1-9]|1[0-9]|2[0-4])|Ins|Del)[[:blank:]]+([[:lower:]]+|".*")[[:blank:]]+(main|help|search|replace(with)?|yesno|gotoline|writeout|insert|execute|browser|whereisfile|gotodir|spell|linter|all)\>"
+color brightgreen "^[[:blank:]]*unbind[[:blank:]]+((\^([[:alpha:]]|[]/@\^_`-]|Space)|([Ss][Hh]-)?[Mm]-[[:alpha:]]|[Mm]-([][!"#$%&'()*+,./0-9:;<=>?@\^_`{|}~-]|Space))|F([1-9]|1[0-9]|2[0-4])|Ins|Del)[[:blank:]]+(main|help|search|replace(with)?|yesno|gotoline|writeout|insert|execute|browser|whereisfile|gotodir|spell|linter|all)\>"
color brightgreen "^[[:blank:]]*extendsyntax[[:blank:]]+[[:alpha:]]+[[:blank:]]+"
color brightgreen "^[[:blank:]]*(syntax[[:blank:]]+[^[:space:]]+|(formatter|linter)[[:blank:]]+.+)"
diff --git a/syntax/objc.nanorc b/syntax/objc.nanorc
@@ -7,7 +7,7 @@ magic "Objective-C source"
comment "//"
# Stuffs.
-color brightwhite "\<[A-Z_][0-9A-Z_]+\>"
+color brightwhite "\<[[:upper:]_][[:upper:][:digit:]_]+\>"
color green "\<(float|double|BOOL|bool|char|int|short|long|id|sizeof|enum|void|static|const|struct|union|typedef|extern|(un)?signed|inline)\>"
color green "\<[[:alpha:]_][[:alnum:]_]*_t\>"
color green "\<(class|namespace|template|public|protected|private|typename|this|friend|virtual|using|mutable|volatile|register|explicit)\>"
diff --git a/syntax/ocaml.nanorc b/syntax/ocaml.nanorc
@@ -5,7 +5,7 @@ magic "OCaml"
comment "(*|*)"
# Uid:
-color red "\<[A-Z][0-9a-z_]{2,}\>"
+color red "\<[[:upper:]][[:lower:][:digit:]_]{2,}\>"
# Declarations:
color green "\<(let|val|method|in|and|rec|private|virtual|constraint)\>"
# Structure items:
diff --git a/syntax/perl.nanorc b/syntax/perl.nanorc
@@ -23,8 +23,8 @@ color magenta "\<(and|cmp|eq|ge|gt|isa|le|lt|ne|not|or|x|xor)\>"
color magenta "\<(my|no|our|package|sub|use)\>"
# Variable names.
-color cyan "[$%&@]([A-Za-z_][0-9A-Za-z_]*|\^[][A-Z?\^_]|[0-9]+)\>"
-color cyan "[$%&@]\{(\^?[A-Za-z_][0-9A-Za-z_]*|\^[][?\^][0-9]+)\}"
+color cyan "[$%&@]([[:alpha:]_][[:alnum:]_]*|\^[][[:upper:]?\^_]|[[:digit:]]+)\>"
+color cyan "[$%&@]\{(\^?[[:alpha:]_][[:alnum:]_]*|\^[][?\^][[:digit:]]+)\}"
color cyan "[$%&@]([][!"#'()*+,.:;<=>?`|~-]|\{[][!-/:-@\`|~]\})|\$[$%&@]"
color cyan "(^|[[:blank:]])[$%@][/\]"
diff --git a/syntax/php.nanorc b/syntax/php.nanorc
@@ -10,9 +10,9 @@ comment "//"
color brightgreen "(<\?(php|=)?|\?>)"
# Function names.
-color white "\<[A-Za-z_][A-Za-z_0-9]*\("
+color white "\<[[:alpha:]_][[:alnum:]_]*\("
# Variable names.
-color cyan "\$[A-Za-z_][A-Za-z_0-9]*"
+color cyan "\$[[:alpha:]_][[:alnum:]_]*"
# Types.
color green "\<(array|bool|callable|const|float|global|int|object|string|var)\>"
diff --git a/syntax/po.nanorc b/syntax/po.nanorc
@@ -20,7 +20,7 @@ color yellow "\<((pre|rc)?[0-9]+|[0-9]bit)\>"
color brightblue "^(msgid|msgid_plural|msgstr)\>"
# Flags.
color red " fuzzy(,|$)"
-color yellow " (no-)?([a-z-]+|c\+\+)-format(,|$)"
+color yellow " (no-)?([[:lower:]-]+|c\+\+)-format(,|$)"
# Format specifiers.
color brightmagenta "%([1-9]\$)?[#0 +'I-]?(\*([1-9]\$)?|[0-9]\.?|[0-9]?\.[0-9])?(hh|ll|[hlLjzt])?([diouxXeEfFgGaAcspnmr]|<PRI[diouxX](32|64)>)|%%"
color rosy "%\([[:alpha:]][[:alnum:]_]*\)([0-9]\.?|[0-9]?\.[0-9])?[#0 +-]?[diouxXeEfFgGcrs]"
diff --git a/syntax/python.nanorc b/syntax/python.nanorc
@@ -9,7 +9,7 @@ comment "#"
linter pyflakes
# Function definitions.
-color brightblue "def [0-9A-Za-z_]+"
+color brightblue "def [[:alnum:]_]+"
# Keywords.
color brightcyan "\<(and|as|assert|async|await|break|class|continue)\>"
color brightcyan "\<(def|del|elif|else|except|finally|for|from)\>"
diff --git a/syntax/ruby.nanorc b/syntax/ruby.nanorc
@@ -10,12 +10,12 @@ comment "#"
linter ruby -w -c
# Constants.
-color brightblue "\<[A-Z]+[0-9A-Z_a-z]*|(\$|@|@@)[0-9A-Z_a-z]+"
+color brightblue "\<[[:upper:]]+[[:alnum:]_]*|(\$|@|@@)[[:alnum:]_]+"
# Reserved words.
color yellow "\<(BEGIN|END|alias|and|begin|break|case|class|def|defined\?|do|else|elsif|end|ensure|false|for|if|in|module)\>"
color yellow "\<(next|nil|not|or|redo|rescue|retry|return|self|super|then|true|undef|unless|until|when|while|yield)\>"
# Ruby "symbols".
-color magenta "([ ]|^):[0-9A-Za-z_]+\>"
+color magenta "([ ]|^):[[:alnum:]_]+\>"
# Some unique things we want to stand out.
color brightyellow "\<(__FILE__|__LINE__)\>"
diff --git a/syntax/rust.nanorc b/syntax/rust.nanorc
@@ -7,19 +7,19 @@ syntax rust "\.(rlib|rs)$"
comment "//"
# Function definitions
-color magenta "fn [a-z_0-9]+"
+color magenta "fn [[:lower:][:digit:]_]+"
# Reserved words
color yellow "\<(abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|true|try|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\>"
# Macros
-color red "[a-z_]+!"
+color red "[[:lower:]_]+!"
# Constants
-color magenta "[A-Z][A-Z_0-9]+"
+color magenta "[[:upper:]][[:upper:][:digit:]_]+"
# Traits/Enums/Structs/Types/...
-color magenta "[A-Z][A-Za-z0-9]+"
+color magenta "[[:upper:]][[:alnum:]]+"
# Strings
color green ""([^"]|\\")*""
diff --git a/syntax/sh.nanorc b/syntax/sh.nanorc
@@ -11,7 +11,7 @@ comment "#"
linter dash -n
# Function declarations.
-color brightgreen "^[A-Za-z0-9_-]+\(\)"
+color brightgreen "^[[:alnum:]_-]+\(\)"
# Keywords, symbols, and comparisons.
color green "\<(break|case|continue|do|done|elif|else|esac|exit|fi|for|function|if|in|read|return|select|shift|then|time|until|while)\>"
@@ -20,16 +20,16 @@ color green "[][{}():;|`$<>!=&\]"
color green "-(eq|ne|gt|lt|ge|le|ef|ot|nt)\>"
# Short and long options.
-color brightmagenta "[[:blank:]](-[A-Za-z]|--\<[A-Za-z-]+)\>"
+color brightmagenta "[[:blank:]](-[[:alpha:]]|--\<[[:alpha:]-]+)\>"
# Common commands.
color brightblue "\<(awk|cat|cd|ch(grp|mod|own)|cp|cut|echo|env|grep|head|install|ln|make|mkdir|mv|popd|printf|pushd|rm|rmdir|sed|set|sort|tail|tar|touch|umask|unset)\>"
color normal "[.-]tar\>"
# Basic variable names (no braces).
-color brightred "\$([-@*#?$!0-9]|[[:alpha:]_][[:alnum:]_]*)"
+color brightred "\$([-@*#?$![:digit:]]|[[:alpha:]_][[:alnum:]_]*)"
# More complicated variable names; handles braces and replacements and arrays.
-color brightred "\$\{[#!]?([-@*#?$!]|[0-9]+|[[:alpha:]_][[:alnum:]_]*)(\[([[:blank:]]*[[:alnum:]_]+[[:blank:]]*|@)\])?(([#%/]|:?[-=?+])[^}]*\}|\[|\})"
+color brightred "\$\{[#!]?([-@*#?$!]|[[:digit:]]+|[[:alpha:]_][[:alnum:]_]*)(\[([[:blank:]]*[[:alnum:]_]+[[:blank:]]*|@)\])?(([#%/]|:?[-=?+])[^}]*\}|\[|\})"
# Comments.
color cyan "(^|[[:blank:]])#.*"
diff --git a/syntax/tcl.nanorc b/syntax/tcl.nanorc
@@ -31,7 +31,7 @@ color green "\<(sleep|sync|system|tclx_(findinit|fork|load_tndxs|sleep|system|wa
color green "[!$&();<=>\`|]"
color brightblue "\<proc[[:blank:]]|\{|\}"
color brightyellow ""([^"\]|\\.)*"|'([^'\]|\\.)*'"
-color brightred "\$\{?[0-9A-Za-z_!@#$*?-]+\}?"
+color brightred "\$\{?[[:alnum:]_!@#$*?-]+\}?"
# Trailing whitespace:
color ,green "[[:space:]]+$"
diff --git a/syntax/tex.nanorc b/syntax/tex.nanorc
@@ -6,6 +6,6 @@ comment "%"
linter chktex -v0 -q -I
-color green "\\.|\\[A-Za-z]*"
+color green "\\.|\\[[:alpha:]]*"
color magenta "[{}]"
color blue "(^|[^\])%.*"
diff --git a/syntax/texinfo.nanorc b/syntax/texinfo.nanorc
@@ -12,10 +12,10 @@ comment "@c "
color purple start="^@direntry" end="^@end direntry"
# Command arguments, trailing and enclosed.
-color cyan "^@[a-z]+[[:space:]]+.*"
-color lightmagenta "@([a-z]+|,|H|U)\{([^}]|@\}|@[a-z]+\{[^}]*\})*\}"
+color cyan "^@[[:lower:]]+[[:space:]]+.*"
+color lightmagenta "@([[:lower:]]+|,|H|U)\{([^}]|@\}|@[[:lower:]]+\{[^}]*\})*\}"
# Commands themselves.
-color yellow "^@[a-z]+([[:space:]]|$)|@([a-z]+|,|H|U|AA|AE|DH|L|OE?|(La)?TeX|TH)\{|\}"
+color yellow "^@[[:lower:]]+([[:space:]]|$)|@([[:lower:]]+|,|H|U|AA|AE|DH|L|OE?|(La)?TeX|TH)\{|\}"
color pink "@[!"'&*./:=?@\^`{}~-]"
# Special separator for headings and footings.