js_regex 1.0.10 → 1.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 618111f397f9ea7eaedc926f1fc7fec5853ba2f4
4
- data.tar.gz: 93c341b5952e85fdf01350289a7090e3504bb107
3
+ metadata.gz: 9c4a6863b83e153ca634f1bacc95617a69714079
4
+ data.tar.gz: 167deca0ba9f16ee72ebcb515c96a6633c2e37f1
5
5
  SHA512:
6
- metadata.gz: 14b09a4a7f04c78faca5c700c80207b21787741ce4c9540a9db69861f30e90476cc04b9026111cafd8d9c97f5ac392289e30f38db1ce3c4ddf112680c55d3a69
7
- data.tar.gz: b0280df75ee2d1ab152ba34b425b6be744f8eb6e347a2ffe01e1eefa60e266cd86e008dd4ef25791a1f6addf2da81adcc233b9d999d556967e15da02608dd7c0
6
+ metadata.gz: 2c75ae7b1fdb1efb48fa59a12cfe5f17d1475a8a2087f6f73b062dec88b7cb5b87e4d42ad8786d77d4bfae3f8c00d53bdf8496f34e935ae61876c000b6901476
7
+ data.tar.gz: bcd94e25831bb768e86c51cdd2aabf3952ec84580b76495a70710a58a2d926aa97443112df05730b3a5101fec7560da36c3236e30d1391261ce4ef8401b2f540
@@ -0,0 +1,30 @@
1
+ class JsRegex
2
+ #
3
+ module Converter
4
+ require_relative 'base'
5
+ #
6
+ # Template class implementation.
7
+ #
8
+ class BackrefConverter < JsRegex::Converter::Base
9
+ private
10
+
11
+ def convert_data
12
+ case subtype
13
+ when :number
14
+ convert_number_backref
15
+ else
16
+ warn_of_unsupported_feature
17
+ end
18
+ end
19
+
20
+ def convert_number_backref
21
+ if context.group_count_changed
22
+ warn_of_unsupported_feature('number backreference following a '\
23
+ 'feature that changes the group count (such as an atomic group)')
24
+ else
25
+ pass_through
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -8,12 +8,13 @@ class JsRegex
8
8
  class Context
9
9
  attr_accessor :buffered_set_members,
10
10
  :buffered_set_extractions,
11
+ :captured_groups,
12
+ :group_count_changed,
11
13
  :group_level,
12
14
  :group_level_for_backreference,
13
15
  :group_number_for_backreference,
14
16
  :negative_lookbehind,
15
17
  :negative_set_levels,
16
- :opened_groups,
17
18
  :previous_quantifier_subtype,
18
19
  :previous_quantifier_end,
19
20
  :set_level
@@ -21,10 +22,11 @@ class JsRegex
21
22
  def initialize
22
23
  self.buffered_set_members = []
23
24
  self.buffered_set_extractions = []
25
+ self.captured_groups = 0
26
+ self.group_count_changed = false
24
27
  self.group_level = 0
25
28
  self.negative_lookbehind = false
26
29
  self.negative_set_levels = []
27
- self.opened_groups = 0
28
30
  self.set_level = 0
29
31
  end
30
32
 
@@ -11,11 +11,12 @@ class JsRegex
11
11
  def convert_data
12
12
  case subtype
13
13
  when :atomic then open_atomic_group
14
- when :capture, :passive then open_group
14
+ when :capture then open_group
15
15
  when :close then close_group
16
16
  when :comment then '' # drop whole group w/o warning
17
17
  when :named_ab, :named_sq then open_group('(') # drop name w/o warning
18
18
  when :options then open_options_group
19
+ when :passive then open_group('(?:', false)
19
20
  else
20
21
  warn_of_unsupported_feature
21
22
  open_group('(')
@@ -27,7 +28,7 @@ class JsRegex
27
28
  # http://instanceof.me/post/52245507631
28
29
  # regex-emulate-atomic-grouping-with-lookahead
29
30
  context.group_level_for_backreference = context.group_level
30
- context.group_number_for_backreference = context.opened_groups + 1
31
+ context.group_number_for_backreference = context.captured_groups + 1
31
32
  open_assertion('(?=(')
32
33
  end
33
34
 
@@ -36,9 +37,9 @@ class JsRegex
36
37
  open_group('(')
37
38
  end
38
39
 
39
- def open_group(group_head = pass_through)
40
+ def open_group(group_head = pass_through, capturing = true)
40
41
  context.group_level += 1
41
- context.opened_groups += 1
42
+ context.captured_groups += 1 if capturing
42
43
  group_head
43
44
  end
44
45
 
@@ -71,6 +72,7 @@ class JsRegex
71
72
 
72
73
  def close_atomic_group
73
74
  context.group_level_for_backreference = nil
75
+ context.group_count_changed = true
74
76
  # the empty passive group (?:) is appended in case literal digits follow
75
77
  "))\\#{context.group_number_for_backreference}(?:)"
76
78
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: js_regex
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janosch Müller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-28 00:00:00.000000000 Z
11
+ date: 2015-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: regexp_parser
@@ -92,6 +92,7 @@ files:
92
92
  - lib/js_regex/conversion.rb
93
93
  - lib/js_regex/converter/anchor_converter.rb
94
94
  - lib/js_regex/converter/assertion_converter.rb
95
+ - lib/js_regex/converter/backref_converter.rb
95
96
  - lib/js_regex/converter/base.rb
96
97
  - lib/js_regex/converter/conditional_converter.rb
97
98
  - lib/js_regex/converter/context.rb