{"id":28112548,"url":"https://github.com/verhas/jamal","last_synced_at":"2026-01-05T20:54:08.814Z","repository":{"id":37431708,"uuid":"144117144","full_name":"verhas/jamal","owner":"verhas","description":"Jamal is document maintenance automation","archived":false,"fork":false,"pushed_at":"2025-04-16T08:35:18.000Z","size":39051,"stargazers_count":60,"open_issues_count":0,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-16T10:55:48.624Z","etag":null,"topics":["jamal-macro","jamal-source","macro-language","macros-defined","starts-jamal"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/verhas.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.adoc","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.adoc","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-08-09T07:34:42.000Z","updated_at":"2025-04-16T08:35:22.000Z","dependencies_parsed_at":"2024-01-03T01:26:15.544Z","dependency_job_id":"15b05eb6-4bc3-4e82-93d6-366aa034421d","html_url":"https://github.com/verhas/jamal","commit_stats":null,"previous_names":[],"tags_count":58,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verhas%2Fjamal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verhas%2Fjamal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verhas%2Fjamal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verhas%2Fjamal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/verhas","download_url":"https://codeload.github.com/verhas/jamal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254076839,"owners_count":22010611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jamal-macro","jamal-source","macro-language","macros-defined","starts-jamal"],"created_at":"2025-05-14T05:01:12.925Z","updated_at":"2026-01-05T20:54:08.801Z","avatar_url":"https://github.com/verhas.png","language":"Java","readme":":imagesdir: images\n:jamal_home: https://github.com/verhas/jamal/\n//DO NOT EDIT THIS FILE; THIS IS GENERATED FROM README.adoc.jam\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n= image:logo.svg[width=100px] Jamal Macro Language\n\nJamal is a tool for automating documentation maintenance.\nIt will copy the information from your documented system into the documentation automatically and repeat it when the system is updated.\nIt reduces the risk of outdated documentation by automating its maintenance.\n\nJamal can be used with AsciiDoc, Markdown, XML, JSON, YAML, Javadoc, and any other markup languages.\nThe application integrates seamlessly into the document processing tools' pipeline in the least intrusive, non-invasive way.\n\nTechnically, Jamal is a meta-markup language enhancing the features of the original markup language.\nThe conversion is done as a preprocessing step prior to the markup processing.\nIt can be inserted into any toolchain without risk, as it can also be removed at any time.\n\nTOC\n\n\n\n. \u003c\u003cInstallation\u003e\u003e\n. \u003c\u003cGS\u003e\u003e\n. \u003c\u003cConfiguration\u003e\u003e\n. \u003c\u003cFeatures\u003e\u003e\n. \u003c\u003cContributing\u003e\u003e\n. \u003c\u003cDocumentation\u003e\u003e\n. \u003c\u003cLicense\u003e\u003e\n. \u003c\u003cChangelog\u003e\u003e\n. \u003c\u003cRoadmap\u003e\u003e\n. \u003c\u003cSupport\u003e\u003e\n. \u003c\u003cFAQ\u003e\u003e\n. \u003c\u003cMaintenance\u003e\u003e\n\n[cols=\"a,a,a\", frame=none, grid=none]\n|===\n|image::jetbrains.svg[Supported,link=\"https://www.jetbrains.com\",width=50px, alt=\"JetBrains\"] Developed using https://www.jetbrains.com/community/opensource/#support[JetBrains OSS License]\n|image::https://javadoc.io/badge/com.javax0.jamal/jamal-parent.svg[link=https://javadoc.io/doc/com.javax0.jamal]\n|image:{jamal_home}actions/workflows/jamal-build.yml/badge.svg[Java CI with Maven,link={jamal_home}actions/workflows/jamal-build.yml]\n|===\n\nNOTE: This is the latest development documentation.\nTo see the documentation of a release, you have to follow the link in the documentation link:RELEASES.adoc[`RELEASES.adoc`].\nIf you want to read the latest release, please visit link:{jamal_home}/tree/v2.8.2[Jamal2.8.2]\n\n\n\n\n\n== Installation and Usage [[Installation]]\n\n\n\nJamal is implemented as a Java library and is embedded in different applications.\nIt can be used as a command-line tool, as a Maven plugin, as a Maven extension, as a JavaDoc doclet, as a JShell script, as a JBang script, as a Java library, and as a JSR223 script engine.\nThe installation may be as simple as starting it from the command line (JBang) when the embedding application is already installed.\n\nIn the following sections, we will discuss how to install and use Jamal in the different applications it is embedded in.\n\n. \u003c\u003cStarting Command Line Version, Starting Command Line Version\u003e\u003e\n. \u003c\u003cMavenPlugin, Maven Plugin\u003e\u003e\n. \u003c\u003cMavenExtension, Maven Extension\u003e\u003e\n. \u003c\u003cStarting with JBang, Starting with JBang\u003e\u003e\n. \u003c\u003cASCIIDOC, IntelliJ, AsciidocFx\u003e\u003e\n\n==== Starting Command Line Version\n\nTo install Jamal and use it on Linux, macOS, or Windows, you can use the installer kit.\nThe installer kit is attached to the release starting with version 2.8.1.\nThe installer kit contains the Jamal code as well as a minimal Java environment to run it.\nAll you need to do is download the installer kit and execute it.\nThe installation is straightforward and does not require any special knowledge.\n\nCurrently, the installation kits are available for\n\n* Linux Intel 64-bit architecture,\n* macOS Intel 64-bit and `Mx` architecture, and\n* Windows Intel 64-bit architecture.\n\nInstallation kits come along with a tailored version of the Java 21 JDK temurin distribution.\nThe Java source is compatible with Java 17, and the compiled JAR files are compatible with Java 11.\n\n.Supported platform for installation kits\n[NOTE]\n====\nThe above kits are created on GitHub using the GitHub actions.\nThe project for creating the kits is separate from the Jamal development repository `https://github.com/verhas/jamal_packaging`.\nUpon request, I can provide Linux arm 64-bit installation kit, but that is not automatically built.\nI also plan to support that platform as soon as GitHub will support arm64 linux and windows workflows.\n====\n\n.Windows PATH setting\n[NOTE]\n====\nThe Windows installation kit does not modify the path of the operating system.\nIt means that you need to\n\n* start Jamal from the command line using the full path to the `jamal` executable, or\n\n* modify the user or system level PATH to include the directory where the `jamal` executable is located.\n\nThe typical installation location for Jamal on Windows is `C:\\Program Files\\jamal`.\n====\nIf you have Java installed on your system and do not want to install another Java environment, you can download the ZIP file from the Maven repository.\n\nThe repository contains the `jamal.sh` shell script that can be used to start Jamal from the command line.\nIt assumes that the libraries are already installed in the local Maven repository.\nAfter that, you can type:\n\n  ./jamal.sh\n\nthat will show you a short usage message:\n\n[source,text]\n----\nUsage: jamal [options] input output\n  -help                      help\n  -shcnf                     show the configuration values from ~/.jamal/settings.(properties|xml)\n  -version                   display version\n  -verbose                   print out the conversions\n  -open=\u003cmacroOpen\u003e          the macro opening string\n  -close=\u003cmacroClose\u003e        the macro closing string\n  -T7                        use {% and %} as macro opening and closing\n  -depth=\u003cdepth\u003e             directory traversal depth, default is infinite\n  -debug=\u003cdebug\u003e             type:port, http:8080 by default when the value is skipped\n  -include=\u003cinclude\u003e         file name regex pattern to include into the processing\n  -exclude=\u003cexclude\u003e         file name regex pattern to exclude from the processing\n  -source=\u003csourceDirectory\u003e  source directory to start the processing\n  -target=\u003ctargetDirectory\u003e  target directory to create the output\n  -from=\u003cregex\u003e              pattern for the file name transformation.\n  -to=\u003creplacement\u003e          replacement for the file name transformation.\n  -dry-dry-run               run dry, do not execute Jamal\n  -dry-run                   run dry, do not write result to output file\n  -docx                      treat the input as a docx, Microsoft Word file\n  -jamalize                  create the .asciidoctor/lib directory and download the Jamal Asciidoctor extension\n                             Use together with -version=M.m.p to specify which version to use if different from current\n\n\n----\n\nFor more information about the command line version, read the link:jamal-cmd/README.adoc[documentation].\n\n\n[[MavenPlugin]]\n==== Maven Plugin\n\nYou can start Jamal from Maven as a plugin.\nThe plugin is available in the Maven Central repository.\n\nTo do that, you must have Maven installed.\nHaving that, you can issue the command:\n\n[source]\n----\nmvn com.javax0.jamal:jamal-maven-plugin:2.8.3-SNAPSHOT:jamal\n----\n\nif you have a `pom.xml` file in your directory.\n\nIf you do not have one, then read the documentation of the Jamal Maven plugin at\nlink:jamal-maven-plugin/README.adoc[Jamal Maven Plugin README].\nIt is short and straightforward.\n\n[[MavenExtension]]\n==== Maven Extension\n\nYou can use Jamal macros to maintain your Maven POM files.\nMove the content of the POM XML into the file `pom.jam` and extend it freely with Jamal macros.\nCreate a `.mvn` directory with an `extensions.xml` file in your project root.\n\n[source,xml]\n----\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cextensions\u003e\n    \u003cextension\u003e\n        \u003cgroupId\u003ecom.javax0.jamal\u003c/groupId\u003e\n        \u003cartifactId\u003ejamal-maven-extension\u003c/artifactId\u003e\n        \u003cversion\u003e2.8.3-SNAPSHOT\u003c/version\u003e\n    \u003c/extension\u003e\n\u003c/extensions\u003e\n----\n\nNext time you start Maven, it will include Jamal in the processing chain.\nIt will also generate the `pom.xml` files from the `pom.jam` files, so your IDE and other tools that depend on the XML format keep working.\n\nFor more information about the Maven extension, read the link:jamal-maven-extension/README.adoc[documentation].\n\n==== Starting with JBang\n\nJBang (https://www.jbang.dev) is a popular command-line tool that eases the startup of Java applications.\nJamal can be started using JBang.\nThis is the recommended way to run Java from the command line if you have limited experience with Java.\nWhen running Jamal using JBang, JBang will install everything that is needed to execute Jamal in a clean and non-intrusive way.\n\nJBang installation is described on the documentation link:https://www.jbang.dev/documentation/guide/latest/installation.html[page] of JBang.\n\nTo start Jamal when you have J\n\nBang installed on your machine, type:\n\n[source,bash]\n----\njbang jamal@verhas ... options ...\n----\n\nThis command will invoke the command line version automatically.\nThe syntax and meaning of the options are the same as in the case of the command line version.\nThis startup also loads all the safe Jamal extensions, including `snippet`, and `debug` and some others.\n\nIf you want to see the exact list of the modules this startup loads, have a look at the link:jbangstarter.java[starter] file.\n\n[NOTE]\n====\nIf you have used Jamal with JBang before, then JBang will store its catalog file in the local cache.\nWhen you start Jamal using `jbang jamal@verhas ...` and you see an old version starting, then delete the file\n\n```\n~/.jbang/cache/urls/d917b991facb86b9860fa179df2c804fc2090cc76a83fb15b49f47cc2e885f7c/jbangstarter.java\n```\n\nAfter that, you can start JBang again.\nIt will download the new catalog, always pointing to the latest release.\nYou will find the command that deletes this file in the root of the project in the shell script `jbang-cache-evict`.\n====\n\n[[ASCIIDOC]]\n=== IntelliJ, AsciidocFx\n\nUsing Jamal in IntelliJ together with the Asciidoctor plugin is fairly easy.\nAll you have to do is download a ZIP file from the Maven repository and explode it into a directory.\nThe details are described in the link:jamal-asciidoc/README.adoc[documentation].\n\nWhen the installation is done, all you need to do is start IntelliJ and open the project.\nYou can edit your AsciiDoc files, and the plugin will automatically invoke Jamal to process the macros.\n\nIf you want to use AsciidocFX, the same package should be used.\nThe installation is similar, downloading the ZIP file and extracting it to a directory.\nThe detailed documentation is in the link:jamal-asciidoc/README.adoc[documentation].\n\n\n== Getting Started / Quick Start [[GS]]\n\n\n\nYou can start using Jamal in five minutes as described in link:documentation/TUTORIAL-5min.adoc[the tutorial], __\"Starting with Jamal in 5 minutes\"__.\n\n\n== Configuration [[Configuration]]\n\n\n\nJamal has many configuration parameters, but each of these has reasonable default values.\nIt means that you do not need to configure Jamal before using it.\nConfiguration is needed only when you want to change some of the default values or use a macro package that, without configuration, could pose a security risk.\n\nConfiguration values can be set in the following ways:\n\n. Using system properties\n. Using environment variables\n. Using a configuration file in the user's home directory (`~/.jamal`)\n\nThe configuration values are searched for in this order.\nDifferent macros use different configuration keys.\nThey are documented along with the macro documentation.\n\nThe environment variables and their meanings are documented in their\nlink:./documentation/ENVIRONMENT_VARIABLES.adoc[documentation].\n\n\n== Features [[Features]]\n\n\n\nJamal is a meta markup language that extends existing markup languages in a transparent way.\nThe language is designed so that it will not interfere with any existing or future markup.\n\nimage::text2text.png[align=center]\n\nThe original markup, for example, AsciiDoc or Markdown, is responsible for formatting and semantic definition of the text.\nJamal will do the extra task, which is not or in some cases only partially supported by the document markup.\nWithout Jamal or some other similar tools, these tasks are performed manually.\n\nJamal can\n\n* collect information from source code and other non-document files,\n\n* transform the collected information to fit\n\n** the document markup,\n** the document format, and\n** the document semantics.\n\nJamal can include other files, parts of files, number the included lines, filter lines, replace parts of the lines, reorder lines, and many other things as needed.\n\n.Philosophy\n\u003e When information exists in the documented system or in the documentation, it must not be manually copied.\nThe copy and the transformation of the information must be automated.\n\nJamal is implemented in Java.\nYou can write user-defined macros in Jamal itself and built-in macros in Java, Kotlin, or other JVM languages.\n\nYou can execute Jamal from Maven, Javadoc, CLI, AsciiDocFX, IntelliJ, and other applications.\nJamal is extensible with multiple different SPIs.\nOne such SPI is the debugging interface.\nThe library includes a debugger that you can use via a React.js web client to debug the macro evaluations step-by-step.\n\nThe library comes with more than 200 macros for different purposes.\nThe macros are grouped into modules.\nThe largest module is the document maintenance module (snippet macros), but there are modules to handle\n\n* JSON,\n\n* YAML,\n\n* XML, and other data formats.\n\nThe use of Jamal makes it possible to include automatically generated images, for example, from PlantUML, Graphviz, or other tools into any markup-formatted document.\nYou can also include programmatic formatting and content calculation using Groovy, Ruby, and other languages.\n\n\n== Contributing [[Contributing]]\n\n\n\nJamal is an open-source project, and the developers welcome any contribution.\nWe treat all suggestions, requests, comments, or any other contribution with respect.\n\n=== Use and Feedback\n\nFirst and foremost, you can contribute by using Jamal and giving feedback.\nStart using it and tell us what you like and what you do not like.\nA program without users is not a program.\nIf you use Jamal, you are a contributor, and if you wish, we will include you as a reference in the documentation.\n\n=== Documentation\n\nYou can contribute to Jamal by reading the documentation.\nIf you find a typo, a mistake, or something that is not clear, please tell us.\nThe best way is to fork the project, fix the documentation, and send us a pull request.\nEven a single character correction is welcome as a full-blown pull request.\n\nYou can also write documentation.\nWriting documentation is a huge task, and we are happy to accept any help.\nWe are gravely missing, for example, \"How to\" tutorials.\nWhy?\nBecause as developers, we develop Jamal first and our use is limited to the use cases we have.\nWe are not using Jamal in the same way as you do.\n\nEvery use is different, write about it.\n\nJamal supports the JSR223 standard.\nThat way, Jamal can be used in any JSR223 compliant application that may need scripting.\nThe macro opening and closing strings are `{` and `}` in this case unless the script attributes `open` and `close` are set.\nScript bindings are put into Jamal macros and are loaded from Jamal macros after execution.\nWe would love a tutorial describing this feature.\n\n=== Articles\n\nIf you find Jamal fascinating, you can write an article about it.\nWe have experience writing and publishing articles, and we can help you.\nWe also write articles, but we cannot write your article.\n\nHelp us spread the word.\n\n=== Conference\n\nTalk about Jamal at conferences.\nGive a talk or just mention it in your presentation.\nOr just mention it at the coffee break or other social events.\n\n=== Find bugs\n\nIf something does not work as you expect, please\n\n tell us.\nIt may be a code bug, or it may be a documentation bug.\n\nIt is NEVER a user error.\nIf it works as _we_ expect and not as _you_ expect, then it is a bug in the documentation.\n\nUse the GitHub issue tracker to report bugs.\nIf you can locate the bug in the code and have a suggestion to fix it, then you can also send us a pull request.\n\n=== Suggest Features\n\nIf you miss a feature, please tell us.\nWe will consider it, and if it is a good idea, we will implement it.\nIf you can implement it, then send us a pull request.\n\n=== Create Macro Libraries\n\nJamal can be extended with new macros.\nCreate your own macros for your own use.\nIf you think that your macros are useful for others, then create a new module and publish it.\nWe will be happy to reference it in the Jamal project.\n\n\n== Documentation [[Documentation]]\n\n\n\nSince Jamal is a complex program, the documentation is split into several parts.\nThe modules, each has its documentation in the form of a README file in the module directory.\nJamal is eating its own dog food, so the documentation is written in Jamal and AsciiDoc.\n\nHere we will link the different documentation parts.\n\n=== Core Macros\n\nThe core built-in macros are part of the core package.\nThey contain those essential macros that are vital for the working and use of Jamal.\nThese macros are documented in their separate documentation each.\n\nThey are\n\n* link:documentation/macros/try.adoc[`try.adoc`]\n\n* link:documentation/macros/for.adoc[`for.adoc`]\n\n* link:documentation/macros/define.adoc[`define.adoc`]\n\n* link:documentation/macros/end.adoc[`end.adoc`]\n\n* link:documentation/macros/if.adoc[`if.adoc`]\n\n* link:documentation/macros/error.adoc[`error.adoc`]\n\n* link:documentation/macros/block.adoc[`block.adoc`]\n\n* link:documentation/macros/begin.adoc[`begin.adoc`]\n\n* link:documentation/macros/script.adoc[`script.adoc`]\n\n* link:documentation/macros/verbatim.adoc[`verbatim.adoc`]\n\n* link:documentation/macros/escape.adoc[`escape.adoc`]\n\n* link:documentation/macros/nullmacro.adoc[`nullmacro.adoc`]\n\n* link:documentation/macros/export.adoc[`export.adoc`]\n\n* link:documentation/macros/options.adoc[`options.adoc`]\n\n* link:documentation/macros/evaluation_order.adoc[`evaluation_order.adoc`]\n\n* link:documentation/macros/macro.adoc[`macro.adoc`]\n\n* link:documentation/macros/debug.adoc[`debug.adoc`]\n\n* link:documentation/macros/import.adoc[`import.adoc`]\n\n* link:documentation/macros/comment.adoc[`comment.adoc`]\n\n* link:documentation/macros/log.adoc[`log.adoc`]\n\n* link:documentation/macros/jshell.adoc[`jshell.adoc`]\n\n* link:documentation/macros/env.adoc[`env.adoc`]\n\n* link:documentation/macros/use.adoc[`use.adoc`]\n\n* link:documentation/macros/tmp.adoc[`tmp.adoc`]\n\n* link:documentation/macros/sep.adoc[`sep.adoc`]\n\n* link:documentation/macros/ident.adoc[`ident.adoc`]\n\n* link:documentation/macros/catch.adoc[`catch.adoc`]\n\n* link:documentation/macros/include.adoc[`include.adoc`]\n\n* link:documentation/macros/undefine.adoc[`undefine.adoc`]\n\n* link:documentation/macros/defer.adoc[`defer.adoc`]\n\n* link:documentation/macros/require.adoc[`require.adoc`]\n\n* link:documentation/macros/eval.adoc[`eval.adoc`]\n\n\nThere are two special user-defined macros, `output:writable` and `output:charset`.\nThese can control the output file creation.\nNote that this is not a core feature of Jamal, but most current embeddings (AsciiDoc, Maven plugin, and command line) support these macros.\n\nBy default, the generated file is not writable.\nThis is to prevent accidental editing of the generated files.\nMany times the generated files are stored along with the Jamal files, and it is an easy mistake to edit the generated file.\nTo prevent this, the generated file is read-only by default.\n\nThere are cases when the output has to be writable.\nAn example is the live template XML file that cannot be handled properly by IntelliJ if it is read-only.\nIf the value of the macro `output:writable` is `true`, then the generated file will be writable.\n\nThe macro `output:charset` can be used to set the character set of the generated file.\nThe default value is UTF-8.\n\nNote that even if you set the character set to `UTF-16LE`, the generated file will not contain the BOM.\n\n=== Applications, Embedding\n\n* link:./jamal-asciidoc/README.adoc[Jamal AsciiDoc Documentation], How to configure and use Jamal to edit AsciiDoc files using the IntelliJ editor in a WYSIWYG way, or the AsciiDocFX editor.\n* link:./jamal-doclet/README.adoc[Jamal Doclet Documentation], How to use Jamal in Javadoc.\n* link:./jamal-maven-plugin/README.adoc[Jamal Maven Plugin README], How to use Jamal as a Maven plugin.\n* link:./jamal-maven-extension/README.adoc[Jamal Maven Extension README], How to use Jamal as a Maven extension.\n* link:./documentation/JAMAL_API.adoc[Jamal API Documentation], How to use Jamal as a Java library.\n\n=== Debugger\n\nThe debugger is a web-based, interactive tool using React.js.\nThere is no separate documentation describing where to click and how to use it.\nThe existing documentation describes the debugging architecture and how to start Jamal in debug mode.\n\nAnyway, here is a screenshot of the debugger in action:\n\nimage::jamaldebugger2559x1089.png[]\n* link:./jamal-debug/README.adoc#[Debugger Technical Documentation]\n\n=== Programming Language Modules\n\n\n* link:./jamal-ruby/README.adoc#[Ruby Module README], How to use Ruby code in your Jamal source\n* link:./jamal-groovy/README.adoc#[Groovy Module README], How to use Groovy code in your Jamal source\n* link:./jamal-scriptbasic/README.adoc#[ScriptBasic Module README], How to use ScriptBasic code in your Jamal source\n* link:./jamal-prog/README.adoc#[Prog Module README], How to use Prog code in your Jamal source is a simple BASIC-like language tightly integrated with Jamal.\n\n=== Other External Modules\n\n* link:./jamal-io/README.adoc[Io Module README], How to read and write external files from Jamal macros\n* link:./jamal-jamal/README.adoc[Jamal Jamal Module README], How to use Jamal inside Jamal as an embedded language\n* link:./jamal-markdown/README.adoc[Jamal Markdown Module README], Convert markdown to HTML, mainly usable together with the Jamal Doclet to have Markdown in Javadoc\n* link:./jamal-mock/README.adoc[Jamal Mock Module README], Mock built-in macros to test macros that are to run in a specific environment\n* link:./jamal-snippet/README.adoc[Jamal Snippet Module README], Use snippets to compile your documentation\n* link:./jamal-yaml/README.adoc[Jamal Yaml Module README], Use data from Yaml files in your macros and use macros in your Yaml files\n* link:./jamal-json/README.adoc[Jamal JSON Module README], Use data from JSON files in your macros and use macros in your JSON files\n* link:./jamal-assertions/README.adoc[Jamal Assertions Module README], contains macros to make assertions to ensure the consistency of your documentation\n* link:./jamal-word/README.adoc[DOCX Word Processing README], describes the Jamal Microsoft Word Processing module and the macros that are specific to DOCX processing\n\n=== Test Support\n\n* link:./jamal-testsupport/README.adoc[Jamal Test Module README], Use this module to test your own Java or Kotlin implemented macros.\n\n\n== License [[License]]\n\n\n\nJamal is distributed under the Apache 2.0 license.\n\n\n== Changelog [[Changelog]]\n\n\n\nJamal uses GitHub.\nThe changelog is maintained online on the link:https://github.com/verhas/jamal/releases[GitHub releases page].\nThere is also a link:RELEASES.adoc[local copy] of the release notes.\n\n\n== Roadmap [[Roadmap]]\n\n\n\nThe roadmap is maintained in the document: link:ROADMAP.adoc[ROADMAP].\nIt is more like a collection of ideas and plans than a strict roadmap.\n\n\n== Support [[Support]]\n\n\n\nJamal is an open-source project and is currently not backed by any company.\n\n\n== FAQ [[FAQ]]\n\n\n\nSee the separate document: link:FAQ.adoc[FAQ].\n\n\n== Maintenance of this document [[Maintenance]]\n\n\n\nThe documents of this project are formatted as AsciiDoc documents with Jamal meta markup.","funding_links":[],"categories":["项目","模板引擎","Projects"],"sub_categories":["模板引擎","Template Engine"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverhas%2Fjamal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fverhas%2Fjamal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverhas%2Fjamal/lists"}