asciidoctor-diagram 1.5.12 → 1.5.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
  SHA1:
3
- metadata.gz: 5913cbd36fd3b829ac50411bfa45bf67077c8ac2
4
- data.tar.gz: fc549589f2920e44418d44befc61ea469dd831bc
3
+ metadata.gz: ffc1f6fe55704de14ad37b6d54292decde729e9b
4
+ data.tar.gz: e8e81c21b5918ba8337ff5340382cbe9a311ca37
5
5
  SHA512:
6
- metadata.gz: 59573e38cc1ab7ea78ac87169857c43b88b29c1430175ae63a64f5828d0ce600d43c5f7684223fa413789db5120a4b33cb4511da24e145249e2db410b8652c58
7
- data.tar.gz: fac3eab000034f0d4b5df6e549a4bb678d50dee313abf4ce01b99246461e0530bd5bb043b39b84c6db559628756357e68f8ca8c78b5d226ed2161c2e799b7ba1
6
+ metadata.gz: a2426b51df51fa6d625c4a2c2345f3157b0c8eac5cd5683d52680f2908326a2aa385483bdda8780321af7ee96276ae1dcdfb087ca3ed8859aaa7b47df9630389
7
+ data.tar.gz: 772a8642bda51b9abfba2044fa9d27d5296e5e13dd6d8e4ed7b9298dc4ee93f53e7eb18c94c04e295a407736e97b89465dcccfeaf8428d8884201150f1d414ef
data/CHANGELOG.adoc CHANGED
@@ -1,5 +1,11 @@
1
1
  = Asciidoctor-diagram Changelog
2
2
 
3
+ == 1.5.13
4
+
5
+ Bug Fixes::
6
+
7
+ * Issue #212: Fix regression introduced by fix for #201 in 1.5.12
8
+
3
9
  == 1.5.12
4
10
 
5
11
  Bug Fixes::
@@ -0,0 +1,55 @@
1
+ require_relative '../util/java'
2
+
3
+ module Asciidoctor
4
+ module Diagram
5
+ module DitaaConverter
6
+ OPTIONS = {
7
+ 'scale' => ->(o, v) { o << '--scale' << v if v },
8
+ 'tabs' => ->(o, v) { o << '--tabs' << v if v },
9
+ 'background' => ->(o, v) { o << '--background' << v if v },
10
+ 'antialias' => ->(o, v) { o << '--no-antialias' if v == 'false' },
11
+ 'separation' => ->(o, v) { o << '--no-separation' if v == 'false' },
12
+ 'round-corners' => ->(o, v) { o << '--round-corners' if v == 'true' },
13
+ 'shadows' => ->(o, v) { o << '--no-shadows' if v == 'false' },
14
+ 'debug' => ->(o, v) {o << '--debug' if v == 'true' },
15
+ 'fixed-slope' => ->(o, v) { o << '--fixed-slope' if v == 'true' },
16
+ 'transparent' => ->(o, v) { o << '--transparent' if v == 'true' }
17
+ }.freeze
18
+
19
+ JARS = %w[ditaa-1.3.13.jar ditaamini-0.11.jar].map do |jar|
20
+ File.expand_path File.join('../..', jar), File.dirname(__FILE__)
21
+ end
22
+ Java.classpath.concat JARS
23
+
24
+ def self.convert(source, opts)
25
+ Java.load
26
+ headers = {
27
+ Accept: opts['mime_type'],
28
+ 'X-Options' => to_header_options(opts)
29
+ }
30
+ send_request(source, headers)
31
+ end
32
+
33
+ def self.to_header_options opts
34
+ options = []
35
+ OPTIONS.keys.each do |key|
36
+ value = opts[key]
37
+ OPTIONS[key].call(options, value)
38
+ end
39
+ options.join(' ')
40
+ end
41
+
42
+ def self.send_request(body, headers, url = '/ditaa')
43
+ response = Java.send_request(
44
+ url: url,
45
+ body: body,
46
+ headers: headers
47
+ )
48
+ unless response[:code] == 200
49
+ raise Java.create_error("Ditaa image generation failed", response)
50
+ end
51
+ response[:body]
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,29 +1,12 @@
1
1
  require 'set'
2
2
 
3
3
  require_relative '../extensions'
4
- require_relative '../util/java'
4
+ require_relative 'converter'
5
5
 
6
6
  module Asciidoctor
7
7
  module Diagram
8
- # @private
9
8
  module Ditaa
