{"version":3,"sources":["jsdelivr-header.js","/npm/hiasm-scheme@1.1.0/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,GAAK,QAAQ,eACb,IAAM,QAAQ,cAEpB,eAAe,iBAAiB,GAC5B,IAAI,QAAY,GAAG,SAAS,GAE5B,OADe,IAAI,OAAO,IAAI,OAAO,EAAK,WAAY,QAAQ,UAElE,CACI,OAAO,UAAU,aACpB,OAAO,UAAU,WAAa,SAAS,EAAQ,GAE9C,IADA,IAAI,EAAM,MACqB,GAAzB,EAAI,QAAQ,IACjB,EAAM,EAAI,QAAQ,EAAQ,GAE3B,OAAO,CACR,GAaD,QAAQ,MAAQ,eAAe,EAAM,GACpC,IAAI,EAAS,CAAC,EACV,EAAQ,gCACR,EAAa,gBACb,EAAY,mCACZ,EAAe,4BACnB,IACI,SADa,iBAAiB,IACjB,MAAM,QACnB,EAAO,EAAM,OAAO,EAAE,GAAG,GACzB,EAAM,EAAM,OAAO,EAAE,GAAG,GAC5B,EAAO,KAAO,EAAK,UAAU,EAAE,EAAK,OAAS,GAC7C,EAAO,aAAe,EAAI,UAAU,EAAE,EAAI,OAAS,GACnD,EAAO,SAAW,GAClB,IAAI,EAAU,KACV,EAAgB,GA0EpB,OAzEA,EAAM,SAAQ,CAAC,EAAQ,KACtB,IAAI,EAAO,EAAQ,YACnB,GAAG,EAAK,WAAW,OAAQ,CAC1B,IAAI,EAAQ,EAAM,KAAK,GACvB,IAAG,EAWI,MAAM,IAAI,UAAU,sDAAsD,EAAM,KAVtF,EAAU,CACT,KAAM,EAAM,GACZ,GAAI,SAAS,EAAM,IACnB,EAAG,SAAS,EAAM,IAClB,EAAG,SAAS,EAAM,IAClB,MAAO,CAAC,EACR,OAAQ,GACR,MAAO,GACP,SAAU,GAGb,MAAO,GAAW,KAAR,EAAa,CACtB,GAAc,MAAX,EAgBI,MAAM,IAAI,UAAU,sBAAsB,EAAM,wCAfnD,EAAM,EAAM,GACmB,aAA9B,EAAM,EAAM,GAAG,aACjB,EAAc,KAAK,GACnB,EAAc,EAAc,OAAO,GAAG,SAAW,IACxC,EAAc,OAAS,GAChC,EAAc,EAAc,OAAO,GAAG,SAAS,KAAK,GACpD,EAAU,OAEV,EAAO,SAAS,KAAK,GACrB,EAAU,OAGX,EAAO,SAAS,KAAK,GACrB,EAAU,KAGb,MAAO,GAAW,WAAR,EACT,GAA2B,GAAxB,EAAc,OAChB,EAAO,SAAS,KAAK,EAAc,IACnC,EAAgB,OACV,MAAG,EAAc,OAAS,GAGhC,MAAM,IAAI,UAAU,iDAFpB,EAAc,EAAc,OAAO,GAAG,SAAS,KAAK,EAAc,MAGnE,MACM,GAAc,MAAX,GAA2B,KAAR,EAAa,CACzC,IAAI,EAAK,EACL,EAAO,EAAG,MAAM,KAChB,EAAQ,EAAW,KAAK,GACxB,EAAO,EAAU,KAAK,GACtB,EAAU,EAAa,KAAK,GAChC,GAAG,EACF,EAAQ,OAAO,KAAK,EAAM,SACpB,GAAG,EAAM,CACf,IAAI,EAAe,EAAK,GAAG,WAAW,WAAW,IAAI,KAAK,WAAW,IAAI,MACrE,EAAS,KAAK,MAAM,IAAI,EAAa,UAAU,EAAE,EAAa,OAAS,GAAG,KAC9E,EAAQ,MAAM,KAAK,CAClB,MAAO,EAAK,GACZ,GAAI,CACH,GAAI,EAAK,GACT,KAAM,EAAK,IAEZ,UAEF,MAAU,EACT,EAAQ,SAAS,KAAK,CACrB,KAAM,OAAO,GACb,YAAa,OAAO,GACpB,KAAM,EAAQ,KAEN,IACT,EAAQ,MAAM,EAAK,IAAM,EAAK,GAEhC,KAEM,KAAK,UAAU,EAAO,KAAK,EAAY,KAAK,KACpD,EASA,QAAQ,cAAgB","file":"/npm/hiasm-scheme@1.1.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/hiasm-scheme@1.1.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const fs = require(\"fs/promises\");\r\nconst rec = require('iconv-lite');\r\n\r\nasync function readFile_win1251(filename) {\r\n    let raw = await fs.readFile(filename);\r\n\tlet reconverted = rec.encode(rec.decode(raw, 'win1251'), 'utf8').toString();\r\n    return reconverted;\r\n}\r\nif(!String.prototype.replaceAll) {\r\n\tString.prototype.replaceAll = function(fromstr,tostr) {\r\n\t\tvar str = this;\r\n\t\twhile(str.indexOf(fromstr) != -1) {\r\n\t\t\tstr = str.replace(fromstr,tostr);\r\n\t\t}\r\n\t\treturn str;\r\n\t};\r\n} // fucking node.js v14.x\r\n\r\n/**\r\n * Parses a scheme from a file.\r\n * @function parse\r\n * @param {string} schm - Path to a .sha file.\r\n * @param {boolean} prettyPrint - Whether or not to pretty-print the result.\r\n * @throws {TypeError} Throws an error if an \"Add\" was found, but the regex match wasnt.\r\n * @throws {TypeError} Throws an error if an \"}\" was found, but there was no \"Add\" before it (no element is being processed).\r\n * @throws {TypeError} Throws an error if an \"END_SDK\" was found, but there was no \"BEGIN_SDK\" before it.\r\n * @returns {JSON} The resulting JSON string.\r\n  */\r\nexports.parse = async function(schm, prettyPrint) {\r\n\tvar scheme = {};\r\n\tvar regex = /Add\\((.+),(\\d+),(\\d+),(\\d+)\\)/;\r\n\tvar regexPoint = /Point\\((.+)\\)/;\r\n\tvar regexLink = /link\\((.+),(\\d+):(.+),\\[(.+)\\]\\)/;\r\n\tvar regexMakeExt = /MakeExt\\((.+),(.+),(.+)\\)/;\r\n\tlet file = await readFile_win1251(schm);\r\n\tlet lines = file.split(\"\\r\\n\");\r\n\tlet pack = lines.splice(0,1)[0];\r\n\tlet ver = lines.splice(0,1)[0];\r\n\tscheme.pack = pack.substring(5,pack.length - 1);\r\n\tscheme.hiasmVersion = ver.substring(4,ver.length - 1);\r\n\tscheme.elements = [];\r\n\tlet curelem = null;\r\n\tlet containerelem = [];\r\n\tlines.forEach((lineraw,index)=>{\r\n\t\tvar line = lineraw.trimStart();\r\n\t\tif(line.startsWith('Add')) {\r\n\t\t\tlet match = regex.exec(line);\r\n\t\t\tif(match) {\r\n\t\t\t\tcurelem = {\r\n\t\t\t\t\tname: match[1],\r\n\t\t\t\t\tid: parseInt(match[2]),\r\n\t\t\t\t\tx: parseInt(match[3]),\r\n\t\t\t\t\ty: parseInt(match[4]),\r\n\t\t\t\t\tprops: {},\r\n\t\t\t\t\tpoints: [],\r\n\t\t\t\t\tlinks: [],\r\n\t\t\t\t\textProps: []\r\n\t\t\t\t}\r\n\t\t\t} else throw new TypeError(\"Line starts with Add, yet no match found for line #\"+index+\".\");\r\n\t\t} else if(line == '}') {\r\n\t\t\tif(curelem != null)  {\r\n\t\t\t\tif(lines[index+1]) {\r\n\t\t\t\t\tif(lines[index+1].trimStart() == 'BEGIN_SDK') {\r\n\t\t\t\t\t\tcontainerelem.push(curelem);\r\n\t\t\t\t\t\tcontainerelem[containerelem.length-1].elements = [];\r\n\t\t\t\t\t} else if(containerelem.length > 0) {\r\n\t\t\t\t\t\tcontainerelem[containerelem.length-1].elements.push(curelem);\r\n\t\t\t\t\t\tcurelem = null;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tscheme.elements.push(curelem);\r\n\t\t\t\t\t\tcurelem = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tscheme.elements.push(curelem);\r\n\t\t\t\t\tcurelem = null;\r\n\t\t\t\t}\r\n\t\t\t} else throw new TypeError('Found \"}\" on line #'+index+', but no element is being processed.');\r\n\t\t} else if(line == 'END_SDK') {\r\n\t\t\tif(containerelem.length == 1) {\r\n\t\t\t\tscheme.elements.push(containerelem[0]);\r\n\t\t\t\tcontainerelem = [];\r\n\t\t\t} else if(containerelem.length > 1) {\r\n\t\t\t\tcontainerelem[containerelem.length-2].elements.push(containerelem.pop());\r\n\t\t\t} else {\r\n\t\t\t\tthrow new TypeError(\"Found a END_SDK, yet no container to be seen.\");\r\n\t\t\t}\r\n\t\t} else if(curelem != null && line != '{') {\r\n\t\t\tlet el = line;\r\n\t\t\tlet prop = el.split(\"=\");\r\n\t\t\tlet point = regexPoint.exec(el);\r\n\t\t\tlet link = regexLink.exec(el);\r\n\t\t\tlet makeext = regexMakeExt.exec(el);\r\n\t\t\tif(point) {\r\n\t\t\t\tcurelem.points.push(point[1]);\r\n\t\t\t} else if(link) {\r\n\t\t\t\tlet coordsbefore = link[4].toString().replaceAll('(','[').replaceAll(')','],');\r\n\t\t\t\tlet coords = JSON.parse('['+coordsbefore.substring(0,coordsbefore.length - 1)+']');\r\n\t\t\t\tcurelem.links.push({\r\n\t\t\t\t\tpoint: link[1],\r\n\t\t\t\t\tto: {\r\n\t\t\t\t\t\tid: link[2],\r\n\t\t\t\t\t\tname: link[3],\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcoords\r\n\t\t\t\t});\r\n\t\t\t} else if(makeext) {\r\n\t\t\t\tcurelem.extProps.push({\r\n\t\t\t\t\tname: makext[3],\r\n\t\t\t\t\tdescription: makext[2],\r\n\t\t\t\t\tprop: makeext[1]\r\n\t\t\t\t});\r\n\t\t\t} else if(prop) {\r\n\t\t\t\tcurelem.props[prop[0]] = prop[1];\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\treturn JSON.stringify(scheme,null,prettyPrint?'  ':null);\r\n};\r\n\r\n/**\r\n * Reads a file in Windows-1251, and reconverts it into UTF-8.\r\n * @async\r\n * @function readFileW1251\r\n * @param {string} filename - Path to a file.\r\n * @returns {string} The file contents.\r\n  */\r\nexports.readFileW1251 = readFile_win1251;"]}