mdast-util-caml
v0.0.10-md
Published
Converts a `micromark` token stream into an `mdast` syntax tree.
Downloads
22
Maintainers
Readme
mdast-util-caml
Extension for mdast-util-from-markdown
and
mdast-util-to-markdown
to support CAML attributes. Converts the token stream produced by micromark-extension-caml
into an abstract syntax tree.
Note that this extension only parses the input -- it is up to you to track and store attribute metadata.
Using remark
? You probably shouldn’t use this package directly, but instead use remark-caml
. See micromark-extension-caml
for a full description of the supported syntax.
🕸 Weave a semantic web in your 🎋 WikiBonsai digital garden.
Install
This package is ESM only. Install mdast-util-caml
on npm
.
npm install mdast-util-caml
Usage
Markdown to AST
import fromMarkdown from 'mdast-util-from-markdown';
import { camlSyntax } from 'micromark-extension-caml';
import { fromMarkdownCaml } from 'mdast-util-caml';
let ast = fromMarkdown(':attrtype::value\n', {
extensions: [camlSyntax()],
mdastExtensions: [fromMarkdownCaml]
})
...is first converted to a data node which takes the form below:
{
"type": "attrbox-data",
"data": {
"items": {
"attrtype": [
{
"type": "string",
"value": "string",
"string": "string",
}
],
},
}
}
Data nodes like this are then extracted after render, are merged, and a single attrbox node is generated and inserted at the top of the document in the abstract syntax tree. It has the form below, where:
data.items
contains the original markdown source parsed into the individual components of the caml attr.
{
"type": "attrbox",
"data": {
"items": {
"attrtype": [
{
"type": "string",
"value": "string",
"string": "string",
}
],
},
"hName": "aside",
"hProperties": {
"className": ["attrbox"],
},
},
"children": [
{
"type": "attrbox-title",
"data": {
"hName": "span",
"hProperties": {
"className": ["attrbox-title"],
},
}
},
{
"type": "attrbox-list",
"children": [{
"type": "attr-key",
"data": {
"hName": "dt"
},
"children": [{
"type": "text",
"value": "attrtype",
}],
},
{
"type": "attr-val",
"data": {
"hName": "dd"
},
"children": [{
"type": "text",
"value": "value",
}],
},
],
"data": {
"hName": "dl"
},
},
],
}
Options
let opts = {
attrs: {
render: boolean;
title: string;
css: {
attr: string;
attrbox: string;
attrboxTitle: string;
// [[wikiattrs]]-related
invalid: string;
wiki: string;
}
}
};
### AST to Markdown
Taking the `ast` from the previous example,
```js
import fromMarkdown from 'mdast-util-from-markdown'
import { camlToMarkdown } from 'mdast-util-caml'
let markdownString = toMarkdown(ast, {
extensions: [camlToMarkdown(defaultOptions)]
}).trim();
The result will be:
:attrtype::value
Options
let opts = {
attrs: {
enable: true,
toMarkdown: {
format: 'none',
listKind: 'mkdn',
prefixed: true,
}
}
};
### Options Descriptions
See [`remark-caml` readme](https://github.com/wikibonsai/remark-caml#options-descriptions) for option descriptions.