VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/libs/absol-full/dist/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/libs/absol-full/dist/js/mdls__absol-sheet__js__fx__ExcelParser.js
/*** module: node_modules/absol-sheet/js/fx/ExcelParser.js ***/
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.excelFormula2KVFormula = excelFormula2KVFormula;

var _DPParseInstance = require("absol/src/Pharse/DPParseInstance");

var _DPParser = _interopRequireDefault(require("absol/src/Pharse/DPParser"));

var _OOP = _interopRequireDefault(require("absol/src/HTML5/OOP"));

var _SCCodeGenerator = _interopRequireDefault(require("absol/src/SCLang/SCCodeGenerator"));


var rules = [];
var elementRegexes = [['string', /("(?:[^"\\]|\\.)*?")|('(?:[^'\\]|\\.)*?')/], ['number', /(\d+([.]\d*)?([eE][+-]?\d+)?|[.]\d+([eE][+-]?\d+)?)/], ['word', /[_a-zA-Z][_a-zA-Z0-9]*/], ['skip', /([\s\r\n]+)|(\/\/[^\n]*)|(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)/], ['dsymbol', /\+\+|--|==|!=|<=|>=/], ['tsymbol', /\.\.\./], ['symbol', /[^\s_a-zA-Z0-9]/]];
var operatorOrder = {
  '%': 3,
  '^': 4,
  '*': 5,
  '/': 5,
  '+': 6,
  '-': 6,
  '<': 9,
  '>': 9,
  '<=': 9,
  '>=': 9,
  '=': 9,
  '<>': 9 // 'AND': 14,
  // '&&': 14,
  // 'OR': 15,
  // '||': 15,
  // 'XOR': 15,

};
rules.push({
  target: 'ident',
  elements: ['.word'],
  toAST: function (parsedNode) {
    return {
      type: 'Identifier',
      name: parsedNode.children[0].content
    };
  }
});
rules.push({
  target: 'args_list',
  elements: ['exp'],
  toAST: function (parsedNode) {
    return (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0]);
  },
  toASTChain: function (parsedNode) {
    return [(0, _DPParseInstance.parsedNodeToAST)(parsedNode)];
  }
});
rules.push({
  target: 'args_list',
  elements: ['args_list', '_,', 'exp'],
  longestOnly: true,
  ident: 'args_list_rec',
  toASTChain: function (parsedNode) {
    return (0, _DPParseInstance.parsedNodeToASTChain)(parsedNode.children[0]).concat((0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[2]));
  }
});
rules.push({
  target: 'function_callee',
  elements: ['ident'],
  toAST: function (parsedNode) {
    return (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0]);
  }
});
rules.push({
  target: 'function_call',
  elements: ['function_callee', '_(', 'args_list', '_)'],
  toAST: function (parsedNode) {
    return {
      type: 'CallExpression',
      arguments: parsedNode.children[2].rule.toASTChain(parsedNode.children[2]),
      callee: (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0])
    };
  }
});
rules.push({
  target: 'function_call',
  elements: ['function_callee', '_(', '_)'],
  toAST: function (parsedNode) {
    return {
      type: 'CallExpression',
      arguments: [],
      callee: (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0])
    };
  }
});
rules.push({
  target: 'exp',
  elements: ['ident'],
  toAST: function (parsedNode) {
    //todo: ident is booolean const
    return (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0]);
  }
});
rules.push({
  target: 'number',
  elements: ['.number'],
  toAST: function (parsedNode) {
    return {
      type: 'NumericLiteral',
      value: parseFloat(parsedNode.children[0].content)
    };
  }
});
rules.push({
  target: 'string',
  elements: ['.string'],
  toAST: function (parsedNode) {
    var content = parsedNode.children[0].content;
    if (content[0] === "'") content = '"' + content.substring(1, content.length - 1).replace(/["]/g, '\\"') + '"';
    return {
      type: 'StringLiteral',
      value: JSON.parse(content)
    };
  }
});
rules.push({
  target: 'exp',
  elements: ['number'],
  toAST: function (parsedNode) {
    return (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0]);
  }
});
rules.push({
  target: 'exp',
  elements: ['string'],
  toAST: function (parsedNode) {
    return (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0]);
  }
});
['^', '+', '-', '*', '/', '=', '<>', '<', '>', '>=', '<='].forEach(function (op) {
  rules.push({
    target: 'bin_op',
    elements: ['_' + op],
    toAST: function (parsedNode) {
      return {
        type: "BinaryOperator",
        content: op
      };
    }
  });
});
rules.push({
  target: 'exp',
  elements: ['exp', 'bin_op', 'exp'],
  longestOnly: true,
  ident: 'bin_op_rec',
  toASTChain: function (parseNode) {
    var res = [];

    if (parseNode.children[0].rule === this) {
      res = res.concat(this.toASTChain(parseNode.children[0]));
    } else {
      res.push((0, _DPParseInstance.parsedNodeToAST)(parseNode.children[0]));
    }

    res.push(parseNode.children[1].children[0]);

    if (parseNode.children[2].rule === this) {
      res = res.concat(this.toASTChain(parseNode.children[2]));
    } else {
      res.push((0, _DPParseInstance.parsedNodeToAST)(parseNode.children[2]));
    }

    return res;
  },
  toAST: function (parsedNode) {
    var chain = this.toASTChain(parsedNode);
    var stack = [];
    var item;
    var newNode;

    while (chain.length > 0) {
      item = chain.shift();

      if (item.content in operatorOrder) {
        while (stack.length >= 3 && operatorOrder[stack[stack.length - 2].content] <= operatorOrder[item.content]) {
          newNode = {
            type: 'BinaryExpression'
          };
          newNode.right = stack.pop();
          newNode.operator = stack.pop();
          newNode.left = stack.pop();
          stack.push(newNode);
        }
      }

      stack.push(item);
    }

    while (stack.length >= 3) {
      newNode = {
        type: 'BinaryExpression'
      };
      newNode.right = stack.pop();
      newNode.operator = stack.pop();
      newNode.left = stack.pop();
      stack.push(newNode);
    }

    return stack.pop();
  }
});
rules.push({
  target: 'exp',
  elements: ['function_call'],
  toAST: function (parsedNode) {
    return (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0]);
  }
});
rules.push({
  target: 'bracket_group',
  elements: ['_(', 'exp', '_)'],
  toAST: function (parsedNode) {
    return (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[1]);
  }
});
rules.push({
  target: 'exp',
  elements: ['bracket_group'],
  toAST: function (parsedNode) {
    return (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0]);
  }
});
['+', '-'].forEach(function (op) {
  ['number', 'bracket_group', 'ident', 'function_call', 'mem_exp', 'unary_exp', 'percent_exp'].forEach(function (arg) {
    rules.push({
      target: 'unary_exp',
      elements: ['_' + op, arg],
      toAST: function (parsedNode) {
        return {
          type: 'UnaryExpression',
          argument: (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[1]),
          operator: {
            type: 'UnaryOperator',
            content: op
          }
        };
      }
    });
  });
});
rules.push({
  target: 'exp',
  elements: ['unary_exp'],
  toAST: function (parsedNode) {
    return (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0]);
  }
});
['number', 'bracket_group', 'ident', 'function_call', 'unary_exp'].forEach(function (arg) {
  rules.push({
    target: 'percent_exp',
    elements: [arg, '_%'],
    toAST: function (parsedNode) {
      return {
        type: 'BinaryExpression',
        left: (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0]),
        operator: {
          type: "BinaryOperator",
          content: '/'
        },
        right: {
          type: 'NumericLiteral',
          value: 100
        }
      };
    }
  });
});
rules.push({
  target: 'exp',
  elements: ['percent_exp'],
  toAST: function (parsedNode) {
    return (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[0]);
  }
});
rules.push({
  target: 'formula',
  elements: ['_=', 'exp'],
  longestOnly: true,
  toAST: function (parsedNode) {
    return {
      type: 'Formula',
      expression: (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[1])
    };
  }
}); //

