elkrb 1.0.0 → 2.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 +4 -4
- data/CHANGELOG.adoc +364 -0
- data/LICENSE +25 -0
- data/README.adoc +695 -557
- data/exe/elkrb +36 -2
- data/lib/elkrb/atomic_destination.rb +53 -0
- data/lib/elkrb/best_effort_write.rb +49 -0
- data/lib/elkrb/cli/layout_flag_options.rb +54 -0
- data/lib/elkrb/cli.rb +155 -82
- data/lib/elkrb/command_resolver.rb +186 -0
- data/lib/elkrb/commands/batch_command.rb +28 -5
- data/lib/elkrb/commands/convert_command.rb +22 -52
- data/lib/elkrb/commands/diagram_command.rb +234 -102
- data/lib/elkrb/commands/options_command.rb +87 -0
- data/lib/elkrb/commands/render_command.rb +6 -1
- data/lib/elkrb/commands/validate_command.rb +146 -91
- data/lib/elkrb/errors.rb +20 -1
- data/lib/elkrb/format_sniffer.rb +362 -0
- data/lib/elkrb/geometry/bezier.rb +14 -4
- data/lib/elkrb/geometry/point.rb +5 -6
- data/lib/elkrb/geometry/rectangle.rb +2 -2
- data/lib/elkrb/graph/deep_stringify_keys.rb +30 -0
- data/lib/elkrb/graph/edge.rb +89 -3
- data/lib/elkrb/graph/graph.rb +43 -15
- data/lib/elkrb/graph/label.rb +16 -2
- data/lib/elkrb/graph/node.rb +13 -2
- data/lib/elkrb/graph/node_constraints.rb +139 -8
- data/lib/elkrb/graph/normalize_option_keys.rb +39 -0
- data/lib/elkrb/graph/port.rb +29 -21
- data/lib/elkrb/graph/read_only_mapping.rb +21 -0
- data/lib/elkrb/graphviz_wrapper.rb +152 -44
- data/lib/elkrb/layout/algorithm_registry.rb +65 -8
- data/lib/elkrb/layout/algorithms/base_algorithm.rb +74 -74
- data/lib/elkrb/layout/algorithms/box.rb +47 -20
- data/lib/elkrb/layout/algorithms/disco.rb +150 -61
- data/lib/elkrb/layout/algorithms/fixed.rb +70 -10
- data/lib/elkrb/layout/algorithms/force.rb +145 -86
- data/lib/elkrb/layout/algorithms/layered/bk/aligner.rb +104 -0
- data/lib/elkrb/layout/algorithms/layered/bk/compactor.rb +87 -0
- data/lib/elkrb/layout/algorithms/layered/bk/view.rb +103 -0
- data/lib/elkrb/layout/algorithms/layered/bk_node_placer.rb +170 -0
- data/lib/elkrb/layout/algorithms/layered/components.rb +170 -0
- data/lib/elkrb/layout/algorithms/layered/crossing_minimizer.rb +306 -0
- data/lib/elkrb/layout/algorithms/layered/cycle_breaker.rb +118 -49
- data/lib/elkrb/layout/algorithms/layered/discovery_order.rb +75 -0
- data/lib/elkrb/layout/algorithms/layered/dummy_slot.rb +31 -0
- data/lib/elkrb/layout/algorithms/layered/layer_assigner.rb +188 -48
- data/lib/elkrb/layout/algorithms/layered/layer_constraints.rb +82 -0
- data/lib/elkrb/layout/algorithms/layered/layer_sweep.rb +195 -0
- data/lib/elkrb/layout/algorithms/layered/node_placer.rb +214 -36
- data/lib/elkrb/layout/algorithms/layered/orthogonal/gap_solver.rb +219 -0
- data/lib/elkrb/layout/algorithms/layered/orthogonal/hyper_edge_segment.rb +152 -0
- data/lib/elkrb/layout/algorithms/layered/orthogonal/junction_points.rb +58 -0
- data/lib/elkrb/layout/algorithms/layered/orthogonal/segment_order.rb +134 -0
- data/lib/elkrb/layout/algorithms/layered/orthogonal_router.rb +253 -0
- data/lib/elkrb/layout/algorithms/layered/port_order.rb +188 -0
- data/lib/elkrb/layout/algorithms/layered/port_spread.rb +42 -0
- data/lib/elkrb/layout/algorithms/layered.rb +548 -13
- data/lib/elkrb/layout/algorithms/libavoid.rb +951 -187
- data/lib/elkrb/layout/algorithms/mrtree.rb +585 -65
- data/lib/elkrb/layout/algorithms/radial.rb +188 -29
- data/lib/elkrb/layout/algorithms/random.rb +131 -17
- data/lib/elkrb/layout/algorithms/rectpacking.rb +28 -40
- data/lib/elkrb/layout/algorithms/spore_compaction.rb +57 -100
- data/lib/elkrb/layout/algorithms/spore_overlap.rb +78 -84
- data/lib/elkrb/layout/algorithms/stress.rb +391 -84
- data/lib/elkrb/layout/algorithms/topdown_packing.rb +95 -31
- data/lib/elkrb/layout/algorithms/vertiflex.rb +12 -47
- data/lib/elkrb/layout/constraints/alignment_constraint.rb +49 -12
- data/lib/elkrb/layout/constraints/base_constraint.rb +3 -15
- data/lib/elkrb/layout/constraints/constraint_processor.rb +9 -23
- data/lib/elkrb/layout/constraints/fixed_position_constraint.rb +22 -13
- data/lib/elkrb/layout/constraints/layer_constraint.rb +10 -33
- data/lib/elkrb/layout/constraints/relative_position_constraint.rb +94 -50
- data/lib/elkrb/layout/edge_router.rb +533 -337
- data/lib/elkrb/layout/hierarchical_processor.rb +19 -276
- data/lib/elkrb/layout/java_random.rb +59 -0
- data/lib/elkrb/layout/label_placer.rb +165 -157
- data/lib/elkrb/layout/layout_engine.rb +46 -23
- data/lib/elkrb/layout/node_index.rb +149 -0
- data/lib/elkrb/layout/polyomino/component_compactor.rb +138 -0
- data/lib/elkrb/layout/polyomino/footprint.rb +94 -0
- data/lib/elkrb/layout/polyomino/grid.rb +106 -0
- data/lib/elkrb/layout/polyomino/packer.rb +95 -0
- data/lib/elkrb/layout/polyomino/piece.rb +52 -0
- data/lib/elkrb/layout/port_constraint_processor.rb +131 -44
- data/lib/elkrb/layout/spore/body.rb +65 -0
- data/lib/elkrb/layout/spore/depth_first_compaction.rb +127 -0
- data/lib/elkrb/layout/spore/edge_cost.rb +69 -0
- data/lib/elkrb/layout/spore/gap.rb +76 -0
- data/lib/elkrb/layout/spore/geometry.rb +104 -0
- data/lib/elkrb/layout/spore/overlap_sweep.rb +90 -0
- data/lib/elkrb/layout/spore/placement.rb +57 -0
- data/lib/elkrb/layout/spore/rays.rb +119 -0
- data/lib/elkrb/layout/spore/spanning_tree.rb +53 -0
- data/lib/elkrb/layout/spore/triangulation.rb +159 -0
- data/lib/elkrb/layout_flags.rb +69 -0
- data/lib/elkrb/options/decimal.rb +50 -0
- data/lib/elkrb/options/element_options.rb +43 -0
- data/lib/elkrb/options/elk_padding.rb +20 -14
- data/lib/elkrb/options/k_vector.rb +6 -7
- data/lib/elkrb/options/k_vector_chain.rb +12 -20
- data/lib/elkrb/options/option_map.rb +85 -0
- data/lib/elkrb/options/registry.rb +335 -0
- data/lib/elkrb/options/resolver.rb +151 -0
- data/lib/elkrb/options/spellings.rb +62 -0
- data/lib/elkrb/options/unhonoured_report.rb +194 -0
- data/lib/elkrb/parsers/elkt/lexer.rb +309 -0
- data/lib/elkrb/parsers/elkt/parser.rb +424 -0
- data/lib/elkrb/parsers/elkt/resolver.rb +142 -0
- data/lib/elkrb/parsers/elkt/token.rb +40 -0
- data/lib/elkrb/parsers/elkt_parser.rb +32 -230
- data/lib/elkrb/serializers/dot_serializer.rb +342 -54
- data/lib/elkrb/serializers/elkt_serializer.rb +386 -155
- data/lib/elkrb/version.rb +1 -1
- data/lib/elkrb.rb +60 -61
- metadata +71 -49
- data/.rspec +0 -3
- data/.rubocop.yml +0 -11
- data/Gemfile +0 -13
- data/Rakefile +0 -64
- data/benchmarks/README.md +0 -172
- data/benchmarks/elkjs_benchmark.js +0 -140
- data/benchmarks/elkrb_benchmark.rb +0 -145
- data/benchmarks/fixtures/graphs.json +0 -10777
- data/benchmarks/generate_report.rb +0 -241
- data/benchmarks/generate_test_graphs.rb +0 -154
- data/benchmarks/results/elkrb_results.json +0 -280
- data/benchmarks/results/elkrb_summary.json +0 -285
- data/elkrb.gemspec +0 -39
- data/examples/dot_export_demo.rb +0 -133
- data/examples/hierarchical_graph.rb +0 -19
- data/examples/layout_constraints_demo.rb +0 -272
- data/examples/port_constraints_demo.rb +0 -291
- data/examples/self_loop_demo.rb +0 -391
- data/examples/simple_graph.rb +0 -50
- data/examples/spline_routing_demo.rb +0 -235
- data/lib/elkrb/graph/layout_options.rb +0 -247
- data/sig/elkrb/constraints.rbs +0 -114
- data/sig/elkrb/geometry.rbs +0 -61
- data/sig/elkrb/graph.rbs +0 -112
- data/sig/elkrb/layout.rbs +0 -107
- data/sig/elkrb/options.rbs +0 -81
- data/sig/elkrb.rbs +0 -32
data/lib/elkrb.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "logger"
|
|
4
|
+
|
|
3
5
|
require_relative "elkrb/version"
|
|
4
6
|
require_relative "elkrb/errors"
|
|
5
7
|
|
|
@@ -10,7 +12,9 @@ require_relative "elkrb/geometry/rectangle"
|
|
|
10
12
|
require_relative "elkrb/geometry/vector"
|
|
11
13
|
|
|
12
14
|
# Graph models
|
|
13
|
-
require_relative "elkrb/graph/
|
|
15
|
+
require_relative "elkrb/graph/deep_stringify_keys"
|
|
16
|
+
require_relative "elkrb/graph/normalize_option_keys"
|
|
17
|
+
require_relative "elkrb/graph/read_only_mapping"
|
|
14
18
|
require_relative "elkrb/graph/label"
|
|
15
19
|
require_relative "elkrb/graph/port"
|
|
16
20
|
require_relative "elkrb/graph/node_constraints"
|
|
@@ -20,11 +24,17 @@ require_relative "elkrb/graph/graph"
|
|
|
20
24
|
|
|
21
25
|
# Serializers
|
|
22
26
|
require_relative "elkrb/serializers/dot_serializer"
|
|
27
|
+
require_relative "elkrb/serializers/elkt_serializer"
|
|
28
|
+
|
|
29
|
+
# Parsers
|
|
30
|
+
require_relative "elkrb/parsers/elkt_parser"
|
|
23
31
|
|
|
24
32
|
# Options parsers
|
|
25
33
|
require_relative "elkrb/options/elk_padding"
|
|
26
34
|
require_relative "elkrb/options/k_vector"
|
|
27
35
|
require_relative "elkrb/options/k_vector_chain"
|
|
36
|
+
require_relative "elkrb/options/registry"
|
|
37
|
+
require_relative "elkrb/options/resolver"
|
|
28
38
|
|
|
29
39
|
# Layout constraints
|
|
30
40
|
require_relative "elkrb/layout/constraints/base_constraint"
|
|
@@ -57,7 +67,7 @@ require_relative "elkrb/layout/algorithms/vertiflex"
|
|
|
57
67
|
# ElkRb - Pure Ruby implementation of the Eclipse Layout Kernel
|
|
58
68
|
#
|
|
59
69
|
# ElkRb provides automatic graph layout algorithms for node-link diagrams.
|
|
60
|
-
# It implements
|
|
70
|
+
# It implements the layout algorithms from the Eclipse Layout Kernel (ELK),
|
|
61
71
|
# supporting hierarchical graphs, port-based connections, and automatic
|
|
62
72
|
# label placement.
|
|
63
73
|
#
|
|
@@ -77,7 +87,7 @@ require_relative "elkrb/layout/algorithms/vertiflex"
|
|
|
77
87
|
# }
|
|
78
88
|
#
|
|
79
89
|
# result = Elkrb.layout(graph)
|
|
80
|
-
# puts result
|
|
90
|
+
# puts result.children[0].x # Node positions computed
|
|
81
91
|
#
|
|
82
92
|
# @example Using model classes
|
|
83
93
|
# graph = Elkrb::Graph::Graph.new(id: "root")
|
|
@@ -94,6 +104,19 @@ require_relative "elkrb/layout/algorithms/vertiflex"
|
|
|
94
104
|
# @see https://www.eclipse.org/elk/ Eclipse Layout Kernel
|
|
95
105
|
# @see https://github.com/kieler/elkjs elkjs - JavaScript port
|
|
96
106
|
module Elkrb
|
|
107
|
+
# The logger every elkrb warning goes through. Defaults to WARN on $stderr;
|
|
108
|
+
# assign your own to redirect or silence it.
|
|
109
|
+
#
|
|
110
|
+
# @return [Logger]
|
|
111
|
+
def self.logger
|
|
112
|
+
@logger ||= Logger.new($stderr, level: Logger::WARN)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# @param logger [Logger] replaces the default logger
|
|
116
|
+
def self.logger=(logger)
|
|
117
|
+
@logger = logger
|
|
118
|
+
end
|
|
119
|
+
|
|
97
120
|
# Register basic layout algorithms
|
|
98
121
|
Layout::AlgorithmRegistry.register(
|
|
99
122
|
"random",
|
|
@@ -237,7 +260,9 @@ module Elkrb
|
|
|
237
260
|
Layout::Algorithms::Libavoid,
|
|
238
261
|
{
|
|
239
262
|
name: "Libavoid",
|
|
240
|
-
description: "Orthogonal connector routing with obstacle
|
|
263
|
+
description: "Orthogonal connector routing with bounded A* obstacle " \
|
|
264
|
+
"avoidance (falls back to a direct connector if no path " \
|
|
265
|
+
"is found within the search limit)",
|
|
241
266
|
category: "routing",
|
|
242
267
|
supports_hierarchy: false,
|
|
243
268
|
},
|
|
@@ -248,8 +273,8 @@ module Elkrb
|
|
|
248
273
|
Layout::Algorithms::VertiFlex,
|
|
249
274
|
{
|
|
250
275
|
name: "VertiFlex",
|
|
251
|
-
description: "
|
|
252
|
-
category: "
|
|
276
|
+
description: "Column-grid arrangement that ignores edges",
|
|
277
|
+
category: "packing",
|
|
253
278
|
supports_hierarchy: false,
|
|
254
279
|
experimental: true,
|
|
255
280
|
},
|
|
@@ -261,11 +286,27 @@ module Elkrb
|
|
|
261
286
|
# a Graph model object and applies the chosen layout algorithm to compute
|
|
262
287
|
# node positions and edge routes.
|
|
263
288
|
#
|
|
289
|
+
# A Graph argument is mutated in place and returned, so the caller's object
|
|
290
|
+
# carries the computed positions. A Hash argument is converted to a fresh
|
|
291
|
+
# Graph and left untouched.
|
|
292
|
+
#
|
|
264
293
|
# @param graph [Hash, Graph::Graph] The graph to layout
|
|
294
|
+
# Options are read in one order: the graph's own layoutOptions, then its
|
|
295
|
+
# properties, then these call-level options, then the registry default. A
|
|
296
|
+
# graph that pins an algorithm keeps it, whatever :algorithm says here.
|
|
297
|
+
#
|
|
265
298
|
# @param options [Hash] Layout options including:
|
|
266
|
-
# - :algorithm (String) - Algorithm name
|
|
299
|
+
# - :algorithm (String) - Algorithm name, used when the graph pins none
|
|
300
|
+
# (default: "layered")
|
|
301
|
+
# - :strict (Boolean) - Raise instead of warn when the graph carries an
|
|
302
|
+
# option elkrb does not know or does not fully honour, or the call
|
|
303
|
+
# passes a registered option that is not fully honoured (default: false)
|
|
267
304
|
# - Algorithm-specific options (e.g., "elk.spacing.nodeNode")
|
|
268
305
|
# @return [Graph::Graph] The input graph with computed positions
|
|
306
|
+
# @raise [ArgumentError] If graph is neither a Hash nor a Graph::Graph
|
|
307
|
+
# @raise [Elkrb::AlgorithmNotFoundError] If the algorithm is not registered
|
|
308
|
+
# @raise [Elkrb::ValidationError] If an option value has the wrong type
|
|
309
|
+
# @raise [Elkrb::Error] In strict mode, for an unknown or unhonoured option
|
|
269
310
|
#
|
|
270
311
|
# @example With hash input
|
|
271
312
|
# result = Elkrb.layout({
|
|
@@ -357,7 +398,7 @@ module Elkrb
|
|
|
357
398
|
|
|
358
399
|
# Returns metadata for all available layout algorithms.
|
|
359
400
|
#
|
|
360
|
-
# This includes the
|
|
401
|
+
# This includes the built-in algorithms plus any custom algorithms
|
|
361
402
|
# registered via {register_algorithm}.
|
|
362
403
|
#
|
|
363
404
|
# @return [Array<Hash>] Array of algorithm metadata with keys:
|
|
@@ -366,6 +407,7 @@ module Elkrb
|
|
|
366
407
|
# - :description (String) - Brief description
|
|
367
408
|
# - :category (String) - Algorithm category
|
|
368
409
|
# - :supports_hierarchy (Boolean) - Whether it supports nested graphs
|
|
410
|
+
# - :supported_options (Array<String>) - Canonical option ids scoped to this algorithm
|
|
369
411
|
#
|
|
370
412
|
# @example List all algorithms
|
|
371
413
|
# Elkrb.known_layout_algorithms.each do |alg|
|
|
@@ -376,29 +418,22 @@ module Elkrb
|
|
|
376
418
|
# force_algorithms = Elkrb.known_layout_algorithms
|
|
377
419
|
# .select { |alg| alg[:category] == "force" }
|
|
378
420
|
def self.known_layout_algorithms
|
|
379
|
-
Layout::AlgorithmRegistry.
|
|
380
|
-
{
|
|
381
|
-
id: name,
|
|
382
|
-
name: data[:metadata][:name] || name.capitalize,
|
|
383
|
-
description: data[:metadata][:description] || "",
|
|
384
|
-
category: data[:metadata][:category] || "general",
|
|
385
|
-
supports_hierarchy: data[:metadata][:supports_hierarchy] || false,
|
|
386
|
-
}
|
|
387
|
-
end
|
|
421
|
+
Layout::AlgorithmRegistry.all_algorithm_info
|
|
388
422
|
end
|
|
389
423
|
|
|
390
|
-
# Returns metadata for all supported layout options
|
|
424
|
+
# Returns metadata for all supported layout options, sourced from
|
|
425
|
+
# Elkrb::Options::Registry (the single source of truth every algorithm
|
|
426
|
+
# and the CLI eventually read from).
|
|
391
427
|
#
|
|
392
|
-
#
|
|
393
|
-
# direction, and padding, as well as algorithm-specific options.
|
|
394
|
-
#
|
|
395
|
-
# @return [Hash{String => Hash}] Hash mapping option names to metadata.
|
|
428
|
+
# @return [Hash{String => Hash}] Hash mapping canonical option ids to metadata.
|
|
396
429
|
# Each metadata hash contains:
|
|
397
|
-
# - :type (
|
|
430
|
+
# - :type (Symbol) - Option value type (:string, :float, :integer,
|
|
431
|
+
# :boolean, :enum, :padding, :kvector, :kvector_chain)
|
|
398
432
|
# - :description (String) - Brief description
|
|
399
433
|
# - :default - Default value
|
|
400
434
|
# - :values (Array, nil) - Allowed values for enum types
|
|
401
435
|
# - :parser (String, nil) - Parser class for complex types
|
|
436
|
+
# - :status (Symbol) - :honoured, :partial, :accepted, or :unsupported
|
|
402
437
|
#
|
|
403
438
|
# @example Query options
|
|
404
439
|
# options = Elkrb.known_layout_options
|
|
@@ -407,45 +442,9 @@ module Elkrb
|
|
|
407
442
|
#
|
|
408
443
|
# @example Get allowed values
|
|
409
444
|
# directions = Elkrb.known_layout_options["elk.direction"][:values]
|
|
410
|
-
# # => ["
|
|
445
|
+
# # => ["UNDEFINED", "RIGHT", "LEFT", "DOWN", "UP"]
|
|
411
446
|
def self.known_layout_options
|
|
412
|
-
|
|
413
|
-
"algorithm" => {
|
|
414
|
-
type: "string",
|
|
415
|
-
description: "The layout algorithm to use",
|
|
416
|
-
default: "layered",
|
|
417
|
-
values: Layout::AlgorithmRegistry.all.keys,
|
|
418
|
-
},
|
|
419
|
-
"elk.direction" => {
|
|
420
|
-
type: "string",
|
|
421
|
-
description: "Overall direction of layout",
|
|
422
|
-
default: "RIGHT",
|
|
423
|
-
values: %w[UP DOWN LEFT RIGHT],
|
|
424
|
-
},
|
|
425
|
-
"elk.spacing.nodeNode" => {
|
|
426
|
-
type: "float",
|
|
427
|
-
description: "Spacing between nodes",
|
|
428
|
-
default: 20.0,
|
|
429
|
-
},
|
|
430
|
-
"elk.padding" => {
|
|
431
|
-
type: "ElkPadding",
|
|
432
|
-
description: "Padding around the graph",
|
|
433
|
-
default: "[left=12, top=12, right=12, bottom=12]",
|
|
434
|
-
parser: "Elkrb::Options::ElkPadding",
|
|
435
|
-
},
|
|
436
|
-
"position" => {
|
|
437
|
-
type: "KVector",
|
|
438
|
-
description: "Fixed position for nodes (when using fixed algorithm)",
|
|
439
|
-
default: nil,
|
|
440
|
-
parser: "Elkrb::Options::KVector",
|
|
441
|
-
},
|
|
442
|
-
"bendPoints" => {
|
|
443
|
-
type: "KVectorChain",
|
|
444
|
-
description: "Bend points for edges",
|
|
445
|
-
default: nil,
|
|
446
|
-
parser: "Elkrb::Options::KVectorChain",
|
|
447
|
-
},
|
|
448
|
-
}
|
|
447
|
+
Options::Registry.render_known_options(algorithm_values: Layout::AlgorithmRegistry.available_algorithms)
|
|
449
448
|
end
|
|
450
449
|
|
|
451
450
|
# Returns metadata for layout option categories.
|
metadata
CHANGED
|
@@ -1,43 +1,35 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: elkrb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-10-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: lutaml-model
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0.
|
|
20
|
-
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - "~>"
|
|
19
|
+
version: '0.8'
|
|
20
|
+
- - "<"
|
|
25
21
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0.
|
|
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'
|
|
22
|
+
version: '0.9'
|
|
34
23
|
type: :runtime
|
|
35
24
|
prerelease: false
|
|
36
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
26
|
requirements:
|
|
38
|
-
- - "
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '0.8'
|
|
30
|
+
- - "<"
|
|
39
31
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
32
|
+
version: '0.9'
|
|
41
33
|
- !ruby/object:Gem::Dependency
|
|
42
34
|
name: thor
|
|
43
35
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -54,7 +46,7 @@ dependencies:
|
|
|
54
46
|
version: '1.4'
|
|
55
47
|
description: |
|
|
56
48
|
Pure Ruby implementation of the Eclipse Layout Kernel (ELK) providing automatic
|
|
57
|
-
layout of node-link diagrams. Supports
|
|
49
|
+
layout of node-link diagrams. Supports 15 registered layout algorithms.
|
|
58
50
|
email:
|
|
59
51
|
- open.source@ribose.com
|
|
60
52
|
executables:
|
|
@@ -62,48 +54,38 @@ executables:
|
|
|
62
54
|
extensions: []
|
|
63
55
|
extra_rdoc_files: []
|
|
64
56
|
files:
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
- Gemfile
|
|
57
|
+
- CHANGELOG.adoc
|
|
58
|
+
- LICENSE
|
|
68
59
|
- 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
60
|
- exe/elkrb
|
|
87
61
|
- lib/elkrb.rb
|
|
62
|
+
- lib/elkrb/atomic_destination.rb
|
|
63
|
+
- lib/elkrb/best_effort_write.rb
|
|
88
64
|
- lib/elkrb/cli.rb
|
|
65
|
+
- lib/elkrb/cli/layout_flag_options.rb
|
|
66
|
+
- lib/elkrb/command_resolver.rb
|
|
89
67
|
- lib/elkrb/commands/batch_command.rb
|
|
90
68
|
- lib/elkrb/commands/convert_command.rb
|
|
91
69
|
- lib/elkrb/commands/diagram_command.rb
|
|
70
|
+
- lib/elkrb/commands/options_command.rb
|
|
92
71
|
- lib/elkrb/commands/render_command.rb
|
|
93
72
|
- lib/elkrb/commands/validate_command.rb
|
|
94
73
|
- lib/elkrb/errors.rb
|
|
74
|
+
- lib/elkrb/format_sniffer.rb
|
|
95
75
|
- lib/elkrb/geometry/bezier.rb
|
|
96
76
|
- lib/elkrb/geometry/dimension.rb
|
|
97
77
|
- lib/elkrb/geometry/point.rb
|
|
98
78
|
- lib/elkrb/geometry/rectangle.rb
|
|
99
79
|
- lib/elkrb/geometry/vector.rb
|
|
80
|
+
- lib/elkrb/graph/deep_stringify_keys.rb
|
|
100
81
|
- lib/elkrb/graph/edge.rb
|
|
101
82
|
- lib/elkrb/graph/graph.rb
|
|
102
83
|
- lib/elkrb/graph/label.rb
|
|
103
|
-
- lib/elkrb/graph/layout_options.rb
|
|
104
84
|
- lib/elkrb/graph/node.rb
|
|
105
85
|
- lib/elkrb/graph/node_constraints.rb
|
|
86
|
+
- lib/elkrb/graph/normalize_option_keys.rb
|
|
106
87
|
- lib/elkrb/graph/port.rb
|
|
88
|
+
- lib/elkrb/graph/read_only_mapping.rb
|
|
107
89
|
- lib/elkrb/graphviz_wrapper.rb
|
|
108
90
|
- lib/elkrb/layout/algorithm_registry.rb
|
|
109
91
|
- lib/elkrb/layout/algorithms/base_algorithm.rb
|
|
@@ -112,9 +94,26 @@ files:
|
|
|
112
94
|
- lib/elkrb/layout/algorithms/fixed.rb
|
|
113
95
|
- lib/elkrb/layout/algorithms/force.rb
|
|
114
96
|
- lib/elkrb/layout/algorithms/layered.rb
|
|
97
|
+
- lib/elkrb/layout/algorithms/layered/bk/aligner.rb
|
|
98
|
+
- lib/elkrb/layout/algorithms/layered/bk/compactor.rb
|
|
99
|
+
- lib/elkrb/layout/algorithms/layered/bk/view.rb
|
|
100
|
+
- lib/elkrb/layout/algorithms/layered/bk_node_placer.rb
|
|
101
|
+
- lib/elkrb/layout/algorithms/layered/components.rb
|
|
102
|
+
- lib/elkrb/layout/algorithms/layered/crossing_minimizer.rb
|
|
115
103
|
- lib/elkrb/layout/algorithms/layered/cycle_breaker.rb
|
|
104
|
+
- lib/elkrb/layout/algorithms/layered/discovery_order.rb
|
|
105
|
+
- lib/elkrb/layout/algorithms/layered/dummy_slot.rb
|
|
116
106
|
- lib/elkrb/layout/algorithms/layered/layer_assigner.rb
|
|
107
|
+
- lib/elkrb/layout/algorithms/layered/layer_constraints.rb
|
|
108
|
+
- lib/elkrb/layout/algorithms/layered/layer_sweep.rb
|
|
117
109
|
- lib/elkrb/layout/algorithms/layered/node_placer.rb
|
|
110
|
+
- lib/elkrb/layout/algorithms/layered/orthogonal/gap_solver.rb
|
|
111
|
+
- lib/elkrb/layout/algorithms/layered/orthogonal/hyper_edge_segment.rb
|
|
112
|
+
- lib/elkrb/layout/algorithms/layered/orthogonal/junction_points.rb
|
|
113
|
+
- lib/elkrb/layout/algorithms/layered/orthogonal/segment_order.rb
|
|
114
|
+
- lib/elkrb/layout/algorithms/layered/orthogonal_router.rb
|
|
115
|
+
- lib/elkrb/layout/algorithms/layered/port_order.rb
|
|
116
|
+
- lib/elkrb/layout/algorithms/layered/port_spread.rb
|
|
118
117
|
- lib/elkrb/layout/algorithms/libavoid.rb
|
|
119
118
|
- lib/elkrb/layout/algorithms/mrtree.rb
|
|
120
119
|
- lib/elkrb/layout/algorithms/radial.rb
|
|
@@ -133,29 +132,52 @@ files:
|
|
|
133
132
|
- lib/elkrb/layout/constraints/relative_position_constraint.rb
|
|
134
133
|
- lib/elkrb/layout/edge_router.rb
|
|
135
134
|
- lib/elkrb/layout/hierarchical_processor.rb
|
|
135
|
+
- lib/elkrb/layout/java_random.rb
|
|
136
136
|
- lib/elkrb/layout/label_placer.rb
|
|
137
137
|
- lib/elkrb/layout/layout_engine.rb
|
|
138
|
+
- lib/elkrb/layout/node_index.rb
|
|
139
|
+
- lib/elkrb/layout/polyomino/component_compactor.rb
|
|
140
|
+
- lib/elkrb/layout/polyomino/footprint.rb
|
|
141
|
+
- lib/elkrb/layout/polyomino/grid.rb
|
|
142
|
+
- lib/elkrb/layout/polyomino/packer.rb
|
|
143
|
+
- lib/elkrb/layout/polyomino/piece.rb
|
|
138
144
|
- lib/elkrb/layout/port_constraint_processor.rb
|
|
145
|
+
- lib/elkrb/layout/spore/body.rb
|
|
146
|
+
- lib/elkrb/layout/spore/depth_first_compaction.rb
|
|
147
|
+
- lib/elkrb/layout/spore/edge_cost.rb
|
|
148
|
+
- lib/elkrb/layout/spore/gap.rb
|
|
149
|
+
- lib/elkrb/layout/spore/geometry.rb
|
|
150
|
+
- lib/elkrb/layout/spore/overlap_sweep.rb
|
|
151
|
+
- lib/elkrb/layout/spore/placement.rb
|
|
152
|
+
- lib/elkrb/layout/spore/rays.rb
|
|
153
|
+
- lib/elkrb/layout/spore/spanning_tree.rb
|
|
154
|
+
- lib/elkrb/layout/spore/triangulation.rb
|
|
155
|
+
- lib/elkrb/layout_flags.rb
|
|
156
|
+
- lib/elkrb/options/decimal.rb
|
|
157
|
+
- lib/elkrb/options/element_options.rb
|
|
139
158
|
- lib/elkrb/options/elk_padding.rb
|
|
140
159
|
- lib/elkrb/options/k_vector.rb
|
|
141
160
|
- lib/elkrb/options/k_vector_chain.rb
|
|
161
|
+
- lib/elkrb/options/option_map.rb
|
|
162
|
+
- lib/elkrb/options/registry.rb
|
|
163
|
+
- lib/elkrb/options/resolver.rb
|
|
164
|
+
- lib/elkrb/options/spellings.rb
|
|
165
|
+
- lib/elkrb/options/unhonoured_report.rb
|
|
166
|
+
- lib/elkrb/parsers/elkt/lexer.rb
|
|
167
|
+
- lib/elkrb/parsers/elkt/parser.rb
|
|
168
|
+
- lib/elkrb/parsers/elkt/resolver.rb
|
|
169
|
+
- lib/elkrb/parsers/elkt/token.rb
|
|
142
170
|
- lib/elkrb/parsers/elkt_parser.rb
|
|
143
171
|
- lib/elkrb/serializers/dot_serializer.rb
|
|
144
172
|
- lib/elkrb/serializers/elkt_serializer.rb
|
|
145
173
|
- 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
174
|
homepage: https://github.com/claricle/elkrb
|
|
153
175
|
licenses:
|
|
154
176
|
- BSD-2-Clause
|
|
155
177
|
metadata:
|
|
156
178
|
homepage_uri: https://github.com/claricle/elkrb
|
|
157
179
|
source_code_uri: https://github.com/claricle/elkrb
|
|
158
|
-
changelog_uri: https://github.com/claricle/elkrb
|
|
180
|
+
changelog_uri: https://github.com/claricle/elkrb/blob/v2/CHANGELOG.adoc
|
|
159
181
|
rubygems_mfa_required: 'true'
|
|
160
182
|
post_install_message:
|
|
161
183
|
rdoc_options: []
|
|
@@ -165,7 +187,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
165
187
|
requirements:
|
|
166
188
|
- - ">="
|
|
167
189
|
- !ruby/object:Gem::Version
|
|
168
|
-
version: 3.
|
|
190
|
+
version: 3.3.0
|
|
169
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
192
|
requirements:
|
|
171
193
|
- - ">="
|
data/.rspec
DELETED
data/.rubocop.yml
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Auto-generated by Cimas: Do not edit it manually!
|
|
2
|
-
# See https://github.com/metanorma/cimas
|
|
3
|
-
inherit_from:
|
|
4
|
-
- https://raw.githubusercontent.com/riboseinc/oss-guides/main/ci/rubocop.yml
|
|
5
|
-
- .rubocop_todo.yml
|
|
6
|
-
|
|
7
|
-
# local repo-specific modifications
|
|
8
|
-
# ...
|
|
9
|
-
|
|
10
|
-
AllCops:
|
|
11
|
-
NewCops: enable
|
data/Gemfile
DELETED
data/Rakefile
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "bundler/gem_tasks"
|
|
4
|
-
require "rspec/core/rake_task"
|
|
5
|
-
|
|
6
|
-
RSpec::Core::RakeTask.new(:spec)
|
|
7
|
-
|
|
8
|
-
task default: :spec
|
|
9
|
-
|
|
10
|
-
namespace :benchmark do
|
|
11
|
-
desc "Generate test graphs for benchmarking"
|
|
12
|
-
task :generate_graphs do
|
|
13
|
-
ruby "benchmarks/generate_test_graphs.rb"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
desc "Run ElkRb benchmarks"
|
|
17
|
-
task elkrb: :generate_graphs do
|
|
18
|
-
ruby "benchmarks/elkrb_benchmark.rb"
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
desc "Run elkjs benchmarks (requires Node.js and elkjs)"
|
|
22
|
-
task elkjs: :generate_graphs do
|
|
23
|
-
sh "node benchmarks/elkjs_benchmark.js"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
desc "Generate performance report"
|
|
27
|
-
task :report do
|
|
28
|
-
ruby "benchmarks/generate_report.rb"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
desc "Run all benchmarks and generate report"
|
|
32
|
-
task all: %i[elkrb report] do
|
|
33
|
-
puts "\nAll benchmarks completed!"
|
|
34
|
-
puts "Note: Run 'rake benchmark:elkjs' separately if elkjs is installed"
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
namespace :validate do
|
|
39
|
-
desc "Import test cases from elkjs"
|
|
40
|
-
task :import_elkjs do
|
|
41
|
-
ruby "spec/cross_validation/elkjs_test_importer.rb"
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
desc "Import test cases from Java ELK"
|
|
45
|
-
task :import_java_elk do
|
|
46
|
-
ruby "spec/cross_validation/java_elk_test_importer.rb"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
desc "Import all test cases from elkjs and Java ELK"
|
|
50
|
-
task import_all: %i[import_elkjs import_java_elk]
|
|
51
|
-
|
|
52
|
-
desc "Run cross-validation tests"
|
|
53
|
-
task :run do
|
|
54
|
-
ruby "spec/cross_validation/validation_runner.rb"
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
desc "Import and run cross-validation (full pipeline)"
|
|
58
|
-
task all: %i[import_all run]
|
|
59
|
-
|
|
60
|
-
desc "Generate validation report (AsciiDoc)"
|
|
61
|
-
task :report do
|
|
62
|
-
ruby "spec/cross_validation/generate_validation_report.rb"
|
|
63
|
-
end
|
|
64
|
-
end
|