seafoam 0.12 → 0.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5365ea61783b2be678609c214262d4df073fa4e66df60e9370b6fd33dd73825a
4
- data.tar.gz: 322fe5170082c57d51120c3fa43910ca2e79a7839737167955ad1f330084af83
3
+ metadata.gz: 3bd98e20ee30268f65b81cdee7e286133d09d3daa1a5906500e46391fb8a77e8
4
+ data.tar.gz: 19e94f385a5e0b056b0431f9385b0ca75796b368e5b767a537406c4f87f83329
5
5
  SHA512:
6
- metadata.gz: 33cdf9e0f73e9a41d11ee2c19f60b015f8fe5168ddd92eaee1a254c13c6296e8696514858e0fc0c77c583657c3d01b2292919077f9131768198801bd9610dbc9
7
- data.tar.gz: 2354dd4f1c5d87c83d265577a0e64b5130cd9dc7de46e6222629b985bdac038b6977f3fe10ffc2624e45b2cc56dbd67ea243734a528a17eab780a80c00996621
6
+ metadata.gz: 91d9279f98008fd449f4be3ecf4d45fdf2ddac3e3eb1f6eae0b0451a2dbb58d3a52b95fa12be3a805aa208ccb56033fe32b093f653331907cbc3d51b3d033f56
7
+ data.tar.gz: f2bb55b41d82f3176dcfc1bbfc46bdd01711ac8a4e61995338e5e127a196f43b40eff3ef81b2e16448dd86f4535a215d83accf7643f5f92787ff9b1d74c964b9
@@ -414,6 +414,28 @@ module Seafoam
414
414
  out_file = args.shift
415
415
  explicit_out_file = true
416
416
  raise ArgumentError, 'no file for --out' unless out_file
417
+
418
+ out_ext = File.extname(out_file).downcase
419
+ case out_ext
420
+ when '.pdf'
421
+ out_format = :pdf
422
+ when '.svg'
423
+ out_format = :svg
424
+ when '.png'
425
+ out_format = :png
426
+ when '.dot'
427
+ out_format = :dot
428
+ when '.mmd'
429
+ out_format = :mmd
430
+ when '.md'
431
+ out_format = :md
432
+ else
433
+ raise ArgumentError, "unknown render format #{out_ext}"
434
+ end
435
+ when '--md'
436
+ out_file = @out
437
+ out_format = :md
438
+ explicit_out_file = true
417
439
  when '--spotlight'
418
440
  spotlight_arg = args.shift
419
441
  raise ArgumentError, 'no list for --spotlight' unless spotlight_arg
@@ -445,20 +467,7 @@ module Seafoam
445
467
  end
446
468
  end
447
469
  out_file ||= 'graph.pdf'
448
- out_ext = File.extname(out_file).downcase
449
- case out_ext
450
- when '.pdf'
451
- out_format = :pdf
452
- when '.svg'
453
- out_format = :svg
454
- when '.png'
455
- out_format = :png
456
- when '.dot'
457
- out_format = :dot
458
- else
459
- raise ArgumentError, "unknown render format #{out_ext}"
460
- end
461
-
470
+ out_format ||= :pdf
462
471
  with_graph(file, graph_index) do |parser|
463
472
  parser.skip_graph_header
464
473
  graph = parser.read_graph
@@ -473,10 +482,29 @@ module Seafoam
473
482
  end
474
483
  spotlight.shade
475
484
  end
476
- if out_format == :dot
477
- File.open(out_file, 'w') do |stream|
478
- writer = GraphvizWriter.new(stream)
479
- writer.write_graph graph, false, draw_blocks
485
+ case out_format
486
+ when :dot, :mmd, :md
487
+ action = lambda do |stream|
488
+ case out_format
489
+ when :dot
490
+ writer = GraphvizWriter.new(stream)
491
+ writer.write_graph graph, false, draw_blocks
492
+ when :mmd
493
+ writer = MermaidWriter.new(stream)
494
+ writer.write_graph graph
495
+ when :md
496
+ writer = MarkdownWriter.new(stream)
497
+ writer.write_graph graph
498
+ else
499
+ raise
500
+ end
501
+ end
502
+ if out_file.is_a?(String)
503
+ File.open(out_file, 'w') do |stream|
504
+ action.call stream
505
+ end
506
+ else
507
+ action.call out_file
480
508
  end
