JSFiddle - React, Tailwind, and code Playground
by rsm23
JavaScript
const file = `
[SALESFORCE_DU]
SALESFORCE_USERNAME=
`
function isWhiteSpace(at){
if(at === "\t" || at === " "){
return true;
}
}
function parseIni(file) {
let index = 0;
const result = {};
let section = result;
let state = "default";
let keyName = "";
let value = "";
let sectionName = "";
while(index < file.length){
let at = file[index];
if(state === "default"){
if(at === ";"){
state = "comment";
} else if(at === "["){
state = "section";
} else if(!isWhiteSpace(at)){
state = "key";
index--;
}
console.log("default to", state);
index++;
} else if(state === "key") {
if(at !== "\n" && at !== "="){
keyName += at;
} else if(at === "\n"){
state = "default";
keyName = "";
} else {
state = "value";
}
index++;
} else if(state === "value") {
if(at !== "\n"){
value += at;
} else {
//End of the line let's do this
section[keyName] = value;
keyName = "";
value = "";
state = "default";
}
index++;
} else if(state == "section") {
if(at === "]" || at === "\n"){
result[sectionName] = {};
section = result[sectionName];
sectionName = "";
state = "default"
} else {
sectionName += at;
}
index++;
} else if(state === "comment") {
if(at === "\n"){
state = "default"
}
index++
}
}
}
document.body.innerHTML = `<pre>${JSON.stringify(result, null, 2)}</pre>`