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
= {
243 "hwesta-sindarinwa": {
329 exports
.transcribe
= transcribe
;
330 function transcribe(sections
, options
) {
331 options
= options
|| {};
332 var block
= options
.block
|| false;
333 var beginParagraph
= block
? "<p>" : "";
334 var delimitParagraph
= "<br>";
335 var endParagraph
= block
? "</p>" : "";
336 return sections
.map(function (section
) {
337 return section
.map(function (paragraph
) {
338 return beginParagraph
+ paragraph
.map(function (line
) {
339 return line
.map(function (word
) {
340 return word
.map(function (column
) {
341 return transcribeColumn(column
, options
);
344 }).join(delimitParagraph
+ "\n") + endParagraph
;
349 exports
.transcribeColumn
= transcribeColumn
;
350 function transcribeColumn(column
, options
) {
351 options
= options
|| {};
352 var plain
= options
.plain
|| false;
353 var tengwa
= column
.tengwa
|| "anna";
355 if (column
.above
) tehtar
.push(column
.above
);
356 if (column
.below
) tehtar
.push(column
.below
);
357 if (column
.tildeBelow
) tehtar
.push("tilde-below");
358 if (column
.tildeAbove
) tehtar
.push("tilde-above");
359 if (column
.following
) tehtar
.push(column
.following
);
360 var html
= tengwar
[tengwa
] + tehtar
.map(function (tehta
) {
361 return tehtaForTengwa(tengwa
, tehta
);
363 if (column
.errors
&& !plain
) {
364 html
= "<abbr class=\"error\" title=\"" + column
.errors
.join("\n").replace(/"/g, """) + "\">" + html
+ "</abbr>";
369 exports
.tehtaForTengwa
= tehtaForTengwa
;
370 function tehtaForTengwa(tengwa
, tehta
) {
371 var tehtaKey
= tehtaKeyForTengwa(tengwa
, tehta
);
372 if (tehtaKey
== null)
375 tehtar
[tehta
][tengwa
] ||
376 tehtar
[tehta
][tehtaKey
] ||
381 function tehtaKeyForTengwa(tengwa
, tehta
) {
384 if (tehtar
[tehta
].special
)
385 return tehtar
[tehta
][tengwa
] || null;
386 if (Alphabet
.barsAndTildes
.indexOf(tehta
) !== -1) {
387 if (tengwa
=== "lambe" || tengwa
=== "alda" && tehtar
[tehta
].length
>= 2)
389 return positions
[tengwa
].wide
? 0 : 1;
391 if (positions
[tengwa
] == null)
393 if (positions
[tengwa
][tehta
] === null)
395 if (positions
[tengwa
][tehta
] != null)
396 return positions
[tengwa
][tehta
];
397 if (positions
[tengwa
].others
!= null)
398 return positions
[tengwa
].others
;
399 return positions
[tengwa
];
402 exports
.makeColumn
= makeColumn
;
403 function makeColumn(tengwa
, tengwarFrom
) {
404 return makeFontColumn(exports
, tengwa
, tengwarFrom
);