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>
diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS
index 4b0d93a..f0d11a3 100644
--- a/.github/MAINTAINERS
+++ b/.github/MAINTAINERS
@@ -562,6 +562,7 @@
 runtime/syntax/nix.vim			@equill
 runtime/syntax/nroff.vim		@jmarshall
 runtime/syntax/nsis.vim			@k-takata
+runtime/syntax/omnimark.vim @kennypete
 runtime/syntax/ondir.vim		@jparise
 runtime/syntax/opencl.vim		@Freed-Wu
 runtime/syntax/openvpn.vim		@ObserverOfTime
diff --git a/runtime/syntax/omnimark.vim b/runtime/syntax/omnimark.vim
index 6294945..9b12d5e 100644
--- a/runtime/syntax/omnimark.vim
+++ b/runtime/syntax/omnimark.vim
@@ -1,106 +1,833 @@
-" Vim syntax file
-" Language:	Omnimark
-" Maintainer:	Paul Terray <mailto:terray@4dconcept.fr>
-" Last Change:	11 Oct 2000
-
-" quit when a syntax file was already loaded
+vim9script
+# Vim syntax file
+# Language:    OmniMark
+# Maintainer:  Peter Kenny <kennypete.t2o3y@aleeas.com>
+# Previous Maintainer: Paul Terray <mailto:terray@4dconcept.fr>
+# 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")
   finish
 endif