10
- OPTIONS = {
11
- 'scale' => lambda { |o, v| o << '--scale' << v if v },
12
- 'tabs' => lambda { |o, v| o << '--tabs' << v if v },
13
- 'background' => lambda { |o, v| o << '--background' << v if v },
14
- 'antialias' => lambda { |o, v| o << '--no-antialias' if v == 'false' },
15
- 'separation' => lambda { |o, v| o << '--no-separation' if v == 'false'},
16
- 'round-corners' => lambda { |o, v| o << '--round-corners' if v == 'true'},
17
- 'shadows' => lambda { |o, v| o << '--no-shadows' if v == 'false'},
18
- 'debug' => lambda { |o, v| o << '--debug' if v == 'true'},
19
- 'fixed-slope' => lambda { |o, v| o << '--fixed-slope' if v == 'true'},
20
- 'transparent' => lambda { |o, v| o << '--transparent' if v == 'true'}
21
- }
22
-
23
- JARS = ['ditaa-1.3.13.jar', 'ditaamini-0.11.jar'].map do |jar|
24
- File.expand_path File.join('../..', jar), File.dirname(__FILE__)
25
- end
26
- Java.classpath.concat JARS
9
+ OPTION_KEYS = DitaaConverter::OPTIONS.keys
27
10
 
28
11
  def self.included(mod)
29
12
  mod.register_format(:png, :image) do |parent, source|
@@ -36,35 +19,14 @@ module Asciidoctor
36
19
  end
37
20
 
38
21
  def ditaa(parent, source, mime_type)
39
- Java.load
40
-
41
22
  global_attributes = parent.document.attributes
42
-
43
- options = []
44
-
45
- OPTIONS.keys.each do |key|
23
+ opts = {}
24
+ opts['mime_type'] = mime_type
25
+ OPTION_KEYS.each do |key|
46
26
  value = source.attributes.delete(key) || global_attributes["ditaa-option-#{key}"]
47
- OPTIONS[key].call(options, value)
27
+ opts[key] = value if value
48
28
  end
49
-
50
- options_string = options.join(' ')
51
-
52
- headers = {
53
- 'Accept' => mime_type,
54
- 'X-Options' => options_string
55
- }
56
-
57
- response = Java.send_request(
58
- :url => '/ditaa',
59
- :body => source.to_s,
60
- :headers => headers
61
- )
62
-
63
- unless response[:code] == 200
64
- raise Java.create_error("Ditaa image generation failed", response)
65
- end
66
-
67
- response[:body]
29
+ DitaaConverter.convert(source.to_s, opts)
68
30
  end
69
31
  end
70
32
 
@@ -282,7 +282,7 @@ module Asciidoctor
282
282
  end
283
283
 
284
284
  if document.nested? && value.nil?
285
- doc_option(docuemnt.parent_document, key)
285
+ doc_option(document.parent_document, key)
286
286
  else
287
287
  value
288
288
  end
@@ -510,12 +510,49 @@ module Asciidoctor
510
510
  def read_code
511
511
  if @file_name
512
512
  lines = File.readlines(@file_name)
513
- lines = ::Asciidoctor::Helpers.normalize_lines(lines)
513
+ lines = prepare_source_array(lines)
514
514
  @parent_block.apply_subs(lines, resolve_diagram_subs).join("\n")
515
515
  else
516
516
  ''
517
517
  end
518
518
  end
519
+
520
+ private
521
+
522
+ # Byte arrays for UTF-* Byte Order Marks
523
+ BOM_BYTES_UTF_8 = [0xef, 0xbb, 0xbf]
524
+ BOM_BYTES_UTF_16LE = [0xff, 0xfe]
525
+ BOM_BYTES_UTF_16BE = [0xfe, 0xff]
526
+
527
+ # Prepare the source data Array for parsing.
528
+ #
529
+ # Encodes the data to UTF-8, if necessary, and removes any trailing
530
+ # whitespace from every line.
531
+ #
532
+ # If a BOM is found at the beginning of the data, a best attempt is made to
533
+ # encode it to UTF-8 from the specified source encoding.
534
+ #
535
+ # data - the source data Array to prepare (no nil entries allowed)
536
+ #
537
+ # returns a String Array of prepared lines
538
+ def prepare_source_array data
539
+ return [] if data.empty?
540
+ if (leading_2_bytes = (leading_bytes = (first = data[0]).unpack 'C3').slice 0, 2) == BOM_BYTES_UTF_16LE
541
+ data[0] = first.byteslice 2, first.bytesize
542
+ # NOTE you can't split a UTF-16LE string using .lines when encoding is UTF-8; doing so will cause this line to fail
543
+ return data.map {|line| (line.encode ::Encoding::UTF_8, ::Encoding::UTF_16LE).rstrip }
544
+ elsif leading_2_bytes == BOM_BYTES_UTF_16BE
545
+ data[0] = first.byteslice 2, first.bytesize
546
+ return data.map {|line| (line.encode ::Encoding::UTF_8, ::Encoding::UTF_16BE).rstrip }
547
+ elsif leading_bytes == BOM_BYTES_UTF_8
548
+ data[0] = first.byteslice 3, first.bytesize
549
+ end
550
+ if first.encoding == ::Encoding::UTF_8
551
+ data.map {|line| line.rstrip }
552
+ else
553
+ data.map {|line| (line.encode ::Encoding::UTF_8).rstrip }
554
+ end
555
+ end
519
556
  end
