Checkpoint before line-grid scrolling refactor
This commit is contained in:
@@ -20,9 +20,8 @@ class TextBufferModule extends BaseModule {
|
||||
|
||||
// Bind methods using parent's bindMethods utility
|
||||
this.bindMethods([
|
||||
'addText',
|
||||
'addBlock',
|
||||
'splitIntoParagraphs',
|
||||
'addBlocks',
|
||||
'processNextFromQueue',
|
||||
'processSentences',
|
||||
'processNextSentence',
|
||||
@@ -86,56 +85,6 @@ class TextBufferModule extends BaseModule {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add text to the buffer and process sentences
|
||||
* @param {string} text - Text to add to the buffer
|
||||
*/
|
||||
addText(text) {
|
||||
if (!text) return;
|
||||
|
||||
console.log(`TextBuffer: Adding text: "${text.substring(0, 50)}${text.length > 50 ? '...' : ''}"`);
|
||||
|
||||
const blocks = this.markupParser && typeof this.markupParser.parse === 'function'
|
||||
? this.markupParser.parse(text)
|
||||
: this.splitIntoParagraphs(text).map(paragraphText => ({
|
||||
type: 'paragraph',
|
||||
text: paragraphText,
|
||||
layoutText: paragraphText,
|
||||
cueMarkers: [],
|
||||
role: 'body',
|
||||
isFirstParagraphInChapter: false
|
||||
}));
|
||||
|
||||
blocks.forEach(block => {
|
||||
if (block.type === 'paragraph') {
|
||||
const paragraphId = `paragraph-${this.paragraphCounter + 1}`;
|
||||
this.processingQueue.push({
|
||||
...block,
|
||||
id: paragraphId,
|
||||
paragraphIndex: this.paragraphCounter,
|
||||
textBlockId: this.currentTextBlockId
|
||||
});
|
||||
this.paragraphCounter += 1;
|
||||
} else {
|
||||
this.processingQueue.push({
|
||||
...block,
|
||||
id: `${block.type}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`
|
||||
});
|
||||
|
||||
if (block.type === 'image') {
|
||||
this.currentTextBlockId += 1;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Process the queue if not already processing
|
||||
if (!this.isProcessingActive && this.onSentenceReadyCallback) {
|
||||
this.processNextFromQueue();
|
||||
} else {
|
||||
console.log('TextBuffer: Text queued for processing');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an already parsed render block to the processing queue.
|
||||
* Engine protocols should prefer this over re-serializing tags into text markup.
|
||||
@@ -173,20 +122,11 @@ class TextBufferModule extends BaseModule {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Split an incoming narrative fragment into book paragraphs.
|
||||
* Single newlines inside a paragraph are normalized to spaces; blank lines
|
||||
* mark distinct paragraphs.
|
||||
* @param {string} text - Raw text fragment
|
||||
* @returns {Array<string>} - Normalized paragraph strings
|
||||
*/
|
||||
splitIntoParagraphs(text) {
|
||||
return String(text)
|
||||
.split(/\n\s*\n/g)
|
||||
.map(paragraph => paragraph.replace(/\s*\n\s*/g, ' ').trim())
|
||||
.filter(Boolean);
|
||||
addBlocks(blocks = []) {
|
||||
if (!Array.isArray(blocks)) return;
|
||||
blocks.forEach(block => this.addBlock(block));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process the next text fragment from the queue
|
||||
*/
|
||||
@@ -223,7 +163,7 @@ class TextBufferModule extends BaseModule {
|
||||
this.isProcessingActive = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process complete sentences in the buffer
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user