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>`