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