source: devel-tools/trunk/enscript/refal.st

Last change on this file was 2747, checked in by orlov, 13 years ago
  • Fixed \' highlighting in chraracter sequences.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Rev
File size: 3.0 KB
Line 
1/**
2 * Name: refal
3 * Description: Refal programming language (http://refal.org/index_e.htm).
4 * Author: Anton Orlov <orlov@mccme.ru>
5 * $LastChangedDate: 2007-05-08 20:31:30 +0000 (Tue, 08 May 2007) $
6 * $Revision: 2747 $
7 *
8 * Bugs:
9 *   - Any word in the begining of a line is treated as a function name.
10 *   - Function name should be on the same line as $func or $func? keyword.
11 *   - Only one (first) constant name in $const declaration is highlighted and
12 *     only in the case it goes on the same line as $const keyword.
13 */
14
15state refal extends HighlightEntry
16{
17  /* Comments. */
18  /\/\*/ {
19    comment_face (true);
20    language_print ($0);
21    call (c_comment);
22    comment_face (false);
23  }
24  /(\/\/)|\*/ {
25    comment_face (true);
26    language_print ($0);
27    call (eat_one_line);
28    comment_face (false);
29  }
30 
31  /* Function calls and references. */
32  /([<&])((\w|[!?_-])+|(\"[^\"]*\"))/ {
33    language_print ($1);
34    function_name_face (true);
35    language_print ($2);
36    function_name_face (false);
37  }
38
39  /* Function defenitions. */
40  /^([[:upper:]?!](\w|[!?_-])*|(\"[^\"]*\"))/ {
41    function_name_face (true);
42    language_print ($0);
43    function_name_face (false);
44  }
45
46  /* Declarations for functions and constants. */
47  /(\$(func\??|const))([ \t]+)((\w|[!?_-])+|(\"[^\"]*\"))/ {
48    builtin_face (true);
49    language_print ($1);
50    builtin_face (false);
51    language_print ($3);
52    function_name_face (true);
53    language_print ($4);
54    function_name_face (false);
55  }
56
57  /* Objects. */
58  /\$(traceall|trace|extern|box|table|vector|string|channel)/ {
59    builtin_face (true);
60    language_print ($0);
61    builtin_face (false);
62    call (refal_object_names);
63  }
64
65  /* Operators. */
66  /\$([rl]|(fail)|(iter)|(error)|(trap)|(with))\b/ {
67    keyword_face (true);
68    language_print ($0);
69    keyword_face (false);
70  }
71
72  /* Other keywords. */
73  /\$\w+/ {
74    builtin_face (true);
75    language_print ($0);
76    builtin_face (false);
77  }
78
79  /* Words. */
80  /\"/ {
81    string_face (true);
82    language_print ($0);
83    call (c_string);
84    string_face (false);
85  }
86  /[[:upper:]?!](\w|[!?_-])*/ {
87    string_face (true);
88    language_print ($0);
89    string_face (false);
90  }
91
92  /* Characters. */
93  /[\']/ {
94    string_face (true);
95    language_print ($0);
96    call (refal_letters);
97    string_face (false);
98  }
99
100  /* Types. */
101  /\b[estv]\b/ {
102    type_face (true);
103    language_print ($0);
104    type_face (false);
105  }
106
107  /* Variables. */
108  /\b([estv])(\.?)((\w|[!?_-])+|(\"[^\"]*\"))/ {
109    type_face (true);
110    language_print ($1);
111    type_face (false);
112
113    language_print ($2);
114
115    variable_name_face (true);
116    language_print ($3);
117    variable_name_face (false);
118  }
119}
120
121state refal_letters extends Highlight
122{
123  /\\\\./ {
124    language_print ($0);
125  }
126  /[\']/ {
127    language_print ($0);
128    return;
129  }
130}
131
132state refal_object_names extends Highlight
133{
134  /(\w|[!?_-])+|(\"[^\"]*\")/ {
135    function_name_face (true);
136    language_print ($0);
137    function_name_face (false);
138  }
139  /;/ {
140    language_print ($0);
141    return;
142  }
143}
144
145
146/*
147Local variables:
148mode: c
149End:
150*/
Note: See TracBrowser for help on using the repository browser.