annotate runtime/syntax/mail.vim @ 0:76efa0be13f1

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