diagrammatron 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb946779bc401e70f853aa8757dd447bb64cf3d716cc757104028e31e414911e
4
- data.tar.gz: 89e71f9295a916d1d68a5b38339fbf467bd4b89ec3ac7d6a561a071a623570fd
3
+ metadata.gz: e75d5bdc504a1706dcfe0d3c120f4c49a4024076ebd42b5bcd5b151d127bd7f9
4
+ data.tar.gz: 9872615f7842209b32b9402cb77a0071194ea5fa4478d5a26521d2f5c20787da
5
5
  SHA512:
6
- metadata.gz: 4e30d0cf268f7da0b81d73bbbb6b526fb1f6e3f71b48186ec24a8ce93e28b0f60dcf87e671742a6257abc0527596dd01fa3419242cd48e8bcd0d4acc7f9860ea
7
- data.tar.gz: 292266d91c7b481a87ddf10bb5cc2abf17d4be45698a8166b6ce79099121094dc437a4c320a21ef08af574c56c2ef7da0d8af9c8be9496790e8fb6364290bd82
6
+ metadata.gz: d820b1d922dbd336ed795eec477c34ec43508edd731142be9c5144dd9d00efdad1745d47fc586d2af6c1a65cd743024de6da440f413868bcd680e5384e839cac
7
+ data.tar.gz: 709c2a401cee6f107faba0f86cc18025016b0b9c99d35f8f48959bc63721bf7b67d7fe45374df3a971eff73fdfd9266cda3c20e3b7ed672a44e7f590c3a87e1e
@@ -4,7 +4,7 @@
4
4
  # Copyright © 2021 Ismo Kärkkäinen
5
5
  # Licensed under Universal Permissive License. See LICENSE.txt.
6
6
 
7
- require '../lib/common.rb'
7
+ require_relative '../lib/common.rb'
8
8
  require 'optparse'
9
9
  require 'yaml'
10
10
  require 'set'
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # Copyright © 2021 Ismo Kärkkäinen
5
+ # Licensed under Universal Permissive License. See LICENSE.txt.
6
+
7
+ require_relative '../lib/common.rb'
8
+ require 'optparse'
9
+ require 'pathname'
10
+
11
+
12
+ def template(name = nil)
13
+ n = File.expand_path(File.join(File.dirname(__FILE__), '..', 'template'))
14
+ return n if name.nil?
15
+ File.join(n, name)
16
+ end
17
+
18
+ def main
19
+ input = nil
20
+ output = nil
21
+ parser = OptionParser.new do |opts|
22
+ opts.summary_indent = ' '
23
+ opts.summary_width = 20
24
+ opts.banner = 'Usage: diagrammatron-get [options] name'
25
+ opts.separator ''
26
+ opts.separator 'Options:'
27
+ opts.on('-o', '--output FILE', 'Output file name. Write to stdout if not given.') do |filename|
28
+ output = filename
29
+ end
30
+ opts.on('-h', '--help', 'Print this help and exit.') do
31
+ $stdout.puts %(#{opts}
32
+ This is used to easily access template files included in the gem without need
33
+ to clone the original repository.
34
+
35
+ Without arguments, lists all templates, template root, and content files
36
+ included in the gem.
37
+
38
+ Given a name of a included file, saves it to --output.
39
+ )
40
+ exit 0
41
+ end
42
+ end
43
+ parser.parse! ARGV
44
+
45
+ if ARGV.size.zero?
46
+ # List all files in templates directory.
47
+ Dir.entries(template).sort.each do |name|
48
+ next if name.start_with? '.'
49
+ $stdout.puts name
50
+ end
51
+ elsif ARGV.size > 1
52
+ return aargh('You can give only one content-file name.', 1)
53
+ end
54
+ # Read the file and save it.
55
+ begin
56
+ src = File.read(template(ARGV.first))
57
+ rescue Errno::ENOENT
58
+ return aargh("Could not load #{ARGV.first}", 2)
59
+ rescue StandardError => e
60
+ return aargh("#{e}\nFailed to read #{ARGV.first}", 3)
61
+ end
62
+ begin
63
+ if output.nil?
64
+ $stdout.puts src
65
+ else
66
+ fp = Pathname.new output
67
+ fp.open('w') do |f|
68
+ f.puts src
69
+ end
70
+ end
71
+ rescue StandardError => e
72
+ return aargh([ e, "Failed to write output: #{output || 'stdout'}" ], 4)
73
+ end
74
+ 0
75
+ end
76
+
77
+ exit(main) if (defined? $unit_test).nil?
@@ -4,7 +4,7 @@
4
4
  # Copyright © 2021 Ismo Kärkkäinen
