asciidoctor.js icon indicating copy to clipboard operation
asciidoctor.js copied to clipboard

Reusing extensions registry doesn't work in v3.0.2

Open saneef opened this issue 2 years ago • 4 comments

When I reuse an registry, in subsequent calls to convert(), the registered extensions don't work.

See the sample code, which is based on an example from docs:

const asciidoctor = require("asciidoctor")();
const registry = asciidoctor.Extensions.create();
registry.block(function () {
  var self = this;
  self.named("shout");
  self.onContext("paragraph");
  self.process(function (parent, reader) {
    var lines = reader.getLines().map(function (l) {
      return l.toUpperCase();
    });
    return self.createBlock(parent, "paragraph", lines);
  });
});

const text = `[shout]\
\nSay it loud.\
\nSay it proud.`;

// 1
const htmlA = asciidoctor.convert(text, {
  extension_registry: registry,
});

// 2
const htmlB = asciidoctor.convert(text, {
  extension_registry: registry,
});

console.log(`Converted first:
${htmlA}`);
console.log(" ");
console.log(`Converted second:
${htmlB}`);

// 🚨 Output from v3.0.2
// Converted first:
// <div class="paragraph">
// <p>SAY IT LOUD.
// SAY IT PROUD.</p>
// </div>

// Converted second:
// <div class="paragraph">
// <p>Say it loud.
// Say it proud.</p>
// </div>

// ✅ Output from v2.2.6
// Converted first:
// <div class="paragraph">
// <p>SAY IT LOUD.
// SAY IT PROUD.</p>
// </div>

// Converted second:
// <div class="paragraph">
// <p>SAY IT LOUD.
// SAY IT PROUD.</p>
// </div>

The same code works fine in v2.2.x.

Is this a bug, or am I doing something wrong?

I encountered this issue when I was trying to find a fix for saneef/eleventy-plugin-asciidoc#10.

saneef avatar Jul 22 '23 18:07 saneef

@mojavelinux I vaguely remember a discussion about it but I don't recall what needs to be done? Does that ring a bell?

ggrossetie avatar Feb 12 '24 11:02 ggrossetie

Based on this comment, I reworked the plugin in which I'm using asciidoctor.js. Now I'm creating new registry for each call to convert()

Should we close this issue? May we should add a note in documentation.

saneef avatar Feb 12 '24 11:02 saneef

Based on https://github.com/asciidoctor/asciidoctor-kroki/issues/421#issuecomment-1649374749, I reworked the plugin in which I'm using asciidoctor.js. Now I'm creating new registry for each call to convert()

Thanks that's the comment I was looking for!

Should we close this issue? May we should add a note in documentation.

Yes, we should add a callout/admonition in: https://docs.asciidoctor.org/asciidoctor.js/latest/extend/extensions/register/

ggrossetie avatar Feb 12 '24 11:02 ggrossetie

I vaguely remember a discussion about it but I don't recall what needs to be done? Does that ring a bell?

I think you're referring to https://github.com/asciidoctor/asciidoctor/issues/4256.

mojavelinux avatar Feb 12 '24 21:02 mojavelinux