quran-meta
Version:
Library with meta data and functionality related to Holy Quran
2,264 lines (2,227 loc) • 55.1 kB
JavaScript
/*!
* Quran Meta library 3.2.1
*
* Released under the MIT license
*/
'use strict';
const meta = Object.freeze({
numAyahs: 6236,
numSurahs: 114,
numPages: 604,
numJuzs: 30,
numHizbs: 60,
numRubAlHizbs: 240,
numSajdas: 15,
numRukus: 556,
numManzils: 7
});
const SurahList = [
[-1, -1, -1, -1, "", false, -1],
[1, 7, 5, 1, "\u0627\u0644\u0641\u0627\u062A\u062D\u0629", true, 1],
[8, 286, 87, 40, "\u0627\u0644\u0628\u0642\u0631\u0629", false, 2],
[294, 200, 89, 20, "\u0622\u0644 \u0639\u0645\u0631\u0627\u0646", false, 50],
[494, 176, 92, 24, "\u0627\u0644\u0646\u0633\u0627\u0621", false, 77],
[670, 120, 112, 16, "\u0627\u0644\u0645\u0627\u0626\u062F\u0629", false, 107],
[790, 165, 55, 20, "\u0627\u0644\u0623\u0646\u0639\u0627\u0645", true, 128],
[955, 206, 39, 24, "\u0627\u0644\u0623\u0639\u0631\u0627\u0641", true, 151],
[1161, 75, 88, 10, "\u0627\u0644\u0623\u0646\u0641\u0627\u0644", false, 177],
[1236, 129, 113, 16, "\u0627\u0644\u062A\u0648\u0628\u0629", false, 187],
[1365, 109, 51, 11, "\u064A\u0648\u0646\u0633", true, 208],
[1474, 123, 52, 10, "\u0647\u0648\u062F", true, 222],
[1597, 111, 53, 12, "\u064A\u0648\u0633\u0641", true, 236],
[1708, 43, 96, 6, "\u0627\u0644\u0631\u0639\u062F", false, 249],
[1751, 52, 72, 7, "\u0627\u0628\u0631\u0627\u0647\u064A\u0645", true, 256],
[1803, 99, 54, 6, "\u0627\u0644\u062D\u062C\u0631", true, 262],
[1902, 128, 70, 16, "\u0627\u0644\u0646\u062D\u0644", true, 268],
[2030, 111, 50, 12, "\u0627\u0644\u0625\u0633\u0631\u0627\u0621", true, 282],
[2141, 110, 69, 12, "\u0627\u0644\u0643\u0647\u0641", true, 294],
[2251, 98, 44, 6, "\u0645\u0631\u064A\u0645", true, 305],
[2349, 135, 45, 8, "\u0637\u0647", true, 313],
[2484, 112, 73, 7, "\u0627\u0644\u0623\u0646\u0628\u064A\u0627\u0621", true, 322],
[2596, 78, 103, 10, "\u0627\u0644\u062D\u062C", false, 332],
[2674, 118, 74, 6, "\u0627\u0644\u0645\u0624\u0645\u0646\u0648\u0646", true, 342],
[2792, 64, 102, 9, "\u0627\u0644\u0646\u0648\u0631", false, 350],
[2856, 77, 42, 6, "\u0627\u0644\u0641\u0631\u0642\u0627\u0646", true, 360],
[2933, 227, 47, 11, "\u0627\u0644\u0634\u0639\u0631\u0627\u0621", true, 367],
[3160, 93, 48, 7, "\u0627\u0644\u0646\u0645\u0644", true, 377],
[3253, 88, 49, 8, "\u0627\u0644\u0642\u0635\u0635", true, 386],
[3341, 69, 85, 7, "\u0627\u0644\u0639\u0646\u0643\u0628\u0648\u062A", true, 397],
[3410, 60, 84, 6, "\u0627\u0644\u0631\u0648\u0645", true, 405],
[3470, 34, 57, 3, "\u0644\u0642\u0645\u0627\u0646", true, 411],
[3504, 30, 75, 3, "\u0627\u0644\u0633\u062C\u062F\u0629", true, 415],
[3534, 73, 90, 9, "\u0627\u0644\u0623\u062D\u0632\u0627\u0628", false, 418],
[3607, 54, 58, 6, "\u0633\u0628\u0625", true, 428],
[3661, 45, 43, 5, "\u0641\u0627\u0637\u0631", true, 435],
[3706, 83, 41, 5, "\u064A\u0633", true, 441],
[3789, 182, 56, 5, "\u0627\u0644\u0635\u0627\u0641\u0627\u062A", true, 446],
[3971, 88, 38, 5, "\u0635", true, 453],
[4059, 75, 59, 8, "\u0627\u0644\u0632\u0645\u0631", true, 459],
[4134, 85, 60, 9, "\u063A\u0627\u0641\u0631", true, 468],
[4219, 54, 61, 6, "\u0641\u0635\u0644\u062A", true, 477],
[4273, 53, 62, 5, "\u0627\u0644\u0634\u0648\u0631\u0649", true, 483],
[4326, 89, 63, 7, "\u0627\u0644\u0632\u062E\u0631\u0641", true, 490],
[4415, 59, 64, 3, "\u0627\u0644\u062F\u062E\u0627\u0646", true, 496],
[4474, 37, 65, 4, "\u0627\u0644\u062C\u0627\u062B\u064A\u0629", true, 499],
[4511, 35, 66, 4, "\u0627\u0644\u0623\u062D\u0642\u0627\u0641", true, 503],
[4546, 38, 95, 4, "\u0645\u062D\u0645\u062F", false, 507],
[4584, 29, 111, 4, "\u0627\u0644\u0641\u062A\u062D", false, 511],
[4613, 18, 106, 2, "\u0627\u0644\u062D\u062C\u0631\u0627\u062A", false, 516],
[4631, 45, 34, 3, "\u0642", true, 518],
[4676, 60, 67, 3, "\u0627\u0644\u0630\u0627\u0631\u064A\u0627\u062A", true, 521],
[4736, 49, 76, 2, "\u0627\u0644\u0637\u0648\u0631", true, 524],
[4785, 62, 23, 3, "\u0627\u0644\u0646\u062C\u0645", true, 526],
[4847, 55, 37, 3, "\u0627\u0644\u0642\u0645\u0631", true, 529],
[4902, 78, 97, 3, "\u0627\u0644\u0631\u062D\u0645\u0646", false, 532],
[4980, 96, 46, 3, "\u0627\u0644\u0648\u0627\u0642\u0639\u0629", true, 535],
[5076, 29, 94, 4, "\u0627\u0644\u062D\u062F\u064A\u062F", false, 538],
[5105, 22, 105, 3, "\u0627\u0644\u0645\u062C\u0627\u062F\u0644\u0629", false, 542],
[5127, 24, 101, 3, "\u0627\u0644\u062D\u0634\u0631", false, 546],
[5151, 13, 91, 2, "\u0627\u0644\u0645\u0645\u062A\u062D\u0646\u0629", false, 549],
[5164, 14, 109, 2, "\u0627\u0644\u0635\u0641", false, 552],
[5178, 11, 110, 2, "\u0627\u0644\u062C\u0645\u0639\u0629", false, 553],
[5189, 11, 104, 2, "\u0627\u0644\u0645\u0646\u0627\u0641\u0642\u0648\u0646", false, 555],
[5200, 18, 108, 2, "\u0627\u0644\u062A\u063A\u0627\u0628\u0646", false, 556],
[5218, 12, 99, 2, "\u0627\u0644\u0637\u0644\u0627\u0642", false, 558],
[5230, 12, 107, 2, "\u0627\u0644\u062A\u062D\u0631\u064A\u0645", false, 560],
[5242, 30, 77, 2, "\u0627\u0644\u0645\u0644\u0643", true, 562],
[5272, 52, 2, 2, "\u0627\u0644\u0642\u0644\u0645", true, 565],
[5324, 52, 78, 2, "\u0627\u0644\u062D\u0627\u0642\u0629", true, 567],
[5376, 44, 79, 2, "\u0627\u0644\u0645\u0639\u0627\u0631\u062C", true, 569],
[5420, 28, 71, 2, "\u0646\u0648\u062D", true, 571],
[5448, 28, 40, 2, "\u0627\u0644\u062C\u0646", true, 572],
[5476, 20, 3, 2, "\u0627\u0644\u0645\u0632\u0645\u0644", true, 574],
[5496, 56, 4, 2, "\u0627\u0644\u0645\u062F\u062B\u0631", true, 576],
[5552, 40, 31, 2, "\u0627\u0644\u0642\u064A\u0627\u0645\u0629", true, 578],
[5592, 31, 98, 2, "\u0627\u0644\u0627\u0646\u0633\u0627\u0646", false, 579],
[5623, 50, 33, 2, "\u0627\u0644\u0645\u0631\u0633\u0644\u0627\u062A", true, 581],
[5673, 40, 80, 2, "\u0627\u0644\u0646\u0628\u0625", true, 582],
[5713, 46, 81, 2, "\u0627\u0644\u0646\u0627\u0632\u0639\u0627\u062A", true, 584],
[5759, 42, 24, 1, "\u0639\u0628\u0633", true, 585],
[5801, 29, 7, 1, "\u0627\u0644\u062A\u0643\u0648\u064A\u0631", true, 586],
[5830, 19, 82, 1, "\u0627\u0644\u0625\u0646\u0641\u0637\u0627\u0631", true, 587],
[5849, 36, 86, 1, "\u0627\u0644\u0645\u0637\u0641\u0641\u064A\u0646", true, 588],
[5885, 25, 83, 1, "\u0627\u0644\u0625\u0646\u0634\u0642\u0627\u0642", true, 589],
[5910, 22, 27, 1, "\u0627\u0644\u0628\u0631\u0648\u062C", true, 590],
[5932, 17, 36, 1, "\u0627\u0644\u0637\u0627\u0631\u0642", true, 591],
[5949, 19, 8, 1, "\u0627\u0644\u0623\u0639\u0644\u0649", true, 592],
[5968, 26, 68, 1, "\u0627\u0644\u063A\u0627\u0634\u064A\u0629", true, 592],
[5994, 30, 10, 1, "\u0627\u0644\u0641\u062C\u0631", true, 593],
[6024, 20, 35, 1, "\u0627\u0644\u0628\u0644\u062F", true, 594],
[6044, 15, 26, 1, "\u0627\u0644\u0634\u0645\u0633", true, 595],
[6059, 21, 9, 1, "\u0627\u0644\u0644\u064A\u0644", true, 596],
[6080, 11, 11, 1, "\u0627\u0644\u0636\u062D\u0649", true, 596],
[6091, 8, 12, 1, "\u0627\u0644\u0634\u0631\u062D", true, 596],
[6099, 8, 28, 1, "\u0627\u0644\u062A\u064A\u0646", true, 597],
[6107, 19, 1, 1, "\u0627\u0644\u0639\u0644\u0642", true, 597],
[6126, 5, 25, 1, "\u0627\u0644\u0642\u062F\u0631", true, 598],
[6131, 8, 100, 1, "\u0627\u0644\u0628\u064A\u0646\u0629", false, 599],
[6139, 8, 93, 1, "\u0627\u0644\u0632\u0644\u0632\u0644\u0629", false, 599],
[6147, 11, 14, 1, "\u0627\u0644\u0639\u0627\u062F\u064A\u0627\u062A", true, 600],
[6158, 11, 30, 1, "\u0627\u0644\u0642\u0627\u0631\u0639\u0629", true, 600],
[6169, 8, 16, 1, "\u0627\u0644\u062A\u0643\u0627\u062B\u0631", true, 600],
[6177, 3, 13, 1, "\u0627\u0644\u0639\u0635\u0631", true, 601],
[6180, 9, 32, 1, "\u0627\u0644\u0647\u0645\u0632\u0629", true, 601],
[6189, 5, 19, 1, "\u0627\u0644\u0641\u064A\u0644", true, 601],
[6194, 4, 29, 1, "\u0642\u0631\u064A\u0634", true, 602],
[6198, 7, 17, 1, "\u0627\u0644\u0645\u0627\u0639\u0648\u0646", true, 602],
[6205, 3, 15, 1, "\u0627\u0644\u0643\u0648\u062B\u0631", true, 602],
[6208, 6, 18, 1, "\u0627\u0644\u0643\u0627\u0641\u0631\u0648\u0646", true, 603],
[6214, 3, 114, 1, "\u0627\u0644\u0646\u0635\u0631", false, 603],
[6217, 5, 6, 1, "\u0627\u0644\u0645\u0633\u062F", true, 603],
[6222, 4, 22, 1, "\u0627\u0644\u0625\u062E\u0644\u0627\u0635", true, 604],
[6226, 5, 20, 1, "\u0627\u0644\u0641\u0644\u0642", true, 604],
[6231, 6, 21, 1, "\u0627\u0644\u0646\u0627\u0633", true, 604],
[6237, 0, -1, -1, "", false, -1]
];
function getSurahMeta(surah) {
checkValidSurah(surah);
return SurahList[surah];
}
function getAyahCountInSurah(surah) {
return getSurahMeta(surah)[1];
}
function checkValidSurah(surah, checkOnly = false) {
if (typeof surah !== "number" || !Number.isInteger(surah)) {
if (checkOnly) return false;
throw new TypeError("Ayah ID must be an integer");
}
if (surah < 1 || surah > meta.numSurahs) {
if (checkOnly) return false;
throw new RangeError("Surah must be between 1 and " + meta.numSurahs);
}
return true;
}
function checkValidSurahAyah(surah, ayah, checkOnly = false) {
if (!checkValidSurah(surah, checkOnly)) return false;
if (ayah < 1 || ayah > getAyahCountInSurah(surah)) {
if (checkOnly) return false;
throw new RangeError("Ayah must be between 1 and " + getAyahCountInSurah(surah));
}
return true;
}
function checkValidAyahId(ayahId, checkOnly = false) {
if (typeof ayahId !== "number" || !Number.isInteger(ayahId)) {
if (checkOnly) return false;
throw new TypeError("Ayah ID must be an integer");
}
if (ayahId < 1 || ayahId > meta.numAyahs) {
if (checkOnly) return false;
throw new RangeError("Ayah ID must be between 1 and " + meta.numAyahs);
}
return true;
}
function ayahStringSplitter(str) {
const [surahStr, ayahsStr] = str.trim().split(":");
const surah = parseInt(surahStr, 10);
if (isNaN(surah)) {
throw new Error("Error in surah format " + str);
}
if (!ayahsStr) {
throw new Error("Error in data " + str);
}
let ayahs;
if (ayahsStr.includes("-")) {
ayahs = ayahsStr.split("-").map((a) => {
const ayah = parseInt(a, 10);
if (isNaN(ayah) || ayah === 0) {
throw new Error("Error in ayah " + a);
}
return ayah;
});
if (ayahs[0] > ayahs[1]) throw new Error("Error in ayah range " + str);
} else {
ayahs = parseInt(ayahsStr, 10);
if (isNaN(ayahs) || ayahs === 0) {
throw new Error("Error in data " + str);
}
checkValidSurahAyah(surah, ayahs);
}
return [surah, ayahs];
}
function findAyahIdBySurah(surah, ayah) {
checkValidSurahAyah(surah, ayah);
const [startAyahId] = getSurahMeta(surah);
return startAyahId + ayah - 1;
}
const JuzList = [
0,
1,
149,
260,
386,
517,
641,
751,
900,
1042,
1201,
1328,
1479,
1649,
1803,
2030,
2215,
2484,
2674,
2876,
3215,
3386,
3564,
3733,
4090,
4265,
4511,
4706,
5105,
5242,
5673,
6237
];
function findJuzByAyahId(ayahId) {
checkValidAyahId(ayahId);
return JuzList.findIndex((x) => x > ayahId) - 1;
}
function findJuz(surah, ayah = 1, ayahMode = false) {
const ayahId = ayahMode ? ayah : checkValidSurahAyah(surah, ayah) && findAyahIdBySurah(surah, ayah);
return findJuzByAyahId(ayahId);
}
function findSurahByAyahId(ayaId) {
checkValidAyahId(ayaId);
const suraNum = SurahList.findIndex((x) => x[0] > ayaId) - 1;
return [suraNum, ayaId - SurahList[suraNum][0] + 1];
}
function findJuzAndShift(surah, ayah, ayahMode = false) {
const ayahId = ayahMode ? checkValidAyahId(ayah) && ayah : checkValidSurah(surah) && findAyahIdBySurah(surah, ayah);
const juz = findJuzByAyahId(ayahId);
const leftAyahId = JuzList[juz];
if (ayahMode) [surah] = findSurahByAyahId(ayahId);
const [surahStartAyahId] = SurahList[surah];
return {
juz,
ayahsBetweenJuzSurah: surahStartAyahId - leftAyahId,
leftAyahId
};
}
function findJuzMetaBySurah(surah, ayah = 1) {
const {
juz: leftjuz,
ayahsBetweenJuzSurah,
leftAyahId
} = findJuzAndShift(surah, ayah);
let rightJuz = leftjuz;
while (rightJuz < meta.numJuzs && findSurahByAyahId(JuzList[rightJuz + 1])[0] === surah) {
rightJuz++;
}
return {
leftjuz,
ayahsBetweenJuzSurah,
rightJuz,
leftAyahId,
rightAyahId: JuzList[rightJuz + 1]
};
}
const PageList = [
0,
1,
8,
13,
24,
32,
37,
45,
56,
65,
69,
77,
84,
91,
96,
101,
109,
113,
120,
127,
134,
142,
149,
153,
161,
171,
177,
184,
189,
194,
198,
204,
210,
218,
223,
227,
232,
238,
241,
245,
253,
256,
260,
264,
267,
272,
277,
282,
289,
290,
294,
303,
309,
316,
323,
331,
339,
346,
355,
364,
371,
377,
385,
394,
402,
409,
415,
426,
434,
442,
447,
451,
459,
467,
474,
480,
488,
494,
500,
505,
508,
513,
517,
520,
527,
531,
538,
545,
553,
559,
568,
573,
580,
585,
588,
595,
599,
607,
615,
621,
628,
634,
641,
648,
656,
664,
669,
672,
675,
679,
683,
687,
693,
701,
706,
711,
715,
720,
727,
734,
740,
746,
752,
759,
765,
773,
778,
783,
790,
798,
808,
817,
825,
834,
842,
849,
858,
863,
871,
880,
884,
891,
900,
908,
914,
921,
927,
932,
936,
941,
947,
955,
966,
977,
985,
992,
998,
1006,
1012,
1022,
1028,
1036,
1042,
1050,
1059,
1075,
1085,
1092,
1098,
1104,
1110,
1114,
1118,
1125,
1133,
1142,
1150,
1161,
1169,
1177,
1186,
1194,
1201,
1206,
1213,
1222,
1230,
1236,
1242,
1249,
1256,
1262,
1267,
1272,
1276,
1283,
1290,
1297,
1304,
1308,
1315,
1322,
1329,
1335,
1342,
1347,
1353,
1358,
1365,
1371,
1379,
1385,
1390,
1398,
1407,
1418,
1426,
1435,
1443,
1453,
1462,
1471,
1479,
1486,
1493,
1502,
1511,
1519,
1527,
1536,
1545,
1555,
1562,
1571,
1582,
1591,
1601,
1611,
1619,
1627,
1634,
1640,
1649,
1660,
1666,
1675,
1683,
1692,
1700,
1708,
1713,
1721,
1726,
1736,
1742,
1750,
1756,
1761,
1769,
1775,
1784,
1793,
1803,
1818,
1834,
1854,
1873,
1893,
1908,
1916,
1928,
1936,
1944,
1956,
1966,
1974,
1981,
1989,
1995,
2004,
2012,
2020,
2030,
2037,
2047,
2057,
2068,
2079,
2088,
2096,
2105,
2116,
2126,
2134,
2145,
2156,
2161,
2168,
2175,
2186,
2194,
2202,
2215,
2224,
2238,
2251,
2262,
2276,
2289,
2302,
2315,
2327,
2346,
2361,
2386,
2400,
2413,
2425,
2436,
2447,
2462,
2474,
2484,
2494,
2508,
2519,
2528,
2541,
2556,
2565,
2574,
2585,
2596,
2601,
2611,
2619,
2626,
2634,
2642,
2651,
2660,
2668,
2674,
2691,
2701,
2716,
2733,
2748,
2763,
2778,
2792,
2802,
2812,
2819,
2823,
2828,
2835,
2845,
2850,
2853,
2858,
2867,
2876,
2888,
2899,
2911,
2923,
2933,
2952,
2972,
2993,
3016,
3044,
3069,
3092,
3116,
3139,
3160,
3173,
3182,
3195,
3204,
3215,
3223,
3236,
3248,
3258,
3266,
3274,
3281,
3288,
3296,
3303,
3312,
3323,
3330,
3337,
3347,
3355,
3364,
3371,
3379,
3386,
3393,
3404,
3415,
3425,
3434,
3442,
3451,
3460,
3470,
3481,
3489,
3498,
3504,
3515,
3524,
3534,
3540,
3549,
3556,
3564,
3569,
3577,
3584,
3588,
3596,
3607,
3614,
3621,
3629,
3638,
3646,
3655,
3664,
3672,
3679,
3691,
3699,
3705,
3718,
3733,
3746,
3760,
3776,
3789,
3813,
3840,
3865,
3891,
3915,
3942,
3971,
3987,
3997,
4013,
4032,
4054,
4064,
4069,
4080,
4090,
4099,
4106,
4115,
4126,
4133,
4141,
4150,
4159,
4167,
4174,
4183,
4192,
4200,
4211,
4219,
4230,
4239,
4248,
4257,
4265,
4273,
4283,
4288,
4295,
4304,
4317,
4324,
4336,
4348,
4359,
4373,
4386,
4399,
4415,
4433,
4454,
4474,
4487,
4496,
4506,
4516,
4525,
4531,
4539,
4546,
4557,
4565,
4575,
4584,
4593,
4599,
4607,
4612,
4617,
4624,
4631,
4646,
4666,
4682,
4706,
4727,
4750,
4767,
4785,
4811,
4829,
4853,
4874,
4896,
4918,
4942,
4969,
4996,
5030,
5056,
5079,
5087,
5094,
5100,
5105,
5111,
5116,
5126,
5130,
5136,
5143,
5151,
5156,
5162,
5169,
5178,
5186,
5193,
5200,
5209,
5218,
5223,
5230,
5237,
5242,
5254,
5268,
5287,
5314,
5332,
5358,
5386,
5415,
5430,
5448,
5461,
5476,
5495,
5513,
5543,
5571,
5597,
5617,
5642,
5673,
5703,
5728,
5759,
5801,
5830,
5855,
5883,
5910,
5932,
5964,
5994,
6017,
6044,
6073,
6099,
6126,
6138,
6156,
6177,
6194,
6208,
6222,
6237
];
function findPage(surah, ayah, ayahMode = false) {
const ayahId = ayahMode ? checkValidAyahId(ayah) && ayah : checkValidSurah(surah) && findAyahIdBySurah(surah, ayah);
return PageList.findIndex((x) => x > ayahId) - 1;
}
function findRangeAroundAyah(surah, ayah, mode, ayahMode = false) {
const ayahId = ayahMode ? ayah : checkValidSurah(surah) && findAyahIdBySurah(surah, ayah);
switch (mode) {
case "juz": {
const juz = findJuzByAyahId(ayahId);
return [JuzList[juz], JuzList[juz + 1] - 1];
}
case "surah": {
return [SurahList[surah][0], SurahList[surah + 1][0] - 1];
}
case "ayah": {
return [ayahId, ayahId];
}
case "page": {
const page = findPage(-1, ayahId, true);
return [PageList[page], PageList[page + 1] - 1];
}
case "all":
default:
return [1, meta.numAyahs];
}
}
const HizbQuarterList = [
0,
1,
33,
51,
67,
82,
99,
113,
131,
149,
165,
184,
196,
210,
226,
240,
250,
260,
270,
279,
290,
308,
326,
345,
368,
386,
406,
426,
446,
464,
479,
494,
505,
517,
529,
551,
567,
581,
593,
607,
628,
641,
656,
670,
681,
696,
710,
720,
736,
751,
766,
778,
802,
825,
848,
863,
884,
900,
916,
930,
940,
955,
985,
1001,
1019,
1042,
1071,
1096,
1110,
1125,
1143,
1161,
1182,
1201,
1221,
1236,
1254,
1269,
1281,
1295,
1310,
1328,
1346,
1357,
1375,
1390,
1417,
1435,
1454,
1479,
1497,
1514,
1534,
1557,
1581,
1603,
1626,
1649,
1673,
1697,
1712,
1726,
1742,
1760,
1778,
1803,
1852,
1902,
1931,
1952,
1976,
1991,
2012,
2030,
2052,
2079,
2099,
2128,
2157,
2172,
2191,
2215,
2239,
2272,
2309,
2349,
2403,
2431,
2459,
2484,
2512,
2534,
2566,
2596,
2614,
2633,
2655,
2674,
2709,
2748,
2792,
2812,
2826,
2844,
2856,
2876,
2908,
2933,
2984,
3043,
3113,
3160,
3186,
3215,
3241,
3264,
3281,
3303,
3328,
3341,
3366,
3386,
3410,
3440,
3463,
3491,
3514,
3534,
3551,
3564,
3584,
3593,
3616,
3630,
3652,
3675,
3701,
3733,
3765,
3810,
3871,
3933,
3991,
4022,
4066,
4090,
4111,
4134,
4154,
4174,
4199,
4227,
4243,
4265,
4285,
4299,
4323,
4349,
4382,
4431,
4485,
4511,
4531,
4555,
4578,
4601,
4613,
4626,
4657,
4706,
4759,
4810,
4855,
4902,
4980,
5054,
5091,
5105,
5118,
5137,
5157,
5178,
5192,
5218,
5230,
5242,
5272,
5324,
5394,
5448,
5495,
5552,
5610,
5673,
5759,
5830,
5885,
5949,
6024,
6091,
6155,
6237
];
function findRubAlHizbByAyahId(ayahId) {
checkValidAyahId(ayahId);
return HizbQuarterList.findIndex((x) => x > ayahId) - 1;
}
function getRubAlHizbMeta(quarterIndex) {
const juz = Math.floor((quarterIndex - 1) / 8) + 1;
const hizbIndex = Math.floor((quarterIndex - 1) / 4) + 1;
const juzPart = quarterIndex % 8 || 8;
return { juz, hizbId: hizbIndex, juzPart, rubAlHizbId: quarterIndex };
}
function getRubAlHizbMetaByAyahId(ayahId) {
checkValidAyahId(ayahId);
const quarterIndex = findRubAlHizbByAyahId(ayahId);
return getRubAlHizbMeta(quarterIndex);
}
function findRubAlHizb(surah, ayah = 1, ayahMode = false) {
const ayahId = ayahMode ? ayah : checkValidSurah(surah) && findAyahIdBySurah(surah, ayah);
return getRubAlHizbMetaByAyahId(ayahId);
}
const SajdaList = [
// [ayahId, type]
[1160, "recommended"],
[1722, "recommended"],
[1951, "recommended"],
[2138, "recommended"],
[2308, "recommended"],
[2613, "recommended"],
[2672, "recommended"],
[2915, "recommended"],
[3185, "recommended"],
[3518, "obligatory"],
[3994, "recommended"],
[4256, "obligatory"],
[4846, "obligatory"],
[5905, "recommended"],
[6125, "obligatory"]
];
function getAyahMeta(ayahId) {
if (ayahId < 1 || ayahId > meta.numAyahs)
throw new RangeError("ayahId must be between 1 and " + meta.numAyahs);
const quarterData = getRubAlHizbMetaByAyahId(ayahId);
const [surah, ayah] = findSurahByAyahId(ayahId);
const page = findPage(-1, ayahId, true);
const isSajdahAyah = SajdaList.some(([sajdaAyahId]) => sajdaAyahId === ayahId);
const isStartOfSurah = SurahList[surah][0] === ayahId;
const isStartOfPage = PageList[page] === ayahId;
const isStartOfJuz = JuzList[quarterData.juz] === ayahId;
const isStartOfQuarter = HizbQuarterList[quarterData.rubAlHizbId] === ayahId;
const isEndOfSurah = SurahList[surah + 1][0] - 1 === ayahId;
const isEndOfPage = PageList[page + 1] - 1 === ayahId;
const isEndOfJuz = JuzList[quarterData.juz + 1] - 1 === ayahId;
const isEndOfQuarter = HizbQuarterList[quarterData.rubAlHizbId + 1] - 1 === ayahId;
return {
...quarterData,
surah,
ayah,
isStartOfQuarter,
isEndOfQuarter,
isSajdahAyah,
isStartOfPage,
isEndOfPage,
isStartOfJuz,
isEndOfJuz,
isStartOfSurah,
isEndOfSurah
};
}
const ManzilList = [
0,
1,
670,
1365,
2030,
2933,
3789,
4631,
6237
];
const RukuList = [
0,
1,
8,
15,
28,
37,
47,
54,
67,
69,
79,
90,
94,
104,
111,
120,
129,
137,
149,
155,
160,
171,
175,
184,
190,
196,
204,
218,
224,
229,
236,
239,
243,
250,
256,
261,
265,
268,
274,
281,
289,
291,
294,
303,
314,
324,
335,
348,
357,
365,
374,
385,
395,
403,
414,
423,
437,
442,
449,
465,
474,
483,
494,
504,
508,
516,
519,
527,
536,
544,
553,
564,
570,
581,
585,
590,
594,
598,
606,
609,
620,
628,
635,
646,
656,
665,
670,
675,
681,
689,
696,
704,
713,
720,
726,
736,
747,
756,
763,
770,
778,
785,
790,
800,
810,
820,
831,
840,
845,
850,
860,
872,
880,
884,
890,
900,
911,
919,
930,
934,
940,
944,
955,
965,
980,
986,
994,
1002,
1008,
1013,
1019,
1027,
1039,
1048,
1054,
1063,
1081,
1084,
1096,
1102,
1106,
1112,
1117,
1126,
1136,
1143,
1161,
1171,
1180,
1189,
1198,
1205,
1209,
1219,
1225,
1230,
1236,
1242,
1252,
1260,
1265,
1273,
1278,
1295,
1302,
1308,
1316,
1325,
1335,
1346,
1354,
1358,
1365,
1375,
1385,
1395,
1405,
1418,
1425,
1435,
1447,
1457,
1468,
1474,
1482,
1498,
1509,
1523,
1534,
1542,
1557,
1569,
1583,
1597,
1603,
1617,
1626,
1632,
1639,
1646,
1654,
1665,
1676,
1690,
1701,
1708,
1715,
1726,
1734,
1739,
1745,
1751,
1757,
1763,
1772,
1778,
1785,
1792,
1803,
1818,
1828,
1847,
1863,
1882,
1902,
1911,
1923,
1927,
1936,
1942,
1952,
1962,
1967,
1972,
1978,
1985,
1991,
2002,
2012,
2021,
2030,
2040,
2052,
2060,
2070,
2082,
2090,
2100,
2107,
2114,
2123,
2130,
2141,
2153,
2158,
2163,
2172,
2185,
2190,
2194,
2200,
2211,
2223,
2242,
2251,
2266,
2291,
2301,
2316,
2333,
2349,
2373,
2403,
2425,
2438,
2453,
2464,
2477,
2484,
2494,
2513,
2525,
2534,
2559,
2577,
2596,
2606,
2618,
2621,
2629,
2634,
2644,
2653,
2660,
2668,
2674,
2696,
2706,
2724,
2751,
2766,
2792,
2802,
2812,
2818,
2826,
2832,
2842,
2849,
2853,
2856,
2865,
2876,
2890,
2900,
2916,
2933,
2942,
2966,
2985,
3002,
3037,
3055,
3073,
3092,
3108,
3124,
3160,
3174,
3191,
3204,
3218,
3226,
3242,
3253,
3266,
3274,
3281,
3295,
3303,
3313,
3328,
3341,
3354,
3363,
3371,
3385,
3392,
3404,
3410,
3420,
3429,
3437,
3450,
3463,
3470,
3481,
3489,
3504,
3515,
3526,
3534,
3542,
3554,
3561,
3568,
3574,
3586,
3592,
3602,
3607,
3616,
3628,
3637,
3643,
3652,
3661,
3668,
3675,
3687,
3698,
3706,
3718,
3738,
3756,
3773,
3789,
3810,
3863,
3902,
3927,
3971,
3985,
3997,
4011,
4035,
4059,
4068,
4080,
4090,
4100,
4111,
4122,
4129,
4134,
4143,
4154,
4161,
4171,
4184,
4194,
4202,
4212,
4219,
4227,
4237,
4244,
4251,
4263,
4273,
4282,
4292,
4302,
4316,
4326,
4341,
4351,
4361,
4371,
4382,
4393,
4415,
4444,
4457,
4474,
4485,
4495,
4500,
4511,
4521,
4531,
4537,
4546,
4557,
4565,
4574,
4584,
4594,
4601,
4610,
4613,
4623,
4631,
4646,
4660,
4676,
4699,
4722,
4736,
4764,
4785,
4810,
4817,
4847,
4869,
4887,
4902,
4927,
4947,
4980,
5018,
5054,
5076,
5086,
5095,
5101,
5105,
5111,
5118,
5127,
5137,
5144,
5151,
5157,
5164,
5173,
5178,
5186,
5189,
5197,
5200,
5210,
5218,
5225,
5230,
5237,
5242,
5256,
5272,
5305,
5324,
5361,
5376,
5411,
5420,
5440,
5448,
5467,
5476,
5495,
5496,
5527,
5552,
5582,
5592,
5614,
5623,
5663,
5673,
5703,
5713,
5739,
5759,
5801,
5830,
5849,
5885,
5910,
5932,
5949,
5968,
5994,
6024,
6044,
6059,
6080,
6091,
6099,
6107,
6126,
6131,
6139,
6147,
6158,
6169,
6177,
6180,
6189,
6194,
6198,
6205,
6208,
6214,
6217,
6222,
6226,
6231,
6237
];
const parts = {
surah: SurahList,
juz: JuzList,
rubAlHizb: HizbQuarterList,
page: PageList,
manzil: ManzilList,
ruku: RukuList
};
function toPartFormatter(type) {
return type === "surah" ? ([startAyahId, ayahCount]) => ({
startAyahId,
ayahCount
}) : (ayahId, index) => {
const ayahCount = parts[type][index + 2] - ayahId;
return {
startAyahId: ayahId,
ayahCount
};
};
}
function getList(type) {
const list = parts[type];
return list.slice(1, list.length - 1).map(toPartFormatter(type));
}
function getPageMeta(pageNum) {
if (pageNum < 1 || pageNum > meta.numPages)
throw new RangeError("pagenum must be between 1 and " + meta.numPages);
const [curPage, nextPage] = [
PageList[pageNum],
PageList[pageNum + 1]
];
return {
pageNum,
first: findSurahByAyahId(curPage),
last: [...findSurahByAyahId(nextPage - 1)]
};
}
function binarySearch(ar, el, compare_fn = (a, b) => a - b) {
let m = 0;
let n = ar.length - 1;
while (m <= n) {
const k = n + m >> 1;
const cmp = compare_fn(el, ar[k]);
if (cmp > 0) {
m = k + 1;
} else if (cmp < 0) {
n = k - 1;
} else {
return k;
}
}
return -m - 1;
}
function isAyahJuzFirst(surah, ayah, ayahMode = false) {
const ayahId = ayahMode ? checkValidAyahId(ayah) && ayah : checkValidSurah(surah) && findAyahIdBySurah(surah, ayah);
return binarySearch(JuzList, ayahId);
}
function isAyahPageFirst(surah, ayah, ayahMode = false) {
const ayahId = ayahMode ? checkValidAyahId(ayah) && ayah : checkValidSurah(surah) && findAyahIdBySurah(surah, ayah);
return binarySearch(PageList, ayahId);
}
function nextAyah(surah, ayah) {
if (surah < 1 || surah > meta.numSurahs)
throw new RangeError("Surah must be between 1 and " + meta.numSurahs);
const ayahId = findAyahIdBySurah(surah, ayah);
return findSurahByAyahId(ayahId == meta.numAyahs ? 1 : ayahId + 1);
}
function prevAyah(surah, ayah) {
checkValidSurah(surah);
const ayahId = findAyahIdBySurah(surah, ayah);
return findSurahByAyahId(ayahId == 1 ? meta.numAyahs : ayahId - 1);
}
const surahNamesAz = [
[],
["\u0259l-Fatih\u0259", "Kitab\u0131 a\xE7an "],
["\u0259l-B\u0259q\u0259r\u0259", "\u0130n\u0259k "],
["Ali-\u0130mran", "\u0130mran ail\u0259si "],
["\u0259n-Nisa", "Qad\u0131nlar "],
["\u0259l-Maid\u0259", "S\xFCfr\u0259 "],
["\u0259l-\u018Fnam", "Davar "],
["\u0259l-\u018Fraf", "S\u0259dd "],
["\u0259l-\u018Fnfal", "Q\u0259nim\u0259t "],
["\u0259t-Tovb\u0259", "T\xF6vb\u0259 "],
["Yunus", "Yunus"],
["Hud", "Hud"],
["Yusuf", "Yusif"],
["\u0259r-R\u0259d", "G\xF6y gurultusu "],
["\u0130brahim", "\u0130brahim"],
["\u0259l-Hicr", "Da\u015Fl\u0131 sah\u0259 "],
["\u0259n-N\u0259hl", "Bal ar\u0131s\u0131 "],
["\u0259l-\u0130sra", "\u0130srail o\u011Fullar\u0131 "],
["\u0259l-K\u0259hf", "Ma\u011Fara "],
["M\u0259ry\u0259m", "M\u0259ry\u0259m "],
["Ta ha", "Taha"],
["\u0259l-\u018Fnbiya", "Pey\u011F\u0259mb\u0259rl\u0259r "],
["\u0259l-H\u0259cc", "H\u0259cc "],
["\u0259l-Muminun", "M\xF6minl\u0259r "],
["\u0259n-Nur", "Nur "],
["\u0259l-Furqan", "F\u0259ql\u0259ndirm\u0259 "],
["\u0259\u015F-\u015Eu\u0259ra", "\u015Eairl\u0259r "],
["\u0259n-N\u0259ml", "Qar\u0131\u015Fqalar "],
["\u0259l-Q\u0259s\u0259s", "Hekay\u0259t "],
["\u0259l-\u018Fnk\u0259but", "H\xF6r\xFCm\xE7\u0259k "],
["\u0259r-Rum", "Rumlular "],
["Lo\u011Fman", "Lo\u011Fman"],
["\u0259s-S\u0259cd\u0259", "S\u0259cd\u0259 "],
["\u0259l-\u018Fhzab", "D\u0259st\u0259l\u0259r"],
["S\u0259ba", "S\u0259ba "],
["Fatir", "Yaradan "],
["Ya sin", "Yasin"],
["\u0259s-Saffat", "S\u0259f-S\u0259f duranlar "],
["Sad", "Sad"],
["\u0259z-Zum\u0259r", "Z\xFCmr\u0259l\u0259r "],
["\u011Eafir", "M\xF6min "],
["Fussil\u0259t", "M\xFCf\u0259ss\u0259l izah edilmi\u015F "],
["\u0259\u015F-\u015Eura", "\u015Eura "],
["\u0259z-Zuxruf", "Q\u0131z\u0131l b\u0259z\u0259kl\u0259r "],
["\u0259d-Duxan", "Duman "],
["\u0259l-Casiy\u0259", "Diz \xE7\xF6km\xFC\u015F camaat "],
["\u0259l-\u018Fhqaf", "Qumsal t\u0259p\u0259l\u0259r "],
["Muh\u0259mm\u0259d", "M\u0259h\u0259mm\u0259d"],
["\u0259l-F\u0259th", "F\u0259th "],
["\u0259l-Hucurat", "Otaqlar "],
["Qaf", "Qaf "],
["\u0259z-Zariyat", "Sovurub da\u011F\u0131dan k\xFCl\u0259kl\u0259r "],
["\u0259t-Tur", "Da\u011F "],
["\u0259n-N\u0259cm", "Ulduz "],
["\u0259l-Q\u0259m\u0259r", "Ay "],
["\u0259r-R\u0259hman", "R\u0259hmli olan "],
["\u0259l-Vaqi\u0259", "Vaqi\u0259 "],
["\u0259l-H\u0259did", "D\u0259mir "],
["\u0259l-Mucadil\u0259", "M\xFCcadil\u0259 "],
["\u0259l-H\u0259\u015Fr", "Toplanma "],
["\u0259l-Mumt\u0259h\u0259n\u0259", "\u0130mtahana \xE7\u0259kil\u0259n qad\u0131n "],
["\u0259s-Saff", "S\u0259f "],
["\u0259l-Cumu\u0259", "C\xFCm\u0259 "],
["\u0259l-Munafiqun", "M\xFCnafiql\u0259r "],
["\u0259t-T\u0259\u011Fabun", "Qar\u015F\u0131l\u0131ql\u0131 aldanma "],
["\u0259t-Talaq", "Bo\u015Fanma "],
["\u0259t-T\u0259hrim", "Qada\u011Fan "],
["\u0259l-Mulk", "M\xFClk "],
["\u0259l-Q\u0259l\u0259m", "Q\u0259l\u0259m "],
["\u0259l-Haqq\u0259", "Haqq olan qiyam\u0259t "],
["\u0259l-M\u0259aric", "D\u0259r\u0259c\u0259l\u0259r "],
["Nuh", "Nuh pey\u011F\u0259mb\u0259r "],
["\u0259l-Cinn", "Cinl\u0259r "],
["\u0259l-Muzz\u0259mmil", "\xD6rt\xFCn\xFCb b\xFCr\xFCn\u0259n "],
["\u0259l-Mudd\u0259ssir", "B\xFCr\xFCn\xFCb sar\u0131nan "],
["\u0259l-Qiyam\u0259", "Qiyam\u0259t "],
["\u0259l-\u0130nsan", "D\xF6vr "],
["\u0259l-Murs\u0259lat", "Bir-birinin ard\u0131nca g\xF6nd\u0259ril\u0259nl\u0259r "],
["\u0259n-N\u0259b\u0259", "B\xF6y\xFCk x\u0259b\u0259r "],
["\u0259n-Naziat", "Can alanlar "],
["\u018Fb\u0259s\u0259", "Qa\u015Fqaba\u011F\u0131n\u0131 t\xF6kd\xFC "],
["\u0259t-T\u0259kvir", "Sar\u0131nma "],
["\u0259l-\u0130nfitar", "Par\xE7alanma "],
["\u0259l-Mutaffifun", "\xC7\u0259kid\u0259 aldadanlar "],
["\u0259l-\u0130n\u015Fiqaq", "Yar\u0131lma "],
["\u0259l-Buruc", "B\xFCrcl\u0259r "],
["\u0259t-Tariq", "Gec\u0259 g\u0259l\u0259n "],
["\u0259l-\u018Fla", "\u018Fn uca "],
["\u0259l-\u011Ea\u015Fiy\u0259", "B\xFCr\xFCn\u0259n "],
["\u0259l-F\u0259cr", "Dan yeri "],
["\u0259l-B\u0259l\u0259d", "\u015E\u0259h\u0259r "],
["\u0259\u015F-\u015E\u0259ms", "G\xFCn\u0259\u015F "],
["\u0259l-Leyl", "Gec\u0259 "],
["\u0259d-Duha", "S\u0259h\u0259r"],
["\u0259\u015F-\u015E\u0259rh", "A\xE7\u0131lma"],
["\u0259t-Tin", "\u018Fncir "],
["\u0259l-\u018Fl\u0259q", "Laxtalanm\u0131\u015F qan "],
["\u0259l-Q\u0259dr", "Q\u0259dr gec\u0259si "],
["\u0259l-Beyyin\u0259", "A\xE7\u0131q-ayd\u0131n d\u0259lil "],
["\u0259z-Z\u0259lz\u0259l\u0259", "Z\u0259lz\u0259l\u0259 "],
["\u0259l-Adiyat", "Qa\xE7an atlar "],
["\u0259l-Qari\u0259", "Qiyam\u0259t "],
["\u0259t-T\u0259kasur", "\xC7oxluqla \xF6y\xFCnm\u0259 "],
["\u0259l-\u018Fsr", "Ax\u015Fam \xE7a\u011F\u0131 "],
["\u0259l-Hum\u0259z\u0259", "Qeyb\u0259t\xE7i "],
["\u0259l-Fil", "Fil "],
["Qurey\u015F", "Q\xFCrey\u015F"],
["\u0259l-Maun", "Z\u0259kat "],
["\u0259l-Kovs\u0259r", "K\xF6vs\u0259r "],
["\u0259l-Kafirun", "Kafirl\u0259r "],
["\u0259n-N\u0259sr", "K\xF6m\u0259k "],
["\u0259l-M\u0259s\u0259d", "Alov atas\u0131 "],
["\u0259l-\u0130xlas", "S\u0259mimiyy\u0259t"],
["\u0259l-F\u0259l\u0259q", "S\xFCbh \xE7a\u011Fl"],
["\u0259n-Nas", "\u0130nsanlar "]
];
const surahNamesEn = [
[],
["Al-Faatiha", "The Opening"],
["Al-Baqara", "The Cow"],
["Aal-i-Imraan", "The Family of Imraan"],
["An-Nisaa", "The Women"],
["Al-Maaida", "The Table"],
["Al-An'aam", "The Cattle"],
["Al-A'raaf", "The Heights"],
["Al-Anfaal", "The Spoils of War"],
["At-Tawba", "The Repentance"],
["Yunus", "Jonas"],
["Hud", "Hud"],
["Yusuf", "Joseph"],
["Ar-Ra'd", "The Thunder"],
["Ibrahim", "Abraham"],
["Al-Hijr", "The Rock"],
["An-Nahl", "The Bee"],
["Al-Israa", "The Night Journey"],
["Al-Kahf", "The Cave"],
["Maryam", "Mary"],
["Taa-Haa", "Taa-Haa"],
["Al-Anbiyaa", "The Prophets"],
["Al-Hajj", "The Pilgrimage"],
["Al-Muminoon", "The Believers"],
["An-Noor", "The Light"],
["Al-Furqaan", "The Criterion"],
["Ash-Shu'araa", "The Poets"],
["An-Naml", "The Ant"],
["Al-Qasas", "The Stories"],
["Al-Ankaboot", "The Spider"],
["Ar-Room", "The Romans"],
["Luqman", "Luqman"],
["As-Sajda", "The Prostration"],
["Al-Ahzaab", "The Clans"],
["Saba", "Sheba"],
["Faatir", "The Originator"],
["Yaseen", "Yaseen"],
["As-Saaffaat", "Those drawn up in Ranks"],
["Saad", "The letter Saad"],
["Az-Zumar", "The Groups"],
["Al-Ghaafir", "The Forgiver"],
["Fussilat", "Explained in detail"],
["Ash-Shura", "Consultation"],
["Az-Zukhruf", "Ornaments of gold"],
["Ad-Dukhaan", "The Smoke"],
["Al-Jaathiya", "Crouching"],
["Al-Ahqaf", "The Dunes"],
["Muhammad", "Muhammad"],
["Al-Fath", "The Victory"],
["Al-Hujuraat", "The Inner Apartments"],
["Qaaf", "The letter Qaaf"],
["Adh-Dhaariyat", "The Winnowing Winds"],
["At-Tur", "The Mount"],
["An-Najm", "The Star"],
["Al-Qamar", "The Moon"],
["Ar-Rahmaan", "The Beneficent"],
["Al-Waaqia", "The Inevitable"],
["Al-Hadid", "The Iron"],
["Al-Mujaadila", "The Pleading Woman"],
["Al-Hashr", "The Exile"],
["Al-Mumtahana", "She that is to be examined"],
["As-Saff", "The Ranks"],
["Al-Jumu'a", "Friday"],
["Al-Munaafiqoon", "The Hypocrites"],
["At-Taghaabun", "Mutual Disillusion"],
["At-Talaaq", "Divorce"],
["At-Tahrim", "The Prohibition"],
["Al-Mulk", "The Sovereignty"],
["Al-Qalam", "The Pen"],
["Al-Haaqqa", "The Reality"],
["Al-Ma'aarij", "The Ascending Stairways"],
["Nooh", "Noah"],
["Al-Jinn", "The Jinn"],
["Al-Muzzammil", "The Enshrouded One"],
["Al-Muddaththir", "The Cloaked One"],
["Al-Qiyaama", "The Resurrection"],
["Al-Insaan", "Man"],
["Al-Mursalaat", "The Emissaries"],
["An-Naba", "The Announcement"],
["An-Naazi'aat", "Those who drag forth"],
["Abasa", "He frowned"],
["At-Takwir", "The Overthrowing"],
["Al-Infitaar", "The Cleaving"],
["Al-Mutaffifin", "Defrauding"],
["Al-Inshiqaaq", "The Splitting Open"],
["Al-Burooj", "The Constellations"],
["At-Taariq", "The Morning Star"],
["Al-A'laa", "The Most High"],
["Al-Ghaashiya", "The Overwhelming"],
["Al-Fajr", "The Dawn"],
["Al-Balad", "The City"],
["Ash-Shams", "The Sun"],
["Al-Lail", "The Night"],
["Ad-Dhuhaa", "The Morning Hours"],
["Ash-Sharh", "The Consolation"],
["At-Tin", "The Fig"],
["Al-Alaq", "The Clot"],
["Al-Qadr", "The Power, Fate"],
["Al-Bayyina", "The Evidence"],
["Az-Zalzala", "The Earthquake"],
["Al-Aadiyaat", "The Chargers"],
["Al-Qaari'a", "The Calamity"],
["At-Takaathur", "Competition"],
["Al-Asr", "The Declining Day, Epoch"],
["Al-Humaza", "The Traducer"],
["Al-Fil", "The Elephant"],
["Quraish", "Quraysh"],
["Al-Maa'un", "Almsgiving"],
["Al-Kawthar", "Abundance"],
["Al-Kaafiroon", "The Disbelievers"],
["An-Nasr", "Divine Support"],
["Al-Masad", "The Palm Fibre"],
["Al-Ikhlaas", "Sincerity"],
["Al-Falaq", "The Dawn"],
["An-Naas", "Mankind"]
];
const surahNamesRu = [
[],
["\u0410\u043B\u044C-\u0424\u0430\u0442\u0438\u0445\u0430", "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u044E\u0449\u0430\u044F \u041A\u043E\u0440\u0430\u043D"],
["\u0410\u043B\u044C-\u0411\u0430\u043A\u0430\u0440\u0430", "\u041A\u043E\u0440\u043E\u0432\u0430"],
["\u0410\u043B\u044C \u2018\u0418\u043C\u0440\u0430\u043D", "\u0421\u0435\u043C\u0435\u0439\u0441\u0442\u0432\u043E \u2018\u0418\u043C\u0440\u0430\u043D\u0430"],
["\u0410\u043D-\u041D\u0438\u0441\u0430", "\u0416\u0435\u043D\u0449\u0438\u043D\u044B"],
["\u0410\u043B\u044C-\u041C\u0430\u0438\u0434\u0430", "\u0422\u0440\u0430\u043F\u0435\u0437\u0430"],
["\u0410\u043B\u044C-\u0410\u043D\u2018\u0430\u043C", "\u0421\u043A\u043E\u0442"],
["\u0410\u043B\u044C-\u0410\u2018\u0440\u0430\u0444", "\u041E\u0433\u0440\u0430\u0434\u044B"],
["\u0410\u043B\u044C-\u0410\u043D\u0444\u0430\u043B\u044C", "\u0412\u043E\u0435\u043D\u043D\u0430\u044F \u0434\u043E\u0431\u044B\u0447\u0430"],
["\u0410\u0442-\u0422\u0430\u0443\u0431\u0430", "\u041F\u043E\u043A\u0430\u044F\u043D\u0438\u0435"],
["\u042E\u043D\u0443\u0441", "\u0418\u043E\u043D\u0430"],
["\u0425\u0443\u0434", "\u0425\u0443\u0434"],
["\u042E\u0441\u0443\u0444", "\u0418\u043E\u0441\u0438\u0444"],
["\u0410\u0440-\u0420\u0430\u2018\u0434", "\u0413\u0440\u043E\u043C"],
["\u0418\u0431\u0440\u0430\u0445\u0438\u043C", "\u0410\u0432\u0440\u0430\u0430\u043C"],
["\u0410\u043B\u044C-\u0425\u0438\u0434\u0436\u0440", "\u0425\u0438\u0434\u0436\u0440"],
["\u0410\u043D-\u041D\u0430\u0445\u043B\u044C", "\u041F\u0447\u0451\u043B\u044B"],
["\u0410\u043B\u044C-\u0418\u0441\u0440\u0430", "\u041D\u043E\u0447\u043D\u043E\u0439 \u043F\u0435\u0440\u0435\u043D\u043E\u0441"],
["\u0410\u043B\u044C-\u041A\u044F\u0445\u0444", "\u041F\u0435\u0449\u0435\u0440\u0430"],
["\u041C\u0430\u0440\u044C\u044F\u043C", "\u041C\u0430\u0440\u0438\u044F"],
["\u0422\u0430, \u0445\u0430", "\u0422\u0430, \u0445\u0430"],
["\u0410\u043B\u044C-\u0410\u043D\u0431\u0438\u044F", "\u041F\u0440\u043E\u0440\u043E\u043A\u0438"],
["\u0410\u043B\u044C-\u0425\u0430\u0434\u0436\u0436", "\u0425\u0430\u0434\u0436"],
["\u0410\u043B\u044C-\u041C\u0443\u2019\u043C\u0438\u043D\u0443\u043D", "\u0412\u0435\u0440\u0443\u044E\u0449\u0438\u0435"],
["\u0410\u043D-\u041D\u0443\u0440", "\u0421\u0432\u0435\u0442"],
["\u0410\u043B\u044C-\u0424\u0443\u0440\u043A\u0430\u043D", "\u0420\u0430\u0437\u043B\u0438\u0447\u0435\u043D\u0438\u0435"],
["\u0410\u0448-\u0428\u0443\u2018\u0430\u0440\u0430", "\u041F\u043E\u044D\u0442\u044B"],
["\u0410\u043D-\u041D\u0430\u043C\u043B\u044C", "\u041C\u0443\u0440\u0430\u0432\u044C\u0438"],
["\u0410\u043B\u044C-\u041A\u0430\u0441\u0430\u0441", "\u0420\u0430\u0441\u0441\u043A\u0430\u0437"],
["\u0410\u043B\u044C-\u2018\u0410\u043D\u043A\u0430\u0431\u0443\u0442", "\u041F\u0430\u0443\u043A"],
["\u0410\u0440-\u0420\u0443\u043C", "\u0420\u043E\u043C\u0435\u0438"],
["\u041B\u0443\u043A\u043C\u0430\u043D", "\u041B\u0443\u043A\u043C\u0430\u043D"],
["\u0410\u0441-\u0421\u0430\u0434\u0436\u0434\u0430", "\u0417\u0435\u043C\u043D\u043E\u0439 \u043F\u043E\u043A\u043B\u043E\u043D"],
["\u0410\u043B\u044C-\u0410\u0445\u0437\u0430\u0431", "\u041F\u043E\u043B\u0447\u0438\u0449\u0430"],
["\u0421\u0430\u0431\u0430\u2019", "\u0421\u0430\u0432\u0430"],
["\u0424\u0430\u0442\u044B\u0440", "\u0417\u0438\u0436\u0434\u0438\u0442\u0435\u043B\u044C"],
["\u0419\u0430, \u0441\u0438\u043D", "\u0419\u0430, \u0441\u0438\u043D"],
["\u0410\u0441-\u0421\u0430\u0444\u0444\u0430\u0442", "\u0421\u0442\u043E\u044F\u0449\u0438\u0435 \u0432 \u0440\u044F\u0434"],
["\u0421\u0430\u0434", "\u0421\u0430\u0434"],
["\u0410\u0437-\u0417\u0443\u043C\u0430\u0440", "\u0422\u043E\u043B\u043F\u044B"],
["\u0413\u0430\u0444\u0438\u0440", "\u041F\u0440\u043E\u0449\u0430\u044E\u0449\u0438\u0439"],
["\u0424\u0443\u0441\u0441\u044B\u043B\u044F\u0442", "\u0420\u0430\u0437\u044A\u044F\u0441\u043D\u0435\u043D\u044B"],
["\u0410\u0448-\u0428\u0443\u0440\u0430", "\u0421\u043E\u0432\u0435\u0442"],
["\u0410\u0437-\u0417\u0443\u0445\u0440\u0443\u0444", "\u0423\u043A\u0440\u0430\u0448\u0435\u043D\u0438\u044F"],
["\u0410\u0434-\u0414\u0443\u0445\u0430\u043D", "\u0414\u044B\u043C"],
["\u0410\u043B\u044C-\u0414\u0436\u0430\u0441\u0438\u044F", "\u041A\u043E\u043B\u0435\u043D\u043E\u043F\u0440\u0435\u043A\u043B\u043E\u043D\u0451\u043D\u043D\u044B\u0435"],
["\u0410\u043B\u044C-\u0410\u0445\u043A\u0430\u0444", "\u0411\u0430\u0440\u0445\u0430\u043D\u044B"],
["\u041C\u0443\u0445\u0430\u043C\u043C\u0430\u0434", "\u041C\u0443\u0445\u0430\u043C\u043C\u0430\u0434"],
["\u0410\u043B\u044C-\u0424\u0430\u0442\u0445", "\u041F\u043E\u0431\u0435\u0434\u0430"],
["\u0410\u043B\u044C-\u0425\u0443\u0434\u0436\u0443\u0440\u0430\u0442", "\u041F\u043E\u043A\u043E\u0438"],
["\u041A\u0430\u0444", "\u041A\u0430\u0444"],
["\u0410\u0437-\u0417\u0430\u0440\u0438\u044F\u0442", "\u0420\u0430\u0441\u0441\u0435\u0438\u0432\u0430\u044E\u0449\u0438\u0435"],
["\u0410\u0442-\u0422\u0443\u0440", "\u0413\u043E\u0440\u0430"],
["\u0410\u043D-\u041D\u0430\u0434\u0436\u043C", "\u0417\u0432\u0435\u0437\u0434\u0430"],
["\u0410\u043B\u044C-\u041A\u0430\u043C\u0430\u0440", "\u041B\u0443\u043D\u0430"],
["\u0410\u0440-\u0420\u0430\u0445\u043C\u0430\u043D", "\u041C\u0438\u043B\u043E\u0441\u0442\u0438\u0432\u044B\u0439"],
["\u0410\u043B\u044C-\u0412\u0430\u043A\u0438\u2018\u0430", "\u041D\u0435\u0438\u0437\u0431\u0435\u0436\u043D\u043E\u0435"],
["\u0410\u043B\u044C-\u0425\u0430\u0434\u0438\u0434", "\u0416\u0435\u043B\u0435\u0437\u043E"],
["\u0410\u043B\u044C-\u041C\u0443\u0434\u0436\u0430\u0434\u0438\u043B\u044F", "\u041F\u0440\u0435\u043F\u0438\u0440\u0430\u044E\u0449\u0430\u044F\u0441\u044F"],
["\u0410\u043B\u044C-\u0425\u0430\u0448\u0440", "\u0421\u0431\u043E\u0440"],
["\u0410\u043B\u044C-\u041C\u0443\u043C\u0442\u0430\u0445\u0430\u043D\u0430", "\u0418\u0441\u043F\u044B\u0442\u0443\u0435\u043C\u0430\u044F"],
["\u0410\u0441-\u0421\u0430\u0444\u0444", "\u0420\u044F\u0434"],
["\u0410\u043B\u044C-\u0414\u0436\u0443\u043C\u0443\u2018\u0430", "\u0421\u043E\u0431\u0440\u0430\u043D\u0438\u0435"],
["\u0410\u043B\u044C-\u041C\u0443\u043D\u0430\u0444\u0438\u043A\u0443\u043D", "\u041B\u0438\u0446\u0435\u043C\u0435\u0440\u044B"],
["\u0410\u0442-\u0422\u0430\u0433\u0430\u0431\u0443\u043D", "\u041E\u0431\u0434\u0435\u043B\u0435\u043D\u0438\u0435"],
["\u0410\u0442-\u0422\u0430\u043B\u044F\u043A", "\u0420\u0430\u0437\u0432\u043E\u0434"],
["\u0410\u0442-\u0422\u0430\u0445\u0440\u0438\u043C", "\u0417\u0430\u043F\u0440\u0435\u0449\u0435\u043D\u0438\u0435"],
["\u0410\u043B\u044C-\u041C\u0443\u043B\u044C\u043A", "\u0412\u043B\u0430\u0441\u0442\u044C"],
["\u0410\u043B\u044C-\u041A\u0430\u043B\u044F\u043C", "\u041F\u0435\u0440\u043E"],
["\u0410\u043B\u044C-\u0425\u0430\u043A\u043A\u0430", "\u041D\u0435\u043C\u0438\u043D\u0443\u0435\u043C\u043E\u0435"],
["\u0410\u043B\u044C-\u041C\u0430\u2018\u0430\u0440\u0438\u0434\u0436", "\u0421\u0442\u0435\u043F\u0435\u043D\u0438"],
["\u041D\u0443\u0445", "\u041D\u043E\u0439"],
["\u0410\u043B\u044C-\u0414\u0436\u0438\u043D\u043D", "\u0414\u0436\u0438\u043D\u043D\u044B"],
["\u0410\u043B\u044C-\u041C\u0443\u0437\u0437\u0430\u043C\u043C\u0438\u043B\u044C", "\u0417\u0430\u043A\u0443\u0442\u0430\u0432\u0448\u0438\u0439\u0441\u044F"],
["\u0410\u043B\u044C-\u041C\u0443\u0434\u0434\u0430\u0441\u0441\u0438\u0440", "\u0417\u0430\u0432\u0435\u0440\u043D\u0443\u0432\u0448\u0438\u0439\u0441\u044F"],
["\u0410\u043B\u044C-\u041A\u0438\u044F\u043C\u0430", "\u0412\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u0438\u0435"],
["\u0410\u043B\u044C-\u0418\u043D\u0441\u0430\u043D", "\u0427\u0435\u043B\u043E\u0432\u0435\u043A"],
["\u0410\u043B\u044C-\u041C\u0443\u0440\u0441\u0430\u043B\u044F\u0442", "\u041F\u043E\u0441\u044B\u043B\u0430\u0435\u043C\u044B\u0435"],
["\u0410\u043D-\u041D\u0430\u0431\u0430\u2019", "\u0412\u0435\u0441\u0442\u044C"],
["\u0410\u043D-\u041D\u0430\u0437\u0438\u2018\u0430\u0442", "\u0412\u044B\u0440\u044B\u0432\u0430\u044E\u0449\u0438\u0435"],
["\u2018\u0410\u0431\u0430\u0441\u0430", "\u041D\u0430\u0445\u043C\u0443\u0440\u0438\u043B\u0441\u044F"],
["\u0410\u0442-\u0422\u0430\u043A\u0432\u0438\u0440", "\u0421\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435"],
["\u0410\u043B\u044C-\u0418\u043D\u0444\u0438\u0442\u0430\u0440", "\u0420\u0430\u0441\u043A\u0430\u043B\u044B\u0432\u0430\u043D\u0438\u0435"],
["\u0410\u043B\u044C-\u041C\u0443\u0442\u0430\u0444\u0444\u0438\u0444\u0438\u043D", "\u041E\u0431\u0432\u0435\u0448\u0438\u0432\u0430\u044E\u0449\u0438\u0435"],
["\u0410\u043B\u044C-\u0418\u043D\u0448\u0438\u043A\u0430\u043A", "\u0420\u0430\u0437\u0432\u0435\u0440\u0437\u043D\u0435\u0442\u0441\u044F"],
["\u0410\u043B\u044C-\u0411\u0443\u0440\u0443\u0434\u0436", "\u0421\u043E\u0437\u0432\u0435\u0437\u0434\u0438\u044F"],
["\u0410\u0442-\u0422\u0430\u0440\u0438\u043A", "\u041D\u043E\u0447\u043D\u043E\u0439 \u0433\u043E\u0441\u0442\u044C"],
["\u0410\u043B\u044C-\u0410\u2018\u043B\u044F", "\u0412\u0441\u0435\u0432\u044B\u0448\u043D\u0438\u0439"],
["\u0410\u043B\u044C-\u0413\u0430\u0448\u0438\u044F", "\u041F\u043E\u043A\u0440\u044B\u0432\u0430\u044E\u0449\u0435\u0435"],
["\u0410\u043B\u044C-\u0424\u0430\u0434\u0436\u0440", "\u0417\u0430\u0440\u044F"],
["\u0410\u043B\u044C-\u0411\u0430\u043B\u044F\u0434", "\u0413\u043E\u0440\u043E\u0434"],
["\u0410\u0448-\u0428\u0430\u043C\u0441", "\u0421\u043E\u043B\u043D\u0446\u0435"],
["\u0410\u043B\u044C-\u041B\u0435\u0439\u043B\u044C", "\u041D\u043E\u0447\u044C"],
["\u0410\u0434-\u0414\u0443\u0445\u0430", "\u0423\u0442\u0440\u043E"],
["\u0410\u043B\u044C-\u0418\u043D\u0448\u0438\u0440\u0430\u0445", "\u0420\u0430\u0441\u043A\u0440\u044B\u0442\u0438\u0435"],
["\u0410\u0442-\u0422\u0438\u043D", "\u0421\u043C\u043E\u043A\u043E\u0432\u043D\u0438\u0446\u0430"],
["\u0410\u043B\u044C-\u2018\u0410\u043B\u044F\u043A", "\u0421\u0433\u0443\u0441\u0442\u043E\u043A \u043A\u0440\u043E\u0432\u0438"],
["\u0410\u043B\u044C-\u041A\u0430\u0434\u0440", "\u0412\u0435\u043B\u0438\u0447\u0438\u0435"],
["\u0410\u043B\u044C-\u0411\u0430\u0439\u0439\u0438\u043D\u0430", "\u042F\u0441\u043D\u044B\u0439 \u0434\u043E\u0432\u043E\u0434"],
["\u0410\u0437-\u0417\u0430\u043B\u044C\u0437\u0430\u043B\u044F", "\u0421\u043E\u0442\u0440\u044F\u0441\u0435\u043D\u0438\u0435"],
["\u0410\u043B\u044C-\u2018\u0410\u0434\u0438\u044F\u0442", "\u0421\u043A\u0430\u0447\u0443\u0449\u0438\u0435"],
["\u0410\u043B\u044C-\u041A\u0430\u0440\u0438\u2018\u0430", "\u041F\u043E\u0440\u0430\u0436\u0430\u044E\u0449\u0435\u0435"],
["\u0410\u0442-\u0422\u0430\u043A\u044F\u0441\u0443\u0440", "\u0421\u043E\u043F\u0435\u0440\u043D\u0438\u0447\u0435\u0441\u0442\u0432\u043E"],
["\u0410\u043B\u044C-\u2018\u0410\u0441\u0440", "\u041F\u0440\u0435\u0434\u0432\u0435\u0447\u0435\u0440\u043D\u0435\u0435 \u0432\u0440\u0435\u043C\u044F"],
["\u0410\u043B\u044C-\u0425\u0443\u043C\u0430\u0437\u0430", "\u0425\u0443\u043B\u0438\u0442\u0435\u043B\u044C"],
["\u0410\u043B\u044C-\u0424\u0438\u043B\u044C", "\u0421\u043B\u043E\u043D"],
["\u041A\u0443\u0440\u0430\u0439\u0448", "\u041A\u0443\u0440\u0430\u0439\u0448\u0438\u0442\u044B"],
["\u0410\u043B\u044C-\u041C\u0430\u2018\u0443\u043D", "\u0423\u0442\u0432\u0430\u0440\u044C"],
["\u0410\u043B\u044C-\u041A\u0430\u0443\u0441\u0430\u0440", "\u041A\u0430\u0443\u0441\u0430\u0440"],
["\u0410\u043B\u044C-\u041A\u044F\u0444\u0438\u0440\u0443\u043D", "\u041D\u0435\u0432\u0435\u0440\u0443\u044E\u0449\u0438\u0435"],
["\u0410\u043D-\u041D\u0430\u0441\u0440", "\u041F\u043E\u043C\u043E\u0449\u044C"],
["\u0410\u043B\u044C-\u041C\u0430\u0441\u0430\u0434", "\u041F\u0430\u043B\u044C\u043C\u043E\u0432\u044B\u0435 \u0432\u043E\u043B\u043E\u043A\u043D\u0430"],
["\u0410\u043B\u044C-\u0418\u0445\u043B\u044F\u0441", "\u041E\u0447\u0438\u0449\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u044B"],
["\u0410\u043B\u044C-\u0424\u0430\u043B\u044F\u043A", "\u0420\u0430\u0441\u0441\u0432\u0435\u0442"],
["\u0410\u043D-\u041D\u0430\u0441", "\u041B\u044E\u0434\u0438"]
];
const surahNamesTr = [
[],
["Fatiha", "A\xE7\u0131l\u0131\u015F"],
["Bakara", "S\u0131\u011F\u0131r"],
["Al-i \u0130mran", "\u0130mr\xE2n ailesi"],
["Nisa", "Kad\u0131n