" Vim syntax file
" Language:	DTD (Document Type Definition for XML)
" Maintainer:	Daniel Amyot <damyot@csi.uottawa.ca>
" Last change:	Thu Aug 20 1998
" Filenames:    *.dtd
" URL:          http://dtd.csi.uottawa.ca/~damyot/vim/dtd.vim
" This file is an adaptation of pascal.vim by Mario Eusebio 
" I'm not sure I understand all of the syntax highlight language,
" but this file seems to do the job for simple DTD in XML.
" This would have to be extended to cover the whole of SGML DTDs though.
" Unfortunately, I don't know enough about the somewhat complex SGML
" to do it myself. Volunteers are most welcomed!

syn clear

"I prefer having the case takes into consideration.
"syn case ignore 

"Comments in DTD are between <!-- and -->
syn region dtdComment	start="<!--"  end="-->" 

"Strings are between quotes
syn region dtdString	start=+"+ skip=+\\\\\|\\"+  end=+"+ 

"Enumeration of elements or data between parenthesis
syn region dtdEnum	start="("  end=")" 
"Also, consider +, ?, * at the end.
syn match  dtdCard      "+"
syn match  dtdCard      "\*"
syn match  dtdCard      "\?"
"...and finally, special cases.
syn match  dtdCard	"ANY"
syn match  dtdCard	"EMPTY"

"Start tags (keywords)
syn match  dtdTag       "<!DOCTYPE"
syn match  dtdTag	"<!ELEMENT"
syn match  dtdTag	"<!ATTLIST"
syn match  dtdTag	"<!ENTITY"
syn match  dtdTag	"<!NOTATION"
"End tag
syn match  dtdTag	">"

"Attribute types
syn keyword dtdAttrType	NMTOKEN  ENTITIES  NMTOKENS  ID  CDATA  
syn keyword dtdAttrType	IDREF  IDREFS  ENTITY

"Attribute Definitions
syn match  dtdAttrDef	"#REQUIRED"
syn match  dtdAttrDef	"#IMPLIED"
syn match  dtdAttrDef	"#FIXED"

syn sync lines=250

if !exists("did_dtd_syntax_inits")
  let did_dtd_syntax_inits = 1
  " The default methods for highlighting.  Can be overridden later
  hi link dtdAttrType			Type
  hi link dtdAttrDef			Operator
  hi link dtdString			String
  hi link dtdEnum			String
  hi link dtdCard			String
  hi link dtdComment			Comment
  hi link dtdTag                	Tag
endif

let b:current_syntax = "dtd"

" vim: ts=8