rules.push({
  target: 'formula',
  elements: ['exp'],
  longestOnly: true,
  toAST: function (parsedNode) {
    return {
      type: 'Formula',
      expression: (0, _DPParseInstance.parsedNodeToAST)(parsedNode.children[1])
    };
  }
});
/**
 * @extends SCCodeGenerator
 * @constructor
 */

function KVFormulaGenerator() {}

_OOP.default.mixClass(KVFormulaGenerator, _SCCodeGenerator.default);

KVFormulaGenerator.prototype.visitors = Object.assign({}, KVFormulaGenerator.prototype.visitors);
/**
 * @this KVFormulaGenerator
 * @param node
 * @constructor
 */

KVFormulaGenerator.prototype.visitors.Formula = function (node) {
  return this.accept(node.expression);
};

KVFormulaGenerator.prototype.visitors.BinaryExpressionNormal = KVFormulaGenerator.prototype.visitors.BinaryExpression;
/**
 * @this KVFormulaGenerator
 * @param node
 * @returns {*|string}
 * @constructor
 */

KVFormulaGenerator.prototype.visitors.BinaryExpression = function (node) {
  if (node.operator.content === '^') {
    return `pow(${this.accept(node.left)}, ${this.accept(node.right)})`;
  } else if (node.operator.content === '=') {
    return `${this.accept(node.left)} == ${this.accept(node.right)}`;
  } else return KVFormulaGenerator.prototype.visitors.BinaryExpressionNormal.apply(this, arguments);
};

