| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Vim syntax file | 
					
						
							|  |  |  | " Language:	SGML | 
					
						
							|  |  |  | " Maintainer:	Johannes Zellner <johannes@zellner.org> | 
					
						
							|  |  |  | " Last Change:	Tue, 27 Apr 2004 15:05:21 CEST | 
					
						
							|  |  |  | " Filenames:	*.sgml,*.sgm | 
					
						
							| 
									
										
										
										
											2010-01-06 20:54:52 +01:00
										 |  |  | " $Id: sgml.vim,v 1.1 2004/06/13 17:52:57 vimboss Exp $ | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-30 23:26:57 +02:00
										 |  |  | " quit when a syntax file was already loaded | 
					
						
							|  |  |  | if exists("b:current_syntax") | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let s:sgml_cpo_save = &cpo | 
					
						
							|  |  |  | set cpo&vim | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn case match | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " mark illegal characters | 
					
						
							|  |  |  | syn match sgmlError "[<&]" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " unicode numbers: | 
					
						
							|  |  |  | " provide different highlithing for unicode characters | 
					
						
							|  |  |  | " inside strings and in plain text (character data). | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " EXAMPLE: | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " \u4e88 | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn match   sgmlUnicodeNumberAttr    +\\u\x\{4}+ contained contains=sgmlUnicodeSpecifierAttr | 
					
						
							|  |  |  | syn match   sgmlUnicodeSpecifierAttr +\\u+ contained | 
					
						
							|  |  |  | syn match   sgmlUnicodeNumberData    +\\u\x\{4}+ contained contains=sgmlUnicodeSpecifierData | 
					
						
							|  |  |  | syn match   sgmlUnicodeSpecifierData +\\u+ contained | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " strings inside character data or comments | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn region  sgmlString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=sgmlEntity,sgmlUnicodeNumberAttr display | 
					
						
							|  |  |  | syn region  sgmlString contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=sgmlEntity,sgmlUnicodeNumberAttr display | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " punctuation (within attributes) e.g. <tag sgml:foo.attribute ...> | 
					
						
							|  |  |  | "						^   ^ | 
					
						
							|  |  |  | syn match   sgmlAttribPunct +[:.]+ contained display | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " no highlighting for sgmlEqual (sgmlEqual has no highlighting group) | 
					
						
							|  |  |  | syn match   sgmlEqual +=+ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " attribute, everything before the '=' | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " PROVIDES: @sgmlAttribHook | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " EXAMPLE: | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " <tag foo.attribute = "value"> | 
					
						
							|  |  |  | "      ^^^^^^^^^^^^^ | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn match   sgmlAttrib | 
					
						
							|  |  |  |     \ +[^-'"<]\@<=\<[a-zA-Z0-9.:]\+\>\([^'">]\@=\|$\)+ | 
					
						
							|  |  |  |     \ contained | 
					
						
							|  |  |  |     \ contains=sgmlAttribPunct,@sgmlAttribHook | 
					
						
							|  |  |  |     \ display | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " UNQUOTED value (not including the '=' -- sgmlEqual) | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " PROVIDES: @sgmlValueHook | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " EXAMPLE: | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " <tag foo.attribute = value> | 
					
						
							|  |  |  | "		       ^^^^^ | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn match   sgmlValue | 
					
						
							|  |  |  |     \ +[^"' =/!?<>][^ =/!?<>]*+ | 
					
						
							|  |  |  |     \ contained | 
					
						
							|  |  |  |     \ contains=sgmlEntity,sgmlUnicodeNumberAttr,@sgmlValueHook | 
					
						
							|  |  |  |     \ display | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " QUOTED value (not including the '=' -- sgmlEqual) | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " PROVIDES: @sgmlValueHook | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " EXAMPLE: | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " <tag foo.attribute = "value"> | 
					
						
							|  |  |  | "		       ^^^^^^^ | 
					
						
							|  |  |  | " <tag foo.attribute = 'value'> | 
					
						
							|  |  |  | "		       ^^^^^^^ | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn region  sgmlValue contained start=+"+ skip=+\\\\\|\\"+ end=+"+ | 
					
						
							|  |  |  | 	    \ contains=sgmlEntity,sgmlUnicodeNumberAttr,@sgmlValueHook | 
					
						
							|  |  |  | syn region  sgmlValue contained start=+'+ skip=+\\\\\|\\'+ end=+'+ | 
					
						
							|  |  |  | 	    \ contains=sgmlEntity,sgmlUnicodeNumberAttr,@sgmlValueHook | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " value, everything after (and including) the '=' | 
					
						
							|  |  |  | " no highlighting! | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " EXAMPLE: | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " <tag foo.attribute = "value"> | 
					
						
							|  |  |  | "		     ^^^^^^^^^ | 
					
						
							|  |  |  | " <tag foo.attribute = value> | 
					
						
							|  |  |  | "		     ^^^^^^^ | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn match   sgmlEqualValue | 
					
						
							|  |  |  |     \ +=\s*[^ =/!?<>]\++ | 
					
						
							|  |  |  |     \ contained | 
					
						
							|  |  |  |     \ contains=sgmlEqual,sgmlString,sgmlValue | 
					
						
							|  |  |  |     \ display | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " start tag | 
					
						
							|  |  |  | " use matchgroup=sgmlTag to skip over the leading '<' | 
					
						
							|  |  |  | " see also sgmlEmptyTag below. | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " PROVIDES: @sgmlTagHook | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn region   sgmlTag | 
					
						
							|  |  |  |     \ matchgroup=sgmlTag start=+<[^ /!?"']\@=+ | 
					
						
							|  |  |  |     \ matchgroup=sgmlTag end=+>+ | 
					
						
							|  |  |  |     \ contained | 
					
						
							|  |  |  |     \ contains=sgmlError,sgmlAttrib,sgmlEqualValue,@sgmlTagHook | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " tag content for empty tags. This is the same as sgmlTag | 
					
						
							|  |  |  | " above, except the `matchgroup=sgmlEndTag for highlighting | 
					
						
							|  |  |  | " the end '/>' differently. | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " PROVIDES: @sgmlTagHook | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn region   sgmlEmptyTag | 
					
						
							|  |  |  |     \ matchgroup=sgmlTag start=+<[^ /!?"']\@=+ | 
					
						
							|  |  |  |     \ matchgroup=sgmlEndTag end=+/>+ | 
					
						
							|  |  |  |     \ contained | 
					
						
							|  |  |  |     \ contains=sgmlError,sgmlAttrib,sgmlEqualValue,@sgmlTagHook | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " end tag | 
					
						
							|  |  |  | " highlight everything but not the trailing '>' which | 
					
						
							|  |  |  | " was already highlighted by the containing sgmlRegion. | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " PROVIDES: @sgmlTagHook | 
					
						
							|  |  |  | " (should we provide a separate @sgmlEndTagHook ?) | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn match   sgmlEndTag | 
					
						
							|  |  |  |     \ +</[^ /!?>"']\+>+ | 
					
						
							|  |  |  |     \ contained | 
					
						
							|  |  |  |     \ contains=@sgmlTagHook | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " [-- SGML SPECIFIC --] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " SGML specific | 
					
						
							|  |  |  | " tag content for abbreviated regions | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " PROVIDES: @sgmlTagHook | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn region   sgmlAbbrTag | 
					
						
							|  |  |  |     \ matchgroup=sgmlTag start=+<[^ /!?"']\@=+ | 
					
						
							|  |  |  |     \ matchgroup=sgmlTag end=+/+ | 
					
						
							|  |  |  |     \ contained | 
					
						
							|  |  |  |     \ contains=sgmlError,sgmlAttrib,sgmlEqualValue,@sgmlTagHook | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " SGML specific | 
					
						
							|  |  |  | " just highlight the trailing '/' | 
					
						
							|  |  |  | syn match   sgmlAbbrEndTag +/+ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " SGML specific | 
					
						
							|  |  |  | " abbreviated regions | 
					
						
							|  |  |  | " | 
					
						
							| 
									
										
										
										
											2021-09-09 21:55:11 +02:00
										 |  |  | " No highlighting, highlighting is done by contained elements. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " | 
					
						
							|  |  |  | " PROVIDES: @sgmlRegionHook | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " EXAMPLE: | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " <bold/Im Anfang war das Wort/ | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn match   sgmlAbbrRegion | 
					
						
							|  |  |  |     \ +<[^/!?>"']\+/\_[^/]\+/+ | 
					
						
							|  |  |  |     \ contains=sgmlAbbrTag,sgmlAbbrEndTag,sgmlCdata,sgmlComment,sgmlEntity,sgmlUnicodeNumberData,@sgmlRegionHook | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " [-- END OF SGML SPECIFIC --] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " real (non-empty) elements. We cannot do syntax folding | 
					
						
							|  |  |  | " as in xml, because end tags may be optional in sgml depending | 
					
						
							|  |  |  | " on the dtd. | 
					
						
							| 
									
										
										
										
											2021-09-09 21:55:11 +02:00
										 |  |  | " No highlighting, highlighting is done by contained elements. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " | 
					
						
							|  |  |  | " PROVIDES: @sgmlRegionHook | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " EXAMPLE: | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " <tag id="whoops"> | 
					
						
							|  |  |  | "   <!-- comment --> | 
					
						
							|  |  |  | "   <another.tag></another.tag> | 
					
						
							|  |  |  | "   <another.tag/> | 
					
						
							|  |  |  | "   some data | 
					
						
							|  |  |  | " </tag> | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " SGML specific: | 
					
						
							|  |  |  | " compared to xmlRegion: | 
					
						
							|  |  |  | "   - removed folding | 
					
						
							|  |  |  | "   - added a single '/'in the start pattern | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn region   sgmlRegion | 
					
						
							|  |  |  |     \ start=+<\z([^ /!?>"']\+\)\(\(\_[^/>]*[^/!?]>\)\|>\)+ | 
					
						
							|  |  |  |     \ end=+</\z1>+ | 
					
						
							|  |  |  |     \ contains=sgmlTag,sgmlEndTag,sgmlCdata,@sgmlRegionCluster,sgmlComment,sgmlEntity,sgmlUnicodeNumberData,@sgmlRegionHook | 
					
						
							|  |  |  |     \ keepend | 
					
						
							|  |  |  |     \ extend | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " empty tags. Just a container, no highlighting. | 
					
						
							|  |  |  | " Compare this with sgmlTag. | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " EXAMPLE: | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " <tag id="lola"/> | 
					
						
							|  |  |  | " | 
					
						
							| 
									
										
										
										
											2021-09-09 21:55:11 +02:00
										 |  |  | " TODO use sgmlEmptyTag instead of sgmlTag | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | syn match    sgmlEmptyRegion | 
					
						
							|  |  |  |     \ +<[^ /!?>"']\(\_[^"'<>]\|"\_[^"]*"\|'\_[^']*'\)*/>+ | 
					
						
							|  |  |  |     \ contains=sgmlEmptyTag | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " cluster which contains the above two elements | 
					
						
							|  |  |  | syn cluster sgmlRegionCluster contains=sgmlRegion,sgmlEmptyRegion,sgmlAbbrRegion | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " &entities; compare with dtd | 
					
						
							|  |  |  | syn match   sgmlEntity		       "&[^; \t]*;" contains=sgmlEntityPunct | 
					
						
							|  |  |  | syn match   sgmlEntityPunct  contained "[&.;]" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " The real comments (this implements the comments as defined by sgml, | 
					
						
							|  |  |  | " but not all sgml pages actually conform to it. Errors are flagged. | 
					
						
							|  |  |  | syn region  sgmlComment                start=+<!+        end=+>+ contains=sgmlCommentPart,sgmlString,sgmlCommentError,sgmlTodo | 
					
						
							|  |  |  | syn keyword sgmlTodo         contained TODO FIXME XXX display | 
					
						
							|  |  |  | syn match   sgmlCommentError contained "[^><!]" | 
					
						
							|  |  |  | syn region  sgmlCommentPart  contained start=+--+        end=+--+ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " CData sections | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " PROVIDES: @sgmlCdataHook | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | syn region    sgmlCdata | 
					
						
							|  |  |  |     \ start=+<!\[CDATA\[+ | 
					
						
							|  |  |  |     \ end=+]]>+ | 
					
						
							|  |  |  |     \ contains=sgmlCdataStart,sgmlCdataEnd,@sgmlCdataHook | 
					
						
							|  |  |  |     \ keepend | 
					
						
							|  |  |  |     \ extend | 
					
						
							|  |  |  | " using the following line instead leads to corrupt folding at CDATA regions | 
					
						
							|  |  |  | " syn match    sgmlCdata      +<!\[CDATA\[\_.\{-}]]>+  contains=sgmlCdataStart,sgmlCdataEnd,@sgmlCdataHook | 
					
						
							|  |  |  | syn match    sgmlCdataStart +<!\[CDATA\[+  contained contains=sgmlCdataCdata | 
					
						
							|  |  |  | syn keyword  sgmlCdataCdata CDATA          contained | 
					
						
							|  |  |  | syn match    sgmlCdataEnd   +]]>+          contained | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Processing instructions | 
					
						
							|  |  |  | " This allows "?>" inside strings -- good idea? | 
					
						
							|  |  |  | syn region  sgmlProcessing matchgroup=sgmlProcessingDelim start="<?" end="?>" contains=sgmlAttrib,sgmlEqualValue | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " DTD -- we use dtd.vim here | 
					
						
							|  |  |  | syn region  sgmlDocType matchgroup=sgmlDocTypeDecl start="\c<!DOCTYPE"he=s+2,rs=s+2 end=">" contains=sgmlDocTypeKeyword,sgmlInlineDTD,sgmlString | 
					
						
							|  |  |  | syn keyword sgmlDocTypeKeyword contained DOCTYPE PUBLIC SYSTEM | 
					
						
							|  |  |  | syn region  sgmlInlineDTD contained start="\[" end="]" contains=@sgmlDTD | 
					
						
							|  |  |  | syn include @sgmlDTD <sfile>:p:h/dtd.vim | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " synchronizing | 
					
						
							|  |  |  | " TODO !!! to be improved !!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn sync match sgmlSyncDT grouphere  sgmlDocType +\_.\(<!DOCTYPE\)\@=+ | 
					
						
							|  |  |  | " syn sync match sgmlSyncDT groupthere  NONE       +]>+ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn sync match sgmlSync grouphere   sgmlRegion  +\_.\(<[^ /!?>"']\+\)\@=+ | 
					
						
							|  |  |  | " syn sync match sgmlSync grouphere  sgmlRegion "<[^ /!?>"']*>" | 
					
						
							|  |  |  | syn sync match sgmlSync groupthere  sgmlRegion  +</[^ /!?>"']\+>+ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn sync minlines=100 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " The default highlighting. | 
					
						
							|  |  |  | hi def link sgmlTodo			Todo | 
					
						
							|  |  |  | hi def link sgmlTag			Function | 
					
						
							|  |  |  | hi def link sgmlEndTag			Identifier | 
					
						
							|  |  |  | " SGML specifig | 
					
						
							|  |  |  | hi def link sgmlAbbrEndTag		Identifier | 
					
						
							|  |  |  | hi def link sgmlEmptyTag		Function | 
					
						
							|  |  |  | hi def link sgmlEntity			Statement | 
					
						
							|  |  |  | hi def link sgmlEntityPunct		Type | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hi def link sgmlAttribPunct		Comment | 
					
						
							|  |  |  | hi def link sgmlAttrib			Type | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hi def link sgmlValue			String | 
					
						
							|  |  |  | hi def link sgmlString			String | 
					
						
							|  |  |  | hi def link sgmlComment			Comment | 
					
						
							|  |  |  | hi def link sgmlCommentPart		Comment | 
					
						
							|  |  |  | hi def link sgmlCommentError		Error | 
					
						
							|  |  |  | hi def link sgmlError			Error | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hi def link sgmlProcessingDelim		Comment | 
					
						
							|  |  |  | hi def link sgmlProcessing		Type | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hi def link sgmlCdata			String | 
					
						
							|  |  |  | hi def link sgmlCdataCdata		Statement | 
					
						
							|  |  |  | hi def link sgmlCdataStart		Type | 
					
						
							|  |  |  | hi def link sgmlCdataEnd		Type | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hi def link sgmlDocTypeDecl		Function | 
					
						
							|  |  |  | hi def link sgmlDocTypeKeyword		Statement | 
					
						
							|  |  |  | hi def link sgmlInlineDTD		Function | 
					
						
							|  |  |  | hi def link sgmlUnicodeNumberAttr	Number | 
					
						
							|  |  |  | hi def link sgmlUnicodeSpecifierAttr	SpecialChar | 
					
						
							|  |  |  | hi def link sgmlUnicodeNumberData	Number | 
					
						
							|  |  |  | hi def link sgmlUnicodeSpecifierData	SpecialChar | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let b:current_syntax = "sgml" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let &cpo = s:sgml_cpo_save | 
					
						
							|  |  |  | unlet s:sgml_cpo_save | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " vim: ts=8 |