seafoam 0.12 → 0.13

Sign up to get free protection for your applications and to get access to all the features.
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