520
557
  end
521
558
  end
@@ -3,6 +3,9 @@ module Asciidoctor
3
3
  # @private
4
4
  module Cli
5
5
  if RUBY_PLATFORM == "java"
6
+ # Workaround for https://github.com/jruby/jruby/issues/5565
7
+ # Kernel.spawn (and as a consequence Open3.capture3 which uses it)
8
+ # is not reliable on all versions of JRuby.
6
9
  require_relative 'java'
7
10
 
8
11
  def self.run(*args)
@@ -1,5 +1,5 @@
1
1
  module Asciidoctor
2
2
  module Diagram
3
- VERSION = "1.5.12"
3
+ VERSION = "1.5.13"
4
4
  end
5
5
  end
@@ -532,6 +532,60 @@ Foo1 -> Foo2 : To boundary
532
532
  expect(File.exist?(File.expand_path(target, 'foo'))).to be true
533
533
  end
534
534
 
535
+ it 'should write files to to_dir if set' do
536
+ doc = <<-eos
537
+ = Hello, PlantUML!
538
+ Doc Writer <doc@example.com>
539
+
540
+ == First Section
541
+
542
+ [plantuml, format="svg"]
543
+ ----
544
+ actor Foo1
545
+ boundary Foo2
546
+ Foo1 -> Foo2 : To boundary
547
+ ----
548
+ eos
549
+
550
+ d = load_asciidoc doc, {:to_dir => 'foo'}
551
+ b = d.find { |bl| bl.context == :image }
552
+
553
+ target = b.attributes['target']
554
+ expect(target).to_not be_nil
555
+ expect(File.exist?(target)).to be false
556
+ expect(File.exist?(File.expand_path(target, 'foo'))).to be true
557
+ end
558
+
559
+ it 'should write files to to_dir if set when embedded in table' do
560
+ doc = <<-eos
561
+ = Hello, PlantUML!
562
+ Doc Writer <doc@example.com>
563
+
564
+ == First Section
565
+
566
+ |===
567
+ |Type | Example
568
+
569
+ |graphviz
570
+ a|
571
+ [plantuml, format="svg"]
572
+ ----
573
+ actor Foo1
574
+ boundary Foo2
575
+ Foo1 -> Foo2 : To boundary
576
+ ----
577
+ |===
578
+ eos
579
+
580
+ d = load_asciidoc doc, {:to_dir => 'foo'}
581
+ b = d.find { |bl| bl.context == :image }
582
+
583
+ target = b.attributes['target']
584
+ expect(target).to_not be_nil
585
+ expect(File.exist?(target)).to be false
586
+ expect(File.exist?(File.expand_path(target, 'foo'))).to be true
587
+ end
588
+
535
589
  it 'should write files to imagesoutdir if set' do
536
590
  doc = <<-eos
537
591
  = Hello, PlantUML!
data/spec/test_helper.rb CHANGED
@@ -40,6 +40,22 @@ module Asciidoctor
40
40
  nil
41
41
  end
42
42
  end
43
+
44
+ class Table
45
+ def find(&block)
46
+ rows.by_section.each do |section, rows|
47
+ rows.each do |row|
48
+ row.each do |cell|
49
+ inner_doc = cell.inner_document
50
+ if !inner_doc.nil? && found_block = cell.inner_document.find(&block)
51
+ return found_block
52
+ end
53
+ end
54
+ end
55
+ end
56
+ nil
57
+ end
58
+ end
43
59
  end
44
60
 
45
61
  module Asciidoctor
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-diagram
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.12
4
+ version: 1.5.13
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: 2019-01-20 00:00:00.000000000 Z
11
+ date: 2019-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -90,6 +90,7 @@ files:
90
90
  - lib/asciidoctor-diagram/blockdiag.rb
91
91
  - lib/asciidoctor-diagram/blockdiag/extension.rb
92
92
  - lib/asciidoctor-diagram/ditaa.rb
93
+ - lib/asciidoctor-diagram/ditaa/converter.rb
93
94
  - lib/asciidoctor-diagram/ditaa/extension.rb
94
95
  - lib/asciidoctor-diagram/erd.rb
95
96
  - lib/asciidoctor-diagram/erd/extension.rb