2 var Alphabet
= require("./alphabet");
3 var Bindings
= require("./dan-smith");
4 var makeFontColumn
= require("./column");
6 var tengwar
= exports
.tengwar
= Bindings
.tengwar
;
7 var tehtar
= exports
.tehtar
= Bindings
.tehtar
;
9 var positions
= exports
.positions
= {
208 "hwesta-sindarinwa": {
295 exports
.transcribe
= transcribe
;
296 function transcribe(sections
, options
) {
297 options
= options
|| {};
298 var block
= options
.block
|| false;
299 var beginParagraph
= block
? "<p>" : "";
300 var delimitParagraph
= "<br>";
301 var endParagraph
= block
? "</p>" : "";
302 return sections
.map(function (section
) {
303 return section
.map(function (paragraph
) {
304 return beginParagraph
+ paragraph
.map(function (line
) {
305 return line
.map(function (word
) {
306 return word
.map(function (column
) {
307 return transcribeColumn(column
, options
);
310 }).join(delimitParagraph
+ "\n") + endParagraph
;
315 exports
.transcribeColumn
= transcribeColumn
;
316 function transcribeColumn(column
, options
) {
317 options
= options
|| {};
318 var plain
= options
.plain
|| false;
319 var tengwa
= column
.tengwa
|| "anna";
321 if (column
.above
) tehtar
.push(column
.above
);
322 if (column
.below
) tehtar
.push(column
.below
);
323 if (column
.tildeBelow
) tehtar
.push("tilde-below");
324 if (column
.tildeAbove
) tehtar
.push("tilde-above");
325 if (column
.following
) tehtar
.push(column
.following
);
326 var html
= tengwar
[tengwa
] + tehtar
.map(function (tehta
) {
327 return tehtaForTengwa(tengwa
, tehta
);
329 if (column
.errors
&& !plain
) {
330 html
= "<abbr class=\"error\" title=\"" + column
.errors
.join("\n").replace(/"/g, """) + "\">" + html
+ "</abbr>";
335 exports
.tehtaForTengwa
= tehtaForTengwa
;
336 function tehtaForTengwa(tengwa
, tehta
) {
337 var tehtaKey
= tehtaKeyForTengwa(tengwa
, tehta
);
338 if (tehtaKey
== null)
341 tehtar
[tehta
][tengwa
] ||
342 tehtar
[tehta
][tehtaKey
] ||
347 var longVowels
= "áéóú";
348 function tehtaKeyForTengwa(tengwa
, tehta
) {
351 if (longVowels
.indexOf(tehta
) !== -1)
353 if (tehtar
[tehta
].special
)
354 return tehtar
[tehta
][tengwa
] || null;
355 if (Alphabet
.barsAndTildes
.indexOf(tehta
) !== -1) {
356 if (tengwa
=== "lambe" || tengwa
=== "alda" && tehtar
[tehta
].length
>= 2)
358 return positions
[tengwa
].wide
? 0 : 1;
360 if (positions
[tengwa
] == null)
362 if (positions
[tengwa
][tehta
] === null)
364 if (positions
[tengwa
][tehta
] != null)
365 return positions
[tengwa
][tehta
];
366 if (positions
[tengwa
].others
!= null)
367 return positions
[tengwa
].others
;
368 return positions
[tengwa
];
371 exports
.makeColumn
= makeColumn
;
372 function makeColumn(tengwa
, tengwarFrom
) {
373 return makeFontColumn(exports
, tengwa
, tengwarFrom
);