xrb 0.6.1 → 0.8.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/xrb/template.rl CHANGED
@@ -16,7 +16,7 @@
16
16
  rb_funcall(delegate, id_instruction, 1, XRB_Token_string(instruction, encoding));
17
17
  }
18
18
 
19
- action emit_instruction_line {
19
+ action emit_multiline_instruction {
20
20
  rb_funcall(delegate, id_instruction, 2, XRB_Token_string(instruction, encoding), newline);
21
21
  }
22
22
 
@@ -33,15 +33,54 @@
33
33
  }
34
34
 
35
35
  action emit_expression {
36
- rb_funcall(delegate, id_expression, 1, XRB_Token_string(expression, encoding));
36
+ if (expression.end > expression.begin) {
37
+ rb_funcall(delegate, id_expression, 1, XRB_Token_string(expression, encoding));
38
+ }
37
39
  }
38
40
 
39
41
  action expression_error {
40
42
  XRB_raise_error("failed to parse expression", buffer, p-s);
41
43
  }
42
44
 
45
+ action text_begin {
46
+ text.begin = p;
47
+
48
+ delimiter.begin = NULL;
49
+ delimiter.end = NULL;
50
+ }
51
+
52
+ action text_end {
53
+ text.end = p;
54
+ }
55
+
56
+ action text_delimiter_begin {
57
+ delimiter.begin = p;
58
+ }
59
+
60
+ action text_delimiter_end {
61
+ delimiter.end = p;
62
+ }
63
+
43
64
  action emit_text {
44
- rb_funcall(delegate, id_text, 1, XRB_string(ts, te, encoding));
65
+ if (delimiter.begin && delimiter.end) {
66
+ text.end = delimiter.begin;
67
+
68
+ // Backtrack:
69
+ p = delimiter.begin - 1;
70
+ }
71
+
72
+ rb_funcall(delegate, id_text, 1, XRB_Token_string(text, encoding));
73
+ }
74
+
75
+ action emit_multiline_text {
76
+ text.begin = ts;
77
+ text.end = te;
78
+
79
+ rb_funcall(delegate, id_text, 1, XRB_Token_string(text, encoding));
80
+ }
81
+
82
+ action emit_newline {
83
+ rb_funcall(delegate, id_instruction, 1, newline);
45
84
  }
46
85
 
47
86
  include template "xrb/template.rl";
