asciidoctor-diagram 1.5.9 → 1.5.10

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
  SHA1:
3
- metadata.gz: abeb00e6c1a06050264ad6af1d4d2aeb1273e91f
4
- data.tar.gz: 378319e93a82170c6544523d31bad76728643084
3
+ metadata.gz: b210b428ba58c0332817b65d14cbcf5140fa5d23
4
+ data.tar.gz: aa70930c788129a4b352b96b69d195ab40bacc59
5
5
  SHA512:
6
- metadata.gz: 7d18137fa76b2612d93d25224aa18d771cc64cad4e24990384645bb8025f114ad4d038bdb543b4cddfb8d100c178e10115501bf73244a26bfb859029c06fa723
7
- data.tar.gz: 9f9b51ea388030a030026b7bba7c58c05345ba989764324631ab6b5e85ded33350d85d0c27922a23de7c36f021b3a6e3664790ef7db07c23c9dbb92c5a880699
6
+ metadata.gz: db4a23dc9a0f9edf9683b58d5967153eefa2b938cb6da46a5a3bdfa9d0cde59ee1875a94f8ece94588b1f11023c6064ec1bdcac0f5fd33a48bcd6e479729197b
7
+ data.tar.gz: f353f04830771ed1141a3abef0b685af085f1157f9990ebdf93904dcc944317631c0c532177a7e5a1e070dec3eb97dc7649d395964d5dc8f65d361a9250d0a09
@@ -1,5 +1,13 @@
1
1
  = Asciidoctor-diagram Changelog
2
2
 
3
+ == 1.5.10
4
+
5
+ Bug Fixes::
6
+
7
+ * Issue #186: Avoid preprocessing of PlantUML stdlib !includes (@habamax)
8
+ * Issue #193: Update PlantUML to 2018.10
9
+ * Issue #194: Silence unitialized instance variable warning when using JRuby
10
+
3
11
  == 1.5.9
4
12
 
5
13
  Enhancements::
@@ -52,9 +52,11 @@ The generated file is then inserted into your converted document.
52
52
 
53
53
  Asciidoctor Diagram was inspired by the {uri-py-plantuml}[AsciiDoc PlantUML filter].
54
54
 
55
+ ifndef::env-site[]
55
56
  Translations of the document are available in the following languages:
56
57
 
57
58
  * link:README_zh-CN.adoc[汉语]
59
+ endif::[]
58
60
 
59
61
  ifdef::status[]
60
62
  [discrete]
@@ -11,6 +11,7 @@ require_relative 'asciidoctor-diagram/salt'
11
11
  require_relative 'asciidoctor-diagram/shaape'
12
12
  require_relative 'asciidoctor-diagram/svgbob'
13
13
  require_relative 'asciidoctor-diagram/syntrax'
14
+ require_relative 'asciidoctor-diagram/tikz'
14
15
  require_relative 'asciidoctor-diagram/umlet'
15
16
  require_relative 'asciidoctor-diagram/vega'
16
17
  require_relative 'asciidoctor-diagram/wavedrom'
@@ -28,12 +28,12 @@ module Asciidoctor
28
28
  font = source.attr('fontfamily', nil, inherit_prefix)
29
29
 
30
30
  generate_stdin(which(parent, 'a2s'), format.to_s, source.to_s) do |tool_path, output_path|
31
- args = [tool_path, "-o#{Platform.native_path(output_path)}"]
31
+ args = [tool_path, '-o', Platform.native_path(output_path)]
32
32
 
33
33
  if sx && sy
34
- args << "-s#{sx},#{sy}"
34
+ args << '-s' << "#{sx},#{sy}"
35
35
  elsif scale
36
- args << "-s#{scale},#{scale}"
36
+ args << '-s' << "#{scale},#{scale}"
37
37
  end
38
38
 
39
39
  if noblur
@@ -41,7 +41,7 @@ module Asciidoctor
41
41
  end
42
42
 
43
43
  if font
44
- args << "-f#{font}"
44
+ args << '-f' << font
45
45
  end
46
46
 
47
47
  args
@@ -58,8 +58,8 @@ module Asciidoctor
58
58
  resolve_path(match, parent, parent.attr('imagesdir'))
59
59
  end
60
60
 
61
- code.gsub!(/(?<=!include )[^!\n\r]+/) do |match|
62
- resolve_path(match, parent, base_dir)
61
+ code.gsub!(/(?<=!include )\s*[^<][^!\n\r]+/) do |match|
62
+ resolve_path(match.lstrip, parent, base_dir)
63
63
  end
64
64
 
65
65
  code
