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