xrb 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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,6 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # Released under the MIT License.
3
- # Copyright, 2016-2024, by Samuel Williams.
4
2
 
5
3
  # line 1 "lib/xrb/fallback/markup.rl"
6
4
  # Released under the MIT License.
@@ -423,6 +421,7 @@ module XRB
423
421
  def self.parse_markup(buffer, delegate, entities)
424
422
  data = buffer.read
425
423
  bytes = data.bytes
424
+ encoding = data.encoding
426
425
 
427
426
  p = 0
428
427
  # Must set pe here or it gets incorrectly set to data.length
@@ -440,7 +439,7 @@ module XRB
440
439
  has_entities = has_value = false
441
440
 
442
441
 
443
- # line 441 "lib/xrb/fallback/markup.rb"
442
+ # line 442 "lib/xrb/fallback/markup.rb"
444
443
  begin
445
444
  p ||= 0
446
445
  pe ||= data.length
@@ -448,9 +447,9 @@ module XRB
448
447
  top = 0
449
448
  end
450
449
 
451
- # line 218 "lib/xrb/fallback/markup.rl"
450
+ # line 219 "lib/xrb/fallback/markup.rl"
452
451
 
453
- # line 451 "lib/xrb/fallback/markup.rb"
452
+ # line 452 "lib/xrb/fallback/markup.rb"
454
453
  begin
455
454
  testEof = false
456
455
  _slen, _trans, _keys, _inds, _acts, _nacts = nil
@@ -602,7 +601,7 @@ module XRB
602
601
  # line 15 "lib/xrb/fallback/markup.rl"
603
602
  begin
604
603
 
605
- pcdata = ""
604
+ pcdata = String.new(encoding: encoding)
606
605
  has_entities = false
607
606
  end
608
607
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -614,7 +613,7 @@ module XRB
614
613
  # line 15 "lib/xrb/fallback/markup.rl"
615
614
  begin
616
615
 
617
- pcdata = ""
616
+ pcdata = String.new(encoding: encoding)
618
617
  has_entities = false
619
618
  end
620
619
  # line 10 "parsers/xrb/entities.rl"
@@ -718,7 +717,7 @@ module XRB
718
717
  begin
719
718
 
720
719
  has_value = false
721
- pcdata = ""
720
+ pcdata = String.new(encoding: encoding)
722
721
  end
723
722
  # line 7 "lib/xrb/fallback/markup.rl"
724
723
  begin
@@ -813,7 +812,7 @@ module XRB
813
812
  # line 15 "lib/xrb/fallback/markup.rl"
814
813
  begin
815
814
 
816
- pcdata = ""
815
+ pcdata = String.new(encoding: encoding)
817
816
  has_entities = false
818
817
  end
819
818
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -829,7 +828,7 @@ module XRB
829
828
  # line 15 "lib/xrb/fallback/markup.rl"
830
829
  begin
831
830
 
832
- pcdata = ""
831
+ pcdata = String.new(encoding: encoding)
833
832
  has_entities = false
834
833
  end
835
834
  # line 10 "parsers/xrb/entities.rl"
@@ -905,7 +904,7 @@ module XRB
905
904
  # line 15 "lib/xrb/fallback/markup.rl"
906
905
  begin
907
906
 
908
- pcdata = ""
907
+ pcdata = String.new(encoding: encoding)
909
908
  has_entities = false
910
909
  end
911
910
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -928,7 +927,7 @@ module XRB
928
927
  # line 15 "lib/xrb/fallback/markup.rl"
929
928
  begin
930
929
 
931
- pcdata = ""
930
+ pcdata = String.new(encoding: encoding)
932
931
  has_entities = false
933
932
  end
934
933
  # line 10 "parsers/xrb/entities.rl"
@@ -956,7 +955,7 @@ module XRB
956
955
  # line 15 "lib/xrb/fallback/markup.rl"
957
956
  begin
958
957
 
959
- pcdata = ""
958
+ pcdata = String.new(encoding: encoding)
960
959
  has_entities = false
961
960
  end
962
961
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -979,7 +978,7 @@ module XRB
979
978
  # line 15 "lib/xrb/fallback/markup.rl"
980
979
  begin
981
980
 
982
- pcdata = ""
981
+ pcdata = String.new(encoding: encoding)
983
982
  has_entities = false
984
983
  end
