trenni 2.1.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/ext/trenni/markup.rl CHANGED
@@ -1,8 +1,6 @@
1
1
 
2
2
  #include "markup.h"
3
3
 
4
- #include <ruby/encoding.h>
5
-
6
4
  %%{
7
5
  machine Trenni_markup_parser;
8
6
 
@@ -17,6 +15,7 @@
17
15
 
18
16
  action pcdata_begin {
19
17
  pcdata = Qnil;
18
+ has_entities = 0;
20
19
  }
21
20
 
22
21
  action pcdata_end {
@@ -26,7 +25,7 @@
26
25
  }
27
26
 
28
27
  action text_end {
29
- rb_funcall(delegate, id_text, 1, pcdata);
28
+ rb_funcall(delegate, id_text, 1, Trenni_markup_safe(pcdata, has_entities));
30
29
  }
31
30
 
32
31
  action characters_begin {
@@ -50,7 +49,9 @@
50
49
  action entity_name {
51
50
  entity.end = p;
52
51
 
53
- Trenni_append_string(&pcdata, encoding,
52
+ has_entities = 1;
53
+
54
+ Trenni_append(&pcdata, encoding,
54
55
  rb_funcall(entities, id_key_get, 1, Trenni_token(entity, encoding))
55
56
  );
56
57
  }
@@ -58,6 +59,8 @@
58
59
  action entity_hex {
59
60
  entity.end = p;
60
61
 
62
+ has_entities = 1;
63
+
61
64
  codepoint = strtoul(entity.begin, (char **)&entity.end, 16);
62
65
 
63
66
  Trenni_append_codepoint(&pcdata, encoding, codepoint);
@@ -66,6 +69,8 @@
66
69
  action entity_number {
67
70
  entity.end = p;
68
71
 
72
+ has_entities = 1;
73
+
69
74
  codepoint = strtoul(entity.begin, (char **)&entity.end, 10);
70
75
 
71
76
  Trenni_append_codepoint(&pcdata, encoding, codepoint);
@@ -147,7 +152,7 @@
147
152
 
148
153
  action attribute {
149
154
  if (has_value == 1) {
150
- rb_funcall(delegate, id_attribute, 2, Trenni_token(identifier, encoding), pcdata);
155
+ rb_funcall(delegate, id_attribute, 2, Trenni_token(identifier, encoding), Trenni_markup_safe(pcdata, has_entities));
151
156
  } else if (has_value == 2) {
152
157
  rb_funcall(delegate, id_attribute, 2, Trenni_token(identifier, encoding), empty_string);
153
158
  } else {
@@ -196,14 +201,14 @@ VALUE Trenni_Native_parse_markup(VALUE self, VALUE buffer, VALUE delegate, VALUE
196
201
 
197
202
  VALUE pcdata = Qnil;
198
203
 
199
- VALUE empty_string = rb_obj_freeze(rb_enc_str_new("", 0, encoding));
204
+ VALUE empty_string = rb_obj_freeze(rb_enc_str_new(0, 0, encoding));
200
205
 
201
206
  const char *s, *p, *pe, *eof;
202
207
  unsigned long cs, top = 0, stack[2] = {0};
203
208
  unsigned long codepoint = 0;
204
209
 
205
210
  Token identifier = {0}, cdata = {0}, characters = {0}, entity = {0}, doctype = {0}, comment = {0}, instruction = {0};
206
- unsigned self_closing = 0, has_value = 0;
211
+ unsigned self_closing = 0, has_value = 0, has_entities = 0;
207
212
 
208
213
  s = p = RSTRING_PTR(string);
209
214
  eof = pe = p + RSTRING_LEN(string);
data/ext/trenni/tag.c ADDED
@@ -0,0 +1,202 @@
1
+
2
+ #include "escape.h"
3
+ #include "tag.h"
4
+
5
+ VALUE Trenni_Tag_split(VALUE self, VALUE qualified_name) {
6
+ const char * begin = RSTRING_PTR(qualified_name);
7
+ const char * end = RSTRING_END(qualified_name);
8
+
9
+ const char * p = begin;
10
+
11
+ while (p != end) {
12
+ if (*p == ':') {
13
+ return rb_ary_new_from_args(2,
14
+ rb_enc_str_new(begin, p-begin, rb_enc_get(qualified_name)),
15
+ rb_enc_str_new(p+1, end-p-1, rb_enc_get(qualified_name))
16
+ );
17
+ }
18
+
19
+ p += 1;
20
+ }
21
+
22
+ return rb_ary_new_from_args(2, Qnil, qualified_name);
23
+ }
24
+
25
+ inline static int Trenni_Tag_valid_attributes(VALUE value) {
26
+ return (rb_type(value) == T_HASH) || (rb_type(value) == T_ARRAY);
27
+ }
28
+
29
+ // Key can be either symbol or string. This method efficiently converts either to a string.
30
+ inline static VALUE Trenni_Tag_key_string(VALUE key) {
31
+ if (SYMBOL_P(key)) {
32
+ return rb_sym2str(key);
33
+ }
34
+
35
+ StringValue(key);
36
+ return key;
37
+ }
38
+
39
+ inline static VALUE Trenni_Tag_prefix_key(VALUE prefix, VALUE key) {
40
+ VALUE buffer;
41
+
42
+ if (prefix == Qnil) {
43
+ return Trenni_Tag_key_string(key);
44
+ }
45
+
46
+ buffer = rb_str_dup(Trenni_Tag_key_string(prefix));
47
+ rb_str_cat_cstr(buffer, "-");
48
+ rb_str_append(buffer, Trenni_Tag_key_string(key));
49
+
50
+ return buffer;
51
+ }
52
+
53
+ VALUE Trenni_Tag_append_attributes(VALUE self, VALUE buffer, VALUE attributes, VALUE prefix);
54
+
55
+ static void Trenni_Tag_append_tag_attribute(VALUE buffer, VALUE key, VALUE value, VALUE prefix) {
56
+ // We skip over attributes with nil value:
57
+ if (value == Qnil || value == Qfalse) return;
58
+
59
+ // Modify key to contain the prefix:
60
+ key = Trenni_Tag_prefix_key(prefix, key);
61
+
62
+ if (Trenni_Tag_valid_attributes(value)) {
63
+ Trenni_Tag_append_attributes(Qnil, buffer, value, key);
64
+ } else {
65
+ rb_str_cat_cstr(buffer, " ");
66
+ rb_str_append(buffer, key);
67
+
68
+ if (value != Qtrue) {
69
+ rb_str_cat_cstr(buffer, "=\"");
70
+ Trenni_Markup_append(Qnil, buffer, value);
71
+ rb_str_cat_cstr(buffer, "\"");
72
+ }
73
+ }
74
+ }
75
+
76
+ struct TagAttributeForeachArg {
77
+ VALUE buffer;
78
+ VALUE prefix;
79
+ };
80
+
81
+ static int Trenni_Tag_append_tag_attribute_foreach(VALUE key, VALUE value, struct TagAttributeForeachArg * arg) {
82
+ Trenni_Tag_append_tag_attribute(arg->buffer, key, value, arg->prefix);
83
+
84
+ return ST_CONTINUE;
85
+ }
86
+
87
+ VALUE Trenni_Tag_append_attributes(VALUE self, VALUE buffer, VALUE attributes, VALUE prefix) {
88
+ int type = rb_type(attributes);
89
+
90
+ if (type == T_HASH) {
91
+ struct TagAttributeForeachArg arg = {buffer, prefix};
92
+ rb_hash_foreach(attributes, &Trenni_Tag_append_tag_attribute_foreach, (VALUE)&arg);
93
+ } else if (type == T_ARRAY) {
94
+ long i;
95
+
96
+ for (i = 0; i < RARRAY_LEN(attributes); i++) {
97
+ VALUE attribute = RARRAY_AREF(attributes, i);
98
+ VALUE key = RARRAY_AREF(attribute, 0);
99
+ VALUE value = RARRAY_AREF(attribute, 1);
100
+
101
+ Trenni_Tag_append_tag_attribute(buffer, key, value, prefix);
102
+ }
103
+ } else {
104
+ rb_raise(rb_eArgError, "expected hash or array for attributes");
105
+ }
106
+
107
+ return Qnil;
108
+ }
109
+
110
+ VALUE Trenni_Tag_append_tag(VALUE self, VALUE buffer, VALUE name, VALUE attributes, VALUE content) {
111
+ StringValue(name);
112
+
113
+ rb_str_cat_cstr(buffer, "<");
114
+ rb_str_buf_append(buffer, name);
115
+
116
+ Trenni_Tag_append_attributes(self, buffer, attributes, Qnil);
117
+
118
+ if (content == Qnil || content == Qfalse) {
119
+ rb_str_cat_cstr(buffer, "/>");
120
+ } else {
121
+ rb_str_cat_cstr(buffer, ">");
122
+
123
+ if (content != Qtrue) {
124
+ Trenni_Markup_append(self, buffer, content);
125
+ }
126
+
127
+ rb_str_cat_cstr(buffer, "</");
128
+ rb_str_buf_append(buffer, name);
129
+ rb_str_cat_cstr(buffer, ">");
130
+ }
131
+
132
+ return Qnil;
133
+ }
134
+
135
+ VALUE Trenni_Tag_format_tag(VALUE self, VALUE name, VALUE attributes, VALUE content) {
136
+ rb_encoding *encoding = rb_enc_get(name);
137
+
138
+ VALUE buffer = rb_enc_str_new(0, 0, encoding);
139
+ rb_str_reserve(buffer, 256);
140
+
141
+ Trenni_Tag_append_tag(self, buffer, name, attributes, content);
142
+
143
+ return buffer;
144
+ }
145
+
146
+ VALUE Trenni_Tag_write_opening_tag(VALUE self, VALUE buffer) {
147
+ VALUE name = rb_struct_getmember(self, id_name);
148
+ VALUE attributes = rb_struct_getmember(self, id_attributes);
149
+ VALUE closed = rb_struct_getmember(self, id_closed);
150
+
151
+ StringValue(name);
152
+
153
+ rb_str_reserve(buffer, RSTRING_LEN(name) + 256);
154
+
155
+ rb_str_cat_cstr(buffer, "<");
156
+ rb_str_buf_append(buffer, name);
157
+
158
+ Trenni_Tag_append_attributes(self, buffer, attributes, Qnil);
159
+
160
+ if (closed == Qtrue) {
161
+ rb_str_cat_cstr(buffer, "/>");
162
+ } else {
163
+ rb_str_cat_cstr(buffer, ">");
164
+ }
165
+
166
+ return Qnil;
167
+ }
168
+
169
+ VALUE Trenni_Tag_write_closing_tag(VALUE self, VALUE buffer) {
170
+ VALUE name = rb_struct_getmember(self, id_name);
171
+
172
+ StringValue(name);
173
+
174
+ rb_str_reserve(buffer, RSTRING_LEN(name) + 3);
175
+
176
+ rb_str_cat_cstr(buffer, "</");
177
+ rb_str_buf_append(buffer, name);
178
+ rb_str_cat_cstr(buffer, ">");
179
+
180
+ return Qnil;
181
+ }
182
+
183
+ void Init_trenni_tag() {
184
+ rb_undef_method(rb_class_of(rb_Trenni_Tag), "append_attributes");
185
+ rb_define_singleton_method(rb_Trenni_Tag, "append_attributes", Trenni_Tag_append_attributes, 3);
186
+
187
+ rb_undef_method(rb_class_of(rb_Trenni_Tag), "append_tag");
188
+ rb_define_singleton_method(rb_Trenni_Tag, "append_tag", Trenni_Tag_append_tag, 4);
189
+
190
+ rb_undef_method(rb_class_of(rb_Trenni_Tag), "format_tag");
191
+ rb_define_singleton_method(rb_Trenni_Tag, "format_tag", Trenni_Tag_format_tag, 3);
192
+
193
+ rb_undef_method(rb_class_of(rb_Trenni_Tag), "split");
194
+ rb_define_singleton_method(rb_Trenni_Tag, "split", Trenni_Tag_split, 1);
195
+
196
+ rb_undef_method(rb_Trenni_Tag, "write_opening_tag");
197
+ rb_define_method(rb_Trenni_Tag, "write_opening_tag", Trenni_Tag_write_opening_tag, 1);
198
+
199
+ rb_undef_method(rb_Trenni_Tag, "write_closing_tag");
200
+ rb_define_method(rb_Trenni_Tag, "write_closing_tag", Trenni_Tag_write_closing_tag, 1);
201
+ }
202
+
data/ext/trenni/tag.h ADDED
@@ -0,0 +1,21 @@
1
+
2
+ #pragma once
3
+
4
+ #include "trenni.h"
5
+
6
+ void Init_trenni_tag();
7
+
8
+ // Split a qualified name `namespace:name` into it's components. Return `[nil, name]` if no namespace is present.
9
+ // Usage: namespace, name = Trenni::Tag.split(qualified_name)
10
+ VALUE Trenni_Tag_split(VALUE self, VALUE name);
11
+
12
+ // Append attributes to the buffer, e.g. {data: {id: 10}} => ' data-id="10"'
13
+ VALUE Trenni_Tag_append_attributes(VALUE self, VALUE buffer, VALUE attributes, VALUE prefix);
14
+ // Append a full tag with content to the buffer.
15
+ VALUE Trenni_Tag_append_tag(VALUE self, VALUE buffer, VALUE name, VALUE attributes, VALUE content);
16
+ // Same as append but returns the result. Slightly less efficient.
17
+ VALUE Trenni_Tag_format_tag(VALUE self, VALUE name, VALUE attributes, VALUE content);
18
+
19
+ // Improve performance of Trenni::Tag#write_opening_tag and #write_closing_tag
20
+ VALUE Trenni_Tag_write_opening_tag(VALUE self, VALUE buffer);
21
+ VALUE Trenni_Tag_write_closing_tag(VALUE self, VALUE buffer);
@@ -182,7 +182,7 @@ tr82:
182
182
  {
183
183
  expression.begin = p;
184
184
  }
185
- #line 53 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
185
+ #line 53 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
186
186
  {te = p;p--;{cs = 32;}}
187
187
  goto _again;
188
188
  st43:
@@ -524,7 +524,7 @@ case 20:
524
524
  goto tr27;
525
525
  goto st19;
526
526
  tr31:
527
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
527
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
528
528
  {{stack[top++] = 21; goto st21;}}
529
529
  goto st21;
530
530
  st21:
@@ -542,7 +542,7 @@ case 21:
542
542
  }
543
543
  goto st21;
544
544
  tr47:
545
- #line 13 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
545
+ #line 13 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
546
546
  {{stack[top++] = 22; goto st21;}}
547
547
  goto st22;
548
548
  st22:
@@ -558,13 +558,13 @@ case 22:
558
558
  }
559
559
  goto st22;
560
560
  tr37:
561
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
561
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
562
562
  {{stack[top++] = 23; goto st21;}}
563
563
  goto st23;
564
564
  tr39:
565
- #line 13 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
565
+ #line 13 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
566
566
  {{stack[top++] = 23; goto st21;}}
567
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
567
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
568
568
  {{stack[top++] = 23; goto st21;}}
569
569
  goto st23;
570
570
  st23:
@@ -593,7 +593,7 @@ case 24:
593
593
  }
594
594
  goto st23;
595
595
  tr46:
596
- #line 13 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
596
+ #line 13 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
597
597
  {{stack[top++] = 25; goto st21;}}
598
598
  goto st25;
599
599
  st25:
@@ -610,13 +610,13 @@ case 25:
610
610
  }
611
611
  goto st25;
612
612
  tr43:
613
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
613
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
614
614
  {{stack[top++] = 26; goto st21;}}
615
615
  goto st26;
616
616
  tr45:
617
- #line 13 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
617
+ #line 13 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
618
618
  {{stack[top++] = 26; goto st21;}}
619
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
619
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
620
620
  {{stack[top++] = 26; goto st21;}}
621
621
  goto st26;
622
622
  st26:
@@ -643,7 +643,7 @@ case 27:
643
643
  }
644
644
  goto st26;
645
645
  tr44:
646
- #line 20 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
646
+ #line 20 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
647
647
  {{cs = stack[--top];goto _again;}}
648
648
  goto st49;
649
649
  st49:
@@ -669,7 +669,7 @@ case 28:
669
669
  }
670
670
  goto st25;
671
671
  tr38:
672
- #line 20 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
672
+ #line 20 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
673
673
  {{cs = stack[--top];goto _again;}}
674
674
  goto st50;
675
675
  st50:
@@ -700,7 +700,7 @@ case 30:
700
700
  goto st31;
701
701
  goto st30;
702
702
  tr49:
703
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
703
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
704
704
  {{stack[top++] = 31; goto st21;}}
705
705
  goto st31;
706
706
  st31:
@@ -717,7 +717,7 @@ case 31:
717
717
  }
718
718
  goto st31;
719
719
  tr50:
720
- #line 20 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
720
+ #line 20 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
721
721
  {{cs = stack[--top];goto _again;}}
722
722
  goto st51;
723
723
  st51:
@@ -729,7 +729,7 @@ case 51:
729
729
  goto st31;
730
730
  goto st30;
731
731
  tr32:
732
- #line 20 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
732
+ #line 20 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
733
733
  {{cs = stack[--top];goto _again;}}
734
734
  goto st52;
735
735
  st52:
@@ -739,7 +739,7 @@ case 52:
739
739
  #line 740 "template.c"
740
740
  goto st0;
741
741
  tr54:
742
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
742
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
743
743
  {{stack[top++] = 32; goto st21;}}
744
744
  goto st32;
745
745
  st32:
@@ -757,7 +757,7 @@ case 32:
757
757
  }