5
5
  # Licensed under Universal Permissive License. See LICENSE.txt.
6
6
 
7
- require '../lib/common.rb'
7
+ require_relative '../lib/common.rb'
8
8
  require 'optparse'
9
9
  require 'yaml'
10
10
  require 'set'
@@ -4,7 +4,7 @@
4
4
  # Copyright © 2021 Ismo Kärkkäinen
5
5
  # Licensed under Universal Permissive License. See LICENSE.txt.
6
6
 
7
- require '../lib/common.rb'
7
+ require_relative '../lib/common.rb'
8
8
  require 'optparse'
9
9
  require 'yaml'
10
10
  require 'set'
@@ -4,7 +4,7 @@
4
4
  # Copyright © 2021 Ismo Kärkkäinen
5
5
  # Licensed under Universal Permissive License. See LICENSE.txt.
6
6
 
7
- require '../lib/common.rb'
7
+ require_relative '../lib/common.rb'
8
8
  require 'optparse'
9
9
  require 'yaml'
10
10
  require 'set'
@@ -4,7 +4,7 @@
4
4
  # Copyright © 2021 Ismo Kärkkäinen
5
5
  # Licensed under Universal Permissive License. See LICENSE.txt.
6
6
 
7
- require '../lib/common.rb'
7
+ require_relative '../lib/common.rb'
8
8
  require 'optparse'
9
9
  require 'yaml'
10
10
  require 'erb'
@@ -4,7 +4,7 @@
4
4
  # Copyright © 2021 Ismo Kärkkäinen
5
5
  # Licensed under Universal Permissive License. See LICENSE.txt.
6
6
 
7
- require '../lib/common.rb'
7
+ require_relative '../lib/common.rb'
8
8
  require 'optparse'
9
9
  require 'yaml'
10
10
  require 'set'
@@ -4,7 +4,7 @@
4
4
  # Copyright © 2021 Ismo Kärkkäinen
5
5
  # Licensed under Universal Permissive License. See LICENSE.txt.
6
6
 
7
- require '../lib/common.rb'
7
+ require_relative '../lib/common.rb'
8
8
  require 'optparse'
9
9
  require 'yaml'
10
10
  require 'json'
