treePitaka = (xDN = 1, xMN = 1, xSN = 1, xAN = 1) => {
const tree = [
{ name: "Sutta Pitaka", parent: null }
];
if (xDN == 1) tree.push({ name: "Dīgha Nikāya", parent: "Sutta Pitaka" });
if (xMN == 1) tree.push({ name: "Majjhima Nikāya", parent: "Sutta Pitaka" });
if (xMN == 1) tree.push({ name: "Mūlapaṇṇāsa", parent: "Majjhima Nikāya" });
if (xMN == 1)
tree.push({ name: "Majjhimapaṇṇāsa", parent: "Majjhima Nikāya" });
if (xMN == 1) tree.push({ name: "Uparipaṇṇāsa", parent: "Majjhima Nikāya" });
if (xSN == 1) tree.push({ name: "Saṃyutta Nikāya", parent: "Sutta Pitaka" });
if (xSN == 1) tree.push({ name: "Sagāthā Vagga", parent: "Saṃyutta Nikāya" });
if (xSN == 1) tree.push({ name: "Nidāna Vagga", parent: "Saṃyutta Nikāya" });
if (xSN == 1) tree.push({ name: "Khandha Vagga", parent: "Saṃyutta Nikāya" });
if (xSN == 1)
tree.push({ name: "Saḷāyatana Vagga@", parent: "Saṃyutta Nikāya" });
if (xSN == 1) tree.push({ name: "Mahā Vagga@", parent: "Saṃyutta Nikāya" });
if (xAN == 1) tree.push({ name: "Aṅguttara Nikāya", parent: "Sutta Pitaka" });
let vaggaPushOld = {};
let vaggaPush2 = {};
let divPushOld = {};
let divAPushOld = {};
let divPush = {};
let divAPush = {};
let vaggaNum = 0;
let mn = 1;
let sn = 1;
let snDiv = "";
suttas.forEach((sutta) => {
let test = 0;
if (sutta.acronym.includes("DN")) test = xDN; // use this to disable/enable some of the nikaya
if (sutta.acronym.includes("MN")) test = xMN;
if (sutta.acronym.includes("SN")) test = xSN;
if (sutta.acronym.includes("AN")) test = xAN;
if (test == 0) return;
const suttaVagga = vaggas.find(
(vagga) =>
vagga.subdivision_uid == sutta.subdivision_uid &&
vagga.number == sutta.vagga_number
);
// their is a lot of stuff in suttas
if (suttaVagga !== undefined) {
const subDiv = sutta.uid.split("."); // first num . second num
const subDivName = subDivs.find((div) => div.uid == subDiv[0]); // divs of samyutta and Angutta
const suttaPush = {
uid: sutta.uid,
mainDiv: subDiv[0] ? subDiv[0] : "", // usefull to test ?
mainDivName: subDivName
? subDivName.name // for SN & AN
: sutta.acronym
.split(" ")[0]
.replace("DN", "Dīgha Nikāya")
.replace("MN", "Majjhima Nikāya"),
subDiv: subDiv[1] ? subDiv[1] : "",
acronym: sutta.acronym.replace("–", "-"), // i looked for an hour for that mistake in the data...
name: sutta.name + " Sutta",
parent: suttaVagga.name
};
tree.push(suttaPush);
// for vagga
if (suttaPush.mainDivName == "Majjhima Nikāya") {
if (mn <= 50) {
suttaPush.mainDivName = "Mūlapaṇṇāsa";
} else if (mn <= 100) {
suttaPush.mainDivName = "Majjhimapaṇṇāsa";
} else if (mn <= 152) {
suttaPush.mainDivName = "Uparipaṇṇāsa";
}
mn++;
}
// for acronym of vaggas (SN ans AN)
let acroVagga = suttaPush.acronym.split("/")[0];
// acroVagga = acroVagga.split("-")[0];
const vaggaPush = {
name: suttaVagga.name,
parent: suttaPush.mainDivName
};
// bellow is very complicated but it works. there is a lot of exeptions that you need to take in account when creating the vagga from the sutta. Not easy...
let lastSubDiv = tree[tree.length - 2].subDiv;
if (JSON.stringify(vaggaPush) !== JSON.stringify(vaggaPushOld)) {
const vaggaPushCopy = JSON.parse(JSON.stringify(vaggaPush));
vaggaPushCopy["acronym"] = acroVagga;
if (
suttaPush.acronym.includes("SN") ||
suttaPush.acronym.includes("AN")
) {
let ac = vaggaPush2.acronym;
// if (ac) ac = ac.split("-")[0]);
if (lastSubDiv) {
lastSubDiv.includes("-")
? (lastSubDiv = lastSubDiv.split("-")[1])
: (lastSubDiv = lastSubDiv.split("-")[0]);
}
lastSubDiv
? (vaggaPush2.acronym = ac.split("-")[0] + "-" + lastSubDiv)
: (vaggaPush2.acronym = ac);
if (vaggaPush2.name) tree.push(vaggaPush2);
// tree.push(vaggaPushCopy);
vaggaPush2 = JSON.parse(JSON.stringify(vaggaPushCopy));
} else tree.push(vaggaPush);
}
// if (suttaPush.parent != tree[tree.length - 1].parent)
// tree.push({ test: 123 });
vaggaPushOld = vaggaPush;
// for div of SN
if (suttaPush.mainDivName.includes("Saṃyutta")) {
sn = suttaPush.acronym.split(" ")[1].split(".")[0];
if (sn <= 11) {
snDiv = "Sagāthā Vagga";
} else if (sn <= 21) {
snDiv = "Nidāna Vagga";
} else if (sn <= 34) {
snDiv = "Khandha Vagga";
} else if (sn <= 44) {
snDiv = "Saḷāyatana Vagga@"; // duplicate @ is removed at display
} else {
snDiv = "Mahā Vagga@"; // duplicate @ is removed at display
}
divPush = {
name: suttaPush.mainDivName,
parent: snDiv,
acronym:
suttaPush.acronym.split(" ")[0] +
" " +
suttaPush.acronym.split(" ")[1].split(".")[0]
};
sn++;
}
if (JSON.stringify(divPush) !== JSON.stringify(divPushOld)) {
tree.push(divPush);
}
divPushOld = divPush;
// for div of AN
if (suttaPush.mainDivName.includes("Nipāta"))
divAPush = {
name: suttaPush.mainDivName,
parent: "Aṅguttara Nikāya",
acronym:
suttaPush.acronym.split(" ")[0] +
" " +
suttaPush.acronym.split(" ")[1].split(".")[0]
};
if (JSON.stringify(divAPush) !== JSON.stringify(divAPushOld)) {
tree.push(divAPush);
}
divAPushOld = divAPush;
// final push
// tree.push(suttaPush);
}
});
// remove sn and an sutta, keep just vagga, too many of them
const treeX = [];
tree.forEach((d) => {
if (d.uid) {
if (!d.uid.includes("sn") && !d.uid.includes("an")) {
treeX.push(d);
}
} else {
treeX.push(d);
}
});
// const treeX = tree; // comment top section to have all suttas
// avoid duplicate names
let alreadySeen = [];
let duplicate = [];
treeX.forEach((d) =>
alreadySeen[d.name] ? (d.name = d.name + " ") : (alreadySeen[d.name] = true)
);
console.log(treeX);
return treeX;
}