speech-rule-engine
Version:
A standalone speech rule engine for XML structures, based on the original engine from ChromeVox.
69 lines (68 loc) • 2.42 kB
JavaScript
import { Engine } from '../common/engine.js';
import * as EngineConst from '../common/engine_const.js';
import { AcssRenderer } from './acss_renderer.js';
import { LayoutRenderer } from './layout_renderer.js';
import { PunctuationRenderer } from './punctuation_renderer.js';
import { SableRenderer } from './sable_renderer.js';
import { Span } from './span.js';
import { SsmlRenderer } from './ssml_renderer.js';
import { CountingRenderer, StringRenderer } from './string_renderer.js';
import { XmlRenderer } from './xml_renderer.js';
const xmlInstance = new SsmlRenderer();
const renderers = new Map([
[EngineConst.Markup.NONE, new StringRenderer()],
[EngineConst.Markup.COUNTING, new CountingRenderer()],
[EngineConst.Markup.PUNCTUATION, new PunctuationRenderer()],
[EngineConst.Markup.LAYOUT, new LayoutRenderer()],
[EngineConst.Markup.ACSS, new AcssRenderer()],
[EngineConst.Markup.SABLE, new SableRenderer()],
[EngineConst.Markup.VOICEXML, xmlInstance],
[EngineConst.Markup.SSML, xmlInstance]
]);
export function setSeparator(sep) {
const renderer = renderers.get(Engine.getInstance().options.markup);
if (renderer) {
renderer.separator = sep;
}
}
export function getSeparator() {
const renderer = renderers.get(Engine.getInstance().options.markup);
return renderer ? renderer.separator : '';
}
export function markup(descrs) {
const renderer = renderers.get(Engine.getInstance().options.markup);
if (!renderer) {
return '';
}
return renderer.markup(descrs);
}
export function merge(strs) {
const span = strs.map((s) => {
return typeof s === 'string' ? Span.stringEmpty(s) : s;
});
const renderer = renderers.get(Engine.getInstance().options.markup);
if (!renderer) {
return strs.join();
}
return renderer.merge(span);
}
export function finalize(str) {
const renderer = renderers.get(Engine.getInstance().options.markup);
if (!renderer) {
return str;
}
return renderer.finalize(str);
}
export function error(key) {
const renderer = renderers.get(Engine.getInstance().options.markup);
if (!renderer) {
return '';
}
return renderer.error(key);
}
export function registerRenderer(type, renderer) {
renderers.set(type, renderer);
}
export function isXml() {
return renderers.get(Engine.getInstance().options.markup) instanceof XmlRenderer;
}