process markdown files

This commit is contained in:
tristan 2024-01-01 17:31:04 +00:00
parent 496d3667de
commit c29ff7b22e
7 changed files with 213 additions and 80 deletions

View file

@ -1,9 +1,14 @@
# yeee
ye
I need some *emphasis*...
&
that's **bold**!
<a href="dir">dir</a>
<a href="/">home</a>
==mark== the important parts.
but ~~forget the rest~~.
drink lot's of H ~2~O ^if you want^!
<https://www.markdownguide.org/basic-syntax/>

View file

@ -22,10 +22,13 @@ let
v;
out = (if safeToPrint then
builtins.toJSON
(undunder (if throws then (builtins.tryEval actual).value else actual))
builtins.toJSON (undunder (if throws then
(builtins.tryEval actual).value
else {
inherit actual expected;
}))
else
''{"msg": "refusing to print"}'');
''{"msg": "cannot be stringified ):"}'');
success =
if throws then (builtins.tryEval actual).success == false else (a == e);
@ -33,7 +36,9 @@ let
in if success then ''
echo 'it ${msg}'
'' else
builtins.trace "FAILED ${msg}" ''
builtins.trace "FAILED ${msg}" (let file = builtins.toFile "value" out;
in ''
echo FAILED ${msg}
echo '${out}' | jq '.'
''
echo '${file}'
cat '${file}' | jq '.'
'')

View file

@ -19,55 +19,132 @@ in with md; [
expected = elems.h6 "super ultra tiny heading";
})
(it "makes a code block" (
let code = ''
this is my code
''; in {
actual = mdBlock ''
```${code}```'';
(it "makes a code block" (let
code = ''
this is my code
'';
in {
actual = mdBlock "```${code}```";
expected = elems.code code;
}))
(it "matches a list of one element" (
{
(it "matches a list of one element" ({
actual = list ''
- something
- something
'';
expected = { matched = true; block = elems.List ["something\n"];};
expected = {
matched = true;
block = elems.List [''
something
''];
};
}))
(it "matches a list of many elements" (
{
(it "matches a list of many elements" ({
actual = list ''
- something
- something else
- something
- something else
'';
expected = { matched = true; block = elems.List ["something\n" "something else\n"];};
expected = {
matched = true;
block = elems.List [
''
something
''
''
something else
''
];
};
}))
(it "matches a list with no whitespace around" (
{
actual = list
"- something\n- something else";
expected = { matched = true; block = elems.List ["something\n" "something else"];};
(it "matches a list with no whitespace around" ({
actual = list ''
- something
- something else'';
expected = {
matched = true;
block = elems.List [
''
something
''
"something else"
];
};
}))
(it "doesnt match not a list" (
let
str = "blah blah";
in
{
(it "doesnt match not a list" (let str = "blah blah";
in {
actual = list str;
expected = { matched = false; block = str;};
expected = {
matched = false;
block = str;
};
}))
(it "makes a list" (
{
(it "makes a list" ({
actual = mdBlock ''
- something
'';
expected = elems.List ["something\n"];
expected = elems.List [''
something
''];
}))
(it "finds surrounded parts" ({
actual = replace (wrap "\\*\\*") elems.strong ''
this text **may** contain **bold** words inside it.
'';
expected = [
"this text"
(elems.strong "may")
"contain"
(elems.strong "bold")
''
words inside it.
''
];
asString = true;
}))
(it "surrounds in list of elems" ({
actual = rule (wrap "\\*") elems.em [
"this text"
(elems.strong "may")
"*or may not* contain"
(elems.strong "bold")
"words *inside* it."
];
expected = [
"this text"
(elems.strong "may")
(elems.em "or may not")
"contain"
(elems.strong "bold")
"words"
(elems.em "inside")
"it."
];
asString = true;
}))
(it "processes whole string with all rules" ({
actual = processStr ''
this text **may** *or may not* contain **bold** words *inside* it.
'';
expected = [
"this text"
(elems.strong "may")
(elems.em "or may not")
"contain"
(elems.strong "bold")
"words"
(elems.em "inside")
''
it.
''
];
asString = true;
}))
(it "processes md block" {
@ -92,10 +169,8 @@ in with md; [
})
(it "converts markdown to a page" {
actual = mdToPage ./blog/index.md;
expected = ''
<html lang="en"><head ><title >markdown file</title></head> <body ><h1 >yeee</h1> <p >ye</p> <p >&amp;</p> <p ><a href="dir">dir</a>
<a href="/">home</a></p> <p ></p></body></html>'';
actual = toString (mdToPage ./blog/index.md) + "\n";
expected = builtins.readFile ./out/index.html;
asString = true;
})

1
testing/out/index.html Normal file
View file

@ -0,0 +1 @@
<html lang="en"><head ><title >markdown file</title></head> <body ><h1 >yeee</h1> <p >I need some <em >emphasis</em>...</p> <p >that's <strong >bold</strong>!</p> <p ><mark >mark</mark> the important parts.</p> <p >but <del >forget the rest</del>.</p> <p >drink lot's of H <sub >2</sub>O <sup >if you want</sup>!</p> <p ><a href="https://www.markdownguide.org/basic-syntax/">https://www.markdownguide.org/basic-syntax/</a></p> <p ></p></body></html>

View file

@ -238,30 +238,22 @@ in with site; [
}))
(it "throws with a list for a page" ({
actual = copyTo "." {
page = [];
};
actual = copyTo "." { page = [ ]; };
throws = true;
}))
(it "throws with null for a page" ({
actual = copyTo "." {
page = null;
};
actual = copyTo "." { page = null; };
throws = true;
}))
(it "throws with a bool for a page" ({
actual = copyTo "." {
page = true;
};
actual = copyTo "." { page = true; };
throws = true;
}))
(it "throws with a number for a page" ({
actual = copyTo "." {
page = 5;
};
actual = copyTo "." { page = 5; };
throws = true;
}))