#
# Turtle syntax highlighting
# for MC Editor/CoolEdit
#
# Copyright 2020, Jonas Smedegaard <dr@jones.dk>
#
# This program is free software:
# you can redistribute it and/or modify it
# under the terms of the GNU General Public License
# as published by the Free Software Foundation,
# either version 3 of the License,
# or (at your option) any later version.
#
# 2020-04-12 Jonas Smedegaard <dr@jones.dk>
# * Initial public release.
#
# Reference:
# https://www.w3.org/TeamSubmission/turtle/
context default lightgray
spellcheck
# declarations
keyword whole @base magenta
keyword whole @prefix magenta
keyword whole a yellow
keyword ^^ brightmagenta
# Collection
keyword ( brightmagenta
keyword ) brightmagenta
# Shorthand prefix
keyword wholeleft \{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-\]: cyan
keyword wholeleft : cyan
# Anonymous node
keyword wholeleft _: cyan
keyword [ cyan
keyword ] cyan
# Decimal integers
keyword whole \{0123456789\}\[0123456789\] yellow
keyword whole \{-+\}\{0123456789\}\[0123456789\] yellow
# Decimal floating point arbitrary precision number
keyword whole \{0123456789\}.\[0123456789\] yellow
keyword whole .\{0123456789\}\[0123456789\] yellow
keyword whole \{-+\}\{0123456789\}.\[0123456789\] yellow
keyword whole \{-+\}.\{0123456789\}\[0123456789\] yellow
# Decimal floating point double/fixed precision number
keyword whole \{0123456789\}.\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] yellow
keyword whole \{0123456789\}.\[0123456789\]\{-+\}\{eE\}\{0123456789\}\[0123456789\] yellow
keyword whole .\{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] yellow
keyword whole .\{0123456789\}\[0123456789\]\{-+\}\{eE\}\{0123456789\}\[0123456789\] yellow
keyword whole \{-+\}\{0123456789\}.\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] yellow
keyword whole \{-+\}\{0123456789\}.\[0123456789\]\{-+\}\{eE\}\{0123456789\}\[0123456789\] yellow
keyword whole \{-+\}.\{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] yellow
keyword whole \{-+\}.\{0123456789\}\[0123456789\]\{-+\}\{eE\}\{0123456789\}\[0123456789\] yellow
# Boolean
keyword whole true yellow
keyword whole false yellow
# Language
keyword wholeright @\{abcdefghijklmnopqrstuvwxyz\}\[abcdefghijklmnopqrstuvwxyz0123456789-\]\[abcdefghijklmnopqrstuvwxyz0123456789\] brightmagenta
keyword wholeright @\{abcdefghijklmnopqrstuvwxyz\}\[abcdefghijklmnopqrstuvwxyz0123456789\] brightmagenta
# Punctuation
keyword , white
keyword ; white
# keyword . black white
keyword . white brightmagenta
# URL
# keyword whole <*> brightred
context < > brightred
# TODO: enable when context ending at newline doesn't ruin next context
# syntax violation
# keyword +\n black red
# String escape
keyword \\u\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\} brightgreen
keyword \\U\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\} brightgreen
keyword \\\{tnr>\\} brightgreen
# Single-line literals
context exclusive " " green
spellcheck
# TODO: enable when context ending at newline doesn't ruin next context
# syntax violation
# keyword +\n black red
# String escape
keyword \\u\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\} brightgreen
keyword \\U\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\} brightgreen
keyword \\\{tnr"\\} brightgreen
# Multi-line literals
context """ """ green
spellcheck
# String escape
keyword \\u\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\} brightgreen
keyword \\U\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\}\{0123456789abcdef\} brightgreen
keyword \\\{tnr"\\} brightgreen
# Comment
context linestart # \n brown
spellcheck
# Ideally we would have defined comments with "context linestart \[\s\]# ...",
# but contexts can't start with a character class. So we define comments twice.
context linestart \s\[\s\]# \n brown
spellcheck