@@ -57,9 +96,9 @@ VALUE XRB_Native_parse_template(VALUE self, VALUE buffer, VALUE delegate) {
57
96
  VALUE newline = rb_obj_freeze(rb_enc_str_new("\n", 1, encoding));
58
97
 
59
98
  const char *s, *p, *pe, *eof, *ts, *te;
60
- unsigned long cs, act, top = 0, stack[32] = {0};
99
+ unsigned long cs, top = 0, stack[32] = {0}, act;
61
100
 
62
- XRB_Token expression = {0}, instruction = {0};
101
+ XRB_Token expression = {0}, instruction = {0}, text = {0}, delimiter = {0};
63
102
 
64
103
  s = p = RSTRING_PTR(string);
65
104
  eof = pe = p + RSTRING_LEN(string);
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  # line 1 "lib/xrb/fallback/markup.rl"
3
4
  # Released under the MIT License.
@@ -420,6 +421,7 @@ module XRB
420
421
  def self.parse_markup(buffer, delegate, entities)
421
422
  data = buffer.read
422
423
  bytes = data.bytes
424
+ encoding = data.encoding
423
425
 
424
426
  p = 0
425
427
  # Must set pe here or it gets incorrectly set to data.length
@@ -437,7 +439,7 @@ module XRB
437
439
  has_entities = has_value = false
438
440
 
439
441
 
440
- # line 441 "lib/xrb/fallback/markup.rb"
442
+ # line 442 "lib/xrb/fallback/markup.rb"
441
443
  begin
442
444
  p ||= 0
443
445
  pe ||= data.length
@@ -445,9 +447,9 @@ module XRB
445
447
  top = 0
446
448
  end
447
449
 
448
- # line 218 "lib/xrb/fallback/markup.rl"
450
+ # line 219 "lib/xrb/fallback/markup.rl"
449
451
 
450
- # line 451 "lib/xrb/fallback/markup.rb"
452
+ # line 452 "lib/xrb/fallback/markup.rb"
451
453
  begin
452
454
  testEof = false
453
455
  _slen, _trans, _keys, _inds, _acts, _nacts = nil
@@ -599,7 +601,7 @@ module XRB
599
601
  # line 15 "lib/xrb/fallback/markup.rl"
600
602
  begin
601
603
 
602
- pcdata = ""
604
+ pcdata = String.new(encoding: encoding)
603
605
  has_entities = false
604
606
  end
605
607
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -611,7 +613,7 @@ module XRB
611
613
  # line 15 "lib/xrb/fallback/markup.rl"
612
614
  begin
613
615
 
614
- pcdata = ""
616
+ pcdata = String.new(encoding: encoding)
615
617
  has_entities = false
616
618
  end
617
619
  # line 10 "parsers/xrb/entities.rl"
@@ -715,7 +717,7 @@ module XRB
715
717
  begin
716
718
 
717
719
  has_value = false
718
- pcdata = ""
720
+ pcdata = String.new(encoding: encoding)
719
721
  end
720
722
  # line 7 "lib/xrb/fallback/markup.rl"
721
723
  begin
@@ -810,7 +812,7 @@ module XRB
810
812
  # line 15 "lib/xrb/fallback/markup.rl"
811
813
  begin
812
814
 
813
- pcdata = ""
815
+ pcdata = String.new(encoding: encoding)
814
816
  has_entities = false
815
817
  end
816
818
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -826,7 +828,7 @@ module XRB
826
828
  # line 15 "lib/xrb/fallback/markup.rl"
827
829
  begin
828
830
 
829
- pcdata = ""
831
+ pcdata = String.new(encoding: encoding)
830
832
  has_entities = false
831
833
  end
832
834
  # line 10 "parsers/xrb/entities.rl"
@@ -902,7 +904,7 @@ module XRB
902
904
  # line 15 "lib/xrb/fallback/markup.rl"
903
905
  begin
904
906
 
905
- pcdata = ""
907
+ pcdata = String.new(encoding: encoding)
906
908
  has_entities = false
907
909
  end
908
910
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -925,7 +927,7 @@ module XRB
925
927
  # line 15 "lib/xrb/fallback/markup.rl"
926
928
  begin
927
929
 
928
- pcdata = ""
930
+ pcdata = String.new(encoding: encoding)
929
931
  has_entities = false
930
932
  end
931
933
  # line 10 "parsers/xrb/entities.rl"
@@ -953,7 +955,7 @@ module XRB
953
955
  # line 15 "lib/xrb/fallback/markup.rl"
954
956
  begin
955
957
 
956
- pcdata = ""
958
+ pcdata = String.new(encoding: encoding)
957
959
  has_entities = false
958
960
  end
959
961
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -976,7 +978,7 @@ module XRB
976
978
  # line 15 "lib/xrb/fallback/markup.rl"
977
979
  begin
978
980
 
979
- pcdata = ""
981
+ pcdata = String.new(encoding: encoding)
980
982
  has_entities = false
981
983
  end
982
984
  # line 10 "parsers/xrb/entities.rl"
@@ -1002,7 +1004,7 @@ module XRB
1002
1004
  # line 15 "lib/xrb/fallback/markup.rl"
1003
1005
  begin
1004
1006
 
1005
- pcdata = ""
1007
+ pcdata = String.new(encoding: encoding)
1006
1008
  has_entities = false
1007
1009
  end
1008
1010
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -1023,7 +1025,7 @@ module XRB
1023
1025
  # line 15 "lib/xrb/fallback/markup.rl"
1024
1026
  begin
1025
1027
 
1026
- pcdata = ""
1028
+ pcdata = String.new(encoding: encoding)
1027
1029
  has_entities = false
1028
1030
  end
1029
1031
  # line 10 "parsers/xrb/entities.rl"
@@ -1049,7 +1051,7 @@ module XRB
1049
1051
  # line 15 "lib/xrb/fallback/markup.rl"
1050
1052
  begin
1051
1053
 
1052
- pcdata = ""
1054
+ pcdata = String.new(encoding: encoding)
1053
1055
  has_entities = false
1054
1056
  end
1055
1057
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -1070,7 +1072,7 @@ module XRB
1070
1072
  # line 15 "lib/xrb/fallback/markup.rl"
1071
1073
  begin
1072
1074
 
1073
- pcdata = ""
1075
+ pcdata = String.new(encoding: encoding)
1074
1076
  has_entities = false
1075
1077
  end
1076
1078
  # line 10 "parsers/xrb/entities.rl"
@@ -1096,7 +1098,7 @@ module XRB
1096
1098
  # line 15 "lib/xrb/fallback/markup.rl"
1097
1099
  begin
1098
1100
 
1099
- pcdata = ""
1101
+ pcdata = String.new(encoding: encoding)
1100
1102
  has_entities = false
1101
1103
  end
1102
1104
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -1117,7 +1119,7 @@ module XRB
1117
1119
  # line 15 "lib/xrb/fallback/markup.rl"
1118
1120
  begin
1119
1121
 
1120
- pcdata = ""
1122
+ pcdata = String.new(encoding: encoding)
1121
1123
  has_entities = false
1122
1124
  end
1123
1125
  # line 10 "parsers/xrb/entities.rl"
@@ -1145,7 +1147,7 @@ module XRB
1145
1147
  # line 15 "lib/xrb/fallback/markup.rl"
1146
1148
  begin
1147
1149
 
1148
- pcdata = ""
1150
+ pcdata = String.new(encoding: encoding)
1149
1151
  has_entities = false
1150
1152
  end
1151
1153
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -1168,7 +1170,7 @@ module XRB
1168
1170
  # line 15 "lib/xrb/fallback/markup.rl"
1169
1171
  begin
1170
1172
 
1171
- pcdata = ""
1173
+ pcdata = String.new(encoding: encoding)
1172
1174
  has_entities = false
1173
1175
  end
1174
1176
  # line 10 "parsers/xrb/entities.rl"
@@ -1507,7 +1509,7 @@ module XRB
1507
1509
 
1508
1510
  cdata_begin = p
1509
1511
  end
1510
- # line 1511 "lib/xrb/fallback/markup.rb"
1512
+ # line 1512 "lib/xrb/fallback/markup.rb"
1511
1513
  end
1512
1514
  end
1513
1515
  end
@@ -1634,7 +1636,7 @@ module XRB
1634
1636
 
1635
1637
  delegate.text(pcdata)
1636
1638
  end
1637
- # line 1638 "lib/xrb/fallback/markup.rb"
1639
+ # line 1639 "lib/xrb/fallback/markup.rb"
1638
1640
  end
1639
1641
  end
1640
1642
 
@@ -1645,7 +1647,7 @@ module XRB
1645
1647
  end
1646
1648
  end
1647
1649
 
1648
- # line 219 "lib/xrb/fallback/markup.rl"
1650
+ # line 220 "lib/xrb/fallback/markup.rl"
1649
1651
 
1650
1652
  if p != eof
1651
1653
  raise ParseError.new("could not consume all input", buffer, p)
@@ -13,7 +13,7 @@
13
13
  }
14
14
 
15
15
  action pcdata_begin {
16
- pcdata = ""
16
+ pcdata = String.new(encoding: encoding)
17
17
  has_entities = false
18
18
  }
19
19
 
@@ -131,7 +131,7 @@
131
131
 
132
132
  action attribute_begin {
133
133
  has_value = false
134
- pcdata = ""
134
+ pcdata = String.new(encoding: encoding)
135
135
  }
136
136
 
137
137
  action attribute_value {
@@ -198,6 +198,7 @@ module XRB
198
198
  def self.parse_markup(buffer, delegate, entities)
199
199
  data = buffer.read
200
200
  bytes = data.bytes
201
+ encoding = data.encoding
201
202
 
202
203
  p = 0
203
204
  # Must set pe here or it gets incorrectly set to data.length
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  # line 1 "lib/xrb/fallback/query.rl"
3
4
  # Released under the MIT License.