asciidoctor / asciidoctor-gradle-plugin

A Gradle plugin that uses Asciidoctor via JRuby to process AsciiDoc source files within the project.
https://asciidoctor.github.io/asciidoctor-gradle-plugin/
Apache License 2.0
285 stars 120 forks source link

AsciidoctorJS: require extensions #670

Open jens-auer opened 1 year ago

jens-auer commented 1 year ago

Hi,

I am trying to use custom extensions with AsciidoctorJS, but struggling to get it work. When I use AsciidoctorJ it seems that the extensions seem to be picked up with the following build.gradle.kts:

import org.gradle.kotlin.dsl.`kotlin-dsl`

import org.asciidoctor.gradle.jvm.AsciidoctorTask
//import org.asciidoctor.gradle.js.nodejs.AsciidoctorTask
import io.freefair.gradle.plugins.plantuml.PlantumlTask

plugins {
    id("org.asciidoctor.jvm.convert") version "4.0.0-alpha.1"
    //id("org.asciidoctor.js.convert") version "4.0.0-alpha.1"
    id("io.freefair.plantuml") version "6.6.3"
}

asciidoctorj {
  val extensions = file(".asciidoctor/lib").listFiles().map{ f -> f.getPath() }

  println(extensions)
  println(requires)
  requires( extensions )
  println(extensions)
  println(requires)
}

I can see two extensions being found and added to requires:

> Configure project :
[/home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/swc.js, /home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/dump_attributes.js, /home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/req.js]
[]
[/home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/swc.js, /home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/dump_attributes.js, /home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/req.js]
[/home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/swc.js, /home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/dump_attributes.js, /home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/req.js]

Of course, the extensions fail to load because they are Javascript and not Ruby.

If I now switch to AsciidoctorJS, I tried to use requires as well as suggested by the docs: "Additional NPM modules can be added via asciidoctorj.require.". My interpretation is that it should the same as with AsciidoctorJ, but

import org.gradle.kotlin.dsl.`kotlin-dsl`

import org.asciidoctor.gradle.js.nodejs.AsciidoctorTask
import io.freefair.gradle.plugins.plantuml.PlantumlTask

plugins {
    id("org.asciidoctor.js.convert") version "4.0.0-alpha.1"
    id("io.freefair.plantuml") version "6.6.3"
}

asciidoctorj {
  val extensions = file(".asciidoctor/lib").listFiles().map{ f -> f.getPath() }

  println(extensions)
  println(requires)
  requires( extensions )
  println(extensions)
  println(requires)
}

gives me an error. So I tried to add all extensions to the set requires.

asciidoctorjs {
  val extensions = file(".asciidoctor/lib").listFiles().map{ f -> f.getPath() }

  println("extensions = " + extensions)
  println("requires = " + requires)
  requires.add("JENS")
  requires.addAll(extensions)
  println("extensions = " + extensions)
  println("requires = " + requires)
}

But for some reason this does not modify the set represented by requires:

> Configure project :
extensions = [/home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/swc.js, /home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/dump_attributes.js, /home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/req.js]
requires = []
extensions = [/home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/swc.js, /home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/dump_attributes.js, /home/jens/SWP-Updt/sysad/030_design/.asciidoctor/lib/req.js]
requires = []

What is the appropriate way to require extensions when using AsciidoctorJs?