oracular (5) dte-syntax.5.gz

Provided by: dte_1.10-1_amd64 bug

NAME

       dte-syntax - Format of syntax highlighting files used by dte(1)

SYNOPSIS

       Commands:

       Main commands:
          syntax name
          state name [emit-color]
          default color name...
          list [-i] name string...

       Conditionals:
          bufis [-i] string destination [emit-name]
          char [-bn] characters destination [emit-name]
          heredocend destination
          inlist list destination [emit-name]
          str [-i] string destination [emit-name]

       Default actions:
          eat destination [emit-name]
          heredocbegin subsyntax return-state
          noeat [-b] destination

       Other commands:
          recolor color [count]

DESCRIPTION

       A dte syntax file consists of multiple states. A state consists of optional conditionals and one default
       action. The best way understand the syntax is to read through some of the built-in syntax files, which
       can be printed with dte -b, for example:

              dte -b syntax/dte

       The basic syntax used is the same as in dterc(5) files, but the available commands are different.

       Conditionals and default actions have a destination state. The special destination state this can be used
       to jump to the current state.

COMMANDS

   Main commands
       syntax name
              Begin a new syntax. One syntax file can contain multiple syntax definitions, but you should only
              define one real syntax in one syntax file.

              See also: sub-syntaxes.

       state name [emit-color]
              Add new state. Conditionals (if any) and one default action must follow. The first state is the
              start state.

       default color name...
              Set default color for emitted name.

              Example:

                     default numeric oct dec hex

              If there is no color defined for oct, dec or hex then color numeric is used instead.

       list [-i] name string...
              Define a list of strings.

              Example:

                     list keyword if else for while do continue switch case

              Use the inlist command to test if a buffered string is in a list.

              -i     Make list case-insensitive.

   Conditionals
       bufis [-i] string destination [emit-name]
              Test if buffered bytes are same as string. If they are, emit emit-name and jump to destination
              state.

              -i     Case-insensitive.

       char [-bn] characters destination [emit-name]
              Test if current byte is in the characters list. If it is then emit emit-color and jump to
              destination state. If emit-name is not given then the destination state's emit name is used.

              characters is a list of strings. Ranges are supported (a-d is the same as abcd).

              -b     Add byte to buffer.

              -n     Invert character bitmap.

       heredocend destination
              Compare following characters to heredoc end delimiter and go to destination state if comparison is
              true.

       inlist list destination [emit-name]
              Test if buffered bytes are found in list. If found, emit emit-name and jump to destination state.

       str [-i] string destination [emit-name]
              See if following bytes are same as string. If they are, emit emit-name and jump to destination
              state.

              -i     Case-insensitive.

              NOTE: This conditional can be slow, especially if string is longer than two bytes.

   Default actions
       The last command of every state must be a default action. It is an unconditional jump.

       eat destination [emit-name]
              Consume byte, emit emit-name color and continue to destination state.

       heredocbegin subsyntax return-state
              Store buffered bytes as heredoc end delimiter and go to subsyntax. Sub-syntax is like any other
              sub-syntax but it must contain a heredocend conditional.

       noeat [-b] destination
              Continue to destination state without emitting color or consuming byte.

              -b     Don't stop buffering.

   Other commands
       recolor color [count]
              If count is given, recolor count previous bytes, otherwise recolor buffered bytes.

SUB-SYNTAXES

       Sub-syntaxes are useful when the same states are needed in many contexts.

       Sub-syntax names must be prefixed with .. It's recommended to also use the main syntax name in the
       prefix. For example .c-comment if c is the main syntax.

       A sub-syntax is a syntax in which some destination state's name is END. END is a special state name that
       is replaced by the state specified in another syntax.

       Example:

              # Sub-syntax
              syntax .c-comment

              state comment
                  char "*" star
                  eat comment

              state star comment
                  # END is a special state name
                  char / END comment
                  noeat comment

              # Main syntax
              syntax c

              state c code
                  char " \t\n" c
                  char -b a-zA-Z_ ident
                  char "\"" string
                  char "'" char
                  # Call sub-syntax
                  str "/*" .c-comment:c
                  eat c

              # Other states removed

       In this example the destination state .c-comment:c is a special syntax for calling a sub-syntax.
       .c-comment is the name of the sub-syntax and c is the return state defined in the main syntax. The whole
       sub-syntax tree is copied into the main syntax and all destination states in the sub-syntax whose name is
       END are replaced with c.

SEE ALSO

       dte(1), dterc(5)

AUTHORS

       Craig Barnes
       Timo Hirvonen

                                                    May 2020                                       DTE-SYNTAX(5)