758
758
  goto st32;
759
759
  tr70:
760
- #line 13 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
760
+ #line 13 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
761
761
  {{stack[top++] = 33; goto st21;}}
762
762
  goto st33;
763
763
  st33:
@@ -773,13 +773,13 @@ case 33:
773
773
  }
774
774
  goto st33;
775
775
  tr60:
776
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
776
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
777
777
  {{stack[top++] = 34; goto st21;}}
778
778
  goto st34;
779
779
  tr62:
780
- #line 13 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
780
+ #line 13 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
781
781
  {{stack[top++] = 34; goto st21;}}
782
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
782
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
783
783
  {{stack[top++] = 34; goto st21;}}
784
784
  goto st34;
785
785
  st34:
@@ -808,7 +808,7 @@ case 35:
808
808
  }
809
809
  goto st34;
810
810
  tr69:
811
- #line 13 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
811
+ #line 13 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
812
812
  {{stack[top++] = 36; goto st21;}}
813
813
  goto st36;
814
814
  st36:
@@ -825,13 +825,13 @@ case 36:
825
825
  }
826
826
  goto st36;
827
827
  tr66:
828
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
828
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
829
829
  {{stack[top++] = 37; goto st21;}}
830
830
  goto st37;
831
831
  tr68:
832
- #line 13 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
832
+ #line 13 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
833
833
  {{stack[top++] = 37; goto st21;}}
