packcr 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/packcr/cli.rb +18 -16
- data/lib/packcr/code_block.rb +0 -1
- data/lib/packcr/context.rb +19 -17
- data/lib/packcr/generated/context.rb +440 -0
- data/lib/packcr/generated/node/action_node.rb +60 -0
- data/lib/packcr/generated/node/alternate_node.rb +98 -0
- data/lib/packcr/generated/node/capture_node.rb +39 -0
- data/lib/packcr/generated/node/charclass_node.rb +372 -0
- data/lib/packcr/generated/node/eof_node.rb +20 -0
- data/lib/packcr/generated/node/error_node.rb +67 -0
- data/lib/packcr/generated/node/expand_node.rb +30 -0
- data/lib/packcr/generated/node/predicate_node.rb +140 -0
- data/lib/packcr/generated/node/quantity_node.rb +167 -0
- data/lib/packcr/generated/node/reference_node.rb +70 -0
- data/lib/packcr/generated/node/rule_node.rb +63 -0
- data/lib/packcr/generated/node/sequence_node.rb +42 -0
- data/lib/packcr/generated/node/string_node.rb +60 -0
- data/lib/packcr/generator.rb +2 -1
- data/lib/packcr/node/action_node.rb +4 -2
- data/lib/packcr/node/alternate_node.rb +3 -1
- data/lib/packcr/node/capture_node.rb +3 -1
- data/lib/packcr/node/charclass_node.rb +24 -28
- data/lib/packcr/node/eof_node.rb +4 -2
- data/lib/packcr/node/error_node.rb +3 -1
- data/lib/packcr/node/expand_node.rb +8 -5
- data/lib/packcr/node/predicate_node.rb +4 -2
- data/lib/packcr/node/quantity_node.rb +12 -10
- data/lib/packcr/node/reference_node.rb +11 -5
- data/lib/packcr/node/root_node.rb +1 -0
- data/lib/packcr/node/rule_node.rb +7 -4
- data/lib/packcr/node/sequence_node.rb +3 -1
- data/lib/packcr/node/string_node.rb +9 -6
- data/lib/packcr/node.rb +3 -5
- data/lib/packcr/parser.rb +4375 -4056
- data/lib/packcr/stream.rb +17 -12
- data/lib/packcr/templates/context/source.c.erb +187 -410
- data/lib/packcr/templates/context/source.rb.erb +91 -156
- data/lib/packcr/templates/node/action.c.erb +3 -3
- data/lib/packcr/templates/node/action.rb.erb +2 -2
- data/lib/packcr/templates/node/alternate.c.erb +8 -8
- data/lib/packcr/templates/node/alternate.rb.erb +4 -5
- data/lib/packcr/templates/node/capture.c.erb +6 -6
- data/lib/packcr/templates/node/capture.rb.erb +4 -4
- data/lib/packcr/templates/node/charclass.c.erb +12 -12
- data/lib/packcr/templates/node/charclass.rb.erb +6 -6
- data/lib/packcr/templates/node/charclass_any.c.erb +3 -3
- data/lib/packcr/templates/node/charclass_any.rb.erb +2 -2
- data/lib/packcr/templates/node/charclass_fail.c.erb +1 -1
- data/lib/packcr/templates/node/charclass_one.c.erb +8 -8
- data/lib/packcr/templates/node/charclass_one.rb.erb +6 -6
- data/lib/packcr/templates/node/charclass_utf8.c.erb +7 -7
- data/lib/packcr/templates/node/charclass_utf8.rb.erb +3 -3
- data/lib/packcr/templates/node/charclass_utf8_reverse.rb.erb +5 -5
- data/lib/packcr/templates/node/eof.c.erb +1 -1
- data/lib/packcr/templates/node/error.c.erb +7 -7
- data/lib/packcr/templates/node/error.rb.erb +2 -2
- data/lib/packcr/templates/node/expand.c.erb +5 -5
- data/lib/packcr/templates/node/expand.rb.erb +3 -3
- data/lib/packcr/templates/node/predicate.c.erb +10 -10
- data/lib/packcr/templates/node/predicate.rb.erb +6 -6
- data/lib/packcr/templates/node/predicate_neg.c.erb +8 -8
- data/lib/packcr/templates/node/predicate_neg.rb.erb +6 -6
- data/lib/packcr/templates/node/{quantify_many.c.erb → quantity_many.c.erb} +11 -11
- data/lib/packcr/templates/node/{quantify_many.rb.erb → quantity_many.rb.erb} +9 -9
- data/lib/packcr/templates/node/{quantify_one.c.erb → quantity_one.c.erb} +7 -7
- data/lib/packcr/templates/node/{quantify_one.rb.erb → quantity_one.rb.erb} +4 -4
- data/lib/packcr/templates/node/reference.c.erb +14 -2
- data/lib/packcr/templates/node/reference.rb.erb +16 -4
- data/lib/packcr/templates/node/reference_reverse.rb.erb +16 -4
- data/lib/packcr/templates/node/rule.c.erb +9 -2
- data/lib/packcr/templates/node/rule.rb.erb +26 -19
- data/lib/packcr/templates/node/string_many.c.erb +5 -5
- data/lib/packcr/templates/node/string_many.rb.erb +3 -3
- data/lib/packcr/templates/node/string_one.c.erb +4 -4
- data/lib/packcr/templates/node/string_one.rb.erb +3 -3
- data/lib/packcr/util.rb +21 -16
- data/lib/packcr/version.rb +1 -1
- data/lib/packcr.rb +8 -11
- metadata +37 -9
- data/lib/packcr/tokenizer.rb +0 -2948
data/lib/packcr/stream.rb
CHANGED
@@ -11,13 +11,13 @@ class Packcr
|
|
11
11
|
|
12
12
|
def write(s, rewrite_line_directive: false)
|
13
13
|
if rewrite_line_directive && @line_directive_tag && @line.respond_to?(:+)
|
14
|
-
s.gsub!(@line_directive_tag) { (@line +
|
14
|
+
s.gsub!(@line_directive_tag) { (@line + ::Regexp.last_match.pre_match.count("\n") + 1).to_s }
|
15
15
|
@line_directive_tag = nil
|
16
16
|
end
|
17
17
|
@stream << s
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
return unless @line.respond_to?(:+)
|
19
|
+
|
20
|
+
@line += s.count("\n")
|
21
21
|
end
|
22
22
|
|
23
23
|
def write_text(s)
|
@@ -26,6 +26,7 @@ class Packcr
|
|
26
26
|
|
27
27
|
def write_line_directive(fname, lineno)
|
28
28
|
return unless @line
|
29
|
+
|
29
30
|
if lineno.respond_to?(:+)
|
30
31
|
write("#line #{lineno + 1} \"")
|
31
32
|
else
|
@@ -47,15 +48,15 @@ class Packcr
|
|
47
48
|
lineno = code.line
|
48
49
|
|
49
50
|
ptr.sub!(/\A\n+/) do
|
50
|
-
lineno +=
|
51
|
+
lineno += ::Regexp.last_match(0).length
|
51
52
|
""
|
52
53
|
end
|
53
54
|
ptr.sub!(/[ \v\f\t\r\n]*\z/, "")
|
54
55
|
|
55
56
|
min_indent_spaces = nil
|
56
57
|
ptr.gsub!(/^([ \v\f\t]*)([^ \v\f\t\r\n])/) do
|
57
|
-
spaces =
|
58
|
-
char =
|
58
|
+
spaces = ::Regexp.last_match(1)
|
59
|
+
char = ::Regexp.last_match(2)
|
59
60
|
|
60
61
|
next char if char == "#"
|
61
62
|
|
@@ -71,7 +72,7 @@ class Packcr
|
|
71
72
|
if min_indent_spaces
|
72
73
|
indent_spaces = " " * indent
|
73
74
|
ptr.gsub!(/^#{min_indent_spaces}( *[^\n#])/) do
|
74
|
-
"#{indent_spaces}#{
|
75
|
+
"#{indent_spaces}#{::Regexp.last_match(1)}"
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
@@ -79,7 +80,7 @@ class Packcr
|
|
79
80
|
|
80
81
|
write_line_directive(fname, lineno)
|
81
82
|
ptr.scan(/^(.+?)[ \v\f\t\r]*$|^\r?\n/) do
|
82
|
-
write
|
83
|
+
write ::Regexp.last_match(1) if ::Regexp.last_match(1)
|
83
84
|
write "\n"
|
84
85
|
end
|
85
86
|
write_output_line_directive
|
@@ -87,11 +88,15 @@ class Packcr
|
|
87
88
|
|
88
89
|
def get_code_block(code, indent, fname)
|
89
90
|
buf = +""
|
90
|
-
line
|
91
|
+
line = @line
|
92
|
+
stream = @stream
|
93
|
+
@stream = buf
|
94
|
+
@line &&= :uuid
|
91
95
|
write_code_block(code, indent, fname)
|
92
|
-
|
96
|
+
buf
|
93
97
|
ensure
|
94
|
-
@line
|
98
|
+
@line = line
|
99
|
+
@stream = stream
|
95
100
|
end
|
96
101
|
end
|
97
102
|
end
|