diff options
Diffstat (limited to 'syntax/ddoc.vim')
-rw-r--r-- | syntax/ddoc.vim | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/syntax/ddoc.vim b/syntax/ddoc.vim new file mode 100644 index 00000000..3c2860d8 --- /dev/null +++ b/syntax/ddoc.vim @@ -0,0 +1,86 @@ +if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'dlang') != -1 + finish +endif + +if &filetype == "ddoc" + "ddoc file type + " Quit when a syntax file was already loaded + if exists("b:current_syntax") + finish + endif + + " Support cpoptions + let s:cpo_save = &cpo + set cpo&vim + + " Set the current syntax to be known as ddoc + let b:current_syntax = "ddoc" + + syn match ddocIdentifier "\$(\zs\a\w*\ze\_W*" display conceal contained + syn match ddocIdentifierDecl "^\s*\zs\a\w*\ze\s*=" display contained + syn region ddocDecl start="^\s*\a\w*\s*=" end="\(\n\_^\s*\_$\|\n^\s*\a\w*\s*=\)" transparent fold contains=ddocIdentifierDecl,ddocIdentifier + + "use html comment when fold method is marker + set commentstring=<!--%s--> + + hi! def link ddocIdentifier Macro + hi! def link ddocIdentifierDecl Macro + + let &cpo = s:cpo_save + unlet s:cpo_save + +elseif &filetype == "dd" || &filetype == "d" && getline(1) =~ "^Ddoc" + "Ddoc source file or .d File begining with Ddoc + " Quit when a syntax file was already loaded + if exists("b:current_syntax") + finish + endif + + " Support cpoptions + let s:cpo_save = &cpo + set cpo&vim + " Set the current syntax to be known as ddoc + let b:current_syntax = "ddoc" + + syn match ddocKeyword "\%^Ddoc" display + syn keyword ddocKeyword MACROS contained + syn match ddocIdentifier "\$(\zs\a\w*\ze\_W*" display conceal + syn match ddocIdentifierDecl "^\s*\zs\a\w*\ze\s*=" display contained + "can slow down to much + "syn match ddocIdentifierDecl "\(^\s*MACROS:\s\+\)\@<=\zs\a\w*\ze\s*=" display contained + syn region ddocDecl start="^\s*MACROS:\_s\+" end="\%$" transparent fold contains=ddocKeyword,ddocIdentifierDecl,ddocIdentifier + + "use html comment when fold method is marker + set commentstring=<!--%s--> + + " highlight only ddoc Identifiers + hi! def link ddocIdentifier Macro + hi! def link ddocIdentifierDecl Macro + hi! def link ddocKeyword Macro + let &cpo = s:cpo_save + unlet s:cpo_save + finish +elseif &filetype == "d" + "Ddoc inside comments + syn keyword ddocKeyword MACROS contained + syn match ddocIdentifier "\$(\zs\a\w*\ze\_W*" display contained conceal containedin=@ddocComment + + syn match ddocIdentifierBlockDecl "^\*\=\s*\a\w*\ze\s*=" display contained + "can slow down to much + "syn match ddocIdentifierBlockDecl "\(^*\=\s*MACROS:\s\+\)\@<=\zs\a\w*\ze\s*=" display contained + + syn region ddocBlockDecl start="^\*\=\s*\zsMACROS:\_s\+" end="\ze\*/" transparent fold contained containedin=ddocBlockComment contains=ddocKeyword,ddocIdentifierBlockDecl,ddocIdentifier + + syn match ddocIdentifierNestedDecl "^+\=\s*\a\w*\ze\s*=" display contained + "can slow down to much + "syn match ddocIdentifierNestedDecl "\(^+\=\s*MACROS:\s\+\)\@<=\zs\a\w*\ze\s*=" display contained + + syn region ddocNestedDecl start="^+\=\s*\zsMACROS:\_s\+" end="\ze+/" transparent fold contained containedin=ddocNestedComment contains=ddocKeyword,ddocIdentifierNestedDecl,ddocIdentifier + + "reset to default commentstring + set commentstring=/*%s*/ + hi! def link ddocIdentifier Macro + hi! def link ddocIdentifierBlockDecl Macro + hi! def link ddocIdentifierNestedDecl Macro + hi! def link ddocKeyword Macro +endif |