mdast-util-caml

0.0.10-md • Public • Published

mdast-util-caml

A WikiBonsai Project NPM package

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.

Package Sidebar

Install

npm i mdast-util-caml

Weekly Downloads

0

Version

0.0.10-md

License

GPL-3.0

Unpacked Size

69.9 kB

Total Files

8

Last publish

Collaborators

  • manunamz