-
-setlocal iskeyword=@,48-57,_,128-167,224-235,-
-
-syn keyword omnimarkKeywords	ACTIVATE AGAIN
-syn keyword omnimarkKeywords	CATCH CLEAR CLOSE COPY COPY-CLEAR CROSS-TRANSLATE
-syn keyword omnimarkKeywords	DEACTIVATE DECLARE DECREMENT DEFINE DISCARD DIVIDE DO DOCUMENT-END DOCUMENT-START DONE DTD-START
-syn keyword omnimarkKeywords	ELEMENT ELSE ESCAPE EXIT
-syn keyword omnimarkKeywords	FAIL FIND FIND-END FIND-START FORMAT
-syn keyword omnimarkKeywords	GROUP
-syn keyword omnimarkKeywords	HALT HALT-EVERYTHING
-syn keyword omnimarkKeywords	IGNORE IMPLIED INCLUDE INCLUDE-END INCLUDE-START INCREMENT INPUT
-syn keyword omnimarkKeywords	JOIN
-syn keyword omnimarkKeywords	LINE-END LINE-START LOG LOOKAHEAD
-syn keyword omnimarkKeywords	MACRO
-syn keyword omnimarkKeywords	MACRO-END MARKED-SECTION MARKUP-COMMENT MARKUP-ERROR MARKUP-PARSER MASK MATCH MINUS MODULO
-syn keyword omnimarkKeywords	NEW NEWLINE NEXT
-syn keyword omnimarkKeywords	OPEN OUTPUT OUTPUT-TO OVER
-syn keyword omnimarkKeywords	PROCESS PROCESS-END PROCESS-START PROCESSING-INSTRUCTION PROLOG-END PROLOG-IN-ERROR PUT
-syn keyword omnimarkKeywords	REMOVE REOPEN REPEAT RESET RETHROW RETURN
-syn keyword omnimarkKeywords	WHEN WHITE-SPACE
-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
-syn keyword omnimarkKeywords	SYSTEM-CALL
-syn keyword omnimarkKeywords	TEST-SYSTEM THROW TO TRANSLATE
-syn keyword omnimarkKeywords	UC UL UNLESS UP-TRANSLATE
-syn keyword omnimarkKeywords	XML-PARSE
-
-syn keyword omnimarkCommands	ACTIVE AFTER ANCESTOR AND ANOTHER ARG AS ATTACHED ATTRIBUTE ATTRIBUTES
-syn keyword omnimarkCommands	BASE BEFORE BINARY BINARY-INPUT BINARY-MODE BINARY-OUTPUT BREAK-WIDTH BUFFER BY
-syn keyword omnimarkCommands	CASE CHILDREN CLOSED COMPILED-DATE COMPLEMENT CONREF CONTENT CONTEXT-TRANSLATE COUNTER CREATED CREATING CREATOR CURRENT
-syn keyword omnimarkCommands	DATA-ATTRIBUTE DATA-ATTRIBUTES DATA-CONTENT DATA-LETTERS DATE DECLARED-CONREF DECLARED-CURRENT DECLARED-DEFAULTED DECLARED-FIXED DECLARED-IMPLIED DECLARED-REQUIRED
-syn keyword omnimarkCommands	DEFAULT-ENTITY DEFAULTED DEFAULTING DELIMITER DIFFERENCE DIRECTORY DOCTYPE DOCUMENT DOCUMENT-ELEMENT DOMAIN-FREE DOWN-TRANSLATE DTD DTD-END DTDS
-syn keyword omnimarkCommands	ELEMENTS ELSEWHERE EMPTY ENTITIES ENTITY EPILOG-START EQUAL EXCEPT EXISTS EXTERNAL EXTERNAL-DATA-ENTITY EXTERNAL-ENTITY EXTERNAL-FUNCTION EXTERNAL-OUTPUT-FUNCTION
-syn keyword omnimarkCommands	EXTERNAL-TEXT-ENTITY
-syn keyword omnimarkCommands	FALSE FILE FUNCTION FUNCTION-LIBRARY
-syn keyword omnimarkCommands	GENERAL GLOBAL GREATER-EQUAL GREATER-THAN GROUPS
-syn keyword omnimarkCommands	HAS HASNT HERALDED-NAMES
-syn keyword omnimarkCommands	ID ID-CHECKING IDREF IDREFS IN IN-LIBRARY INCLUSION INITIAL INITIAL-SIZE INSERTION-BREAK INSTANCE INTERNAL INVALID-DATA IS ISNT ITEM
-syn keyword omnimarkCommands	KEY KEYED
-syn keyword omnimarkCommands	LAST LASTMOST LC LENGTH LESS-EQUAL LESS-THAN LETTERS LIBRARY LITERAL LOCAL
-syn keyword omnimarkCommands	MATCHES MIXED MODIFIABLE
-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
-syn keyword omnimarkCommands	NUTOKEN NUTOKENS
-syn keyword omnimarkCommands	OCCURRENCE OF OPAQUE OPTIONAL OR
-syn keyword omnimarkCommands	PARAMETER PARENT PAST PATTERN PLUS PREPARENT PREVIOUS PROPER PUBLIC
-syn keyword omnimarkCommands	READ-ONLY READABLE REFERENT REFERENTS REFERENTS-ALLOWED REFERENTS-DISPLAYED REFERENTS-NOT-ALLOWED REMAINDER REPEATED REPLACEMENT-BREAK REVERSED
-syn keyword omnimarkCommands	SILENT-REFERENT SIZE SKIP SOURCE SPECIFIED STATUS STREAM SUBDOC-ENTITY SUBDOCUMENT SUBDOCUMENTS SUBELEMENT SWITCH SYMBOL SYSTEM
-syn keyword omnimarkCommands	TEXT-MODE THIS TIMES TOKEN TRUE
-syn keyword omnimarkCommands	UNANCHORED UNATTACHED UNION USEMAP USING
-syn keyword omnimarkCommands	VALUE VALUED VARIABLE
-syn keyword omnimarkCommands	WITH WRITABLE
-syn keyword omnimarkCommands	XML XML-DTD XML-DTDS
-syn keyword omnimarkCommands	YES
-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
-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
-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
-syn keyword omnimarkCommands	#SGML-ERROR-TOTAL #SGML-WARNING-COUNT #SGML-WARNING-TOTAL #SUPPRESS #SYNTAX #!
-
-syn keyword omnimarkPatterns	ANY ANY-TEXT
-syn keyword omnimarkPatterns	BLANK
-syn keyword omnimarkPatterns	CDATA CDATA-ENTITY CONTENT-END CONTENT-START
-syn keyword omnimarkPatterns	DIGIT
-syn keyword omnimarkPatterns	LETTER
-syn keyword omnimarkPatterns	NUMBER
-syn keyword omnimarkPatterns	PCDATA
-syn keyword omnimarkPatterns	RCDATA
-syn keyword omnimarkPatterns	SDATA SDATA-ENTITY SPACE
-syn keyword omnimarkPatterns	TEXT
-syn keyword omnimarkPatterns	VALUE-END VALUE-START
-syn keyword omnimarkPatterns	WORD-END WORD-START
-
-syn region  omnimarkComment	start=";" end="$"
-
-" strings
-syn region  omnimarkString		matchgroup=Normal start=+'+  end=+'+ skip=+%'+ contains=omnimarkEscape
-syn region  omnimarkString		matchgroup=Normal start=+"+  end=+"+ skip=+%"+ contains=omnimarkEscape
-syn match  omnimarkEscape contained +%.+
-syn match  omnimarkEscape contained +%[0-9][0-9]#+
-
-"syn sync maxlines=100
-syn sync minlines=2000
-
-" Define the default highlighting.
-" Only when an item doesn't have highlighting yet
-
-hi def link omnimarkCommands		Statement
-hi def link omnimarkKeywords		Identifier
-hi def link omnimarkString		String
-hi def link omnimarkPatterns		Macro
-"  hi def link omnimarkNumber			Number
-hi def link omnimarkComment		Comment
-hi def link omnimarkEscape		Special
-
-
-let b:current_syntax = "omnimark"
-
-" vim: ts=8
-
+# }}}
+# Keyword characters {{{
+# 	!#%&*+-/0123456789<=>@
+# 	ABCDEFGHIJKLMNOPQRSTUVWXYZ
+# 	\_abcdefghijklmnopqrstuvwxyz|~
+setlocal iskeyword=33,35,37-38,42-43,45,47-57,60-62,64-90,92,95,97-122,124,126
+# }}}
+# _ action {{{
+syntax keyword omnimarkAction activate
+syntax keyword omnimarkAction assert
+syntax keyword omnimarkAction clear
+syntax keyword omnimarkAction close
+syntax keyword omnimarkAction collect-garbage
+syntax match omnimarkAction "\v\c<%(copy)%(-clear)?"
+syntax keyword omnimarkAction deactivate
+syntax keyword omnimarkAction decrement
+syntax keyword omnimarkAction discard
+syntax keyword omnimarkAction flush
+syntax match omnimarkAction "\v\c<%(halt)%(-everything)?"
+syntax keyword omnimarkAction increment
+syntax keyword omnimarkAction log
+syntax keyword omnimarkAction log-message
+syntax keyword omnimarkAction match
+syntax keyword omnimarkAction new
+  # new takes before and after (as in new x{"wilma"} after [2])
+  syntax keyword omnimarkAction after
+  syntax keyword omnimarkAction before
+# This is the only way 'next' is used (and it cannot be 'isnt'):
+syntax match omnimarkAction "\v\c<%(next\s+group\s+is)"
+syntax keyword omnimarkAction not-reached
+syntax keyword omnimarkAction open
+syntax match omnimarkAction "\v\c<%(output)%(-to)?"
+syntax keyword omnimarkAction put
+# When alone, 'referent' is nearly always 'put...referent,' which is an action
+syntax keyword omnimarkAction referent
+syntax match omnimarkAction "\v\c<%(remove)%(\s+key\s+of)?"
+syntax keyword omnimarkAction reopen
+syntax keyword omnimarkAction reset
+syntax keyword omnimarkAction return
+# 'scan' because it can start a line in a block of 'do *-parse ... done'
+syntax keyword omnimarkAction scan
+syntax match omnimarkAction "\v\c<%(set)%(\s+%(buffer|creator\s+of|external-function|file|function-library|key\s+of|new|referent|stream))?"
+syntax keyword omnimarkAction sgml-in
+syntax keyword omnimarkAction sgml-out
+syntax keyword omnimarkAction signal
+syntax keyword omnimarkAction submit
+syntax keyword omnimarkAction suppress
+syntax keyword omnimarkAction throw
+syntax keyword omnimarkAction void
+# }}}
+# _ built-in data type {{{
+# attribute-declaration: Every attribute-declaration instance has two
+#                        properties: attribute-default-declaration and
+#                                    attribute-value-declaration
+# attribute-default-declaration: is the abstract type of declared defaults for
+#                                unspecified attribute values. Its concrete
+#                                instances can be obtained with the following
+#                                four constants:
+syntax keyword omnimarkConstant attribute-declared-conref
+syntax keyword omnimarkConstant attribute-declared-current
+syntax keyword omnimarkConstant attribute-declared-implied
+syntax keyword omnimarkConstant attribute-declared-required
+#                                and with two operators which take a string
+#                                default value argument:
+syntax match omnimarkOperator "\v\c<%(attribute-declared-defaulted\s+to)"
+syntax match omnimarkOperator "\v\c<%(attribute-declared-fixed to)"
+# attribute-value-declaration: is the abstract type of values that an
+#                              attribute is declared to accept. Its concrete
+#                              instances can be obtained with the following
+#                              constants:
+syntax match omnimarkConstant "\v\c<%(attribute-declared-fixed to)"
+syntax keyword omnimarkConstant attribute-declared-id
+syntax keyword omnimarkConstant attribute-declared-idref
+syntax keyword omnimarkConstant attribute-declared-idrefs
+syntax keyword omnimarkConstant attribute-declared-name
+syntax keyword omnimarkConstant attribute-declared-names
+syntax keyword omnimarkConstant attribute-declared-nmtoken
+syntax keyword omnimarkConstant attribute-declared-nmtokens
+syntax keyword omnimarkConstant attribute-declared-number
+syntax keyword omnimarkConstant attribute-declared-numbers
+syntax keyword omnimarkConstant attribute-declared-nutoken
+syntax keyword omnimarkConstant attribute-declared-nutokens
+#                              and with one operator that takes a string shelf
+#                              argument listing all the values allowed for the
+#                              attribute:
+syntax keyword omnimarkOperator attribute-declared-group
+# content-model - the following six constants are the only possible values:
+syntax keyword omnimarkConstant any-content-model
+syntax keyword omnimarkConstant cdata-content-model
+syntax keyword omnimarkConstant element-content-model
+syntax keyword omnimarkConstant empty-content-model
+syntax keyword omnimarkConstant mixed-content-model
+syntax keyword omnimarkConstant rcdata-content-model
+# refer also:
+# developers.stilo.com/docs/html/keyword/create-element-declaration.html
+#
+# 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