(preNode, codeNode)
| 209 | }; |
| 210 | |
| 211 | const getCodeBlockLanguage = (preNode, codeNode) => { |
| 212 | const classLanguage = codeNode.className.match(/language-([a-zA-Z0-9_+-]+)/)?.[1]; |
| 213 | if (classLanguage) { |
| 214 | return normalizeCodeLanguage(classLanguage); |
| 215 | } |
| 216 | |
| 217 | const labels = Array.from(preNode.querySelectorAll('div')) |
| 218 | .filter(element => !element.contains(codeNode)) |
| 219 | .map(element => element.textContent?.trim() || '') |
| 220 | .filter(text => text && text.length <= 30 && !/复制|copy/i.test(text)); |
| 221 | |
| 222 | for (const label of labels) { |
| 223 | const language = normalizeCodeLanguage(label); |
| 224 | if (language) return language; |
| 225 | } |
| 226 | |
| 227 | return ''; |
| 228 | }; |
| 229 | |
| 230 | // Process all child nodes |
| 231 | const processNode = (node, indent = 0, inListItem = false, trimText = false) => { |
no test coverage detected