@@ -0,0 +1,7 @@
1
+ require_relative 'extensions'
2
+
3
+ Asciidoctor::Extensions.register do
4
+ require_relative 'tikz/extension'
5
+ block Asciidoctor::Diagram::TikZBlockProcessor, :tikz
6
+ block_macro Asciidoctor::Diagram::TikZBlockMacroProcessor, :tikz
7
+ end
@@ -0,0 +1,68 @@
1
+ require_relative '../extensions'
2
+ require_relative '../util/cli_generator'
3
+ require_relative '../util/platform'
4
+ require_relative '../util/which'
5
+
6
+ module Asciidoctor
7
+ module Diagram
8
+ # @private
9
+ module TikZ
10
+ include CliGenerator
11
+ include Which
12
+
13
+ def self.included(mod)
14
+ [:pdf, :svg].each do |f|
15
+ mod.register_format(f, :image) do |parent, source|
16
+ tikz(parent, source, f)
17
+ end
18
+ end
19
+ end
20
+
21
+ def tikz(parent, source, format)
22
+ latexpath = which(parent, 'pdflatex')
23
+
24
+ if format == :svg
25
+ svgpath = which(parent, 'pdf2svg')
26
+ else
27
+ svgpath = nil
28
+ end
29
+
30
+ latex = <<'END'
31
+ \documentclass[border=2bp]{standalone}
32
+ \usepackage{tikz}
33
+ \begin{document}
34
+ \begingroup
35
+ \tikzset{every picture/.style={scale=1}}
36
+ END
37
+ latex << source.to_s
38
+ latex << <<'END'
39
+ \endgroup
40
+ \end{document}
41
+ END
42
+
43
+ pdf = generate_file(latexpath, 'tex', 'pdf', latex) do |tool_path, input_path, output_path|
44
+ {
45
+ :args => [tool_path, '-shell-escape', '-file-line-error', '-interaction=nonstopmode', '-output-directory', Platform.native_path(File.dirname(output_path)), Platform.native_path(input_path)],
46
+ :out_file => "#{File.dirname(input_path)}/#{File.basename(input_path, '.*')}.pdf"
47
+ }
48
+ end
49
+
50
+ if svgpath
51
+ generate_file(svgpath, 'pdf', 'svg', pdf) do |tool_path, input_path, output_path|
52
+ [tool_path, Platform.native_path(File.dirname(input_path)), Platform.native_path(File.dirname(output_path))]
53
+ end
54
+ else
55
+ pdf
56
+ end
57
+ end
58
+ end
59
+
60
+ class TikZBlockProcessor < Extensions::DiagramBlockProcessor
61
+ include TikZ
62
+ end
63
+
64
+ class TikZBlockMacroProcessor < Extensions::DiagramBlockMacroProcessor
65
+ include TikZ
66
+ end
67
+ end
68
+ end
@@ -6,7 +6,7 @@ module Asciidoctor
6
6
  # @private
7
7
  module Java
8
8
  def self.load
9
- if @loaded
9
+ if defined?(@loaded) && @loaded
10
10
  return
11
11
  end
12
12
 
@@ -1,5 +1,5 @@
1
1
  module Asciidoctor
2
2
  module Diagram
3
- VERSION = "1.5.9"
3
+ VERSION = "1.5.10"
4
4
  end
5
5
  end
Binary file
@@ -808,6 +808,54 @@ List <|.. ArrayList
808
808
  expect(content).to_not include('!include')
809
809
  end
810
810
 
811
+ it 'should not resolve stdlib !include directives' do
812
+ doc = <<-eos
813
+ = Hello, PlantUML!
814
+ Doc Writer <doc@example.com>
815
+
816
+ == First Section
817
+
818
+ [plantuml, format="svg"]
819
+ ----
820
+ @startuml
821
+ !include <tupadr3/common>
822
+ !include <tupadr3/font-awesome/server>
823
+ !include <tupadr3/font-awesome/database>
824
+
825
+ title Styling example
826
+
827
+ FA_SERVER(web1,web1) #Green
828
+ FA_SERVER(web2,web2) #Yellow
829
+ FA_SERVER(web3,web3) #Blue
830
+ FA_SERVER(web4,web4) #YellowGreen
831
+
832
+ FA_DATABASE(db1,LIVE,database,white) #RoyalBlue
833
+ FA_DATABASE(db2,SPARE,database) #Red
834
+
835
+ db1 <--> db2
836
+
837
+ web1 <--> db1
838
+ web2 <--> db1
839
+ web3 <--> db1
840
+ web4 <--> db1
841
+ @enduml
842
+ ----
843
+ eos
844
+
845
+ d = load_asciidoc doc, :attributes => {'backend' => 'html5'}
846
+
847
+ expect(d).to_not be_nil
848
+
849
+ b = d.find { |bl| bl.context == :image }
850
+ expect(b).to_not be_nil
851
+
852
+ target = b.attributes['target']
853
+ expect(File.exist?(target)).to be true
854
+
855
+ content = File.read(target, :encoding => Encoding::UTF_8)
856
+ expect(content).to_not include('!include')
857
+ end
858
+
811
859
  it 'should support substitutions' do
