dotfiles/dot_vim/syntax/mediawiki.vim
2024-05-18 18:50:38 -07:00

304 lines
16 KiB
VimL

" Taken from http://en.wikipedia.org/wiki/Wikipedia:Text_editor_support#Vim
" Wikipedia syntax file for Vim
" Published on Wikipedia in 2003-04 and declared authorless.
"
" Based on the HTML syntax file. Probably too closely based, in fact. There
" may well be name collisions everywhere, but ignorance is bliss, so they say.
"
" To do: plug-in support for downloading and uploading to the server.
if !exists("main_syntax")
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
let main_syntax = 'html'
endif
if version < 508
command! -nargs=+ HtmlHiLink hi link <args>
else
command! -nargs=+ HtmlHiLink hi def link <args>
endif
syn case ignore
if v:version >= 700
syn spell toplevel
endif
" tags
syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar
syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar
syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1
syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN
syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlBadArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,htmlBadTag,@htmlTagNameCluster
syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,htmlBadTag,@htmlTagNameCluster
syn match htmlTagError contained "[^>]<"ms=s+1
" This would highlight all tags and <whatevertext> fragments that are not allowed.
"syn match htmlBadTag contained +<\s*[-a-zA-Z0-9]\++ms=s+1
" Highlight only known disallowed HTML tags, so that not every "<whatevertext>"
" fragment is flagged.
syn keyword htmlBadTag contained a acronym address applet area base basefont bdo body button col colgroup dfn dir fieldset form frame frameset head html iframe img input isindex kbd label legend link map menu meta noframes noscript object optgroup option param q script select style tbody textarea tfoot thead title
syn match htmlBadArg contained "\s\+[-a-zA-Z0-9]\+\s*="ms=s+1,me=e-1
" allowed HTML tag names
syn keyword htmlTagName contained b big blockquote br caption center cite code dd del div dl dt em font h1 h2 h3 h4 h5 h6 hr i ins li ol p pre rb rp rt ruby s small span strike strong sub sup table td th tr tt u ul var
" allowed Wiki tag names
syn keyword htmlTagName contained nowiki math references
" allowed arg names
syn keyword htmlArg contained title align lang dir width height nowrap
syn keyword htmlArg contained bgcolor clear noshade
syn keyword htmlArg contained cite datetime size face color
syn keyword htmlArg contained type start value compact
syn keyword htmlArg contained summary border frame rules
syn keyword htmlArg contained cellspacing cellpadding valign char
syn keyword htmlArg contained charoff colgroup col span abbr axis
syn keyword htmlArg contained headers scope rowspan colspan
syn keyword htmlArg contained id class name style
" special characters
syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
" comments
syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError
syn match htmlCommentError contained "[^><!]"
syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc
syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+
" HTML formatting
syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlComment,htmlLink
syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline
syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline
syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic
syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic
syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic
syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic
syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmUnderlineItalicBold
syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmUnderlineItalicBold
syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop
syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop
syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline
syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop
syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline
syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline
syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop
syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold
syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop
syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
syn region htmlHead start="<head\>" end="</head>"me=e-7 end="<body\>"me=e-5 end="<h[1-6]\>"me=e-3 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,htmlTitle,cssStyle
syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment
" No htmlTop and wikiPre inside HTML preformatted areas, because Wikipedia
" renders everything in there literally (HTML tags and entities, too):
" <pre> tags work as the combination of <nowiki> and the standard HTML <pre>
" tag: the content will preformatted, and it will not be parsed, but shown as
" in the wikitext source.
" With wikiPre, indented lines would be rendered differently from unindented
" lines.
syn match htmlPreTag /<pre>/ contains=htmlTag
syn match wikiNowikiTag /<nowiki>/ contains=htmlTag
syn match wikiNowikiEndTag /<\/nowiki>/ contains=htmlEndTag
" Note: Cannot use 'start="<pre>"rs=e', so still have the <pre> tag highlighted
" correctly via separate syn-match. Unfortunately, this will also highlight
" <pre> tags inside the preformatted region.
syn region htmlPre start="<pre>" end="</pre>"me=e-6 contains=htmlPreTag
syn region wikiNowiki start="<nowiki>" end="</nowiki>"me=e-9 contains=wikiNowikiTag
" wiki formatting
syn region wikiItalic start=+'\@<!'''\@!+ end=+''+ skip="<nowiki>.*</nowiki>" contains=@Spell,wikiLink,wikiItalicBold,wikiNowiki,wikiNowikiEndTag
syn region wikiBold start=+'''+ end=+'''+ skip="<nowiki>.*</nowiki>" contains=@Spell,wikiLink,wikiBoldItalic,wikiNowiki,wikiNowikiEndTag
syn region wikiBoldAndItalic start=+'''''+ end=+'''''+ skip="<nowiki>.*</nowiki>" contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
syn region wikiBoldItalic contained start=+'\@<!'''\@!+ end=+''+ skip="<nowiki>.*</nowiki>" contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
syn region wikiItalicBold contained start=+'''+ end=+'''+ skip="<nowiki>.*</nowiki>" contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
syn region wikiH1 start="^=" end="=" skip="<nowiki>.*</nowiki>" oneline contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
syn region wikiH2 start="^==" end="==" skip="<nowiki>.*</nowiki>" oneline contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
syn region wikiH3 start="^===" end="===" skip="<nowiki>.*</nowiki>" oneline contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
syn region wikiH4 start="^====" end="====" skip="<nowiki>.*</nowiki>" oneline contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
syn region wikiH5 start="^=====" end="=====" skip="<nowiki>.*</nowiki>" oneline contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
syn region wikiH6 start="^======" end="======" skip="<nowiki>.*</nowiki>" oneline contains=@Spell,wikiLink,wikiNowiki,wikiNowikiEndTag
syn region wikiLink start="\[\[" end="\]\]\(s\|'s\|es\|ing\|\)" skip="<nowiki>.*</nowiki>" oneline contains=wikiLink,wikiNowiki,wikiNowikiEndTag
syn region wikiLink start="\[http:" end="\]" skip="<nowiki>.*</nowiki>" oneline contains=wikiNowiki,wikiNowikiEndTag
syn region wikiLink start="\[https:" end="\]" skip="<nowiki>.*</nowiki>" oneline contains=wikiNowiki,wikiNowikiEndTag
syn region wikiLink start="\[ftp:" end="\]" skip="<nowiki>.*</nowiki>" oneline contains=wikiNowiki,wikiNowikiEndTag
syn region wikiLink start="\[gopher:" end="\]" skip="<nowiki>.*</nowiki>" oneline contains=wikiNowiki,wikiNowikiEndTag
syn region wikiLink start="\[news:" end="\]" skip="<nowiki>.*</nowiki>" oneline contains=wikiNowiki,wikiNowikiEndTag
syn region wikiLink start="\[mailto:" end="\]" skip="<nowiki>.*</nowiki>" oneline contains=wikiNowiki,wikiNowikiEndTag
syn region wikiTemplate start="{{" end="}}" skip="<nowiki>.*</nowiki>" contains=wikiNowiki,wikiNowikiEndTag
syn match wikiParaFormatChar /^[\:|\*|;|#]\+/
syn match wikiParaFormatChar /^-----*/
syn match wikiPre /^\ .*$/ contains=wikiNowiki,wikiNowikiEndTag
syn include @TeX syntax/tex.vim
syntax region wikiTeX matchgroup=htmlTag start="<math>" end="</math>" skip="<nowiki>.*</nowiki>" contains=@TeX,wikiNowiki,wikiNowikiEndTag
syntax region wikiRef matchgroup=htmlTag start="<ref>" end="</ref>" skip="<nowiki>.*</nowiki>" contains=wikiNowiki,wikiNowikiEndTag
" HTML highlighting
HtmlHiLink htmlTag Function
HtmlHiLink htmlEndTag Identifier
HtmlHiLink htmlArg Type
HtmlHiLink htmlTagName htmlStatement
HtmlHiLink htmlSpecialTagName Exception
HtmlHiLink htmlValue String
HtmlHiLink htmlSpecialChar Special
HtmlHiLink htmlH1 Title
HtmlHiLink htmlH2 htmlH1
HtmlHiLink htmlH3 htmlH2
HtmlHiLink htmlH4 htmlH3
HtmlHiLink htmlH5 htmlH4
HtmlHiLink htmlH6 htmlH5
HtmlHiLink htmlHead PreProc
HtmlHiLink htmlTitle Title
HtmlHiLink htmlBoldItalicUnderline htmlBoldUnderlineItalic
HtmlHiLink htmlUnderlineBold htmlBoldUnderline
HtmlHiLink htmlUnderlineItalicBold htmlBoldUnderlineItalic
HtmlHiLink htmlUnderlineBoldItalic htmlBoldUnderlineItalic
HtmlHiLink htmlItalicUnderline htmlUnderlineItalic
HtmlHiLink htmlItalicBold htmlBoldItalic
HtmlHiLink htmlItalicBoldUnderline htmlBoldUnderlineItalic
HtmlHiLink htmlItalicUnderlineBold htmlBoldUnderlineItalic
HtmlHiLink htmlSpecial Special
HtmlHiLink htmlSpecialChar Special
HtmlHiLink htmlString String
HtmlHiLink htmlStatement Statement
HtmlHiLink htmlComment Comment
HtmlHiLink htmlCommentPart Comment
HtmlHiLink htmlValue String
HtmlHiLink htmlCommentError htmlError
HtmlHiLink htmlTagError htmlError
HtmlHiLink htmlBadTag htmlError
HtmlHiLink htmlBadArg htmlError
HtmlHiLink htmlEvent javaScript
HtmlHiLink htmlError Error
HtmlHiLink htmlCssStyleComment Comment
HtmlHiLink htmlCssDefinition Special
" The default highlighting.
if version >= 508 || !exists("did_html_syn_inits")
if version < 508
let did_html_syn_inits = 1
endif
HtmlHiLink htmlTag Function
HtmlHiLink htmlEndTag Identifier
HtmlHiLink htmlArg Type
HtmlHiLink htmlTagName htmlStatement
HtmlHiLink htmlSpecialTagName Exception
HtmlHiLink htmlValue String
HtmlHiLink htmlSpecialChar Special
if !exists("html_no_rendering")
HtmlHiLink htmlH1 Title
HtmlHiLink htmlH2 htmlH1
HtmlHiLink htmlH3 htmlH2
HtmlHiLink htmlH4 htmlH3
HtmlHiLink htmlH5 htmlH4
HtmlHiLink htmlH6 htmlH5
HtmlHiLink htmlHead PreProc
HtmlHiLink htmlTitle Title
HtmlHiLink htmlBoldItalicUnderline htmlBoldUnderlineItalic
HtmlHiLink htmlUnderlineBold htmlBoldUnderline
HtmlHiLink htmlUnderlineItalicBold htmlBoldUnderlineItalic
HtmlHiLink htmlUnderlineBoldItalic htmlBoldUnderlineItalic
HtmlHiLink htmlItalicUnderline htmlUnderlineItalic
HtmlHiLink htmlItalicBold htmlBoldItalic
HtmlHiLink htmlItalicBoldUnderline htmlBoldUnderlineItalic
HtmlHiLink htmlItalicUnderlineBold htmlBoldUnderlineItalic
HtmlHiLink htmlLink Underlined
if !exists("html_my_rendering")
hi def htmlBold term=bold cterm=bold gui=bold
hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
hi def htmlUnderline term=underline cterm=underline gui=underline
hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
hi def htmlItalic term=italic cterm=italic gui=italic
endif
endif
HtmlHiLink htmlPreStmt PreProc
HtmlHiLink htmlPreError Error
HtmlHiLink htmlPreProc PreProc
HtmlHiLink htmlPreAttr String
HtmlHiLink htmlPreProcAttrName PreProc
HtmlHiLink htmlPreProcAttrError Error
HtmlHiLink htmlSpecial Special
HtmlHiLink htmlSpecialChar Special
HtmlHiLink htmlString String
HtmlHiLink htmlStatement Statement
HtmlHiLink htmlComment Comment
HtmlHiLink htmlCommentPart Comment
HtmlHiLink htmlValue String
HtmlHiLink htmlCommentError htmlError
HtmlHiLink htmlTagError htmlError
HtmlHiLink htmlBadTag htmlError
HtmlHiLink htmlBadArg htmlError
HtmlHiLink htmlEvent javaScript
HtmlHiLink htmlError Error
HtmlHiLink javaScript Special
HtmlHiLink javaScriptExpression javaScript
HtmlHiLink htmlCssStyleComment Comment
HtmlHiLink htmlCssDefinition Special
endif
" wiki highlighting
HtmlHiLink wikiItalic htmlItalic
HtmlHiLink wikiBold htmlBold
HtmlHiLink wikiBoldItalic htmlBoldItalic
HtmlHiLink wikiItalicBold htmlBoldItalic
HtmlHiLink wikiBoldAndItalic htmlBoldItalic
HtmlHiLink wikiH1 htmlH1
HtmlHiLink wikiH2 htmlH2
HtmlHiLink wikiH3 htmlH3
HtmlHiLink wikiH4 htmlH4
HtmlHiLink wikiH5 htmlH5
HtmlHiLink wikiH6 htmlH6
HtmlHiLink wikiLink Underlined
HtmlHiLink wikiTemplate Special
HtmlHiLink wikiParaFormatChar Special
HtmlHiLink wikiPre Constant
HtmlHiLink wikiRef Comment
let b:current_syntax = "html"
delcommand HtmlHiLink
if main_syntax == 'html'
unlet main_syntax
endif