From 5ba02c71c9398a58ce837011e3a25163d229687a Mon Sep 17 00:00:00 2001 From: John Factotum <50942278+johnfactotum@users.noreply.github.com> Date: Thu, 9 Apr 2026 05:10:21 +0800 Subject: [PATCH] TTS: fix error & nodes getting skipped Fixes #115 --- text-walker.js | 2 +- tts.js | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/text-walker.js b/text-walker.js index 4ff9dff..c1249b7 100644 --- a/text-walker.js +++ b/text-walker.js @@ -32,7 +32,7 @@ export const textWalker = function* (x, func, filterFunc) { const walker = document.createTreeWalker(root, filter, { acceptNode: filterFunc || acceptNode }) const walk = x.commonAncestorContainer ? walkRange : walkDocument const nodes = walk(x, walker) - const strs = nodes.map(node => node.nodeValue) + const strs = nodes.map(node => node.nodeValue ?? '') const makeRange = (startIndex, startOffset, endIndex, endOffset) => { const range = document.createRange() range.setStart(nodes[startIndex], startOffset) diff --git a/tts.js b/tts.js index dee3c57..bf665c5 100644 --- a/tts.js +++ b/tts.js @@ -53,7 +53,7 @@ const fragmentToSSML = (fragment, inherited) => { if (!node) return if (node.nodeType === 3) return ssml.createTextNode(node.textContent) if (node.nodeType === 4) return ssml.createCDATASection(node.textContent) - if (node.nodeType !== 1) return + if (node.nodeType !== 1 && node.nodeType !== 11) return let el const nodeName = node.nodeName.toLowerCase() @@ -66,15 +66,15 @@ const fragmentToSSML = (fragment, inherited) => { else if (nodeName === 'em' || nodeName === 'strong') el = ssml.createElementNS(NS.SSML, 'emphasis') - const lang = node.lang || node.getAttributeNS(NS.XML, 'lang') + const lang = node.lang || node.getAttributeNS?.(NS.XML, 'lang') if (lang) { if (!el) el = ssml.createElementNS(NS.SSML, 'lang') el.setAttributeNS(NS.XML, 'lang', lang) } - const alphabet = node.getAttributeNS(NS.SSML, 'alphabet') || inheritedAlphabet + const alphabet = node.getAttributeNS?.(NS.SSML, 'alphabet') || inheritedAlphabet if (!el) { - const ph = node.getAttributeNS(NS.SSML, 'ph') + const ph = node.getAttributeNS?.(NS.SSML, 'ph') if (ph) { el = ssml.createElementNS(NS.SSML, 'phoneme') if (alphabet) el.setAttribute('alphabet', alphabet) @@ -92,7 +92,7 @@ const fragmentToSSML = (fragment, inherited) => { } return el } - convert(fragment.firstChild, ssml.documentElement, inherited.alphabet) + convert(fragment, ssml.documentElement, inherited.alphabet) return ssml }