Document markup and improve choice tags
This commit is contained in:
@@ -13,8 +13,7 @@ class TextProcessorModule extends BaseModule {
|
||||
this.hyphenatorReady = false;
|
||||
this.locale = 'en-us';
|
||||
|
||||
// Add localization as a dependency
|
||||
this.dependencies = ['localization'];
|
||||
this.dependencies = ['localization', 'game-config'];
|
||||
|
||||
// Bind methods using parent's bindMethods utility
|
||||
this.bindMethods([
|
||||
@@ -24,9 +23,11 @@ class TextProcessorModule extends BaseModule {
|
||||
'isHyphenationAvailable',
|
||||
'hyphenate',
|
||||
'setLocale',
|
||||
'handleLocaleChanged',
|
||||
'loadHyphenopolyLoader',
|
||||
'normalizeHyphenationLocale'
|
||||
'normalizeHyphenationLocale',
|
||||
'applyLocaleTypography',
|
||||
'getTypographyLocale',
|
||||
'normalizeDialogueQuotes'
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -38,18 +39,15 @@ class TextProcessorModule extends BaseModule {
|
||||
try {
|
||||
this.reportProgress(10, "Initializing text processor");
|
||||
|
||||
// Get locale from Localization module if available
|
||||
const localizationModule = this.getModule('localization');
|
||||
if (!localizationModule) {
|
||||
console.error("Localization module not found, required dependency missing");
|
||||
this.reportProgress(100, "Text processor initialization failed - missing localization");
|
||||
return false;
|
||||
}
|
||||
|
||||
this.locale = localizationModule.getLocale();
|
||||
|
||||
// Register for locale changes using the proper event pattern
|
||||
this.addEventListener(document, 'locale-changed', this.handleLocaleChanged);
|
||||
const gameConfig = this.getModule('game-config');
|
||||
this.locale = gameConfig?.getLocale?.() || 'en_US';
|
||||
|
||||
this.addEventListener(document, 'game:config', (event) => {
|
||||
const gameLocale = event.detail?.metadata?.language || event.detail?.locale;
|
||||
if (gameLocale) {
|
||||
this.setLocale(gameLocale);
|
||||
}
|
||||
});
|
||||
|
||||
this.reportProgress(30, `Locale set to ${this.locale}`);
|
||||
|
||||
@@ -92,16 +90,6 @@ class TextProcessorModule extends BaseModule {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle locale changed event
|
||||
* @param {CustomEvent} event - The locale-changed event
|
||||
*/
|
||||
handleLocaleChanged(event) {
|
||||
if (event && event.detail && event.detail.locale) {
|
||||
this.setLocale(event.detail.locale);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the locale for the text processor
|
||||
* @param {string} locale - The locale to set
|
||||
@@ -299,6 +287,10 @@ class TextProcessorModule extends BaseModule {
|
||||
result = this.smartyPants(result);
|
||||
}
|
||||
|
||||
if (opts.smartypants) {
|
||||
result = this.applyLocaleTypography(result);
|
||||
}
|
||||
|
||||
// Apply hyphenation if available and requested
|
||||
if (opts.hyphenate && this.isHyphenationAvailable()) {
|
||||
result = this.hyphenate(result, opts.hyphenSelector);
|
||||
@@ -306,6 +298,25 @@ class TextProcessorModule extends BaseModule {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
applyLocaleTypography(text) {
|
||||
const locale = this.getTypographyLocale();
|
||||
if (locale.startsWith('de')) {
|
||||
return this.normalizeDialogueQuotes(text);
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
getTypographyLocale() {
|
||||
return String(this.locale || 'en_US').trim().toLowerCase().replace('_', '-');
|
||||
}
|
||||
|
||||
normalizeDialogueQuotes(text) {
|
||||
return String(text || '')
|
||||
.replace(/&(ldquo|bdquo|laquo|raquo);([^&\n]+?)&(rdquo|ldquo|laquo|raquo);/gi, '»$2«')
|
||||
.replace(/["\u201c\u201e\u201d\u00ab\u00bb]([^"\u201c\u201e\u201d\u00ab\u00bb\n]+?)["\u201c\u201d\u201e\u00ab\u00bb]/g, '»$1«');
|
||||
}
|
||||
}
|
||||
|
||||
// Create the singleton instance
|
||||
|
||||
Reference in New Issue
Block a user