@@ -0,0 +1,21 @@
1
+ ---
2
+ defaults:
3
+ edge_gap: 20
4
+ width_margin: 10
5
+ height_margin: 10
6
+ font:
7
+ font_size: 16
8
+ stroke_width: 2
9
+ width_key: w
10
+ height_key: h
11
+ size: default
12
+ sizes:
13
+ default: |
14
+ $render.default_size(
15
+ $render.node.fetch('width_scale', $render.defaults.font.width),
16
+ $render.node.fetch('height_scale', $render.defaults.font.size),
17
+ $render.node.fetch('line_spacing', $render.defaults.font.line_spacing),
18
+ $render.node.fetch('width_margin', $render.defaults.width_margin),
19
+ $render.node.fetch('height_margin', $render.defaults.height_margin),
20
+ $render.node.fetch('edge_gap', $render.defaults.edge_gap))
21
+ base64template: PD94bWwgdmVyc2lvbj0iMS4wIj8+CjwlPQp3LCBoaCA9ICRyZW5kZXIuZGltZW5zaW9ucwpobSA9ICRyZW5kZXIuZGVmYXVsdHMuaGVpZ2h0X21hcmdpbgpoaCArPSBobQptYSA9ICRyZW5kZXIuZGVmYXVsdHMuZm9udC5tYXhfYXNjZW5kCmZzID0gJHJlbmRlci5kZWZhdWx0cy5mb250LnNpemUKbGggPSBmcyArICRyZW5kZXIuZGVmYXVsdHMuZm9udC5saW5lX3NwYWNpbmcKd20gPSAkcmVuZGVyLmRlZmF1bHRzLndpZHRoX21hcmdpbgpzdyA9ICRyZW5kZXIuZ2V0X2RlZmF1bHQoJ3N0cm9rZV93aWR0aCcsIDUpCmxpbmVzdHlsZSA9ICUoZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IiN7c3d9IikKdGV4dHN0eWxlID0gJShmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iI3tmc30iIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIwIiB4bWw6c3BhY2U9InByZXNlcnZlIikKbGlua3N0eWxlID0gJShmaWxsPSIjMjAyMGZmIiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iI3tmc30iIHN0cm9rZT0iIzIwMjBmZiIgc3Ryb2tlLXdpZHRoPSIwIiB4bWw6c3BhY2U9InByZXNlcnZlIikKCm91dCA9IFsKICAlKDxzdmcgd2lkdGg9IiN7dyArICRyZW5kZXIuZGVmYXVsdHMud2lkdGhfbWFyZ2lufSIgaGVpZ2h0PSIje2hofSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIj4pCl0KJHJlbmRlci5kb2MuZmV0Y2goJ25vZGVzJywgW10pLmVhY2ggZG8gfG5vZGV8CiAgdyA9IG5vZGVbJHJlbmRlci5kZWZhdWx0cy53aWR0aF9rZXldLnRvX2kKICBoID0gbm9kZVskcmVuZGVyLmRlZmF1bHRzLmhlaWdodF9rZXldLnRvX2kKICB4ID0gbm9kZVsneG8nXS50b19pCiAgeSA9IGhoIC0gbm9kZVsneW8nXS50b19pIC0gaAogIG5vZGVzdHlsZSA9ICUoZmlsbD0iI3tub2RlLmZldGNoKCdmaWxsJywgJyNmZmZmZmYnKX0iIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIje3N3fSIpCiAgb3V0LnB1c2goJSg8cmVjdCAje25vZGVzdHlsZX0gaGVpZ2h0PSIje2h9IiB3aWR0aD0iI3t3fSIgeD0iI3t4fSIgeT0iI3t5fSIvPikpCiAgeCArPSB3bQogIHkgKz0gaG0gKyBtYSAjIEJhc2VsaW5lIGZvciBmaXJzdCBsaW5lLgogIHVybCA9IG5vZGUuZmV0Y2goJ3VybCcsIG5pbCkKICB1cmwuZW5jb2RlISg6eG1sID0+IDphdHRyKSB1bmxlc3MgdXJsLm5pbD8KICBsaW5lcyA9IG5vZGUuZmV0Y2goJ2xhYmVsJywgJycpLnNwbGl0KCJcbiIpCiAgeTAgPSB5CiAgbGluZXMuZWFjaCBkbyB8bGFiZWx8CiAgICBsYWJlbC5lbmNvZGUhKDp4bWwgPT4gOnRleHQpCiAgICBpZiB1cmwubmlsPwogICAgICBvdXQucHVzaCglKDx0ZXh0ICN7dGV4dHN0eWxlfSB4PSIje3h9IiB5PSIje3kwfSI+I3tsYWJlbH08L3RleHQ+KSkKICAgIGVsc2UKICAgICAgb3V0LnB1c2goJSg8YSB4bGluazpocmVmPSN7dXJsfSB0YXJnZXQ9Il9wYXJlbnQiPjx0ZXh0ICN7bGlua3N0eWxlfSB4PSIje3h9IiB5PSIje3kwfSI+I3tsYWJlbH08L3RleHQ+PC9hPikpCiAgICBlbmQKICAgIHkwICs9IGxoICMgU2hpZnQgYmFzZWxpbmUgYnkgZnVsbCBsaW5lICsgc3BhY2luZyBoZWlnaHQuCiAgZW5kCmVuZAokcmVuZGVyLmRvYy5mZXRjaCgnZWRnZXMnLCBbXSkuZWFjaCBkbyB8ZWRnZXwKICBwYXRoID0gZWRnZS5mZXRjaCgncGF0aCcsIG5pbCkKICBuZXh0IGlmIHBhdGgubmlsPwogIHBhdGguZWFjaCBkbyB8cHwKICAgIHBbJ3hvJ10gPSBwWyd4byddLnRvX2kudG9fcwogICAgcFsneW8nXSA9IChoaCAtIHBbJ3lvJ10pLnRvX2kudG9fcwogIGVuZAogIGlmIHBhdGguc2l6ZSA9PSAyCiAgICBvdXQucHVzaCglKDxsaW5lICN7bGluZXN0eWxlfSB4MT0iI3twYXRoWzBdWyd4byddfSIgeDI9IiN7cGF0aFsxXVsneG8nXX0iIHkxPSIje3BhdGhbMF1bJ3lvJ119IiB5Mj0iI3twYXRoWzFdWyd5byddfSIvPikpCiAgZWxzZQogICAgcHRzID0gcGF0aC5tYXAgeyB8cHwgIiN7cFsneG8nXX0sI3twWyd5byddfSIgfQogICAgb3V0LnB1c2goJSg8cG9seWxpbmUgI3tsaW5lc3R5bGV9IHBvaW50cz0iI3twdHMuam9pbignICcpfSIvPikpCiAgZW5kCmVuZApvdXQuam9pbigiXG4iKQolPgo8L3N2Zz4K
@@ -0,0 +1,19 @@
1
+ defaults:
2
+ edge_gap: 20
3
+ width_margin: 10
4
+ height_margin: 10
5
+ font:
6
+ font_size: 16
7
+ stroke_width: 2
8
+ width_key: w
9
+ height_key: h
10
+ size: default
11
+ sizes:
12
+ default: |
13
+ $render.default_size(
14
+ $render.node.fetch('width_scale', $render.defaults.font.width),
15
+ $render.node.fetch('height_scale', $render.defaults.font.size),
16
+ $render.node.fetch('line_spacing', $render.defaults.font.line_spacing),
17
+ $render.node.fetch('width_margin', $render.defaults.width_margin),
18
+ $render.node.fetch('height_margin', $render.defaults.height_margin),
19
+ $render.node.fetch('edge_gap', $render.defaults.edge_gap))
@@ -0,0 +1,57 @@
1
+ <?xml version="1.0"?>
2
+ <%=
3
+ w, hh = $render.dimensions
4
+ hm = $render.defaults.height_margin
5
+ hh += hm
6
+ ma = $render.defaults.font.max_ascend
7
+ fs = $render.defaults.font.size
8
+ lh = fs + $render.defaults.font.line_spacing
9
+ wm = $render.defaults.width_margin
10
+ sw = $render.get_default('stroke_width', 5)
11
+ linestyle = %(fill="none" stroke="#000000" stroke-width="#{sw}")
12
+ textstyle = %(fill="#000000" font-family="serif" font-size="#{fs}" stroke="#000000" stroke-width="0" xml:space="preserve")
13
+ linkstyle = %(fill="#2020ff" font-family="serif" font-size="#{fs}" stroke="#2020ff" stroke-width="0" xml:space="preserve")
14
+
15
+ out = [
16
+ %(<svg width="#{w + $render.defaults.width_margin}" height="#{hh}" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">)
17
+ ]
18
+ $render.doc.fetch('nodes', []).each do |node|
19
+ w = node[$render.defaults.width_key].to_i
20
+ h = node[$render.defaults.height_key].to_i
21
+ x = node['xo'].to_i
22
+ y = hh - node['yo'].to_i - h
23
+ nodestyle = %(fill="#{node.fetch('fill', '#ffffff')}" stroke="#000000" stroke-width="#{sw}")
24
+ out.push(%(<rect #{nodestyle} height="#{h}" width="#{w}" x="#{x}" y="#{y}"/>))
25
+ x += wm
26
+ y += hm + ma # Baseline for first line.
27
+ url = node.fetch('url', nil)
28
+ url.encode!(:xml => :attr) unless url.nil?
29
+ lines = node.fetch('label', '').split("\n")
30
+ y0 = y
31
+ lines.each do |label|
32
+ label.encode!(:xml => :text)
33
+ if url.nil?
34
+ out.push(%(<text #{textstyle} x="#{x}" y="#{y0}">#{label}</text>))
35
+ else
36
+ out.push(%(<a xlink:href=#{url} target="_parent"><text #{linkstyle} x="#{x}" y="#{y0}">#{label}</text></a>))
37
+ end
38
+ y0 += lh # Shift baseline by full line + spacing height.
39
+ end
40
+ end
41
+ $render.doc.fetch('edges', []).each do |edge|
42
+ path = edge.fetch('path', nil)
43
+ next if path.nil?
44
+ path.each do |p|
45
+ p['xo'] = p['xo'].to_i.to_s
46
+ p['yo'] = (hh - p['yo']).to_i.to_s
47
+ end
48
+ if path.size == 2
49
+ out.push(%(<line #{linestyle} x1="#{path[0]['xo']}" x2="#{path[1]['xo']}" y1="#{path[0]['yo']}" y2="#{path[1]['yo']}"/>))
50
+ else
51
+ pts = path.map { |p| "#{p['xo']},#{p['yo']}" }
52
+ out.push(%(<polyline #{linestyle} points="#{pts.join(' ')}"/>))
53
+ end
54
+ end
55
+ out.join("\n")
56
+ %>
57
+ </svg>
metadata CHANGED
@@ -1,25 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diagrammatron
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ismo Kärkkäinen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-23 00:00:00.000000000 Z
11
+ date: 2021-10-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
 
15
15
  Generates diagrams in SVG format from input material. Split into multiple
16
16
  programs that each perform one stage.
17
-
18
- Source: https://github.com/ismo-karkkainen/diagrammatron
19
-
20
- Licensed under Universal Permissive License, see LICENSE.txt.
21
17
  email: ismokarkkainen@icloud.com
22
18
  executables:
19
+ - diagrammatron-get
23
20
  - diagrammatron-edges
24
21
  - diagrammatron-nodes
25
22
  - diagrammatron-place
@@ -32,6 +29,7 @@ extra_rdoc_files: []
32
29
  files:
33
30
  - LICENSE.txt
34
31
  - bin/diagrammatron-edges
32
+ - bin/diagrammatron-get
35
33
  - bin/diagrammatron-nodes
36
34
  - bin/diagrammatron-place
37
35
  - bin/diagrammatron-prune
@@ -39,7 +37,10 @@ files:
39
37
  - bin/diagrammatron-template
40
38
  - bin/dot_json2diagrammatron
41
39
  - lib/common.rb
42
- homepage: http://xn--ismo-krkkinen-gfbd.fi/diagrammatron/index.html
40
+ - template/internal.yaml
41
+ - template/root.yaml
42
+ - template/svg_1.1.erb
43
+ homepage: https://xn--ismo-krkkinen-gfbd.fi/diagrammatron/index.html
43
44
  licenses:
44
45
  - UPL-1.0
45
46
  metadata: {}