Code Monkey home page Code Monkey logo

Comments (11)

mojavelinux avatar mojavelinux commented on July 19, 2024 2

Very cool!

I like the option to specify the implementation, though I think to make this more semantic we should use an option with a default implementation and allow the attribute to override that choice.

[source%interactive,javascript]
----
const lodash = require("lodash");

lodash.camelCase('get content');
----

(This builds on the semantics of %interactive option for checklists).

I'd also rename the runkit attribute to runner. That way, we have a consistent syntax if we add support for other languages.

We might also want to have a global attribute to set the runner(s).

from asciidoctor-extensions-lab.

mojavelinux avatar mojavelinux commented on July 19, 2024

@hsablonniere You may be interested in where this is headed.

from asciidoctor-extensions-lab.

mojavelinux avatar mojavelinux commented on July 19, 2024

Of course, how cool would it be to test some Asciidoctor.js in the browser as the main example that we show?

from asciidoctor-extensions-lab.

thom4parisot avatar thom4parisot commented on July 19, 2024

Sure – we just need to be aware code snippets within a same document can be run by different runners. Authors could definitely mix Python and JS, each of them might have a different set of options depending on the runner runtime.

And indeed I almost hesitated writing the aforementioned snippets with asciidoctor-js to render some Asciidoc with Node in the browser ;-)

from asciidoctor-extensions-lab.

mojavelinux avatar mojavelinux commented on July 19, 2024

we just need to be aware code snippets within a same document can be run by different runners.

Absolutely. I was thinking more along the lines of a runner per langauge. Something like:

:runner-javascript: nodeVersion:6

from asciidoctor-extensions-lab.

ggrossetie avatar ggrossetie commented on July 19, 2024

When Asciidoctor encounters a delimited block or paragraph with an unrecognized name while parsing the document, it looks for a BlockProcessor registered to handle this name and, if found, invokes its {Processor#process} method to build a corresponding node in the document tree.

@mojavelinux Given this fact, what is the best approach to create an extension to process a source block ?

from asciidoctor-extensions-lab.

mojavelinux avatar mojavelinux commented on July 19, 2024

The best option is a Treeprocessor. Technically, there's nothing wrong with that choice in this case since we want all the normal behavior of parsing a source block, we just want to do something else with it before conversion (aka rendering).

The BlockProcessor is intended for the case when you want to influence (actually take over) the parsing. (Technically, Asciidoctor Diagram could be done with a Treeprocessor too).

from asciidoctor-extensions-lab.

mojavelinux avatar mojavelinux commented on July 19, 2024

In fact, I did something similar in one of the existing (somewhat poorly written) extensions in the lab. See https://github.com/asciidoctor/asciidoctor-extensions-lab/blob/master/lib/shell-session-treeprocessor/extension.rb.

The drawback of treeprocessors right now find_by misses some blocks in the tree, including blocks inside AsciiDoc table cells...so you just have to work a bit harder to find all the blocks to process. For most documents, though, the blocks are accessible.

from asciidoctor-extensions-lab.

thom4parisot avatar thom4parisot commented on July 19, 2024

It is out of scope of this repo so I close the issue.

I started working on it here: https://github.com/oncletom/asciidoctor-extension-interactive-runner.

from asciidoctor-extensions-lab.

mojavelinux avatar mojavelinux commented on July 19, 2024

👍

from asciidoctor-extensions-lab.

ggrossetie avatar ggrossetie commented on July 19, 2024

@oncletom The code looks really good, well done 👍

from asciidoctor-extensions-lab.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.