runtime(omnimark): update and rewrite syntax script in Vim9 script

Note: this commit rewrites the omnimark syntax script in Vim9 script and
      is therefore probably incompatible with Neovim

closes: #16979

Signed-off-by: Peter Kenny <github.com@k1w1.cyou>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Peter Kenny
2025-03-26 19:52:50 +01:00
committed by Christian Brabandt
parent 9943d4790e
commit 14dec7b204
2 changed files with 831 additions and 103 deletions

1
.github/MAINTAINERS vendored
View File

@ -562,6 +562,7 @@ runtime/syntax/ninja.vim @nico
runtime/syntax/nix.vim @equill runtime/syntax/nix.vim @equill
runtime/syntax/nroff.vim @jmarshall runtime/syntax/nroff.vim @jmarshall
runtime/syntax/nsis.vim @k-takata runtime/syntax/nsis.vim @k-takata
runtime/syntax/omnimark.vim @kennypete
runtime/syntax/ondir.vim @jparise runtime/syntax/ondir.vim @jparise
runtime/syntax/opencl.vim @Freed-Wu runtime/syntax/opencl.vim @Freed-Wu
runtime/syntax/openvpn.vim @ObserverOfTime runtime/syntax/openvpn.vim @ObserverOfTime

View File

@ -1,106 +1,833 @@
" Vim syntax file vim9script
" Language: Omnimark # Vim syntax file
" Maintainer: Paul Terray <mailto:terray@4dconcept.fr> # Language: OmniMark
" Last Change: 11 Oct 2000 # Maintainer: Peter Kenny <kennypete.t2o3y@aleeas.com>
# Previous Maintainer: Paul Terray <mailto:terray@4dconcept.fr>
" quit when a syntax file was already loaded # Last Change: 2025-03-23
# License: Vim (see :help license)
# History: 2000-10-11 Vintage minimal syntax file (Paul Terray)
#
# - Syntax is grouped, generally, by type (action to rule), using the
# version 12 headings. Refer:
# https://developers.stilo.com/docs/html/keyword/type.html
# - Deprecated/legacy syntax back to version 4 is included.
# - OmniMark is largely case insensitive, with handled exceptions (e.g., %g)
# ----------------------------------------------------------------------------
syntax case ignore
# Current syntax exists: finish {{{
if exists("b:current_syntax") if exists("b:current_syntax")
finish finish
endif endif
# }}}
setlocal iskeyword=@,48-57,_,128-167,224-235,- # Keyword characters {{{
# !#%&*+-/0123456789<=>@
syn keyword omnimarkKeywords ACTIVATE AGAIN # ABCDEFGHIJKLMNOPQRSTUVWXYZ
syn keyword omnimarkKeywords CATCH CLEAR CLOSE COPY COPY-CLEAR CROSS-TRANSLATE # \_abcdefghijklmnopqrstuvwxyz|~
syn keyword omnimarkKeywords DEACTIVATE DECLARE DECREMENT DEFINE DISCARD DIVIDE DO DOCUMENT-END DOCUMENT-START DONE DTD-START setlocal iskeyword=33,35,37-38,42-43,45,47-57,60-62,64-90,92,95,97-122,124,126
syn keyword omnimarkKeywords ELEMENT ELSE ESCAPE EXIT # }}}
syn keyword omnimarkKeywords FAIL FIND FIND-END FIND-START FORMAT # _ action {{{
syn keyword omnimarkKeywords GROUP syntax keyword omnimarkAction activate
syn keyword omnimarkKeywords HALT HALT-EVERYTHING syntax keyword omnimarkAction assert
syn keyword omnimarkKeywords IGNORE IMPLIED INCLUDE INCLUDE-END INCLUDE-START INCREMENT INPUT syntax keyword omnimarkAction clear
syn keyword omnimarkKeywords JOIN syntax keyword omnimarkAction close
syn keyword omnimarkKeywords LINE-END LINE-START LOG LOOKAHEAD syntax keyword omnimarkAction collect-garbage
syn keyword omnimarkKeywords MACRO syntax match omnimarkAction "\v\c<%(copy)%(-clear)?"
syn keyword omnimarkKeywords MACRO-END MARKED-SECTION MARKUP-COMMENT MARKUP-ERROR MARKUP-PARSER MASK MATCH MINUS MODULO syntax keyword omnimarkAction deactivate
syn keyword omnimarkKeywords NEW NEWLINE NEXT syntax keyword omnimarkAction decrement
syn keyword omnimarkKeywords OPEN OUTPUT OUTPUT-TO OVER syntax keyword omnimarkAction discard
syn keyword omnimarkKeywords PROCESS PROCESS-END PROCESS-START PROCESSING-INSTRUCTION PROLOG-END PROLOG-IN-ERROR PUT syntax keyword omnimarkAction flush
syn keyword omnimarkKeywords REMOVE REOPEN REPEAT RESET RETHROW RETURN syntax match omnimarkAction "\v\c<%(halt)%(-everything)?"
syn keyword omnimarkKeywords WHEN WHITE-SPACE syntax keyword omnimarkAction increment
syn keyword omnimarkKeywords SAVE SAVE-CLEAR SCAN SELECT SET SGML SGML-COMMENT SGML-DECLARATION-END SGML-DTD SGML-DTDS SGML-ERROR SGML-IN SGML-OUT SGML-PARSE SGML-PARSER SHIFT SUBMIT SUCCEED SUPPRESS syntax keyword omnimarkAction log
syn keyword omnimarkKeywords SYSTEM-CALL syntax keyword omnimarkAction log-message
syn keyword omnimarkKeywords TEST-SYSTEM THROW TO TRANSLATE syntax keyword omnimarkAction match
syn keyword omnimarkKeywords UC UL UNLESS UP-TRANSLATE syntax keyword omnimarkAction new
syn keyword omnimarkKeywords XML-PARSE # new takes before and after (as in new x{"wilma"} after [2])
syntax keyword omnimarkAction after
syn keyword omnimarkCommands ACTIVE AFTER ANCESTOR AND ANOTHER ARG AS ATTACHED ATTRIBUTE ATTRIBUTES syntax keyword omnimarkAction before
syn keyword omnimarkCommands BASE BEFORE BINARY BINARY-INPUT BINARY-MODE BINARY-OUTPUT BREAK-WIDTH BUFFER BY # This is the only way 'next' is used (and it cannot be 'isnt'):
syn keyword omnimarkCommands CASE CHILDREN CLOSED COMPILED-DATE COMPLEMENT CONREF CONTENT CONTEXT-TRANSLATE COUNTER CREATED CREATING CREATOR CURRENT syntax match omnimarkAction "\v\c<%(next\s+group\s+is)"
syn keyword omnimarkCommands DATA-ATTRIBUTE DATA-ATTRIBUTES DATA-CONTENT DATA-LETTERS DATE DECLARED-CONREF DECLARED-CURRENT DECLARED-DEFAULTED DECLARED-FIXED DECLARED-IMPLIED DECLARED-REQUIRED syntax keyword omnimarkAction not-reached
syn keyword omnimarkCommands DEFAULT-ENTITY DEFAULTED DEFAULTING DELIMITER DIFFERENCE DIRECTORY DOCTYPE DOCUMENT DOCUMENT-ELEMENT DOMAIN-FREE DOWN-TRANSLATE DTD DTD-END DTDS syntax keyword omnimarkAction open
syn keyword omnimarkCommands ELEMENTS ELSEWHERE EMPTY ENTITIES ENTITY EPILOG-START EQUAL EXCEPT EXISTS EXTERNAL EXTERNAL-DATA-ENTITY EXTERNAL-ENTITY EXTERNAL-FUNCTION EXTERNAL-OUTPUT-FUNCTION syntax match omnimarkAction "\v\c<%(output)%(-to)?"
syn keyword omnimarkCommands EXTERNAL-TEXT-ENTITY syntax keyword omnimarkAction put
syn keyword omnimarkCommands FALSE FILE FUNCTION FUNCTION-LIBRARY # When alone, 'referent' is nearly always 'put...referent,' which is an action
syn keyword omnimarkCommands GENERAL GLOBAL GREATER-EQUAL GREATER-THAN GROUPS syntax keyword omnimarkAction referent
syn keyword omnimarkCommands HAS HASNT HERALDED-NAMES syntax match omnimarkAction "\v\c<%(remove)%(\s+key\s+of)?"
syn keyword omnimarkCommands ID ID-CHECKING IDREF IDREFS IN IN-LIBRARY INCLUSION INITIAL INITIAL-SIZE INSERTION-BREAK INSTANCE INTERNAL INVALID-DATA IS ISNT ITEM syntax keyword omnimarkAction reopen
syn keyword omnimarkCommands KEY KEYED syntax keyword omnimarkAction reset
syn keyword omnimarkCommands LAST LASTMOST LC LENGTH LESS-EQUAL LESS-THAN LETTERS LIBRARY LITERAL LOCAL syntax keyword omnimarkAction return
syn keyword omnimarkCommands MATCHES MIXED MODIFIABLE # 'scan' because it can start a line in a block of 'do *-parse ... done'
syn keyword omnimarkCommands NAME NAME-LETTERS NAMECASE NAMED NAMES NDATA-ENTITY NEGATE NESTED-REFERENTS NMTOKEN NMTOKENS NO NO-DEFAULT-IO NON-CDATA NON-IMPLIED NON-SDATA NOT NOTATION NUMBER-OF NUMBERS syntax keyword omnimarkAction scan
syn keyword omnimarkCommands NUTOKEN NUTOKENS syntax match omnimarkAction "\v\c<%(set)%(\s+%(buffer|creator\s+of|external-function|file|function-library|key\s+of|new|referent|stream))?"
syn keyword omnimarkCommands OCCURRENCE OF OPAQUE OPTIONAL OR syntax keyword omnimarkAction sgml-in
syn keyword omnimarkCommands PARAMETER PARENT PAST PATTERN PLUS PREPARENT PREVIOUS PROPER PUBLIC syntax keyword omnimarkAction sgml-out
syn keyword omnimarkCommands READ-ONLY READABLE REFERENT REFERENTS REFERENTS-ALLOWED REFERENTS-DISPLAYED REFERENTS-NOT-ALLOWED REMAINDER REPEATED REPLACEMENT-BREAK REVERSED syntax keyword omnimarkAction signal
syn keyword omnimarkCommands SILENT-REFERENT SIZE SKIP SOURCE SPECIFIED STATUS STREAM SUBDOC-ENTITY SUBDOCUMENT SUBDOCUMENTS SUBELEMENT SWITCH SYMBOL SYSTEM syntax keyword omnimarkAction submit
syn keyword omnimarkCommands TEXT-MODE THIS TIMES TOKEN TRUE syntax keyword omnimarkAction suppress
syn keyword omnimarkCommands UNANCHORED UNATTACHED UNION USEMAP USING syntax keyword omnimarkAction throw
syn keyword omnimarkCommands VALUE VALUED VARIABLE syntax keyword omnimarkAction void
syn keyword omnimarkCommands WITH WRITABLE # }}}
syn keyword omnimarkCommands XML XML-DTD XML-DTDS # _ built-in data type {{{
syn keyword omnimarkCommands YES # attribute-declaration: Every attribute-declaration instance has two
syn keyword omnimarkCommands #ADDITIONAL-INFO #APPINFO #CAPACITY #CHARSET #CLASS #COMMAND-LINE-NAMES #CONSOLE #CURRENT-INPUT #CURRENT-OUTPUT #DATA #DOCTYPE #DOCUMENT #DTD #EMPTY #ERROR #ERROR-CODE # properties: attribute-default-declaration and
syn keyword omnimarkCommands #FILE-NAME #FIRST #GROUP #IMPLIED #ITEM #LANGUAGE-VERSION #LAST #LIBPATH #LIBRARY #LIBVALUE #LINE-NUMBER #MAIN-INPUT #MAIN-OUTPUT #MARKUP-ERROR-COUNT #MARKUP-ERROR-TOTAL # attribute-value-declaration
syn keyword omnimarkCommands #MARKUP-PARSER #MARKUP-WARNING-COUNT #MARKUP-WARNING-TOTAL #MESSAGE #NONE #OUTPUT #PLATFORM-INFO #PROCESS-INPUT #PROCESS-OUTPUT #RECOVERY-INFO #SGML #SGML-ERROR-COUNT # attribute-default-declaration: is the abstract type of declared defaults for
syn keyword omnimarkCommands #SGML-ERROR-TOTAL #SGML-WARNING-COUNT #SGML-WARNING-TOTAL #SUPPRESS #SYNTAX #! # unspecified attribute values. Its concrete
# instances can be obtained with the following
syn keyword omnimarkPatterns ANY ANY-TEXT # four constants:
syn keyword omnimarkPatterns BLANK syntax keyword omnimarkConstant attribute-declared-conref
syn keyword omnimarkPatterns CDATA CDATA-ENTITY CONTENT-END CONTENT-START syntax keyword omnimarkConstant attribute-declared-current
syn keyword omnimarkPatterns DIGIT syntax keyword omnimarkConstant attribute-declared-implied
syn keyword omnimarkPatterns LETTER syntax keyword omnimarkConstant attribute-declared-required
syn keyword omnimarkPatterns NUMBER # and with two operators which take a string
syn keyword omnimarkPatterns PCDATA # default value argument:
syn keyword omnimarkPatterns RCDATA syntax match omnimarkOperator "\v\c<%(attribute-declared-defaulted\s+to)"
syn keyword omnimarkPatterns SDATA SDATA-ENTITY SPACE syntax match omnimarkOperator "\v\c<%(attribute-declared-fixed to)"
syn keyword omnimarkPatterns TEXT # attribute-value-declaration: is the abstract type of values that an
syn keyword omnimarkPatterns VALUE-END VALUE-START # attribute is declared to accept. Its concrete
syn keyword omnimarkPatterns WORD-END WORD-START # instances can be obtained with the following
# constants:
syn region omnimarkComment start=";" end="$" syntax match omnimarkConstant "\v\c<%(attribute-declared-fixed to)"
syntax keyword omnimarkConstant attribute-declared-id
" strings syntax keyword omnimarkConstant attribute-declared-idref
syn region omnimarkString matchgroup=Normal start=+'+ end=+'+ skip=+%'+ contains=omnimarkEscape syntax keyword omnimarkConstant attribute-declared-idrefs
syn region omnimarkString matchgroup=Normal start=+"+ end=+"+ skip=+%"+ contains=omnimarkEscape syntax keyword omnimarkConstant attribute-declared-name
syn match omnimarkEscape contained +%.+ syntax keyword omnimarkConstant attribute-declared-names
syn match omnimarkEscape contained +%[0-9][0-9]#+ syntax keyword omnimarkConstant attribute-declared-nmtoken
syntax keyword omnimarkConstant attribute-declared-nmtokens
"syn sync maxlines=100 syntax keyword omnimarkConstant attribute-declared-number
syn sync minlines=2000 syntax keyword omnimarkConstant attribute-declared-numbers
syntax keyword omnimarkConstant attribute-declared-nutoken
" Define the default highlighting. syntax keyword omnimarkConstant attribute-declared-nutokens
" Only when an item doesn't have highlighting yet # and with one operator that takes a string shelf
# argument listing all the values allowed for the
hi def link omnimarkCommands Statement # attribute:
hi def link omnimarkKeywords Identifier syntax keyword omnimarkOperator attribute-declared-group
hi def link omnimarkString String # content-model - the following six constants are the only possible values:
hi def link omnimarkPatterns Macro syntax keyword omnimarkConstant any-content-model
" hi def link omnimarkNumber Number syntax keyword omnimarkConstant cdata-content-model
hi def link omnimarkComment Comment syntax keyword omnimarkConstant element-content-model
hi def link omnimarkEscape Special syntax keyword omnimarkConstant empty-content-model
syntax keyword omnimarkConstant mixed-content-model
syntax keyword omnimarkConstant rcdata-content-model
let b:current_syntax = "omnimark" # refer also:
# developers.stilo.com/docs/html/keyword/create-element-declaration.html
" vim: ts=8 #
# declared-attribute is and abstract type with subtypes:
# implied-attribute
# specified-attribute
# dtd abstract data type has subtypes:
# sgml-dtd
# xml-dtd
# element-declaration
# entity-declaration
# markup-element-event
# markup-event has subtypes:
# markup-point-event
# markup-region-event
# }}}
# _ built-in entity {{{
syntax match omnimarkBuiltinEntity "\v\c<%(#capacity)"
syntax match omnimarkBuiltinEntity "\v\c<%(#charset)"
syntax match omnimarkBuiltinEntity "\v\c<%(#document)"
syntax match omnimarkBuiltinEntity "\v\c<%(#dtd)"
syntax match omnimarkBuiltinEntity "\v\c<%(#implied)"
syntax match omnimarkBuiltinEntity "\v\c<%(#schema)"
syntax match omnimarkBuiltinEntity "\v\c<%(#syntax)"
# }}}
# _ built-in shelf {{{
syntax match omnimarkBuiltinShelf "\v\c<%(#additional-info)"
syntax match omnimarkBuiltinShelf "\v\c<%(#appinfo)"
syntax match omnimarkBuiltinShelf "\v\c<%(#args)"
syntax match omnimarkBuiltinShelf "\v\c<%(#class)"
syntax match omnimarkBuiltinShelf "\v\c<%(#command-line-names)"
syntax match omnimarkBuiltinShelf "\v\c<%(#console)"
syntax match omnimarkBuiltinShelf "\v\c<%(#content)"
syntax match omnimarkBuiltinShelf "\v\c<%(#current-dtd)"
syntax match omnimarkBuiltinShelf "\v\c<%(#current-input)"
syntax match omnimarkBuiltinShelf "\v\c<%(#current-markup-event)"
syntax match omnimarkBuiltinShelf "\v\c<%(#current-output)"
syntax match omnimarkBuiltinShelf "\v\c<%(#doctype)"
syntax match omnimarkBuiltinShelf "\v\c<%(#error)"
syntax match omnimarkBuiltinShelf "\v\c<%(#error-code)"
syntax match omnimarkBuiltinShelf "\v\c<%(#file-name)"
syntax match omnimarkBuiltinShelf "\v\c<%(#language-version)"
syntax match omnimarkBuiltinShelf "\v\c<%(#libpath)"
syntax match omnimarkBuiltinShelf "\v\c<%(#library)"
syntax match omnimarkBuiltinShelf "\v\c<%(#libvalue)"
syntax match omnimarkBuiltinShelf "\v\c<%(#line-number)"
syntax match omnimarkBuiltinShelf "\v\c<%(#log)"
syntax match omnimarkBuiltinShelf "\v\c<%(#main-input)"
syntax match omnimarkBuiltinShelf "\v\c<%(#main-output)"
syntax match omnimarkBuiltinShelf "\v\c<%(#markup-error-count)"
syntax match omnimarkBuiltinShelf "\v\c<%(#markup-error-total)"
syntax match omnimarkBuiltinShelf "\v\c<%(#markup-parser)"
syntax match omnimarkBuiltinShelf "\v\c<%(#markup-warning-count)"
syntax match omnimarkBuiltinShelf "\v\c<%(#markup-warning-total)"
syntax match omnimarkBuiltinShelf "\v\c<%(#message)"
syntax match omnimarkBuiltinShelf "\v\c<%(#output)"
syntax match omnimarkBuiltinShelf "\v\c<%(#platform-info)"
syntax match omnimarkBuiltinShelf "\v\c<%(#process-input)"
syntax match omnimarkBuiltinShelf "\v\c<%(#process-output)"
syntax match omnimarkBuiltinShelf "\v\c<%(#recovery-info)"
syntax match omnimarkBuiltinShelf "\v\c<%(#sgml)"
syntax match omnimarkBuiltinShelf "\v\c<%(#sgml-error-count)"
syntax match omnimarkBuiltinShelf "\v\c<%(#sgml-error-total)"
syntax match omnimarkBuiltinShelf "\v\c<%(#sgml-warning-count)"
syntax match omnimarkBuiltinShelf "\v\c<%(#sgml-warning-total)"
syntax match omnimarkBuiltinShelf "\v\c<%(#suppress)"
syntax match omnimarkBuiltinShelf "\v\c<%(#xmlns-names)"
syntax keyword omnimarkBuiltinShelf attributes
syntax match omnimarkBuiltinShelf "\v\c<%(current)%(\s+%(element%(s)?|dtd|sgml-dtd))"
syntax keyword omnimarkBuiltinShelf data-attributes
syntax keyword omnimarkBuiltinShelf referents
syntax keyword omnimarkBuiltinShelf sgml-dtds
# deprecated synonym for sgml-dtds:
syntax keyword omnimarkBuiltinShelf dtds
syntax keyword omnimarkBuiltinShelf xml-dtds
syntax match omnimarkBuiltinShelf "\v\c<%(specified\s+attributes)"
# }}}
# _ catch name {{{
syntax match omnimarkCatchName "\v\c<%(#external-exception)"
# external exception parameters
syntax keyword omnimarkCatchName identity
syntax keyword omnimarkCatchName message
syntax keyword omnimarkCatchName location
syntax match omnimarkCatchName "\v\c<%(#markup-end)"
syntax match omnimarkCatchName "\v\c<%(#markup-point)"
syntax match omnimarkCatchName "\v\c<%(#markup-start)"
syntax match omnimarkCatchName "\v\c<%(#program-error)"
# }}}
# _ constant {{{
syntax keyword omnimarkConstant false
syntax keyword omnimarkConstant true
# Example: local stream u initial {unattached}
syntax keyword omnimarkConstant unattached
# }}}
# _ control structure {{{
syntax match omnimarkControlStructure "\v\c<%(#first)"
syntax match omnimarkControlStructure "\v\c<%(#group)"
syntax match omnimarkControlStructure "\v\c<%(#item)"
syntax match omnimarkControlStructure "\v\c<%(#last)"
syntax match omnimarkControlStructure "\v%(\s)?%(-\>)%(\s)?"
syntax keyword omnimarkControlStructure again
syntax keyword omnimarkControlStructure always
syntax keyword omnimarkControlStructure as
syntax keyword omnimarkControlStructure case
syntax keyword omnimarkControlStructure catch
syntax match omnimarkControlStructure "\v\c<%(do)>%(%(\s|\n)+%((markup|sgml|xml)-parse|scan|select|select-type|skip%(\s+over)?|unless|when))?"
# with id-checking and with utf-8, example:
# do sgml-parse document with id-checking false scan file "my.sgml"
syntax keyword omnimarkControlStructure id-checking
syntax keyword omnimarkControlStructure utf-8
syntax keyword omnimarkControlStructure with
syntax keyword omnimarkControlStructure done
syntax keyword omnimarkControlStructure else
syntax keyword omnimarkControlStructure exit
syntax match omnimarkControlStructure "\v\c<%(repeat)>%(\s+%(for|over%(\s+current elements)?|scan|to))?"
# Example: repeat over reversed
syntax keyword omnimarkControlStructure reversed
# Note: repeat over attribute(s) not needed - handled separately
# Note: repeat over data-attribute(s) not needed - handled separately
# Note: repeat over referents not needed - handled separately
syntax keyword omnimarkControlStructure rethrow
syntax keyword omnimarkControlStructure select
syntax keyword omnimarkControlStructure unless
syntax match omnimarkControlStructure "\v\c<%(using)%( %(%(data-)?attribute%(s)?|catch|group|input as|nested-referents|output\s+as|referents))?"
syntax keyword omnimarkControlStructure when
# }}}
# _ data type {{{
# (not a v12 heading)
syntax keyword omnimarkDataType bcd
syntax keyword omnimarkDataType counter
# db.database data type - refer omdb, below, for library functions
syntax match omnimarkDataType "\v\c<%(db)%([.])?%(database)"
syntax keyword omnimarkDataType document
syntax keyword omnimarkDataType float
syntax keyword omnimarkDataType instance
syntax match omnimarkDataType "\v\c<%(int32)"
syntax keyword omnimarkDataType integer
syntax match omnimarkDataType "\v\c<%(markup\s+sink)"
syntax match omnimarkDataType "\v\c<%(markup\s+source)"
syntax keyword omnimarkDataType pattern
syntax keyword omnimarkDataType string
syntax match omnimarkDataType "\v\c<%(string\s+sink)"
syntax match omnimarkDataType "\v\c<%(string\s+source)"
syntax keyword omnimarkDataType stream
syntax keyword omnimarkDataType string
syntax keyword omnimarkDataType subdocument
syntax keyword omnimarkDataType switch
# }}}
# _ declaration/definition {{{
syntax keyword omnimarkDeclaration constant
syntax keyword omnimarkDeclaration context-translate
syntax keyword omnimarkDeclaration created by
syntax keyword omnimarkDeclaration cross-translate
syntax keyword omnimarkDeclaration declare
syntax match omnimarkDeclaration "\v\c<%(declare)%(\s+%(data-letters|function-library|heralded-names|markup-identification))?"
# Note: declare #error, #main-input, #main-output, #process-input,
# #process-output, catch, data-letters, function-library, letters,
# name-letters, no-default-io, opaque, record
# - Those are all handed as separate keywords/matches
syntax match omnimarkDeclaration "\v\c<%(define\s+conversion-function)"
syntax match omnimarkDeclaration "\v\c<%(define\s+external)\s+%(source\s+)?%(function)"
# in function-library is part of an external function
syntax match omnimarkDeclaration "\v\c<%(in\s+function-library)"
syntax match omnimarkDeclaration "\v\c<%(define\s+external\s+output)"
syntax match omnimarkDeclaration "\v\c<%(define\s+function)"
syntax match omnimarkDeclaration "\v\c<%(define\s+\w+function)"
# Example: define integer function add (value integer x, value ...)
syntax keyword omnimarkDeclaration value
syntax match omnimarkDeclaration "\v\c<%(define\s+infix-function)"
syntax match omnimarkDeclaration "\v\c<%(define\s+overloaded\s+function)"
syntax match omnimarkDeclaration "\v\c<%(define\s+string\s+sink\s+function)"
syntax match omnimarkDeclaration "\v\c<%(define\s+string\s+source\s+function)"
# Some combinations are missed, so the general, 'define', is needed too:
syntax match omnimarkDeclaration "\v\c<%(define\s+)"
syntax keyword omnimarkDeclaration delimiter
syntax keyword omnimarkDeclaration domain-bound
syntax keyword omnimarkDeclaration down-translate
syntax keyword omnimarkDeclaration dynamic
syntax keyword omnimarkDeclaration elsewhere
syntax keyword omnimarkDeclaration escape
syntax match omnimarkDeclaration "\v\c<%(export\s+as\s+opaque)"
syntax keyword omnimarkDeclaration export
syntax keyword omnimarkDeclaration field
syntax keyword omnimarkDeclaration function
syntax keyword omnimarkDeclaration global
syntax match omnimarkDeclaration "\v\c<%(group)%(s)?"
syntax keyword omnimarkDeclaration import
syntax match omnimarkDeclaration "\v\c<%(include)%(-guard)?"
syntax match omnimarkDeclaration "\v\c<%(initial)%(-size)?"
syntax keyword omnimarkDeclaration letters
syntax keyword omnimarkDeclaration library
syntax keyword omnimarkDeclaration local
syntax match omnimarkDeclaration "\v\c<%(macro)%(-end)?"
# macros can take an arg and/or a token (or args or tokens)
syntax keyword omnimarkDeclaration arg
syntax keyword omnimarkDeclaration token
syntax keyword omnimarkDeclaration modifiable
syntax keyword omnimarkDeclaration module
syntax keyword omnimarkDeclaration name-letters
syntax match omnimarkDeclaration "\v\c<%(namecase\s+entity)"
syntax match omnimarkDeclaration "\v\c<%(namecase\s+general)"
syntax keyword omnimarkDeclaration newline
syntax keyword omnimarkDeclaration no-default-io
syntax keyword omnimarkDeclaration opaque
syntax keyword omnimarkDeclaration optional
syntax keyword omnimarkDeclaration overriding
syntax match omnimarkDeclaration "\v\c<%(prefixed\s+by)"
syntax keyword omnimarkDeclaration read-only
syntax keyword omnimarkDeclaration record
syntax keyword omnimarkDeclaration remainder
syntax keyword omnimarkDeclaration require
syntax keyword omnimarkDeclaration save
syntax keyword omnimarkDeclaration save-clear
syntax keyword omnimarkDeclaration silent-referent
syntax keyword omnimarkDeclaration size
syntax keyword omnimarkDeclaration supply
syntax keyword omnimarkDeclaration symbol
syntax keyword omnimarkDeclaration unprefixed
syntax keyword omnimarkDeclaration up-translate
syntax keyword omnimarkDeclaration use
syntax keyword omnimarkDeclaration variable
syntax keyword omnimarkDeclaration write-only
# }}}
# _ element qualifier {{{
syntax keyword omnimarkElementQualifier ancestor
syntax keyword omnimarkElementQualifier doctype
syntax keyword omnimarkElementQualifier document-element
syntax match omnimarkElementQualifier "\v\c<%(open\s+element)"
syntax keyword omnimarkElementQualifier parent
syntax keyword omnimarkElementQualifier preparent
syntax keyword omnimarkElementQualifier previous
# }}}
# _ modifier {{{
syntax match omnimarkModifier "\v\c<%(#base)"
syntax match omnimarkModifier "\v\c<%(#full)"
syntax match omnimarkModifier "\v\c<%(#xmlns)"
syntax keyword omnimarkModifier append
syntax keyword omnimarkModifier binary-input
syntax keyword omnimarkModifier binary-mode
syntax keyword omnimarkModifier binary-output
syntax keyword omnimarkModifier break-width
syntax keyword omnimarkModifier buffered
syntax match omnimarkModifier "\v\c<%(declare\s+#main-output\s+has\s+domain-free)"
syntax keyword omnimarkModifier defaulting
syntax keyword omnimarkModifier domain-free
syntax keyword omnimarkModifier notation
# of may be standalone, e.g., data-attribute colwidth of (attribute name)
syntax match omnimarkModifier "\v\c<%(of)%(\s%(ancestor|doctype|element|open element|%(pre)?parent))?"
syntax keyword omnimarkModifier referents-allowed
syntax keyword omnimarkModifier referents-displayed
syntax keyword omnimarkModifier referents-not-allowed
syntax keyword omnimarkModifier text-mode
syntax keyword omnimarkModifier unbuffered
# : (field selection operator) [not included]
# ` (keyword access character) [not included]
# }}}
# _ operator {{{
syntax keyword omnimarkOperator !
syntax keyword omnimarkOperator not
syntax keyword omnimarkOperator !=
# 'isnt equal' is handled by separate keywords
syntax keyword omnimarkOperator !==
syntax match omnimarkOperator "\%(#!\)"
syntax match omnimarkOperator "\v\c<%(#empty)"
# Example: usemap is #none:
syntax match omnimarkOperator "\v\c<%(#none)"
syntax keyword omnimarkOperator %
syntax keyword omnimarkOperator format
syntax keyword omnimarkOperator &
syntax keyword omnimarkOperator and
syntax keyword omnimarkOperator *
syntax keyword omnimarkOperator times
syntax keyword omnimarkOperator **
syntax keyword omnimarkOperator power
syntax keyword omnimarkOperator +
syntax keyword omnimarkOperator plus
syntax keyword omnimarkOperator -
syntax keyword omnimarkOperator minus
syntax keyword omnimarkOperator negate
syntax keyword omnimarkOperator /
syntax keyword omnimarkOperator divide
syntax keyword omnimarkOperator <
syntax keyword omnimarkOperator less-than
syntax keyword omnimarkOperator greater-equal
syntax keyword omnimarkOperator <=
syntax keyword omnimarkOperator less-equal
syntax keyword omnimarkOperator =
syntax keyword omnimarkOperator equal
# 'is equal' is handled by separate keywords
syntax keyword omnimarkOperator ==
syntax match omnimarkOperator "\v<[=][>]\s*"
syntax keyword omnimarkOperator >
syntax keyword omnimarkOperator greater-than
syntax keyword omnimarkOperator >=
syntax keyword omnimarkOperator greater-equal
syntax keyword omnimarkOperator abs
syntax keyword omnimarkOperator active
syntax keyword omnimarkOperator attribute
# attribute is defaulted, implied, specified: split to single keywords
# because it can be isnt too. Similarly for ancestor (is/isnt)
# with ancestor being an element qualifier.
# Tests for element attributes, e.g.:
# do when attribute myid is (id | idref | idrefs)
# cdata (already omnimarkPattern)
# name (already omnimarkOperator)
syntax keyword omnimarkAttributeType names
# number: match rather than keyword since "number of" is an operator
syntax match omnimarkAttributeType "\v\c<%(number)"
syntax keyword omnimarkAttributeType numbers
syntax keyword omnimarkAttributeType nmtoken
syntax keyword omnimarkAttributeType nmtokens
syntax keyword omnimarkAttributeType nutoken
syntax keyword omnimarkAttributeType nutokens
syntax keyword omnimarkAttributeType id
syntax keyword omnimarkAttributeType idref
syntax keyword omnimarkAttributeType idrefs
# notation (already omnimarkModifier)
# entity (already omnimarkOperator)
# entities (already omnimarkOperator)
syntax keyword omnimarkOperator base
syntax keyword omnimarkOperator binary
syntax keyword omnimarkOperator cast
syntax keyword omnimarkOperator ceiling
syntax keyword omnimarkOperator children
syntax keyword omnimarkOperator compiled-date
syntax keyword omnimarkOperator complement
syntax match omnimarkOperator "\v\c<%(content\s+of)"
syntax keyword omnimarkOperator create-attribute-declaration
syntax keyword omnimarkOperator create-element-declaration
syntax keyword omnimarkOperator create-element-event
syntax keyword omnimarkOperator create-processing-instruction-event
syntax keyword omnimarkOperator create-specified-attribute
syntax keyword omnimarkOperator create-unspecified-attribute
syntax keyword omnimarkOperator creating
syntax match omnimarkOperator "\v\c<%(creator\s+of)"
syntax keyword omnimarkOperator data-attribute
syntax keyword omnimarkOperator date
syntax match omnimarkOperator "\v\c<%(declaration\s+of)"
syntax keyword omnimarkOperator declared-elements
syntax keyword omnimarkOperator declared-general-entities
syntax keyword omnimarkOperator declared-parameter-entities
syntax keyword omnimarkOperator defaulted
syntax keyword omnimarkOperator difference
syntax match omnimarkOperator "\v\c<%(doctype\s+is)"
syntax keyword omnimarkOperator drop
syntax match omnimarkOperator "\v\c<%(element\s+is)"
syntax match omnimarkOperator "\v\c<%(elements\s+of)"
syntax match omnimarkOperator "\v\c<%(entity\s+is)"
syntax keyword omnimarkOperator except
syntax keyword omnimarkOperator exists
syntax keyword omnimarkOperator exp
syntax keyword omnimarkOperator external-function
syntax keyword omnimarkOperator file
syntax keyword omnimarkOperator floor
syntax match omnimarkOperator "\v\c<%(function-library\s+of)"
syntax keyword omnimarkOperator has
syntax keyword omnimarkOperator hasnt
# 'has'/'hasnt' (before 'key'/'^' or 'item'/'@' (other obscure things too?):
syntax keyword omnimarkOperator key
syntax match omnimarkOperator "\v[\^]"
# 'item' is addressed elsewhere - @ needs to be a match, not keyword
syntax match omnimarkOperator "\v<[@]"
syntax keyword omnimarkOperator implied
syntax keyword omnimarkOperator in-codes
syntax keyword omnimarkOperator is
syntax keyword omnimarkOperator isnt
# 'is'/'isnt' (usually before, or sometime after, e.g., 'content isnt'):
syntax keyword omnimarkOperator attached
syntax keyword omnimarkOperator buffer
syntax keyword omnimarkOperator catchable
syntax keyword omnimarkOperator cdata-entity
syntax keyword omnimarkOperator closed
syntax keyword omnimarkOperator conref
syntax keyword omnimarkOperator content
# 'content is' ... empty, any, cdata, rcdata, mixed, conref
syntax keyword omnimarkOperator default-entity
syntax keyword omnimarkOperator directory
# 'entity'/'entities', e.g., 'attribute x is (entity | entities)'
syntax match omnimarkOperator "\v\c<%(entit)%(y|ies)"
syntax keyword omnimarkOperator external
# E.g., 'open s as external-output-function' (v. buffer, etc.) '-call'?
syntax match omnimarkOperator "\v\c<%(external-output-function)%(-call)?"
syntax keyword omnimarkOperator file
syntax keyword omnimarkOperator general
syntax keyword omnimarkOperator in-library
syntax keyword omnimarkOperator internal
syntax keyword omnimarkOperator keyed
syntax keyword omnimarkOperator markup-parser
syntax keyword omnimarkOperator ndata-entity
# These are not to be confused with the omnimarkAction, 'open'
syntax match omnimarkOperator "\v\c<%(is\s+open)"
syntax match omnimarkOperator "\v\c<%(isnt\s+open)"
syntax keyword omnimarkOperator parameter
syntax keyword omnimarkOperator past
syntax keyword omnimarkOperator public
syntax keyword omnimarkOperator readable
# These are not to be confused with the omnimarkAction, 'referent'
syntax match omnimarkOperator "\v\c<%(is\s+referent)"
syntax match omnimarkOperator "\v\c<%(isnt\s+referent)"
syntax keyword omnimarkOperator sdata-entity
# Deprecated form - markup-parser is recommended
syntax keyword omnimarkOperator sgml-parser
syntax keyword omnimarkOperator subdoc-entity
syntax keyword omnimarkOperator system
syntax keyword omnimarkOperator thrown
syntax match omnimarkOperator "\v\c<%(item)%(\sof)?%(\s%(data-)?attributes)?"
syntax match omnimarkOperator "\v\c<%(key\s+of)"
# 'key of attribute'/s not needed: 'key of' and 'attribute' are separate
# 'key of data-attribute'/s not needed: 'key of' &c. are separate
# 'key of referents' not needed: 'key of' and 'referents' are separate
syntax keyword omnimarkOperator last
syntax keyword omnimarkOperator lastmost
syntax match omnimarkOperator "\v\c<%(length\s*of)"
syntax keyword omnimarkOperator literal
syntax keyword omnimarkOperator ln
syntax keyword omnimarkOperator log10
syntax keyword omnimarkOperator lookahead
# 'lookahead not' not needed: 'lookahead' and 'not' are separate
syntax keyword omnimarkOperator mask
syntax keyword omnimarkOperator matches
syntax keyword omnimarkOperator modulo
syntax match omnimarkOperator "\v\c<%(name)>%(\s+of)?%(\s+current)?%(\s+element)?"
syntax keyword omnimarkOperator named
syntax match omnimarkOperator "\v\c<%(notation\s+equals)"
syntax match omnimarkOperator "\v\c<%(number\s+of)"
# 'number of attribute'/s not needed: 'number of' and 'attribute' are separate
# 'number of current elements' is not needed: 'number of' &c. are separate
syntax match omnimarkOperator "\v\c<%(number\s+of\s+current\s+subdocuments)"
# 'number of data-attribute'/s not needed: 'number of' &c. are separate
# 'number of referents' not needed: 'number of' and 'referents' are separate
syntax keyword omnimarkOperator occurrence
syntax match omnimarkOperator "\v\c<%(open\s+element\s+is)"
syntax match omnimarkOperator "\v\c<%(parent\s+is)"
syntax match omnimarkOperator "\v\c<%(preparent\s+is)"
syntax match omnimarkOperator "\v\c<%(previous\s+is)"
syntax match omnimarkOperator "\v\c<%(public-identifier\s+of)"
syntax match omnimarkOperator "\v\c<%(referents\s+has\s+key)"
syntax match omnimarkOperator "\v\c<%(referents\s+is\s+attached)"
syntax keyword omnimarkOperator round
syntax keyword omnimarkOperator shift
syntax keyword omnimarkOperator specified
syntax keyword omnimarkOperator sqrt
# E.g., last proper? subelement _element-qualifier_ is/isnt
syntax keyword omnimarkOperator subelement
syntax keyword omnimarkOperator system-call
syntax match omnimarkOperator "\v\c<%(system-identifier\s+of)"
syntax keyword omnimarkOperator status
# E.g., 'status ... is (proper | inclusion)'
syntax keyword omnimarkOperator inclusion
syntax keyword omnimarkOperator proper
# E.g., 'last content {element-qualifier} is #DATA'
syntax match omnimarkOperator "\v\c<%(#data)"
syntax keyword omnimarkOperator take
# 'this' only appears before 'referent', so requires no standalone 'this'
syntax match omnimarkOperator "\v\c<%(this\s*referent)"
syntax keyword omnimarkOperator to
syntax keyword omnimarkOperator truncate
syntax keyword omnimarkOperator ul
syntax keyword omnimarkOperator union
syntax keyword omnimarkOperator usemap
syntax keyword omnimarkOperator valued
syntax keyword omnimarkOperator writable
syntax keyword omnimarkOperator xmlns-name
syntax match omnimarkOperator "\v%(\s)%([\\])%(\s)"
syntax match omnimarkOperator "\v%(\s)([_])%(\s)"
syntax match omnimarkOperator "\v%(\s)([\|])%(\s)"
syntax keyword omnimarkOperator or
syntax match omnimarkOperator "\v%(\s)([\|][\|])%(\s)"
syntax keyword omnimarkOperator join
syntax match omnimarkOperator "\v%(\s)([\|][\|][\*])%(\s)"
syntax keyword omnimarkOperator repeated
syntax match omnimarkOperator "\v%(\s)([~])"
# }}}
# _ pattern {{{
syntax match omnimarkPattern "\v%(\s)%(\=\|)"
syntax match omnimarkPattern "\v\c<%(any)%(\+%(\+)?|*%(*)?|\?)?"
syntax match omnimarkPattern "\v\c<%(any-text)%(\+|*|\?)?"
syntax match omnimarkPattern "\v\c<%(blank)%(\+|*|\?)?"
syntax keyword omnimarkPattern cdata
syntax keyword omnimarkPattern content-end
syntax keyword omnimarkPattern content-start
syntax match omnimarkPattern "\v\c<%(digit)%(\+|*|\?)?"
syntax keyword omnimarkPattern empty
syntax match omnimarkPattern "\v\c<%(lc)%(\+|*|\?)?"
syntax match omnimarkPattern "\v\c<%(letter)%(\+|*|\?)?"
syntax keyword omnimarkPattern line-end
syntax keyword omnimarkPattern line-start
syntax keyword omnimarkPattern mixed
syntax keyword omnimarkPattern non-cdata
syntax keyword omnimarkPattern non-sdata
syntax keyword omnimarkPattern null
syntax keyword omnimarkPattern pcdata
syntax keyword omnimarkPattern rcdata
syntax keyword omnimarkPattern sdata
syntax match omnimarkPattern "\v\c<%(space)%(\+|*|\?)?"
syntax match omnimarkPattern "\v\c<%(text)%([[:space:]\n])"
syntax match omnimarkPattern "\v\c<%(uc)%(\+|*|\?)?"
syntax keyword omnimarkPattern unanchored
syntax keyword omnimarkPattern value-end
syntax keyword omnimarkPattern value-start
syntax match omnimarkPattern "\v\c<%(white-space)%(\+|*|\?)?"
syntax keyword omnimarkPattern word-end
syntax keyword omnimarkPattern word-start
syntax match omnimarkPattern "\v%(\s)%(\|\=)"
# }}}
# _ rule {{{
syntax keyword omnimarkRule data-content
syntax keyword omnimarkRule document-end
syntax keyword omnimarkRule document-start
syntax keyword omnimarkRule document-type-declaration
syntax keyword omnimarkRule dtd-end
syntax keyword omnimarkRule dtd-start
syntax keyword omnimarkRule element
syntax keyword omnimarkRule epilog-start
syntax keyword omnimarkRule external-entity
syntax keyword omnimarkRule external-data-entity
syntax keyword omnimarkRule external-text-entity
syntax match omnimarkRule "\v\c<%(external-text-entity\s+#document)"
syntax keyword omnimarkRule find
syntax keyword omnimarkRule find-end
syntax keyword omnimarkRule find-start
syntax keyword omnimarkRule insertion-break
syntax keyword omnimarkRule invalid-data
syntax match omnimarkRule "\v\c<%(marked-section)%(\s+%(cdata|ignore|include-%(end|start)|rcdata))?"
syntax keyword omnimarkRule markup-comment
syntax keyword omnimarkRule markup-error
syntax keyword omnimarkRule process
syntax keyword omnimarkRule process-end
syntax keyword omnimarkRule processing-instruction
syntax keyword omnimarkRule process-start
syntax keyword omnimarkRule prolog-end
syntax keyword omnimarkRule prolog-in-error
syntax keyword omnimarkRule replacement-break
syntax keyword omnimarkRule sgml-comment
syntax keyword omnimarkRule sgml-declaration-end
syntax keyword omnimarkRule sgml-error
syntax keyword omnimarkRule translate
syntax keyword omnimarkRule xmlns-change
# }}}
# Libraries {{{
# ombase64
syntax match omnimarkLibrary "\v\c<%(base64[.])%([orw])%([[:print:]])+"
# ombcd
# (NB: abs, ceiling, exp, floor, ln, log10, round, sqrt, and truncate
# are all operators)
syntax match omnimarkLibrary "\v\c<%(ombcd-version)"
# ombessel
syntax match omnimarkLibrary "\v\c<%(j0|j1|jn|y0|y1|yn)"
# ombig5
syntax match omnimarkLibrary "\v\c<%(big5[.])%([orw])%([[:print:]])+"
# omblowfish and omffblowfish
syntax match omnimarkLibrary "\v\c<%(blowfish[.])%([deorsw])%(\a|-)+"
# omcgi
syntax match omnimarkLibrary "\v\c<%(cgiGet)%([EQ])\a+"
# omff8859
syntax match omnimarkLibrary "\v\c<%(iso8859[.])%([iorw])%([[:print:]])+"
# omfloat
# (NB: uses same operator names as ombcd except for the following)
syntax match omnimarkLibrary "\v\c<%(is-nan)"
syntax match omnimarkLibrary "\v\c<%(omfloat-version)"
# omdate
syntax match omnimarkLibrary "\v\c<%(add-to-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(arpadate-to-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(format-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(now-as-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(round-down-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(round-up-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(ymdhms-)%([adjmst])%(\a|-)+"
syntax match omnimarkLibrary "\v\c<%(ymd-weekday)"
# omdb
syntax match omnimarkLibrary "\v\c<%(db[.])%([acdefimopqrstuw])%(\a|-|1)+"
# omffeuc
syntax match omnimarkLibrary "\v\c<%(euc[.])%([orw])%(\a|-)+"
# omffjis
syntax match omnimarkLibrary "\v\c<%(jis[.])%([orw])%(\a|-)+"
# omffutf16 and omffutf32
syntax match omnimarklibrary "\v\c<%(utf)%(16|32)%([.])%([orw])%(\a|-)+"
# omfloat
syntax match omnimarklibrary "\v\C<%(FP_)%([a-z])+\d?"
# omfsys
syntax match omnimarkLibrary "\v\C<%(FS_)%([CDGLMR])\a+"
# omftp
syntax match omnimarkLibrary "\v\c<%(FTP)%([CIL])\a+"
# omhttp
syntax match omnimarkLibrary "\v\c<%(Http)%([CORS])\a+"
# omiobuf
syntax match omnimarkLibrary "\v\c<%(iobuf[.])%([brw])\a+"
# omldap
syntax match omnimarkLibrary "\v\c<%(ldap[.])%([acdemnors])%(\a|-)+"
# omprocess
syntax match omnimarkLibrary "\v\c<%(command-line)"
syntax match omnimarkLibrary "\v\c<%(executable-name)"
syntax match omnimarkLibrary "\v\c<%(execute)"
syntax match omnimarkLibrary "\v\c<%(glob)"
syntax match omnimarkLibrary "\v\c<%(omprocess-version)"
# omrandom
syntax match omnimarkLibrary "\v\c<%(random[.])%([eosu])%(\a|-)+"
# omunicode
syntax match omnimarkLibrary "\v\c<%(unicode[.])%([bgo])%(\a|-)+"
# omutf8
syntax match omnimarkLibrary "\v\c<%(utf8[.])%([bceilmos])%(\a|8|-)+"
# omioe/omfio
syntax match omnimarkLibrary "\v\c<%(get-exception-status)"
syntax match omnimarkLibrary "\v\c<%(io-exception-text)"
syntax match omnimarkLibrary "\v\c<%(new-io-exception)"
syntax match omnimarkLibrary "\v\c<%(set-voluntary-end-exception)"
syntax match omnimarkLibrary "\v\c<%(%(Big5|euc|jis|sjis|utf16)%(-))?%(%(in|out)put-file)"
# omioprotocol
syntax match omnimarkLibrary "\v\c<%(IOProtocol)%([EILMS])\a+"
# ommail
syntax match omnimarkLibrary "\v\c<%(Mail)%([ILO]\a+)"
# omtrig
syntax match omnimarkLibrary "\v\c<%(a)?%(cos%(h)?|sin%(h)?|tan%(h|2)?|hypot)"
# omnetutl
syntax match omnimarkLibrary "\v\c<%(from-net-long)"
syntax match omnimarkLibrary "\v\c<%(net-long)"
syntax match omnimarkLibrary "\v\c<%(NET)%([GIL]\a+)"
syntax match omnimarkLibrary "\v\c<%(to-net-long)"
# omnetutil
syntax match omnimarkLibrary "\v\c<%(netutil[.])%([fhnot]%(\a|3|2|-)+)"
# omoci
syntax match omnimarkLibrary "\v\c<%(OCI_)%([GLoS]\a+)"
# omodbc
syntax match omnimarkLibrary "\v\c<%(SQL)%([_])?%([ABCDEFGLMNPRST][[:alpha:]]+)"
# omsocat
syntax match omnimarkLibrary "\v\c<%(socat-[clr-])%([[:alpha:]]+)"
# omsort
syntax match omnimarkLibrary "\v\c<%(sort[.][os])%(\a|-)+"
# omutil
syntax match omnimarkLibrary "\v\c<%(UTIL[_.][EGLmopRSU])%(\a|-)+"
# omvfs
syntax match omnimarkLibrary "\v\c<%(vfs[.][cdflmorstuw])%(\a|-)+"
# tcp
syntax match omnimarkLibrary "\v\c<%(TCP)%([.])?%([acdegilmoprstw][[:alpha:]-]+)"
# uri
syntax match omnimarkLibrary "\v\c<%(uri[.])%([ceopr])%(\a|-)+"
# wsb
syntax match omnimarkLibrary "\v\c<%(wsb[.])%([acdfhrsw])%(\a|-)+"
# }}}
# Comments {{{
# -------
syntax region omnimarkComment start=";" end="$"
# }}}
# Strings and format-modifiers {{{
syntax region omnimarkString matchgroup=Normal start=+'+ end=+'+ skip=+%'+ contains=omnimarkEscape
syntax region omnimarkString matchgroup=Normal start=+"+ end=+"+ skip=+%"+ contains=omnimarkEscape
# This handles format items inside strings:
# NB: escape _quoted-character_ allows a new character to be used to
# indicate a special character or a format item, rather than the normal %.
# The use of escape is deprecated in general, because it leads to
# non-standard OmniMark code that can be difficult to understand. It has
# not be handled here as it would be almost impossible to do so.
# dynamic: %a %b %d %g %i %p %q %v %x %w %y
# a - integer data type formatting
# b - integer data type formatting
# c - parsed data formatting
# d - integer data type formatting, BCD data type formatting
# g - string data formatting
# i - integer data type formatting
# p - parsed data formatting
# q - parsed data formatting
# v - parsed data formatting
# x - deprecated format command used instead of g
# y - symbol declaration
# @ - macro arguments
# static: %% %_ %n %t %# %) %" %' %/ %[ %] %@%%
# %% - insert an explicit percent sign
# %_ - insert an explicit space character
# %n - insert an explicit newline character
# %t - insert an explicit tab character
# %0# through to %255# - insert an explicit byte with given value
# %{...}—a sequence of characters, e.g., %16r{0d, 0a}
# %#—insert an explicit octothorpe character (#)
# %)insert an explicit closing parenthesis
# %"—insert an explicit double quote character
# %'—insert an explicit single quote character
# %/—indicates a point where line breaking can occur
# %[ and %]—protect the delimited text from line breaking
# %@%—insert an explicit percent sign inside a macro expansion
# % format-modifier a
syntax match omnimarkEscape contained =\v\C%(\%%(%(%(\d)*%(f))?%(j|k|l|u|w)*)?a)=
# % format-modifier b
syntax match omnimarkEscape contained =\v\C%(\%%(%(%(\d)*%(f))?%(\d)?)?b)=
# % format-modifier c
syntax match omnimarkEscape contained =\v\C%(%(\%%(h|l|u|s|z)*c))=
# % format-modifier d
syntax match omnimarkEscape contained =\v\C%(\%%(%(%(\d)*%(f|r|s)?)*%(j|k|l|u|z)*)?d)=
# % format-modifier g
syntax match omnimarkEscape contained =\v\C%(\%%(%(%(\d)*%(f|r|s)?)*%(j|k|l|u|z)*)?g)=
# % format-modifier
syntax match omnimarkEscape contained =\v\C%(%(\%[abdgipqvxwy%_nt#)"'/\[\]])|%(\%\@\%)|%(\%\d+#)|\%%(\d+r[{]%([0-9A-z, ]+)}))+=
# }}}
# Number {{{
syntax match omnimarkNumber "\v([[:alpha:]]+)@<![-]?\d+([.]\d+)?"
# }}}
# Define default highlighting {{{
highlight default link omnimarkAction Statement
highlight default link omnimarkAttributeType Structure
highlight default link omnimarkDataType Type
highlight default link omnimarkBuiltinEntity Identifier
highlight default link omnimarkBuiltinShelf Identifier
highlight default link omnimarkCatchName Exception
highlight default link omnimarkConstant Constant
highlight default link omnimarkControlStructure Conditional
highlight default link omnimarkDeclaration Keyword
highlight default link omnimarkElementQualifier Type
highlight default link omnimarkLibrary Function
highlight default link omnimarkModifier Keyword
highlight default link omnimarkOperator Operator
highlight default link omnimarkPattern Label
highlight default link omnimarkRule Keyword
highlight default link omnimarkString String
highlight default link omnimarkNumber Number
highlight default link omnimarkComment Comment
highlight default link omnimarkEscape Special
highlight default link omnimarkNormal Statement
# }}}
syntax sync fromstart
b:current_syntax = "omnimark"
# vim: cc=+1 et fdm=marker ft=vim sta sw=2 ts=8 tw=79