asciidoctor / asciidoctor-mathematical

An extension for Asciidoctor that converts the content of STEM blocks and inline macros using Mathematical.
MIT License
49 stars 44 forks source link

sample.adoc can't be rendered? #61

Closed lurch closed 3 years ago

lurch commented 4 years ago

asciidoctor -v reports

Asciidoctor 2.0.10 [https://asciidoctor.org]
Runtime Environment (ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux-gnu]) (lc:UTF-8 fs:UTF-8 in:UTF-8 ex:UTF-8)

When I try running asciidoctor -r asciidoctor-mathematical sample.adoc (with the sample.adoc being downloaded from this repo) it says:

asciidoctor: FAILED: /home/andrew/asciidoc-mathematical/sample.adoc: Failed to load AsciiDoc document - undefined method `lines=' for #<Asciidoctor::Table::Cell:0x00000000013f0f60>
  Use --trace for backtrace

I'm assuming that asciidoctor-mathematical used to be able to render sample.adoc, so presumably this is a regression somewhere? I wonder if it'd be worth trying to render sample.adoc during the CI process ( #51 ), just to check that no errors get reported? (even if it means ignoring any output that gets created)

lurch commented 4 years ago

Running it with --trace reports:

Traceback (most recent call last):
    18: from /usr/local/bin/asciidoctor:23:in `<main>'
    17: from /usr/local/bin/asciidoctor:23:in `load'
    16: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/bin/asciidoctor:15:in `<top (required)>'
    15: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/cli/invoker.rb:111:in `invoke!'
    14: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/cli/invoker.rb:111:in `each'
    13: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/cli/invoker.rb:128:in `block in invoke!'
    12: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/convert.rb:183:in `convert_file'
    11: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/convert.rb:183:in `open'
    10: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/convert.rb:183:in `block in convert_file'
     9: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/convert.rb:78:in `convert'
     8: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/load.rb:83:in `load'
     7: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/document.rb:555:in `parse'
     6: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/document.rb:555:in `each'
     5: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/document.rb:556:in `block in parse'
     4: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/document.rb:556:in `[]'
     3: from /var/lib/gems/2.6.0/gems/asciidoctor-mathematical-0.3.1/lib/asciidoctor-mathematical/extension.rb:40:in `process'
     2: from /var/lib/gems/2.6.0/gems/asciidoctor-mathematical-0.3.1/lib/asciidoctor-mathematical/extension.rb:40:in `each'
     1: from /var/lib/gems/2.6.0/gems/asciidoctor-mathematical-0.3.1/lib/asciidoctor-mathematical/extension.rb:41:in `block in process'
/var/lib/gems/2.6.0/gems/asciidoctor-mathematical-0.3.1/lib/asciidoctor-mathematical/extension.rb:105:in `handle_prose_block': undefined method `lines=' for #<Asciidoctor::Table::Cell:0x00000000025ea720> (NoMethodError)
    18: from /usr/local/bin/asciidoctor:23:in `<main>'
    17: from /usr/local/bin/asciidoctor:23:in `load'
    16: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/bin/asciidoctor:15:in `<top (required)>'
    15: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/cli/invoker.rb:111:in `invoke!'
    14: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/cli/invoker.rb:111:in `each'
    13: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/cli/invoker.rb:128:in `block in invoke!'
    12: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/convert.rb:183:in `convert_file'
    11: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/convert.rb:183:in `open'
    10: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/convert.rb:183:in `block in convert_file'
     9: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/convert.rb:78:in `convert'
     8: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/load.rb:83:in `load'
     7: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/document.rb:555:in `parse'
     6: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/document.rb:555:in `each'
     5: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/document.rb:556:in `block in parse'
     4: from /var/lib/gems/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/document.rb:556:in `[]'
     3: from /var/lib/gems/2.6.0/gems/asciidoctor-mathematical-0.3.1/lib/asciidoctor-mathematical/extension.rb:40:in `process'
     2: from /var/lib/gems/2.6.0/gems/asciidoctor-mathematical-0.3.1/lib/asciidoctor-mathematical/extension.rb:40:in `each'
     1: from /var/lib/gems/2.6.0/gems/asciidoctor-mathematical-0.3.1/lib/asciidoctor-mathematical/extension.rb:41:in `block in process'
/var/lib/gems/2.6.0/gems/asciidoctor-mathematical-0.3.1/lib/asciidoctor-mathematical/extension.rb:105:in `handle_prose_block': asciidoctor: FAILED: /home/andrew/asciidoc-mathematical/sample.adoc: Failed to load AsciiDoc document - undefined method `lines=' for #<Asciidoctor::Table::Cell:0x00000000025ea720> (NoMethodError)
ProgramFan commented 4 years ago

The extensions shall upgrade to new asciidoctor API.

nbkolchin commented 4 years ago

Quick hack:

--- extension.rb    2020-09-08 11:56:11.000000000 +0300
+++ extension.rb.new    2020-09-08 12:28:13.000000000 +0300
@@ -112,7 +112,12 @@
       if prose.context == :list_item
         prose.instance_variable_set :@text, text
       else
-        prose.lines = text.split LineFeed
+        # prose.lines = text.split LineFeed
+        if prose.respond_to?(:lines=)
+          prose.lines = text.split LineFeed
+        else
+          prose.text = text
+        end
       end
     end
   end
mojavelinux commented 3 years ago

Since Asciidoctor 2.0, the find_by method finds table cells. This extension is trying to process them as a paragraph block. A quick fix is to check the context and delegate to the correct method. However, I think it would be better to take full advantage of the improvements to find_by in Asciidoctor 2.0 to simplify the code and reduce the number of scans.