MCPcopy
hub / github.com/witheve/Eve / parseMarkdown

Function parseMarkdown

src/runtime/parser.ts:42–113  ·  view source on GitHub ↗
(markdown: string, docId: string)

Source from the content-addressed store, hash-verified

40let markdownParser = new commonmark.Parser();
41
42function parseMarkdown(markdown: string, docId: string) {
43 let parsed = markdownParser.parse(markdown);
44 let walker = parsed.walker();
45 var cur;
46 let tokenId = 0;
47 var text = [];
48 var extraInfo = {};
49 var pos = 0;
50 var lastLine = 1;
51 var spans = [];
52 var context = [];
53 var blocks = [];
54 while(cur = walker.next()) {
55 let node = cur.node;
56 if(cur.entering) {
57 while(node.sourcepos && node.sourcepos[0][0] > lastLine) {
58 lastLine++;
59 pos++;
60 text.push("\n");
61 }
62 if(node.type !== "text") {
63 context.push({node, start: pos});
64 }
65 if(node.type == "text" || node.type === "code_block" || node.type == "code") {
66 text.push(node.literal);
67 pos += node.literal.length;
68 }
69 if(node.type == "softbreak") {
70 text.push("\n");
71 pos += 1;
72 lastLine++;
73 context.pop();
74 }
75 if(node.type == "code_block") {
76 let spanId = `${docId}|block|${tokenId++}`;
77 let start = context.pop().start;
78 node.id = spanId;
79 node.startOffset = start;
80 let type = node.type;
81 if(!node._isFenced) {
82 type = "indented_code_block";
83 } else {
84 blocks.push(node);
85 }
86 spans.push(start, pos, node.type, spanId);
87 lastLine = node.sourcepos[1][0] + 1;
88 }
89 if(node.type == "code") {
90 let spanId = `${docId}|${tokenId++}`;
91 let start = context.pop().start;
92 spans.push(start, pos, node.type, spanId);
93 }
94 } else {
95 let info = context.pop();
96 if(node !== info.node) {
97 throw new Error("Common mark is exiting a node that doesn't agree with the context stack");
98 }
99 if(node.type == "emph" || node.type == "strong" || node.type == "link") {

Callers 1

parseDocFunction · 0.70

Calls 1

nextMethod · 0.65

Tested by

no test coverage detected