KVFormulaGenerator.prototype.visitors.IdentifierNormal = KVFormulaGenerator.prototype.visitors.Identifier;

KVFormulaGenerator.prototype.visitors.Identifier = function (node) {
  var text = KVFormulaGenerator.prototype.visitors.IdentifierNormal.apply(this, arguments);
  var tl = text.toLowerCase();

  if (tl === 'true' || tl === 'false') {
    text = tl;
  }

  return text;
};
/**
 * @this KVFormulaGenerator
 * @param node
 * @returns {*|string}
 * @constructor
 */


KVFormulaGenerator.prototype.visitors.CallExpression = function (node) {
  var res = '';

  if (node.callee && node.callee.type === 'Identifier') {
    res += this.accept(node.callee).toLowerCase();
  } else {
    res += '(' + this.accept(node.callee) + ')';
  }

  res += '(';
  res += node.arguments.map(arg => this.accept(arg)).join(', ');
  res += ')';
  return res;
};

var parser = new _DPParser.default({
  rules: rules,
  elementRegexes: elementRegexes
});
var generator = new KVFormulaGenerator();

function excelFormula2KVFormula(code) {
  var rows, errorHTML, error, token, charIdx, rowIdx;
  var result = parser.parse(code, 'formula');
  if (result.ast) return generator.generate(result.ast);else if (result.error) {
    rows = code.split('\n');
    errorHTML = '';
    error = result.error;

    switch (error.type) {
      case 'unexpected':
        errorHTML = `<span style="color:red">${error.message}</span>`;
        token = result.tokens[error.tokenIdx];
        charIdx = token.start;
        rowIdx = 0;

        while (rowIdx < rows.length) {
          if (charIdx <= rows[rowIdx].length) {
            errorHTML = `<strong>Line ${rowIdx + 1}:</strong> ` + errorHTML;
            errorHTML += '<br>';
            errorHTML += `<div style="color:blue">${rows[rowIdx]}</div>`;
            errorHTML += `<div style=" --text-color:red" class="as-blink-text">${' '.repeat(charIdx)}^</div>`;
            break;
          }

          charIdx -= rows[rowIdx].length + 1; //by \n

          rowIdx++;
        }

        break;

      case 'expected':
        if (error.expectedToken && error.expectedToken) {
          error.message = "Incomplete formula!";
        }

        errorHTML = `<span style="color:red">${error.message}</span>`;
        break;

      default:
        errorHTML = `<span style="color:red">${error.message}</span>`;
        break;
    }

    error.html = errorHTML;
    throw error;
  }
} //
// console.log(excelFormula2KVFormula('= 2 *  30% + x% * *100 ^ x + 100 * 9%'));
// //
// // var result = ExcelFormulaParser.parse('= 2 *  30%%', 'formula');
// // console.log(result);

VaKeR 2022