hebrew-transliteration 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/rules.js ADDED
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wordRules = exports.sylRules = void 0;
4
+ const cluster_1 = require("havarotjs/dist/cluster");
5
+ const regularExpressions_1 = require("havarotjs/dist/utils/regularExpressions");
6
+ const mapChars_1 = require("./mapChars");
7
+ const taamim = /[\u{0590}-\u{05AF}\u{05BD}\u{05BF}]/u;
8
+ const changeElementSplit = (input, split, join) => input.split(split).join(join);
9
+ const consonantFeatures = (clusterText, syl, cluster, schema) => {
10
+ var _a;
11
+ if ((_a = schema.ADDITIONAL_FEATURES) === null || _a === void 0 ? void 0 : _a.length) {
12
+ const clusterSeqs = schema.ADDITIONAL_FEATURES.filter((s) => s.FEATURE === "cluster");
13
+ for (const seq of clusterSeqs) {
14
+ const heb = new RegExp(seq.HEBREW, "u");
15
+ if (heb.test(clusterText)) {
16
+ const sylSeq = changeElementSplit(clusterText, heb, seq.TRANSLITERATION);
17
+ return [...sylSeq].map((char) => (0, mapChars_1.mapChars)(char, schema)).join("");
18
+ }
19
+ }
20
+ }
21
+ clusterText = cluster.hasShewa && syl.isClosed ? clusterText.replace(/\u{05B0}/u, "") : clusterText;
22
+ // mappiq he
23
+ if (/ה\u{05BC}$/mu.test(clusterText)) {
24
+ return changeElementSplit(clusterText, /ה\u{05BC}/u, schema.HE);
25
+ }
26
+ if (syl.isFinal && !syl.isClosed) {
27
+ const furtiveChet = /\u{05D7}\u{05B7}$/mu;
28
+ if (furtiveChet.test(clusterText)) {
29
+ return changeElementSplit(clusterText, furtiveChet, "\u{05B7}\u{05D7}");
30
+ }
31
+ const furtiveAyin = /\u{05E2}\u{05B7}$/mu;
32
+ if (furtiveAyin.test(clusterText)) {
33
+ return changeElementSplit(clusterText, furtiveAyin, "\u{05B7}\u{05E2}");
34
+ }
35
+ const furtiveHe = /\u{05D4}\u{05BC}\u{05B7}$/mu;
36
+ if (furtiveHe.test(clusterText)) {
37
+ return changeElementSplit(clusterText, furtiveHe, "\u{05B7}\u{05D4}\u{05BC}");
38
+ }
39
+ }
40
+ // dagesh chazaq
41
+ const prevHasVowel = cluster.prev instanceof cluster_1.Cluster ? cluster.prev.hasVowel : false;
42
+ const isDoubled = schema.DAGESH_CHAZAQ && prevHasVowel && /\u{05BC}/u.test(clusterText);
43
+ if (schema.BET_DAGESH && /ב\u{05BC}/u.test(clusterText)) {
44
+ return changeElementSplit(clusterText, /ב\u{05BC}/u, schema.BET_DAGESH.repeat(isDoubled ? 2 : 1));
45
+ }
46
+ if (schema.GIMEL_DAGESH && /ג\u{05BC}/u.test(clusterText)) {
47
+ return changeElementSplit(clusterText, /ג\u{05BC}/u, schema.GIMEL_DAGESH.repeat(isDoubled ? 2 : 1));
48
+ }
49
+ if (schema.DALET_DAGESH && /ד\u{05BC}/u.test(clusterText)) {
50
+ return changeElementSplit(clusterText, /ד\u{05BC}/u, schema.DALET_DAGESH.repeat(isDoubled ? 2 : 1));
51
+ }
52
+ if (schema.KAF_DAGESH && /כ\u{05BC}/u.test(clusterText)) {
53
+ return changeElementSplit(clusterText, /כ\u{05BC}/u, schema.KAF_DAGESH.repeat(isDoubled ? 2 : 1));
54
+ }
55
+ if (schema.KAF_DAGESH && /ך\u{05BC}/u.test(clusterText)) {
56
+ return changeElementSplit(clusterText, /ך\u{05BC}/u, schema.KAF_DAGESH.repeat(isDoubled ? 2 : 1));
57
+ }
58
+ if (schema.PE_DAGESH && /פ\u{05BC}/u.test(clusterText)) {
59
+ return changeElementSplit(clusterText, /פ\u{05BC}/u, schema.PE_DAGESH.repeat(isDoubled ? 2 : 1));
60
+ }
61
+ if (schema.TAV_DAGESH && /ת\u{05BC}/u.test(clusterText)) {
62
+ return changeElementSplit(clusterText, /ת\u{05BC}/u, schema.TAV_DAGESH.repeat(isDoubled ? 2 : 1));
63
+ }
64
+ if (/ש\u{05C1}/u.test(clusterText)) {
65
+ return changeElementSplit(clusterText, /ש\u{05C1}/u, schema.SHIN.repeat(isDoubled ? 2 : 1));
66
+ }
67
+ if (/ש\u{05C2}/u.test(clusterText)) {
68
+ return changeElementSplit(clusterText, /ש\u{05C2}/u, schema.SIN.repeat(isDoubled ? 2 : 1));
69
+ }
70
+ if (isDoubled) {
71
+ const consonant = cluster.chars[0].text;
72
+ const consonantDagesh = new RegExp(consonant + "\u{05BC}", "u");
73
+ return changeElementSplit(clusterText, consonantDagesh, `${consonant + consonant}`);
74
+ }
75
+ if (cluster.isShureq) {
76
+ return schema.SHUREQ;
77
+ }
78
+ return clusterText;
79
+ };
80
+ const materFeatures = (syl, schema) => {
81
+ const mater = syl.clusters.filter((c) => c.isMater)[0];
82
+ const prev = mater.prev instanceof cluster_1.Cluster ? mater.prev : null;
83
+ const materText = mater.text;
84
+ const prevText = ((prev === null || prev === void 0 ? void 0 : prev.text) || "").replace(taamim, "");
85
+ // string comprised of all non-mater clusters in a syl with a mater
86
+ let noMaterText = syl.clusters
87
+ .filter((c) => !c.isMater)
88
+ .map((c) => consonantFeatures(c.text.replace(taamim, ""), syl, c, schema))
89
+ .join("");
90
+ // workaround for maqaf
91
+ const hasMaqaf = mater.text.includes("־");
92
+ noMaterText = hasMaqaf ? noMaterText.concat("־") : noMaterText;
93
+ if (/י/.test(materText)) {
94
+ // hiriq
95
+ if (/\u{05B4}/u.test(prevText)) {
96
+ return changeElementSplit(noMaterText, /\u{05B4}/u, schema.HIRIQ_YOD);
97
+ }
98
+ // tsere
99
+ if (/\u{05B5}/u.test(prevText)) {
100
+ return changeElementSplit(noMaterText, /\u{05B5}/u, schema.TSERE_YOD);
101
+ }
102
+ // segol
103
+ if (/\u{05B6}/u.test(prevText)) {
104
+ return changeElementSplit(noMaterText, /\u{05B6}/u, schema.SEGOL_YOD);
105
+ }
106
+ }
107
+ if (/ו/u.test(materText)) {
108
+ // holam
109
+ if (/\u{05B9}/u.test(prevText)) {
110
+ return changeElementSplit(noMaterText, /\u{05B9}/u, schema.HOLAM_VAV);
111
+ }
112
+ }
113
+ if (/ה/.test(materText)) {
114
+ // qamets
115
+ if (/\u{05B8}/u.test(prevText)) {
116
+ return changeElementSplit(noMaterText, /\u{05B8}/u, schema.QAMATS_HE);
117
+ }
118
+ // seghol
119
+ if (/\u{05B6}/u.test(prevText)) {
120
+ return changeElementSplit(noMaterText, /\u{05B6}/u, schema.SEGOL_HE);
121
+ }
122
+ // tsere
123
+ if (/\u{05B5}/u.test(prevText)) {
124
+ return changeElementSplit(noMaterText, /\u{05B5}/u, schema.SEGOL_HE);
125
+ }
126
+ }
127
+ return materText;
128
+ };
129
+ const joinChars = (isAccented, sylChars, schema) => {
130
+ if (!isAccented) {
131
+ return sylChars.map((char) => (0, mapChars_1.mapChars)(char, schema)).join("");
132
+ }
133
+ if (schema.STRESS_MARKER) {
134
+ const location = schema.STRESS_MARKER.location;
135
+ const mark = schema.STRESS_MARKER.mark;
136
+ if (location === "before-syllable") {
137
+ return `${mark}${sylChars.map((char) => (0, mapChars_1.mapChars)(char, schema)).join("")}`;
138
+ }
139
+ if (location === "after-syllable") {
140
+ return `${sylChars.map((char) => (0, mapChars_1.mapChars)(char, schema)).join("")}${mark}`;
141
+ }
142
+ const vowels = [
143
+ schema.PATAH,
144
+ schema.HATAF_PATAH,
145
+ schema.QAMATS,
146
+ schema.HATAF_QAMATS,
147
+ schema.SEGOL,
148
+ schema.HATAF_SEGOL,
149
+ schema.TSERE,
150
+ schema.HIRIQ,
151
+ schema.HOLAM,
152
+ schema.QAMATS_QATAN,
153
+ schema.QUBUTS,
154
+ schema.QAMATS_HE,
155
+ schema.SEGOL_HE,
156
+ schema.TSERE_HE,
157
+ schema.HIRIQ_YOD,
158
+ schema.TSERE_YOD,
159
+ schema.SEGOL_YOD,
160
+ schema.HOLAM_VAV,
161
+ schema.SHUREQ
162
+ ].sort((a, b) => b.length - a.length);
163
+ const vowelRgx = new RegExp(`${vowels.join("|")}`);
164
+ const str = sylChars.map((char) => (0, mapChars_1.mapChars)(char, schema)).join("");
165
+ const match = str.match(vowelRgx);
166
+ if (location === "before-vowel") {
167
+ return (match === null || match === void 0 ? void 0 : match.length) ? str.replace(match[0], `${mark}${match[0]}`) : str;
168
+ }
169
+ // after-vowel
170
+ return (match === null || match === void 0 ? void 0 : match.length) ? str.replace(match[0], `${match[0]}${mark}`) : str;
171
+ }
172
+ return sylChars.map((char) => (0, mapChars_1.mapChars)(char, schema)).join("");
173
+ };
174
+ const sylRules = (syl, schema) => {
175
+ var _a;
176
+ const sylTxt = syl.text.replace(taamim, "");
177
+ if ((_a = schema.ADDITIONAL_FEATURES) === null || _a === void 0 ? void 0 : _a.length) {
178
+ const sylSeqs = schema.ADDITIONAL_FEATURES.filter((s) => s.FEATURE === "syllable");
179
+ for (const seq of sylSeqs) {
180
+ const heb = new RegExp(seq.HEBREW, "u");
181
+ if (heb.test(sylTxt)) {
182
+ const wordSeq = changeElementSplit(sylTxt, heb, seq.TRANSLITERATION);
183
+ return joinChars(syl.isAccented, [...wordSeq], schema);
184
+ }
185
+ }
186
+ }
187
+ // syllable is 3ms sufx
188
+ const mSSuffix = /\u{05B8}\u{05D9}\u{05D5}/u;
189
+ if (syl.isFinal && mSSuffix.test(sylTxt)) {
190
+ const sufxSyl = changeElementSplit(sylTxt, mSSuffix, schema.MS_SUFX);
191
+ return joinChars(syl.isAccented, [...sufxSyl], schema);
192
+ }
193
+ // syllable has a mater
194
+ // unsure why eslint throwing error here, but not other places...
195
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment
196
+ const hasMater = syl.clusters.map((c) => c.isMater).includes(true);
197
+ if (hasMater) {
198
+ const materSyl = materFeatures(syl, schema);
199
+ return joinChars(syl.isAccented, [...materSyl], schema);
200
+ }
201
+ // regular syllables
202
+ const returnTxt = syl.clusters.map((cluster) => {
203
+ const clusterText = cluster.text.replace(taamim, "");
204
+ return consonantFeatures(clusterText, syl, cluster, schema);
205
+ });
206
+ return joinChars(syl.isAccented, returnTxt, schema);
207
+ };
208
+ exports.sylRules = sylRules;
209
+ /**
210
+ * formats the Divine Name with any Latin chars
211
+ *
212
+ * @param str word text
213
+ * @param schema
214
+ * @returns the Divine Name with any pre or proceding Latin chars
215
+ */
216
+ const getDivineName = (str, schema) => {
217
+ const begn = str[0];
218
+ const end = str[str.length - 1];
219
+ return `${regularExpressions_1.hebChars.test(begn) ? "" : begn}${schema.DIVINE_NAME}${regularExpressions_1.hebChars.test(end) ? "" : end}`;
220
+ };
221
+ const wordRules = (word, schema) => {
222
+ var _a;
223
+ if (word.isDivineName)
224
+ return getDivineName(word.text, schema);
225
+ if (word.hasDivineName)
226
+ return `${(0, exports.sylRules)(word.syllables[0], schema)}-${getDivineName(word.text, schema)}`;
227
+ if (word.isNotHebrew)
228
+ return word.text;
229
+ if ((_a = schema.ADDITIONAL_FEATURES) === null || _a === void 0 ? void 0 : _a.length) {
230
+ const wordSeqs = schema.ADDITIONAL_FEATURES.filter((s) => s.FEATURE === "word");
231
+ for (const seq of wordSeqs) {
232
+ const heb = new RegExp(seq.HEBREW, "u");
233
+ const wordText = word.text.replace(taamim, "");
234
+ if (heb.test(wordText)) {
235
+ const wordSeq = changeElementSplit(wordText, heb, seq.TRANSLITERATION);
236
+ return [...wordSeq].map((char) => (0, mapChars_1.mapChars)(char, schema)).join("");
237
+ }
238
+ }
239
+ }
240
+ return word;
241
+ };
242
+ exports.wordRules = wordRules;
@@ -0,0 +1,476 @@
1
+ import { SylOpts } from "havarotjs/dist/text";
2
+ /**
3
+ * class for defining a schema for transliteration
4
+ */
5
+ export declare class Schema implements SylOpts {
6
+ /**
7
+ * HEBREW POINT SHEVA (U+05B0) ְ◌
8
+ * @example
9
+ * 'ǝ'
10
+ */
11
+ VOCAL_SHEVA: string;
12
+ /**
13
+ * HEBREW POINT HATAF SEGOL (U+05B1) ֱ◌
14
+ * @example
15
+ * 'ĕ'
16
+ */
17
+ HATAF_SEGOL: string;
18
+ /**
19
+ * HEBREW POINT HATAF PATAH (U+05B2) ֲ◌
20
+ * @example
21
+ * 'ă'
22
+ */
23
+ HATAF_PATAH: string;
24
+ /**
25
+ * HEBREW POINT HATAF QAMATS (U+05B3) ֳ◌
26
+ * @example
27
+ * 'ŏ'
28
+ */
29
+ HATAF_QAMATS: string;
30
+ /**
31
+ * HEBREW POINT HIRIQ (U+05B4) ִ◌
32
+ * @example
33
+ * 'i'
34
+ */
35
+ HIRIQ: string;
36
+ /**
37
+ * HEBREW POINT TSERE (U+05B5) ֵ◌
38
+ * @example
39
+ * 'ē'
40
+ */
41
+ TSERE: string;
42
+ /**
43
+ * HEBREW POINT SEGOL (U+05B6) ֶ◌
44
+ * @example
45
+ * 'e'
46
+ */
47
+ SEGOL: string;
48
+ /**
49
+ * HEBREW POINT PATAH (U+05B7) ַ◌
50
+ * @example
51
+ * 'a'
52
+ */
53
+ PATAH: string;
54
+ /**
55
+ * HEBREW POINT QAMATS (U+05B8) ָ◌
56
+ * @example
57
+ * 'ā'
58
+ */
59
+ QAMATS: string;
60
+ /**
61
+ * HEBREW POINT HOLAM (U+05B9) ֹ◌
62
+ * @example
63
+ * 'ō'
64
+ */
65
+ HOLAM: string;
66
+ /**
67
+ * HEBREW POINT QUBUTS (U+05BB) ֻ◌
68
+ * @example
69
+ * 'u'
70
+ */
71
+ QUBUTS: string;
72
+ /**
73
+ * HEBREW POINT DAGESH OR MAPIQ (U+05BC) ּ◌
74
+ * @description typically, this will be a blank string
75
+ * @example
76
+ * ''
77
+ */
78
+ DAGESH: string;
79
+ /**
80
+ * HEBREW POINT DAGESH OR MAPIQ (U+05BC) ּ◌
81
+ * @description if true, repeats the consonant with the dagesh
82
+ * @example
83
+ * ```js
84
+ * transliterate('שַׁבָּת', { DAGESH_CHAZAQ: true });
85
+ * // 'shabbat'
86
+ * ```
87
+ */
88
+ DAGESH_CHAZAQ: boolean;
89
+ /**
90
+ * HEBREW PUNCTUATION MAQAF (U+05BE) ־◌
91
+ * @example
92
+ * '-'
93
+ */
94
+ MAQAF: string;
95
+ /**
96
+ * HEBREW PUNCTUATION PASEQ (U+05C0) ׀ ◌
97
+ * @description if a blank string, two spaces will occur between words
98
+ * @example
99
+ * '|' or ''
100
+ * @example
101
+ * ```js
102
+ * transliterate('כְּשֶׁ֣בֶת ׀ הַמֶּ֣לֶךְ', { PASEQ: '' });
103
+ * // 'kǝšebet hammelek'
104
+ * ```
105
+ */
106
+ PASEQ: string;
107
+ /**
108
+ * HEBREW PUNCTUATION SOF PASUQ (U+05C3) ׃◌
109
+ * @example
110
+ * '' or '.'
111
+ */
112
+ SOF_PASUQ: string;
113
+ /**
114
+ * HEBREW POINT QAMATS QATAN (U+05C7) ׇ◌
115
+ * @example
116
+ * 'o'
117
+ */
118
+ QAMATS_QATAN: string;
119
+ /**
120
+ * HEBREW POINT PATAH (U+05B7) ◌ַ
121
+ * @example
122
+ * 'a'
123
+ */
124
+ FURTIVE_PATAH: string;
125
+ /**
126
+ * HEBREW POINT HIRIQ (U+05B4) and YOD (U+05D9) י◌ִ
127
+ * @example
128
+ * 'î'
129
+ */
130
+ HIRIQ_YOD: string;
131
+ /**
132
+ * HEBREW POINT TSERE (U+05B5) and YOD (U+05D9) י◌ֵ
133
+ * @example
134
+ * 'ê'
135
+ */
136
+ TSERE_YOD: string;
137
+ /**
138
+ * HEBREW POINT SEGOL (U+05B6) and YOD (U+05D9) י◌ֶ
139
+ * @example
140
+ * 'ê'
141
+ */
142
+ SEGOL_YOD: string;
143
+ /**
144
+ * HEBREW LETTER VAV (U+05D5) and DAGESH (U+05BC) וּ
145
+ * @example
146
+ * 'û'
147
+ */
148
+ SHUREQ: string;
149
+ /**
150
+ * HEBREW LETTER HOLAM (U+05B9) and VAV (U+05D5) ֹו◌
151
+ * @example
152
+ * 'ô'
153
+ */
154
+ HOLAM_VAV: string;
155
+ /**
156
+ * HEBREW POINT QAMATS (U+05B8) and HE (U+05D4) ה◌ָ
157
+ * @example
158
+ * 'â'
159
+ */
160
+ QAMATS_HE: string;
161
+ /**
162
+ * HEBREW POINT SEGOL (U+05B6) and HE (U+05D4) ה◌ֶ
163
+ * @example
164
+ * 'ê'
165
+ */
166
+ SEGOL_HE: string;
167
+ /**
168
+ * HEBREW POINT TSERE (U+05B5) and HE (U+05D4) ה◌ֵ
169
+ * @example
170
+ * 'ê'
171
+ */
172
+ TSERE_HE: string;
173
+ /**
174
+ * HEBREW LETTER QAMATS (U+05B8) and YOD (U+05D9) and VAV (U+05D5) יו◌ָ
175
+ * @example
176
+ * 'āyw'
177
+ */
178
+ MS_SUFX: string;
179
+ /**
180
+ * HEBREW LETTER ALEF (U+05D0) א
181
+ * @example
182
+ * 'ʾ'
183
+ */
184
+ ALEF: string;
185
+ /**
186
+ * HEBREW LETTER BET (U+05D1) ב
187
+ * @example
188
+ * 'b' or 'v'
189
+ */
190
+ BET: string;
191
+ /**
192
+ * HEBREW LETTER BET (U+05D1) and DAGESH (U+05BC) ּב
193
+ * @description
194
+ * the letter bet with a dagesh kal
195
+ * @description
196
+ * use when need to distinguish between spirantized forms
197
+ * @example
198
+ * 'b'
199
+ */
200
+ BET_DAGESH?: string;
201
+ /**
202
+ * HEBREW LETTER GIMEL (U+05D2) ג
203
+ * @example
204
+ * 'g'
205
+ */
206
+ GIMEL: string;
207
+ /**
208
+ * HEBREW LETTER GIMEL (U+05D2) and DAGESH (U+05BC) גּ
209
+ * @description
210
+ * the letter gimel with a dagesh kal
211
+ * @description
212
+ * use when need to distinguish between spirantized forms
213
+ * @example
214
+ * 'g'
215
+ */
216
+ GIMEL_DAGESH?: string;
217
+ /**
218
+ * HEBREW LETTER DALET (U+05D3) ד
219
+ * @example
220
+ * 'd'
221
+ */
222
+ DALET: string;
223
+ /**
224
+ * HEBREW LETTER DALET (U+05D3) and DAGESH (U+05BC) דּ
225
+ * @description
226
+ * the letter dalet with a dagesh kal
227
+ * @description
228
+ * use when need to distinguish between spirantized forms
229
+ * @example
230
+ * 'd'
231
+ */
232
+ DALET_DAGESH?: string;
233
+ /**
234
+ * HEBREW LETTER HE (U+05D4) ה
235
+ * @example
236
+ * 'h'
237
+ */
238
+ HE: string;
239
+ /**
240
+ * HEBREW LETTER VAV (U+05D5) ו
241
+ * @example
242
+ * 'w'
243
+ */
244
+ VAV: string;
245
+ /**
246
+ * HEBREW LETTER ZAYIN (U+05D6) ז
247
+ * @example
248
+ * 'z'
249
+ */
250
+ ZAYIN: string;
251
+ /**
252
+ * HEBREW LETTER HET (U+05D7) ח
253
+ * @example
254
+ * 'ḥ'
255
+ */
256
+ HET: string;
257
+ /**
258
+ * HEBREW LETTER TET (U+05D8) ט
259
+ * @example
260
+ * 'ṭ'
261
+ */
262
+ TET: string;
263
+ /**
264
+ * HEBREW LETTER YOD (U+05D9) י
265
+ * @example
266
+ * 'y'
267
+ */
268
+ YOD: string;
269
+ /**
270
+ * HEBREW LETTER FINAL KAF (U+05DA) ך
271
+ * @example
272
+ * 'k' or 'kh'
273
+ */
274
+ FINAL_KAF: string;
275
+ /**
276
+ * HEBREW LETTER KAF (U+05DB) כ
277
+ * @example
278
+ * 'k' or 'kh'
279
+ */
280
+ KAF: string;
281
+ /**
282
+ * HEBREW LETTER KAF (U+05DB) and DAGESH (U+05BC) כּ
283
+ * @description
284
+ * the letter kaf with a dagesh kal
285
+ * @description
286
+ * use when need to distinguish between spirantized forms
287
+ * @example
288
+ * 'k'
289
+ */
290
+ KAF_DAGESH?: string;
291
+ /**
292
+ * HEBREW LETTER LAMED (U+05DC) ל
293
+ * @example
294
+ * 'l'
295
+ */
296
+ LAMED: string;
297
+ /**
298
+ * HEBREW LETTER FINAL MEM (U+05DD) ם
299
+ * @example
300
+ * 'm'
301
+ */
302
+ FINAL_MEM: string;
303
+ /**
304
+ * HEBREW LETTER MEM (U+05DE) מ
305
+ * @example
306
+ * 'm'
307
+ */
308
+ MEM: string;
309
+ /**
310
+ * HEBREW LETTER FINAL NUN (U+05DF) ן
311
+ * @example
312
+ * 'n'
313
+ */
314
+ FINAL_NUN: string;
315
+ /**
316
+ * HEBREW LETTER NUN (U+05E0) נ
317
+ * @example
318
+ * 'n'
319
+ */
320
+ NUN: string;
321
+ /**
322
+ * HEBREW LETTER SAMEKH (U+05E1) ס
323
+ * @example
324
+ * 's'
325
+ */
326
+ SAMEKH: string;
327
+ /**
328
+ * HEBREW LETTER AYIN (U+05E2) ע
329
+ * @example
330
+ * 'ʿ'
331
+ */
332
+ AYIN: string;
333
+ /**
334
+ * HEBREW LETTER FINAL PE (U+05E3) ף
335
+ * @example
336
+ * 'p' or 'f'
337
+ */
338
+ FINAL_PE: string;
339
+ /**
340
+ * HEBREW LETTER PE (U+05E4) פ
341
+ * @example
342
+ * 'p' or 'f'
343
+ */
344
+ PE: string;
345
+ /**
346
+ * HEBREW LETTER PE (U+05E4) and DAGESH (U+05BC) פּ
347
+ * @description
348
+ * the letter pe with a dagesh kal
349
+ * @description
350
+ * use when need to distinguish between spirantized forms
351
+ * @example
352
+ * 'p'
353
+ */
354
+ PE_DAGESH?: string;
355
+ /**
356
+ * HEBREW LETTER FINAL TSADI (U+05E5) ץ
357
+ * @example
358
+ * 'ṣ'
359
+ */
360
+ FINAL_TSADI: string;
361
+ /**
362
+ * HEBREW LETTER TSADI (U+05E6) צ
363
+ * @example
364
+ * 'ṣ'
365
+ */
366
+ TSADI: string;
367
+ /**
368
+ * HEBREW LETTER QOF (U+05E7) ק
369
+ * @example
370
+ * 'q'
371
+ */
372
+ QOF: string;
373
+ /**
374
+ * HEBREW LETTER RESH (U+05E8) ר
375
+ * @example
376
+ * 'r'
377
+ */
378
+ RESH: string;
379
+ /**
380
+ * HEBREW LETTER SHIN (U+05E9) and SHIN DOT (U+05C1) שׁ
381
+ * @example
382
+ * 'š'
383
+ */
384
+ SHIN: string;
385
+ /**
386
+ * HEBREW LETTER SHIN (U+05E9) and SIN DOT (U+05C2) שׁ
387
+ * @example
388
+ * 'ś'
389
+ */
390
+ SIN: string;
391
+ /**
392
+ * HEBREW LETTER TAV (U+05EA) ת
393
+ * @example
394
+ * 't' or 'th'
395
+ */
396
+ TAV: string;
397
+ /**
398
+ * HEBREW LETTER TAV (U+05EA) and DAGESH (U+05BC) תּ
399
+ * @description
400
+ * the letter tav with a dagesh kal
401
+ * @description
402
+ * use when need to distinguish between spirantized forms
403
+ * @example
404
+ * 't'
405
+ */
406
+ TAV_DAGESH?: string;
407
+ /**
408
+ * define additional sequences of characters
409
+ *
410
+ * ⚠️ there may be unpredictable results
411
+ *
412
+ * @example
413
+ * [{
414
+ * FEATURE: 'cluster',
415
+ * HEBREW: 'זּ',
416
+ * TRANSLITERATION: 'tz'
417
+ * }]
418
+ */
419
+ ADDITIONAL_FEATURES?: {
420
+ /**
421
+ * additional orthographic feature
422
+ *
423
+ * - `"cluster"` is any combination of a single character and optionally a _dagesh_ and vowel.
424
+ * - `"syllable"` is any combination of a multiple characters and a single vowel and optionally a _dagesh_
425
+ * - `"word"` covers everything else
426
+ */
427
+ FEATURE: "word" | "syllable" | "cluster";
428
+ /** use consonants and vowels; do not use taamim */
429
+ HEBREW: string;
430
+ TRANSLITERATION: string;
431
+ }[];
432
+ /**
433
+ * the full form of the divine name - יהוה
434
+ * @example
435
+ * 'yhwh'
436
+ */
437
+ DIVINE_NAME: string;
438
+ /**
439
+ * a syllable separator, usually an empty string
440
+ * @example
441
+ * '' or '-'
442
+ * @example
443
+ * ```js
444
+ * transliterate('הָאָֽרֶץ', { SYLLABLE_SEPARATOR: '-' });
445
+ * // 'hā-ʾā-reṣ'
446
+ * ```
447
+ */
448
+ SYLLABLE_SEPARATOR?: string;
449
+ /**
450
+ * a mark for indentifying the stressed syllable
451
+ *
452
+ * @description
453
+ * taamim are needed in the Hebrew text to correctly identify stress
454
+ * @example
455
+ * 'ˈ' or '\u0341'
456
+ * @example
457
+ * ```js
458
+ * transliterate('מֶ֣לֶךְ', { STRESS_MARKER: { location: 'after-vowel', mark: '\u0301' } });
459
+ * // 'mélek'
460
+ * ```
461
+ */
462
+ STRESS_MARKER?: {
463
+ location: "before-syllable" | "after-syllable" | "before-vowel" | "after-vowel";
464
+ mark: string;
465
+ };
466
+ longVowels: SylOpts["longVowels"];
467
+ qametsQatan: SylOpts["qametsQatan"];
468
+ sqnmlvy: SylOpts["sqnmlvy"];
469
+ wawShureq: SylOpts["wawShureq"];
470
+ article: SylOpts["article"];
471
+ allowNoNiqqud: SylOpts["allowNoNiqqud"];
472
+ constructor(schema: Schema);
473
+ }
474
+ export declare class SBL extends Schema {
475
+ constructor(schema: Partial<Schema>);
476
+ }