Ready for testing
[enscript.git] / states / hl / sh.st
1 /**
2  * Name: sh
3  * Description: Bourne shell programming language.
4  * Author: Juergen Kahrs <Juergen.Kahrs@t-online.de>
5  *         Josh Zenker <josh.zenker@sig.com>
6  */
7
8 state sh_string extends Highlight
9 {
10   /\\\\./ {
11     language_print ($0);
12   }
13
14   sh_string_end {
15     language_print ($0);
16     return;
17   }
18 }
19
20 state sh extends HighlightEntry
21 {
22   /* Comments. */
23   /#/ {
24     comment_face (true);
25     language_print ($0);
26     call (eat_one_line);
27     comment_face (false);
28   }
29
30   /* Ignore escaped quotation marks */
31   /\\\"/ {
32     language_print ($0);
33   }
34
35   /\\\'/ {
36     language_print ($0);
37   }
38
39   /\\\`/ {
40     language_print ($0);
41   }
42
43   /* String constants. */
44   /\"|'/ {
45     sh_string_end = regexp($0);
46     string_face (true);
47     language_print ($0);
48     call (sh_string);
49     string_face (false);
50   }
51
52   /* Ignore escaped quote marks */
53   /\\\"/ {
54     language_print ($0);
55   }
56   /\\\'/ {
57     language_print ($0);
58   }
59   /\\\`/ {
60     language_print ($0);
61   }
62
63   /* Excutable script. */
64   /^#!/ {
65     reference_face (true);
66     language_print ($0);
67     call (eat_one_line);
68     reference_face (false);
69   }
70
71   /* Keywords. */
72   /\b(CDPATH|HOME|IFS|MAIL((CHECK)?|(PATH)?)|P(ATH|S(1|2))|SH(ACCT|ELL)|\
73 break|c(ase|d|ontinue)|do(ne)?|e(cho|l(if|se)|sac|val|x(ec|it|port))|f(i|or)|\
74 getopts|hash|i[fn]|limit|newgrp|pwd|re(ad(only)?|turn)|s(et|hift)|\
75 t(est|hen|imes|rap|ype)|u(limit|mask|n(limit|set))|w(ait|hile))\b/ {
76     keyword_face (true);
77     language_print ($0);
78     keyword_face (false);
79   }
80 }
81
82 \f
83 /*
84 Local variables:
85 mode: c
86 End:
87 */