blob: 1d6e0fdec68111f0ee261c4ad9b0e89d1c48ec69 [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>
Bram Moolenaarb6b046b2011-12-30 13:11:27 +01004" Last Change: 2011 Dec 25 by Thilo Six
Bram Moolenaar071d4272004-06-13 20:20:40 +00005
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
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020016" quit when a syntax file was already loaded
17if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000018 finish
19endif
20
21" For starters, read the TeX syntax; TeX syntax items are allowed at the top
22" level in the CWEB syntax, e.g., in the preamble. In general, a CWEB source
23" code can be seen as a normal TeX document with some C/C++ material
24" interspersed in certain defined regions.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020025runtime! syntax/tex.vim
26unlet b:current_syntax
Bram Moolenaar071d4272004-06-13 20:20:40 +000027
28" Read the C/C++ syntax too; C/C++ syntax items are treated as such in the
29" C/C++ section of a CWEB chunk or in inner C/C++ context in "|...|" groups.
30syntax include @webIncludedC <sfile>:p:h/cpp.vim
31
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010032let s:cpo_save = &cpo
33set cpo&vim
34
Bram Moolenaar071d4272004-06-13 20:20:40 +000035" Inner C/C++ context (ICC) should be quite simple as it's comprised of
36" material in "|...|"; however the naive definition for this region would
37" hickup at the innocious "\|" TeX macro. Note: For the time being we expect
38" that an ICC begins either at the start of a line or after some white space.
39syntax region webInnerCcontext start="\(^\|[ \t\~`(]\)|" end="|" contains=@webIncludedC,webSectionName,webRestrictedTeX,webIgnoredStuff
40
41" Genuine C/C++ material. This syntactic region covers both the definition
42" part and the C/C++ part of a CWEB section; it is ended by the TeX part of
43" the next section.
44syntax region webCpart start="@[dfscp<(]" end="@[ \*]" contains=@webIncludedC,webSectionName,webRestrictedTeX,webIgnoredStuff
45
46" Section names contain C/C++ material only in inner context.
47syntax region webSectionName start="@[<(]" end="@>" contains=webInnerCcontext contained
48
49" The contents of "control texts" is not treated as TeX material, because in
50" non-trivial cases this completely clobbers the syntax recognition. Instead,
51" we highlight these elements as "strings".
52syntax region webRestrictedTeX start="@[\^\.:t=q]" end="@>" oneline
53
54" Double-@ means single-@, anywhere in the CWEB source. (This allows e-mail
55" address <someone@@fsf.org> without going into C/C++ mode.)
56syntax match webIgnoredStuff "@@"
57
58" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020059" Only when an item doesn't have highlighting yet
60command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +000061
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020062HiLink webRestrictedTeX String
Bram Moolenaar071d4272004-06-13 20:20:40 +000063
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020064delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +000065
66let b:current_syntax = "cweb"
67
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010068let &cpo = s:cpo_save
69unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +000070" vim: ts=8