481
509
  else
482
510
  begin
@@ -4,13 +4,12 @@ module Seafoam
4
4
  class GraphDescription
5
5
  ATTRIBUTES = %i[branches calls deopts linear loops]
6
6
 
7
- ATTRIBUTES.each { |attr| attr_accessor(attr) }
7
+ ATTRIBUTES.each { |attr| attr_accessor(attr) unless attr == :linear }
8
8
 
9
9
  def initialize
10
10
  @branches = false
11
11
  @calls = false
12
12
  @deopts = false
13
- @linear = false
14
13
  @loops = false
15
14
  end
16
15
 
@@ -0,0 +1,16 @@
1
+ module Seafoam
2
+ # A writer from graphs to Markdown format, with an embedded Mermaid graph.
3
+ class MarkdownWriter
4
+ def initialize(stream)
5
+ @stream = stream
6
+ end
7
+
8
+ # Write a graph.
9
+ def write_graph(graph)
10
+ @stream.puts '```mermaid'
11
+ mermaid = MermaidWriter.new(@stream)
12
+ mermaid.write_graph graph
13
+ @stream.puts '```'
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,40 @@
1
+ module Seafoam
2
+ # A writer from graphs to the Mermaid format.
3
+ class MermaidWriter
4
+ def initialize(stream)
5
+ @stream = stream
6
+ end
7
+
8
+ # Write a graph.
9
+ def write_graph(graph)
10
+ @stream.puts 'flowchart TD'
11
+ write_nodes graph
12
+ write_edges graph
13
+ end
14
+
15
+ private
16
+
17
+ # Write node declarations.
18
+ def write_nodes(graph)
19
+ graph.nodes.each_value do |node|
20
+ write_node node
21
+ end
22
+ end
23
+
24
+ def write_node(node)
25
+ @stream.puts " node#{node.id}[#{node.props[:label].inspect}]"
26
+ end
27
+
28
+ # Write edge declarations.
29
+
30
+ def write_edges(graph)
31
+ graph.edges.each do |edge|
32
+ write_edge edge
33
+ end
34
+ end
35
+
36
+ def write_edge(edge)
37
+ @stream.puts " node#{edge.from.id} --> node#{edge.to.id}"
38
+ end
39
+ end
40
+ end
@@ -1,5 +1,5 @@
1
1
  module Seafoam
2
2
  MAJOR_VERSION = 0
3
- MINOR_VERSION = 12
3
+ MINOR_VERSION = 13
4
4
  VERSION = "#{MAJOR_VERSION}.#{MINOR_VERSION}"
5
5
  end
data/lib/seafoam.rb CHANGED
@@ -14,5 +14,7 @@ require 'seafoam/spotlight'
14
14
  require 'seafoam/isabelle_writer'
15
15
  require 'seafoam/json_writer'
16
16
  require 'seafoam/graphviz_writer'
17
+ require 'seafoam/mermaid_writer'
18
+ require 'seafoam/markdown_writer'
17
19
  require 'seafoam/commands'
18
20
  require 'seafoam/formatters/formatters'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seafoam
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.12'
4
+ version: '0.13'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Seaton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-03 00:00:00.000000000 Z
11
+ date: 2022-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -80,6 +80,8 @@ files:
80
80
  - lib/seafoam/graphviz_writer.rb
81
81
  - lib/seafoam/isabelle_writer.rb
82
82
  - lib/seafoam/json_writer.rb
83
+ - lib/seafoam/markdown_writer.rb
84
+ - lib/seafoam/mermaid_writer.rb
83
85
  - lib/seafoam/passes.rb
84
86
  - lib/seafoam/passes/fallback.rb
85
87
  - lib/seafoam/passes/graal.rb