Support for the FreeMonoTengwar font and ConScript encoding
[tengwarjs.git] / freemonotengwar.js
1
2 var Alphabet = require("./alphabet");
3 var Bindings = require("./conscript.js");
4 var makeFontColumn = require("./column");
5
6 var tengwar = exports.tengwar = Bindings.tengwar;
7 var tehtar = exports.tehtar = Bindings.tehtar;
8 window.console.log('hello');
9 var positions = exports.positions = {
10
11 "tinco": 0,
12 "parma": 0,
13 "calma": 0,
14 "quesse": 0,
15
16 "ando": 0,
17 "umbar": 0,
18 "anga": 0,
19 "ungwe": 0,
20
21 "thule": 0,
22 "formen": 0,
23 "harma": 0,
24 "hwesta": 0,
25
26 "anto": 0,
27 "ampa": 0,
28 "anca": 0,
29 "unque": 0,
30
31 "numen": 0,
32 "malta": 0,
33 "noldo": 0,
34 "nwalme": 0,
35
36 "ore": 0,
37 "vala": 0,
38 "anna": 0,
39 "wilya": 0,
40
41 "romen": 0,
42 "arda": 0,
43 "lambe": 0,
44 "alda": 0,
45
46 "silme": {
47 "y": 0,
48 "o-below": 0,
49 "i-below": 0,
50 "others": null
51 },
52 "silme-nuquerna": {
53 "e": 0,
54 "o": 0,
55 "u": 0,
56 "y": null,
57 "o-below": null,
58 "i-below": null,
59 "others": 0
60 },
61 "esse": 0,
62 "esse-nuquerna": 0,
63
64 "hyarmen": 0,
65 "hwesta-sindarinwa": 0,
66 "yanta": 0,
67 "ure": 0,
68
69 // should not occur:
70 "halla": 0,
71 "short-carrier": 0,
72 "long-carrier": 0,
73 "round-carrier": 0,
74
75 "tinco-extended": 0,
76 "parma-extended": 0,
77 "calma-extended": 0,
78 "quesse-extended": 0,
79 "ando-extended": 0,
80 "umbar-extended": 0,
81 "anga-extended": 0,
82 "ungwe-extended": 0
83 };
84
85 exports.transcribe = transcribe;
86 function transcribe(sections, options) {
87 options = options || {};
88 var block = options.block || false;
89 var beginParagraph = block ? "<p>" : "";
90 var delimitParagraph = "<br>";
91 var endParagraph = block ? "</p>" : "";
92 return sections.map(function (section) {
93 return section.map(function (paragraph) {
94 return beginParagraph + paragraph.map(function (line) {
95 return line.map(function (word) {
96 return word.map(function (column) {
97 return transcribeColumn(column, options);
98 }).join("");
99 }).join(" ");;
100 }).join(delimitParagraph + "\n") + endParagraph;
101 }).join("\n\n");
102 }).join("\n\n\n");
103 }
104
105 exports.transcribeColumn = transcribeColumn;
106 function transcribeColumn(column, options) {
107 options = options || {};
108 var plain = options.plain || false;
109 var tengwa = column.tengwa || "anna";
110 var tehtar = [];
111 if (column.above) tehtar.push(column.above);
112 if (column.below) tehtar.push(column.below);
113 if (column.tildeBelow) tehtar.push("tilde-below");
114 if (column.tildeAbove) tehtar.push("tilde-above");
115 if (column.following) tehtar.push(column.following);
116 var html = tengwar[tengwa] + tehtar.map(function (tehta) {
117 return tehtaForTengwa(tengwa, tehta);
118 }).join("");
119 if (column.errors && !plain) {
120 html = "<abbr class=\"error\" title=\"" + column.errors.join("\n").replace(/"/g, "&quot;") + "\">" + html + "</abbr>";
121 }
122 return html;
123 }
124
125 exports.tehtaForTengwa = tehtaForTengwa;
126 function tehtaForTengwa(tengwa, tehta) {
127 var tehtaKey = tehtaKeyForTengwa(tengwa, tehta);
128 if (tehtaKey == null)
129 return null;
130 return (
131 tehtar[tehta][tengwa] ||
132 tehtar[tehta][tehtaKey] ||
133 ""
134 );
135 }
136
137 function tehtaKeyForTengwa(tengwa, tehta) {
138 return 0;
139 }
140
141 exports.makeColumn = makeColumn;
142 function makeColumn(tengwa, tengwarFrom) {
143 return makeFontColumn(exports, tengwa, tengwarFrom);
144 }
145