the x was for indeX retard. wip code here
This commit is contained in:
parent
abe49d49c2
commit
69e9d6ca1d
|
@ -11,9 +11,9 @@ import { loopCountCheck } from 'artigen/managers/loopManager.ts';
|
||||||
import { tokenizeMath } from 'artigen/math/mathTokenizer.ts';
|
import { tokenizeMath } from 'artigen/math/mathTokenizer.ts';
|
||||||
|
|
||||||
import { reduceCountDetails } from 'artigen/utils/counter.ts';
|
import { reduceCountDetails } from 'artigen/utils/counter.ts';
|
||||||
import { closeInternal, internalWrapRegex, openInternal } from 'artigen/utils/escape.ts';
|
import { closeInternal, cmdSplitRegex, internalWrapRegex, openInternal } from 'artigen/utils/escape.ts';
|
||||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||||
import { getMatchingInternalId, getMatchingPostfixId } from 'artigen/utils/parenBalance.ts';
|
import { assertGroupBalance, getMatchingGroupIdx, getMatchingInternalIdx, getMatchingPostfixIdx } from 'artigen/utils/parenBalance.ts';
|
||||||
import { basicReducer } from 'artigen/utils/reducers.ts';
|
import { basicReducer } from 'artigen/utils/reducers.ts';
|
||||||
|
|
||||||
// tokenizeCmd expects a string[] of items that are either config.prefix/config.postfix or some text that contains math and/or dice rolls
|
// tokenizeCmd expects a string[] of items that are either config.prefix/config.postfix or some text that contains math and/or dice rolls
|
||||||
|
@ -34,7 +34,7 @@ export const tokenizeCmd = (
|
||||||
loopCountCheck();
|
loopCountCheck();
|
||||||
|
|
||||||
const openIdx = cmd.indexOf(config.prefix);
|
const openIdx = cmd.indexOf(config.prefix);
|
||||||
const closeIdx = getMatchingPostfixId(cmd, openIdx);
|
const closeIdx = getMatchingPostfixIdx(cmd, openIdx);
|
||||||
|
|
||||||
const currentCmd = cmd.slice(openIdx + 1, closeIdx);
|
const currentCmd = cmd.slice(openIdx + 1, closeIdx);
|
||||||
|
|
||||||
|
@ -131,10 +131,27 @@ export const tokenizeCmd = (
|
||||||
}
|
}
|
||||||
return [returnData, countDetails, rollDists];
|
return [returnData, countDetails, rollDists];
|
||||||
} else {
|
} else {
|
||||||
loggingEnabled && log(LT.LOG, `Tokenizing math ${JSON.stringify(cmd)}`);
|
// Check for any groups and handle them?
|
||||||
|
const groupParts = cmd
|
||||||
|
.join('')
|
||||||
|
.split(/([{,}])/g)
|
||||||
|
.filter((x) => x);
|
||||||
|
if (groupParts.includes('{')) {
|
||||||
|
assertGroupBalance(groupParts);
|
||||||
|
}
|
||||||
|
while (groupParts.includes('{')) {
|
||||||
|
loggingEnabled && log(LT.LOG, `Handling Groups | Current cmd: ${JSON.stringify(groupParts)}`);
|
||||||
|
const openIdx = groupParts.indexOf('}');
|
||||||
|
const closeIdx = getMatchingGroupIdx;
|
||||||
|
const temp = cmd.join('').replaceAll('{', '').replaceAll('}', '').replaceAll(',', '');
|
||||||
|
cmd = temp.split(cmdSplitRegex);
|
||||||
|
}
|
||||||
|
|
||||||
|
const cmdForMath = groupParts.join('');
|
||||||
|
loggingEnabled && log(LT.LOG, `Tokenizing math ${cmdForMath}`);
|
||||||
|
|
||||||
// Solve the math and rolls for this cmd
|
// Solve the math and rolls for this cmd
|
||||||
const [tempData, tempCounts, tempDists] = tokenizeMath(cmd.join(''), modifiers, previousResults);
|
const [tempData, tempCounts, tempDists] = tokenizeMath(cmdForMath, modifiers, previousResults);
|
||||||
const data = tempData[0];
|
const data = tempData[0];
|
||||||
loggingEnabled &&
|
loggingEnabled &&
|
||||||
log(LT.LOG, `Solved math is back ${JSON.stringify(data)} | ${JSON.stringify(returnData)} ${JSON.stringify(tempCounts)} ${JSON.stringify(tempDists)}`);
|
log(LT.LOG, `Solved math is back ${JSON.stringify(data)} | ${JSON.stringify(returnData)} ${JSON.stringify(tempCounts)} ${JSON.stringify(tempDists)}`);
|
||||||
|
@ -150,7 +167,7 @@ export const tokenizeCmd = (
|
||||||
loopCountCheck();
|
loopCountCheck();
|
||||||
|
|
||||||
const openIdx = initConf.indexOf(openInternal);
|
const openIdx = initConf.indexOf(openInternal);
|
||||||
const closeIdx = getMatchingInternalId(initConf, openIdx);
|
const closeIdx = getMatchingInternalIdx(initConf, openIdx);
|
||||||
|
|
||||||
// Take first returnData out of array
|
// Take first returnData out of array
|
||||||
const dataToMerge = returnData.shift();
|
const dataToMerge = returnData.shift();
|
||||||
|
|
|
@ -11,7 +11,7 @@ import { loopCountCheck } from 'artigen/managers/loopManager.ts';
|
||||||
|
|
||||||
import { legalMath, legalMathOperators } from 'artigen/utils/legalMath.ts';
|
import { legalMath, legalMathOperators } from 'artigen/utils/legalMath.ts';
|
||||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||||
import { getMatchingParenId } from 'artigen/utils/parenBalance.ts';
|
import { getMatchingParenIdx } from 'artigen/utils/parenBalance.ts';
|
||||||
|
|
||||||
// mathSolver(conf, wrapDetails) returns one condensed SolvedStep
|
// mathSolver(conf, wrapDetails) returns one condensed SolvedStep
|
||||||
// mathSolver is a function that recursively solves the full roll and math
|
// mathSolver is a function that recursively solves the full roll and math
|
||||||
|
@ -39,7 +39,7 @@ export const mathSolver = (conf: MathConf[], wrapDetails = false): SolvedStep =>
|
||||||
loggingEnabled && log(LT.LOG, `Evaluating roll ${JSON.stringify(conf)} | Looking for (`);
|
loggingEnabled && log(LT.LOG, `Evaluating roll ${JSON.stringify(conf)} | Looking for (`);
|
||||||
// Get first open parenthesis
|
// Get first open parenthesis
|
||||||
let openParenIdx = conf.indexOf('(');
|
let openParenIdx = conf.indexOf('(');
|
||||||
const closeParenIdx = getMatchingParenId(conf, openParenIdx);
|
const closeParenIdx = getMatchingParenIdx(conf, openParenIdx);
|
||||||
|
|
||||||
// Call the solver on the items between openParenIdx and closeParenIdx (excluding the parens)
|
// Call the solver on the items between openParenIdx and closeParenIdx (excluding the parens)
|
||||||
const parenSolve = mathSolver(conf.slice(openParenIdx + 1, closeParenIdx), true);
|
const parenSolve = mathSolver(conf.slice(openParenIdx + 1, closeParenIdx), true);
|
||||||
|
|
|
@ -58,7 +58,7 @@ export const assertParenBalance = (conf: MathConf[]) => checkBalance(conf, '(',
|
||||||
export const assertPrePostBalance = (conf: MathConf[]) => checkBalance(conf, config.prefix, config.postfix, 'PrefixPostfix', false, 0);
|
export const assertPrePostBalance = (conf: MathConf[]) => checkBalance(conf, config.prefix, config.postfix, 'PrefixPostfix', false, 0);
|
||||||
|
|
||||||
// getMatchingXIdx gets the matching X, also partially verifies the conf has balanced X
|
// getMatchingXIdx gets the matching X, also partially verifies the conf has balanced X
|
||||||
export const getMatchingGroupId = (conf: MathConf[], openIdx: number): number => checkBalance(conf, '{', '}', 'Group', true, openIdx);
|
export const getMatchingGroupIdx = (conf: MathConf[], openIdx: number): number => checkBalance(conf, '{', '}', 'Group', true, openIdx);
|
||||||
export const getMatchingInternalId = (conf: MathConf[], openIdx: number): number => checkBalance(conf, openInternal, closeInternal, 'Internal', true, openIdx);
|
export const getMatchingInternalIdx = (conf: MathConf[], openIdx: number): number => checkBalance(conf, openInternal, closeInternal, 'Internal', true, openIdx);
|
||||||
export const getMatchingParenId = (conf: MathConf[], openIdx: number): number => checkBalance(conf, '(', ')', 'Paren', true, openIdx);
|
export const getMatchingParenIdx = (conf: MathConf[], openIdx: number): number => checkBalance(conf, '(', ')', 'Paren', true, openIdx);
|
||||||
export const getMatchingPostfixId = (conf: MathConf[], openIdx: number): number => checkBalance(conf, config.prefix, config.postfix, 'PrefixPostfix', true, openIdx);
|
export const getMatchingPostfixIdx = (conf: MathConf[], openIdx: number): number => checkBalance(conf, config.prefix, config.postfix, 'PrefixPostfix', true, openIdx);
|
||||||
|
|
Loading…
Reference in New Issue