Socket
Socket
Sign inDemoInstall

wiki2ssml

Package Overview
Dependencies
1
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.2.0 to 0.2.1

2

package.json
{
"name": "wiki2ssml",
"version": "0.2.0",
"version": "0.2.1",
"description": "Wiki2SSML provides the WikiVoice markup language used for fine-tuning synthesised voice.",

@@ -5,0 +5,0 @@ "license": "Apache-2.0",

@@ -22,20 +22,33 @@ # Wiki2SSML

| ------------- |-------------|
| `[[volume:SCALE|TEXT]]` | Speaking volume |
| `[[speed:SCALE|TEXT]]` | Speaking rate |
| `[[pitch:SCALE|TEXT]]` | Speaking pitch |
| `[[silence:TEXT]]` | Pause with duration |
| `[[strength:TEXT]]` | Pause with strength |
| `[[emphasis:LEVEL|TEXT]]` | Emphasis with LEVEL |
| `[[volume:SCALE\|TEXT]]` | Speaking volume |
| `[[speed:SCALE\|TEXT]]` | Speaking rate |
| `[[pitch:SCALE\|TEXT]]` | Speaking pitch |
| `[[silence:DURATION,strength:STRENGTH]]` | Pause with duration and strength |
| `[[emphasis:LEVEL\|TEXT]]` | Emphasis with LEVEL |
| `[[audio:AUDIO_URI]]` | Audio embedded into speech|
| `[[lang:LANGUAGE|TEXT]]` | Language indicator |
| `[[paragraph|TEXT]]` | Paragraph indicator |
| `[[sentence|TEXT]]` | Sentence indicator |
| `[[type:TYPE|TEXT]]` | Type it should be said as |
| `[[voice:NAME|TEXT]]` | Voice name it should be said with |
| `[[pos:POS|TEXT]]` | Part of speech it should be prounouced as |
| `[[substitute:TEXT1|TEXT2]]` | Replace TEXT2 with TEXT1 as substitution |
| `[[alphabet:ALP,pronunciation:PRO|TEXT]]` | Phonetic pronunciation |
| `[[volume:SCALE,speed:SCALE,pitch:SCALE|TEXT]]` | Speaking volume, rate and pitch |
| `[[type:TYPE,format:FORMAT,detail:DETAIL|TEXT]]` | Type it should be said as |
| `[[lang:LANGUAGE\|TEXT]]` | Language indicator |
| `[[paragraph\|TEXT]]` | Paragraph indicator |
| `[[sentence\|TEXT]]` | Sentence indicator |
| `[[type:TYPE\|TEXT]]` | Type it should be said as |
| `[[voice:NAME\|TEXT]]` | Voice name it should be said with |
| `[[pos:POS\|TEXT]]` | Part of speech it should be prounouced as |
| `[[substitute:TEXT1\|TEXT2]]` | Replace TEXT2 with TEXT1 as substitution |
| `[[alphabet:ALPHABET,pronunciation:PRONUNCIATION\|TEXT]]` | Phonetic pronunciation |
| `[[volume:SCALE,speed:SCALE,pitch:SCALE\|TEXT]]` | Speaking volume, rate and pitch |
| `[[type:TYPE,format:FORMAT,detail:DETAIL\|TEXT]]` | Type it should be said as |
| `[[mark:NAME\|TEXT]]` | Mark referencing a location |
# Supported Vendor-Specific Markups
| Expressions | Operations|
| ------------- |-------------|
| `[[amzWhispered\|TEXT]]` | Whispering |
| `[[amzPhonation:soft\|TEXT]]` | Speaking Softly |
| `[[amzTimbre:SCALE\|TEXT]]` | Controlling Timbre |
| `[[amzDRC\|TEXT]]` | Dynamic Range Compression |
| `[[amzBreathDuration:SCALE,amzBreathVolume:SCALE]]` | Breathing with duration and volume |
| `[[amzDefaultBreath]]` | Default sound of breathing |
| `[[ibmExprType:TYPE|TEXT]]` | Expressiveness type |
| `[[ibmTransType:TYPE,ibmStrength:SCALE\|TEXT]]` | Voice transformation |
More details on canonical attribute values can be found at [Speech Synthesis Markup Language (SSML)](https://www.w3.org/TR/speech-synthesis/).

@@ -42,0 +55,0 @@

@@ -15,4 +15,4 @@ "use strict";

var _getSsmlHead = (language) => {
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?><speak version=\"1.1\" xmlns=\"http://www.w3.org/2001/10/synthesis\" " +
var _getSsmlHead = (language, version) => {
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?><speak version=\"" + version + "\" xmlns=\"http://www.w3.org/2001/10/synthesis\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +

@@ -27,10 +27,13 @@ "xsi:schemaLocation=\"http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis/synthesis.xsd\" " +

var _getSsmlAsString = (ssmlBody, language) => {
return _getSsmlHead(language) + ssmlBody + _getSsmlTail();
var _getSsmlAsString = (ssmlBody, language, version) => {
return _getSsmlHead(language, version) + ssmlBody + _getSsmlTail();
};
var _parseToSsml = (ssmlStr, languageCode) => {
if(!languageCode) {
var _parseToSsml = (ssmlStr, languageCode, version) => {
if (!languageCode) {
throw new ArgumentError("Language code is missing when calling parseToSsml");
}
if (typeof(version) === "undefined") {
version = "1.1";
}
try {

@@ -42,3 +45,3 @@ var parsed = _parser.parse(ssmlStr);

}
return _getSsmlAsString(parsed, languageCode);
return _getSsmlAsString(parsed, languageCode, version);
};

@@ -45,0 +48,0 @@

@@ -39,3 +39,2 @@ "use strict";

{ expression: "[[speed:5%|TEXT]]", expected: HEAD + "<prosody rate=\"5%\">TEXT</prosody>" + TAIL },
{ expression: "[[speed:+5%|TEXT]]", expected: HEAD + "<prosody rate=\"+5%\">TEXT</prosody>" + TAIL },
{ expression: "[[spe:x-slow|TEXT]]", expected: HEAD + "<prosody rate=\"x-slow\">TEXT</prosody>" + TAIL },

@@ -48,3 +47,2 @@ { expression: "[[spe:slow|TEXT]]", expected: HEAD + "<prosody rate=\"slow\">TEXT</prosody>" + TAIL },

{ expression: "[[spe:5%|TEXT]]", expected: HEAD + "<prosody rate=\"5%\">TEXT</prosody>" + TAIL },
{ expression: "[[spe:+5%|TEXT]]", expected: HEAD + "<prosody rate=\"+5%\">TEXT</prosody>" + TAIL },
{ expression: "[[pitch:x-low|TEXT]]", expected: HEAD + "<prosody pitch=\"x-low\">TEXT</prosody>" + TAIL },

@@ -68,2 +66,6 @@ { expression: "[[pitch:low|TEXT]]", expected: HEAD + "<prosody pitch=\"low\">TEXT</prosody>" + TAIL },

{ expression: "[[pit:-5%|TEXT]]", expected: HEAD + "<prosody pitch=\"-5%\">TEXT</prosody>" + TAIL },
{ expression: "[[pitch:+5Hz|TEXT]]", expected: HEAD + "<prosody pitch=\"+5Hz\">TEXT</prosody>" + TAIL },
{ expression: "[[pit:+5Hz|TEXT]]", expected: HEAD + "<prosody pitch=\"+5Hz\">TEXT</prosody>" + TAIL },
{ expression: "[[pitch:+12st|TEXT]]", expected: HEAD + "<prosody pitch=\"+12st\">TEXT</prosody>" + TAIL },
{ expression: "[[pit:+12st|TEXT]]", expected: HEAD + "<prosody pitch=\"+12st\">TEXT</prosody>" + TAIL },
{ expression: "[[volume:silent|TEXT]]", expected: HEAD + "<prosody volume=\"silent\">TEXT</prosody>" + TAIL },

@@ -87,11 +89,11 @@ { expression: "[[volume:x-soft|TEXT]]", expected: HEAD + "<prosody volume=\"x-soft\">TEXT</prosody>" + TAIL },

{ expression: "[[volume:medium,speed:medium|TEXT]]", expected: HEAD + "<prosody rate=\"medium\" volume=\"medium\">TEXT</prosody>" + TAIL },
{ expression: "[[vol:+6dB,spe:+5%|TEXT]]", expected: HEAD + "<prosody rate=\"+5%\" volume=\"+6dB\">TEXT</prosody>" + TAIL },
{ expression: "[[vol:+6dB,spe:5%|TEXT]]", expected: HEAD + "<prosody rate=\"5%\" volume=\"+6dB\">TEXT</prosody>" + TAIL },
{ expression: "[[speed:medium,volume:medium|TEXT]]", expected: HEAD + "<prosody rate=\"medium\" volume=\"medium\">TEXT</prosody>" + TAIL },
{ expression: "[[spe:+5%,vol:+6dB|TEXT]]", expected: HEAD + "<prosody rate=\"+5%\" volume=\"+6dB\">TEXT</prosody>" + TAIL },
{ expression: "[[spe:5%,vol:+6dB|TEXT]]", expected: HEAD + "<prosody rate=\"5%\" volume=\"+6dB\">TEXT</prosody>" + TAIL },
{ expression: "[[volume:medium,pitch:+5%|TEXT]]", expected: HEAD + "<prosody pitch=\"+5%\" volume=\"medium\">TEXT</prosody>" + TAIL },
{ expression: "[[pit:+5%,vol:+6dB|TEXT]]", expected: HEAD + "<prosody pitch=\"+5%\" volume=\"+6dB\">TEXT</prosody>" + TAIL },
{ expression: "[[spe:medium,pit:medium|TEXT]]", expected: HEAD + "<prosody rate=\"medium\" pitch=\"medium\">TEXT</prosody>" + TAIL },
{ expression: "[[pitch:medium,speed:+5%|TEXT]]", expected: HEAD + "<prosody rate=\"+5%\" pitch=\"medium\">TEXT</prosody>" + TAIL },
{ expression: "[[pitch:medium,speed:5%|TEXT]]", expected: HEAD + "<prosody rate=\"5%\" pitch=\"medium\">TEXT</prosody>" + TAIL },
{ expression: "[[speed:medium,volume:+6dB,pitch:medium|TEXT]]", expected: HEAD + "<prosody rate=\"medium\" pitch=\"medium\" volume=\"+6dB\">TEXT</prosody>" + TAIL },
{ expression: "[[volume:medium,speed:+5%,pitch:medium|TEXT]]", expected: HEAD + "<prosody rate=\"+5%\" pitch=\"medium\" volume=\"medium\">TEXT</prosody>" + TAIL },
{ expression: "[[volume:medium,speed:5%,pitch:medium|TEXT]]", expected: HEAD + "<prosody rate=\"5%\" pitch=\"medium\" volume=\"medium\">TEXT</prosody>" + TAIL },
{ expression: "[[volume:+6dB,pitch:medium,speed:medium|TEXT]]", expected: HEAD + "<prosody rate=\"medium\" pitch=\"medium\" volume=\"+6dB\">TEXT</prosody>" + TAIL },

@@ -105,3 +107,3 @@ { expression: "[[pitch:medium,volume:medium,speed:5%|TEXT]]", expected: HEAD + "<prosody rate=\"5%\" pitch=\"medium\" volume=\"medium\">TEXT</prosody>" + TAIL },

{ expression: "[[pitch:unknown|TEXT]]", expected: HEAD + "<prosody pitch=\"low\">TEXT</prosody>" + TAIL },
{ expression: "[[volume:unknown|TEXT]]", expected: HEAD + "<prosody volume=\"loud\">TEXT</prosody>" + TAIL },
{ expression: "[[volume:unknown|TEXT]]", expected: HEAD + "<prosody volume=\"loud\">TEXT</prosody>" + TAIL }
];

@@ -115,14 +117,14 @@

var happy = [
{expression: "[[emphasis:strong|TEXT]]", expected: HEAD + "<emphasis level=\"strong\">TEXT</emphasis>" + TAIL},
{expression: "[[emphasis:moderate|TEXT]]", expected: HEAD + "<emphasis level=\"moderate\">TEXT</emphasis>" + TAIL},
{expression: "[[emphasis:none|TEXT]]", expected: HEAD + "<emphasis level=\"none\">TEXT</emphasis>" + TAIL},
{expression: "[[emphasis:reduced|TEXT]]", expected: HEAD + "<emphasis level=\"reduced\">TEXT</emphasis>" + TAIL},
{expression: "[[emp:strong|TEXT]]", expected: HEAD + "<emphasis level=\"strong\">TEXT</emphasis>" + TAIL},
{expression: "[[emp:moderate|TEXT]]", expected: HEAD + "<emphasis level=\"moderate\">TEXT</emphasis>" + TAIL},
{expression: "[[emp:none|TEXT]]", expected: HEAD + "<emphasis level=\"none\">TEXT</emphasis>" + TAIL},
{expression: "[[emp:reduced|TEXT]]", expected: HEAD + "<emphasis level=\"reduced\">TEXT</emphasis>" + TAIL},
{ expression: "[[emphasis:strong|TEXT]]", expected: HEAD + "<emphasis level=\"strong\">TEXT</emphasis>" + TAIL },
{ expression: "[[emphasis:moderate|TEXT]]", expected: HEAD + "<emphasis level=\"moderate\">TEXT</emphasis>" + TAIL },
{ expression: "[[emphasis:none|TEXT]]", expected: HEAD + "<emphasis level=\"none\">TEXT</emphasis>" + TAIL },
{ expression: "[[emphasis:reduced|TEXT]]", expected: HEAD + "<emphasis level=\"reduced\">TEXT</emphasis>" + TAIL },
{ expression: "[[emp:strong|TEXT]]", expected: HEAD + "<emphasis level=\"strong\">TEXT</emphasis>" + TAIL },
{ expression: "[[emp:moderate|TEXT]]", expected: HEAD + "<emphasis level=\"moderate\">TEXT</emphasis>" + TAIL },
{ expression: "[[emp:none|TEXT]]", expected: HEAD + "<emphasis level=\"none\">TEXT</emphasis>" + TAIL },
{ expression: "[[emp:reduced|TEXT]]", expected: HEAD + "<emphasis level=\"reduced\">TEXT</emphasis>" + TAIL },
];
var sad = [
{expression: "[[emphasis:unknown|TEXT]]", expected: HEAD + "<emphasis level=\"strong\">TEXT</emphasis>" + TAIL},
{ expression: "[[emphasis:unknown|TEXT]]", expected: HEAD + "<emphasis level=\"strong\">TEXT</emphasis>" + TAIL }
];

@@ -136,25 +138,25 @@

var happy = [
{expression: "[[strength:none]]", expected: HEAD + "<break strength=\"none\"/>" + TAIL},
{expression: "[[strength:x-weak]]", expected: HEAD + "<break strength=\"x-weak\"/>" + TAIL},
{expression: "[[strength:weak]]", expected: HEAD + "<break strength=\"weak\"/>" + TAIL},
{expression: "[[strength:medium]]", expected: HEAD + "<break strength=\"medium\"/>" + TAIL},
{expression: "[[strength:strong]]", expected: HEAD + "<break strength=\"strong\"/>" + TAIL},
{expression: "[[strength:x-strong]]", expected: HEAD + "<break strength=\"x-strong\"/>" + TAIL},
{expression: "[[str:none]]", expected: HEAD + "<break strength=\"none\"/>" + TAIL},
{expression: "[[str:x-weak]]", expected: HEAD + "<break strength=\"x-weak\"/>" + TAIL},
{expression: "[[str:weak]]", expected: HEAD + "<break strength=\"weak\"/>" + TAIL},
{expression: "[[str:medium]]", expected: HEAD + "<break strength=\"medium\"/>" + TAIL},
{expression: "[[str:strong]]", expected: HEAD + "<break strength=\"strong\"/>" + TAIL},
{expression: "[[str:x-strong]]", expected: HEAD + "<break strength=\"x-strong\"/>" + TAIL},
{expression: "[[silence:100s]]", expected: HEAD + "<break time=\"100s\"/>" + TAIL},
{expression: "[[silence:100ms]]", expected: HEAD + "<break time=\"100ms\"/>" + TAIL},
{expression: "[[sil:100s]]", expected: HEAD + "<break time=\"100s\"/>" + TAIL},
{expression: "[[sil:100ms]]", expected: HEAD + "<break time=\"100ms\"/>" + TAIL},
{expression: "[[silence:150ms,strength:medium]]", expected: HEAD + "<break strength=\"medium\" time=\"150ms\"/>" + TAIL},
{expression: "[[strength:medium,silence:0.5s]]", expected: HEAD + "<break strength=\"medium\" time=\"0.5s\"/>" + TAIL}
{ expression: "[[strength:none]]", expected: HEAD + "<break strength=\"none\"/>" + TAIL },
{ expression: "[[strength:x-weak]]", expected: HEAD + "<break strength=\"x-weak\"/>" + TAIL },
{ expression: "[[strength:weak]]", expected: HEAD + "<break strength=\"weak\"/>" + TAIL },
{ expression: "[[strength:medium]]", expected: HEAD + "<break strength=\"medium\"/>" + TAIL },
{ expression: "[[strength:strong]]", expected: HEAD + "<break strength=\"strong\"/>" + TAIL },
{ expression: "[[strength:x-strong]]", expected: HEAD + "<break strength=\"x-strong\"/>" + TAIL },
{ expression: "[[str:none]]", expected: HEAD + "<break strength=\"none\"/>" + TAIL },
{ expression: "[[str:x-weak]]", expected: HEAD + "<break strength=\"x-weak\"/>" + TAIL },
{ expression: "[[str:weak]]", expected: HEAD + "<break strength=\"weak\"/>" + TAIL },
{ expression: "[[str:medium]]", expected: HEAD + "<break strength=\"medium\"/>" + TAIL },
{ expression: "[[str:strong]]", expected: HEAD + "<break strength=\"strong\"/>" + TAIL },
{ expression: "[[str:x-strong]]", expected: HEAD + "<break strength=\"x-strong\"/>" + TAIL },
{ expression: "[[silence:100s]]", expected: HEAD + "<break time=\"100s\"/>" + TAIL },
{ expression: "[[silence:100ms]]", expected: HEAD + "<break time=\"100ms\"/>" + TAIL },
{ expression: "[[sil:100s]]", expected: HEAD + "<break time=\"100s\"/>" + TAIL },
{ expression: "[[sil:100ms]]", expected: HEAD + "<break time=\"100ms\"/>" + TAIL },
{ expression: "[[silence:150ms,strength:medium]]", expected: HEAD + "<break strength=\"medium\" time=\"150ms\"/>" + TAIL },
{ expression: "[[strength:medium,silence:0.5s]]", expected: HEAD + "<break strength=\"medium\" time=\"0.5s\"/>" + TAIL }
];
var sad = [
{expression: "[[silence:unknown]]", expected: HEAD + "<break time=\"100s\"/>" + TAIL},
{expression: "[[strength:unknown]]", expected: HEAD + "<break strength=\"none\"/>" + TAIL},
{ expression: "[[silence:unknown]]", expected: HEAD + "<break time=\"100s\"/>" + TAIL },
{ expression: "[[strength:unknown]]", expected: HEAD + "<break strength=\"none\"/>" + TAIL }
];

@@ -168,6 +170,6 @@

var happy = [
{expression: "[[substitute:red color|red colour]]", expected: HEAD + "<sub alias=\"red color\">red colour</sub>" + TAIL},
{expression: "[[substitute:red color|]]", expected: HEAD + "<sub alias=\"red color\"></sub>" + TAIL},
{expression: "[[sub:red color|red colour]]", expected: HEAD + "<sub alias=\"red color\">red colour</sub>" + TAIL},
{expression: "[[sub:red color|]]", expected: HEAD + "<sub alias=\"red color\"></sub>" + TAIL}
{ expression: "[[substitute:red color|red colour]]", expected: HEAD + "<sub alias=\"red color\">red colour</sub>" + TAIL },
{ expression: "[[substitute:red color|]]", expected: HEAD + "<sub alias=\"red color\"></sub>" + TAIL },
{ expression: "[[sub:red color|red colour]]", expected: HEAD + "<sub alias=\"red color\">red colour</sub>" + TAIL },
{ expression: "[[sub:red color|]]", expected: HEAD + "<sub alias=\"red color\"></sub>" + TAIL }
];

@@ -180,4 +182,4 @@

var happy = [
{expression: "[[audio:https://example.mp3]]", expected: HEAD + "<audio src=\"https://example.mp3\"/>" + TAIL},
{expression: "[[aud:https://example.mp3]]", expected: HEAD + "<audio src=\"https://example.mp3\"/>" + TAIL},
{ expression: "[[audio:https://example.mp3]]", expected: HEAD + "<audio src=\"https://example.mp3\"/>" + TAIL },
{ expression: "[[aud:https://example.mp3]]", expected: HEAD + "<audio src=\"https://example.mp3\"/>" + TAIL }
];

@@ -190,4 +192,4 @@

var happy = [
{expression: "[[lang:en-GB|TEXT]]", expected: HEAD + "<lang xml:lang=\"en-GB\">TEXT</lang>" + TAIL},
{expression: "[[lan:en-GB|TEXT]]", expected: HEAD + "<lang xml:lang=\"en-GB\">TEXT</lang>" + TAIL},
{ expression: "[[lang:en-GB|TEXT]]", expected: HEAD + "<lang xml:lang=\"en-GB\">TEXT</lang>" + TAIL },
{ expression: "[[lan:en-GB|TEXT]]", expected: HEAD + "<lang xml:lang=\"en-GB\">TEXT</lang>" + TAIL }
];

@@ -200,6 +202,6 @@

var happy = [
{expression: "[[paragraph|TEXT]]", expected: HEAD + "<p>TEXT</p>" + TAIL},
{expression: "[[par|TEXT]]", expected: HEAD + "<p>TEXT</p>" + TAIL},
{expression: "[[sentence|TEXT]]", expected: HEAD + "<s>TEXT</s>" + TAIL},
{expression: "[[sen|TEXT]]", expected: HEAD + "<s>TEXT</s>" + TAIL}
{ expression: "[[paragraph|TEXT]]", expected: HEAD + "<p>TEXT</p>" + TAIL },
{ expression: "[[par|TEXT]]", expected: HEAD + "<p>TEXT</p>" + TAIL },
{ expression: "[[sentence|TEXT]]", expected: HEAD + "<s>TEXT</s>" + TAIL },
{ expression: "[[sen|TEXT]]", expected: HEAD + "<s>TEXT</s>" + TAIL }
];

@@ -212,7 +214,7 @@

var happy = [
{expression: "[[pronunciation:təˈmɑːtəʊ|tomato]]", expected: HEAD + "<phoneme ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL},
{expression: "[[pro:təˈmɑːtəʊ|tomato]]", expected: HEAD + "<phoneme ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL},
{expression: "[[alphabet:ipa,pronunciation:təˈmɑːtəʊ|tomato]]", expected: HEAD + "<phoneme alphabet=\"ipa\" ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL},
{expression: "[[alp:ipa,pronunciation:təˈmɑːtəʊ|tomato]]", expected: HEAD + "<phoneme alphabet=\"ipa\" ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL},
{expression: "[[pronunciation:təˈmɑːtəʊ,alphabet:ipa|tomato]]", expected: HEAD + "<phoneme alphabet=\"ipa\" ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL}
{ expression: "[[pronunciation:təˈmɑːtəʊ|tomato]]", expected: HEAD + "<phoneme ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL },
{ expression: "[[pro:təˈmɑːtəʊ|tomato]]", expected: HEAD + "<phoneme ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL },
{ expression: "[[alphabet:ipa,pronunciation:təˈmɑːtəʊ|tomato]]", expected: HEAD + "<phoneme alphabet=\"ipa\" ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL },
{ expression: "[[alp:ipa,pronunciation:təˈmɑːtəʊ|tomato]]", expected: HEAD + "<phoneme alphabet=\"ipa\" ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL },
{ expression: "[[pronunciation:təˈmɑːtəʊ,alphabet:ipa|tomato]]", expected: HEAD + "<phoneme alphabet=\"ipa\" ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL }
];

@@ -225,83 +227,84 @@

var happy = [
{expression: "[[type:cardinal|TEXT]]", expected: HEAD + "<say-as interpret-as=\"cardinal\">TEXT</say-as>" + TAIL},
{expression: "[[type:number|TEXT]]", expected: HEAD + "<say-as interpret-as=\"number\">TEXT</say-as>" + TAIL},
{expression: "[[type:ordinal|TEXT]]", expected: HEAD + "<say-as interpret-as=\"ordinal\">TEXT</say-as>" + TAIL},
{expression: "[[type:characters|TEXT]]", expected: HEAD + "<say-as interpret-as=\"characters\">TEXT</say-as>" + TAIL},
{expression: "[[type:digits|TEXT]]", expected: HEAD + "<say-as interpret-as=\"digits\">TEXT</say-as>" + TAIL},
{expression: "[[type:fraction|TEXT]]", expected: HEAD + "<say-as interpret-as=\"fraction\">TEXT</say-as>" + TAIL},
{expression: "[[type:expletive|TEXT]]", expected: HEAD + "<say-as interpret-as=\"expletive\">TEXT</say-as>" + TAIL},
{expression: "[[type:bleep|TEXT]]", expected: HEAD + "<say-as interpret-as=\"bleep\">TEXT</say-as>" + TAIL},
{expression: "[[type:interjection|TEXT]]", expected: HEAD + "<say-as interpret-as=\"interjection\">TEXT</say-as>" + TAIL},
{expression: "[[type:unit|TEXT]]", expected: HEAD + "<say-as interpret-as=\"unit\">TEXT</say-as>" + TAIL},
{expression: "[[type:verbatim|TEXT]]", expected: HEAD + "<say-as interpret-as=\"verbatim\">TEXT</say-as>" + TAIL},
{expression: "[[type:spell-out|TEXT]]", expected: HEAD + "<say-as interpret-as=\"spell-out\">TEXT</say-as>" + TAIL},
{expression: "[[type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\">TEXT</say-as>" + TAIL},
{expression: "[[type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\">TEXT</say-as>" + TAIL},
{expression: "[[type:telephone|TEXT]]", expected: HEAD + "<say-as interpret-as=\"telephone\">TEXT</say-as>" + TAIL},
{expression: "[[type:address|TEXT]]", expected: HEAD + "<say-as interpret-as=\"address\">TEXT</say-as>" + TAIL},
{expression: "[[typ:cardinal|TEXT]]", expected: HEAD + "<say-as interpret-as=\"cardinal\">TEXT</say-as>" + TAIL},
{expression: "[[typ:number|TEXT]]", expected: HEAD + "<say-as interpret-as=\"number\">TEXT</say-as>" + TAIL},
{expression: "[[typ:ordinal|TEXT]]", expected: HEAD + "<say-as interpret-as=\"ordinal\">TEXT</say-as>" + TAIL},
{expression: "[[typ:characters|TEXT]]", expected: HEAD + "<say-as interpret-as=\"characters\">TEXT</say-as>" + TAIL},
{expression: "[[typ:digits|TEXT]]", expected: HEAD + "<say-as interpret-as=\"digits\">TEXT</say-as>" + TAIL},
{expression: "[[typ:fraction|TEXT]]", expected: HEAD + "<say-as interpret-as=\"fraction\">TEXT</say-as>" + TAIL},
{expression: "[[typ:expletive|TEXT]]", expected: HEAD + "<say-as interpret-as=\"expletive\">TEXT</say-as>" + TAIL},
{expression: "[[typ:bleep|TEXT]]", expected: HEAD + "<say-as interpret-as=\"bleep\">TEXT</say-as>" + TAIL},
{expression: "[[typ:interjection|TEXT]]", expected: HEAD + "<say-as interpret-as=\"interjection\">TEXT</say-as>" + TAIL},
{expression: "[[typ:unit|TEXT]]", expected: HEAD + "<say-as interpret-as=\"unit\">TEXT</say-as>" + TAIL},
{expression: "[[typ:verbatim|TEXT]]", expected: HEAD + "<say-as interpret-as=\"verbatim\">TEXT</say-as>" + TAIL},
{expression: "[[typ:spell-out|TEXT]]", expected: HEAD + "<say-as interpret-as=\"spell-out\">TEXT</say-as>" + TAIL},
{expression: "[[typ:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\">TEXT</say-as>" + TAIL},
{expression: "[[typ:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\">TEXT</say-as>" + TAIL},
{expression: "[[typ:telephone|TEXT]]", expected: HEAD + "<say-as interpret-as=\"telephone\">TEXT</say-as>" + TAIL},
{expression: "[[typ:address|TEXT]]", expected: HEAD + "<say-as interpret-as=\"address\">TEXT</say-as>" + TAIL},
{expression: "[[type:time,format:hms24|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\">TEXT</say-as>" + TAIL},
{expression: "[[type:time,format:hms12|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms12\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:mdy|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"mdy\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:dmy|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dmy\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:ymd|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ymd\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:md|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"md\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:dm|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dm\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:ym|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ym\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:my|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"my\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:d|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"d\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:m|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"m\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:y|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"y\">TEXT</say-as>" + TAIL},
{expression: "[[type:time,for:hms24|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\">TEXT</say-as>" + TAIL},
{expression: "[[type:time,for:hms12|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms12\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,for:mdy|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"mdy\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,for:dmy|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dmy\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,for:ymd|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ymd\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,for:md|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"md\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,for:dm|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dm\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,for:ym|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ym\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,for:my|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"my\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,for:d|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"d\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,for:m|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"m\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,for:y|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"y\">TEXT</say-as>" + TAIL},
{expression: "[[format:hms24,type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\">TEXT</say-as>" + TAIL},
{expression: "[[format:hms12,type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms12\">TEXT</say-as>" + TAIL},
{expression: "[[format:mdy,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"mdy\">TEXT</say-as>" + TAIL},
{expression: "[[format:dmy,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dmy\">TEXT</say-as>" + TAIL},
{expression: "[[format:ymd,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ymd\">TEXT</say-as>" + TAIL},
{expression: "[[format:md,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"md\">TEXT</say-as>" + TAIL},
{expression: "[[format:dm,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dm\">TEXT</say-as>" + TAIL},
{expression: "[[format:ym,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ym\">TEXT</say-as>" + TAIL},
{expression: "[[format:my,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"my\">TEXT</say-as>" + TAIL},
{expression: "[[format:d,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"d\">TEXT</say-as>" + TAIL},
{expression: "[[format:m,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"m\">TEXT</say-as>" + TAIL},
{expression: "[[format:y,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"y\">TEXT</say-as>" + TAIL},
{expression: "[[type:time,format:hms24,detail:1|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL},
{expression: "[[type:time,format:hms24,det:1|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL},
{expression: "[[type:time,detail:1,format:hms24|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL},
{expression: "[[format:hms24,type:time,detail:1|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL},
{expression: "[[format:hms24,detail:1,type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL},
{expression: "[[detail:1,type:time,format:hms24|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL},
{expression: "[[detail:1,format:hms24,type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL}
{ expression: "[[type:cardinal|TEXT]]", expected: HEAD + "<say-as interpret-as=\"cardinal\">TEXT</say-as>" + TAIL },
{ expression: "[[type:number|TEXT]]", expected: HEAD + "<say-as interpret-as=\"number\">TEXT</say-as>" + TAIL },
{ expression: "[[type:ordinal|TEXT]]", expected: HEAD + "<say-as interpret-as=\"ordinal\">TEXT</say-as>" + TAIL },
{ expression: "[[type:characters|TEXT]]", expected: HEAD + "<say-as interpret-as=\"characters\">TEXT</say-as>" + TAIL },
{ expression: "[[type:digits|TEXT]]", expected: HEAD + "<say-as interpret-as=\"digits\">TEXT</say-as>" + TAIL },
{ expression: "[[type:fraction|TEXT]]", expected: HEAD + "<say-as interpret-as=\"fraction\">TEXT</say-as>" + TAIL },
{ expression: "[[type:expletive|TEXT]]", expected: HEAD + "<say-as interpret-as=\"expletive\">TEXT</say-as>" + TAIL },
{ expression: "[[type:bleep|TEXT]]", expected: HEAD + "<say-as interpret-as=\"bleep\">TEXT</say-as>" + TAIL },
{ expression: "[[type:interjection|TEXT]]", expected: HEAD + "<say-as interpret-as=\"interjection\">TEXT</say-as>" + TAIL },
{ expression: "[[type:unit|TEXT]]", expected: HEAD + "<say-as interpret-as=\"unit\">TEXT</say-as>" + TAIL },
{ expression: "[[type:verbatim|TEXT]]", expected: HEAD + "<say-as interpret-as=\"verbatim\">TEXT</say-as>" + TAIL },
{ expression: "[[type:spell-out|TEXT]]", expected: HEAD + "<say-as interpret-as=\"spell-out\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\">TEXT</say-as>" + TAIL },
{ expression: "[[type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\">TEXT</say-as>" + TAIL },
{ expression: "[[type:telephone|TEXT]]", expected: HEAD + "<say-as interpret-as=\"telephone\">TEXT</say-as>" + TAIL },
{ expression: "[[type:address|TEXT]]", expected: HEAD + "<say-as interpret-as=\"address\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:cardinal|TEXT]]", expected: HEAD + "<say-as interpret-as=\"cardinal\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:number|TEXT]]", expected: HEAD + "<say-as interpret-as=\"number\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:ordinal|TEXT]]", expected: HEAD + "<say-as interpret-as=\"ordinal\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:characters|TEXT]]", expected: HEAD + "<say-as interpret-as=\"characters\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:digits|TEXT]]", expected: HEAD + "<say-as interpret-as=\"digits\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:fraction|TEXT]]", expected: HEAD + "<say-as interpret-as=\"fraction\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:expletive|TEXT]]", expected: HEAD + "<say-as interpret-as=\"expletive\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:bleep|TEXT]]", expected: HEAD + "<say-as interpret-as=\"bleep\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:interjection|TEXT]]", expected: HEAD + "<say-as interpret-as=\"interjection\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:unit|TEXT]]", expected: HEAD + "<say-as interpret-as=\"unit\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:verbatim|TEXT]]", expected: HEAD + "<say-as interpret-as=\"verbatim\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:spell-out|TEXT]]", expected: HEAD + "<say-as interpret-as=\"spell-out\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:telephone|TEXT]]", expected: HEAD + "<say-as interpret-as=\"telephone\">TEXT</say-as>" + TAIL },
{ expression: "[[typ:address|TEXT]]", expected: HEAD + "<say-as interpret-as=\"address\">TEXT</say-as>" + TAIL },
{ expression: "[[type:time,format:hms24|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\">TEXT</say-as>" + TAIL },
{ expression: "[[type:time,format:hms12|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms12\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:mdy|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"mdy\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:dmy|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dmy\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:ymd|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ymd\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:md|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"md\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:dm|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dm\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:ym|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ym\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:my|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"my\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:d|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"d\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:m|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"m\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:y|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"y\">TEXT</say-as>" + TAIL },
{ expression: "[[type:time,for:hms24|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\">TEXT</say-as>" + TAIL },
{ expression: "[[type:time,for:hms12|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms12\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,for:mdy|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"mdy\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,for:dmy|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dmy\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,for:ymd|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ymd\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,for:md|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"md\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,for:dm|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dm\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,for:ym|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ym\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,for:my|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"my\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,for:d|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"d\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,for:m|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"m\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,for:y|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"y\">TEXT</say-as>" + TAIL },
{ expression: "[[format:hms24,type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\">TEXT</say-as>" + TAIL },
{ expression: "[[format:hms12,type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms12\">TEXT</say-as>" + TAIL },
{ expression: "[[format:mdy,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"mdy\">TEXT</say-as>" + TAIL },
{ expression: "[[format:dmy,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dmy\">TEXT</say-as>" + TAIL },
{ expression: "[[format:ymd,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ymd\">TEXT</say-as>" + TAIL },
{ expression: "[[format:md,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"md\">TEXT</say-as>" + TAIL },
{ expression: "[[format:dm,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dm\">TEXT</say-as>" + TAIL },
{ expression: "[[format:ym,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"ym\">TEXT</say-as>" + TAIL },
{ expression: "[[format:my,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"my\">TEXT</say-as>" + TAIL },
{ expression: "[[format:d,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"d\">TEXT</say-as>" + TAIL },
{ expression: "[[format:m,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"m\">TEXT</say-as>" + TAIL },
{ expression: "[[format:y,type:date|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"y\">TEXT</say-as>" + TAIL },
{ expression: "[[type:time,format:hms24,detail:1|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL },
{ expression: "[[type:time,format:hms24,det:1|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL },
{ expression: "[[type:time,detail:1,format:hms24|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL },
{ expression: "[[format:hms24,type:time,detail:1|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL },
{ expression: "[[format:hms24,detail:1,type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL },
{ expression: "[[detail:1,type:time,format:hms24|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL },
{ expression: "[[detail:1,format:hms24,type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL },
{ expression: "[[detail:punctuation,format:hms24,type:time|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"punctuation\">TEXT</say-as>" + TAIL }
];
var sad = [
{expression: "[[type:unknown|TEXT]]", expected: HEAD + "<say-as interpret-as=\"cardinal\">TEXT</say-as>" + TAIL},
{expression: "[[type:date,format:unknown|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dmy\">TEXT</say-as>" + TAIL},
{expression: "[[type:time,format:hms24,detail:unknown|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL},
{ expression: "[[type:unknown|TEXT]]", expected: HEAD + "<say-as interpret-as=\"cardinal\">TEXT</say-as>" + TAIL },
{ expression: "[[type:date,format:unknown|TEXT]]", expected: HEAD + "<say-as interpret-as=\"date\" format=\"dmy\">TEXT</say-as>" + TAIL },
{ expression: "[[type:time,format:hms24,detail:_|TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL }
];

@@ -315,4 +318,4 @@

var happy = [
{expression: "[[voice:NAME|TEXT]]", expected: HEAD + "<voice name=\"NAME\">TEXT</voice>" + TAIL},
{expression: "[[voi:NAME|TEXT]]", expected: HEAD + "<voice name=\"NAME\">TEXT</voice>" + TAIL}
{ expression: "[[voice:NAME|TEXT]]", expected: HEAD + "<voice name=\"NAME\">TEXT</voice>" + TAIL },
{ expression: "[[voi:NAME|TEXT]]", expected: HEAD + "<voice name=\"NAME\">TEXT</voice>" + TAIL }
];

@@ -325,3 +328,3 @@

var happy = [
{expression: "[[pos:VB|TEXT]]", expected: HEAD + "<w role=\"VB\">TEXT</w>" + TAIL}
{ expression: "[[pos:VB|TEXT]]", expected: HEAD + "<w role=\"VB\">TEXT</w>" + TAIL }
];

@@ -332,2 +335,75 @@

describe("Mark with name", () => {
var happy = [
{ expression: "[[mark:NAME|TEXT]]", expected: HEAD + "<mark name=\"NAME\"/>" + TAIL },
{ expression: "[[mar:NAME|TEXT]]", expected: HEAD + "<mark name=\"NAME\"/>" + TAIL }
];
runHappyTests(happy);
});
describe("Default speaking", () => {
var happy = [
{ expression: "This is a test without markups", expected: HEAD + "This is a test without markups" + TAIL }
];
runHappyTests(happy);
});
describe("Vendor extensions", () => {
var happy = [
{ expression: "[[amzWhispered|TEXT]]", expected: HEAD + "<amazon:effect name=\"whispered\">TEXT</amazon:effect>" + TAIL },
{ expression: "[[aw|TEXT]]", expected: HEAD + "<amazon:effect name=\"whispered\">TEXT</amazon:effect>" + TAIL },
{ expression: "[[amzPhonation:soft|TEXT]]", expected: HEAD + "<amazon:effect phonation=\"soft\">TEXT</amazon:effect>" + TAIL },
{ expression: "[[ap:soft|TEXT]]", expected: HEAD + "<amazon:effect phonation=\"soft\">TEXT</amazon:effect>" + TAIL },
{ expression: "[[amzTimbre:+15%|TEXT]]", expected: HEAD + "<amazon:effect vocal-tract-length=\"+15%\">TEXT</amazon:effect>" + TAIL },
{ expression: "[[at:+15%|TEXT]]", expected: HEAD + "<amazon:effect vocal-tract-length=\"+15%\">TEXT</amazon:effect>" + TAIL },
{ expression: "[[amzDRC|TEXT]]", expected: HEAD + "<amazon:effect name=\"drc\">TEXT</amazon:effect>" + TAIL },
{ expression: "[[adrc|TEXT]]", expected: HEAD + "<amazon:effect name=\"drc\">TEXT</amazon:effect>" + TAIL },
{ expression: "[[amzBreathDuration:medium,amzBreathVolume:x-loud]]", expected: HEAD + "<amazon:breath duration=\"medium\" volume=\"x-loud\"/>" + TAIL },
{ expression: "[[abd:medium,abv:x-loud]]", expected: HEAD + "<amazon:breath duration=\"medium\" volume=\"x-loud\"/>" + TAIL },
{ expression: "[[amzBreathVolume:x-loud,amzBreathDuration:medium]]", expected: HEAD + "<amazon:breath duration=\"medium\" volume=\"x-loud\"/>" + TAIL },
{ expression: "[[abv:x-loud,abd:medium]]", expected: HEAD + "<amazon:breath duration=\"medium\" volume=\"x-loud\"/>" + TAIL },
{ expression: "[[amzBreathVolume:x-loud]]", expected: HEAD + "<amazon:breath volume=\"x-loud\"/>" + TAIL },
{ expression: "[[abv:x-loud]]", expected: HEAD + "<amazon:breath volume=\"x-loud\"/>" + TAIL },
{ expression: "[[amzBreathDuration:medium]]", expected: HEAD + "<amazon:breath duration=\"medium\"/>" + TAIL },
{ expression: "[[abd:medium]]", expected: HEAD + "<amazon:breath duration=\"medium\"/>" + TAIL },
{ expression: "[[amzDefaultBreath]]", expected: HEAD + "<amazon:breath/>" + TAIL },
{ expression: "[[adb]]", expected: HEAD + "<amazon:breath/>" + TAIL },
{ expression: "[[ibmExprType:GoodNews|TEXT]]", expected: HEAD + "<express-as type=\"GoodNews\">TEXT</express-as>" + TAIL },
{ expression: "[[iet:GoodNews|TEXT]]", expected: HEAD + "<express-as type=\"GoodNews\">TEXT</express-as>" + TAIL },
{ expression: "[[ibmTransType:Young,ibmStrength:80%|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\" strength=\"80%\">TEXT</voice-transformation>" + TAIL },
{ expression: "[[itt:Young,ist:80%|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\" strength=\"80%\">TEXT</voice-transformation>" + TAIL },
{ expression: "[[ibmStrength:80%,ibmTransType:Young|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\" strength=\"80%\">TEXT</voice-transformation>" + TAIL },
{ expression: "[[ibmTransType:Young|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\">TEXT</voice-transformation>" + TAIL },
{ expression: "[[itt:Young|TEXT]]", expected: HEAD + "<voice-transformation type=\"Young\">TEXT</voice-transformation>" + TAIL }
];
runHappyTests(happy);
});
it("should ignore whitespaces", () => {
var happy = [
{ expression: "[[ speed: medium ,volume: +6dB,pitch: medium|TEXT]]", expected: HEAD + "<prosody rate=\"medium\" pitch=\"medium\" volume=\"+6dB\">TEXT</prosody>" + TAIL },
{ expression: "[[emphasis :none|TEXT]]", expected: HEAD + "<emphasis level=\"none\">TEXT</emphasis>" + TAIL },
{ expression: "[[strength: medium, silence : 0.5s]]", expected: HEAD + "<break strength=\"medium\" time=\"0.5s\"/>" + TAIL },
{ expression: "[[ substitute: red color | red colour ]]", expected: HEAD + "<sub alias=\" red color \"> red colour </sub>" + TAIL },
{ expression: "[[audio :https://example.mp3]]", expected: HEAD + "<audio src=\"https://example.mp3\"/>" + TAIL },
{ expression: "[[lang :en-GB|TEXT]]", expected: HEAD + "<lang xml:lang=\"en-GB\">TEXT</lang>" + TAIL },
{ expression: "[[paragraph |TEXT]]", expected: HEAD + "<p>TEXT</p>" + TAIL },
{ expression: "[[ sentence |TEXT]]", expected: HEAD + "<s>TEXT</s>" + TAIL },
{ expression: "[[pronunciation :təˈmɑːtəʊ, alphabet:ipa|tomato]]", expected: HEAD + "<phoneme alphabet=\"ipa\" ph=\"təˈmɑːtəʊ\">tomato</phoneme>" + TAIL },
{ expression: "[[ type:time , detail:1, format:hms24 |TEXT]]", expected: HEAD + "<say-as interpret-as=\"time\" format=\"hms24\" detail=\"1\">TEXT</say-as>" + TAIL },
{ expression: "[[voice: NAME|TEXT]]", expected: HEAD + "<voice name=\"NAME\">TEXT</voice>" + TAIL },
{ expression: "[[pos: VB|TEXT]]", expected: HEAD + "<w role=\"VB\">TEXT</w>" + TAIL }
];
happy.forEach((test) => {
var parsed = undertest.parseToSsml(test.expression, "en-GB");
expect(parsed).to.be.have.string("<speak ");
expect(parsed).to.equal(test.expected);
xml2js.parseString(parsed, (err) => { expect(err).to.be.null; });
});
});
it("should return original input which dose not have markups", () => {

@@ -340,6 +416,12 @@ var text_without_markup = "This is a test without markups";

it("should use a specific SSML version parsed in", () => {
var parsed = undertest.parseToSsml("[[volume:+6dB|TEXT]]", "en-GB", "1.0");
expect(parsed).to.be.a("string");
expect(parsed).to.have.string("version=\"1.0\"");
});
it("should detect and validate markups", () => {
expect(undertest.hasValidMarkups("[[volume:medium|TEXT]] and [[silence:0.5s]] and [[substitute:substitute|original]] are markups")).to.be.true;
expect(undertest.hasValidMarkups("This is a test without markups")).to.be.false;
expect(undertest.hasValidMarkups("[[volume:medium|TEXT]] and [[silence:5s]] and [[substitute:substitute|original]] are markups")).to.be.true;
expect(undertest.hasValidMarkups("This is a test without valid [[markups]]")).to.be.false;
expect(undertest.hasValidMarkups("This is a test with no markup")).to.be.false;
});

@@ -366,3 +448,3 @@

try {
undertest.parseToSsml("[[volume:100.0|TEXT]]");
undertest.parseToSsml("[[volume:+6dB|TEXT]]");
expect.fail();

@@ -369,0 +451,0 @@ } catch (e) {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc