Updated c.rl and common.rl to count internal newlines.
[ohcount] / ext / ohcount_native / ragel_parsers / common.rl
1 %%{
2 machine common;
3
4 # common definitions
5
6 # whitespace, non-printables
7 spaces = [\t ]+;
8 newline = ('\r\n' | '\n\r' | '\n' | '\f');
9 escaped_newline = '\\' newline;
10 nonnewline = any - [\r\n\f];
11 nonprintable_char = cntrl - [\r\n\f];
12
13 # numbers
14 dec_num = digit+;
15 hex_num = 0 [xX] [a-fA-F0-9]+;
16 oct_num = 0 [0-7]+;
17 integer = [+\-]? (hex_num | oct_num | dec_num);
18 float = [+\-]? ((digit* '.' digit+) | (digit+ '.' digit*) | digit+)
19         [eE] [+\-]? digit+;
20
21 # common actions
22
23 action code {
24   if (!line_contains_code && !line_start) line_start = ts;
25   line_contains_code = 1;
26 }
27
28 action comment {
29   if (!line_contains_code) {
30     whole_line_comment = 1;
31     if (!line_start) line_start = ts;
32   }
33 }
34
35 # common conditionals
36
37 action starts_line {
38   p == buffer || *(p-1) == '\r' || *(p-1) == '\n' || *(p-1) == '\f'
39 }
40 action starts_line2 {
41   p == buffer || *(p-2) == '\r' || *(p-2) == '\n' || *(p-2) == '\f'
42 }
43 }%%