mirror of
https://github.com/kennethreitz-archive/krvim.git
synced 2026-06-05 15:30:19 +00:00
331 lines
11 KiB
VimL
331 lines
11 KiB
VimL
" Vim syntax file
|
|
" Language: Pandoc (superset of Markdown)
|
|
" Maintainer: Jeremy Schultz <taozhyn@gmail.com>
|
|
" URL:
|
|
" Version: 2
|
|
" Changes: 2008-11-04
|
|
" - Fixed an issue with Block elements (header) not being highlighted when
|
|
" placed on the first or second line of the file
|
|
" - Fixed multi line HTML comment block
|
|
" - Fixed lowercase list items
|
|
" - Fixed list items gobbling to many empty lines
|
|
" - Added highlight support to identify newline (2 spaces)
|
|
" - Fixed HTML highlight, ignore if the first character in the
|
|
" angle brackets is not a letter
|
|
" - Fixed Emphasis highlighting when it contained multiple
|
|
" spaces
|
|
" Remark: Uses HTML and TeX syntax file
|
|
|
|
if version < 600
|
|
syntax clear
|
|
elseif exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
|
|
syn spell toplevel
|
|
syn case ignore
|
|
syn sync linebreaks=1
|
|
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" Set embedded HTML highlighting
|
|
syn include @HTML syntax/html.vim
|
|
syn match pdcHTML /<\a[^>]\+>/ contains=@HTML
|
|
|
|
" Support HTML multi line comments
|
|
syn region pdcHTMLComment start=/<!--/ end=/-->/
|
|
|
|
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" Set embedded LaTex (pandox extension) highlighting
|
|
" Unset current_syntax so the 2nd include will work
|
|
unlet b:current_syntax
|
|
syn include @LATEX syntax/tex.vim
|
|
|
|
" Single Tex command
|
|
syn match pdcLatex /\\\w\+{[^}]\+}/ contains=@LATEX
|
|
|
|
" Tex Block (begin-end)
|
|
syn region pdcLatex start=/\\begin{[^}]\+}\ze/ end=/\ze\\end{[^}]\+}/ contains=@LATEX
|
|
|
|
" Math Tex
|
|
syn match pdcLatex /$[^$]\+\$/ contains=@LATEX
|
|
|
|
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" Block Elements
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
|
" Needed by other elements
|
|
syn match pdcBlankLine /\(^\s*\n\|\%^\)/ nextgroup=pdcHeader,pdcCodeBlock,pdcListItem,pdcListItem1,pdcHRule,pdcTableHeader,pdcTableMultiStart,pdcBlockquote transparent
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Title Block:
|
|
syn match pandocTitleBlock /\%^\(%.*\n\)\{1,3}$/
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Headers:
|
|
|
|
" Underlined, using == or --
|
|
syn match pdcHeader /^.\+\n[=-]\+$/ contains=@Spell nextgroup=pdcHeader contained skipnl
|
|
|
|
" Atx-style, Hash marks
|
|
syn region pdcHeader start="^\s*#\{1,6}[^#]*" end="\($\|#\+\)" contains=@Spell contained nextgroup=pdcHeader skipnl
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Blockquotes:
|
|
|
|
syn match pdcBlockquote /\s*>.*$/ nextgroup=pdcBlockquote,pdcBlockquote2 contained skipnl
|
|
syn match pdcBlockquote2 /[^>].*/ nextgroup=pdcBlockquote2 skipnl contained
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Code Blocks:
|
|
|
|
" Indent with at least 4 space or 1 tab
|
|
" This rule must appear for pdcListItem, or highlighting gets messed up
|
|
syn match pdcCodeBlock /\(\s\{4,}\|\t\{1,}\).*\n/ contained nextgroup=pdcCodeBlock
|
|
|
|
" HTML code blocks, pre and code
|
|
syn match pdcCodeStartPre /<pre>/ nextgroup=pdcCodeHTMLPre skipnl transparent
|
|
syn match pdcCodeHTMLPre /.*/ contained nextgroup=pdcCodeHTMLPre,pdcCodeEndPre skipnl
|
|
syn match pdcCodeEndPre /\s*<\/pre>/ contained transparent
|
|
|
|
" HTML code blocks, code
|
|
syn match pdcCodeStartCode /<code>/ nextgroup=pdcCodeHTMLCode skipnl transparent
|
|
syn match pdcCodeHTMLCode /.*/ contained nextgroup=pdcCodeHTMLCode,pdcCodeEndCode skipnl
|
|
syn match pdcCodeEndCode /\s*<\/code>/ contained transparent
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Lists:
|
|
|
|
" These first two rules need to be first or the highlighting will be
|
|
" incorrect
|
|
|
|
" Continue a list on the next line
|
|
syn match pdcListCont /\s*[^-+*].*\n/ contained nextgroup=pdcListCont,pdcListItem,pdcListSkipNL transparent
|
|
|
|
" Skip empty lines
|
|
syn match pdcListSkipNL /\s*\n/ contained nextgroup=pdcListItem,pdcListSkipNL
|
|
|
|
" Unorder list
|
|
syn match pdcListItem /\s*[-*+]\s\+/ contained nextgroup=pdcListSkipNL,pdcListCont skipnl
|
|
|
|
" Order list, numeric
|
|
syn match pdcListItem /\s*(\?\(\d\+\|#\)[\.)]\s\+/ contained nextgroup=pdcListSkipNL,pdcListCont skipnl
|
|
|
|
" Order list, roman numerals (does not guarantee correct roman numerals)
|
|
syn match pdcListItem /\s*(\?[ivxlcdm]\+[\.)]\s\+/ contained nextgroup=pdcListSkipNL,pdcListCont skipnl
|
|
|
|
" Order list, lowercase letters
|
|
syn match pdcListItem /\s*(\?\l[\.)]\s\+/ contained nextgroup=pdcListSkipNL,pdcListCont skipnl
|
|
|
|
" Order list, uppercase letters, does not include '.'
|
|
syn match pdcListItem /\s*(\?\u[\)]\s\+/ contained nextgroup=pdcListSkipNL,pdcListCont skipnl
|
|
|
|
" Order list, uppercase letters, special case using '.' and two or more spaces
|
|
syn match pdcListItem /\s*\u\.\([ ]\{2,}\|\t\+\)/ contained nextgroup=pdcListSkipNL,pdcListCont skipnl
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Horizontal Rules:
|
|
|
|
" 3 or more * on a line
|
|
syn match pdcHRule /\s\{0,3}\(-\s*\)\{3,}\n/ contained nextgroup=pdcHRule
|
|
|
|
" 3 or more - on a line
|
|
syn match pdcHRule /\s\{0,3}\(\*\s*\)\{3,}\n/ contained nextgroup=pdcHRule
|
|
|
|
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" Span Elements
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Links:
|
|
|
|
" Link Text
|
|
syn match pdcLinkText /\[\zs[^\]]*\ze\]/ contains=@Spell
|
|
|
|
" Link ID
|
|
syn match pdcLinkID /\][ ]\{0,1}\[\zs[^\]]*\ze\]/
|
|
|
|
" Skip [ so we do not highlight it
|
|
syn match pdcSkip /^[ ]\{0,3}\[/ nextgroup=pdcLinkID
|
|
|
|
" Link ID - definition
|
|
syn match pdcLinkID /[^\]]*\ze\]:/ nextgroup=pdcSkip skipwhite contained
|
|
|
|
" Skip ]: so we do not highlight it
|
|
syn match pdcSkip /\]:/ contained nextgroup=pdcLinkURL skipwhite
|
|
|
|
" Link URL
|
|
syn region pdcLinkURL start=/\](\zs/ end=/)/me=e-1
|
|
|
|
" Link URL on ID definition line
|
|
syn match pdcLinkURL /\s\+.*\s\+\ze[("']/ nextgroup=pdcLinkTitle skipwhite contained
|
|
syn match pdcLinkURL /\s*.*\s*[^)"']\s*$/ contained
|
|
syn match pdcLinkURL /\s*.*\s*[^)"']\s*\n\s*\ze[("']/ contained nextgroup=pdcLinkTitle skipwhite
|
|
|
|
" Link URL for inline <> links
|
|
syn match pdcLinkURL /<http[^>]*>/
|
|
syn match pdcLinkURL /<[^>]*@[^>]*.[^>]*>/
|
|
|
|
" Link Title
|
|
syn match pdcLinkTitle /\s*[("'].*[)"']/ contained contains=@Spell
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Emphasis:
|
|
|
|
" Using underscores
|
|
syn match pdcEmphasis / \(_\|__\)\([^_ ]\|[^_]\( [^_]\)\+\)\+\1/ contains=@Spell
|
|
|
|
" Using Asterisks
|
|
syn match pdcEmphasis / \(\*\|\*\*\)\([^\* ]\|[^\*]\( [^\*]\)\+\)\+\1/ contains=@Spell
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Inline Code:
|
|
|
|
" Using single back ticks
|
|
syn region pdcCode start=/`/ end=/`\|^\s*$/
|
|
|
|
" Using double back ticks
|
|
syn region pdcCode start=/``[^`]*/ end=/``\|^\s*$/
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Images:
|
|
" Handled by link syntax
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Misc:
|
|
|
|
" Pandoc escapes all characters after a backslash
|
|
syn match NONE /\\\W/
|
|
|
|
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" Span Elements
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Subscripts:
|
|
syn match pdcSubscript /\~\([^\~\\ ]\|\(\\ \)\)\+\~/ contains=@Spell
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Superscript:
|
|
syn match pdcSuperscript /\^\([^\^\\ ]\|\(\\ \)\)\+\^/ contains=@Spell
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Strikeout:
|
|
syn match pdcStrikeout /\~\~[^\~ ]\([^\~]\|\~ \)*\~\~/ contains=@Spell
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Definitions:
|
|
syn match pdcDefinitions /:\(\t\|[ ]\{3,}\)/ nextgroup=pdcListItem,pdcCodeBlock,pdcBlockquote,pdcHRule
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Footnote:
|
|
syn match pdcFootnoteID /\[\^[^\]]\+\]/ nextgroup=pdcFootnoteDef
|
|
|
|
" This does not work correctly
|
|
syn region pdcFootnoteDef start=/:/ end=/^\n\+\(\(\t\+\|[ ]\{4,}\)\S\)\@!/ contained contains=pdcFootnoteDef
|
|
|
|
" Inline footnotes
|
|
syn region pdcFootnoteDef matchgroup=pdcFootnoteID start=/\^\[/ matchgroup=pdcFootnoteID end=/\]/
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Tables:
|
|
"
|
|
" Regular Table
|
|
syn match pdcTableHeader /\s*\w\+\(\s\+\w\+\)\+\s*\n\s*-\+\(\s\+-\+\)\+\s*\n/ contained nextgroup=pdcTableBody
|
|
syn match pdcTableBody /\s*\w\+\(\s\+\w\+\)\+\s*\n/ contained nextgroup=pdcTableBody,pdcTableCaption skipnl
|
|
syn match pdcTableCaption /\n\+\s*Table.*\n/ contained nextgroup=pdcTableCaptionCont
|
|
syn match pdcTableCaptionCont /\s*\S.\+\n/ contained nextgroup=pdcTableCaptionCont
|
|
|
|
" Multi-line Table
|
|
syn match pdcTableMultiStart /^\s\{0,3}-\+\s*\n\ze\(\s*\w\+\(\s\+\w\+\)\+\s*\n\)\+\s*-\+\(\s\+-\+\)\+\s*\n/ contained nextgroup=pdcTableMultiHeader
|
|
syn match pdcTableMultiEnd /^\s\{0,3}-\+/ contained nextgroup=pdcTableMultiCaption skipnl
|
|
syn match pdcTableMultiHeader /\(\s*\w\+\(\s\+\w\+\)\+\s*\n\)\+\s*-\+\(\s\+-\+\)\+\s*\n/ contained nextgroup=pdcTableMultiBody
|
|
syn match pdcTableMultiBody /^\(\s\{3,}[^-]\|[^-\s]\).*$/ contained nextgroup=pdcTableMultiBody,pdcTableMultiSkipNL,pdcTableMultiEnd skipnl
|
|
syn match pdcTableMultiSkipNL /^\s*\n/ contained nextgroup=pdcTableMultiBody,pdcTableMultiEnd skipnl
|
|
syn match pdcTableMultiCaption /\n*\s*Table.*\n/ contained nextgroup=pdcTableCaptionCont
|
|
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Delimited Code Block: (added in 1.0)
|
|
syn region pdcCodeBlock matchgroup=pdcCodeStart start=/^\z(\~\{3,}\) \( {[^}]\+}\)\?/ matchgroup=pdcCodeEnd end=/^\z1\~*/
|
|
|
|
|
|
"""""""""""""""""""""""""""""""""""""""
|
|
" Newline, 2 spaces at the end of line means newline
|
|
syn match pdcNewLine / $/
|
|
|
|
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
" Highlight groups
|
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
hi link pdcHeader Title
|
|
hi link pdcBlockquote Comment
|
|
hi link pdcBlockquote2 Comment
|
|
|
|
hi link pdcHTMLComment Comment
|
|
|
|
hi link pdcHRule Underlined
|
|
"hi link pdcHRule Special
|
|
|
|
hi link pdcListItem Operator
|
|
hi link pdcDefinitions Operator
|
|
|
|
hi link pdcEmphasis Special
|
|
hi link pdcSubscript Special
|
|
hi link pdcSuperscript Special
|
|
hi link pdcStrikeout Special
|
|
|
|
hi link pdcLinkText Underlined
|
|
hi link pdcLinkID Identifier
|
|
hi link pdcLinkURL Type
|
|
hi link pdcLinkTitle Comment
|
|
|
|
hi link pdcFootnoteID Identifier
|
|
hi link pdcFootnoteDef Comment
|
|
hi link pandocFootnoteCont Error
|
|
|
|
hi link pdcCodeBlock String
|
|
hi link pdcCodeHTMLPre String
|
|
hi link pdcCodeHTMLCode String
|
|
hi link pdcCode String
|
|
hi link pdcCodeStart Comment
|
|
hi link pdcCodeEnd Comment
|
|
|
|
hi link pandocTitleBlock Comment
|
|
|
|
hi link pdcTableMultiStart Comment
|
|
hi link pdcTableMultiEnd Comment
|
|
hi link pdcTableHeader Define
|
|
hi link pdcTableMultiHeader Define
|
|
hi link pdcTableBody Identifier
|
|
hi link pdcTableMultiBody Identifier
|
|
hi link pdcTableCaption Label
|
|
hi link pdcTableMultiCaption Label
|
|
hi link pdcTableCaptionCont Label
|
|
|
|
hi link pdcNewLine Error
|
|
|
|
|
|
" For testing
|
|
hi link pdctest Error
|
|
|
|
|
|
let b:current_syntax = "pandoc"
|
|
|