function parseInput(wordArray, objects, i) { let word = wordArray[i]; if (word.substring(0, 1) == "%") { //check if regular use of % in text 20% an ignoreCase if (word.substring(0, 2) !== "% ") { //found simple input %word / excluding %m: if (word.substring(2, 3) !== ":") { //init Word Object var wordObj = {}; let w = word.substring(1); //bugfix if the title of an input has no space in it ex: %test=l:first word;l:second word;%1 let oneWordFlag = false; if (word.substring(0, 1) == "%" && word.indexOf('=') != -1) { oneWordFlag = true; } //for loop to escape spaces in simple input for (let j = i+1; j < wordArray.length; j++) { //if title has no space then go back one word to include "=" ex: if (oneWordFlag) { j = i; oneWordFlag = false; } else { w = w + " " + wordArray[j]; } //invoke look for gender specific template i = findGenderSpecificInput(wordArray, wordObj, j); //invoke look for list template i = findListInput(wordArray, wordObj, j); //invoke connected fields i = findConnectedListInput(wordArray, wordObj, j); //find end of template string and format it for future handling¨ if (w.indexOf("%") !== -1) { //found % sign if (w.indexOf("%") !== w.length - 1) { //% is not last char of string word = "%" + w; } else { //% is last //no prio has been set word = w.slice(0, -1); } break; } } if (word.indexOf("\n") !== -1) { if (word.substring(word.indexOf("\n"), 2).indexOf("%") !== -1) { //alert("attention newlineChar in: "+ word.substring(word.indexOf("\n"),2)); } } //parse priority if (word.substring(1).indexOf("%") === -1) { //object if no prio was set wordObj.word = word; wordObj.arrayPos = objects.length; wordObj.prio = 0; } else { //handle edgecase if punctuation mark is directly after prio let postMarker = word.substring(1).indexOf("%") + 2; let postMarkerEnd = word.length; let isPriority = true; let i = 0; //console.log(word + " * " + word.substring(postMarkerEnd-2, postMarkerEnd) + " - " + postMarker + ":" + postMarkerEnd + " - " + word.length); while ( !isCharNumber(word.substring(postMarkerEnd - 1, postMarkerEnd)) ) { postMarkerEnd = postMarkerEnd - 1; //if no priority has been set; set flag //console.log(word.substring(postMarkerEnd-1, postMarkerEnd)); if (postMarkerEnd < 1) { isPriority = false; break; } i++; } if (isPriority) { //console.log(word + " prio: "+isPriority); //object if prio has been defined wordObj.word = word.substring(1, postMarker - 1); wordObj.arrayPos = objects.length; wordObj.prio = parseInt( word.substring(postMarker, postMarkerEnd), 10 ); if (isNaN(wordObj.prio)) { alert( "error in template: %" + wordObj.word + "% there must always a space after the priority number" ); wordObj.prio = 0; } } else { //object if no prio has been defined wordObj.word = word.substring(1, postMarker - 1); wordObj.arrayPos = objects.length; wordObj.prio = 0; } } //check if genderSpecific or list has been found and if so reformat word //console.log(wordObj); switch (wordObj.type) { case "genderSpecific": if (word.substring(0, 1) === "%") { wordObj.word = word.split("=")[0].substring(1); } else { wordObj.word = word.split("=")[0]; } break; case "list": if (word.substring(0, 1) === "%") { wordObj.word = word.split("=")[0].substring(1); } else { wordObj.word = word.split("=")[0]; } break; case "conList": if (word.substring(0, 1) === "%") { wordObj.word = word.split("=")[0].substring(1); } else { wordObj.word = word.split("=")[0]; } //check if format has been given or markup for (let i = 0; i <= wordObj.listCount; i++) { let params = wordObj[i].split(":"); if (params[1] !== undefined) { wordObj[i] = params[0]; wordObj["clType-"+wordObj[i]] = (params[2] !== undefined) ? params[1]+":"+params[2]: params[1]; } else { wordObj["clType-"+wordObj[i]] = "cl-simpleInput"; } } break; default: wordObj.type = "simpleInput"; //check if customTemplate was used set type and format word if (word.indexOf("=") !== -1) { parseCustomTemplates(wordObj); } break; } objects.push(wordObj); } } } } function findGenderSpecificInput(wordArray, wordObj, i) { let word = wordArray[i]; if (word.indexOf("=m:") !== -1) { wordObj.type = "genderSpecific"; let mw = word.substring(word.indexOf("=m:") + 3); for (let j = i + 1; j < wordArray.length; j++) { mw = mw + " " + wordArray[j]; i = j; if (mw.indexOf(";") !== -1) { wordObj.m = mw.slice(0, mw.indexOf(";")); //adding length word + 3 = m: ; i = parseGenderTemplate(wordArray, wordObj, i); break; } } } if (word.indexOf("=w:") !== -1) { let ww = word.substring(word.indexOf("=w:") + 3); for (let j = i + 1; j < wordArray.length; j++) { ww = ww + " " + wordArray[j]; i = j; if (ww.indexOf(";") !== -1) { wordObj.w = ww.slice(0, ww.indexOf(";")); i = parseGenderTemplate(wordArray, wordObj, i); break; } } } if (word.indexOf("=d:") !== -1) { let dw = word.substring(word.indexOf("=d:") + 3); for (let j = i + 1; j < wordArray.length; j++) { dw = dw + " " + wordArray[j]; i = j; if (dw.indexOf(";") !== -1) { wordObj.d = dw.slice(0, dw.indexOf(";")); i = parseGenderTemplate(wordArray, wordObj, i); break; } } } return i; } function parseGenderTemplate(wordArray, wordObj, i) { let word = wordArray[i]; if (word.indexOf(";m:") !== -1) { let mw = word.substring(word.indexOf(";m:") + 3); for (let j = i + 1; j < wordArray.length; j++) { mw = mw + " " + wordArray[j]; i = j; if (mw.indexOf(";") !== -1) { wordObj.m = mw.slice(0, mw.indexOf(";")); i = parseGenderTemplate(wordArray, wordObj, i); break; } } } if (word.indexOf(";w:") !== -1) { let ww = word.substring(word.indexOf(";w:") + 3); for (let j = i + 1; j < wordArray.length; j++) { ww = ww + " " + wordArray[j]; i = j; if (ww.indexOf(";") !== -1) { wordObj.w = ww.slice(0, ww.indexOf(";")); i = parseGenderTemplate(wordArray, wordObj, i); break; } } } if (word.indexOf(";d:") !== -1) { let dw = word.substring(word.indexOf(";d:") + 3); for (let j = i + 1; j < wordArray.length; j++) { dw = dw + " " + wordArray[j]; i = j; if (dw.indexOf(";") !== -1) { wordObj.d = dw.slice(0, dw.indexOf(";")); i = parseGenderTemplate(wordArray, wordObj, i); break; } } } return i; } function findListInput(wordArray, wordObj, i) { let word = wordArray[i]; if (word.indexOf("=l:") !== -1) { wordObj.type = "list"; wordObj.listCount = 0; let lw = word.substring(word.indexOf("=l:") + 3); //escape if there is no space in listitem if (lw.indexOf(";") !== -1) { wordObj[wordObj.listCount] = lw.slice(0, lw.indexOf(";")); //adding length word + 3 = m: ; i = parseListTemplate(wordArray, wordObj, i); return i; } for (let j = i + 1; j < wordArray.length; j++) { lw = lw + " " + wordArray[j]; i = j; if (lw.indexOf(";") !== -1) { wordObj[wordObj.listCount] = lw.slice(0, lw.indexOf(";")); //adding length word + 3 = m: ; i = parseListTemplate(wordArray, wordObj, i); break; } } } return i; } function parseListTemplate(wordArray, wordObj, i) { let word = wordArray[i]; if (word.indexOf(";l:") !== -1) { let lw = word.substring(word.indexOf(";l:") + 3); //escape if there is no space in listitem if (lw.indexOf(";") !== -1) { wordObj.listCount++; wordObj[wordObj.listCount] = lw.slice(0, lw.indexOf(";")); //shorten wordArray and hand it to parseListTemplate: firstItem;l:secondItem;l: to ;l:secondItem;l:third Item wordArray[i] = wordArray[i] .substring(1) .substring(wordArray[i].indexOf(";") + 1); //advance wordArray i if third Item has a space in it and no ; is found to avoid endless loop if (wordArray[i].substring(1).indexOf(";") === -1) { i++; } //console.log(wordArray[i].substring(1)); i = parseListTemplate(wordArray, wordObj, i); return i; } for (let j = i + 1; j < wordArray.length; j++) { lw = lw + " " + wordArray[j]; i = j; if (lw.indexOf(";") !== -1) { wordObj.listCount++; wordObj[wordObj.listCount] = lw.slice(0, lw.indexOf(";")); i = parseListTemplate(wordArray, wordObj, i); break; } } } return i; } function findConnectedListInput(wordArray, wordObj, i) { let word = wordArray[i]; if (word.indexOf("=h:") !== -1) { wordObj.type = "conList"; wordObj.listCount = 0; let lw = word.substring(word.indexOf("=h:") + 3); //escape if there is no space in listitem if (lw.indexOf(";") !== -1) { wordObj[wordObj.listCount] = lw.slice(0, lw.indexOf(";")); //adding length word + 3 = m: ; i = parseConnectedListTemplate(wordArray, wordObj, i); return i; } for (let j = i + 1; j < wordArray.length; j++) { lw = lw + " " + wordArray[j]; i = j; if (lw.indexOf(";") !== -1) { wordObj[wordObj.listCount] = lw.slice(0, lw.indexOf(";")); //adding length word + 3 = m: ; i = parseConnectedListTemplate(wordArray, wordObj, i); break; } } } return i; } function parseConnectedListTemplate(wordArray, wordObj, i) { let word = wordArray[i]; if (word.indexOf(";h:") !== -1) { let lw = word.substring(word.indexOf(";h:") + 3); //escape if there is no space in listitem if (lw.indexOf(";") !== -1) { wordObj.listCount++; wordObj[wordObj.listCount] = lw.slice(0, lw.indexOf(";")); //shorten wordArray and hand it to parseListTemplate: firstItem;l:secondItem;l: to ;l:secondItem;l:third Item wordArray[i] = wordArray[i] .substring(1) .substring(wordArray[i].indexOf(";") + 1); //advance wordArray i if third Item has a space in it and no ; is found to avoid endless loop if (wordArray[i].substring(1).indexOf(";") === -1) { i++; } //console.log(wordArray[i].substring(1)); i = parseConnectedListTemplate(wordArray, wordObj, i); return i; } for (let j = i + 1; j < wordArray.length; j++) { lw = lw + " " + wordArray[j]; i = j; if (lw.indexOf(";") !== -1) { wordObj.listCount++; wordObj[wordObj.listCount] = lw.slice(0, lw.indexOf(";")); i = parseConnectedListTemplate(wordArray, wordObj, i); break; } } } return i; } function parseCustomTemplates(wordObj) { let word = wordObj.word; for (let i = 0; i < activeState.templateFieldTypes.length; i++) { if (word.indexOf("=" + activeState.templateFieldTypes[i]) !== -1) { wordObj.word = word.split("=")[0]; wordObj.type = word.split("=")[1]; if (wordObj.type.indexOf(":") !== -1) { let ltPlaceholder = wordObj.type.split(":")[1]; if (ltPlaceholder !== "undefined") { wordObj.placeholder = ltPlaceholder; //wordObj.type = wordObj.type.split(":")[0]; - dont do this } } } } } function isCharNumber(c) { return c >= "0" && c <= "9"; } export default parseInput;