@cbop-dev/aland-gospel-synopsis
Version:
ES Javascript module for looking up parallel texts from the NT gospels, based on Aland's 'Quattuor Synopsis Evangeliorum'
64 lines (58 loc) • 2.04 kB
JavaScript
export function floatRound(float, decimals=3){
const factor = Math.pow(10,decimals);
return Math.round(float * factor) / factor;
}
export function romanize (num) {
if (isNaN(num))
return NaN;
var digits = String(+num).split(""),
key = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM",
"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC",
"","I","II","III","IV","V","VI","VII","VIII","IX"],
roman = "",
i = 3;
while (i--)
roman = (key[+digits.pop() + (i * 10)] || "") + roman;
return Array(+digits.join("") + 1).join("M") + roman;
}
/**
*
* @param {string} numString - a list of integers or integer ranges, separated by commas. Eg., "1,2,4-7", "3", "3-6,4", etc.
* @returns {number[]} - an array of all the numbers in the given list, e.g., "1,2,4-7" --> [1,2,4,5,6,7], etc.
*/
export function createNumArrayFromStringListRange(numString){
function cleanString(str){
if (str)
return str.replaceAll(/\s+/g, ' ').trim();
else
return ''
}
function cleanNumString(numString){
return cleanString(numString);
}
const nums=[];
const sepGroups = cleanNumString(numString).split(',');
for (const group of sepGroups){
const ranges = group.split("-");
const min = parseInt(ranges[0]);
const max = ranges.length > 1 ? parseInt(ranges[1]) : null;
if (ranges.length > 2) //bad input!
return [];
else if (ranges.length == 2 && max){
if (min < max){
for (let i = min; i <= max; i++) {
if (!nums.includes(i))
nums.push(i);
}
}
}
else if (ranges.length == 1){ //no range, just a plain number!
if (!nums.includes(min))
nums.push(min);
}
else{
//bad input?; don't add anything.
}
}
return nums.sort((a,b)=>a-b);
}