mc/misc/syntax/c.syntax
Morthimer McMare cd8355bfa8 Ticket #4556: color definitions in the "c.syntax" highlight file.
Definitions are provided for:
- Various punctuation (divided into 9 groups);
- Preprocessor;
- Keywords;
- Data types;
- Data type qualifiers;
- Numbers (can be different for the integer, hexadecimal, octal and floatpoint representations);
- Strings and escaped characters;
- Comments (with keywords like "TODO:");
- Labels.
In total 32 "defines"...

Based on the original "c.syntax" file, this version includes most of the content from C89..C23.

Closes MidnightCommander/mc#203.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2024-07-25 21:38:44 +03:00

273 lines
9.6 KiB
YAML
Raw Blame History

# Syntax rules for the C (and partially C++) programming languages.
#
# Rewritten and extended with defines by Morthimer McMare
# <mailto:morthimer_second@list.ru>
#
# Tab size: 4.
# Feel free to improve the highlighting file.
#
# Date:
# Initial 2024.04.24;
# Updated 2024.06.26 (first public release. Classic Midnight Commander C-syntax theme set by default, added keywords from the C23 standard).
#
# For the default (blue) background.
# The colors almost match the original "c.syntax" file, slightly extending it:
define _punctuation yellow
define _punct_operator brightcyan
define _punct_semicolon brightmagenta
define _punct_bracket brightcyan
define _punct_sqbracket brightcyan
define _punct_field yellow
define _punct_comma brightcyan
define _punct_ternary brightcyan
define _punct_bitwise brightmagenta
define _label cyan
define _preproc brightred
define _preproc_str red
define _preproc_nl_esc red
define _preproc_indent brightmagenta
define _keyword yellow
define _datatype yellow
define _datatype_void yellow
define _datatype_mod yellow
define _datatype_scope yellow
define _const lightgray
define _num_integer lightgray
define _num_hex lightgray
define _num_oct lightgray
define _num_float lightgray
define _string green
define _string_specsymb brightgreen
define _string_escchar brightgreen
define _char brightgreen
define _comment brown
define _comment_word black brown
define _comment_exmark black yellow
define _comment_qnmark black brown
# I think this highlighting is easier for the eyes for the black background themes. Can be also used with the blue background:
#define _punctuation yellow
#define _punct_operator brightmagenta
#define _punct_semicolon brightmagenta
#define _punct_bracket yellow
#define _punct_sqbracket brown
#define _punct_field yellow
#define _punct_comma yellow
#define _punct_ternary white
#define _punct_bitwise yellow
#define _label brightcyan
#define _preproc lightgray
#define _preproc_str white
#define _preproc_nl_esc white
#define _preproc_indent lightgray
#define _keyword brightcyan
#define _datatype brightcyan
#define _datatype_void brightcyan
#define _datatype_mod brightcyan
#define _datatype_scope brightblue
#define _const lightgray
#define _num_integer red
#define _num_hex red
#define _num_oct red
#define _num_float magenta
#define _string brightgreen
#define _string_specsymb brightcyan
#define _string_escchar brightcyan
#define _char brightgreen
#define _comment gray
#define _comment_word black gray
#define _comment_exmark black yellow
#define _comment_qnmark black brown
context default
keyword whole asm _keyword
keyword whole break _keyword
keyword whole case _keyword
keyword whole const _keyword
keyword whole continue _keyword
keyword whole do _keyword
keyword whole else _keyword
keyword whole enum _keyword
keyword whole for _keyword
keyword whole goto _keyword
keyword whole if _keyword
keyword whole inline _keyword
keyword whole restrict _keyword
keyword whole return _keyword
keyword whole sizeof _keyword
keyword whole struct _keyword
keyword whole switch _keyword
keyword whole typedef _keyword
keyword whole union _keyword
keyword whole volatile _keyword
keyword whole while _keyword
# C11/C23 extensions:
keyword whole alignas _keyword
keyword whole alignof _keyword
keyword whole constexpr _keyword
keyword whole typeof _keyword
keyword whole typeof_unqual _keyword
keyword whole static_assert _keyword
keyword whole thread_local _keyword
keyword whole _Alignas _keyword
keyword whole _Alignof _keyword
keyword whole _Atomic _keyword
keyword whole _Bool _keyword
keyword whole _Complex _keyword
keyword whole _Decimal32 _keyword
keyword whole _Decimal64 _keyword
keyword whole _Decimal128 _keyword
keyword whole _Generic _keyword
keyword whole _Imaginary _keyword
keyword whole _Noreturn _keyword
keyword whole _Static_assert _keyword
keyword whole _Thread_local _keyword
keyword whole auto _datatype_scope
keyword whole extern _datatype_scope
keyword whole register _datatype_scope
keyword whole static _datatype_scope
keyword whole void _datatype_void
keyword whole int _datatype
keyword whole char _datatype
keyword whole float _datatype
keyword whole double _datatype
keyword whole wchar_t _datatype
keyword whole short _datatype_mod
keyword whole long _datatype_mod
keyword whole signed _datatype_mod
keyword whole unsigned _datatype_mod
keyword whole wchar_t _datatype
keyword whole ... _keyword
keyword NULL _const
# Since C23:
keyword true _const
keyword false _const
keyword nullptr _const
keyword linestart \{\s\t\}\[\s\t\]#*\n _preproc_indent
keyword whole linestart \[\s\t\]\{ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]: _label
keyword whole \[\s\t\]default _keyword
# Comments:
keyword /\* _comment
keyword \*/ _comment
keyword // _comment
# Characters:
keyword '\\\{"abtnvfr\}' _char
keyword '\\\{0123\}\{01234567\}\{01234567\}' _char
keyword '\\'' _char
keyword '\\\\' _char
keyword '\\0' _char
keyword '\{\s!"#$%&()\*\+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\}' _char
# Punctuation characters, sorted by ASCII code:
keyword ! _punctuation
keyword % _punctuation
keyword && _punctuation
# Note: the '&' symbol uses both in the reference/address and in the bitwise operation.
keyword & _punct_bitwise
keyword ( _punct_bracket
keyword ) _punct_bracket
keyword \* _punctuation
keyword \+ _punctuation
keyword , _punct_comma
keyword . _punct_field
keyword -> _punct_field
keyword - _punctuation
keyword / _punctuation
keyword : _punct_ternary
keyword ; _punct_semicolon
keyword < _punctuation
keyword = _punctuation
keyword > _punctuation
keyword ? _punct_ternary
keyword [ _punct_sqbracket
keyword ] _punct_sqbracket
keyword ^ _punct_bitwise
keyword { _punct_operator
keyword || _punctuation
keyword | _punct_bitwise
keyword } _punct_operator
keyword ~ _punct_bitwise
# Numbers:
wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.
keyword whole 0x\{0123456789abcdefABCDEF_\}\[0123456789abcdefABCDEF_\] _num_hex
keyword whole 0\{01234567_\}\[01234567_\] _num_oct
keyword whole 0 _num_integer
keyword whole 0\{lu\} _num_integer
keyword whole \{123456789_\}\[0123456789_\] _num_integer
keyword whole \{123456789_\}\[0123456789_\]\{lu\} _num_integer
# Float-point values:
keyword whole \[0123456789_\]\.\{0123456789_\}\[0123456789_\] _num_float
keyword whole \{0123456789_\}\[0123456789_\]\.\[0123456789_\] _num_float
keyword whole \{0123456789_\}\[0123456789_\]\{eE\}\{0123456789_\}\[0123456789_\] _num_float
keyword whole \{0123456789_\}\[0123456789_\]\{eE\}\{\-\+\}\{0123456789_\}\[0123456789_\] _num_float
keyword whole \{0123456789_\}\[0123456789_\]\.\{0123456789_\}\[0123456789_\]\{eE\}\{0123456789_\}\[0123456789_\] _num_float
keyword whole \{0123456789_\}\[0123456789_\]\.\{0123456789_\}\[0123456789_\]\{eE\}\{\-\+\}\{0123456789_\}\[0123456789_\] _num_float
# Explicit float (not double):
keyword whole \[0123456789_\]\.\{0123456789_\}\[0123456789_\]f _num_float
keyword whole \{0123456789_\}\[0123456789_\]\.\[0123456789_\]f _num_float
keyword whole \{0123456789_\}\[0123456789_\]\{eE\}\{0123456789_\}\[0123456789_\]f _num_float
keyword whole \{0123456789_\}\[0123456789_\]\{eE\}\{\-\+\}\{0123456789_\}\[0123456789_\]f _num_float
keyword whole \{0123456789_\}\[0123456789_\]\.\{0123456789_\}\[0123456789_\]\{eE\}\{0123456789_\}\[0123456789_\]f _num_float
keyword whole \{0123456789_\}\[0123456789_\]\.\{0123456789_\}\[0123456789_\]\{eE\}\{\-\+\}\{0123456789_\}\[0123456789_\]f _num_float
context exclusive /\* \*/ _comment
keyword whole BUG _comment_word
keyword whole FixMe _comment_word
keyword whole FIXME _comment_word
keyword whole Note _comment_word
keyword whole NOTE _comment_word
keyword whole ToDo _comment_word
keyword whole TODO _comment_word
keyword !!\[!\] _comment_exmark
keyword ??\[?\] _comment_qnmark
spellcheck
context exclusive // \n _comment
keyword whole BUG: _comment_word
keyword whole FixMe: _comment_word
keyword whole FIXME: _comment_word
keyword whole Note: _comment_word
keyword whole NOTE: _comment_word
keyword whole ToDo: _comment_word
keyword whole TODO: _comment_word
keyword !!\[!\] _comment_exmark
keyword ??\[?\] _comment_qnmark
spellcheck
context linestart # \n _preproc
keyword \\\n _preproc_nl_esc
keyword /\**\*/ _comment
keyword //*\n _comment
keyword "+" _preproc_str
keyword <+> _preproc_str
context " " _string
spellcheck
keyword \\" _string_escchar
keyword %% _string_specsymb
keyword %\[#0\s-\+,\]\[0123456789\*\]\[.\]\[0123456789\*\]\[L\]\{eEfgGoxX\} _string_specsymb
keyword %\[0\s-\+,\]\[0123456789\*\]\[.\]\[0123456789\*\]\[hl\]\{diuxX\} _string_specsymb
keyword %\[hl\]n _string_specsymb
keyword %\[-\]\[0123456789\*\]\[.\]\[0123456789\*\]s _string_specsymb
keyword %[*] _string_specsymb
keyword %c _string_specsymb
keyword %p _string_specsymb
keyword \\\{0123\}\{01234567\}\{01234567\} _string_specsymb
keyword \\\\ _string_escchar
keyword \\' _string_escchar
keyword \\\{abtnvfr\} _string_escchar