thefox-ext 2.0.0 → 3.0.0.pre.rc.0
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 +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
|