longdown
Version:
Convert longform markdown files to outline format used by Logseq
230 lines (224 loc) • 14.8 kB
JavaScript
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