# Syntax Highlighting¶

Token-based syntax highlighting is configured in a colorer section of an ESV file. Such a section can contain style definitions and styling rules.

## Style Definitions¶

Style definitions bind an identifier to a style for later reuse, using the syntax:

  $ID =$Style


## Styles¶

A style specifies a combination of a foreground color, optional background color, and optional font style. Colors are specified as Red-Green-Blue values ranging from 0 (none) to 255 (full). The possible font attributes are:

Font attribute Description
(none) Normal font.
bold Bold font.
italic Italic font.
bold italic Bond and italic font.
italic bold Same as bold italic.

For example, the following style definitions bind the red, green, and blue colors:

colorer

red   = 255 0 0
green = 0 255 0
blue  = 0 0 255


An optional background color can be set by adding another RGB value:

colorer

redWithGreenBackground = 255 0 0 0 255 0


The font attributes can be used to make the font bold or italic:

colorer

redWithBold   = 255 0 0 bold
redWithItalic = 255 0 0 italic
redWithGreenBackgroundWithBoldItalic = 255 0 0 0 255 0 bold italic


## Style Rules¶

Style rules assign a style to matched tokens with syntax:

$Matcher :$Style


Or assigns a previously defined style definition:

$Matcher :$Ref


The left hand side of style rules matches a token, whereas the right hand side assigns a style by referring to a previously defined style definition, or by directly assigning a style. For example, the following matches a token type and references a style definition:

colorer

operator : black


whereas the following matches a token with a sort and constructor, and directly assigns a style:

colorer

ClassBodyDec.MethodDec : 0 255 0


## Matchers¶

There are several ways in which the matcher on the left-hand side of a style rule can be specified: by type, by sort, by constructor, or by sort and constructor.

### Match by Sort and Constructor¶

The combination of a token sort and constructor can be matched by specifying the $Sort.$Constructor. For example:

colorer

ClassBodyDec.MethodDec : yellow
ClassBodyDec.FieldDec  : red


### Match by Constructor¶

It is also possible to match constructors, regardless of their token sorts, using _ in place of the sort name. For example:

colorer

_.Str     : blue
_.StrCong : blue
_.QStr    : blue
_.QDollar : blue
_.QBr     : gray


### Match by Sort¶

Additionally, it is possible to match any constructor for a specific sort. For this, just specify the name of the sort, \$Sort. For example:

colorer

ID       : darkblue
TYPEID   : blue
JQTYPEID : blue
PQTYPEID : blue
FUNCID   : 153 51 0
JFUNCID  : 153 51 0
STRING   : 177 47 2


### Match by Type¶

Finally, the following built-in token types can be matched on:

• identifier — matches identifiers, found by lexical non-terminals without numbers;
• keyword — matches keywords, found by terminals in the syntax definition;
• layout — matches layout, such as whitespace and comments, found by layout definition;
• number — matches numbers, found by lexical non-terminals with numbers;
• operator — matches operations, found by terminals that contain just symbols (no characters);
• string — matches strings, found by lexical non-terminals that include quotation marks;
• unknown — matches tokens which the parser was unable to infer a type for.
• var
• error

For example, the following code defines a simple highlighting with token types:

colorer

keyword    : 153 51 153
identifier : black
string     : 177 47 2
number     : 17 131 22
operator   : black
layout     : 63 127 95 italic


Last update: 2022-09-21