834
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
834
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
835
835
  {{stack[top++] = 37; goto st21;}}
836
836
  goto st37;
837
837
  st37:
@@ -867,7 +867,7 @@ tr67:
867
867
  {
868
868
  rb_funcall(delegate, id_expression, 1, Trenni_token(expression, encoding));
869
869
  }
870
- #line 21 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
870
+ #line 21 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
871
871
  {cs = 43;}
872
872
  goto _again;
873
873
  st53:
@@ -902,7 +902,7 @@ tr61:
902
902
  {
903
903
  rb_funcall(delegate, id_expression, 1, Trenni_token(expression, encoding));
904
904
  }
905
- #line 21 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
905
+ #line 21 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
906
906
  {cs = 43;}
907
907
  goto _again;
908
908
  st54:
@@ -933,7 +933,7 @@ case 41:
933
933
  goto st42;
934
934
  goto st41;
935
935
  tr72:
936
- #line 17 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
936
+ #line 17 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
937
937
  {{stack[top++] = 42; goto st21;}}
938
938
  goto st42;
939
939
  st42:
@@ -959,7 +959,7 @@ tr73:
959
959
  {
960
960
  rb_funcall(delegate, id_expression, 1, Trenni_token(expression, encoding));
961
961
  }
962
- #line 21 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
962
+ #line 21 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
963
963
  {cs = 43;}
964
964
  goto _again;
965
965
  st55:
@@ -980,7 +980,7 @@ tr55:
980
980
  {
981
981
  rb_funcall(delegate, id_expression, 1, Trenni_token(expression, encoding));
982
982
  }
983
- #line 21 "/Users/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
983
+ #line 21 "/home/samuel/Documents/Programming/ioquatix/trenni/parsers/trenni/template.rl"
984
984
  {cs = 43;}
985
985
  goto _again;
986
986
  st56: