(tokens, options)
| 90 | } |
| 91 | |
| 92 | export 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 | } |
no test coverage detected