Support for tengwarblock
authorKris Kowal <kris.kowal@cixar.com>
Fri, 31 Aug 2012 23:12:10 +0000 (16:12 -0700)
committerKris Kowal <kris.kowal@cixar.com>
Fri, 31 Aug 2012 23:14:39 +0000 (16:14 -0700)
18 files changed:
README.md
classical.js
custom-webfont.css [deleted file]
demo.html
demo.js
general-use.js
index.css
mediawiki/tengwar.php
tengwar-annatar-combined.css [new file with mode: 0644]
tengwar-annatar-combined.eot [moved from custom-webfont.eot with 100% similarity]
tengwar-annatar-combined.svg [moved from custom-webfont.svg with 100% similarity]
tengwar-annatar-combined.woff [moved from custom-webfont.woff with 100% similarity]
tengwar-annatar.js
test.css
vanilla-tengwar.html
vanilla-tengwar.js
vanilla-tengwar.min.html
vanilla-tengwar.min.js

index c5356f0..1ccac04 100644 (file)
--- a/README.md
+++ b/README.md
@@ -128,8 +128,10 @@ Using the Modules
     `makeColumn` primitive which is aware of how a column of tengwar and
     tehtar can transform to accommodate additional tehtar with this
     font.
-    -   `transcribe(tengwarObjectNotation)`: to Tengwar Annatar key
+    -   `transcribe(tengwarObjectNotation, options)`: to Tengwar Annatar key
         bindings
+        -   `plain`: plain text, no markup
+        -   `block`: block markup, with paragraph and line break tags
     -   `makeColumn(tengwa, above, below)`
         -   `canAddAbove()`
         -   `addAbove(tehta)`
