blob: 34f893d927e4306b088a1bc229225f75d3dabadf [file] [log] [blame]
Bram Moolenaar437df8f2006-04-27 21:47:44 +00001" Vim syntax file
2" Language: FlexWiki, http://www.flexwiki.com/
3" Maintainer: George V. Reilly <george@reilly.org>
4" Home: http://www.georgevreilly.com/vim/flexwiki/
5" Other Home: http://www.vim.org/scripts/script.php?script_id=1529
6" Author: George V. Reilly
7" Filenames: *.wiki
8" Last Change: Wed Apr 26 11:00 PM 2006 P
9" Version: 0.3
10
11" Note: The horrible regexps were reverse-engineered from
12" FlexWikiCore\EngineSource\Formatter.cs, with help from the Regex Analyzer
13" in The Regulator, http://regulator.sourceforge.net/ .NET uses Perl-style
14" regexes, which use a different syntax than Vim (fewer \s).
15" The primary test case is FlexWiki\FormattingRules.wiki
16
17" Quit if syntax file is already loaded
18if version < 600
19 syntax clear
20elseif exists("b:current_syntax")
21 finish
22endif
23
24" A WikiWord (unqualifiedWikiName)
25syntax 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]*\)\)/
26" A [bracketed wiki word]
27syntax match flexwikiWord /\[[[:alnum:]\s]\+\]/
28
29" text: "this is a link (optional tooltip)":http://www.microsoft.com
30" TODO: check URL syntax against RFC
31syntax match flexwikiLink `\("[^"(]\+\((\([^)]\+\))\)\?":\)\?\(https\?\|ftp\|gopher\|telnet\|file\|notes\|ms-help\):\(\(\(//\)\|\(\\\\\)\)\+[A-Za-z0-9:#@%/;$~_?+-=.&\-\\\\]*\)`
32
33" text: *strong*
34syntax match flexwikiBold /\(^\|\W\)\zs\*\([^ ].\{-}\)\*/
35" '''bold'''
36syntax match flexwikiBold /'''\([^'].\{-}\)'''/
37
38" text: _emphasis_
39syntax match flexwikiItalic /\(^\|\W\)\zs_\([^ ].\{-}\)_/
40" ''italic''
41syntax match flexwikiItalic /''\([^'].\{-}\)''/
42
43" ``deemphasis``
44syntax match flexwikiDeEmphasis /``\([^`].\{-}\)``/
45
46" text: @code@
47syntax match flexwikiCode /\(^\|\s\|(\|\[\)\zs@\([^@]\+\)@/
48
49" text: -deleted text-
50syntax match flexwikiDelText /\(^\|\s\+\)\zs-\([^ <a ]\|[^ <img ]\|[^ -].*\)-/
51
52" text: +inserted text+
53syntax match flexwikiInsText /\(^\|\W\)\zs+\([^ ].\{-}\)+/
54
55" text: ^superscript^
56syntax match flexwikiSuperScript /\(^\|\W\)\zs^\([^ ].\{-}\)^/
57
58" text: ~subscript~
59syntax match flexwikiSubScript /\(^\|\W\)\zs\~\([^ ].\{-}\)\~/
60
61" text: ??citation??
62syntax match flexwikiCitation /\(^\|\W\)\zs??\([^ ].\{-}\)??/
63
64" Emoticons: must come after the Textilisms, as later rules take precedence
65" over earlier ones. This match is an approximation for the ~70 distinct
66" patterns that FlexWiki knows.
67syntax match flexwikiEmoticons /\((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/
68
69" Aggregate all the regular text highlighting into flexwikiText
70syntax cluster flexwikiText contains=flexwikiItalic,flexwikiBold,flexwikiCode,flexwikiDeEmphasis,flexwikiDelText,flexwikiInsText,flexwikiSuperScript,flexwikiSubScript,flexwikiCitation,flexwikiLink,flexwikiWord,flexwikiEmoticons
71
72" single-line WikiPropertys
73syntax match flexwikiSingleLineProperty /^:\?[A-Z_][_a-zA-Z0-9]\+:/
74
75" TODO: multi-line WikiPropertys
76
77" Header levels, 1-6
78syntax match flexwikiH1 /^!.*$/
79syntax match flexwikiH2 /^!!.*$/
80syntax match flexwikiH3 /^!!!.*$/
81syntax match flexwikiH4 /^!!!!.*$/
82syntax match flexwikiH5 /^!!!!!.*$/
83syntax match flexwikiH6 /^!!!!!!.*$/
84
85" <hr>, horizontal rule
86syntax match flexwikiHR /^----.*$/
87
88" Formatting can be turned off by ""enclosing it in pairs of double quotes""
89syntax match flexwikiEscape /"".\{-}""/
90
91" Tables. Each line starts and ends with '||'; each cell is separated by '||'
92syntax match flexwikiTable /||/
93
94" Bulleted list items start with one or tabs, followed by whitespace, then '*'
95" Numeric list items start with one or tabs, followed by whitespace, then '1.'
96" Eight spaces at the beginning of the line is equivalent to the leading tab.
97syntax match flexwikiList /^\(\t\| \{8}\)\s*\(\*\|1\.\).*$/ contains=@flexwikiText
98
99" Treat all other lines that start with spaces as PRE-formatted text.
100syntax match flexwikiPre /^[ \t]\+[^ \t*1].*$/
101
102
103" Link FlexWiki syntax items to colors
104hi def link flexwikiH1 Title
105hi def link flexwikiH2 flexwikiH1
106hi def link flexwikiH3 flexwikiH2
107hi def link flexwikiH4 flexwikiH3
108hi def link flexwikiH5 flexwikiH4
109hi def link flexwikiH6 flexwikiH5
110hi def link flexwikiHR flexwikiH6
111
112hi def flexwikiBold term=bold cterm=bold gui=bold
113hi def flexwikiItalic term=italic cterm=italic gui=italic
114
115hi def link flexwikiCode Statement
116hi def link flexwikiWord Underlined
117
118hi def link flexwikiEscape Todo
119hi def link flexwikiPre PreProc
120hi def link flexwikiLink Underlined
121hi def link flexwikiList Type
122hi def link flexwikiTable Type
123hi def link flexwikiEmoticons Constant
124hi def link flexwikiDelText Comment
125hi def link flexwikiDeEmphasis Comment
126hi def link flexwikiInsText Constant
127hi def link flexwikiSuperScript Constant
128hi def link flexwikiSubScript Constant
129hi def link flexwikiCitation Constant
130
131hi def link flexwikiSingleLineProperty Identifier
132
133let b:current_syntax="FlexWiki"
134
135" vim:tw=0: