maxy-gen 0.2.1 → 0.2.2
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/Gemfile.lock +1 -1
- data/lib/maxy/gen/generator.rb +21 -11
- data/lib/maxy/gen/parser.rb +45 -21
- data/lib/maxy/gen/tokenizer.rb +1 -0
- data/lib/maxy/gen/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ddf1d556c1b563928dac5451b7e431034ab0265f1599a6f075c2fbe9cea47777
|
4
|
+
data.tar.gz: 29b360138505a3700dc6a38abc8ac989673a0bb0a42c18484733eccfe994b1eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5930cfb96c88d5deb47e186f685dbb3cb113609cca68d4fae099e2a6ac854a21c12e41467eae434cb1523f0378554a6d5bef1a625c282b39ed341c0cf7833bb5
|
7
|
+
data.tar.gz: 3e55e67c6e5b0c246c4edb0be123f57cbf6b5c6fd0ace130cf4b67f0b68328576e9e6e4b88079e9fa306b3d62da7e1d8605a6a9fad23fd13880b92aca9b6b799
|
data/Gemfile.lock
CHANGED
data/lib/maxy/gen/generator.rb
CHANGED
@@ -4,9 +4,9 @@ require 'psych'
|
|
4
4
|
module Maxy
|
5
5
|
module Gen
|
6
6
|
class Generator
|
7
|
-
TEMPLATE = Psych.load_file(File.join(__dir__, '../../../assets/blank.yml')).freeze
|
8
7
|
OFFSET_X = 20
|
9
8
|
OFFSET_Y = 20
|
9
|
+
STEP_X = 70
|
10
10
|
STEP_Y = 40
|
11
11
|
HEIGHT = 22
|
12
12
|
WIDTH = 50
|
@@ -17,13 +17,14 @@ module Maxy
|
|
17
17
|
raise RuntimeError.new('No object definitions were found. please run `maxy-gen install` first') unless File.exist?("#{ENV['HOME']}/.maxy-gen/library.yml")
|
18
18
|
|
19
19
|
@object_count = 1
|
20
|
-
@patch =
|
20
|
+
@patch = Psych.load_file(File.join(__dir__, '../../../assets/blank.yml')).freeze
|
21
21
|
@library = Psych.load_file("#{ENV['HOME']}/.maxy-gen/library.yml").freeze
|
22
22
|
end
|
23
23
|
|
24
24
|
def generate(node)
|
25
25
|
return JSON.generate(@patch) if node.nil?
|
26
26
|
|
27
|
+
node = align_tree(node)
|
27
28
|
generate_node(node, "obj_#{@object_count}")
|
28
29
|
JSON.generate(@patch)
|
29
30
|
end
|
@@ -37,12 +38,13 @@ module Maxy
|
|
37
38
|
generate_node(child_node, child_id)
|
38
39
|
@patch['patcher']['lines'] << make_line(id, child_id)
|
39
40
|
end
|
41
|
+
|
40
42
|
end
|
41
43
|
|
42
44
|
def make_box(node, id)
|
43
45
|
box = @library[:objects][node.name]
|
44
46
|
box['id'] = id
|
45
|
-
box['patching_rect'] = [OFFSET_X, OFFSET_Y +
|
47
|
+
box['patching_rect'] = [OFFSET_X + node.x_rank * STEP_X, OFFSET_Y + node.y_rank * STEP_Y, box['width'] || WIDTH, box['height'] || HEIGHT]
|
46
48
|
unless box['text'].nil?
|
47
49
|
box['text'] += " #{node.args}"
|
48
50
|
end
|
@@ -53,15 +55,23 @@ module Maxy
|
|
53
55
|
def make_line(parent_id, child_id)
|
54
56
|
{ patchline: { destination: [child_id, 0], source: [parent_id, 0]} }
|
55
57
|
end
|
58
|
+
|
59
|
+
def align_tree(node, x_rank = 1, y_rank = 1)
|
60
|
+
node.x_rank = x_rank
|
61
|
+
node.y_rank = y_rank
|
62
|
+
|
63
|
+
y_rank += 1
|
64
|
+
|
65
|
+
node.child_nodes.each do |child|
|
66
|
+
align_tree(child, x_rank, y_rank)
|
67
|
+
x_rank += 1
|
68
|
+
end
|
69
|
+
|
70
|
+
node
|
71
|
+
end
|
56
72
|
end
|
57
73
|
#
|
58
|
-
# Box = Struct.new( :id,
|
59
|
-
|
60
|
-
# :numinlets,
|
61
|
-
# :numoutlets,
|
62
|
-
# :outlettype,
|
63
|
-
# :patching_rect,
|
64
|
-
# :style,
|
65
|
-
# :text)
|
74
|
+
# Box = Struct.new( :id, :node, :x_rank, :y_rank)
|
75
|
+
|
66
76
|
end
|
67
77
|
end
|
data/lib/maxy/gen/parser.rb
CHANGED
@@ -15,36 +15,26 @@ module Maxy
|
|
15
15
|
def parse_obj(obj_node=nil)
|
16
16
|
return if @tokens.length == 0
|
17
17
|
|
18
|
-
|
19
|
-
obj_name = consume(:identifier).value
|
20
|
-
else
|
21
|
-
if peek(:escaped_identifier)
|
22
|
-
obj_name = consume(:escaped_identifier).value
|
23
|
-
end
|
24
|
-
end
|
18
|
+
obj_name = parse_identifier
|
25
19
|
|
26
|
-
|
27
|
-
|
28
|
-
arguments = ''
|
29
|
-
if peek(:arguments)
|
30
|
-
arguments = parse_arguments
|
31
|
-
end
|
20
|
+
arguments = parse_arguments || ''
|
32
21
|
|
33
22
|
new_obj_node = ObjectNode.new(obj_name, arguments, [])
|
34
23
|
obj_node.child_nodes << new_obj_node unless obj_node.nil?
|
35
24
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
25
|
+
parse_plus(obj_node)
|
26
|
+
|
27
|
+
parse_dash(new_obj_node)
|
40
28
|
|
41
29
|
new_obj_node
|
42
30
|
end
|
43
31
|
|
44
32
|
def parse_arguments
|
45
|
-
|
46
|
-
|
47
|
-
|
33
|
+
if peek(:arguments)
|
34
|
+
args = consume(:arguments)
|
35
|
+
args.value =~ /\A{([^{}]*)}\Z/
|
36
|
+
$1
|
37
|
+
end
|
48
38
|
end
|
49
39
|
|
50
40
|
def consume(expected_type)
|
@@ -59,8 +49,42 @@ module Maxy
|
|
59
49
|
def peek(expected_type)
|
60
50
|
@tokens.length > 0 && @tokens.fetch(0).type == expected_type
|
61
51
|
end
|
52
|
+
|
53
|
+
def parse_identifier
|
54
|
+
if peek(:identifier)
|
55
|
+
obj_name = consume(:identifier).value
|
56
|
+
else
|
57
|
+
if peek(:escaped_identifier)
|
58
|
+
obj_name = consume(:escaped_identifier).value
|
59
|
+
end
|
60
|
+
end
|
61
|
+
raise RuntimeError.new("Could not find #{obj_name} in object definitions.") if @library[:objects][obj_name].nil?
|
62
|
+
|
63
|
+
obj_name
|
64
|
+
end
|
65
|
+
|
66
|
+
def parse_plus(obj_node)
|
67
|
+
if peek(:plus)
|
68
|
+
consume(:plus)
|
69
|
+
sibling_obj_name = parse_identifier
|
70
|
+
sibling_args = parse_arguments || ''
|
71
|
+
sibling_obj_node = ObjectNode.new(sibling_obj_name, sibling_args, [])
|
72
|
+
obj_node.child_nodes << sibling_obj_node
|
73
|
+
|
74
|
+
parse_plus(obj_node)
|
75
|
+
|
76
|
+
parse_dash(sibling_obj_node)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def parse_dash(obj_node)
|
81
|
+
if peek(:dash)
|
82
|
+
consume(:dash)
|
83
|
+
parse_obj(obj_node)
|
84
|
+
end
|
85
|
+
end
|
62
86
|
end
|
63
87
|
|
64
|
-
ObjectNode = Struct.new(:name, :args, :child_nodes)
|
88
|
+
ObjectNode = Struct.new(:name, :args, :child_nodes, :x_rank, :y_rank)
|
65
89
|
end
|
66
90
|
end
|
data/lib/maxy/gen/tokenizer.rb
CHANGED
data/lib/maxy/gen/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maxy-gen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julian Rubisch
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|