{"id":17124915,"url":"https://github.com/shellyln/menneu","last_synced_at":"2026-02-27T15:34:14.873Z","repository":{"id":32959706,"uuid":"147861194","full_name":"shellyln/menneu","owner":"shellyln","description":"Component-based extensible document processor","archived":false,"fork":false,"pushed_at":"2023-01-06T01:35:12.000Z","size":2090,"stargazers_count":7,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-01T11:06:19.040Z","etag":null,"topics":["barcode","lisp","lsx","markdown","pdf","qr","qrcode","react","redagate"],"latest_commit_sha":null,"homepage":"https://shellyln.github.io/menneu/playground.html","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shellyln.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-07T18:35:09.000Z","updated_at":"2024-05-19T05:54:02.000Z","dependencies_parsed_at":"2023-01-14T23:00:25.219Z","dependency_job_id":null,"html_url":"https://github.com/shellyln/menneu","commit_stats":null,"previous_names":[],"tags_count":79,"template":false,"template_full_name":null,"purl":"pkg:github/shellyln/menneu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shellyln%2Fmenneu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shellyln%2Fmenneu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shellyln%2Fmenneu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shellyln%2Fmenneu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shellyln","download_url":"https://codeload.github.com/shellyln/menneu/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shellyln%2Fmenneu/sbom","scorecard":{"id":817591,"data":{"date":"2025-08-11","repo":{"name":"github.com/shellyln/menneu","commit":"1c0e67b1ab70e762f8bac7e37d1ed43c00a63e4c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":2,"reason":"dependency not pinned by hash detected -- score normalized to 2","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/shellyln/menneu/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/shellyln/menneu/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/shellyln/menneu/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/shellyln/menneu/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/shellyln/menneu/test.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/test.yml:26","Warn: npmCommand not pinned by hash: .github/workflows/test.yml:48","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   2 out of   4 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"36 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-7wwv-vh3v-89cq","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-6vfc-qv3f-vr6c","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-8hfj-j24r-96c4","Warn: Project is vulnerable to: GHSA-wc69-rhjr-hc9g","Warn: Project is vulnerable to: GHSA-r683-j2x4-v87g","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-g4rg-993r-mgx7","Warn: Project is vulnerable to: GHSA-4rq4-32rv-6wp6","Warn: Project is vulnerable to: GHSA-64g7-mvw6-v9qj","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-cf4h-3jhx-xvhq","Warn: Project is vulnerable to: GHSA-hc6q-2mpp-qw7j","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-6fc8-4gx4-v693","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T14:35:14.861Z","repository_id":32959706,"created_at":"2025-08-23T14:35:14.862Z","updated_at":"2025-08-23T14:35:14.862Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29901751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T14:46:13.553Z","status":"ssl_error","status_checked_at":"2026-02-27T14:46:10.522Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["barcode","lisp","lsx","markdown","pdf","qr","qrcode","react","redagate"],"created_at":"2024-10-14T18:43:40.752Z","updated_at":"2026-02-27T15:34:14.854Z","avatar_url":"https://github.com/shellyln.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ménneu\n## Component-based extensible document processor\n\n✒️Render the { markdown | lsx | html } document templates into a ✨beautiful✨ { pdf | html | image }📑📊📈📰📄 formats.\n\n[![Ménneu](https://shellyln.github.io/assets/image/ménneu-logo.svg)](https://github.com/shellyln/menneu/)\n\n\n\n[![npm](https://img.shields.io/npm/v/menneu.svg)](https://www.npmjs.com/package/menneu)\n[![GitHub release](https://img.shields.io/github/release/shellyln/menneu.svg)](https://github.com/shellyln/menneu/releases)\n[![.github/workflows/test.yml](https://github.com/shellyln/menneu/workflows/.github/workflows/test.yml/badge.svg)](https://github.com/shellyln/menneu/actions)\n[![GitHub forks](https://img.shields.io/github/forks/shellyln/menneu.svg?style=social\u0026label=Fork)](https://github.com/shellyln/menneu/fork)\n[![GitHub stars](https://img.shields.io/github/stars/shellyln/menneu.svg?style=social\u0026label=Star)](https://github.com/shellyln/menneu)\n\n\nYou can easily build the complex documents written in [Markdown](https://github.com/markdown-it/markdown-it), HTML and [LSX](https://github.com/shellyln/liyad#what-is-lsx)\nthat including images, [charts](https://www.chartjs.org/), [UML diagrams](http://plantuml.com/), [barcodes and 2d codes (QR Code)](https://github.com/shellyln/red-agate/tree/master/packages/red-agate-barcode).  \nAnd get the output as a PDF, PNG and JPEG rendered by [Puppeteer](https://github.com/GoogleChrome/puppeteer), or the HTML that packed into the single file.\n\nFurthermore, you can insert the data from the file into the document with the control statements.\n\n----\n## Examples\n\n\u003ctable align=\"center\"\u003e\n  \u003ctbody\u003e\n    \u003ctr align=\"center\"\u003e\n      \u003ctd style=\"width:33%\"\u003e\n        \u003ca href=\"https://shellyln.github.io/menneu/assets/pdf/example-markdown.pdf\"\u003e\n          \u003cimg src=\"https://shellyln.github.io/menneu/assets/pdf/example-markdown.png\" style=\"max-width:100%;\"\u003e\n        \u003c/a\u003e\n        Markdown Demo\n        \u003ca href=\"https://github.com/shellyln/menneu/tree/master/examples/markdown-demo\"\u003e\n          source\n        \u003c/a\u003e\n        /\n        \u003ca href=\"https://shellyln.github.io/menneu/assets/pdf/example-markdown.pdf\"\u003e\n          pdf\n        \u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd width=\"33%\"\u003e\n        \u003ca href=\"https://shellyln.github.io/menneu/assets/pdf/example-bill.pdf\"\u003e\n          \u003cimg src=\"https://shellyln.github.io/menneu/assets/pdf/example-bill.png\" style=\"max-width:100%;\"\u003e\n        \u003c/a\u003e\n        Billing Statement\n        \u003ca href=\"https://github.com/shellyln/menneu/tree/master/examples/billing\"\u003e\n          source\n        \u003c/a\u003e\n        /\n        \u003ca href=\"https://shellyln.github.io/menneu/assets/pdf/example-bill.pdf\"\u003e\n          pdf\n        \u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd width=\"33%\"\u003e\n        \u003ca href=\"https://shellyln.github.io/menneu/assets/pdf/example-html.pdf\"\u003e\n          \u003cimg src=\"https://shellyln.github.io/menneu/assets/pdf/example-html.png\" style=\"max-width:100%;\"\u003e\n        \u003c/a\u003e\n        HTML Demo\n        \u003ca href=\"https://github.com/shellyln/menneu/tree/master/examples/html-demo\"\u003e\n          source\n        \u003c/a\u003e\n        /\n        \u003ca href=\"https://shellyln.github.io/menneu/assets/pdf/example-html.pdf\"\u003e\n          pdf\n        \u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd style=\"text-align:center\"\u003e\n        Testing the basic and extended markdown syntaxes.\n      \u003c/td\u003e\n      \u003ctd style=\"text-align:center\"\u003e\n        Reporting example that markuped up with Lisp LSX syntax.\n      \u003c/td\u003e\n      \u003ctd style=\"text-align:center\"\u003e\n        Testing the html template that embedding Lisp LSX.\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## Real world examples\n* [MDNE - Markdown Neo Edit](https://github.com/shellyln/mdne-electron) \n    * A simple markdown and code editor powered by Markdown-it and Ace.\n        * [mdne-electron](https://github.com/shellyln/mdne-electron)\n            * Standalone offline desktop app for Windows/Mac/Linux.\n                * [Electron](https://electronjs.org/) app\n        * [mdne online](https://shellyln.github.io/mdne/)\n            * Online markdown editor for Chrome/Chromium Edge/Firefox.\n                * [PWA](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) (Progressive Web Apps)\n        * [mdne-sf](https://github.com/shellyln/mdne-sf)\n            * Edit Salesforce record's field. (browser app)\n            * Markdown preview Visualforce page example\n        * [mdne (mdne-classic)](https://github.com/shellyln/mdne)\n            * Offline desktop app for Google Chrome browser + Node.js.\n                * [Carlo](https://github.com/GoogleChromeLabs/carlo) app\n        * [mdne-for-kintone](https://github.com/shellyln/mdne-for-kintone)\n            * Edit kintone record's field. (browser app)\n* [Zirconia](https://github.com/shellyln/zirconia)\n    * Report rendering library for Salesforce LWC and Visualforce.\n* [Ménneu Reporting App for kintone](https://github.com/shellyln/menneu-reporting-app-for-kintone)\n    * Create ✨beautiful✨ 📑📊reports📈📰 easily with Ménneu + kintone.  \n      You can easily build the complex documents written in Markdown,\n      HTML and LSX that including 🖼images, 📊charts, 🔷UML diagrams,\n      barcodes and 2d codes (QR Code).\n* [Kanban board for kintone](https://github.com/shellyln/kanban-board-for-kintone)\n\n----\n\n## Getting started\n\n### Use CLI:\n\ninstall via NPM:\n```bash\n$ npm install -g menneu\n```\n\nand run Ménneu:\n```bash\n$ menneu README.md --raw -o README.pdf\n```\n\n### Add shortcuts to Windows file explorer right-click 'Send to' menu\n##### Prerequirements\n```bash\n$ npm install -g menneu\n```\n##### Install\nDownload the source archive from [https://github.com/shellyln/menneu/archive/master.zip](https://github.com/shellyln/menneu/archive/master.zip) and extract it.\n\n```cmd\n\u003e cd menneu\\shell-ext\\windows\n\u003e make-sendto-shortcuts.cmd\n```\n\n### Use APIs:\n\ninstall via NPM:\n```bash\n$ npm install menneu --save\n```\n\nand import Ménneu in your code:\n```ts\n// index.mjs\nimport './extension'; // * To import without using webpack,\n                      //   use node with the\n                      //   `--experimental-modules --no-warnings` options.\n                      // * If `node\u003e=12`, `--es-module-specifier-resolution=node`\n                      //   option is additionally required.\nimport { render } from 'menneu/modules';\nimport fs from 'fs';\nimport util from 'util';\nconst writeFileAsync = util.promisify(fs.writeFile);\n\n(async () =\u003e {\n    try {\n        const buf = await render('# Hello!', {}, {\n            rawInput: true,\n            inputFormat: 'md',\n            dataFormat: 'object',\n            outputFormat: 'pdf',\n        });\n        await writeFileAsync('./hello.pdf', buf);\n    } catch (e) {\n        console.log(e);\n    }\n})();\n```\n\n```ts\n// extension.js\nconst fs = require('fs');\n\nrequire.extensions['.css'] = function (module, filename) {\n    module.exports = fs.readFileSync(filename, 'utf8');\n};\n```\n\n\u003e NOTE: To build it, you should use `webpack` + `raw-loader` (or other packagers and/or plugins) to load CSS as string.   \n\u003e\n\u003e You can also import from the `.mjs` file on a node with the `--experimental-modules --no-warnings` options enabled,  \n\u003e and import `menneu/modules/*` paths.\n\u003e\u003e If you run it on `node\u003e=12`, `--es-module-specifier-resolution=node` option is additionally required.\n\nSee these [(1)](https://github.com/shellyln/menneu-api-usage-on-esm) [(2)](https://github.com/shellyln/mdne) examples.\n\n\n\u003e NOTICE:  \n\u003e Use with `webpack \u003e= 5`\n\u003e\n\u003e If you get the error:\n\u003e\n\u003e ```\n\u003e Module not found: Error: Can't resolve '(importing/path/to/filename)'\n\u003e in '(path/to/node_modules/path/to/dirname)'\n\u003e Did you mean '(filename).js'?`\n\u003e ```\n\u003e\n\u003e Add following setting to your `webpack.config.js`.\n\u003e\n\u003e ```js\n\u003e {\n\u003e     test: /\\.m?js/,\n\u003e     resolve: {\n\u003e         fullySpecified: false,\n\u003e     },\n\u003e },\n\u003e ```\n\u003e\n\u003e On `webpack \u003e= 5`, the extension in the request is mandatory for it to be fully specified\n\u003e if the origin is a '*.mjs' file or a '*.js' file where the package.json contains '\"type\": \"module\"'.\n\n\n\n### Use APIs on the browsers:\n\nInstall via NPM, or download UMD from [release](https://github.com/shellyln/menneu/releases) page.\n\n\u003e #### If you wish to use UMD single file on browser, Please write as below:\n\u003e * index.html\n\u003e     ```html\n\u003e     \u003c!DOCTYPE html\u003e\n\u003e     \u003chead\u003e\u003cmeta charset=\"UTF-8\"\u003e\n\u003e     \u003cscript src=\"./menneu.min.js\"\u003e\u003c/script\u003e\u003cscript\u003e\n\u003e     (async() =\u003e {\n\u003e         try {\n\u003e             const buf = await menneu.render('# Hello!', {}, {\n\u003e                 rawInput: true,\n\u003e                 inputFormat: 'md',\n\u003e                 dataFormat: 'object',\n\u003e                 outputFormat: 'html',\n\u003e             });\n\u003e             console.log((new TextDecoder).decode(buf));\n\u003e         } catch (e) {\n\u003e             console.log(e);\n\u003e         }\n\u003e     })();\n\u003e     \u003c/script\u003e\u003c/head\u003e\n\u003e     ```\n\n\u003e #### If you wish to use UMD single file on Node.js w/o installing react, Please write as below:\n\u003e * menneu-umd-bootstrap.js\n\u003e    ```js\n\u003e    // Usage: echo \"# Hello\" | node ./menneu-umd-bootstrap.js - -of html\n\u003e\n\u003e    const Module = require('module');\n\u003e    const loader = Module._load;\n\u003e    Module._load = (request, parent) =\u003e {\n\u003e        if (request === 'react' || request === 'react-dom' || request === 'react-dom/server') {\n\u003e            return ({});\n\u003e        }\n\u003e        return loader(request, parent);\n\u003e    };\n\u003e\n\u003e    const menneu = require('./menneu.min.js');\n\u003e    menneu.run();\n\u003e    ```\n\n----\n\n## Playground\n\nhttps://shellyln.github.io/menneu/playground.html\n\n\n## Express starter with the browser\n\n[Ménneu Markdown Notebook](https://github.com/shellyln/menneu-md-notebook)  \nEdit markdown locally w/o installing any apps.\n\n\n## GUI Editor\n\n[mdne - Markdown Neo Edit](https://www.npmjs.com/package/mdne)  \nA simple markdown and code editor powered by Ace and Carlo.\n\n----\n\n\n## CLI\n```\nmenneu -h\nmenneu --help\n\nmenneu InputFilePath [OPTIONS]\nmenneu - [OPTIONS]\n```\n\n* `InputFilePath`\n    * Path to input document template file.\n    * If `-` is set, read from `STDIN`.\n    * If `-i` or `--in` is set in the *OPTIONS*, *InputFilePath* points a path of data file.\n\n#### Options\n* `-h`, `--help`\n    * Show this help.\n* `-i` *InFilePath*, `--in` *InFilePath*\n    * *InFilePath*: Path to input document template file.\n* `-if` *InFormatName*, `--in-format` *InFormatName*\n    * *InFormatName* : `lsx` | `lisp` | `md` | `markdown` | `html` | `htm`\n    * Input document template file format.\n    * This format is set automatically from template file's extension.\n        * If it is not set, Defailt is `md`.\n* `--raw`\n    * Disable Lisp block expansion.\n        * This option can be set for `md` | `markdown` | `html` | `htm` .\n* `-c` *ConfigJsonOrJsPath*, `--config` *ConfigJsonOrJsPath*\n    * *ConfigJsonOrJsPath* : Path to `menneu.config.js` | `menneu.config.json` .\n    * Default is `menneu.config.js` | `menneu.config.json` that is in the same directory to input file.\n        * If no `menneu.config.js` | `menneu.config.json` files is in the same directory to input file,\n          use `menneu.config.js` | `menneu.config.json` in the current working directory.\n* `-df` *DataDormatName*, `--data-format` *DataDormatName*\n    * *DataDormatName* : `json` | `lisp`\n    * The file format of the data applied to the document template.\n    * This format is set automatically from data file's extension.\n        * If it is not set, defailt is `json`.\n* `-d` *DataPath*\n    * *DataPath* : Path to data file.\n* `-of` *OutFormatName*, `--out-format` *OutFormatName*\n    * *OutFormatName* : `html` | `pdf` | `png` | `jpeg`\n    * Output file format.\n    * This format is set automatically from output file's extension.\n        * If it is not set, defailt is `pdf`.\n* `-o` *OutPath*, `--out` *OutPath*\n    * *OutPath*: Path to output file.\n    * If this option is not present, it is output to `STDOUT`.\n* `-t` *TempDir*, `--tmpdir` *TempDir*\n    * *TempDir*: Path to temporary directory that to generate the temporary html file passing to the Puppeteer.\n* `-ti`, `--tmp-indir`\n    * Set *TempDir* to the parent directory of the input document file.\n        * It is default option.\n* `-tc`, `--tmp-cwd`\n    * Set *TempDir* to the current working directory.\n* `-to`, `--tmp-os`\n    * Set *TempDir* to the system temporary directory.\n* `-tm`, `--tmp-mem`\n    * No temporary directory is used. Pass a data URL to the Puppeteer.\n* `--dark-theme`\n    * Use dark theme to render markdown.\n* `--watch`\n    * Watch changes of the parent directory of `InputFilePath` forever.\n    * If changes are detected, update the output.\n\n\n----\n\n\n## Config file\n`.js` or `.json` are available.\n\n```js\nconst escapeHtml = (s) =\u003e s\n    .replace(/\u0026/g, \"\u0026amp;\")\n    .replace(/\u003c/g, \"\u0026lt;\")\n    .replace(/\u003e/g, \"\u0026gt;\")\n    .replace(/\"/g, \"\u0026quot;\")\n    .replace(/'/g, \"\u0026#39;\");\n\nmodule.exports = {\n    title: 'example',               // Document title of markdown.\n\n    // bodyStyle: '',               // \u003cbody\u003e style of markdown.\n    markdownBodyStyle:              // \"markdownBody\" \u003cdiv\u003e style of markdown.\n        'font-family: \"Yu Gothic Medium\", \"Microsoft JhengHei\", arial, sans-serif;',\n\n    // tocIncludeLevel: [1, 2],     // Headings levels to use (2 for h2:s etc)\n                                    //   https://github.com/Oktavilla/markdown-it-table-of-contents/blob/master/README.md#options\n\n    // rawInput: true,              // Disable Lisp block expansion.\n\n    // inputFormat: 'md',           // Input document template file format. (md | html | lsx)\n    // dataFormat: 'json',          // The file format of the data applied to the document template. (json | lisp)\n    // outputFormat: 'pdf',         // Output file format. (pdf | html | png | jpeg)\n\n    // darkTheme: true,             // Use dark theme to render markdown.\n\n    // launchOptions:               // Puppeteer's option. See \"puppeteer.launch(options)\".\n    //     { headless: false },     //   https://github.com/GoogleChrome/puppeteer/blob/v1.8.0/docs/api.md#puppeteerlaunchoptions\n    // navigateOptions: {},         // Puppeteer's option. See \"page.goto(url, options)\".\n                                    //   https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagegotourl-options\n    // imageOptions: {},            // Puppeteer's option. See \"page.screenshot([options])\".\n                                    //   https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagescreenshotoptions\n    pdfOptions: {                   // Puppeteer's option. See \"page.pdf(options)\".\n                                    //   https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagepdfoptions\n        width: '210mm',\n        height: '297mm',\n        printBackground: true,\n        landscape: false,\n        preferCSSPageSize: false,\n        displayHeaderFooter: true,\n        headerTemplate: `\n            \u003cdiv style=\"margin: 0mm auto -10mm; text-align: center; font-size: 9pt;\"\u003e\n                \u003cspan class=\"title\"\u003e\u003c/span\u003e\n            \u003c/div\u003e`,\n        footerTemplate: `\n            \u003cdiv style=\"margin: 10mm auto 0mm; text-align: center; font-size: 9pt;\"\u003e\n                \u003cspan class=\"pageNumber\"\u003e\u003c/span\u003e of \u003cspan class=\"totalPages\"\u003e\u003c/span\u003e\n            \u003c/div\u003e`,\n    },\n\n    globals: {                      // Lisp global variables.\n        \"$now\": () =\u003e (new Date).toLocaleDateString('en-US'),\n        \"$to-locale-string\": (...args) =\u003e args.slice(-1)[0].toLocaleString(...(args.slice(0, -1))),\n        \"$dir\": (...args) =\u003e console.dir(...args),\n        \"qwerty\": \"asdfgh\",\n    },\n\n    // noDefaultComponents: true,   // Disable default components.\n    components: {                   // Additional RedAgate components.\n                                    // See also https://github.com/shellyln/red-agate/tree/master/packages/red-agate\n        Greeting: (props) =\u003e `Hello, ${props.to}! ${props.children}`,\n    },\n\n    // noDefaultMarkdownPlugins:    // Disable default markdown-it plugins.\n    //     true,\n    // markdownPlugins:             // Additional markdown-it plugins.\n    //     [{ plugin: require('markdown-it-'), options: [] }],\n\n    markdownCustomContainers: [{    // See https://github.com/markdown-it/markdown-it-container\n        name: 'content',\n    }, {\n        name: 'spoiler',\n        validate: (params) =\u003e {\n            return params.trim().match(/^spoiler\\s+(.*)$/);\n        },\n        render: (tokens, idx) =\u003e {\n            const m = tokens[idx].info.trim().match(/^spoiler\\s+(.*)$/);\n            if (tokens[idx].nesting === 1) {\n                // opening tag\n                return '\u003cdetails\u003e\u003csummary\u003e' + escapeHtml(m[1]) + '\u003c/summary\u003e\\n';\n            } else {\n                // closing tag\n                return '\u003c/details\u003e\\n';\n            }\n        },\n    }],\n\n    // replacementMacros: [{\n    //     re: /\\!\\!\\!([\\s\\S]+?)\\!\\!\\!/g,\n    //     fn: 'lsx', // evaluate input as LSX script\n    // }, {\n    //     re: /\\$\\$\\$\\{(.)([\\s\\S]+?)\\}\\$\\$\\$/g,\n    //     fn: async (m, p0, p1) =\u003e\n    //         `\u003cspan style=\"background-color: green;\"\u003e\u003cstrong\u003e${p0}\u003c/strong\u003e${p1}\u003c/span\u003e`,\n    //     async: true,\n    // }, {\n    //     re: /\\$\\{(.)([\\s\\S]+?)\\}/g,\n    //     fn: (m, p0, p1) =\u003e\n    //         `\u003cspan style=\"background-color: pink;\"\u003e\u003cstrong\u003e${p0}\u003c/strong\u003e${p1}\u003c/span\u003e`,\n    // }],\n\n    // plantUmlServerUrl:           // markdown-it-plantuml server URL\n    //     'https://www.example.com/plantuml',\n    // tocIncludeLevel:             // markdown-it-table-of-contents TOC levels\n    //     [1, 2, 3],\n};\n```\n\nYou can also export configuration by using the function.\n```js\nmodule.exports = (env) =\u003e {\n    // env is following object:\n    // {\n    //     styles: {\n    //         normalizeCss:       string,\n    //         markdownCss:        string,\n    //         markdownDarkCss:    string,\n    //         highlightCss:       string,\n    //         paperCss:           string,\n    //     },\n    //     moment:                 object,\n    //     Liyad:                  object,\n    //     RedAgateUtil:           object,\n    //     RedAgateSvgCanvas:      object,\n    //     RedAgateMath:           object,\n    //     RedAgate:               object,\n    //     React:                  object,\n    //     ReactDom:               object,\n    //     components:             object,\n    //     highlightJs:            object,\n    //     markdownit:             object,\n    //     markdownitPlugins: {\n    //         markdownitContaier: object,\n    //         markdownitEmoji:    object,\n    //         markdownitSub:      object,\n    //         markdownitSup:      object,\n    //         markdownitIns:      object,\n    //         markdownitMark:     object,\n    //         markdownitCheckbox: object,\n    //         markdownitPlantuml: object,\n    //         markdownitMath:     object,\n    //         markdownitImsize:   object,\n    //         markdownitAnchor:   object,\n    //         markdownitToc:      object,\n    //         markdownitFootnote: object,\n    //         markdownitDeflist:  object,\n    //         markdownitAbbr:     object,\n    //     },\n    //     getMarkdownIt:          function,\n    //     getMarkdownRoot:        function,\n    // }\n\n    // The function should return the configuration object.\n    return {\n        ...\n    };\n};\n```\n\n----\n\n\n## Features\n\n### Render markdown into HTML and PDF.\n\nMarkdown is parsed into HTML by [markdown-it](https://github.com/markdown-it/markdown-it)\nand converting from HTML into PDF by [puppeteer](https://github.com/GoogleChrome/puppeteer) .\n\nFollowing markdown-it plugins are available by default:\n* [markdown-it-anchor](https://github.com/valeriangalliat/markdown-it-anchor)\n* [markdown-it-checkbox](https://github.com/mcecot/markdown-it-checkbox)\n* [markdown-it-container](https://github.com/markdown-it/markdown-it-container)\n* [markdown-it-emoji](https://github.com/markdown-it/markdown-it-emoji)\n* [markdown-it-imsize](https://github.com/tatsy/markdown-it-imsize)\n* [markdown-it-math](https://github.com/runarberg/markdown-it-math)\n* [markdown-it-plantuml](https://github.com/gmunguia/markdown-it-plantuml)\n* [markdown-it-table-of-contents](https://github.com/Oktavilla/markdown-it-table-of-contents)\n* [markdown-it-sub](https://github.com/markdown-it/markdown-it-sub)\n* [markdown-it-sup](https://github.com/markdown-it/markdown-it-sup)\n* [markdown-it-ins](https://github.com/markdown-it/markdown-it-ins)\n* [markdown-it-mark](https://github.com/markdown-it/markdown-it-mark)\n* [markdown-it-footnote](https://github.com/markdown-it/markdown-it-footnote)\n* [markdown-it-deflist](https://github.com/markdown-it/markdown-it-deflist)\n* [markdown-it-abbr](https://github.com/markdown-it/markdown-it-abbr)\n\nYou can append other plugins by configureing the `menneu.config.js` .\n\nHTML source files are also available.\n\n### Render LSX template into HTML and PDF.\n\nSee [Liyad](https://github.com/shellyln/liyad) for more informations about Lisp and [LSX](https://github.com/shellyln/liyad#what-is-lsx) syntax and operators.\n\n\n### Lisp block expansion\n\nIn the markdown or HTML documents, you can start `Lisp` block.\nThe block starts with `%%%(` and ends with pair parenthesis `)` .\n* You should escape following characters in the document:\n    * `\\` -\u003e `\\\\`\n    * `\"\"\"` -\u003e `\\\"\\\"\\\"`\n    * `%%%` -\u003e `\\%\\%\\%`\n\n\n#### Conditional branch\n```markdown\n%%%($last                           ;; \"$last\" is a function that evaluate parameters, and returns last parameter.\n    ($set ($data isMorning) false)\n    ($set ($data name) \"World\")\n    nil                             ;; \"nil\" is zero length array. it will replace to zero length string by document processor.\n)\n\n%%%($=if ($get $data isMorning)\n\"\"\"Markdown\n## Good morning, %%%($get $data name)!\n\"\"\")\n\n%%%($=if ($not ($get $data isMorning))\n\"\"\"Markdown\n## Hello, %%%($get $data name)!\n\"\"\")\n```\nis equivalent to\n\n```markdown\n## Hello, World!\n```\n\n\n#### Repeating\n```markdown\n# Greeting\n\n%%%($=for ($list \"World\" \"Jane\" \"Joe\")\n\"\"\"Markdown\n## Hello, %%%($get $data)!\n\"\"\")\n\nGood morning!\n```\n\nis equivalent to\n\n```markdown\n# Greeting\n\n## Hello, World!\n## Hello, Jane!\n## Hello, Joe!\n\nGood morning!\n```\n\n\n#### Variables\n\n* The data file is parsed and set to `$data` variable.\n\nData file:\n```json\n{\n    \"foo\": 1,\n    \"bar\": \"World\"\n}\n```\n\nDocument template:\n```markdown\n## Hello, %%%($get $data bar)!\n```\n\nResult:\n```html\n\u003ch2\u003eHello, World!\u003c/h2\u003e\n```\n\n* To define the variable, use `$let` function in the Lisp block.\n\nDocument template:\n```markdown\n%%%($let a \"A\")\n%%%($get a)\n```\n\nResult:\n```html\n\u003cp\u003eA\u003c/p\u003e\n```\n\n* To set the value to the variable, use `$set` function in the Lisp block.\n\nDocument template:\n```markdown\n%%%($let a \"A\")\n%%%($set a \"B\")\n%%%($get a)\n```\n\nResult:\n```html\n\u003cp\u003eB\u003c/p\u003e\n```\n\n* To set the value to the object property or array index, you can also use `$set` function.\n\nDocument template:\n```markdown\n%%%($let a (#    ;; \"#\" is object literal function.\n    (foo 1)\n    (bar ($list \"World\" \"Jane\" \"Joe\")) ))\n\n%%%($set (a bar 1) \"John\")\n%%%($get a bar 1)\n```\n\nResult:\n```html\n\u003cp\u003eJohn\u003c/p\u003e\n```\n\n#### Functions\n\nDocument template:\n```markdown\n%%%($last\n    ($defun fac (n)\n        ($if (== n 0)\n            1\n            (* n ($self (- n 1))) ) )\n    nil)\n\nFactorial of 3 is %%%(fac 3).\n```\n\nResult:\n```html\n\u003cp\u003eFactorial of 3 is 6.\u003c/p\u003e\n```\n\n\n#### LSX DOM elements\nYou can markup standard HTML and SVG tags witten in [LSX](https://github.com/shellyln/liyad#what-is-lsx) notation.\n\nDocument template:\n```markdown\n%%%(style (@ (dangerouslySetInnerHTML \".content { font-style: italic; color: red; }\")))\n```\n\nResult:\n```html\n\u003cstyle\u003e.content { font-style: italic; color: red; }\u003c/style\u003e\n```\n\n\n#### Components\nYou also can markup with [RedAgate](https://github.com/shellyln/red-agate) tag-lib components.\n\nDocument template:\n```lisp\n%%%(Greeting (@ (to \"Menneu\")) \"Good morning!\")\n%%%(Svg (@ (width  100)\n           (height 100)\n           (unit \"mm\") )\n    (Canvas (-\u003e (ctx) (::ctx@moveTo  10  10)\n                      (::ctx@lineTo 190 190)\n                      (::ctx:strokeStyle=\"rgba(255,128,0,0.2)\")\n                      (::ctx@stroke)\n                      (::ctx@beginPath) ))\n    (Rect   (@  (x 5)\n                (y 67)\n                (width  70)\n                (height 11)\n                (strokeColor \"blue\")\n                (stroke) ))\n    (Qr     (@  (x 5)\n                (y 7)\n                (cellSize 0.8)\n                (data \"Hello\") ))\n    (Code128(@  (x 35)\n                (y  7)\n                (elementWidth 0.66)\n                (height 15)\n                (quietHeight 0)\n                (textHeight 7)\n                (font \"7px 'OCRB'\")\n                (data \"Hello\") ))\n    (Gtin13 (@  (x 10)\n                (y 37)\n                (elementWidth 0.66)\n                (height 15)\n                (quietHeight 0)\n                (textHeight 7)\n                (font \"7px 'OCRB'\")\n                (data \"123456789012\") )) )\n```\n\n`menneu.config.js`:\n```js\nmodule.exports = {\n    ...\n    components: {\n        Greeting: (props) =\u003e `Hello, ${props.to}! ${props.children}`,\n    },\n    ...\n};\n```\n\nResult:\n```html\n\u003cp\u003eHello, Menneu! Good morning!\u003c/p\u003e\n\u003csvg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" width=\"100mm\" height=\"100mm\" viewBox=\"0 0 100 100\"\u003e\n...\n\u003c/svg\u003e\n```\n\nFollowing components are available by default:\n* Utilities\n    * [Do](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/taglib.ts)\n    * [Facet](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/taglib.ts)\n* Resource bundlers\n    * [Asset](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/bundler.ts)\n    * [Image](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/bundler.ts)\n    * [Script](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/bundler.ts)\n    * [Style](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/bundler.ts)\n    * [Font](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/bundler.ts)\n    * [SingleFont](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/bundler.ts)\n* HTML and XML\n    * [Html4_01_Strict](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/html.tsx)\n    * [Html4_01_Transitional](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/html.tsx)\n    * [Html4_01_Frameset](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/html.tsx)\n    * [Xhtml1_0_Strict](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/html.tsx)\n    * [Xhtml1_0_Transitional](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/html.tsx)\n    * [Xhtml1_0_Frameset](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/html.tsx)\n    * [Html5](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/html.tsx)\n    * [Xml](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/html.tsx)\n    * [HtmlImposition](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/html.tsx)\n* SVG and Canvas\n    * [Svg](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Ambient](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Arc](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Canvas](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Circle](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Curve](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [GridLine](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Group](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Line](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Path](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Pie](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Polygon](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Rect](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [RoundRect](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [SvgAssetFragment](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [SvgFragment](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [Text](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n    * [SvgImposition](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/svg.tsx)\n* Printer marks\n    * [PrinterMarks](https://github.com/shellyln/red-agate/blob/master/packages/red-agate/src/red-agate/printing.ts)\n* Barcodes and 2D codes\n    * [Code128](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Code128.ts)\n    * [Code39](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Code39.ts)\n    * [Ean13](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Ean.ts) / Gtin13\n    * [Ean8](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Ean.ts) / Gtin8\n    * [Ean5](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Ean.ts)\n    * [Ean2](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Ean.ts)\n    * [UpcA](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Ean.ts)\n    * [UpcE](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Ean.ts)\n    * [Itf](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Itf.ts)\n    * [JapanPostal](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/JapanPostal.ts)\n    * [Nw7](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Nw7.ts)\n    * [Qr](https://github.com/shellyln/red-agate/blob/master/packages/red-agate-barcode/src/barcode/Qr.ts)\n* Markdown\n    * [MarkdownRoot](https://github.com/shellyln/menneu/blob/master/src/components/Markdown.ts)\n    * [Markdown](https://github.com/shellyln/menneu/blob/master/src/components/Markdown.ts)\n        * This is using the [markdown-it](https://github.com/markdown-it/markdown-it).\n* HTML fragments\n    * [RawHtml](https://github.com/shellyln/menneu/blob/master/src/components/RawHtml.ts)\n* Math ML\n    * [Math](https://github.com/shellyln/menneu/blob/master/src/components/Math.tsx)\n        * This is using the [markdown-it-math](https://www.npmjs.com/package/markdown-it-math).\n    * [Mml](https://github.com/shellyln/menneu/blob/master/src/components/Math.tsx)\n* Charts and UML graphs\n    * [Chart](https://github.com/shellyln/menneu/blob/master/src/components/Chart.tsx)\n        * This is using the [Chart.js](https://github.com/chartjs/Chart.js) and [chartjs-plugin-datalabels](https://github.com/chartjs/chartjs-plugin-datalabels).\n    * [PlantUml](https://github.com/shellyln/menneu/blob/master/src/components/PlantUml.tsx)\n        * This is using the [markdown-it-plantuml](https://www.npmjs.com/package/markdown-it-plantuml).\n    * [PlantUmlLite](https://github.com/shellyln/menneu/blob/master/src/components/PlantUml.tsx)\n* Style sheets\n    * [NormalizeCss](https://github.com/shellyln/menneu/blob/master/src/components/styles.tsx)\n        * Include a [Normalize.css](https://necolas.github.io/normalize.css/) stylesheet into the document.\n    * [MarkdownCss](https://github.com/shellyln/menneu/blob/master/src/components/styles.tsx)\n        * Include a [github-markdown-css](https://github.com/sindresorhus/github-markdown-css) stylesheet into the document.\n    * [HighlightCss](https://github.com/shellyln/menneu/blob/master/src/components/styles.tsx)\n        * Include a [highlight.js](https://highlightjs.org/) stylesheet into the document.\n    * [PaperCss](https://github.com/shellyln/menneu/blob/master/src/components/styles.tsx)\n        * Include a [paper-css](https://github.com/cognitom/paper-css) stylesheet into the document.\n\n\n----\n\n\n## APIs\n\n### render()\n```ts\nexport async function render(source: string, data: any, options: RenderOptions): Promise\u003cBuffer\u003e;\n```\nRender the document from document template.\n\n* returns : Buffer of output document.\n* `source` : Document template.\n* `data` : Data (json string | lisp string | object)\n* `options` : Render options.\n\n\n### processDocument()\n```ts\nexport async function processDocument(config: CliConfig): Promise\u003cBuffer\u003e;\n```\nRead input file or STDIN, read config file, render and output document into file or STDOUT.\n\n* returns : Buffer of output document.\n* `config` : Configurations that specified by command line options.\n\n### run()\n```ts\nexport async function run();\n```\nMain of CLI app.  \nParse command line options and call processDocument().\n\n### parameters types :\n```ts\nexport interface MarkdownOptions {\n    noDefaultMarkdownPlugins?: boolean;\n    markdownPlugins?: Array\u003c{\n        plugin: any,\n        options: any[],\n    }\u003e;\n\n    markdownCustomContainers?: Array\u003c{\n        name: string,\n        validate?: (params: string) =\u003e boolean,\n        render?: (tokens: any[], index: number) =\u003e string,\n        marker?: string,\n    }\u003e;\n}\n\nexport interface FormatOptions {\n    rawInput?: boolean;\n    inputFormat: 'markdown' | 'md' | 'html' | 'htm' | 'lsx' | 'lisp';\n    dataFormat: 'lisp' | 'json' | 'object';\n    outputFormat: 'html' | 'pdf' | 'png' | 'jpeg';\n}\n\nexport interface RenderOptions extends MarkdownOptions, FormatOptions {\n    title?: string;\n\n    navigateOptions?: any;\n    imageOptions?: any;\n    pdfOptions?: any;\n\n    globals?: object;\n\n    noDefaultComponents?: boolean;\n    components?: object;\n}\n\nexport interface CliConfig extends FormatOptions {\n    useStdin: boolean;\n    inputPath?: string;\n\n    configPath?: string;\n    configFormat: 'js' | 'json' | 'object';\n\n    dataPath?: string;\n\n    useStdout: boolean;\n    outputPath?: string;\n\n    watch?: boolean;\n}\n```\n\n\n----\n\n\n## License\n[ISC](https://github.com/shellyln/menneu/blob/master/LICENSE.md)  \nCopyright (c) 2018 - 2020 Shellyl_N and Authors.\n\n## Bundled softwares' license\n* [github-markdown-css](https://github.com/sindresorhus/github-markdown-css): [license](https://github.com/sindresorhus/github-markdown-css/blob/gh-pages/license) (MIT)\n* [highlight.js](https://github.com/highlightjs/highlight.js): [license](https://github.com/highlightjs/highlight.js/blob/master/LICENSE) (BSD 3-Clause)\n* [normalize.css](https://github.com/necolas/normalize.css/): [license](https://github.com/necolas/normalize.css/blob/master/LICENSE.md) (MIT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshellyln%2Fmenneu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshellyln%2Fmenneu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshellyln%2Fmenneu/lists"}