Provided by: dte_1.10-1_amd64 bug


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



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

          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]


       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

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


   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.


                     default numeric oct dec hex

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

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


                     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.

       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 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.


              # 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.


       dte(1), dterc(5)


       Craig Barnes
       Timo Hirvonen

                                             May 2020                               DTE-SYNTAX(5)