index 72849d5..32397c5 100644 (file)
@@ -10,6 +10,8 @@ function makeOptions(options) {
     options = options || defaults;
     return {
         font: options.font || TengwarAnnatar,
+        block: options.block,
+        plain: options.plain,
         vilya: options.vilya,
         // false: (v: vala, w: wilya)
         // true: (v: vilya, w: ERROR)
@@ -43,6 +45,8 @@ function makeOptions(options) {
         // TODO triple dots for y
         // TODO simplification of a, noting non-a
         // TODO following W in this mode?
+        // TODO namarië does not use double U or O curls
+        // TODO namarië does not reverse esse for E tehta
     };
 };
 
@@ -50,13 +54,13 @@ exports.transcribe = transcribe;
 function transcribe(text, options) {
     options = makeOptions(options);
     var font = options.font;
-    return font.transcribe(parse(text, options));
+    return font.transcribe(parse(text, options), options);
 }
 
 exports.encode = encode;
 function encode(text, options) {
     options = makeOptions(options);
-    return Notation.encode(parse(text, options));
+    return Notation.encode(parse(text, options), options);
 }
 
 // TODO convert to parse tree
@@ -143,7 +147,7 @@ function parseTengwa(callback, options, previous) {
                 if (character === "n") { // nn
                     return callback([makeColumn("numen").addTildeBelow()]);
                 } else if (character === "t") { // nt
-                    return callback([makeColumn("tinco")]);
+                    return callback([makeColumn("anto")]);
                 } else if (character === "d") { // nd
                     return callback([makeColumn("ando")]);
                 } else if (character === "g") { // ng
diff --git a/custom-webfont.css b/custom-webfont.css
deleted file mode 100644 (file)
index 6b98fe0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-@font-face {
-    font-family: tengwar;
-    src: url('custom-webfont.eot');
-    src: url('custom-webfont.eot#iefix'),
-         url('custom-webfont.woff') format('woff'),
-         url('custom-webfont.ttf') format('truetype'),
-         url('custom-webfont.svg#TengwarAnnatarItalic') format('svg');
-    font-weight: normal;
-    font-style: normal;
-}
-
-.tengwar {
-    font-family: tengwar;
-    font-size: 30px;
-}
-
index 1fcac86..a968da9 100644 (file)
--- a/demo.html
+++ b/demo.html
@@ -1,10 +1,32 @@
 <!doctype html>
 <html>
     <head>
-        <link rel="stylesheet" type="text/css" href="custom-webfont.css">
+        <meta charset="utf-8">
+        <link rel="stylesheet" type="text/css" href="tengwar-annatar-combined.css">
         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
         <script src="node_modules/mr/bootstrap.js" data-module="demo"></script>
     </head>
     <body>
+        <div class="tengwar" data-tengwar="Ai! laurië lantar lassi súrinen,
+            Yéni únótimë ve rámar aldaron!
+            Yéni ve lintë yuldar avánier
+            mi oromardi lisse-miruvóreva
+            Andúnë pella, Vardo tellumar
+            nu luini yassen tintilar i eleni
+            ómaryo airetári-lírinen.
+
+            Sí man i yulma nin enquantuva?
+
+            An sí Tintallë Varda Oiolossëo
+            ve fanyar máryat Elentári ortanë
+            ar ilyë tier undulávë lumbulë;
+            ar sindanóriello caita mornië
+            i falmalinnar imbë met, ar hísië
+            untúpa Calaciryo míri oialë.
+            Si vanwa ná, Rómello vanwa, Valimar!
+
+            Namárië! Nai hiruvalyë Valimar.
+            Nai elyë hiruva. Namárië!"
+            data-mode="classical"></div>
     </body>
 </html>
diff --git a/demo.js b/demo.js
index bd8a9cd..1220576 100644 (file)
--- a/demo.js
+++ b/demo.js
@@ -31,3 +31,4 @@ Object.keys(generalUse).forEach(function (latin) {
 });
 
 require("./vanilla-tengwar");
+
index 80a2282..ced38d4 100644 (file)
@@ -10,6 +10,8 @@ function makeOptions(options) {
     options = options || defaults;
     return {
         font: options.font || TengwarAnnatar,
+        block: options.block,
+        plain: options.plain,
         doubleNasalsWithTildeBelow: options.doubleNasalsWithTildeBelow,
         // Any tengwa can be doubled by placing a tilde above, and any tengwa
         // can be prefixed with the nasal from the same series by putting a
@@ -28,13 +30,13 @@ exports.transcribe = transcribe;
 function transcribe(text, options) {
     options = makeOptions(options);
     var font = options.font;
-    return font.transcribe(parse(text, options));
+    return font.transcribe(parse(text, options), options);
 }
 
 exports.encode = encode;
 function encode(text, options) {
     options = makeOptions(options);
-    return Notation.encode(parse(text, options));
+    return Notation.encode(parse(text, options), options);
 }
 
 // TODO convert to parse tree
index 6d4e80e..4aec09c 100644 (file)
--- a/index.css
+++ b/index.css
@@ -1,11 +1,11 @@
 
 @font-face {
     font-family: tengwar;
-    src: url('custom-webfont.eot');
-    src: url('custom-webfont.eot#iefix'),
-         url('custom-webfont.woff') format('woff'),
-         url('custom-webfont.ttf') format('truetype'),
-         url('custom-webfont.svg#TengwarAnnatarItalic') format('svg');
+    src: url('tengwar-annatar-combined.eot');
+    src: url('tengwar-annatar-combined.eot#iefix'),
+         url('tengwar-annatar-combined.woff') format('woff'),
+         url('tengwar-annatar-combined.ttf') format('truetype'),
+         url('tengwar-annatar-combined.svg#TengwarAnnatarItalic') format('svg');
     font-weight: normal;
     font-style: normal;
 }
index 425313a..9751de7 100644 (file)
@@ -4,19 +4,28 @@ $wgHooks["ParserFirstCallInit"][] = "wfTengwarInit";
 
 function wfTengwarInit(Parser $parser) {
     $parser->setHook("tengwar", "wfTengwar");
+    $parser->setHook("tengwarblock", "wfTengwarBlock");
     return true;
 }
+
 function wfTengwar($input, array $args) {
+    return wfMakeTengwar($input, $args, "span");
+}
+
+function wfTengwarBlock($input, array $args) {
+    return wfMakeTengwar($input, $args, "div");
+}
+
+function wfMakeTengwar($input, array $args, $tag) {
     $mode = array_key_exists("mode", $args) ? $args["mode"] : "";
     $encoded = array_key_exists("encoded", $args) ? $args["encoded"] : "";
     $bindings = array_key_exists("bindings", $args) ? $args["bindings"] : "(JavaScript required)";
-    return "<span class=\"tengwar\" data-tengwar=\"" .
-        htmlspecialchars($input) .
-        "\" data-encoded=\"" .
-        htmlspecialchars($encoded) .
-        "\" data-mode=\"" .
-        htmlspecialchars($mode) .
-        "\" >" .  htmlspecialchars($bindings) . "</span>";
+    return
+        "<" . $tag . " class=\"tengwar\"" .
+        ( $input ? " data-tengwar=\"" .  htmlspecialchars($input) . "\"" : "" ) .
+        ( $encoded ? " data-encoded=\"" .  htmlspecialchars($encoded) . "\"" : "" ) .
+        ( $mode ? " data-mode=\"" .  htmlspecialchars($mode) . "\"" : "" ) .
+        ">" .  htmlspecialchars($bindings) .  "</" . $tag . ">";
 }
 
 ?>
diff --git a/tengwar-annatar-combined.css b/tengwar-annatar-combined.css
new file mode 100644 (file)
index 0000000..307b07c
--- /dev/null
@@ -0,0 +1,18 @@
+
+@font-face {
+    font-family: tengwar;
+    src: url('tengwar-annatar-combined.eot');
+    src: url('tengwar-annatar-combined.eot#iefix'),
+         url('tengwar-annatar-combined.woff') format('woff'),
+         url('tengwar-annatar-combined.ttf') format('truetype'),
+         url('tengwar-annatar-combined.svg#TengwarAnnatarItalic') format('svg');
+    font-weight: normal;
+    font-style: normal;
+}
+
+.tengwar {
+    font-family: tengwar;
+    font-size: 30px;
+    line-height: 200%;
+}
+
index 17c11dc..bd98f02 100644 (file)
@@ -522,10 +522,17 @@ var Font = {
 };
 
 exports.transcribe = transcribe;
-function transcribe(sections) {
+function transcribe(sections, options) {
+    options = options || {};
+    console.log(options);
+    var plain = options.plain || false;
+    var block = options.block || false;
+    var beginParagraph = block ? "<p>" : "";
+    var delimitParagraph = block ? "<br>" : "";
+    var endParagraph = block ? "</p>" : "";
     return sections.map(function (section) {
         return section.map(function (paragraph) {
-            return "<p>" + paragraph.map(function (line) {
+            return beginParagraph + paragraph.map(function (line) {
                 return line.map(function (word) {
                     return word.map(function (column) {
                         var tengwa = column.tengwa || "anna";
@@ -538,13 +545,13 @@ function transcribe(sections) {
                         var html = Font.tengwar[tengwa] + tehtar.map(function (tehta) {
                             return tehtaForTengwa(tengwa, tehta);
                         }).join("");
-                        if (column.errors) {
+                        if (column.errors && !plain) {
                             html = "<abbr class=\"error\" title=\"" + column.errors.join("\n").replace(/"/g, "&quot;") + "\">" + html + "</abbr>";
                         }
                         return html;
                     }).join("");
                 }).join(" ");;
-            }).join("<br>\n") + "</p>";
+            }).join(delimitParagraph + "\n") + endParagraph;
         }).join("\n\n");
     }).join("\n\n\n");
 }
index ac650a3..531b701 100644 (file)
--- a/test.css
+++ b/test.css
@@ -1,11 +1,11 @@
 
 @font-face {
     font-family: tengwar;
-    src: url('custom-webfont.eot');
-    src: url('custom-webfont.eot#iefix'),
-         url('custom-webfont.woff') format('woff'), 
-         url('custom-webfont.ttf') format('truetype'), 
-         url('custom-webfont.svg#TengwarAnnatarItalic') format('svg');
+    src: url('tengwar-annatar-combined.eot');
+    src: url('tengwar-annatar-combined.eot#iefix'),
+         url('tengwar-annatar-combined.woff') format('woff'), 
+         url('tengwar-annatar-combined.ttf') format('truetype'), 
+         url('tengwar-annatar-combined.svg#TengwarAnnatarItalic') format('svg');
     font-weight: normal;
     font-style: normal;
 }
index c059d71..7b8d296 100644 (file)
@@ -1,7 +1,7 @@
 <!doctype html>
 <html>
     <head>
-        <link rel="stylesheet" type="text/css" href="custom-webfont.css">
+        <link rel="stylesheet" type="text/css" href="tengwar-annatar-combined.css">
         <script src="node_modules/mr/bootstrap.js" data-module="vanilla-tengwar"></script>
     </head>
     <body>
index b12157c..2df6706 100644 (file)
@@ -17,7 +17,8 @@ function onload() {
     var elements = document.querySelectorAll(".tengwar");
     array_.forEach.call(elements, function (element) {
         var data = element.dataset;
-        var tengwar, mode, encoding;
+        var tengwar, mode, encoding, block;
+        block = element.tagName.toLowerCase() === "div";
         if (data) {
             tengwar = data.tengwar;
             mode = data.mode;
@@ -28,11 +29,12 @@ function onload() {
             encoding = element.getAttribute("data-encoding");
         }
         if (encoding) {
-            element.innerText = TengwarAnnatar.transcribe(encoding);
+            element.innerText = TengwarAnnatar.transcribe(encoding, {block: block});
         } else if (tengwar) {
+            console.log(tengwar);
             mode = mode || 'general-use';
             var Mode = mode === 'general-use' ? GeneralUse : Classical;
-            element.innerHTML = Mode.transcribe(tengwar);
+            element.innerHTML = Mode.transcribe(tengwar, {block: block});
         }
     });
 }
index 73ff03d..ee95608 100644 (file)
@@ -1,7 +1,7 @@
 <!doctype html>
 <html>
     <head>
-        <link rel="stylesheet" type="text/css" href="custom-webfont.css">
+        <link rel="stylesheet" type="text/css" href="tengwar-annatar-combined.css">
         <script src="vanilla-tengwar.min.js"></script>
     </head>
     <body>
index 2e4e705..99c107d 100644 (file)
@@ -1,41 +1,41 @@
-(function(){function x(a,e){var c;c=g.tehtaPositions;if(!g.tehtar[e])throw Error("No tehta for: "+JSON.stringify(e));c=g.tehtar[e].special&&!g.tehtar[e][a]?null:0<=g.barsAndTildes.indexOf(e)?0<=["lambe","alda"].indexOf(a)&&2<=g.tehtar[e].length?2:c[a].wide?0:1:void 0!==c[a]?void 0!==c[a][e]?c[a][e]:void 0!==c[a].others?c[a].others:c[a]:0;return null===c?null:g.tehtar[e][a]||g.tehtar[e][c]||""}function y(a,e){return a.split(";").map(function(c){var c=c.split(":"),a=c.shift(),c=c.length?c.shift().split(","):
-[],d=e(a);c.forEach(function(b){"tilde-above"===b?d.addTildeAbove():"tilde-below"===b?d.addBarBelow():"y"===b?d.addBelow("y"):"s"===b||"s-inverse"===b||"s-extended"===b||"s-flourish"===b?"s"===b&&("calma"===a||"quesse"===a)?d.addBelow(b):d.addFollowing(b):d.addAbove(b)});return d})}function r(a){a=a||M;return{font:a.font||N,doubleNasalsWithTildeBelow:a.doubleNasalsWithTildeBelow,noAchLaut:a.noAchLaut}}function s(a,e){var e=r(e),c=e.font.makeColumn;return a.split(/\n\n\n+/).map(function(a){return a.split(/\n\n/).map(function(d){return d.split(/\n/).map(function(b){var d=
-[],h=[];b.toLowerCase().replace(/([\w\u00e1\u00e9\u00ed\u00f3\u00fa\u00eb\u00e2\u00ea\u00ee\u00f4\u00fb\u00f1']+)|(.)/g,function(b,a,f){if(a){a=P(a);try{A[a]?h.push.apply(h,B.decodeWord(A[a],c)):h.push.apply(h,Q(a,e))}catch(R){h.push(c().addError("Cannot transcribe "+JSON.stringify(h)+" because "+R.message))}}else C[f]?h.push(c(C[f])):" "===f?(d.push(h),h=[]):h.push(c().addError("Cannot transcribe "+JSON.stringify(f)))});h.length&&d.push(h);return d})})})}function D(a,e,c){var f=function(b){return b.length?
-D(a,e,c.concat(b),b[b.length-1]):a(c)},d=function(a){return p[a]?b("long-carrier").addAbove(p[a]):b("short-carrier").addAbove(a)},b=e.font.makeColumn,z=function(b){var a=function(a){return a?b?-1!==t.indexOf(b)&&a.canAddAbove()?(a.addAbove(b),k(function(a){return f([a])},a)):k(function(a){return f([d(b),a])},a):k(function(a){return f([a])},a):b?k(function(a){return f([a])},d(b)):f([])},c=e.font.makeColumn;return function(d){return"n"===d?function(b){return"n"===b?e.doubleNasalsWithTildeBelow?a(c("numen").addTildeBelow()):
+(function(){function z(a,e){var c;c=g.tehtaPositions;if(!g.tehtar[e])throw Error("No tehta for: "+JSON.stringify(e));c=g.tehtar[e].special&&!g.tehtar[e][a]?null:0<=g.barsAndTildes.indexOf(e)?0<=["lambe","alda"].indexOf(a)&&2<=g.tehtar[e].length?2:c[a].wide?0:1:void 0!==c[a]?void 0!==c[a][e]?c[a][e]:void 0!==c[a].others?c[a].others:c[a]:0;return null===c?null:g.tehtar[e][a]||g.tehtar[e][c]||""}function A(a,e){return a.split(";").map(function(c){var c=c.split(":"),a=c.shift(),c=c.length?c.shift().split(","):
+[],d=e(a);c.forEach(function(b){"tilde-above"===b?d.addTildeAbove():"tilde-below"===b?d.addBarBelow():"y"===b?d.addBelow("y"):"s"===b||"s-inverse"===b||"s-extended"===b||"s-flourish"===b?"s"===b&&("calma"===a||"quesse"===a)?d.addBelow(b):d.addFollowing(b):d.addAbove(b)});return d})}function s(a){a=a||N;return{font:a.font||O,block:a.block,plain:a.plain,doubleNasalsWithTildeBelow:a.doubleNasalsWithTildeBelow,noAchLaut:a.noAchLaut}}function t(a,e){var e=s(e),c=e.font.makeColumn;return a.split(/\n\n\n+/).map(function(a){return a.split(/\n\n/).map(function(a){return a.split(/\n/).map(function(b){var a=
+[],h=[];b.toLowerCase().replace(/([\w\u00e1\u00e9\u00ed\u00f3\u00fa\u00eb\u00e2\u00ea\u00ee\u00f4\u00fb\u00f1']+)|(.)/g,function(b,d,f){if(d){d=Q(d);try{B[d]?h.push.apply(h,C.decodeWord(B[d],c)):h.push.apply(h,R(d,e))}catch(u){h.push(c().addError("Cannot transcribe "+JSON.stringify(h)+" because "+u.message))}}else D[f]?h.push(c(D[f])):" "===f?(a.push(h),h=[]):h.push(c().addError("Cannot transcribe "+JSON.stringify(f)))});h.length&&a.push(h);return a})})})}function E(a,e,c){var f=function(b){return b.length?
+E(a,e,c.concat(b),b[b.length-1]):a(c)},d=function(a){return q[a]?b("long-carrier").addAbove(q[a]):b("short-carrier").addAbove(a)},b=e.font.makeColumn,p=function(b){var a=function(a){return a?b?-1!==v.indexOf(b)&&a.canAddAbove()?(a.addAbove(b),k(function(a){return f([a])},a)):k(function(a){return f([d(b),a])},a):k(function(a){return f([a])},a):b?k(function(a){return f([a])},d(b)):f([])},c=e.font.makeColumn;return function(d){return"n"===d?function(b){return"n"===b?e.doubleNasalsWithTildeBelow?a(c("numen").addTildeBelow()):
 a(c("numen").addTildeAbove()):"t"===b?function(b){return"h"===b?a(c("thule").addTildeAbove()):a(c("tinco").addTildeAbove())(b)}:"d"===b?a(c("ando").addTildeAbove()):"c"===b?a(c("quesse").addTildeAbove()):"g"===b?a(c("ungwe").addTildeAbove()):"j"===b?a(c("anca").addTildeAbove()):"w"===b?a(c("nwalme").addAbove("w")):a(c("numen"))(b)}:"m"===d?function(b){return"m"===b?e.doubleNasalsWithTildeBelow?a(c("malta").addTildeBelow()):a(c("malta").addTildeAbove()):"p"===b?a(c("parma").addTildeAbove()):"b"===
 b?a(c("umbar").addTildeAbove()):"f"===b?a(c("formen").addTildeAbove()):"v"===b?a(c("ampa").addTildeAbove()):a(c("malta"))(b)}:"\u00f1"===d?function(b){return"c"===b?a(c("quesse").addTildeAbove()):"g"===b?a(c("ungwe").addTildeAbove()):a(c("nwalme"))(b)}:"t"===d?function(b){return"t"===b?a(c("tinco").addTildeBelow()):"h"===b?a(c("thule")):a(c("tinco"))(b)}:"p"===d?function(b){return"p"===b?a(c("parma").addTildeBelow()):a(c("parma"))(b)}:"c"===d?function(b){return"c"===b?a(c("calma")):"h"===b?e.noAchLaut?
 a(c("calma")):a(c("hwesta")):a(c("quesse"))(b)}:"d"===d?function(b){return"d"===b?a(c("ando").addTildeBelow()):"h"===b?a(c("anto")):a(c("ando"))(b)}:"b"===d?function(b){return"b"===b?a(c("umbar").addTildeBelow()):a(c("umbar"))(b)}:"g"===d?function(b){return"g"===b?a(c("ungwe").addTildeBelow()):"h"===b?a(c("unque")):a(c("ungwe"))(b)}:"f"===d?function(b){return"f"===b?a(c("formen").addTildeBelow()):a(c("formen"))(b)}:"v"===d?a(c("ampa")):"j"===d?a(c("anca")):"s"===d?function(b){return"s"===b?a(c("silme").addTildeBelow()):
 "h"===b?a(c("harma")):a(c("silme"))(b)}:"z"===d?function(b){return"z"===b?a(c("esse").addTildeBelow()):a(c("esse"))(b)}:"h"===d?function(b){return"w"===b?a(c("hwesta-sindarinwa")):a(c("hyarmen"))(b)}:"r"===d?function(b){return"r"===b?a(c("romen").addTildeBelow()):"h"===b?a(c("arda")):""===b?a(c("ore"))(b):a(c("romen"))(b)}:"l"===d?function(b){return"l"===b?a(c("lambe").addTildeBelow()):"h"===b?a(c("alda")):a(c("lambe"))(b)}:"i"===d?a(c("anna")):"u"===d?a(c("vala")):"w"===d?function(b){return"h"===
-b?a(c("hwesta-sindarinwa")):a(c("vala"))(b)}:"e"===d&&(!b||"a"===b)?a(c("yanta")):"y"===d?a(c("wilya").addBelow("y")):"\u00e1"===d?a(c("wilya").addAbove("a")):p[d]&&-1==t.indexOf(d)?a(c("long-carrier").addAbove(p[d])):a()(d)}};return function(b){return-1!==t.indexOf(b)?z(b):z()(b)}}function k(a,e){var c=function(c){var d=function(b){return"quesse"===b.tengwa&&b.canAddBelow()?function(c){return"s"===c?a(b.addBelow("s")):a(b)(c)}:-1!==S.indexOf(b.tengwa)?function(c){return"s"===c?E(function(c){return function(d){return""===
-d?(0===c?b.addFollowing("s"):1===c?b.addFollowing("s-inverse"):2===c?b.addFollowing("s-extended"):3===c?b.addFollowing("s-flourish"):b.addFollowing("s-flourish").addError("Following S only has 3 alternate flourishes."),a(b)(d)):a(b)("s")(d)}}):a(b)(c)}:a(b)};return function(b){return"y"===b&&c.canAddBelow()?d(c.addBelow("y")):d(c)(b)}};return e.canAddAbove()?function(a){return"w"===a?c(e.addAbove("w")):c(e)(a)}:c(e)}function E(a,e){e=e||0;return function(c){return"'"===c?E(a,e+1):a(e)(c)}}function u(a){a=
-a||T;return{font:a.font||U,vilya:a.vilya,harma:a.harma,classical:a.classical,iuRising:a.isRising,longHalla:a.longHalla}}function v(a,e){var e=u(e),c=e.font.makeColumn;return a.split(/\n\n\n+/).map(function(a){return a.split(/\n\n/).map(function(a){return a.split(/\n/).map(function(b){var a=[],d=[];b.toLowerCase().replace(/([\w\u00e1\u00e9\u00ed\u00f3\u00fa\u00eb\u00e2\u00ea\u00ee\u00f4\u00fb\u00f1']+)|(.)/g,function(b,f,g){if(f)try{d.push.apply(d,V(W(f),e))}catch(i){d.push(c().addError("Cannot transcribe "+
-JSON.stringify(f)+" because "+i.message))}else F[g]?d.push(c(F[g])):" "===g?(a.push(d),d=[]):d.push(c().addError("Cannot transcribe "+JSON.stringify(g)))});d.length&&a.push(d);return a})})})}function G(a,e,c,f){var d=function(b){var d=b.pop();return H(function(d){d=b.concat(d).filter(Boolean);return d.length?G(a,e,c.concat(d),d[d.length-1]):a(c)},e,d)},b=e.font.makeColumn;return function(a){return"n"===a?function(a){return"n"===a?d([b("numen").addTildeBelow()]):"t"===a?d([b("tinco")]):"d"===a?d([b("ando")]):
+b?a(c("hwesta-sindarinwa")):a(c("vala"))(b)}:"e"===d&&(!b||"a"===b)?a(c("yanta")):"y"===d?a(c("wilya").addBelow("y")):"\u00e1"===d?a(c("wilya").addAbove("a")):q[d]&&-1==v.indexOf(d)?a(c("long-carrier").addAbove(q[d])):a()(d)}};return function(b){return-1!==v.indexOf(b)?p(b):p()(b)}}function k(a,e){var c=function(c){var d=function(b){return"quesse"===b.tengwa&&b.canAddBelow()?function(c){return"s"===c?a(b.addBelow("s")):a(b)(c)}:-1!==S.indexOf(b.tengwa)?function(c){return"s"===c?F(function(c){return function(d){return""===
+d?(0===c?b.addFollowing("s"):1===c?b.addFollowing("s-inverse"):2===c?b.addFollowing("s-extended"):3===c?b.addFollowing("s-flourish"):b.addFollowing("s-flourish").addError("Following S only has 3 alternate flourishes."),a(b)(d)):a(b)("s")(d)}}):a(b)(c)}:a(b)};return function(b){return"y"===b&&c.canAddBelow()?d(c.addBelow("y")):d(c)(b)}};return e.canAddAbove()?function(a){return"w"===a?c(e.addAbove("w")):c(e)(a)}:c(e)}function F(a,e){e=e||0;return function(c){return"'"===c?F(a,e+1):a(e)(c)}}function w(a){a=
+a||T;return{font:a.font||U,block:a.block,plain:a.plain,vilya:a.vilya,harma:a.harma,classical:a.classical,iuRising:a.isRising,longHalla:a.longHalla}}function x(a,e){var e=w(e),c=e.font.makeColumn;return a.split(/\n\n\n+/).map(function(a){return a.split(/\n\n/).map(function(a){return a.split(/\n/).map(function(b){var a=[],d=[];b.toLowerCase().replace(/([\w\u00e1\u00e9\u00ed\u00f3\u00fa\u00eb\u00e2\u00ea\u00ee\u00f4\u00fb\u00f1']+)|(.)/g,function(b,f,g){if(f)try{d.push.apply(d,V(W(f),e))}catch(u){d.push(c().addError("Cannot transcribe "+
+JSON.stringify(f)+" because "+u.message))}else G[g]?d.push(c(G[g])):" "===g?(a.push(d),d=[]):d.push(c().addError("Cannot transcribe "+JSON.stringify(g)))});d.length&&a.push(d);return a})})})}function H(a,e,c,f){var d=function(b){var d=b.pop();return I(function(d){d=b.concat(d).filter(Boolean);return d.length?H(a,e,c.concat(d),d[d.length-1]):a(c)},e,d)},b=e.font.makeColumn;return function(a){return"n"===a?function(a){return"n"===a?d([b("numen").addTildeBelow()]):"t"===a?d([b("anto")]):"d"===a?d([b("ando")]):
 "g"===a?function(a){return"w"===a?d([b("ungwe")]):d([b("anga")])(a)}:"c"===a?function(a){return"w"===a?d([b("unque")]):d([b("anca")])(a)}:d([b("numen")])(a)}:"m"===a?function(a){return"m"===a?d([b("malta").addTildeBelow()]):"p"===a?d([b("ampa")]):"b"===a?d([b("umbar")]):d([b("malta")])(a)}:"\u00f1"===a?function(a){return"g"===a?function(a){return"w"===a?d([b("ungwe")]):d([b("anga")])(a)}:"c"===a?function(a){return"w"===a?d([b("unque")]):d([b("anca")])}:d([b("noldo")])(a)}:"t"===a?function(a){return"t"===
 a?function(a){return"y"===a?d([b("tinco").addBelow("y").addTildeBelow()]):d([b("tinco").addTildeBelow()])(a)}:"y"===a?d([b("tinco").addBelow("y")]):"h"===a?d([b("thule")]):"s"===a?function(a){return""===a?d([b("tinco").addFollowing("s")])(a):d([b("tinco"),b("silme")])(a)}:d([b("tinco")])(a)}:"p"===a?function(a){return"p"===a?function(a){return"y"===a?d([b("parma").addBelow("y").addTildeBelow()]):d([b("parma").addTildeBelow()])(a)}:"y"===a?d([b("parma").addBelow("y")]):"s"===a?function(a){return""===
 a?d([b("parma").addFollowing("s")])(a):d([b("parma"),b("silme")])(a)}:d([b("parma")])(a)}:"c"===a?function(a){return"c"===a?d([b("calma").addTildeBelow()]):"s"===a?d([b("calma").addBelow("s")]):"h"===a?d([b("harma")]):"w"===a?d([b("quesse")]):d([b("calma")])(a)}:"f"===a?d([b("formen")]):"v"===a?e.vilya?d([b("wilya")]):d([b("vala")]):"w"===a?e.vilya?d([])("u"):d([b("wilya")]):"r"===a?function(a){return"d"===a?d([b("arda")]):"h"===a?d([b("halla").addError("R should preceed H in the HR diagraph in Classical mode."),
-b("romen").addError("R should preceed H in the HR diagraph in Classical mode.")]):e.classical?f&&f.above&&""!==a&&-1!==I.indexOf(a)?d([b("ore")])(a):d([b("romen")])(a):""===a||-1===I.indexOf(a)?d([b("ore")])(a):d([b("romen")])(a)}:"l"===a?function(a){return"l"===a?function(a){return"y"===a?d([b("lambe").addBelow("y").addTildeBelow()]):d([b("lambe").addTildeBelow()])(a)}:"y"===a?d([b("lambe").addBelow("y")]):"h"===a?d([b("halla").addError("L should preceed H in the HL diagraph in Classical mode."),
+b("romen").addError("R should preceed H in the HR diagraph in Classical mode.")]):e.classical?f&&f.above&&""!==a&&-1!==J.indexOf(a)?d([b("ore")])(a):d([b("romen")])(a):""===a||-1===J.indexOf(a)?d([b("ore")])(a):d([b("romen")])(a)}:"l"===a?function(a){return"l"===a?function(a){return"y"===a?d([b("lambe").addBelow("y").addTildeBelow()]):d([b("lambe").addTildeBelow()])(a)}:"y"===a?d([b("lambe").addBelow("y")]):"h"===a?d([b("halla").addError("L should preceed H in the HL diagraph in Classical mode."),
 b("lambe").addError("L should preceed H in the HL diagraph in Classical mode.")]):"d"===a?d([b("alda")]):"b"===a?d([b("lambe"),b("umbar")]):d([b("lambe")])(a)}:"s"===a?function(a){return"s"===a?d([b("esse")]):d([b("silme")])(a)}:"h"===a?function(a){return"l"===a?d([b("halla"),b("lambe")]):"r"===a?d([b("halla"),b("romen")]):"w"===a?d([b("hwesta")]):"t"===a?d([b("harma")]):"y"===a?e.classical&&e.harma?d([b("hyarmen")]):d([b("hyarmen").addBelow("y")]):e.classical?e.harma?d([b("harma")])(a):f?d([b("hyarmen")])(a):
-d([b("harma")])(a):d([b("hyarmen")])(a)}:"d"===a?d([b("ando").addError("D cannot appear except after N, L, or R")]):"b"===a?d([b("umbar").addError("B cannot appear except after M or L")]):"g"===a?d([b("anga").addError("G cannot appear except after N or \u00d1")]):"j"===a?d([b().addError("J cannot be transcribed in Classical Mode")]):d([])(a)}}function H(a,e,c){var f=e.font.makeColumn;return function(d){if("a"===d)return function(b){return"i"===b?a([c,f("yanta","a")]):"u"===b?a([c,f("ure","a")]):c&&
+d([b("harma")])(a):d([b("hyarmen")])(a)}:"d"===a?d([b("ando").addError("D cannot appear except after N, L, or R")]):"b"===a?d([b("umbar").addError("B cannot appear except after M or L")]):"g"===a?d([b("anga").addError("G cannot appear except after N or \u00d1")]):"j"===a?d([b().addError("J cannot be transcribed in Classical Mode")]):d([])(a)}}function I(a,e,c){var f=e.font.makeColumn;return function(d){if("a"===d)return function(b){return"i"===b?a([c,f("yanta","a")]):"u"===b?a([c,f("ure","a")]):c&&
 c.canAddAbove()?(c.addAbove("a"),a([c])(b)):a([c,f("short-carrier","a")])(b)};if("e"===d)return function(b){return"u"===b?a([c,f("ure","e")]):c&&c.canAddAbove()?(c.addAbove("e"),a([c])(b)):a([c,f("short-carrier","e")])(b)};if("i"===d)return function(b){return"u"===b?e.iuRising?a([c,f("anna","u").addBelow("y")]):a([c,f("ure","i")]):c&&c.canAddAbove()?(c.addAbove("i"),a([c])(b)):a([c,f("short-carrier","i")])(b)};if("o"===d)return function(b){return"i"===b?a([c,f("yanta","o")]):c&&c.canAddAbove()?(c.addAbove("o"),
-a([c])(b)):a([c,f("short-carrier","o")])(b)};if("u"===d)return function(b){return"i"===b?a([c,f("yanta","u")]):c&&c.canAddAbove()?(c.addAbove("u"),a([c])(b)):a([c,f("short-carrier","u")])(b)};if("y"===d){if(c&&c.canAddBelow())return a([c.addBelow("y")]);d=f("anna").addBelow("y");return H(function(b){return a([c].concat(b))},e,d)}return"\u00e1"===d?a([c,f("long-carrier","a")]):"\u00e9"===d?a([c,f("long-carrier","e")]):"\u00ed"===d?a([c,f("long-carrier","i")]):"\u00f3"===d?c&&c.canAddAbove()?(c.addAbove("\u00f3"),
-a([c])):a([c,f("long-carrier","o")]):"\u00fa"===d?c&&c.canAddAbove()?(c.addAbove("\u00fa"),a([c])):a([c,f("long-carrier","u")]):a([c])(d)}}function J(){var a=document.querySelectorAll(".tengwar");K.forEach.call(a,function(a){var c=a.dataset,f,d;c?(f=c.tengwar,d=c.mode,c=c.encoding):(f=a.getAttribute("data-tengwar"),d=a.getAttribute("data-mode"),c=a.getAttribute("data-encoding"));c?a.innerText=X.transcribe(c):f&&(a.innerHTML=("general-use"===(d||"general-use")?Y:Z).transcribe(f))})}var j={},g={names:[["tinco",
-"parma","calma","quesse"],["ando","umbar","anga","ungwe"],["thule","formen","harma","hwesta"],["anto","ampa","anca","unque"],["numen","malta","noldo","nwalme"],["ore","vala","anna","wilya"],["romen","arda","lambe","alda"],["silme","silme-nuquerna","esse","esse-nuquerna"],["hyarmen","hwesta-sindarinwa","yanta","ure"],["halla","short-carrier","long-carrier","round-carrier"],["tinco-extended","parma-extended","calma-extended","quesse-extended"]],aliases:{vilya:"wilya",aha:"harma"},tengwar:{tinco:"1",
-parma:"q",calma:"a",quesse:"z",ando:"2",umbar:"w",anga:"s",ungwe:"x",thule:"3",formen:"e",harma:"d",hwesta:"c",anto:"4",ampa:"r",anca:"f",unque:"v",numen:"5",malta:"t",noldo:"g",nwalme:"b",ore:"6",vala:"y",anna:"h",wilya:"n",romen:"7",arda:"u",lambe:"j",alda:"m",silme:"8","silme-nuquerna":"i",esse:"k","esse-nuquerna":",",hyarmen:"9","hwesta-sindarinwa":"o",yanta:"l",ure:".",halla:"\u00bd","short-carrier":"`","long-carrier":"~","round-carrier":"]","tinco-extended":"!","parma-extended":"Q","calma-extended":"A",
-"quesse-extended":"Z",comma:"=","full-stop":"-","exclamation-point":"\u00c1","question-mark":"\u00c0","open-paren":"&#140;","close-paren":"&#156;","flourish-left":"&#286;","flourish-right":"&#287;"},tehtar:{a:"#EDC",e:"$RFV",i:"%TGB",o:"^YHN",u:"& U J M &#256; &#257; &#258; &#259;".split(" "),"\u00f3":["&#260;","&#261;","&#262;","&#263;"],"\u00fa":["&#264;","&#265;","&#266;","&#267;"],"\u00ed":["&#212;","&#213;","&#214;","&#215;"],w:"\u00e8\u00e9\u00ea\u00eb",y:"\u00cc\u00cd\u00ce\u00cf\u00b4",s:{special:!0,
-tinco:"+",ando:"+",numen:"+",lambe:"_",calma:"|",quesse:"|","short-carrier":"}"},"s-inverse":{special:!0,tinco:"\u00a1"},"s-extended":{special:!0,tinco:"&#199;"},"s-flourish":{special:!0,tinco:"&#163;",lambe:"&#165;"},"tilde-above":"Pp","tilde-below":[":",";","&#176;"],"tilde-high-above":")0","tilde-far-below":"?/","bar-above":"{[","bar-below":['"',"'","&#184;"],"bar-high-above":"\u00ec\u00ee","bar-far-below":"\u00ed\u00ef"},barsAndTildes:"tilde-above tilde-below tilde-high-above tilde-far-below bar-above bar-below bar-high-above bar-high-below".split(" "),
-tehtaPositions:{tinco:{o:3,w:3,others:2},parma:{o:3,w:3,others:2},calma:{o:3,w:3,u:3,others:2},quesse:{o:3,w:3,others:2},ando:{wide:!0,e:1,o:2,"\u00f3":1,"\u00fa":1,others:0},umbar:{wide:!0,e:1,o:2,"\u00f3":1,"\u00fa":1,others:0},anga:{wide:!0,e:1,"\u00f3":1,"\u00fa":1,others:0},ungwe:{wide:!0,e:1,o:1,"\u00f3":1,"\u00fa":1,others:0},thule:{others:3},formen:3,harma:{e:0,o:3,u:7,"\u00f3":2,"\u00fa":2,w:0,others:1},hwesta:{e:0,o:3,u:7,w:0,others:1},anto:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},ampa:{wide:!0,
-"\u00f3":1,"\u00fa":1,others:0},anca:{wide:!0,u:7,"\u00f3":1,"\u00fa":1,others:0},unque:{wide:!0,u:7,others:0},numen:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},malta:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},noldo:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},nwalme:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},ore:{e:3,o:3,u:3,"\u00f3":3,"\u00fa":3,others:1},vala:{e:3,o:3,u:3,"\u00f3":3,"\u00fa":3,others:1},anna:{e:3,o:3,u:3,"\u00f3":2,"\u00fa":2,others:1},wilya:{e:3,o:3,u:3,"\u00f3":3,"\u00fa":3,others:1},romen:{e:3,
-o:3,u:3,"\u00f3":2,"\u00fa":2,y:null,others:1},arda:{a:1,e:3,i:1,o:3,u:3,"\u00ed":1,"\u00f3":2,"\u00fa":2,y:null,others:0},lambe:{wide:!0,e:1,y:4,"\u00f3":1,"\u00fa":1,others:0},alda:{wide:!0,others:1},silme:{y:3,others:null},"silme-nuquerna":{e:3,o:3,u:3,"\u00f3":3,"\u00fa":3,y:null,others:1},esse:{y:null,others:null},"esse-nuquerna":{e:3,o:3,u:3,"\u00f3":3,"\u00fa":3,others:1},hyarmen:3,"hwesta-sindarinwa":{o:2,u:2,"\u00f3":1,"\u00fa":2,others:0},yanta:{e:3,o:3,u:3,"\u00f3":2,"\u00fa":2,others:1},
-ure:{e:3,o:3,u:3,"\u00f3":3,"\u00fa":3,others:1},halla:{others:null},"short-carrier":3,"long-carrier":{y:null,others:3},"round-carrier":3,"tinco-extended":3,"parma-extended":3,"calma-extended":{o:3,u:7,"\u00f3":2,"\u00fa":2,others:1},"quesse-extended":{o:0,u:7,others:1}},punctuation:{"-":"comma",",":"comma",":":"comma",";":"full-stop",".":"full-stop","!":"exclamation-point","?":"question-mark","(":"open-paren",")":"close-paren",">":"flourish-left","<":"flourish-right"},annotations:{tinco:{tengwa:"t"},
-parma:{tengwa:"p"},calma:{tengwa:"c"},quesse:{tengwa:"c"},ando:{tengwa:"d"},umbar:{tengwa:"b"},anga:{tengwa:"ch"},ungwe:{tengwa:"g"},thule:{tengwa:"th"},formen:{tengwa:"f"},hyarmen:{tengwa:"h"},hwesta:{tengwa:"kh"},unque:{tengwa:"gh"},anto:{tengwa:"dh"},anca:{tengwa:"j"},ampa:{tengwa:"v"},numen:{tengwa:"n"},malta:{tengwa:"m"},nwalme:{tengwa:"\u00f1"},romen:{tengwa:"r"},ore:{tengwa:"-r"},lambe:{tengwa:"l"},silme:{tengwa:"s"},"silme-nuquerna":{tengwa:"s"},esse:{tengwa:"z"},"esse-nuquerna":{tengwa:"z"},
-harma:{tengwa:"sh"},alda:{tengwa:"lh"},arda:{tengwa:"rh"},wilya:{tengwa:"a"},vala:{tengwa:"w"},anna:{tengwa:"i"},vala:{tengwa:"w"},yanta:{tengwa:"e"},"hwesta-sindarinwa":{tengwa:"wh"},s:{following:"s"},"s-inverse":{following:"s<sub>2</sub>"},"s-extended":{following:"s<sub>3</sub>"},"s-flourish":{following:"s<sub>4</sub>"},"long-carrier":{tengwa:"\u00b4"},"short-carrier":{},"tilde-above":{above:"nm\u00f1-"},"tilde-below":{below:"2"},a:{"tehta-above":"a"},e:{"tehta-above":"e"},i:{"tehta-above":"i"},
-o:{"tehta-above":"o"},u:{"tehta-above":"u"},"\u00f3":{"tehta-above":"\u00f3"},"\u00fa":{"tehta-above":"\u00fa"},"\u00ed":{"tehta-above":"y"},y:{"tehta-below":"y"},w:{"tehta-above":"w"},"full-stop":{tengwa:"."},"exclamation-point":{tengwa:"!"},"question-mark":{tengwa:"?"},comma:{tengwa:"-"},"open-paren":{tengwa:"("},"close-paren":{tengwa:")"},"flourish-left":{tengwa:"\u201c"},"flourish-right":{tengwa:"\u201d"}}};j.transcribe=function(a){return a.map(function(a){return a.map(function(a){return"<p>"+
-a.map(function(a){return a.map(function(a){return a.map(function(a){var c=a.tengwa||"anna",d=[];a.above&&d.push(a.above);a.below&&d.push(a.below);a.tildeBelow&&d.push("tilde-below");a.tildeAbove&&d.push("tilde-above");a.following&&d.push(a.following);d=g.tengwar[c]+d.map(function(a){return x(c,a)}).join("");a.errors&&(d='<abbr class="error" title="'+a.errors.join("\n").replace(/"/g,"&quot;")+'">'+d+"</abbr>");return d}).join("")}).join(" ")}).join("<br>\n")+"</p>"}).join("\n\n")}).join("\n\n\n")};
-j.tehtaForTengwa=x;j.makeColumn=function(a,e,c){return new i(a,e,c)};var i=function(a,e,c){this.above=e;this.tildeAbove=void 0;this.tengwa=a;this.tildeBelow=void 0;this.below=c;this.error=this.following=void 0};i.prototype.canAddAbove=function(){return!this.above||("silme"===this.tengwa||"esse"===this.tengwa)&&!this.below};i.prototype.addAbove=function(a){"silme"===this.tengwa&&(this.tengwa="silme-nuquerna");"esse"===this.tengwa&&(this.tengwa="esse-nuquerna");this.above=a;return this};i.prototype.canAddBelow=
-function(){return!this.below&&"silme-nuquerna"!==this.tengwa};i.prototype.addBelow=function(a){this.below=a;return this};i.prototype.addTildeAbove=function(){this.tildeAbove=!0;return this};i.prototype.addTildeBelow=function(){this.tildeBelow=!0;return this};i.prototype.addFollowing=function(a){this.following=a;return this};i.prototype.addError=function(a){this.errors=this.errors||[];this.errors.push(a);return this};var l={module$exports:function(a,e){e=e||function(a){throw Error(a);};return function(c){var f,
-d=a.apply(null,[function(a){f=a;var c=e;return function(a){""!==a&&c("Unexpected "+JSON.stringify(a));return function O(){return O}}}].concat(Array.prototype.slice.call(arguments,1)));for(Array.prototype.forEach.call(c,function(a){d=d(a)});!f;)d=d("");return f}}};l.module$exports&&(l=l.module$exports);var m={module$exports:function(a){return a.replace($,function(a,c){return L[c]})}},L={k:"c",x:"cs",qu:"cw",q:"cw",ph:"f",bh:"v","\u00eb":"e","\u00e2":"\u00e1","\u00ea":"\u00e9","\u00ee":"\u00ed","\u00f4":"\u00f3",
-"\u00fb":"\u00fa"},$=RegExp("("+Object.keys(L).join("|")+")","ig");m.module$exports&&(m=m.module$exports);var n={module$exports:{"-":"comma",",":"comma",":":"comma",";":"full-stop",".":"full-stop","!":"exclamation-point","?":"question-mark","(":"open-paren",")":"close-paren",">":"flourish-left","<":"flourish-right"}};n.module$exports&&(n=n.module$exports);var w={encode:function(a){return a.map(function(a){return a.map(function(a){return a.map(function(a){return a.map(function(a){return a.map(function(a){var c=
-[];a.above&&c.push(a.above);a.below&&c.push(a.below);a.following&&c.push(a.following);a.tildeAbove&&c.push("tilde-above");a.tildeBelow&&c.push("tilde-below");return c.length?a.tengwa+":"+c.join(","):a.tengwa}).join(";")}).join(" ")}).join("\n")}).join("\n\n")}).join("\n\n\n")},decode:function(a,e){return a.split("\n\n\n").map(function(a){return a.split("\n\n").map(function(a){return a.split("\n").map(function(a){return a.split(" ").map(function(a){return y(a,e)})})})})}};w.decodeWord=y;var o={},N=
-j,B=w,P=m,C=n,M={};o.transcribe=function(a,e){e=r(e);return e.font.transcribe(s(a,e))};o.encode=function(a,e){e=r(e);return B.encode(s(a,e))};o.parse=s;var A={iant:"yanta;tinco:a,tilde-above",iaur:"yanta;vala:a;ore",baranduiniant:"umbar;romen:a;ando:a,tilde-above;anna:u;yanta;anto:a,tilde-above",ioreth:"yanta;romen:o;thule:e",noldo:"nwalme;lambe:o;ando;short-carrier:o",noldor:"nwalme;lambe:o;ando;ore:o",is:"short-carrier:i,s"},Q=l(function(a,e){return D(a,e,[])}),t="aeiou\u00f3\u00fa",p={"\u00e1":"a",
-"\u00e9":"e","\u00ed":"i","\u00f3":"o","\u00fa":"u"};o.parseTengwaAnnotations=k;var S=["tinco","parma","short-carrier","lambe"],q={},U=j,W=m,F=n,T={};q.transcribe=function(a,e){e=u(e);return e.font.transcribe(v(a,e))};q.encode=function(a,e){e=u(e);return w.encode(v(a,e))};q.parse=v;var V=l(function(a,e){return G(a,e,[])}),I="aeiouy\u00e1\u00e9\u00ed\u00f3\u00fa",Y=o,Z=q,X=j,K=Array.prototype;document.querySelectorAll&&K.forEach&&("complete"===document.readyState?J():document.addEventListener("DOMContentLoaded",
-J,!0))})();
+a([c])(b)):a([c,f("short-carrier","o")])(b)};if("u"===d)return function(b){return"i"===b?a([c,f("yanta","u")]):c&&c.canAddAbove()?(c.addAbove("u"),a([c])(b)):a([c,f("short-carrier","u")])(b)};if("y"===d){if(c&&c.canAddBelow())return a([c.addBelow("y")]);d=f("anna").addBelow("y");return I(function(b){return a([c].concat(b))},e,d)}return"\u00e1"===d?a([c,f("long-carrier","a")]):"\u00e9"===d?a([c,f("long-carrier","e")]):"\u00ed"===d?a([c,f("long-carrier","i")]):"\u00f3"===d?c&&c.canAddAbove()?(c.addAbove("\u00f3"),
+a([c])):a([c,f("long-carrier","o")]):"\u00fa"===d?c&&c.canAddAbove()?(c.addAbove("\u00fa"),a([c])):a([c,f("long-carrier","u")]):a([c])(d)}}function K(){var a=document.querySelectorAll(".tengwar");L.forEach.call(a,function(a){var c=a.dataset,f,d,b;b="div"===a.tagName.toLowerCase();c?(f=c.tengwar,d=c.mode,c=c.encoding):(f=a.getAttribute("data-tengwar"),d=a.getAttribute("data-mode"),c=a.getAttribute("data-encoding"));c?a.innerText=X.transcribe(c,{block:b}):f&&(console.log(f),a.innerHTML=("general-use"===
+(d||"general-use")?Y:Z).transcribe(f,{block:b}))})}var j={},g={names:[["tinco","parma","calma","quesse"],["ando","umbar","anga","ungwe"],["thule","formen","harma","hwesta"],["anto","ampa","anca","unque"],["numen","malta","noldo","nwalme"],["ore","vala","anna","wilya"],["romen","arda","lambe","alda"],["silme","silme-nuquerna","esse","esse-nuquerna"],["hyarmen","hwesta-sindarinwa","yanta","ure"],["halla","short-carrier","long-carrier","round-carrier"],["tinco-extended","parma-extended","calma-extended",
+"quesse-extended"]],aliases:{vilya:"wilya",aha:"harma"},tengwar:{tinco:"1",parma:"q",calma:"a",quesse:"z",ando:"2",umbar:"w",anga:"s",ungwe:"x",thule:"3",formen:"e",harma:"d",hwesta:"c",anto:"4",ampa:"r",anca:"f",unque:"v",numen:"5",malta:"t",noldo:"g",nwalme:"b",ore:"6",vala:"y",anna:"h",wilya:"n",romen:"7",arda:"u",lambe:"j",alda:"m",silme:"8","silme-nuquerna":"i",esse:"k","esse-nuquerna":",",hyarmen:"9","hwesta-sindarinwa":"o",yanta:"l",ure:".",halla:"\u00bd","short-carrier":"`","long-carrier":"~",
+"round-carrier":"]","tinco-extended":"!","parma-extended":"Q","calma-extended":"A","quesse-extended":"Z",comma:"=","full-stop":"-","exclamation-point":"\u00c1","question-mark":"\u00c0","open-paren":"&#140;","close-paren":"&#156;","flourish-left":"&#286;","flourish-right":"&#287;"},tehtar:{a:"#EDC",e:"$RFV",i:"%TGB",o:"^YHN",u:"& U J M &#256; &#257; &#258; &#259;".split(" "),"\u00f3":["&#260;","&#261;","&#262;","&#263;"],"\u00fa":["&#264;","&#265;","&#266;","&#267;"],"\u00ed":["&#212;","&#213;","&#214;",
+"&#215;"],w:"\u00e8\u00e9\u00ea\u00eb",y:"\u00cc\u00cd\u00ce\u00cf\u00b4",s:{special:!0,tinco:"+",ando:"+",numen:"+",lambe:"_",calma:"|",quesse:"|","short-carrier":"}"},"s-inverse":{special:!0,tinco:"\u00a1"},"s-extended":{special:!0,tinco:"&#199;"},"s-flourish":{special:!0,tinco:"&#163;",lambe:"&#165;"},"tilde-above":"Pp","tilde-below":[":",";","&#176;"],"tilde-high-above":")0","tilde-far-below":"?/","bar-above":"{[","bar-below":['"',"'","&#184;"],"bar-high-above":"\u00ec\u00ee","bar-far-below":"\u00ed\u00ef"},
+barsAndTildes:"tilde-above tilde-below tilde-high-above tilde-far-below bar-above bar-below bar-high-above bar-high-below".split(" "),tehtaPositions:{tinco:{o:3,w:3,others:2},parma:{o:3,w:3,others:2},calma:{o:3,w:3,u:3,others:2},quesse:{o:3,w:3,others:2},ando:{wide:!0,e:1,o:2,"\u00f3":1,"\u00fa":1,others:0},umbar:{wide:!0,e:1,o:2,"\u00f3":1,"\u00fa":1,others:0},anga:{wide:!0,e:1,"\u00f3":1,"\u00fa":1,others:0},ungwe:{wide:!0,e:1,o:1,"\u00f3":1,"\u00fa":1,others:0},thule:{others:3},formen:3,harma:{e:0,
+o:3,u:7,"\u00f3":2,"\u00fa":2,w:0,others:1},hwesta:{e:0,o:3,u:7,w:0,others:1},anto:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},ampa:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},anca:{wide:!0,u:7,"\u00f3":1,"\u00fa":1,others:0},unque:{wide:!0,u:7,others:0},numen:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},malta:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},noldo:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},nwalme:{wide:!0,"\u00f3":1,"\u00fa":1,others:0},ore:{e:3,o:3,u:3,"\u00f3":3,"\u00fa":3,others:1},vala:{e:3,o:3,
+u:3,"\u00f3":3,"\u00fa":3,others:1},anna:{e:3,o:3,u:3,"\u00f3":2,"\u00fa":2,others:1},wilya:{e:3,o:3,u:3,"\u00f3":3,"\u00fa":3,others:1},romen:{e:3,o:3,u:3,"\u00f3":2,"\u00fa":2,y:null,others:1},arda:{a:1,e:3,i:1,o:3,u:3,"\u00ed":1,"\u00f3":2,"\u00fa":2,y:null,others:0},lambe:{wide:!0,e:1,y:4,"\u00f3":1,"\u00fa":1,others:0},alda:{wide:!0,others:1},silme:{y:3,others:null},"silme-nuquerna":{e:3,o:3,u:3,"\u00f3":3,"\u00fa":3,y:null,others:1},esse:{y:null,others:null},"esse-nuquerna":{e:3,o:3,u:3,"\u00f3":3,
+"\u00fa":3,others:1},hyarmen:3,"hwesta-sindarinwa":{o:2,u:2,"\u00f3":1,"\u00fa":2,others:0},yanta:{e:3,o:3,u:3,"\u00f3":2,"\u00fa":2,others:1},ure:{e:3,o:3,u:3,"\u00f3":3,"\u00fa":3,others:1},halla:{others:null},"short-carrier":3,"long-carrier":{y:null,others:3},"round-carrier":3,"tinco-extended":3,"parma-extended":3,"calma-extended":{o:3,u:7,"\u00f3":2,"\u00fa":2,others:1},"quesse-extended":{o:0,u:7,others:1}},punctuation:{"-":"comma",",":"comma",":":"comma",";":"full-stop",".":"full-stop","!":"exclamation-point",
+"?":"question-mark","(":"open-paren",")":"close-paren",">":"flourish-left","<":"flourish-right"},annotations:{tinco:{tengwa:"t"},parma:{tengwa:"p"},calma:{tengwa:"c"},quesse:{tengwa:"c"},ando:{tengwa:"d"},umbar:{tengwa:"b"},anga:{tengwa:"ch"},ungwe:{tengwa:"g"},thule:{tengwa:"th"},formen:{tengwa:"f"},hyarmen:{tengwa:"h"},hwesta:{tengwa:"kh"},unque:{tengwa:"gh"},anto:{tengwa:"dh"},anca:{tengwa:"j"},ampa:{tengwa:"v"},numen:{tengwa:"n"},malta:{tengwa:"m"},nwalme:{tengwa:"\u00f1"},romen:{tengwa:"r"},
+ore:{tengwa:"-r"},lambe:{tengwa:"l"},silme:{tengwa:"s"},"silme-nuquerna":{tengwa:"s"},esse:{tengwa:"z"},"esse-nuquerna":{tengwa:"z"},harma:{tengwa:"sh"},alda:{tengwa:"lh"},arda:{tengwa:"rh"},wilya:{tengwa:"a"},vala:{tengwa:"w"},anna:{tengwa:"i"},vala:{tengwa:"w"},yanta:{tengwa:"e"},"hwesta-sindarinwa":{tengwa:"wh"},s:{following:"s"},"s-inverse":{following:"s<sub>2</sub>"},"s-extended":{following:"s<sub>3</sub>"},"s-flourish":{following:"s<sub>4</sub>"},"long-carrier":{tengwa:"\u00b4"},"short-carrier":{},
+"tilde-above":{above:"nm\u00f1-"},"tilde-below":{below:"2"},a:{"tehta-above":"a"},e:{"tehta-above":"e"},i:{"tehta-above":"i"},o:{"tehta-above":"o"},u:{"tehta-above":"u"},"\u00f3":{"tehta-above":"\u00f3"},"\u00fa":{"tehta-above":"\u00fa"},"\u00ed":{"tehta-above":"y"},y:{"tehta-below":"y"},w:{"tehta-above":"w"},"full-stop":{tengwa:"."},"exclamation-point":{tengwa:"!"},"question-mark":{tengwa:"?"},comma:{tengwa:"-"},"open-paren":{tengwa:"("},"close-paren":{tengwa:")"},"flourish-left":{tengwa:"\u201c"},
+"flourish-right":{tengwa:"\u201d"}}};j.transcribe=function(a,e){e=e||{};console.log(e);var c=e.plain||!1,f=e.block||!1,d=f?"<p>":"",b=f?"<br>":"",p=f?"</p>":"";return a.map(function(a){return a.map(function(a){return d+a.map(function(a){return a.map(function(a){return a.map(function(a){var b=a.tengwa||"anna",d=[];a.above&&d.push(a.above);a.below&&d.push(a.below);a.tildeBelow&&d.push("tilde-below");a.tildeAbove&&d.push("tilde-above");a.following&&d.push(a.following);d=g.tengwar[b]+d.map(function(a){return z(b,
+a)}).join("");a.errors&&!c&&(d='<abbr class="error" title="'+a.errors.join("\n").replace(/"/g,"&quot;")+'">'+d+"</abbr>");return d}).join("")}).join(" ")}).join(b+"\n")+p}).join("\n\n")}).join("\n\n\n")};j.tehtaForTengwa=z;j.makeColumn=function(a,e,c){return new i(a,e,c)};var i=function(a,e,c){this.above=e;this.tildeAbove=void 0;this.tengwa=a;this.tildeBelow=void 0;this.below=c;this.error=this.following=void 0};i.prototype.canAddAbove=function(){return!this.above||("silme"===this.tengwa||"esse"===
+this.tengwa)&&!this.below};i.prototype.addAbove=function(a){"silme"===this.tengwa&&(this.tengwa="silme-nuquerna");"esse"===this.tengwa&&(this.tengwa="esse-nuquerna");this.above=a;return this};i.prototype.canAddBelow=function(){return!this.below&&"silme-nuquerna"!==this.tengwa};i.prototype.addBelow=function(a){this.below=a;return this};i.prototype.addTildeAbove=function(){this.tildeAbove=!0;return this};i.prototype.addTildeBelow=function(){this.tildeBelow=!0;return this};i.prototype.addFollowing=function(a){this.following=
+a;return this};i.prototype.addError=function(a){this.errors=this.errors||[];this.errors.push(a);return this};var l={module$exports:function(a,e){e=e||function(a){throw Error(a);};return function(c){var f,d=a.apply(null,[function(a){f=a;var c=e;return function(a){""!==a&&c("Unexpected "+JSON.stringify(a));return function P(){return P}}}].concat(Array.prototype.slice.call(arguments,1)));for(Array.prototype.forEach.call(c,function(a){d=d(a)});!f;)d=d("");return f}}};l.module$exports&&(l=l.module$exports);
+var m={module$exports:function(a){return a.replace($,function(a,c){return M[c]})}},M={k:"c",x:"cs",qu:"cw",q:"cw",ph:"f",bh:"v","\u00eb":"e","\u00e2":"\u00e1","\u00ea":"\u00e9","\u00ee":"\u00ed","\u00f4":"\u00f3","\u00fb":"\u00fa"},$=RegExp("("+Object.keys(M).join("|")+")","ig");m.module$exports&&(m=m.module$exports);var n={module$exports:{"-":"comma",",":"comma",":":"comma",";":"full-stop",".":"full-stop","!":"exclamation-point","?":"question-mark","(":"open-paren",")":"close-paren",">":"flourish-left",
+"<":"flourish-right"}};n.module$exports&&(n=n.module$exports);var y={encode:function(a){return a.map(function(a){return a.map(function(a){return a.map(function(a){return a.map(function(a){return a.map(function(a){var c=[];a.above&&c.push(a.above);a.below&&c.push(a.below);a.following&&c.push(a.following);a.tildeAbove&&c.push("tilde-above");a.tildeBelow&&c.push("tilde-below");return c.length?a.tengwa+":"+c.join(","):a.tengwa}).join(";")}).join(" ")}).join("\n")}).join("\n\n")}).join("\n\n\n")},decode:function(a,
+e){return a.split("\n\n\n").map(function(a){return a.split("\n\n").map(function(a){return a.split("\n").map(function(a){return a.split(" ").map(function(a){return A(a,e)})})})})}};y.decodeWord=A;var o={},O=j,C=y,Q=m,D=n,N={};o.transcribe=function(a,e){e=s(e);return e.font.transcribe(t(a,e),e)};o.encode=function(a,e){e=s(e);return C.encode(t(a,e),e)};o.parse=t;var B={iant:"yanta;tinco:a,tilde-above",iaur:"yanta;vala:a;ore",baranduiniant:"umbar;romen:a;ando:a,tilde-above;anna:u;yanta;anto:a,tilde-above",
+ioreth:"yanta;romen:o;thule:e",noldo:"nwalme;lambe:o;ando;short-carrier:o",noldor:"nwalme;lambe:o;ando;ore:o",is:"short-carrier:i,s"},R=l(function(a,e){return E(a,e,[])}),v="aeiou\u00f3\u00fa",q={"\u00e1":"a","\u00e9":"e","\u00ed":"i","\u00f3":"o","\u00fa":"u"};o.parseTengwaAnnotations=k;var S=["tinco","parma","short-carrier","lambe"],r={},U=j,W=m,G=n,T={};r.transcribe=function(a,e){e=w(e);return e.font.transcribe(x(a,e),e)};r.encode=function(a,e){e=w(e);return y.encode(x(a,e),e)};r.parse=x;var V=
+l(function(a,e){return H(a,e,[])}),J="aeiouy\u00e1\u00e9\u00ed\u00f3\u00fa",Y=o,Z=r,X=j,L=Array.prototype;document.querySelectorAll&&L.forEach&&("complete"===document.readyState?K():document.addEventListener("DOMContentLoaded",K,!0))})();