Browse Source

AST to Markdown function and its test cases added

develop
arunkumar 4 years ago
parent
commit
2f7f701057
  1. 22
      lib/compileASTtoMarkdown.js
  2. 3
      lib/index.js
  3. 72
      test/AST_To_Markdown.test.js
  4. 7
      test/index.test.js

22
lib/compileASTtoMarkdown.js

@ -0,0 +1,22 @@
const { inspect } = require("util");
const nodeTypes = {
bold: "**",
italics: "_",
strikethrough: "~~",
underline: "==",
text: "",
};
const CompileASTtoMarkdown = ast =>
ast.reduce((acc, value) => {
if (typeof value === "string") return acc + value;
if (value.type === "url") {
return acc + `[${CompileASTtoMarkdown(value.children)}](${value.url})`;
}
let str = nodeTypes[value.type];
str += CompileASTtoMarkdown(value.children);
str += nodeTypes[value.type];
return acc + str;
}, "");
module.exports = CompileASTtoMarkdown;

3
lib/index.js

@ -13,8 +13,7 @@ function* prepare(str) {
function Parse(str, inner = false) { function Parse(str, inner = false) {
let context = null; let context = null;
let buffer = ""; let buffer = "";
let AST = []; let AST = []; let link = "";
let link = "";
const flush = () => { const flush = () => {
if (buffer) { if (buffer) {

72
test/AST_To_Markdown.test.js

@ -0,0 +1,72 @@
const expect = require("chai").expect;
const Compile = require("../lib/compileASTtoMarkdown");
describe("Compiling AST to Markdown", function () {
it("sample ast - 1", function () {
const input = [{ type: "bold", children: ["bold"] }];
expect(Compile(input)).to.equal("**bold**");
});
it("sample ast - 2", function () {
const input = [
{ type: "bold", children: ["my"] },
{ type: "text", children: ["simple"] },
{ type: "italics", children: ["AST"] },
];
expect(Compile(input)).to.equal("**my**simple_AST_");
});
it("sentence ast", function () {
const input = [
{ type: "bold", children: ["Arunkumar"] },
{ type: "text", children: [" is the "] },
{ type: "underline", children: ["Best Boy"] },
{ type: "text", children: [" not the "] },
{
type: "italics",
children: [{ type: "strikethrough", children: ["Worst Boy"] }],
},
{ type: "text", children: ["."] },
];
expect(Compile(input)).to.equal(
"**Arunkumar** is the ==Best Boy== not the _~~Worst Boy~~_.",
);
});
it("link ast", function () {
const input = [
{ type: "url", children: ["The Feathers"], url: "feathers.studio" },
];
expect(Compile(input)).to.equal("[The Feathers](feathers.studio)");
});
it("Nested ast", function () {
const input = [
{
type: "bold",
children: [
"Bold",
{
type: "italics",
children: [
"Italics",
{
type: "strikethrough",
children: [
"Strikethrough",
{ type: "underline", children: ["Underline"] },
"Strikethrough",
],
},
"Italics",
],
},
"Bold",
],
},
];
expect(Compile(input)).to.equal(
"**Bold_Italics~~Strikethrough==Underline==Strikethrough~~Italics_Bold**",
);
});
});

7
test/index.test.js

@ -60,12 +60,7 @@ describe("Parser Checks", function () {
expect( expect(
Parse( Parse(
"**Bold_Italics~~strikethrough==underline==strikethrough~~Italics_Bold**", "**Bold_Italics~~strikethrough==underline==strikethrough~~Italics_Bold**",
),[ ),
{
type: 'underline',
children: [ 'The', { type: 'bold', children: [ 'KING' ] }, 'Maker' ]
}
]
).to.eql([ ).to.eql([
{ {
type: "bold", type: "bold",

Loading…
Cancel
Save