thefox-ext 2.0.0 → 3.0.0.pre.rc.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +0 -1
- data/CHANGELOG-v2.md +1 -1
- data/CHANGELOG-v3.md +6 -0
- data/README.md +6 -0
- data/bin/dev +1 -4
- data/bin/test.rb +13 -0
- data/lib/thefox-ext.rb +8 -5
- data/lib/thefox-ext/range/lexer/base.rb +59 -4
- data/lib/thefox-ext/range/lexer/block.rb +10 -1
- data/lib/thefox-ext/range/lexer/block_down.rb +8 -4
- data/lib/thefox-ext/range/lexer/block_level.rb +37 -0
- data/lib/thefox-ext/range/lexer/block_up.rb +6 -4
- data/lib/thefox-ext/range/lexer/collection.rb +73 -0
- data/lib/thefox-ext/range/lexer/interval.rb +35 -26
- data/lib/thefox-ext/range/lexer/lexer.rb +39 -229
- data/lib/thefox-ext/range/lexer/number.rb +74 -27
- data/lib/thefox-ext/range/lexer/range.rb +37 -13
- data/lib/thefox-ext/range/lexer/scope.rb +257 -0
- data/lib/thefox-ext/range/lexer/separator.rb +1 -1
- data/lib/thefox-ext/range/resolver.rb +3 -9
- data/lib/thefox-ext/version.rb +2 -2
- data/thefox-ext.gemspec +3 -1
- metadata +37 -6
- data/lib/thefox-ext/range/lexer/block_stack.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a20be9c295afd672782bd04e2ab56b507fa81cf0f66e89c7557b1d88dc527687
|
4
|
+
data.tar.gz: b5bb8440e0df05a68571e9fa957f6e13e904a50697b34215383c1bd209eea5c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7aef25246b059342d994fbb7dd981f16a962abed342a474611d38acc8878d9487673286b4f802ed8a791eec92cfcc34189fa63fe2b9e5965ad16e2dbaf4022e6
|
7
|
+
data.tar.gz: 363c224dade536a709cc24f7eee8cdaf0a86d39a1ab676e80bd6b7f1cad2462f6f70e52f39c29f9e3904313bba93d24b4c54b3b7dfec749f06a26920d9a13601
|
data/.github/workflows/ci.yml
CHANGED
data/CHANGELOG-v2.md
CHANGED
data/CHANGELOG-v3.md
ADDED
data/README.md
CHANGED
data/bin/dev
CHANGED
data/bin/test.rb
ADDED
data/lib/thefox-ext.rb
CHANGED
@@ -10,16 +10,19 @@ require 'thefox-ext/ext/string'
|
|
10
10
|
require 'thefox-ext/ext/true'
|
11
11
|
|
12
12
|
require 'thefox-ext/console'
|
13
|
+
|
14
|
+
# Resolver
|
13
15
|
require 'thefox-ext/range/resolver'
|
14
16
|
require 'thefox-ext/range/lexer/lexer'
|
17
|
+
require 'thefox-ext/range/lexer/collection'
|
15
18
|
require 'thefox-ext/range/lexer/base'
|
16
|
-
require 'thefox-ext/range/lexer/
|
17
|
-
require 'thefox-ext/range/lexer/separator'
|
18
|
-
require 'thefox-ext/range/lexer/operator'
|
19
|
+
require 'thefox-ext/range/lexer/block_level'
|
19
20
|
require 'thefox-ext/range/lexer/block'
|
20
21
|
require 'thefox-ext/range/lexer/block_down'
|
21
22
|
require 'thefox-ext/range/lexer/block_up'
|
22
|
-
require 'thefox-ext/range/lexer/
|
23
|
+
require 'thefox-ext/range/lexer/operator'
|
24
|
+
require 'thefox-ext/range/lexer/scope'
|
25
|
+
require 'thefox-ext/range/lexer/number'
|
26
|
+
require 'thefox-ext/range/lexer/separator'
|
23
27
|
require 'thefox-ext/range/lexer/range'
|
24
28
|
require 'thefox-ext/range/lexer/interval'
|
25
|
-
require 'thefox-ext/range/lexer/number'
|
@@ -3,25 +3,63 @@ module TheFox
|
|
3
3
|
module Range
|
4
4
|
module Lexer
|
5
5
|
class Base
|
6
|
+
@@instance_id = 0
|
7
|
+
|
6
8
|
def initialize(symbole = nil)
|
7
9
|
# puts '-> Base.initialize'
|
10
|
+
|
11
|
+
@@instance_id += 1
|
12
|
+
@instance_id = @@instance_id
|
13
|
+
@nonce = Base.generate_nonce()
|
8
14
|
@symbole = symbole
|
9
15
|
@prev_item = nil
|
16
|
+
@org_prev_item = nil
|
10
17
|
@next_item = nil
|
11
18
|
|
12
19
|
@parent_item = nil
|
20
|
+
#@parent_scope = nil
|
13
21
|
@children = []
|
14
22
|
end
|
15
23
|
|
16
|
-
|
17
|
-
|
18
|
-
|
24
|
+
# :nocov:
|
25
|
+
def inspect()
|
26
|
+
'Base'
|
27
|
+
end
|
28
|
+
# :nocov:
|
29
|
+
|
30
|
+
def instance_id()
|
31
|
+
@instance_id
|
32
|
+
end
|
33
|
+
def instance_id=(instance_id)
|
34
|
+
@instance_id = instance_id
|
35
|
+
end
|
36
|
+
|
37
|
+
def nonce()
|
38
|
+
@nonce
|
39
|
+
end
|
40
|
+
def nonce=(nonce)
|
41
|
+
@nonce = nonce
|
42
|
+
end
|
43
|
+
|
44
|
+
def chain(prev_item)
|
45
|
+
# puts '%s(%s).chain' % [self.inspect, opts.inspect]
|
46
|
+
self.prev_item = prev_item
|
47
|
+
if !prev_item.nil?
|
48
|
+
prev_item.next_item = self
|
49
|
+
end
|
19
50
|
end
|
20
51
|
|
21
52
|
def symbole()
|
22
53
|
@symbole
|
23
54
|
end
|
24
55
|
|
56
|
+
def org_prev_item()
|
57
|
+
@org_prev_item
|
58
|
+
end
|
59
|
+
def org_prev_item=(org_prev_item)
|
60
|
+
@org_prev_item = org_prev_item
|
61
|
+
end
|
62
|
+
|
25
63
|
def prev_item()
|
26
64
|
@prev_item
|
27
65
|
end
|
@@ -53,16 +91,33 @@ module Lexer
|
|
53
91
|
@children.push(child)
|
54
92
|
end
|
55
93
|
def has_children()
|
56
|
-
@children.length >
|
94
|
+
@children.length > 0
|
57
95
|
end
|
58
96
|
|
59
97
|
def dup()
|
60
98
|
# puts '-> Base.dup'
|
61
99
|
o = super()
|
100
|
+
o.nonce = Base.generate_nonce()
|
62
101
|
o.prev_item = nil
|
63
102
|
o.next_item = nil
|
64
103
|
o
|
65
104
|
end
|
105
|
+
|
106
|
+
def resolve()
|
107
|
+
puts '-> Base.resolve'
|
108
|
+
end
|
109
|
+
|
110
|
+
class << self
|
111
|
+
def generate_nonce()
|
112
|
+
rand(10 ** 3).to_s.rjust(3, '0')
|
113
|
+
end
|
114
|
+
def keep_nonce_on_dup()
|
115
|
+
false
|
116
|
+
end
|
117
|
+
def keep_instance_id_on_dup()
|
118
|
+
false
|
119
|
+
end
|
120
|
+
end
|
66
121
|
end # Base
|
67
122
|
end # Lexer
|
68
123
|
end # Range
|
@@ -3,7 +3,16 @@ module TheFox
|
|
3
3
|
module Range
|
4
4
|
module Lexer
|
5
5
|
# { }
|
6
|
-
class Block <
|
6
|
+
class Block < Base
|
7
|
+
def initialize(level)
|
8
|
+
super()
|
9
|
+
# puts '-> Block.initialize(%s)' % [level.inspect]
|
10
|
+
@level = level.dup
|
11
|
+
end
|
12
|
+
|
13
|
+
def level()
|
14
|
+
@level
|
15
|
+
end
|
7
16
|
end # Block
|
8
17
|
end # Lexer
|
9
18
|
end # Range
|
@@ -5,14 +5,18 @@ module Lexer
|
|
5
5
|
# {
|
6
6
|
class BlockDown < Block
|
7
7
|
def initialize(level)
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
level.inc
|
9
|
+
super(level)
|
10
|
+
# puts '-> BlockDown.initialize(%s)' % [level.inspect]
|
11
11
|
end
|
12
12
|
|
13
13
|
# :nocov:
|
14
14
|
def inspect()
|
15
|
-
'BlockDown(%
|
15
|
+
'BlockDown(%s)' % [@level.level]
|
16
|
+
# if @prev_item.nil?
|
17
|
+
# else
|
18
|
+
# 'BlockDown(%s <%s)' % [@level.inspect, @prev_item.inspect]
|
19
|
+
# end
|
16
20
|
end
|
17
21
|
# :nocov:
|
18
22
|
end # BlockDown
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module TheFox
|
3
|
+
module Range
|
4
|
+
module Lexer
|
5
|
+
class BlockLevel
|
6
|
+
def initialize()
|
7
|
+
# puts '-> BlockLevel.initialize()'
|
8
|
+
@level = 0
|
9
|
+
end
|
10
|
+
|
11
|
+
# :nocov:
|
12
|
+
def inspect()
|
13
|
+
'BlockLevel(%d)' % [@level]
|
14
|
+
end
|
15
|
+
# :nocov:
|
16
|
+
|
17
|
+
def inc()
|
18
|
+
@level += 1
|
19
|
+
end
|
20
|
+
|
21
|
+
def dec()
|
22
|
+
@level -= 1
|
23
|
+
end
|
24
|
+
|
25
|
+
def level()
|
26
|
+
@level
|
27
|
+
end
|
28
|
+
|
29
|
+
def ==(other)
|
30
|
+
if other.is_a?(BlockLevel)
|
31
|
+
@level == other.level
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end # BlockLevel
|
35
|
+
end # Lexer
|
36
|
+
end # Range
|
37
|
+
end # TheFox
|
@@ -5,14 +5,16 @@ module Lexer
|
|
5
5
|
# }
|
6
6
|
class BlockUp < Block
|
7
7
|
def initialize(level)
|
8
|
-
super()
|
9
|
-
|
10
|
-
|
8
|
+
super(level)
|
9
|
+
level.dec
|
10
|
+
# puts '-> BlockUp.initialize(%s)' % [level.inspect]
|
11
|
+
# puts '-> BlockUp.initialize()'
|
11
12
|
end
|
12
13
|
|
13
14
|
# :nocov:
|
14
15
|
def inspect()
|
15
|
-
'BlockUp(%
|
16
|
+
'BlockUp(%s)' % [@level.level]
|
17
|
+
# 'BlockUp()'
|
16
18
|
end
|
17
19
|
# :nocov:
|
18
20
|
end # BlockUp
|
@@ -0,0 +1,73 @@
|
|
1
|
+
|
2
|
+
module TheFox
|
3
|
+
module Range
|
4
|
+
module Lexer
|
5
|
+
class Collection
|
6
|
+
def initialize(items = nil)
|
7
|
+
# puts '-> Collection.initialize()'
|
8
|
+
@items = items.to_a
|
9
|
+
@block_level = 0
|
10
|
+
end
|
11
|
+
|
12
|
+
# :nocov:
|
13
|
+
def inspect()
|
14
|
+
'Collection(L=%d %s)' % [
|
15
|
+
@items.length,
|
16
|
+
@items.map{ |i| i.inspect }
|
17
|
+
]
|
18
|
+
end
|
19
|
+
# :nocov:
|
20
|
+
|
21
|
+
def items()
|
22
|
+
@items
|
23
|
+
end
|
24
|
+
|
25
|
+
def curr()
|
26
|
+
@items.last
|
27
|
+
end
|
28
|
+
|
29
|
+
def prev()
|
30
|
+
@items[-2]
|
31
|
+
end
|
32
|
+
|
33
|
+
def is_empty()
|
34
|
+
@items.length == 0
|
35
|
+
end
|
36
|
+
|
37
|
+
def length()
|
38
|
+
@items.length
|
39
|
+
end
|
40
|
+
|
41
|
+
def push(item)
|
42
|
+
# puts '-> %s.push(%s)' % [self.inspect, item.inspect]
|
43
|
+
if item.nil?
|
44
|
+
return
|
45
|
+
end
|
46
|
+
|
47
|
+
# Prev
|
48
|
+
org_prev_item = item.prev_item
|
49
|
+
prev_item = @items.last
|
50
|
+
|
51
|
+
# Dup
|
52
|
+
curr_item = item.dup
|
53
|
+
@items.push(curr_item)
|
54
|
+
|
55
|
+
# Chain
|
56
|
+
curr_item.chain(prev_item)
|
57
|
+
curr_item.org_prev_item = org_prev_item
|
58
|
+
|
59
|
+
if curr_item.class.keep_nonce_on_dup
|
60
|
+
curr_item.nonce = item.nonce
|
61
|
+
end
|
62
|
+
if curr_item.class.keep_instance_id_on_dup
|
63
|
+
curr_item.instance_id = item.instance_id
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def pop()
|
68
|
+
@items.pop
|
69
|
+
end
|
70
|
+
end # Collection
|
71
|
+
end # Lexer
|
72
|
+
end # Range
|
73
|
+
end # TheFox
|
@@ -1,32 +1,41 @@
|
|
1
1
|
|
2
2
|
module TheFox
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
3
|
+
module Range
|
4
|
+
module Lexer
|
5
|
+
# x-y/n
|
6
|
+
class Interval < Base
|
7
|
+
def initialize()
|
8
|
+
super()
|
9
|
+
# puts '-> Interval.initialize()'
|
10
|
+
@number = nil
|
11
|
+
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
13
|
+
# :nocov:
|
14
|
+
def inspect()
|
15
|
+
if @number.nil?
|
16
|
+
'Interval()'
|
17
|
+
else
|
18
|
+
'Interval(%s)' % [@number.char]
|
20
19
|
end
|
21
|
-
|
20
|
+
end
|
21
|
+
# :nocov:
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
def number()
|
24
|
+
@number
|
25
|
+
end
|
26
|
+
def number=(number)
|
27
|
+
@number = number.dup
|
28
|
+
end
|
29
|
+
|
30
|
+
def resolve()
|
31
|
+
# puts '-> %s.resolve' % [inspect]
|
32
|
+
if @number.nil?
|
33
|
+
1
|
34
|
+
else
|
35
|
+
@number.resolve
|
28
36
|
end
|
29
|
-
end
|
30
|
-
end #
|
31
|
-
|
32
|
-
|
37
|
+
end
|
38
|
+
end # Interval
|
39
|
+
end # Lexer
|
40
|
+
end # Range
|
41
|
+
end # TheFox
|