| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 | import { LanguageService } from '../services/languageService';import {createInputFun, createOutputFun} from './lib/io';import {createLengthFun, createLowercaseFun,  createrCharAtFun, createSubstringFun,  createUppercaseFun} from './lib/strings';import {createMatrixColumnsFun, createMatrixLinesFun,  createNumElementsFun} from './lib/arrays';import {createCastBoolFun, createCastIntFun,  createCastRealFun, createCastStringFun,  createIsBoolFun, createIsIntFun,  createIsRealFun} from './lib/lang';import {createAbsFun, createCosFun,  createInvertFun, createLogFun,  createMaxFun, createMinFun,  createNegateFun, createPowFun,  createSinFun, createSqrtFun,  createTanFun, createRandFun} from './lib/math';function valueToKey (value, object) {  for (const key in object) {    if(object.hasOwnProperty(key)){      if (object[key] === value) {        return key;      }    }  }  return null;}function concatObjects (...objs) {  let result = {};  for (let i = 0; i < objs.length; i++) {    const obj = objs[i];    for(const key in obj) {      if(obj.hasOwnProperty(key)) {        result[key] = obj[key];      }    }  }  return result;}const libsObject = {  $mathLib: {    $sin: createSinFun(),    $cos: createCosFun(),    $tan: createTanFun(),    $sqrt: createSqrtFun(),    $pow: createPowFun(),    $log: createLogFun(),    $abs: createAbsFun(),    $negate: createNegateFun(),    $invert: createInvertFun(),    $max: createMaxFun(),    $min: createMinFun(),    $rand: createRandFun()  },  $ioLib: {    $read: createInputFun(),    $write: createOutputFun()  },  $strLib: {    $substring: createSubstringFun(),    $length: createLengthFun(),    $uppercase: createUppercaseFun(),    $lowercase: createLowercaseFun(),    $charAt: createrCharAtFun(),  },  $arrayLib: {    $numElements: createNumElementsFun(),    $matrixLines: createMatrixLinesFun(),    $matrixColumns: createMatrixColumnsFun()  },  $langLib: {    $isReal: createIsRealFun(),    $isInt: createIsIntFun(),    $isBool: createIsBoolFun(),    $castReal: createCastRealFun(),    $castInt: createCastIntFun(),    $castBool: createCastBoolFun(),    $castString: createCastStringFun()  }}const funcsObject = concatObjects(libsObject.$ioLib, libsObject.$langLib,  libsObject.$strLib, libsObject.$arrayLib);export const LanguageDefinedFunction = Object.freeze({  getMainFunctionName: () => LanguageService.getCurrentLangFuncs().main_function,  getInternalName: (localName) => {    if (localName.indexOf(".") !== -1) {      const names = localName.split(".");      const lib = valueToKey(names[0], LanguageService.getCurrentLangLibs());      const internalName = valueToKey(names[1], LanguageService.getCurrentLangFuncs());      if (lib === null || internalName === null) {        return null;      }      return lib + "." + internalName;    }    const funcName = valueToKey(localName, LanguageService.getCurrentLangFuncs());    if(funcName !== null) {      if(funcsObject[funcName]) {        return funcName;      }    }    return null;  },  getFunction: (internalName) => {    if (internalName.indexOf(".") !== -1) {      const names = internalName.split(".");      const libName = names[0];      const funName = names[1];      return libsObject[libName][funName];    }    return funcsObject[internalName];  },  getLocalName: (internalName) => {    if (internalName.indexOf(".") !== -1) {      const names = internalName.split(".");      const libName = LanguageService.getCurrentLangLibs()[names[0]];      const funName = LanguageService.getCurrentLangFuncs()[names[1]];      return `${libName}.${funName}`;    } else if (LanguageService.getCurrentLangFuncs()[internalName]) {      return LanguageService.getCurrentLangFuncs()[internalName];    } else {       return internalName    }  }});
 |