MCPcopy
hub / github.com/braziljs/eloquente-javascript / transformTokens

Function transformTokens

src/transform.mjs:92–127  ·  view source on GitHub ↗
(tokens, options)

Source from the content-addressed store, hash-verified

90}
91
92export function transformTokens(tokens, options) {
93 let meta = {}, result = []
94 for (let i = 0; i < tokens.length; i++) {
95 let tok = tokens[i], type = tok.type
96 if (type == "meta_meta") {
97 for (let prop in tok.args[0]) meta[prop] = tok.args[0][prop]
98 } else if (type == "meta_id") {
99 let next = nextTag(tokens, i)
100 ;(next.attrs || (next.attrs = [])).push(["id", tok.args[0]])
101 } else if (type == "meta_table") {
102 nextTag(tokens, i).tableData = tok.args[0]
103 } else if (type == "meta_if_open") {
104 i = handleIf(tokens, i, options)
105 } else if (type == "meta_hint_open" && options.strip === "hints") {
106 do { i++ } while (tokens[i].type != "meta_hint_close")
107 } else if (type == "meta_if_close" || (options.index === false && (type == "meta_indexsee" || type == "meta_index"))) {
108 // Drop
109 } else if (tok.tag == "h1" && options.takeTitle) {
110 if (tokens[i + 1].children.length != 1) throw new Error("Complex H1 not supported")
111 meta.title = tokens[i + 1].children[0].content
112 i += 2
113 } else {
114 if (type == "paragraph_open")
115 tok.hashID = "p-" + hash(startAndEnd(childrenText(tokens[i + 1])))
116 else if (type == "heading_open")
117 tok.hashID = (tok.tag == "h2" ? "h-" : "i-") + hash(childrenText(tokens[i + 1]))
118 else if (type == "fence")
119 tok.hashID = "c-" + hash(tok.content)
120
121 if (tok.children) tok.children = transformInline(tok.children, options, tokens[i - 1].type)
122
123 result.push(tok)
124 }
125 }
126 return {tokens: result, metadata: meta}
127}

Callers 2

render_latex.mjsFile · 0.90
render_html.mjsFile · 0.90

Calls 6

nextTagFunction · 0.85
handleIfFunction · 0.85
hashFunction · 0.85
startAndEndFunction · 0.85
childrenTextFunction · 0.85
transformInlineFunction · 0.85

Tested by

no test coverage detected