UNPKG

longdown

Version:

Convert longform markdown files to outline format used by Logseq

230 lines (224 loc) 14.8 kB
import "./cljs_env.js"; goog.provide('longdown.lib'); longdown.lib.slurp = (function longdown$lib$slurp(path){ return shadow.esm.esm_import$node_fs.readFileSync(path,"utf-8"); }); longdown.lib.spit = (function longdown$lib$spit(path,output){ return shadow.esm.esm_import$node_fs.writeFileSync(path,output); }); longdown.lib.stratify_nodes = (function longdown$lib$stratify_nodes(p__21486){ var vec__21487 = p__21486; var seq__21488 = cljs.core.seq(vec__21487); var first__21489 = cljs.core.first(seq__21488); var seq__21488__$1 = cljs.core.next(seq__21488); var node = first__21489; var remaining = seq__21488__$1; var G__21492 = new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(node); switch (G__21492) { case "heading": var map__21496 = node; var map__21496__$1 = cljs.core.__destructure_map(map__21496); var depth = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__21496__$1,new cljs.core.Keyword(null,"depth","depth",1768663640)); var nodes = remaining; var children = cljs.core.PersistentVector.EMPTY; while(true){ var child = cljs.core.first(nodes); if(cljs.core.truth_((function (){var and__5043__auto__ = child; if(cljs.core.truth_(and__5043__auto__)){ return ((cljs.core.not_EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(child),"heading")) || ((depth < new cljs.core.Keyword(null,"depth","depth",1768663640).cljs$core$IFn$_invoke$arity$1(child)))); } else { return and__5043__auto__; } })())){ var vec__21515 = (longdown.lib.stratify_nodes.cljs$core$IFn$_invoke$arity$1 ? longdown.lib.stratify_nodes.cljs$core$IFn$_invoke$arity$1(nodes) : longdown.lib.stratify_nodes.call(null,nodes)); var nodes__$1 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__21515,(0),null); var child__$1 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__21515,(1),null); var G__21603 = nodes__$1; var G__21604 = cljs.core.conj.cljs$core$IFn$_invoke$arity$2(children,child__$1); nodes = G__21603; children = G__21604; continue; } else { return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [nodes,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"type","type",1174270348),"listItem",new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [node,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"type","type",1174270348),"list",new cljs.core.Keyword(null,"children","children",-940561982),children], null)], null)], null)], null); } break; } break; case "list": return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [remaining,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"type","type",1174270348),"listItem",new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"type","type",1174270348),"paragraph",new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"type","type",1174270348),"text",new cljs.core.Keyword(null,"text","text",-1790561697),""], null)], null)], null),node], null)], null)], null); break; default: return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [remaining,new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"type","type",1174270348),"listItem",new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [node], null)], null)], null); } }); longdown.lib.stratify = (function longdown$lib$stratify(node){ if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(node),"root")){ } else { throw (new Error("Assert failed: (= (:type node) \"root\")")); } var nodes = new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(node); var children = cljs.core.PersistentVector.EMPTY; while(true){ if(cljs.core.seq(nodes)){ var vec__21545 = longdown.lib.stratify_nodes(nodes); var nodes__$1 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__21545,(0),null); var child = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__21545,(1),null); var G__21607 = nodes__$1; var G__21608 = cljs.core.conj.cljs$core$IFn$_invoke$arity$2(children,child); nodes = G__21607; children = G__21608; continue; } else { return cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(node,new cljs.core.Keyword(null,"children","children",-940561982),new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"type","type",1174270348),"list",new cljs.core.Keyword(null,"children","children",-940561982),children], null)], null)); } break; } }); /** * Strip leading number pattern like '1. ' from text. */ longdown.lib.strip_leading_number = (function longdown$lib$strip_leading_number(text){ return clojure.string.replace(text,/^\d+\.\s*/,""); }); /** * Convert a heading node to a paragraph, stripping leading numbers from text. */ longdown.lib.heading__GT_paragraph = (function longdown$lib$heading__GT_paragraph(node){ return cljs.core.update.cljs$core$IFn$_invoke$arity$3(cljs.core.dissoc.cljs$core$IFn$_invoke$arity$2(cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(node,new cljs.core.Keyword(null,"type","type",1174270348),"paragraph"),new cljs.core.Keyword(null,"depth","depth",1768663640)),new cljs.core.Keyword(null,"children","children",-940561982),(function (children){ return cljs.core.mapv.cljs$core$IFn$_invoke$arity$2((function (child){ if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(child),"text")){ return cljs.core.update.cljs$core$IFn$_invoke$arity$3(child,new cljs.core.Keyword(null,"value","value",305978217),longdown.lib.strip_leading_number); } else { return child; } }),children); })); }); longdown.lib.empty_text_node_QMARK_ = (function longdown$lib$empty_text_node_QMARK_(node){ return ((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(node),"text")) && (cljs.core.empty_QMARK_(new cljs.core.Keyword(null,"value","value",305978217).cljs$core$IFn$_invoke$arity$1(node)))); }); /** * If the first non-empty child is a strong node, unwrap its children to plain nodes. */ longdown.lib.unwrap_leading_strong = (function longdown$lib$unwrap_leading_strong(children){ var non_empty = cljs.core.drop_while.cljs$core$IFn$_invoke$arity$2(longdown.lib.empty_text_node_QMARK_,children); var temp__5823__auto__ = cljs.core.first(non_empty); if(cljs.core.truth_(temp__5823__auto__)){ var first_child = temp__5823__auto__; if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(first_child),"strong")){ return cljs.core.concat.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(first_child),cljs.core.rest(non_empty)); } else { return children; } } else { return children; } }); /** * Strip leading bold from paragraph or listItem children. */ longdown.lib.strip_leading_bold_in_node = (function longdown$lib$strip_leading_bold_in_node(node){ if(cljs.core.contains_QMARK_(new cljs.core.PersistentHashSet(null, new cljs.core.PersistentArrayMap(null, 2, ["paragraph",null,"listItem",null], null), null),new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(node))){ return cljs.core.update.cljs$core$IFn$_invoke$arity$3(node,new cljs.core.Keyword(null,"children","children",-940561982),cljs.core.comp.cljs$core$IFn$_invoke$arity$2(cljs.core.vec,longdown.lib.unwrap_leading_strong)); } else { return node; } }); /** * Walk the AST and strip headers and leading bold formatting. */ longdown.lib.strip_highlights = (function longdown$lib$strip_highlights(node){ var transformed = ((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(node),"heading"))?longdown.lib.strip_leading_bold_in_node(longdown.lib.heading__GT_paragraph(node)):((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(new cljs.core.Keyword(null,"type","type",1174270348).cljs$core$IFn$_invoke$arity$1(node),"paragraph"))?longdown.lib.strip_leading_bold_in_node(node):node )); if(cljs.core.truth_(new cljs.core.Keyword(null,"children","children",-940561982).cljs$core$IFn$_invoke$arity$1(transformed))){ return cljs.core.update.cljs$core$IFn$_invoke$arity$3(transformed,new cljs.core.Keyword(null,"children","children",-940561982),(function (p1__21567_SHARP_){ return cljs.core.mapv.cljs$core$IFn$_invoke$arity$2(longdown.lib.strip_highlights,p1__21567_SHARP_); })); } else { return transformed; } }); longdown.lib.stratify_plugin = (function longdown$lib$stratify_plugin(){ return (function (tree,file,cb){ var next_tree = cljs.core.clj__GT_js(longdown.lib.stratify(cljs.core.js__GT_clj.cljs$core$IFn$_invoke$arity$variadic(tree,cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.Keyword(null,"keywordize-keys","keywordize-keys",1310784252),true], 0)))); return (cb.cljs$core$IFn$_invoke$arity$3 ? cb.cljs$core$IFn$_invoke$arity$3(null,next_tree,file) : cb.call(null,null,next_tree,file)); }); }); longdown.lib.onenterlineprefix = (function longdown$lib$onenterlineprefix(token){ var this$ = this; var node = (this$.stack[(this$.stack.length - (1))]); if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(node.type,"paragraph")){ return this$.config.enter.data.call(this$,token); } else { return null; } }); longdown.lib.onexitlineprefix = (function longdown$lib$onexitlineprefix(token){ var this$ = this; var node = (this$.stack[(this$.stack.length - (1))]); if(cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(node.type,"text")){ return this$.config.exit.data.call(this$,token); } else { return null; } }); longdown.lib.preserve_leading_whitespace_extension = ({"enter": ({"linePrefix": longdown.lib.onenterlineprefix}), "exit": ({"linePrefix": longdown.lib.onexitlineprefix})}); /** * Filter unsafe rules to prevent escaping of certain characters. */ longdown.lib.filter_unsafe = (function longdown$lib$filter_unsafe(unsafe_arr){ return unsafe_arr.filter((function (x){ return (((!(((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(x.inConstruct,"phrasing")) && (((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(x.character," ")) || (cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(x.character,"\t")))))))) && (((cljs.core.not_EQ_.cljs$core$IFn$_invoke$arity$2(x.character,"_")) && (((cljs.core.not_EQ_.cljs$core$IFn$_invoke$arity$2(x.character,"&")) && (((cljs.core.not_EQ_.cljs$core$IFn$_invoke$arity$2(x.character,"[")) && (cljs.core.not_EQ_.cljs$core$IFn$_invoke$arity$2(x.character,"]"))))))))); })); }); longdown.lib.custom_paragraph = (function longdown$lib$custom_paragraph(node,_,state,info){ var orig_unsafe = state.unsafe; var ___$1 = (state.unsafe = longdown.lib.filter_unsafe(orig_unsafe)); var value = shadow.esm.esm_import$mdast_util_to_markdown.defaultHandlers.paragraph(node,___$1,state,info); var ___$2 = (state.unsafe = orig_unsafe); return value; }); longdown.lib.stringify_options = ({"bullet": "-", "listItemIndent": "one", "fences": true, "join": [(function (_left,_right,_parent,_state){ return (0); })], "handlers": ({"paragraph": longdown.lib.custom_paragraph})}); longdown.lib.markdown_parser = shadow.esm.esm_import$unified.unified().data("fromMarkdownExtensions",[longdown.lib.preserve_leading_whitespace_extension]).use(shadow.esm.esm_import$remark_parse.default).use(longdown.lib.stratify_plugin).freeze(); longdown.lib.html_parser = shadow.esm.esm_import$unified.unified().use(shadow.esm.esm_import$rehype_parse.default).use(shadow.esm.esm_import$rehype_remark.default).use(longdown.lib.stratify_plugin).freeze(); longdown.lib.markdown_stringifier = shadow.esm.esm_import$unified.unified().use(shadow.esm.esm_import$remark_stringify.default,longdown.lib.stringify_options).freeze(); /** * Parse markdown input to stratified AST (Clojure data). */ longdown.lib.parse_markdown = (function longdown$lib$parse_markdown(input){ return cljs.core.js__GT_clj.cljs$core$IFn$_invoke$arity$variadic(longdown.lib.markdown_parser.runSync(longdown.lib.markdown_parser.parse(input)),cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.Keyword(null,"keywordize-keys","keywordize-keys",1310784252),true], 0)); }); /** * Parse HTML input to stratified AST (Clojure data). */ longdown.lib.parse_html = (function longdown$lib$parse_html(input){ return cljs.core.js__GT_clj.cljs$core$IFn$_invoke$arity$variadic(longdown.lib.html_parser.runSync(longdown.lib.html_parser.parse(input)),cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.Keyword(null,"keywordize-keys","keywordize-keys",1310784252),true], 0)); }); /** * Stringify AST (Clojure data) to markdown string. */ longdown.lib.stringify_markdown = (function longdown$lib$stringify_markdown(ast){ return cljs.core.str.cljs$core$IFn$_invoke$arity$1(longdown.lib.markdown_stringifier.stringify(cljs.core.clj__GT_js(ast))); }); /** * Create a converter function from options. * - :html - parse as HTML instead of markdown * - :strip-highlights - strip headers and leading bold formatting */ longdown.lib.make_converter = (function longdown$lib$make_converter(p__21597){ var map__21598 = p__21597; var map__21598__$1 = cljs.core.__destructure_map(map__21598); var html = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__21598__$1,new cljs.core.Keyword(null,"html","html",-998796897)); var strip_highlights_QMARK_ = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__21598__$1,new cljs.core.Keyword(null,"strip-highlights?","strip-highlights?",-1172221519)); var parse_fn = (cljs.core.truth_(html)?longdown.lib.parse_html:longdown.lib.parse_markdown); if(cljs.core.truth_(strip_highlights_QMARK_)){ return cljs.core.comp.cljs$core$IFn$_invoke$arity$3(longdown.lib.stringify_markdown,longdown.lib.strip_highlights,parse_fn); } else { return cljs.core.comp.cljs$core$IFn$_invoke$arity$2(longdown.lib.stringify_markdown,parse_fn); } }); longdown.lib.longform__GT_outline = longdown.lib.make_converter(cljs.core.PersistentArrayMap.EMPTY); longdown.lib.html__GT_outline = longdown.lib.make_converter(new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"html","html",-998796897),true], null)); //# sourceMappingURL=longdown.lib.js.map