{"version":3,"file":"cif-to-json.js","sources":["../src/index.js"],"sourcesContent":["export function cifParser(value) {\n  let lines = value.split(/[\\r\\n]+/);\n  let result = {};\n  let newLines = [];\n  let inLoopHeader = false;\n\n  for (let line of lines) {\n    if (line.match(/^ *#/)) {\n      // a comment\n    } else if (line.match(/^ *loop_/)) {\n      inLoopHeader = true;\n      newLines[newLines.length] = line.trim();\n    } else if (line.match(/^ *_/)) {\n      if (inLoopHeader) {\n        newLines[newLines.length - 1] += ` ${line.trim()}`;\n      } else {\n        newLines[newLines.length] = line.trim();\n      }\n    } else {\n      if (inLoopHeader) {\n        inLoopHeader = false;\n      }\n      if (line.match(/^ *;/)) {\n        newLines[newLines.length - 1] += ` ${line.replace(';', \"'\").trim()}`;\n      } else {\n        newLines[newLines.length - 1] += ` ${line.trim()}`;\n      }\n    }\n  }\n\n  for (let i = 0; i < newLines.length; i++) {\n    let line = `${newLines[i]} `;\n    let begin = 0;\n    let inQuote = false;\n    let escaped = false;\n    let fields = [];\n    for (let j = 0; j < line.length; j++) {\n      let char = line.charAt(j);\n      if (char === ' ' || char === '\\t') {\n        if (!inQuote) {\n          if (begin < j) {\n            fields.push(line.substring(begin, j));\n          }\n          begin = j + 1;\n        }\n      } else if (char === \"'\") {\n        if (!escaped) {\n          if (inQuote) {\n            // the end of the Quote\n            fields.push(line.substring(begin, j));\n            inQuote = false;\n          } else {\n            inQuote = true;\n          }\n          begin = j + 1;\n        }\n      }\n      if (char === '\\\\') {\n        escaped = true;\n      } else {\n        escaped = false;\n      }\n    }\n    processFields(fields, result);\n  }\n\n  return result;\n\n  function processFields(fields, result) {\n    if (fields[0] === 'loop_') {\n      // it is an array of object\n      let headers = [];\n      let lines = [];\n      let i = 1;\n      while (i < fields.length) {\n        if (fields[i].match(/^_/)) {\n          headers.push(fields[i]);\n        } else {\n          break;\n        }\n        i++;\n      }\n\n      let common = getCommonBeginning(headers).replace(/_$/, '');\n      let line;\n      while (i < fields.length) {\n        let pos = (i - 1) % headers.length;\n        if (pos === 0) {\n          line = {};\n        }\n        line[headers[pos]] = fields[i];\n        if (pos === headers.length - 1) {\n          lines.push(line);\n        }\n        i++;\n      }\n      result[common] = lines;\n    } else {\n      result[fields[0]] = fields[1]\n        ? unescapeValue(fields[1].trim())\n        : fields[1];\n    }\n  }\n\n  function unescapeValue(value) {\n    value = value.replace(/\\\\'e/g, 'Ã©');\n    return value;\n  }\n\n  function getCommonBeginning(strings) {\n    let common = '';\n    let currentPosition = 0;\n    while (currentPosition < strings[0].length) {\n      let currentChar = strings[0].charAt(currentPosition);\n      for (let i = 1; i < strings.length; i++) {\n        if (strings[i].charAt(currentPosition) !== currentChar) {\n          return common;\n        }\n      }\n      common += currentChar;\n      currentPosition++;\n    }\n    return common;\n  }\n}\n"],"names":["cifParser","value","lines","split","result","newLines","inLoopHeader","line","match","length","trim","replace","i","begin","inQuote","escaped","fields","j","char","charAt","push","substring","processFields","headers","common","getCommonBeginning","pos","unescapeValue","strings","currentPosition","currentChar"],"mappings":"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"}