xref: /vim-8.2.3635/runtime/syntax/dtd.vim (revision 96f45c0b)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language: DTD (Document Type Definition for XML)
3*96f45c0bSBram Moolenaar" Maintainer: Christian Brabandt <[email protected]>
4*96f45c0bSBram Moolenaar" Repository: https://github.com/chrisbra/vim-xml-ftplugin
5*96f45c0bSBram Moolenaar" Previous Maintainer: Johannes Zellner <[email protected]>
6*96f45c0bSBram Moolenaar" Author: Daniel Amyot <[email protected]>
7*96f45c0bSBram Moolenaar" Last Changed:	Sept 24, 2019
8071d4279SBram Moolenaar" Filenames: *.dtd
9071d4279SBram Moolenaar"
10071d4279SBram Moolenaar" REFERENCES:
11071d4279SBram Moolenaar"   http://www.w3.org/TR/html40/
12071d4279SBram Moolenaar"   http://www.w3.org/TR/NOTE-html-970421
13071d4279SBram Moolenaar"
14071d4279SBram Moolenaar" TODO:
15071d4279SBram Moolenaar"   - improve synchronizing.
16071d4279SBram Moolenaar
17071d4279SBram Moolenaarif exists("b:current_syntax")
18071d4279SBram Moolenaar    finish
19071d4279SBram Moolenaarendif
20071d4279SBram Moolenaarlet s:dtd_cpo_save = &cpo
21071d4279SBram Moolenaarset cpo&vim
22071d4279SBram Moolenaar
23071d4279SBram Moolenaarif !exists("dtd_ignore_case")
24071d4279SBram Moolenaar    " I prefer having the case takes into consideration.
25071d4279SBram Moolenaar    syn case match
26071d4279SBram Moolenaarelse
27071d4279SBram Moolenaar    syn case ignore
28071d4279SBram Moolenaarendif
29071d4279SBram Moolenaar
30071d4279SBram Moolenaar
31071d4279SBram Moolenaar" the following line makes the opening <! and
32071d4279SBram Moolenaar" closing > highlighted using 'dtdFunction'.
33071d4279SBram Moolenaar"
34071d4279SBram Moolenaar" PROVIDES: @dtdTagHook
35071d4279SBram Moolenaar"
36071d4279SBram Moolenaarsyn region dtdTag matchgroup=dtdFunction
37071d4279SBram Moolenaar    \ start=+<!+ end=+>+ matchgroup=NONE
38071d4279SBram Moolenaar    \ contains=dtdTag,dtdTagName,dtdError,dtdComment,dtdString,dtdAttrType,dtdAttrDef,dtdEnum,dtdParamEntityInst,dtdParamEntityDecl,dtdCard,@dtdTagHook
39071d4279SBram Moolenaar
40071d4279SBram Moolenaarif !exists("dtd_no_tag_errors")
41071d4279SBram Moolenaar    " mark everything as an error which starts with a <!
42071d4279SBram Moolenaar    " and is not overridden later. If this is annoying,
43071d4279SBram Moolenaar    " it can be switched off by setting the variable
44071d4279SBram Moolenaar    " dtd_no_tag_errors.
45071d4279SBram Moolenaar    syn region dtdError contained start=+<!+lc=2 end=+>+
46071d4279SBram Moolenaarendif
47071d4279SBram Moolenaar
48071d4279SBram Moolenaar" if this is a html like comment hightlight also
49071d4279SBram Moolenaar" the opening <! and the closing > as Comment.
504c3f536fSBram Moolenaarsyn region dtdComment		start=+<![ \t]*--+ end=+-->+ contains=dtdTodo,@Spell
51071d4279SBram Moolenaar
52071d4279SBram Moolenaar
53071d4279SBram Moolenaar" proper DTD comment
544c3f536fSBram Moolenaarsyn region dtdComment contained start=+--+ end=+--+ contains=dtdTodo,@Spell
55071d4279SBram Moolenaar
56071d4279SBram Moolenaar
57071d4279SBram Moolenaar" Start tags (keywords). This is contained in dtdFunction.
58071d4279SBram Moolenaar" Note that everything not contained here will be marked
59071d4279SBram Moolenaar" as error.
60071d4279SBram Moolenaarsyn match dtdTagName contained +<!\(ATTLIST\|DOCTYPE\|ELEMENT\|ENTITY\|NOTATION\|SHORTREF\|USEMAP\|\[\)+lc=2,hs=s+2
61071d4279SBram Moolenaar
62071d4279SBram Moolenaar
63071d4279SBram Moolenaar" wildcards and operators
64071d4279SBram Moolenaarsyn match  dtdCard contained "|"
65071d4279SBram Moolenaarsyn match  dtdCard contained ","
66071d4279SBram Moolenaar" evenutally overridden by dtdEntity
67071d4279SBram Moolenaarsyn match  dtdCard contained "&"
68071d4279SBram Moolenaarsyn match  dtdCard contained "?"
69071d4279SBram Moolenaarsyn match  dtdCard contained "\*"
70071d4279SBram Moolenaarsyn match  dtdCard contained "+"
71071d4279SBram Moolenaar
72071d4279SBram Moolenaar" ...and finally, special cases.
73071d4279SBram Moolenaarsyn match  dtdCard      "ANY"
74071d4279SBram Moolenaarsyn match  dtdCard      "EMPTY"
75071d4279SBram Moolenaar
76071d4279SBram Moolenaarif !exists("dtd_no_param_entities")
77071d4279SBram Moolenaar
78071d4279SBram Moolenaar    " highlight parameter entity declarations
79071d4279SBram Moolenaar    " and instances. Note that the closing `;'
80071d4279SBram Moolenaar    " is optional.
81071d4279SBram Moolenaar
82071d4279SBram Moolenaar    " instances
83071d4279SBram Moolenaar    syn region dtdParamEntityInst oneline matchgroup=dtdParamEntityPunct
84071d4279SBram Moolenaar	\ start="%[-_a-zA-Z0-9.]\+"he=s+1,rs=s+1
85071d4279SBram Moolenaar	\ skip=+[-_a-zA-Z0-9.]+
86071d4279SBram Moolenaar	\ end=";\|\>"
87071d4279SBram Moolenaar	\ matchgroup=NONE contains=dtdParamEntityPunct
88071d4279SBram Moolenaar    syn match  dtdParamEntityPunct contained "\."
89071d4279SBram Moolenaar
90071d4279SBram Moolenaar    " declarations
91071d4279SBram Moolenaar    " syn region dtdParamEntityDecl oneline matchgroup=dtdParamEntityDPunct start=+<!ENTITY % +lc=8 skip=+[-_a-zA-Z0-9.]+ matchgroup=NONE end="\>" contains=dtdParamEntityDPunct
92071d4279SBram Moolenaar    syn match dtdParamEntityDecl +<!ENTITY % [-_a-zA-Z0-9.]*+lc=8 contains=dtdParamEntityDPunct
93071d4279SBram Moolenaar    syn match  dtdParamEntityDPunct contained "%\|\."
94071d4279SBram Moolenaar
95071d4279SBram Moolenaarendif
96071d4279SBram Moolenaar
97071d4279SBram Moolenaar" &entities; compare with xml
98071d4279SBram Moolenaarsyn match   dtdEntity		      "&[^; \t]*;" contains=dtdEntityPunct
99071d4279SBram Moolenaarsyn match   dtdEntityPunct  contained "[&.;]"
100071d4279SBram Moolenaar
101071d4279SBram Moolenaar" Strings are between quotes
102071d4279SBram Moolenaarsyn region dtdString    start=+"+ skip=+\\\\\|\\"+  end=+"+ contains=dtdAttrDef,dtdAttrType,dtdEnum,dtdParamEntityInst,dtdEntity,dtdCard
103071d4279SBram Moolenaarsyn region dtdString    start=+'+ skip=+\\\\\|\\'+  end=+'+ contains=dtdAttrDef,dtdAttrType,dtdEnum,dtdParamEntityInst,dtdEntity,dtdCard
104071d4279SBram Moolenaar
105071d4279SBram Moolenaar" Enumeration of elements or data between parenthesis
106071d4279SBram Moolenaar"
107071d4279SBram Moolenaar" PROVIDES: @dtdEnumHook
108071d4279SBram Moolenaar"
109071d4279SBram Moolenaarsyn region dtdEnum matchgroup=dtdType start="(" end=")" matchgroup=NONE contains=dtdEnum,dtdParamEntityInst,dtdCard,@dtdEnumHook
110071d4279SBram Moolenaar
111071d4279SBram Moolenaar"Attribute types
112071d4279SBram Moolenaarsyn keyword dtdAttrType NMTOKEN  ENTITIES  NMTOKENS  ID  CDATA
113071d4279SBram Moolenaarsyn keyword dtdAttrType IDREF  IDREFS
114071d4279SBram Moolenaar" ENTITY has to treated special for not overriding <!ENTITY
115071d4279SBram Moolenaarsyn match   dtdAttrType +[^!]\<ENTITY+
116071d4279SBram Moolenaar
117071d4279SBram Moolenaar"Attribute Definitions
118071d4279SBram Moolenaarsyn match  dtdAttrDef   "#REQUIRED"
119071d4279SBram Moolenaarsyn match  dtdAttrDef   "#IMPLIED"
120071d4279SBram Moolenaarsyn match  dtdAttrDef   "#FIXED"
121071d4279SBram Moolenaar
122071d4279SBram Moolenaarsyn case match
123071d4279SBram Moolenaar" define some common keywords to mark TODO
124071d4279SBram Moolenaar" and important sections inside comments.
125071d4279SBram Moolenaarsyn keyword dtdTodo contained TODO FIXME XXX
126071d4279SBram Moolenaar
127071d4279SBram Moolenaarsyn sync lines=250
128071d4279SBram Moolenaar
129071d4279SBram Moolenaar" Define the default highlighting.
13089bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
131071d4279SBram Moolenaar
132071d4279SBram Moolenaar" The default highlighting.
133f37506f6SBram Moolenaarhi def link dtdFunction		Function
134f37506f6SBram Moolenaarhi def link dtdTag		Normal
135f37506f6SBram Moolenaarhi def link dtdType		Type
136f37506f6SBram Moolenaarhi def link dtdAttrType		dtdType
137f37506f6SBram Moolenaarhi def link dtdAttrDef		dtdType
138f37506f6SBram Moolenaarhi def link dtdConstant		Constant
139f37506f6SBram Moolenaarhi def link dtdString		dtdConstant
140f37506f6SBram Moolenaarhi def link dtdEnum		dtdConstant
141f37506f6SBram Moolenaarhi def link dtdCard		dtdFunction
142071d4279SBram Moolenaar
143f37506f6SBram Moolenaarhi def link dtdEntity		Statement
144f37506f6SBram Moolenaarhi def link dtdEntityPunct	dtdType
145f37506f6SBram Moolenaarhi def link dtdParamEntityInst	dtdConstant
146f37506f6SBram Moolenaarhi def link dtdParamEntityPunct	dtdType
147f37506f6SBram Moolenaarhi def link dtdParamEntityDecl	dtdType
148f37506f6SBram Moolenaarhi def link dtdParamEntityDPunct dtdComment
149071d4279SBram Moolenaar
150f37506f6SBram Moolenaarhi def link dtdComment		Comment
151f37506f6SBram Moolenaarhi def link dtdTagName		Statement
152f37506f6SBram Moolenaarhi def link dtdError		Error
153f37506f6SBram Moolenaarhi def link dtdTodo		Todo
154071d4279SBram Moolenaar
155071d4279SBram Moolenaar
156071d4279SBram Moolenaarlet &cpo = s:dtd_cpo_save
157071d4279SBram Moolenaarunlet s:dtd_cpo_save
158071d4279SBram Moolenaar
159071d4279SBram Moolenaarlet b:current_syntax = "dtd"
160071d4279SBram Moolenaar
161071d4279SBram Moolenaar" vim: ts=8
162