Command Line
Install the @accordproject/markdown-cli
npm package to access the Markdown Transform command line interface (CLI). After installation you can use the markus
command and its sub-commands as described below.
To install the Markdown CLI:
npm install -g @accordproject/markdown-cli
Usage
markus
is a command line tool to debug and use markdown transformations.
markus <cmd> [args]
Commands:
markus transform transform between two formats
Options:
--version Show version number [boolean]
--verbose, -v [default: false]
--help Show help [boolean]
markus transform
The markus transform
command lets you transform between any two of the supported formats
markus transform
transform between two formats
Options:
--version Show version number [boolean]
--verbose, -v verbose output [boolean] [default: false]
--help Show help [boolean]
--input path to the input [string]
--from source format [string] [default: "markdown"]
--to target format [string] [default: "commonmark"]
--via intermediate formats [array] [default: []]
--roundtrip roundtrip transform [boolean] [default: false]
--output path to the output file [string]
--model array of concerto model files [array]
--template template grammar [string]
--contract contract template [boolean] [default: false]
--currentTime set current time [string] [default: null]
--plugin path to a parser plugin [string]
--sourcePos enable source position [boolean] [default: false]
--offline do not resolve external models [boolean] [default: false]
Example
For example, you can use the transform
command on the README.md
file from the Hello World template:
markus transform --input README.md
returns:
{
"$class": "org.accordproject.commonmark.Document",
"xmlns": "http://commonmark.org/xml/1.0",
"nodes": [
{
"$class": "org.accordproject.commonmark.Heading",
"level": "1",
"nodes": [
{
"$class": "org.accordproject.commonmark.Text",
"text": "Hello World"
}
]
},
{
"$class": "org.accordproject.commonmark.Paragraph",
"nodes": [
{
"$class": "org.accordproject.commonmark.Text",
"text": "This is the Hello World of Accord Project Templates. Executing the clause will simply echo back the text that occurs after the string "
},
{
"$class": "org.accordproject.commonmark.Code",
"text": "Hello"
},
{
"$class": "org.accordproject.commonmark.Text",
"text": " prepended to text that is passed in the request."
}
]
}
]
}
--from
and --to
options
You can indicate the source and target formats using the --from
and --to
options. For instance, the following transforms from markdown
to html
:
markus transform --from markdown --to html
returns:
<html>
<body>
<div class="document">
<h1>Hello World</h1>
<p>This is the Hello World of Accord Project Templates. Executing the clause will simply echo back the text that occurs after the string <code>Hello</code> prepended to text that is passed in the request.</p>
</div>
</body>
</html>
--via
option
When there are several paths between two formats, you can indicate an intermediate format using the --via
option. The following transforms from markdown
to html
via slate
:
markus transform --from markdown --via slate --to html
returns:
<html>
<body>
<div class="document">
<h1>Hello World</h1>
<p>This is the Hello World of Accord Project Templates. Executing the clause will simply echo back the text that occurs after the string <code>Hello</code> prepended to text that is passed in the request.</p>
</div>
</body>
</html>
--roundtrip
option
When the transforms allow, you can roundtrip between two formats, i.e., transform from a source to a target format and back to the source target. For instance, the following transform from markdown
to slate
and back to markdown:
markus transform --from markdown --to slate --input README.md --roundtrip
returns:
Hello World
====
This is the Hello World of Accord Project Templates. Executing the clause will simply echo back the text that occurs after the string `Hello` prepended to text that is passed in the request.
:::
Roundtripping might result in small changes in the source markdown, but should always be semantically equivalent. In the above example the source ATX heading # Hello World
has been transformed into a Setext heading equivalent.
:::
--model
--contract
options
When handling TemplateMark, one has to provide a model using the --model
option and whether the template is a clause (default) or a contract (using the --contract
option).
For instance the following converts markdown with the template extension to a TemplateMark document object model:
markus transform --from markdown_template --to templatemark --model model/model.cto --input text/grammar.tem.md
returns:
{
"$class": "org.accordproject.commonmark.Document",
"xmlns": "http://commonmark.org/xml/1.0",
"nodes": [
{
"$class": "org.accordproject.templatemark.ClauseDefinition",
"name": "top",
"elementType": "org.accordproject.helloworld.HelloWorldClause",
"nodes": [
{
"$class": "org.accordproject.commonmark.Paragraph",
"nodes": [
{
"$class": "org.accordproject.commonmark.Text",
"text": "Name of the person to greet: "
},
{
"$class": "org.accordproject.templatemark.VariableDefinition",
"name": "name",
"elementType": "String"
},
{
"$class": "org.accordproject.commonmark.Text",
"text": "."
},
{
"$class": "org.accordproject.commonmark.Softbreak"
},
{
"$class": "org.accordproject.commonmark.Text",
"text": "Thank you!"
}
]
}
]
}
]
}
--template
option
Parsing or drafting contract text using a template can be done using the --template
option, usually with the corresponding --model
option to indicate the template model.
For instance, the following parses a markdown with CiceroMark extension to get the correspond contract data:
markus transform --from markdown_cicero --to data --template text/grammar.tem.md --model model/model.cto --input text/sample.md
returns:
{
"$class": "org.accordproject.helloworld.HelloWorldClause",
"name": "Fred Blogs",
"clauseId": "fc345528-2604-420c-9e02-8d85e03cb65b"
}