xref: /vim-8.2.3635/runtime/syntax/dtd.vim (revision cb03397a)
1" Vim syntax file
2" Language:	DTD (Document Type Definition for XML)
3" Maintainer:	Johannes Zellner <[email protected]>
4"		Author and previous maintainer:
5"		Daniel Amyot <[email protected]>
6" Last Change:	Tue, 27 Apr 2004 14:54:59 CEST
7" Filenames:	*.dtd
8"
9" REFERENCES:
10"   http://www.w3.org/TR/html40/
11"   http://www.w3.org/TR/NOTE-html-970421
12"
13" TODO:
14"   - improve synchronizing.
15
16if exists("b:current_syntax")
17    finish
18endif
19let s:dtd_cpo_save = &cpo
20set cpo&vim
21
22if !exists("dtd_ignore_case")
23    " I prefer having the case takes into consideration.
24    syn case match
25else
26    syn case ignore
27endif
28
29
30" the following line makes the opening <! and
31" closing > highlighted using 'dtdFunction'.
32"
33" PROVIDES: @dtdTagHook
34"
35syn region dtdTag matchgroup=dtdFunction
36    \ start=+<!+ end=+>+ matchgroup=NONE
37    \ contains=dtdTag,dtdTagName,dtdError,dtdComment,dtdString,dtdAttrType,dtdAttrDef,dtdEnum,dtdParamEntityInst,dtdParamEntityDecl,dtdCard,@dtdTagHook
38
39if !exists("dtd_no_tag_errors")
40    " mark everything as an error which starts with a <!
41    " and is not overridden later. If this is annoying,
42    " it can be switched off by setting the variable
43    " dtd_no_tag_errors.
44    syn region dtdError contained start=+<!+lc=2 end=+>+
45endif
46
47" if this is a html like comment hightlight also
48" the opening <! and the closing > as Comment.
49syn region dtdComment		start=+<![ \t]*--+ end=+-->+ contains=dtdTodo,@Spell
50
51
52" proper DTD comment
53syn region dtdComment contained start=+--+ end=+--+ contains=dtdTodo,@Spell
54
55
56" Start tags (keywords). This is contained in dtdFunction.
57" Note that everything not contained here will be marked
58" as error.
59syn match dtdTagName contained +<!\(ATTLIST\|DOCTYPE\|ELEMENT\|ENTITY\|NOTATION\|SHORTREF\|USEMAP\|\[\)+lc=2,hs=s+2
60
61
62" wildcards and operators
63syn match  dtdCard contained "|"
64syn match  dtdCard contained ","
65" evenutally overridden by dtdEntity
66syn match  dtdCard contained "&"
67syn match  dtdCard contained "?"
68syn match  dtdCard contained "\*"
69syn match  dtdCard contained "+"
70
71" ...and finally, special cases.
72syn match  dtdCard      "ANY"
73syn match  dtdCard      "EMPTY"
74
75if !exists("dtd_no_param_entities")
76
77    " highlight parameter entity declarations
78    " and instances. Note that the closing `;'
79    " is optional.
80
81    " instances
82    syn region dtdParamEntityInst oneline matchgroup=dtdParamEntityPunct
83	\ start="%[-_a-zA-Z0-9.]\+"he=s+1,rs=s+1
84	\ skip=+[-_a-zA-Z0-9.]+
85	\ end=";\|\>"
86	\ matchgroup=NONE contains=dtdParamEntityPunct
87    syn match  dtdParamEntityPunct contained "\."
88
89    " declarations
90    " syn region dtdParamEntityDecl oneline matchgroup=dtdParamEntityDPunct start=+<!ENTITY % +lc=8 skip=+[-_a-zA-Z0-9.]+ matchgroup=NONE end="\>" contains=dtdParamEntityDPunct
91    syn match dtdParamEntityDecl +<!ENTITY % [-_a-zA-Z0-9.]*+lc=8 contains=dtdParamEntityDPunct
92    syn match  dtdParamEntityDPunct contained "%\|\."
93
94endif
95
96" &entities; compare with xml
97syn match   dtdEntity		      "&[^; \t]*;" contains=dtdEntityPunct
98syn match   dtdEntityPunct  contained "[&.;]"
99
100" Strings are between quotes
101syn region dtdString    start=+"+ skip=+\\\\\|\\"+  end=+"+ contains=dtdAttrDef,dtdAttrType,dtdEnum,dtdParamEntityInst,dtdEntity,dtdCard
102syn region dtdString    start=+'+ skip=+\\\\\|\\'+  end=+'+ contains=dtdAttrDef,dtdAttrType,dtdEnum,dtdParamEntityInst,dtdEntity,dtdCard
103
104" Enumeration of elements or data between parenthesis
105"
106" PROVIDES: @dtdEnumHook
107"
108syn region dtdEnum matchgroup=dtdType start="(" end=")" matchgroup=NONE contains=dtdEnum,dtdParamEntityInst,dtdCard,@dtdEnumHook
109
110"Attribute types
111syn keyword dtdAttrType NMTOKEN  ENTITIES  NMTOKENS  ID  CDATA
112syn keyword dtdAttrType IDREF  IDREFS
113" ENTITY has to treated special for not overriding <!ENTITY
114syn match   dtdAttrType +[^!]\<ENTITY+
115
116"Attribute Definitions
117syn match  dtdAttrDef   "#REQUIRED"
118syn match  dtdAttrDef   "#IMPLIED"
119syn match  dtdAttrDef   "#FIXED"
120
121syn case match
122" define some common keywords to mark TODO
123" and important sections inside comments.
124syn keyword dtdTodo contained TODO FIXME XXX
125
126syn sync lines=250
127
128" Define the default highlighting.
129" For version 5.7 and earlier: only when not done already
130" For version 5.8 and later: only when an item doesn't have highlighting yet
131if version >= 508 || !exists("did_dtd_syn_inits")
132    if version < 508
133	let did_dtd_syn_inits = 1
134	command -nargs=+ HiLink hi link <args>
135    else
136	command -nargs=+ HiLink hi def link <args>
137    endif
138
139    " The default highlighting.
140    HiLink dtdFunction		Function
141    HiLink dtdTag		Normal
142    HiLink dtdType		Type
143    HiLink dtdAttrType		dtdType
144    HiLink dtdAttrDef		dtdType
145    HiLink dtdConstant		Constant
146    HiLink dtdString		dtdConstant
147    HiLink dtdEnum		dtdConstant
148    HiLink dtdCard		dtdFunction
149
150    HiLink dtdEntity		Statement
151    HiLink dtdEntityPunct	dtdType
152    HiLink dtdParamEntityInst	dtdConstant
153    HiLink dtdParamEntityPunct	dtdType
154    HiLink dtdParamEntityDecl	dtdType
155    HiLink dtdParamEntityDPunct dtdComment
156
157    HiLink dtdComment		Comment
158    HiLink dtdTagName		Statement
159    HiLink dtdError		Error
160    HiLink dtdTodo		Todo
161
162    delcommand HiLink
163endif
164
165let &cpo = s:dtd_cpo_save
166unlet s:dtd_cpo_save
167
168let b:current_syntax = "dtd"
169
170" vim: ts=8
171