blob: 4062b0a4ec126fa9fba09d8883b8ab45f4eba982 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: CWEB
3" Maintainer: Andreas Scherer <andreas.scherer@pobox.com>
4" Last Change: April 30, 2001
5
6" Details of the CWEB language can be found in the article by Donald E. Knuth
7" and Silvio Levy, "The CWEB System of Structured Documentation", included as
8" file "cwebman.tex" in the standard CWEB distribution, available for
9" anonymous ftp at ftp://labrea.stanford.edu/pub/cweb/.
10
11" TODO: Section names and C/C++ comments should be treated as TeX material.
12" TODO: The current version switches syntax highlighting off for section
13" TODO: names, and leaves C/C++ comments as such. (On the other hand,
14" TODO: switching to TeX mode in C/C++ comments might be colour overkill.)
15
16" For version 5.x: Clear all syntax items
17" For version 6.x: Quit when a syntax file was already loaded
18if version < 600
19 syntax clear
20elseif exists("b:current_syntax")
21 finish
22endif
23
24" For starters, read the TeX syntax; TeX syntax items are allowed at the top
25" level in the CWEB syntax, e.g., in the preamble. In general, a CWEB source
26" code can be seen as a normal TeX document with some C/C++ material
27" interspersed in certain defined regions.
28if version < 600
29 source <sfile>:p:h/tex.vim
30else
31 runtime! syntax/tex.vim
32 unlet b:current_syntax
33endif
34
35" Read the C/C++ syntax too; C/C++ syntax items are treated as such in the
36" C/C++ section of a CWEB chunk or in inner C/C++ context in "|...|" groups.
37syntax include @webIncludedC <sfile>:p:h/cpp.vim
38
39" Inner C/C++ context (ICC) should be quite simple as it's comprised of
40" material in "|...|"; however the naive definition for this region would
41" hickup at the innocious "\|" TeX macro. Note: For the time being we expect
42" that an ICC begins either at the start of a line or after some white space.
43syntax region webInnerCcontext start="\(^\|[ \t\~`(]\)|" end="|" contains=@webIncludedC,webSectionName,webRestrictedTeX,webIgnoredStuff
44
45" Genuine C/C++ material. This syntactic region covers both the definition
46" part and the C/C++ part of a CWEB section; it is ended by the TeX part of
47" the next section.
48syntax region webCpart start="@[dfscp<(]" end="@[ \*]" contains=@webIncludedC,webSectionName,webRestrictedTeX,webIgnoredStuff
49
50" Section names contain C/C++ material only in inner context.
51syntax region webSectionName start="@[<(]" end="@>" contains=webInnerCcontext contained
52
53" The contents of "control texts" is not treated as TeX material, because in
54" non-trivial cases this completely clobbers the syntax recognition. Instead,
55" we highlight these elements as "strings".
56syntax region webRestrictedTeX start="@[\^\.:t=q]" end="@>" oneline
57
58" Double-@ means single-@, anywhere in the CWEB source. (This allows e-mail
59" address <someone@@fsf.org> without going into C/C++ mode.)
60syntax match webIgnoredStuff "@@"
61
62" Define the default highlighting.
63" For version 5.7 and earlier: only when not done already
64" For version 5.8 and later: only when an item doesn't have highlighting yet
65if version >= 508 || !exists("did_cweb_syntax_inits")
66 if version < 508
67 let did_cweb_syntax_inits = 1
68 command -nargs=+ HiLink hi link <args>
69 else
70 command -nargs=+ HiLink hi def link <args>
71 endif
72
73 HiLink webRestrictedTeX String
74
75 delcommand HiLink
76endif
77
78let b:current_syntax = "cweb"
79
80" vim: ts=8