ruby_grammar_builder 1.1.11 → 1.1.12
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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11a8a1b576e0b4aa298d5216fab27ecafbdfb89bdbcbe1604699b17f944e6773
|
4
|
+
data.tar.gz: 705f94bbb89097d41510042c581bab138bfbcb74bd703e540df429524547c6fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3121cb4e1efddf789f32c6c79a77ebd35bee9417ba654f33d6d99b4672ebffc09d4f54254826477f44ac75b38ff06c3efab0a1e73c73e56627021bc7c8e4411
|
7
|
+
data.tar.gz: 20de057ae05b377087bcbe77e3d42ddd12069640538e98a0507d05d90ffe75c2092be09820d9b7341327294ff86d4671896aeea21be4007d59954dee76196a45
|
@@ -42,7 +42,7 @@ class PatternBase
|
|
42
42
|
# @return [Boolean] can this capture become capture group 0
|
43
43
|
#
|
44
44
|
def optimize_outer_group?
|
45
|
-
needs_to_capture? and @next_pattern.nil?
|
45
|
+
self.needs_to_capture? and @next_pattern.nil?
|
46
46
|
end
|
47
47
|
|
48
48
|
#
|
@@ -73,18 +73,6 @@ class PatternBase
|
|
73
73
|
new_pattern.insert!(pattern).freeze
|
74
74
|
end
|
75
75
|
|
76
|
-
#
|
77
|
-
# Adds a capture group if needed
|
78
|
-
#
|
79
|
-
# @param [String] regex_as_string the pattern as a string
|
80
|
-
#
|
81
|
-
# @return [String] the pattern, potentially with a capture group
|
82
|
-
#
|
83
|
-
def add_capture_group_if_needed(regex_as_string)
|
84
|
-
regex_as_string = "(#{regex_as_string})" if needs_to_capture?
|
85
|
-
regex_as_string
|
86
|
-
end
|
87
|
-
|
88
76
|
#
|
89
77
|
# Uses a block to transform all Patterns in the list
|
90
78
|
#
|
@@ -306,7 +294,7 @@ class PatternBase
|
|
306
294
|
#
|
307
295
|
def to_tag
|
308
296
|
output = {
|
309
|
-
match: evaluate,
|
297
|
+
match: self.evaluate(),
|
310
298
|
}
|
311
299
|
|
312
300
|
output[:captures] = convert_group_attributes_to_captures(collect_group_attributes)
|
@@ -570,7 +558,12 @@ class PatternBase
|
|
570
558
|
def do_evaluate_self(groups)
|
571
559
|
match = @match
|
572
560
|
match = match.evaluate(groups) if match.is_a? PatternBase
|
573
|
-
|
561
|
+
if self.needs_to_capture?
|
562
|
+
match = "(#{match})"
|
563
|
+
elsif not string_single_entity?(match)
|
564
|
+
match = "(?:#{match})"
|
565
|
+
end
|
566
|
+
return match
|
574
567
|
end
|
575
568
|
|
576
569
|
#
|
@@ -611,7 +604,7 @@ class PatternBase
|
|
611
604
|
|
612
605
|
# (see string_single_entity)
|
613
606
|
def single_entity?
|
614
|
-
string_single_entity? evaluate
|
607
|
+
return string_single_entity?( self.evaluate() )
|
615
608
|
end
|
616
609
|
|
617
610
|
# does this pattern contain no capturing groups
|
@@ -696,7 +689,7 @@ class PatternBase
|
|
696
689
|
#
|
697
690
|
def do_collect_self_groups(next_group)
|
698
691
|
groups = []
|
699
|
-
groups << {group: next_group}.merge(@arguments) if needs_to_capture?
|
692
|
+
groups << {group: next_group}.merge(@arguments) if self.needs_to_capture?
|
700
693
|
groups
|
701
694
|
end
|
702
695
|
|
@@ -152,7 +152,13 @@ class RepeatablePattern < PatternBase
|
|
152
152
|
|
153
153
|
# (see PatternBase#do_evaluate_self)
|
154
154
|
def do_evaluate_self(groups)
|
155
|
-
|
155
|
+
match = add_quantifier_options_to(@match, groups)
|
156
|
+
if self.needs_to_capture?
|
157
|
+
match = "(#{match})"
|
158
|
+
elsif not string_single_entity?(match)
|
159
|
+
match = "(?:#{match})"
|
160
|
+
end
|
161
|
+
return match
|
156
162
|
end
|
157
163
|
|
158
164
|
# controls weather @arguments[:at_most] et. al. set @at_most et. al.
|
@@ -52,21 +52,23 @@ end
|
|
52
52
|
# @return [Boolean] if the string represents an single regex entity
|
53
53
|
def string_single_entity?(regex_string)
|
54
54
|
normal_char = '[a-zA-Z0-9_\-@&%#\'"<>=\/\.,`~\s;:!]'
|
55
|
+
escape_sequence = '\\\\[\w\W]'
|
56
|
+
character_class_that_doesnt_contain_bracket = '\[[^\]]*\]'
|
55
57
|
# normal char
|
56
58
|
if regex_string =~ /^#{normal_char}$/
|
57
59
|
return true
|
58
60
|
end
|
59
61
|
# escape sequence (all are valid, even stuff like \@ ("\\@") or "\\" + "\n" )
|
60
|
-
if regex_string =~
|
62
|
+
if regex_string =~ /^#{escape_sequence}$/
|
61
63
|
return true
|
62
64
|
end
|
63
65
|
# character class that doesn't contain ]
|
64
|
-
if regex_string =~
|
66
|
+
if regex_string =~ /^#{character_class_that_doesnt_contain_bracket}$/
|
65
67
|
return true
|
66
68
|
end
|
67
69
|
|
68
70
|
# fail if more than one of any of the above
|
69
|
-
if regex_string =~ /^(#{normal_char}
|
71
|
+
if regex_string =~ /^(#{normal_char}|#{escape_sequence}|#{character_class_that_doesnt_contain_bracket}){2,}$/
|
70
72
|
return false
|
71
73
|
end
|
72
74
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_grammar_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Hykin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-06-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: deep_clone
|