elkrb 1.0.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 +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +11 -0
- data/Gemfile +13 -0
- data/README.adoc +1028 -0
- data/Rakefile +64 -0
- data/benchmarks/README.md +172 -0
- data/benchmarks/elkjs_benchmark.js +140 -0
- data/benchmarks/elkrb_benchmark.rb +145 -0
- data/benchmarks/fixtures/graphs.json +10777 -0
- data/benchmarks/generate_report.rb +241 -0
- data/benchmarks/generate_test_graphs.rb +154 -0
- data/benchmarks/results/elkrb_results.json +280 -0
- data/benchmarks/results/elkrb_summary.json +285 -0
- data/elkrb.gemspec +39 -0
- data/examples/dot_export_demo.rb +133 -0
- data/examples/hierarchical_graph.rb +19 -0
- data/examples/layout_constraints_demo.rb +272 -0
- data/examples/port_constraints_demo.rb +291 -0
- data/examples/self_loop_demo.rb +391 -0
- data/examples/simple_graph.rb +50 -0
- data/examples/spline_routing_demo.rb +235 -0
- data/exe/elkrb +8 -0
- data/lib/elkrb/cli.rb +224 -0
- data/lib/elkrb/commands/batch_command.rb +66 -0
- data/lib/elkrb/commands/convert_command.rb +130 -0
- data/lib/elkrb/commands/diagram_command.rb +208 -0
- data/lib/elkrb/commands/render_command.rb +52 -0
- data/lib/elkrb/commands/validate_command.rb +241 -0
- data/lib/elkrb/errors.rb +30 -0
- data/lib/elkrb/geometry/bezier.rb +163 -0
- data/lib/elkrb/geometry/dimension.rb +32 -0
- data/lib/elkrb/geometry/point.rb +68 -0
- data/lib/elkrb/geometry/rectangle.rb +86 -0
- data/lib/elkrb/geometry/vector.rb +67 -0
- data/lib/elkrb/graph/edge.rb +95 -0
- data/lib/elkrb/graph/graph.rb +90 -0
- data/lib/elkrb/graph/label.rb +45 -0
- data/lib/elkrb/graph/layout_options.rb +247 -0
- data/lib/elkrb/graph/node.rb +79 -0
- data/lib/elkrb/graph/node_constraints.rb +107 -0
- data/lib/elkrb/graph/port.rb +104 -0
- data/lib/elkrb/graphviz_wrapper.rb +133 -0
- data/lib/elkrb/layout/algorithm_registry.rb +57 -0
- data/lib/elkrb/layout/algorithms/base_algorithm.rb +208 -0
- data/lib/elkrb/layout/algorithms/box.rb +47 -0
- data/lib/elkrb/layout/algorithms/disco.rb +206 -0
- data/lib/elkrb/layout/algorithms/fixed.rb +32 -0
- data/lib/elkrb/layout/algorithms/force.rb +165 -0
- data/lib/elkrb/layout/algorithms/layered/cycle_breaker.rb +86 -0
- data/lib/elkrb/layout/algorithms/layered/layer_assigner.rb +96 -0
- data/lib/elkrb/layout/algorithms/layered/node_placer.rb +77 -0
- data/lib/elkrb/layout/algorithms/layered.rb +49 -0
- data/lib/elkrb/layout/algorithms/libavoid.rb +389 -0
- data/lib/elkrb/layout/algorithms/mrtree.rb +144 -0
- data/lib/elkrb/layout/algorithms/radial.rb +64 -0
- data/lib/elkrb/layout/algorithms/random.rb +43 -0
- data/lib/elkrb/layout/algorithms/rectpacking.rb +93 -0
- data/lib/elkrb/layout/algorithms/spore_compaction.rb +139 -0
- data/lib/elkrb/layout/algorithms/spore_overlap.rb +117 -0
- data/lib/elkrb/layout/algorithms/stress.rb +176 -0
- data/lib/elkrb/layout/algorithms/topdown_packing.rb +183 -0
- data/lib/elkrb/layout/algorithms/vertiflex.rb +174 -0
- data/lib/elkrb/layout/constraints/alignment_constraint.rb +150 -0
- data/lib/elkrb/layout/constraints/base_constraint.rb +72 -0
- data/lib/elkrb/layout/constraints/constraint_processor.rb +134 -0
- data/lib/elkrb/layout/constraints/fixed_position_constraint.rb +87 -0
- data/lib/elkrb/layout/constraints/layer_constraint.rb +71 -0
- data/lib/elkrb/layout/constraints/relative_position_constraint.rb +110 -0
- data/lib/elkrb/layout/edge_router.rb +935 -0
- data/lib/elkrb/layout/hierarchical_processor.rb +299 -0
- data/lib/elkrb/layout/label_placer.rb +338 -0
- data/lib/elkrb/layout/layout_engine.rb +170 -0
- data/lib/elkrb/layout/port_constraint_processor.rb +173 -0
- data/lib/elkrb/options/elk_padding.rb +94 -0
- data/lib/elkrb/options/k_vector.rb +100 -0
- data/lib/elkrb/options/k_vector_chain.rb +135 -0
- data/lib/elkrb/parsers/elkt_parser.rb +248 -0
- data/lib/elkrb/serializers/dot_serializer.rb +339 -0
- data/lib/elkrb/serializers/elkt_serializer.rb +236 -0
- data/lib/elkrb/version.rb +5 -0
- data/lib/elkrb.rb +509 -0
- data/sig/elkrb/constraints.rbs +114 -0
- data/sig/elkrb/geometry.rbs +61 -0
- data/sig/elkrb/graph.rbs +112 -0
- data/sig/elkrb/layout.rbs +107 -0
- data/sig/elkrb/options.rbs +81 -0
- data/sig/elkrb.rbs +32 -0
- metadata +179 -0
data/sig/elkrb/graph.rbs
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
module Elkrb
|
|
2
|
+
module Graph
|
|
3
|
+
class LayoutOptions
|
|
4
|
+
attr_accessor algorithm: String?
|
|
5
|
+
attr_accessor direction: String?
|
|
6
|
+
attr_accessor spacing_node_node: Float?
|
|
7
|
+
attr_accessor spacing_edge_node: Float?
|
|
8
|
+
attr_accessor spacing_edge_edge: Float?
|
|
9
|
+
attr_accessor edge_routing: String?
|
|
10
|
+
attr_accessor padding: Hash[Symbol, Float]?
|
|
11
|
+
attr_accessor aspect_ratio: Float?
|
|
12
|
+
|
|
13
|
+
def self.from_hash: (Hash[String | Symbol, untyped] hash) -> LayoutOptions
|
|
14
|
+
def to_json: () -> String
|
|
15
|
+
def to_yaml: () -> String
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class Label
|
|
19
|
+
attr_accessor id: String?
|
|
20
|
+
attr_accessor text: String?
|
|
21
|
+
attr_accessor x: Float?
|
|
22
|
+
attr_accessor y: Float?
|
|
23
|
+
attr_accessor width: Float?
|
|
24
|
+
attr_accessor height: Float?
|
|
25
|
+
|
|
26
|
+
def self.from_hash: (Hash[String | Symbol, untyped] hash) -> Label
|
|
27
|
+
def to_json: () -> String
|
|
28
|
+
def to_yaml: () -> String
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class Port
|
|
32
|
+
attr_accessor id: String?
|
|
33
|
+
attr_accessor x: Float?
|
|
34
|
+
attr_accessor y: Float?
|
|
35
|
+
attr_accessor width: Float?
|
|
36
|
+
attr_accessor height: Float?
|
|
37
|
+
attr_accessor labels: Array[Label]?
|
|
38
|
+
|
|
39
|
+
def self.from_hash: (Hash[String | Symbol, untyped] hash) -> Port
|
|
40
|
+
def to_json: () -> String
|
|
41
|
+
def to_yaml: () -> String
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
class EdgeSection
|
|
45
|
+
attr_accessor id: String?
|
|
46
|
+
attr_accessor start_point: Hash[String, Float]?
|
|
47
|
+
attr_accessor end_point: Hash[String, Float]?
|
|
48
|
+
attr_accessor bend_points: Array[Hash[String, Float]]?
|
|
49
|
+
attr_accessor incoming_shape: String?
|
|
50
|
+
attr_accessor outgoing_shape: String?
|
|
51
|
+
|
|
52
|
+
def self.from_hash: (Hash[String | Symbol, untyped] hash) -> EdgeSection
|
|
53
|
+
def to_json: () -> String
|
|
54
|
+
def to_yaml: () -> String
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
class Edge
|
|
58
|
+
attr_accessor id: String?
|
|
59
|
+
attr_accessor sources: Array[String]?
|
|
60
|
+
attr_accessor targets: Array[String]?
|
|
61
|
+
attr_accessor labels: Array[Label]?
|
|
62
|
+
attr_accessor sections: Array[EdgeSection]?
|
|
63
|
+
attr_accessor layout_options: LayoutOptions?
|
|
64
|
+
attr_accessor properties: Hash[String, untyped]?
|
|
65
|
+
|
|
66
|
+
def self.from_hash: (Hash[String | Symbol, untyped] hash) -> Edge
|
|
67
|
+
def to_json: () -> String
|
|
68
|
+
def to_yaml: () -> String
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
class Node
|
|
72
|
+
attr_accessor id: String?
|
|
73
|
+
attr_accessor x: Float?
|
|
74
|
+
attr_accessor y: Float?
|
|
75
|
+
attr_accessor width: Float?
|
|
76
|
+
attr_accessor height: Float?
|
|
77
|
+
attr_accessor labels: Array[Label]?
|
|
78
|
+
attr_accessor ports: Array[Port]?
|
|
79
|
+
attr_accessor children: Array[Node]?
|
|
80
|
+
attr_accessor edges: Array[Edge]?
|
|
81
|
+
attr_accessor layout_options: LayoutOptions?
|
|
82
|
+
attr_accessor properties: Hash[String, untyped]?
|
|
83
|
+
|
|
84
|
+
def self.from_hash: (Hash[String | Symbol, untyped] hash) -> Node
|
|
85
|
+
def to_json: () -> String
|
|
86
|
+
def to_yaml: () -> String
|
|
87
|
+
def hierarchical?: () -> bool
|
|
88
|
+
def find_node: (String node_id) -> Node?
|
|
89
|
+
def all_nodes: () -> Array[Node]
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
class Graph
|
|
93
|
+
attr_accessor id: String?
|
|
94
|
+
attr_accessor x: Float?
|
|
95
|
+
attr_accessor y: Float?
|
|
96
|
+
attr_accessor width: Float?
|
|
97
|
+
attr_accessor height: Float?
|
|
98
|
+
attr_accessor children: Array[Node]?
|
|
99
|
+
attr_accessor edges: Array[Edge]?
|
|
100
|
+
attr_accessor layout_options: LayoutOptions?
|
|
101
|
+
attr_accessor properties: Hash[String, untyped]?
|
|
102
|
+
|
|
103
|
+
def self.from_hash: (Hash[String | Symbol, untyped] hash) -> Graph
|
|
104
|
+
def to_json: () -> String
|
|
105
|
+
def to_yaml: () -> String
|
|
106
|
+
def hierarchical?: () -> bool
|
|
107
|
+
def find_node: (String node_id) -> Node?
|
|
108
|
+
def all_nodes: () -> Array[Node]
|
|
109
|
+
def all_edges: () -> Array[Edge]
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
module Elkrb
|
|
2
|
+
module Layout
|
|
3
|
+
type algorithmMetadata = {
|
|
4
|
+
name: String,
|
|
5
|
+
description: String,
|
|
6
|
+
category: String?,
|
|
7
|
+
supports_hierarchy: bool?
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
type algorithmInfo = {
|
|
11
|
+
id: String,
|
|
12
|
+
name: String,
|
|
13
|
+
description: String,
|
|
14
|
+
category: String,
|
|
15
|
+
supports_hierarchy: bool
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
class AlgorithmRegistry
|
|
19
|
+
def self.register: (String name, singleton(Algorithms::BaseAlgorithm) algorithm_class, ?algorithmMetadata metadata) -> void
|
|
20
|
+
def self.get: (String name) -> singleton(Algorithms::BaseAlgorithm)?
|
|
21
|
+
def self.available_algorithms: () -> Array[String]
|
|
22
|
+
def self.algorithm_info: (String name) -> algorithmInfo?
|
|
23
|
+
def self.all_algorithm_info: () -> Array[algorithmInfo]
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def self.normalize_name: (String name) -> String
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class LayoutEngine
|
|
31
|
+
def self.layout: (Hash[String | Symbol, untyped] | Graph::Graph graph, Hash[String | Symbol, untyped] options) -> Graph::Graph
|
|
32
|
+
def self.known_layout_algorithms: () -> Array[algorithmInfo]
|
|
33
|
+
def self.known_layout_options: () -> Array[untyped]
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def self.convert_to_graph: (Hash[String | Symbol, untyped] hash) -> Graph::Graph
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
module Algorithms
|
|
41
|
+
class BaseAlgorithm
|
|
42
|
+
attr_reader options: Hash[String | Symbol, untyped]
|
|
43
|
+
|
|
44
|
+
def initialize: (Hash[String | Symbol, untyped] options) -> void
|
|
45
|
+
def layout: (Graph::Graph graph) -> Graph::Graph
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def option: (String | Symbol key, ?untyped default) -> untyped
|
|
50
|
+
def node_spacing: () -> Float
|
|
51
|
+
def padding: () -> Hash[Symbol, Float]
|
|
52
|
+
def calculate_bounding_box: (Array[Graph::Node] nodes) -> Geometry::Rectangle
|
|
53
|
+
def apply_padding: (Graph::Graph graph) -> void
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class Random < BaseAlgorithm
|
|
57
|
+
def layout: (Graph::Graph graph) -> Graph::Graph
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class Fixed < BaseAlgorithm
|
|
61
|
+
def layout: (Graph::Graph graph) -> Graph::Graph
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class Box < BaseAlgorithm
|
|
65
|
+
def layout: (Graph::Graph graph) -> Graph::Graph
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
class Force < BaseAlgorithm
|
|
69
|
+
DEFAULT_ITERATIONS: Integer
|
|
70
|
+
DEFAULT_REPULSION: Float
|
|
71
|
+
DEFAULT_TEMPERATURE: Float
|
|
72
|
+
|
|
73
|
+
def layout: (Graph::Graph graph) -> Graph::Graph
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
|
|
77
|
+
def iterations: () -> Integer
|
|
78
|
+
def repulsion: () -> Float
|
|
79
|
+
def temperature: () -> Float
|
|
80
|
+
def collect_edges: (Graph::Graph graph) -> Array[Graph::Edge]
|
|
81
|
+
def initialize_positions: (Graph::Graph graph) -> void
|
|
82
|
+
def apply_forces: (Graph::Graph graph, Float repulsion, Float temperature, Integer iteration, Integer total_iterations) -> void
|
|
83
|
+
def calculate_repulsive_forces: (Array[Graph::Node] nodes, Float repulsion) -> Hash[String, Geometry::Vector]
|
|
84
|
+
def calculate_attractive_forces: (Array[Graph::Edge] edges, Float temperature) -> Hash[String, Geometry::Vector]
|
|
85
|
+
def apply_displacement: (Array[Graph::Node] nodes, Hash[String, Geometry::Vector] forces, Float cooling_factor) -> void
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class Stress < BaseAlgorithm
|
|
89
|
+
DEFAULT_ITERATIONS: Integer
|
|
90
|
+
DEFAULT_EPSILON: Float
|
|
91
|
+
|
|
92
|
+
def layout: (Graph::Graph graph) -> Graph::Graph
|
|
93
|
+
|
|
94
|
+
private
|
|
95
|
+
|
|
96
|
+
def iterations: () -> Integer
|
|
97
|
+
def epsilon: () -> Float
|
|
98
|
+
def collect_edges: (Graph::Graph graph) -> Array[Graph::Edge]
|
|
99
|
+
def initialize_positions: (Graph::Graph graph) -> void
|
|
100
|
+
def calculate_distances: (Graph::Graph graph) -> Hash[String, Hash[String, Float]]
|
|
101
|
+
def calculate_stress: (Graph::Graph graph, Hash[String, Hash[String, Float]] distances) -> Float
|
|
102
|
+
def optimize_positions: (Graph::Graph graph, Hash[String, Hash[String, Float]] distances) -> void
|
|
103
|
+
def euclidean_distance: (Graph::Node n1, Graph::Node n2) -> Float
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Elkrb
|
|
4
|
+
module Options
|
|
5
|
+
class ElkPadding
|
|
6
|
+
attr_reader left: Float
|
|
7
|
+
attr_reader top: Float
|
|
8
|
+
attr_reader right: Float
|
|
9
|
+
attr_reader bottom: Float
|
|
10
|
+
|
|
11
|
+
def initialize: (?left: Numeric, ?top: Numeric, ?right: Numeric, ?bottom: Numeric) -> void
|
|
12
|
+
|
|
13
|
+
def self.parse: (String | Hash[Symbol | String, Numeric] | ElkPadding value) -> ElkPadding
|
|
14
|
+
|
|
15
|
+
def self.from_hash: (Hash[Symbol | String, Numeric] hash) -> ElkPadding
|
|
16
|
+
|
|
17
|
+
def self.from_string: (String str) -> ElkPadding
|
|
18
|
+
|
|
19
|
+
def to_h: () -> Hash[Symbol, Float]
|
|
20
|
+
|
|
21
|
+
def to_s: () -> String
|
|
22
|
+
|
|
23
|
+
def ==: (untyped other) -> bool
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class KVector
|
|
27
|
+
attr_reader x: Float
|
|
28
|
+
attr_reader y: Float
|
|
29
|
+
|
|
30
|
+
def initialize: (Numeric x, Numeric y) -> void
|
|
31
|
+
|
|
32
|
+
def self.parse: (String | Hash[Symbol | String, Numeric] | Array[Numeric] | KVector value) -> KVector
|
|
33
|
+
|
|
34
|
+
def self.from_hash: (Hash[Symbol | String, Numeric] hash) -> KVector
|
|
35
|
+
|
|
36
|
+
def self.from_array: (Array[Numeric] array) -> KVector
|
|
37
|
+
|
|
38
|
+
def self.from_string: (String str) -> KVector
|
|
39
|
+
|
|
40
|
+
def to_h: () -> Hash[Symbol, Float]
|
|
41
|
+
|
|
42
|
+
def to_a: () -> Array[Float]
|
|
43
|
+
|
|
44
|
+
def to_s: () -> String
|
|
45
|
+
|
|
46
|
+
def ==: (untyped other) -> bool
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class KVectorChain
|
|
50
|
+
attr_reader vectors: Array[KVector]
|
|
51
|
+
|
|
52
|
+
def initialize: (?Array[Array[Numeric] | Hash[Symbol | String, Numeric] | KVector] vectors) -> void
|
|
53
|
+
|
|
54
|
+
def self.parse: (String | Array[Array[Numeric] | Hash[Symbol | String, Numeric] | KVector] | KVectorChain value) -> KVectorChain
|
|
55
|
+
|
|
56
|
+
def self.from_array: (Array[Array[Numeric] | Hash[Symbol | String, Numeric] | KVector] array) -> KVectorChain
|
|
57
|
+
|
|
58
|
+
def self.from_string: (String str) -> KVectorChain
|
|
59
|
+
|
|
60
|
+
def add: (Array[Numeric] | Hash[Symbol | String, Numeric] | KVector vector) -> self
|
|
61
|
+
|
|
62
|
+
alias << add
|
|
63
|
+
|
|
64
|
+
def []: (Integer index) -> KVector?
|
|
65
|
+
|
|
66
|
+
def size: () -> Integer
|
|
67
|
+
|
|
68
|
+
alias length size
|
|
69
|
+
|
|
70
|
+
def empty?: () -> bool
|
|
71
|
+
|
|
72
|
+
def each: () { (KVector) -> void } -> void
|
|
73
|
+
|
|
74
|
+
def to_a: () -> Array[KVector]
|
|
75
|
+
|
|
76
|
+
def to_s: () -> String
|
|
77
|
+
|
|
78
|
+
def ==: (untyped other) -> bool
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
data/sig/elkrb.rbs
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Elkrb
|
|
2
|
+
VERSION: String
|
|
3
|
+
|
|
4
|
+
class Error < StandardError
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
class UnsupportedConfigurationException < Error
|
|
8
|
+
attr_reader option: String?
|
|
9
|
+
attr_reader value: untyped
|
|
10
|
+
|
|
11
|
+
def initialize: (String message, ?option: String?, ?value: untyped) -> void
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class ValidationError < Error
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class AlgorithmNotFoundError < Error
|
|
18
|
+
attr_reader algorithm_name: String
|
|
19
|
+
|
|
20
|
+
def initialize: (String algorithm_name) -> void
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.layout: (Graph::Graph | Hash[Symbol, untyped] graph, ?Hash[Symbol, untyped] options) -> Graph::Graph
|
|
24
|
+
|
|
25
|
+
def self.register_algorithm: (String name, Class algorithm_class, ?Hash[Symbol, untyped] metadata) -> void
|
|
26
|
+
|
|
27
|
+
def self.known_layout_algorithms: () -> Array[Hash[Symbol, untyped]]
|
|
28
|
+
|
|
29
|
+
def self.known_layout_options: () -> Hash[String, Hash[Symbol, untyped]]
|
|
30
|
+
|
|
31
|
+
def self.known_layout_categories: () -> Hash[String, Hash[Symbol, String]]
|
|
32
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: elkrb
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Ribose Inc.
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2025-11-14 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: lutaml-model
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0.7'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0.7'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rbs
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '3.0'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '3.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: thor
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '1.4'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '1.4'
|
|
55
|
+
description: |
|
|
56
|
+
Pure Ruby implementation of the Eclipse Layout Kernel (ELK) providing automatic
|
|
57
|
+
layout of node-link diagrams. Supports all ELK algorithms.
|
|
58
|
+
email:
|
|
59
|
+
- open.source@ribose.com
|
|
60
|
+
executables:
|
|
61
|
+
- elkrb
|
|
62
|
+
extensions: []
|
|
63
|
+
extra_rdoc_files: []
|
|
64
|
+
files:
|
|
65
|
+
- ".rspec"
|
|
66
|
+
- ".rubocop.yml"
|
|
67
|
+
- Gemfile
|
|
68
|
+
- README.adoc
|
|
69
|
+
- Rakefile
|
|
70
|
+
- benchmarks/README.md
|
|
71
|
+
- benchmarks/elkjs_benchmark.js
|
|
72
|
+
- benchmarks/elkrb_benchmark.rb
|
|
73
|
+
- benchmarks/fixtures/graphs.json
|
|
74
|
+
- benchmarks/generate_report.rb
|
|
75
|
+
- benchmarks/generate_test_graphs.rb
|
|
76
|
+
- benchmarks/results/elkrb_results.json
|
|
77
|
+
- benchmarks/results/elkrb_summary.json
|
|
78
|
+
- elkrb.gemspec
|
|
79
|
+
- examples/dot_export_demo.rb
|
|
80
|
+
- examples/hierarchical_graph.rb
|
|
81
|
+
- examples/layout_constraints_demo.rb
|
|
82
|
+
- examples/port_constraints_demo.rb
|
|
83
|
+
- examples/self_loop_demo.rb
|
|
84
|
+
- examples/simple_graph.rb
|
|
85
|
+
- examples/spline_routing_demo.rb
|
|
86
|
+
- exe/elkrb
|
|
87
|
+
- lib/elkrb.rb
|
|
88
|
+
- lib/elkrb/cli.rb
|
|
89
|
+
- lib/elkrb/commands/batch_command.rb
|
|
90
|
+
- lib/elkrb/commands/convert_command.rb
|
|
91
|
+
- lib/elkrb/commands/diagram_command.rb
|
|
92
|
+
- lib/elkrb/commands/render_command.rb
|
|
93
|
+
- lib/elkrb/commands/validate_command.rb
|
|
94
|
+
- lib/elkrb/errors.rb
|
|
95
|
+
- lib/elkrb/geometry/bezier.rb
|
|
96
|
+
- lib/elkrb/geometry/dimension.rb
|
|
97
|
+
- lib/elkrb/geometry/point.rb
|
|
98
|
+
- lib/elkrb/geometry/rectangle.rb
|
|
99
|
+
- lib/elkrb/geometry/vector.rb
|
|
100
|
+
- lib/elkrb/graph/edge.rb
|
|
101
|
+
- lib/elkrb/graph/graph.rb
|
|
102
|
+
- lib/elkrb/graph/label.rb
|
|
103
|
+
- lib/elkrb/graph/layout_options.rb
|
|
104
|
+
- lib/elkrb/graph/node.rb
|
|
105
|
+
- lib/elkrb/graph/node_constraints.rb
|
|
106
|
+
- lib/elkrb/graph/port.rb
|
|
107
|
+
- lib/elkrb/graphviz_wrapper.rb
|
|
108
|
+
- lib/elkrb/layout/algorithm_registry.rb
|
|
109
|
+
- lib/elkrb/layout/algorithms/base_algorithm.rb
|
|
110
|
+
- lib/elkrb/layout/algorithms/box.rb
|
|
111
|
+
- lib/elkrb/layout/algorithms/disco.rb
|
|
112
|
+
- lib/elkrb/layout/algorithms/fixed.rb
|
|
113
|
+
- lib/elkrb/layout/algorithms/force.rb
|
|
114
|
+
- lib/elkrb/layout/algorithms/layered.rb
|
|
115
|
+
- lib/elkrb/layout/algorithms/layered/cycle_breaker.rb
|
|
116
|
+
- lib/elkrb/layout/algorithms/layered/layer_assigner.rb
|
|
117
|
+
- lib/elkrb/layout/algorithms/layered/node_placer.rb
|
|
118
|
+
- lib/elkrb/layout/algorithms/libavoid.rb
|
|
119
|
+
- lib/elkrb/layout/algorithms/mrtree.rb
|
|
120
|
+
- lib/elkrb/layout/algorithms/radial.rb
|
|
121
|
+
- lib/elkrb/layout/algorithms/random.rb
|
|
122
|
+
- lib/elkrb/layout/algorithms/rectpacking.rb
|
|
123
|
+
- lib/elkrb/layout/algorithms/spore_compaction.rb
|
|
124
|
+
- lib/elkrb/layout/algorithms/spore_overlap.rb
|
|
125
|
+
- lib/elkrb/layout/algorithms/stress.rb
|
|
126
|
+
- lib/elkrb/layout/algorithms/topdown_packing.rb
|
|
127
|
+
- lib/elkrb/layout/algorithms/vertiflex.rb
|
|
128
|
+
- lib/elkrb/layout/constraints/alignment_constraint.rb
|
|
129
|
+
- lib/elkrb/layout/constraints/base_constraint.rb
|
|
130
|
+
- lib/elkrb/layout/constraints/constraint_processor.rb
|
|
131
|
+
- lib/elkrb/layout/constraints/fixed_position_constraint.rb
|
|
132
|
+
- lib/elkrb/layout/constraints/layer_constraint.rb
|
|
133
|
+
- lib/elkrb/layout/constraints/relative_position_constraint.rb
|
|
134
|
+
- lib/elkrb/layout/edge_router.rb
|
|
135
|
+
- lib/elkrb/layout/hierarchical_processor.rb
|
|
136
|
+
- lib/elkrb/layout/label_placer.rb
|
|
137
|
+
- lib/elkrb/layout/layout_engine.rb
|
|
138
|
+
- lib/elkrb/layout/port_constraint_processor.rb
|
|
139
|
+
- lib/elkrb/options/elk_padding.rb
|
|
140
|
+
- lib/elkrb/options/k_vector.rb
|
|
141
|
+
- lib/elkrb/options/k_vector_chain.rb
|
|
142
|
+
- lib/elkrb/parsers/elkt_parser.rb
|
|
143
|
+
- lib/elkrb/serializers/dot_serializer.rb
|
|
144
|
+
- lib/elkrb/serializers/elkt_serializer.rb
|
|
145
|
+
- lib/elkrb/version.rb
|
|
146
|
+
- sig/elkrb.rbs
|
|
147
|
+
- sig/elkrb/constraints.rbs
|
|
148
|
+
- sig/elkrb/geometry.rbs
|
|
149
|
+
- sig/elkrb/graph.rbs
|
|
150
|
+
- sig/elkrb/layout.rbs
|
|
151
|
+
- sig/elkrb/options.rbs
|
|
152
|
+
homepage: https://github.com/claricle/elkrb
|
|
153
|
+
licenses:
|
|
154
|
+
- BSD-2-Clause
|
|
155
|
+
metadata:
|
|
156
|
+
homepage_uri: https://github.com/claricle/elkrb
|
|
157
|
+
source_code_uri: https://github.com/claricle/elkrb
|
|
158
|
+
changelog_uri: https://github.com/claricle/elkrb
|
|
159
|
+
rubygems_mfa_required: 'true'
|
|
160
|
+
post_install_message:
|
|
161
|
+
rdoc_options: []
|
|
162
|
+
require_paths:
|
|
163
|
+
- lib
|
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
165
|
+
requirements:
|
|
166
|
+
- - ">="
|
|
167
|
+
- !ruby/object:Gem::Version
|
|
168
|
+
version: 3.0.0
|
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - ">="
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '0'
|
|
174
|
+
requirements: []
|
|
175
|
+
rubygems_version: 3.5.22
|
|
176
|
+
signing_key:
|
|
177
|
+
specification_version: 4
|
|
178
|
+
summary: 'ElkRb: Ruby implementation of Eclipse Layout Kernel (ELK)'
|
|
179
|
+
test_files: []
|