Raku Land

Text::CodeProcessing

Raku Text::CodeProcessing

Build Status License: Artistic-2.0

In brief

The main goal of this package is to facilitate Literate Programming with Raku.

The package has functions and a script for the evaluations of code chunks in documents of different types (like Markdown, Org Mode, Pod6.)


Installation

Package installations from both sources use zef installer (which should be bundled with the "standard" Rakudo installation file.)

To install the package from Raku Modules / PAUSE use the shell command:

zef install Text::CodeProcessing

To install the package from the GitHub repository use the shell command:

zef install https://github.com/antononcube/Raku-Text-CodeProcessing.git

Usage

Main function

The package provides the function FileCodeChunksEvaluation for the evaluation of code chunks in files. The first argument is a file name string:

FileCodeChunksEvaluation( $fileName, ... )

Here are the (optional) parameters:

When the prompt arguments are given the value 'AUTO' then the actual prompt values are selected according to the file type:

Scripts

The directory "./examples" has a script files, file-code-chunks-eval.raku and file-code-chunks-extract.raku, that can be used from the command line.

Here are script invocation examples for the code chunks evaluation in a file named "doc.md":

file-code-chunks-eval.raku doc.md
file-code-chunks-eval.raku file-code-chunks-eval.raku --evalOutputPrompt="## OUTPUT :: " --evalErrorPrompt="## ERROR :: " -o=doc_newly_weaved.md doc.md

Here is a script invocation example for code extraction from code chunks in a file named "doc.md":

file-code-chunks-extract.raku -o=doc_new_extract.md doc.md

If no output file name is specified then the script file-code-chunks-eval.raku (file-code-chunks-extract.raku) makes a new file in the same directory with the string "_woven" ("_tangled") inserted into the input file name.


Implementation notes

The implementation uses a greatly reduced version of the class Jupyter::Kernel::Sandbox of Raku Jupyter kernel package/repository [BD1]. (See the class REPLSandbox.)

Just using EVAL, (as in [SO1]) did not provide state persistence between code chunks evaluations. For example, creating and assigning variables or loading packages in the first code chunk did not make those variables and packages "available" in the subsequent code chunks.

That problem is resolved by setting up a separate Raku REPL (sandbox) object.


TODO

The following TODO items are ordered by priority, the most important are on top.


References

[BD1] Brian Duggan et al., p6-jupyter-kernel, (2017-2020), GitHug/bduggan.

[DS1] Daniel Sockwell, "Weaving Raku: semiliterate programming in a beautiful language", (2020), codesections.com.

[SO1] Suman Khanal et al., "Capture and execute multiline code and incorporate result in raku", (2017), Stack Overflow.