diff options
Diffstat (limited to 'runtime/syntax/flexwiki.vim')
-rw-r--r-- | runtime/syntax/flexwiki.vim | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/runtime/syntax/flexwiki.vim b/runtime/syntax/flexwiki.vim new file mode 100644 index 0000000..3b5f7ff --- /dev/null +++ b/runtime/syntax/flexwiki.vim @@ -0,0 +1,133 @@ +" Vim syntax file +" Language: FlexWiki, http://www.flexwiki.com/ +" Maintainer: George V. Reilly <george@reilly.org> +" Home: http://www.georgevreilly.com/vim/flexwiki/ +" Other Home: http://www.vim.org/scripts/script.php?script_id=1529 +" Author: George V. Reilly +" Filenames: *.wiki +" Last Change: Wed Apr 26 11:00 PM 2006 P +" Version: 0.3 + +" Note: The horrible regexps were reverse-engineered from +" FlexWikiCore\EngineSource\Formatter.cs, with help from the Regex Analyzer +" in The Regulator, http://regulator.sourceforge.net/ .NET uses Perl-style +" regexes, which use a different syntax than Vim (fewer \s). +" The primary test case is FlexWiki\FormattingRules.wiki + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" A WikiWord (unqualifiedWikiName) +syntax match flexwikiWord /\%(_\?\([A-Z]\{2,}[a-z0-9]\+[A-Za-z0-9]*\)\|\([A-Z][a-z0-9]\+[A-Za-z0-9]*[A-Z]\+[A-Za-z0-9]*\)\)/ +" A [bracketed wiki word] +syntax match flexwikiWord /\[[[:alnum:]\s]\+\]/ + +" text: "this is a link (optional tooltip)":http://www.microsoft.com +" TODO: check URL syntax against RFC +syntax match flexwikiLink `\("[^"(]\+\((\([^)]\+\))\)\?":\)\?\(https\?\|ftp\|gopher\|telnet\|file\|notes\|ms-help\):\(\(\(//\)\|\(\\\\\)\)\+[A-Za-z0-9:#@%/;$~_?+-=.&\-\\\\]*\)` + +" text: *strong* +syntax match flexwikiBold /\(^\|\W\)\zs\*\([^ ].\{-}\)\*/ +" '''bold''' +syntax match flexwikiBold /'''\([^'].\{-}\)'''/ + +" text: _emphasis_ +syntax match flexwikiItalic /\(^\|\W\)\zs_\([^ ].\{-}\)_/ +" ''italic'' +syntax match flexwikiItalic /''\([^'].\{-}\)''/ + +" ``deemphasis`` +syntax match flexwikiDeEmphasis /``\([^`].\{-}\)``/ + +" text: @code@ +syntax match flexwikiCode /\(^\|\s\|(\|\[\)\zs@\([^@]\+\)@/ + +" text: -deleted text- +syntax match flexwikiDelText /\(^\|\s\+\)\zs-\([^ <a ]\|[^ <img ]\|[^ -].*\)-/ + +" text: +inserted text+ +syntax match flexwikiInsText /\(^\|\W\)\zs+\([^ ].\{-}\)+/ + +" text: ^superscript^ +syntax match flexwikiSuperScript /\(^\|\W\)\zs^\([^ ].\{-}\)^/ + +" text: ~subscript~ +syntax match flexwikiSubScript /\(^\|\W\)\zs\~\([^ ].\{-}\)\~/ + +" text: ??citation?? +syntax match flexwikiCitation /\(^\|\W\)\zs??\([^ ].\{-}\)??/ + +" Emoticons: must come after the Textilisms, as later rules take precedence +" over earlier ones. This match is an approximation for the ~70 distinct +" patterns that FlexWiki knows. +syntax match flexwikiEmoticons /\((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/ + +" Aggregate all the regular text highlighting into flexwikiText +syntax cluster flexwikiText contains=flexwikiItalic,flexwikiBold,flexwikiCode,flexwikiDeEmphasis,flexwikiDelText,flexwikiInsText,flexwikiSuperScript,flexwikiSubScript,flexwikiCitation,flexwikiLink,flexwikiWord,flexwikiEmoticons + +" single-line WikiProperties +syntax match flexwikiSingleLineProperty /^:\?[A-Z_][_a-zA-Z0-9]\+:/ + +" TODO: multi-line WikiProperties + +" Header levels, 1-6 +syntax match flexwikiH1 /^!.*$/ +syntax match flexwikiH2 /^!!.*$/ +syntax match flexwikiH3 /^!!!.*$/ +syntax match flexwikiH4 /^!!!!.*$/ +syntax match flexwikiH5 /^!!!!!.*$/ +syntax match flexwikiH6 /^!!!!!!.*$/ + +" <hr>, horizontal rule +syntax match flexwikiHR /^----.*$/ + +" Formatting can be turned off by ""enclosing it in pairs of double quotes"" +syntax match flexwikiEscape /"".\{-}""/ + +" Tables. Each line starts and ends with '||'; each cell is separated by '||' +syntax match flexwikiTable /||/ + +" Bulleted list items start with one or tabs, followed by whitespace, then '*' +" Numeric list items start with one or tabs, followed by whitespace, then '1.' +" Eight spaces at the beginning of the line is equivalent to the leading tab. +syntax match flexwikiList /^\(\t\| \{8}\)\s*\(\*\|1\.\).*$/ contains=@flexwikiText + +" Treat all other lines that start with spaces as PRE-formatted text. +syntax match flexwikiPre /^[ \t]\+[^ \t*1].*$/ + + +" Link FlexWiki syntax items to colors +hi def link flexwikiH1 Title +hi def link flexwikiH2 flexwikiH1 +hi def link flexwikiH3 flexwikiH2 +hi def link flexwikiH4 flexwikiH3 +hi def link flexwikiH5 flexwikiH4 +hi def link flexwikiH6 flexwikiH5 +hi def link flexwikiHR flexwikiH6 + +hi def flexwikiBold term=bold cterm=bold gui=bold +hi def flexwikiItalic term=italic cterm=italic gui=italic + +hi def link flexwikiCode Statement +hi def link flexwikiWord Underlined + +hi def link flexwikiEscape Todo +hi def link flexwikiPre PreProc +hi def link flexwikiLink Underlined +hi def link flexwikiList Type +hi def link flexwikiTable Type +hi def link flexwikiEmoticons Constant +hi def link flexwikiDelText Comment +hi def link flexwikiDeEmphasis Comment +hi def link flexwikiInsText Constant +hi def link flexwikiSuperScript Constant +hi def link flexwikiSubScript Constant +hi def link flexwikiCitation Constant + +hi def link flexwikiSingleLineProperty Identifier + +let b:current_syntax="FlexWiki" + +" vim:tw=0: |