985
984
  # line 10 "parsers/xrb/entities.rl"
@@ -1005,7 +1004,7 @@ module XRB
1005
1004
  # line 15 "lib/xrb/fallback/markup.rl"
1006
1005
  begin
1007
1006
 
1008
- pcdata = ""
1007
+ pcdata = String.new(encoding: encoding)
1009
1008
  has_entities = false
1010
1009
  end
1011
1010
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -1026,7 +1025,7 @@ module XRB
1026
1025
  # line 15 "lib/xrb/fallback/markup.rl"
1027
1026
  begin
1028
1027
 
1029
- pcdata = ""
1028
+ pcdata = String.new(encoding: encoding)
1030
1029
  has_entities = false
1031
1030
  end
1032
1031
  # line 10 "parsers/xrb/entities.rl"
@@ -1052,7 +1051,7 @@ module XRB
1052
1051
  # line 15 "lib/xrb/fallback/markup.rl"
1053
1052
  begin
1054
1053
 
1055
- pcdata = ""
1054
+ pcdata = String.new(encoding: encoding)
1056
1055
  has_entities = false
1057
1056
  end
1058
1057
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -1073,7 +1072,7 @@ module XRB
1073
1072
  # line 15 "lib/xrb/fallback/markup.rl"
1074
1073
  begin
1075
1074
 
1076
- pcdata = ""
1075
+ pcdata = String.new(encoding: encoding)
1077
1076
  has_entities = false
1078
1077
  end
1079
1078
  # line 10 "parsers/xrb/entities.rl"
@@ -1099,7 +1098,7 @@ module XRB
1099
1098
  # line 15 "lib/xrb/fallback/markup.rl"
1100
1099
  begin
1101
1100
 
1102
- pcdata = ""
1101
+ pcdata = String.new(encoding: encoding)
1103
1102
  has_entities = false
1104
1103
  end
1105
1104
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -1120,7 +1119,7 @@ module XRB
1120
1119
  # line 15 "lib/xrb/fallback/markup.rl"
1121
1120
  begin
1122
1121
 
1123
- pcdata = ""
1122
+ pcdata = String.new(encoding: encoding)
1124
1123
  has_entities = false
1125
1124
  end
1126
1125
  # line 10 "parsers/xrb/entities.rl"
@@ -1148,7 +1147,7 @@ module XRB
1148
1147
  # line 15 "lib/xrb/fallback/markup.rl"
1149
1148
  begin
1150
1149
 
1151
- pcdata = ""
1150
+ pcdata = String.new(encoding: encoding)
1152
1151
  has_entities = false
1153
1152
  end
1154
1153
  # line 32 "lib/xrb/fallback/markup.rl"
@@ -1171,7 +1170,7 @@ module XRB
1171
1170
  # line 15 "lib/xrb/fallback/markup.rl"
1172
1171
  begin
1173
1172
 
1174
- pcdata = ""
1173
+ pcdata = String.new(encoding: encoding)
1175
1174
  has_entities = false
1176
1175
  end
1177
1176
  # line 10 "parsers/xrb/entities.rl"
@@ -1510,7 +1509,7 @@ module XRB
1510
1509
 
1511
1510
  cdata_begin = p
1512
1511
  end
1513
- # line 1511 "lib/xrb/fallback/markup.rb"
1512
+ # line 1512 "lib/xrb/fallback/markup.rb"
1514
1513
  end
1515
1514
  end
1516
1515
  end
@@ -1637,7 +1636,7 @@ module XRB
1637
1636
 
1638
1637
  delegate.text(pcdata)
1639
1638
  end
1640
- # line 1638 "lib/xrb/fallback/markup.rb"
1639
+ # line 1639 "lib/xrb/fallback/markup.rb"
1641
1640
  end
1642
1641
  end
1643
1642
 
@@ -1648,7 +1647,7 @@ module XRB
1648
1647
  end
1649
1648
  end
1650
1649
 
1651
- # line 219 "lib/xrb/fallback/markup.rl"
1650
+ # line 220 "lib/xrb/fallback/markup.rl"
1652
1651
 
1653
1652
  if p != eof
1654
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,6 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # Released under the MIT License.
3
- # Copyright, 2020-2024, by Samuel Williams.
4
2
 
5
3
  # line 1 "lib/xrb/fallback/query.rl"
6
4
  # Released under the MIT License.