mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
updated for version 7.0001
This commit is contained in:
337
runtime/syntax/sgml.vim
Normal file
337
runtime/syntax/sgml.vim
Normal file
@@ -0,0 +1,337 @@
|
||||
" Vim syntax file
|
||||
" Language: SGML
|
||||
" Maintainer: Johannes Zellner <johannes@zellner.org>
|
||||
" Last Change: Tue, 27 Apr 2004 15:05:21 CEST
|
||||
" Filenames: *.sgml,*.sgm
|
||||
" $Id$
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
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
|
||||
"
|
||||
" No highlighing, highlighing is done by contained elements.
|
||||
"
|
||||
" 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.
|
||||
" No highlighing, highlighing is done by contained elements.
|
||||
"
|
||||
" 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"/>
|
||||
"
|
||||
" TODO use sgmlEmptyTag intead of sgmlTag
|
||||
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
|
Reference in New Issue
Block a user