asciidoctor / asciidoctor-diagram

:left_right_arrow: Asciidoctor diagram extension, with support for AsciiToSVG, BlockDiag (BlockDiag, SeqDiag, ActDiag, NwDiag), Ditaa, Erd, GraphViz, Mermaid, Msc, PlantUML, Shaape, SvgBob, Syntrax, UMLet, Vega, Vega-Lite and WaveDrom.
http://asciidoctor.org
MIT License
431 stars 106 forks source link

Structurizr Block Macro: Failed to load a UTF-8 encoded workspace #455

Closed cachescrubber closed 5 months ago

cachescrubber commented 5 months ago

Structurizr Block Macro: Failed to load a UTF-8 encoded workspace

You can find a reproducible example in https://github.com/cachescrubber/asciidoctor-diagram-structurizr-include. catalog.dsl contains a german Umlaut.

When using a structurizr Block Macro where the included workspace dsl file is utf-8 encoded, processing failes:

structurizr::catalog.dsl[view="SystemLandscape-001", renderer="plantuml-c4"]
Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-diagram-2.2.16/lib/asciidoctor-diagram/diagram_source.rb:341:in `encode': "\\xC3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-diagram-2.2.16/lib/asciidoctor-diagram/diagram_source.rb:341:in `prepare_source_array'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-diagram-2.2.16/lib/asciidoctor-diagram/diagram_source.rb:309:in `load_code'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-diagram-2.2.16/lib/asciidoctor-diagram/diagram_source.rb:22:in `code'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-diagram-2.2.16/lib/asciidoctor-diagram/diagram_processor.rb:79:in `process'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-diagram-2.2.16/lib/asciidoctor-diagram/structurizr/extension.rb:47:in `process'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/parser.rb:665:in `[]'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/parser.rb:665:in `next_block'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/parser.rb:397:in `next_section'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/parser.rb:382:in `next_section'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/parser.rb:382:in `next_section'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/parser.rb:97:in `parse'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/document.rb:538:in `parse'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/load.rb:84:in `load'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/convert.rb:78:in `convert'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/convert.rb:190:in `block in convert_file'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/convert.rb:190:in `open'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/convert.rb:190:in `convert_file'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/cli/invoker.rb:129:in `block in invoke!'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/cli/invoker.rb:112:in `each'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/lib/asciidoctor/cli/invoker.rb:112:in `invoke!'
        from /Users/lars/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/asciidoctor-2.0.20/bin/asciidoctor:15:in `<top (required)>'
        from /Users/lars/.rbenv/versions/3.1.2/bin/asciidoctor:25:in `load'
        from /Users/lars/.rbenv/versions/3.1.2/bin/asciidoctor:25:in `<main>'

Environment

% asciidoctor --version
Asciidoctor 2.0.20 [https://asciidoctor.org]
Runtime Environment (ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin23]) (lc:UTF-8 fs:UTF-8 in:UTF-8 ex:UTF-8)
pepijnve commented 5 months ago

I must have gotten my assumptions completely wrong somewhere. The changes for #428 were intended to fix exactly this. I'll look into it asap.

pepijnve commented 5 months ago

I've pushed 2.2.17 to rubygems.org and yanked the broken version. Two yanks in a row... 🙈

cachescrubber commented 5 months ago

Many thanks again, works like a charm now.