mirror of
https://github.com/neovim/neovim.git
synced 2024-12-25 05:35:10 -07:00
338 lines
8.8 KiB
VimL
338 lines
8.8 KiB
VimL
|
" 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: sgml.vim,v 1.1 2004/06/13 17:52:57 vimboss Exp $
|
||
|
|
||
|
" 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
|