812
860
  doc = <<-eos
813
861
  = Hello, PlantUML!
@@ -18,6 +18,7 @@ require_relative '../lib/asciidoctor-diagram/plantuml/extension'
18
18
  require_relative '../lib/asciidoctor-diagram/shaape/extension'
19
19
  require_relative '../lib/asciidoctor-diagram/svgbob/extension'
20
20
  require_relative '../lib/asciidoctor-diagram/syntrax/extension'
21
+ require_relative '../lib/asciidoctor-diagram/tikz/extension'
21
22
  require_relative '../lib/asciidoctor-diagram/umlet/extension'
22
23
  require_relative '../lib/asciidoctor-diagram/vega/extension'
23
24
  require_relative '../lib/asciidoctor-diagram/wavedrom/extension'
@@ -0,0 +1,127 @@
1
+ require_relative 'test_helper'
2
+
3
+ code = <<-'eos'
4
+ \begin{tikzpicture}[font=\LARGE]
5
+
6
+ % Figure parameters (tta and k needs to have the same sign)
7
+ % They can be modified at will
8
+ \def \tta{ -10.00000000000000 } % Defines the first angle of perspective
9
+ \def \k{ -3.00000000000000 } % Factor for second angle of perspective
10
+ \def \l{ 6.00000000000000 } % Defines the width of the parallelepiped
11
+ \def \d{ 5.00000000000000 } % Defines the depth of the parallelepiped
12
+ \def \h{ 7.00000000000000 } % Defines the heigth of the parallelepiped
13
+
14
+ % The vertices A,B,C,D define the reference plan (vertical)
15
+ \coordinate (A) at (0,0);
16
+ \coordinate (B) at ({-\h*sin(\tta)},{\h*cos(\tta)});
17
+ \coordinate (C) at ({-\h*sin(\tta)-\d*sin(\k*\tta)},
18
+ {\h*cos(\tta)+\d*cos(\k*\tta)});
19
+ \coordinate (D) at ({-\d*sin(\k*\tta)},{\d*cos(\k*\tta)});
20
+
21
+ % The vertices Ap,Bp,Cp,Dp define a plane translated from the
22
+ % reference plane by the width of the parallelepiped
23
+ \coordinate (Ap) at (\l,0);
24
+ \coordinate (Bp) at ({\l-\h*sin(\tta)},{\h*cos(\tta)});
25
+ \coordinate (Cp) at ({\l-\h*sin(\tta)-\d*sin(\k*\tta)},
26
+ {\h*cos(\tta)+\d*cos(\k*\tta)});
27
+ \coordinate (Dp) at ({\l-\d*sin(\k*\tta)},{\d*cos(\k*\tta)});
28
+
29
+ % Marking the vertices of the tetrahedron (red)
30
+ % and of the parallelepiped (black)
31
+ \fill[black] (A) circle [radius=2pt];
32
+ \fill[red] (B) circle [radius=2pt];
33
+ \fill[black] (C) circle [radius=2pt];
34
+ \fill[red] (D) circle [radius=2pt];
35
+ \fill[red] (Ap) circle [radius=2pt];
36
+ \fill[black] (Bp) circle [radius=2pt];
37
+ \fill[red] (Cp) circle [radius=2pt];
38
+ \fill[black] (Dp) circle [radius=2pt];
39
+
40
+ % painting first the three visible faces of the tetrahedron
41
+ \filldraw[draw=red,bottom color=red!50!black, top color=cyan!50]
42
+ (B) -- (Cp) -- (D);
43
+ \filldraw[draw=red,bottom color=red!50!black, top color=cyan!50]
44
+ (B) -- (D) -- (Ap);
45
+ \filldraw[draw=red,bottom color=red!50!black, top color=cyan!50]
46
+ (B) -- (Cp) -- (Ap);
47
+
48
+ % Draw the edges of the tetrahedron
49
+ \draw[red,-,very thick] (Ap) -- (D)
50
+ (Ap) -- (B)
51
+ (Ap) -- (Cp)
52
+ (B) -- (D)
53
+ (Cp) -- (D)
54
+ (B) -- (Cp);
55
+
56
+ % Draw the visible edges of the parallelepiped
57
+ \draw [-,thin] (B) -- (A)
58
+ (Ap) -- (Bp)
59
+ (B) -- (C)
60
+ (D) -- (C)
61
+ (A) -- (D)
62
+ (Ap) -- (A)
63
+ (Cp) -- (C)
64
+ (Bp) -- (B)
65
+ (Bp) -- (Cp);
66
+
67
+ % Draw the hidden edges of the parallelepiped
68
+ \draw [gray,-,thin] (Dp) -- (Cp);
69
+ (Dp) -- (D);
70
+ (Ap) -- (Dp);
71
+
72
+ % Name the vertices (the names are not consistent
73
+ % with the node name, but it makes the programming easier)
74
+ \draw (Ap) node [right] {$A$}
75
+ (Bp) node [right, gray] {$F$}
76
+ (Cp) node [right] {$D$}
77
+ (C) node [left,gray] {$E$}
78
+ (D) node [left] {$B$}
79
+ (A) node [left,gray] {$G$}
80
+ (B) node [above left=+5pt] {$C$}
81
+ (Dp) node [right,gray] {$H$};
82
+
83
+ % Drawing again vertex $C$, node (B) because it disappeared behind the edges.
84
+ % Drawing again vertex $H$, node (Dp) because it disappeared behind the edges.
85
+ \fill[red] (B) circle [radius=2pt];
86
+ \fill[gray] (Dp) circle [radius=2pt];
87
+
88
+ % From the reference and this example one can easily draw
89
+ % the twin tetrahedron jointly to this one.
90
+ % Drawing the edges of the twin tetrahedron
91
+ % switching the p_s: A <-> Ap, etc...
92
+ \draw[red,-,dashed, thin] (A) -- (Dp)
93
+ (A) -- (Bp)
94
+ (A) -- (C)
95
+ (Bp) -- (Dp)
96
+ (C) -- (Dp)
97
+ (Bp) -- (C);
98
+ \end{tikzpicture}
99
+ eos
100
+
101
+ describe Asciidoctor::Diagram::TikZBlockMacroProcessor, :broken_on_travis, :broken_on_windows do
102
+ it "should generate PDF images when format is set to 'pdf'" do
103
+ File.write('tikz.txt', code)
104
+
105
+ doc = <<-eos
106
+ = Hello, Tikz!
107
+ Doc Writer <doc@example.com>
108
+
109
+ == First Section
110
+
111
+ tikz::tikz.txt[format="pdf"]
112
+ eos
113
+
114
+ d = load_asciidoc doc
115
+ expect(d).to_not be_nil
116
+
117
+ b = d.find { |bl| bl.context == :image }
118
+ expect(b).to_not be_nil
119
+
120
+ expect(b.content_model).to eq :empty
121
+
122
+ target = b.attributes['target']
123
+ expect(target).to_not be_nil
124
+ expect(target).to match(/\.pdf/)
125
+ expect(File.exist?(target)).to be true
126
+ end
127
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-diagram
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.9
4
+ version: 1.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pepijn Van Eeckhoudt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-28 00:00:00.000000000 Z
11
+ date: 2018-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -111,6 +111,8 @@ files:
111
111
  - lib/asciidoctor-diagram/svgbob/extension.rb
112
112
  - lib/asciidoctor-diagram/syntrax.rb
113
113
  - lib/asciidoctor-diagram/syntrax/extension.rb
114
+ - lib/asciidoctor-diagram/tikz.rb
115
+ - lib/asciidoctor-diagram/tikz/extension.rb
114
116
  - lib/asciidoctor-diagram/umlet.rb
115
117
  - lib/asciidoctor-diagram/umlet/extension.rb
116
118
  - lib/asciidoctor-diagram/util/binaryio.rb
@@ -151,6 +153,7 @@ files:
151
153
  - spec/svgbob_spec.rb
152
154
  - spec/syntrax_spec.rb
153
155
  - spec/test_helper.rb
156
+ - spec/tikz_spec.rb
154
157
  - spec/umlet_spec.rb
155
158
  - spec/vega_spec.rb
156
159
  - spec/wavedrom_spec.rb
@@ -194,6 +197,7 @@ test_files:
194
197
  - spec/svgbob_spec.rb
195
198
  - spec/syntrax_spec.rb
196
199
  - spec/test_helper.rb
200
+ - spec/tikz_spec.rb
197
201
  - spec/umlet_spec.rb
198
202
  - spec/vega_spec.rb
199
203
  - spec/wavedrom_spec.rb