Mercurial > hg > RemoteEditor > vim7
annotate runtime/syntax/mail.vim @ 34:e170173ecb68 current-release
before ack base protocol.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 26 Nov 2008 15:02:10 +0900 |
parents | 76efa0be13f1 |
children | c16898406ff2 |
rev | line source |
---|---|
0 | 1 " Vim syntax file |
2 " Language: Mail file | |
3 " Previous Maintainer: Felix von Leitner <leitner@math.fu-berlin.de> | |
34
e170173ecb68
before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
4 " Maintainer: Gautam Iyer <gi1242@users.sourceforge.net> |
e170173ecb68
before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
5 " Last Change: Thu 17 Jan 2008 11:25:44 AM PST |
0 | 6 |
7 " Quit when a syntax file was already loaded | |
8 if exists("b:current_syntax") | |
9 finish | |
10 endif | |
11 | |
12 " The mail header is recognized starting with a "keyword:" line and ending | |
13 " with an empty line or other line that can't be in the header. All lines of | |
14 " the header are highlighted. Headers of quoted messages (quoted with >) are | |
15 " also highlighted. | |
16 | |
17 " Syntax clusters | |
18 syn cluster mailHeaderFields contains=mailHeaderKey,mailSubject,mailHeaderEmail,@mailLinks | |
19 syn cluster mailLinks contains=mailURL,mailEmail | |
20 syn cluster mailQuoteExps contains=mailQuoteExp1,mailQuoteExp2,mailQuoteExp3,mailQuoteExp4,mailQuoteExp5,mailQuoteExp6 | |
21 | |
22 syn case match | |
23 " For "From " matching case is required. The "From " is not matched in quoted | |
24 " emails | |
25 " According to RFC 2822 any printable ASCII character can appear in a field | |
26 " name, except ':'. | |
34
e170173ecb68
before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
27 syn region mailHeader contains=@mailHeaderFields,@NoSpell start="^From .*\d\d\d\d$" skip="^\s" end="\v^[!-9;-~]*([^!-~]|$)"me=s-1 |
e170173ecb68
before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
28 syn match mailHeaderKey contained contains=mailEmail,@NoSpell "^From\s.*\d\d\d\d$" |
e170173ecb68
before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
29 " Usenet headers |
e170173ecb68
before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
30 syn match mailHeaderKey contained contains=mailHeaderEmail,mailEmail,@NoSpell "\v(^(\> ?)*)@<=(Newsgroups|Followup-To|Message-ID|Supersedes|Control):.*$" |
0 | 31 |
32 syn case ignore | |
33 " Nothing else depends on case. Headers in properly quoted (with "> " or ">") | |
34 " emails are matched | |
34
e170173ecb68
before ack base protocol.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
35 syn region mailHeader keepend contains=@mailHeaderFields,@mailQuoteExps,@NoSpell start="^\z(\(> \?\)*\)\v(newsgroups|x-([a-z\-])*|path|xref|message-id|from|((in-)?reply-)?to|b?cc|subject|return-path|received|date|replied):" skip="^\z1\s" end="\v^\z1[!-9;-~]*([^!-~]|$)"me=s-1 end="\v^\z1@!"me=s-1 end="\v^\z1(\> ?)+"me=s-1 |
0 | 36 |
37 syn region mailHeaderKey contained contains=mailHeaderEmail,mailEmail,@mailQuoteExps,@NoSpell start="\v(^(\> ?)*)@<=(to|b?cc):" skip=",$" end="$" | |
38 syn match mailHeaderKey contained contains=mailHeaderEmail,mailEmail,@NoSpell "\v(^(\> ?)*)@<=(from|reply-to):.*$" | |
39 syn match mailHeaderKey contained contains=@NoSpell "\v(^(\> ?)*)@<=date:" | |
40 syn match mailSubject contained "\v^subject:.*$" | |
41 syn match mailSubject contained contains=@NoSpell "\v(^(\> ?)+)@<=subject:.*$" | |
42 | |
43 " Anything in the header between < and > is an email address | |
44 syn match mailHeaderEmail contained contains=@NoSpell "<.\{-}>" | |
45 | |
46 " Mail Signatures. (Begin with "-- ", end with change in quote level) | |
47 syn region mailSignature keepend contains=@mailLinks,@mailQuoteExps start="^--\s$" end="^$" end="^\(> \?\)\+"me=s-1 | |
48 syn region mailSignature keepend contains=@mailLinks,@mailQuoteExps,@NoSpell start="^\z(\(> \?\)\+\)--\s$" end="^\z1$" end="^\z1\@!"me=s-1 end="^\z1\(> \?\)\+"me=s-1 | |
49 | |
50 " URLs start with a known protocol or www,web,w3. | |
51 syn match mailURL contains=@NoSpell `\v<(((https?|ftp|gopher)://|(mailto|file|news):)[^' <>"]+|(www|web|w3)[a-z0-9_-]*\.[a-z0-9._-]+\.[^' <>"]+)[a-z0-9/]` | |
52 syn match mailEmail contains=@NoSpell "\v[_=a-z\./+0-9-]+\@[a-z0-9._-]+\a{2}" | |
53 | |
54 " Make sure quote markers in regions (header / signature) have correct color | |
55 syn match mailQuoteExp1 contained "\v^(\> ?)" | |
56 syn match mailQuoteExp2 contained "\v^(\> ?){2}" | |
57 syn match mailQuoteExp3 contained "\v^(\> ?){3}" | |
58 syn match mailQuoteExp4 contained "\v^(\> ?){4}" | |
59 syn match mailQuoteExp5 contained "\v^(\> ?){5}" | |
60 syn match mailQuoteExp6 contained "\v^(\> ?){6}" | |
61 | |
62 " Even and odd quoted lines. order is imporant here! | |
63 syn match mailQuoted1 contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\([a-z]\+>\|[]|}>]\).*$" | |
64 syn match mailQuoted2 contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{2}.*$" | |
65 syn match mailQuoted3 contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{3}.*$" | |
66 syn match mailQuoted4 contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{4}.*$" | |
67 syn match mailQuoted5 contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{5}.*$" | |
68 syn match mailQuoted6 contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{6}.*$" | |
69 | |
70 " Need to sync on the header. Assume we can do that within 100 lines | |
71 if exists("mail_minlines") | |
72 exec "syn sync minlines=" . mail_minlines | |
73 else | |
74 syn sync minlines=100 | |
75 endif | |
76 | |
77 " Define the default highlighting. | |
78 hi def link mailHeader Statement | |
79 hi def link mailHeaderKey Type | |
80 hi def link mailSignature PreProc | |
81 hi def link mailHeaderEmail mailEmail | |
82 hi def link mailEmail Special | |
83 hi def link mailURL String | |
84 hi def link mailSubject LineNR | |
85 hi def link mailQuoted1 Comment | |
86 hi def link mailQuoted3 mailQuoted1 | |
87 hi def link mailQuoted5 mailQuoted1 | |
88 hi def link mailQuoted2 Identifier | |
89 hi def link mailQuoted4 mailQuoted2 | |
90 hi def link mailQuoted6 mailQuoted2 | |
91 hi def link mailQuoteExp1 mailQuoted1 | |
92 hi def link mailQuoteExp2 mailQuoted2 | |
93 hi def link mailQuoteExp3 mailQuoted3 | |
94 hi def link mailQuoteExp4 mailQuoted4 | |
95 hi def link mailQuoteExp5 mailQuoted5 | |
96 hi def link mailQuoteExp6 mailQuoted6 | |
97 | |
98 let b:current_syntax = "mail" |