Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
Bram Moolenaar | 96f45c0 | 2019-10-26 19:53:45 +0200 | [diff] [blame] | 2 | " Language: DTD (Document Type Definition for XML) |
| 3 | " Maintainer: Christian Brabandt <cb@256bit.org> |
| 4 | " Repository: https://github.com/chrisbra/vim-xml-ftplugin |
| 5 | " Previous Maintainer: Johannes Zellner <johannes@zellner.org> |
| 6 | " Author: Daniel Amyot <damyot@site.uottawa.ca> |
| 7 | " Last Changed: Sept 24, 2019 |
| 8 | " Filenames: *.dtd |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 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 | |
Bram Moolenaar | 8e52a59 | 2012-05-18 21:49:28 +0200 | [diff] [blame] | 17 | if exists("b:current_syntax") |
| 18 | finish |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 19 | endif |
Bram Moolenaar | 8e52a59 | 2012-05-18 21:49:28 +0200 | [diff] [blame] | 20 | let s:dtd_cpo_save = &cpo |
| 21 | set cpo&vim |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 22 | |
| 23 | if !exists("dtd_ignore_case") |
| 24 | " I prefer having the case takes into consideration. |
| 25 | syn case match |
| 26 | else |
| 27 | syn case ignore |
| 28 | endif |
| 29 | |
| 30 | |
| 31 | " the following line makes the opening <! and |
| 32 | " closing > highlighted using 'dtdFunction'. |
| 33 | " |
| 34 | " PROVIDES: @dtdTagHook |
| 35 | " |
| 36 | syn region dtdTag matchgroup=dtdFunction |
| 37 | \ start=+<!+ end=+>+ matchgroup=NONE |
| 38 | \ contains=dtdTag,dtdTagName,dtdError,dtdComment,dtdString,dtdAttrType,dtdAttrDef,dtdEnum,dtdParamEntityInst,dtdParamEntityDecl,dtdCard,@dtdTagHook |
| 39 | |
| 40 | if !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=+>+ |
| 46 | endif |
| 47 | |
Bram Moolenaar | fa3b723 | 2021-12-24 13:18:38 +0000 | [diff] [blame] | 48 | " if this is a html like comment highlight also |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 49 | " the opening <! and the closing > as Comment. |
Bram Moolenaar | 4c3f536 | 2006-04-11 21:38:50 +0000 | [diff] [blame] | 50 | syn region dtdComment start=+<![ \t]*--+ end=+-->+ contains=dtdTodo,@Spell |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 51 | |
| 52 | |
| 53 | " proper DTD comment |
Bram Moolenaar | 4c3f536 | 2006-04-11 21:38:50 +0000 | [diff] [blame] | 54 | syn region dtdComment contained start=+--+ end=+--+ contains=dtdTodo,@Spell |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 55 | |
| 56 | |
| 57 | " Start tags (keywords). This is contained in dtdFunction. |
| 58 | " Note that everything not contained here will be marked |
| 59 | " as error. |
| 60 | syn match dtdTagName contained +<!\(ATTLIST\|DOCTYPE\|ELEMENT\|ENTITY\|NOTATION\|SHORTREF\|USEMAP\|\[\)+lc=2,hs=s+2 |
| 61 | |
| 62 | |
| 63 | " wildcards and operators |
| 64 | syn match dtdCard contained "|" |
| 65 | syn match dtdCard contained "," |
| 66 | " evenutally overridden by dtdEntity |
| 67 | syn match dtdCard contained "&" |
| 68 | syn match dtdCard contained "?" |
| 69 | syn match dtdCard contained "\*" |
| 70 | syn match dtdCard contained "+" |
| 71 | |
| 72 | " ...and finally, special cases. |
| 73 | syn match dtdCard "ANY" |
| 74 | syn match dtdCard "EMPTY" |
| 75 | |
| 76 | if !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 | |
| 95 | endif |
| 96 | |
| 97 | " &entities; compare with xml |
| 98 | syn match dtdEntity "&[^; \t]*;" contains=dtdEntityPunct |
| 99 | syn match dtdEntityPunct contained "[&.;]" |
| 100 | |
| 101 | " Strings are between quotes |
Bram Moolenaar | fa3b723 | 2021-12-24 13:18:38 +0000 | [diff] [blame] | 102 | syn region dtdString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=dtdAttrDef,dtdAttrType,dtdParamEntityInst,dtdEntity,dtdCard |
| 103 | syn region dtdString start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=dtdAttrDef,dtdAttrType,dtdParamEntityInst,dtdEntity,dtdCard |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 104 | |
| 105 | " Enumeration of elements or data between parenthesis |
| 106 | " |
| 107 | " PROVIDES: @dtdEnumHook |
| 108 | " |
| 109 | syn region dtdEnum matchgroup=dtdType start="(" end=")" matchgroup=NONE contains=dtdEnum,dtdParamEntityInst,dtdCard,@dtdEnumHook |
| 110 | |
| 111 | "Attribute types |
| 112 | syn keyword dtdAttrType NMTOKEN ENTITIES NMTOKENS ID CDATA |
| 113 | syn keyword dtdAttrType IDREF IDREFS |
| 114 | " ENTITY has to treated special for not overriding <!ENTITY |
| 115 | syn match dtdAttrType +[^!]\<ENTITY+ |
| 116 | |
| 117 | "Attribute Definitions |
| 118 | syn match dtdAttrDef "#REQUIRED" |
| 119 | syn match dtdAttrDef "#IMPLIED" |
| 120 | syn match dtdAttrDef "#FIXED" |
| 121 | |
| 122 | syn case match |
| 123 | " define some common keywords to mark TODO |
| 124 | " and important sections inside comments. |
| 125 | syn keyword dtdTodo contained TODO FIXME XXX |
| 126 | |
| 127 | syn sync lines=250 |
| 128 | |
| 129 | " Define the default highlighting. |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 130 | " Only when an item doesn't have highlighting yet |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 131 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 132 | " The default highlighting. |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 133 | hi def link dtdFunction Function |
| 134 | hi def link dtdTag Normal |
| 135 | hi def link dtdType Type |
| 136 | hi def link dtdAttrType dtdType |
| 137 | hi def link dtdAttrDef dtdType |
| 138 | hi def link dtdConstant Constant |
| 139 | hi def link dtdString dtdConstant |
| 140 | hi def link dtdEnum dtdConstant |
| 141 | hi def link dtdCard dtdFunction |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 142 | |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 143 | hi def link dtdEntity Statement |
| 144 | hi def link dtdEntityPunct dtdType |
| 145 | hi def link dtdParamEntityInst dtdConstant |
| 146 | hi def link dtdParamEntityPunct dtdType |
| 147 | hi def link dtdParamEntityDecl dtdType |
| 148 | hi def link dtdParamEntityDPunct dtdComment |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 149 | |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 150 | hi def link dtdComment Comment |
| 151 | hi def link dtdTagName Statement |
| 152 | hi def link dtdError Error |
| 153 | hi def link dtdTodo Todo |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 154 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 155 | |
Bram Moolenaar | 8e52a59 | 2012-05-18 21:49:28 +0200 | [diff] [blame] | 156 | let &cpo = s:dtd_cpo_save |
| 157 | unlet s:dtd_cpo_save |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 158 | |
| 159 | let b:current_syntax = "dtd" |
| 160 | |
| 161 | " vim: ts=8 |