UNPKG

senselogic-lingo

Version:

Text localization and processing.

183 lines (154 loc) 4.39 kB
// -- VARIABLES export let processedLineTagArray = [], processedDualTagArray = [], processedTagArray = []; // -- FUNCTIONS export function defineLineTag( name, openingDefinition, innerDefinition, closingDefinition = "" ) { if ( closingDefinition === "" ) { closingDefinition = innerDefinition; innerDefinition = ""; } processedLineTagArray.push( { name, openingDefinition, innerDefinition, closingDefinition } ); } // ~~ export function defineDualTag( name, openingDefinition, closingDefinition ) { processedDualTagArray.push( { name, openingDefinition, closingDefinition } ); } // ~~ export function defineTag( name, definition ) { processedTagArray.push( { name, definition } ); } // ~~ export function defineColorTag( name, color = "" ) { if ( color === "" ) { defineTag( "<" + name + ">", '<span class="color-' + name + '">' ); } else { defineTag( "<" + name + ">", '<span style="color:' + color + '">' ); } defineTag( "</" + name + ">", "</span>" ); } // ~~ export function getProcessedText( text ) { for ( let processedDualTag of processedDualTagArray ) { let partArray = text.split( processedDualTag.name ); let partCount = partArray.length; for ( let partIndex = 0; partIndex + 1 < partCount; partIndex += 2 ) { partArray[ partIndex ] += processedDualTag.openingDefinition; partArray[ partIndex + 1 ] += processedDualTag.closingDefinition; } text = partArray.join( "" ); } for ( let processedTag of processedTagArray ) { text = text.replaceAll( processedTag.name, processedTag.definition ); } return text; } // ~~ export function getProcessedMultilineText( text ) { let processedLineTagCount = processedLineTagArray.length; if ( processedLineTagCount > 0 ) { let lineArray = text.replaceAll( "\r", "" ).split( "\n" ); let lineCount = lineArray.length; for ( let lineIndex = 0; lineIndex < lineCount; ++lineIndex ) { let line = lineArray[ lineIndex ]; while ( line.startsWith( "\n" ) ) { line = line.slice( 1 ); } for ( let processedLineTag of processedLineTagArray ) { if ( line.startsWith( processedLineTag.name ) ) { if ( processedLineTag.innerDefinition === "" ) { lineArray[ lineIndex ] = processedLineTag.openingDefinition + line.slice( processedLineTag.name.length ) + processedLineTag.closingDefinition; } else { let spaceCharacterIndex = line.indexOf( " ", processedLineTag.name.length ); if ( spaceCharacterIndex >= 0 ) { lineArray[ lineIndex ] = processedLineTag.openingDefinition + line.slice( processedLineTag.name.length, spaceCharacterIndex ) + processedLineTag.innerDefinition + line.slice( spaceCharacterIndex + 1 ) + processedLineTag.closingDefinition; } else { lineArray[ lineIndex ] = processedLineTag.openingDefinition + line.slice( processedLineTag.name.length ) + processedLineTag.innerDefinition + processedLineTag.closingDefinition; } } break; } } } text = lineArray.join( "\n" ); } return getProcessedText( text ); }