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 { 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 { getMatchingInternalId, getMatchingPostfixId } from 'artigen/utils/parenBalance.ts';
 | 
			
		||||
import { assertGroupBalance, getMatchingGroupIdx, getMatchingInternalIdx, getMatchingPostfixIdx } from 'artigen/utils/parenBalance.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
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ export const tokenizeCmd = (
 | 
			
		|||
    loopCountCheck();
 | 
			
		||||
 | 
			
		||||
    const openIdx = cmd.indexOf(config.prefix);
 | 
			
		||||
    const closeIdx = getMatchingPostfixId(cmd, openIdx);
 | 
			
		||||
    const closeIdx = getMatchingPostfixIdx(cmd, openIdx);
 | 
			
		||||
 | 
			
		||||
    const currentCmd = cmd.slice(openIdx + 1, closeIdx);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -131,10 +131,27 @@ export const tokenizeCmd = (
 | 
			
		|||
    }
 | 
			
		||||
    return [returnData, countDetails, rollDists];
 | 
			
		||||
  } 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
 | 
			
		||||
    const [tempData, tempCounts, tempDists] = tokenizeMath(cmd.join(''), modifiers, previousResults);
 | 
			
		||||
    const [tempData, tempCounts, tempDists] = tokenizeMath(cmdForMath, modifiers, previousResults);
 | 
			
		||||
    const data = tempData[0];
 | 
			
		||||
    loggingEnabled &&
 | 
			
		||||
      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();
 | 
			
		||||
 | 
			
		||||
      const openIdx = initConf.indexOf(openInternal);
 | 
			
		||||
      const closeIdx = getMatchingInternalId(initConf, openIdx);
 | 
			
		||||
      const closeIdx = getMatchingInternalIdx(initConf, openIdx);
 | 
			
		||||
 | 
			
		||||
      // Take first returnData out of array
 | 
			
		||||
      const dataToMerge = returnData.shift();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ import { loopCountCheck } from 'artigen/managers/loopManager.ts';
 | 
			
		|||
 | 
			
		||||
import { legalMath, legalMathOperators } from 'artigen/utils/legalMath.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 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 (`);
 | 
			
		||||
    // Get first open parenthesis
 | 
			
		||||
    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)
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
// 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 getMatchingInternalId = (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 getMatchingPostfixId = (conf: MathConf[], openIdx: number): number => checkBalance(conf, config.prefix, config.postfix, 'PrefixPostfix', true, openIdx);
 | 
			
		||||
export const getMatchingGroupIdx = (conf: MathConf[], openIdx: number): number => checkBalance(conf, '{', '}', 'Group', true, openIdx);
 | 
			
		||||
export const getMatchingInternalIdx = (conf: MathConf[], openIdx: number): number => checkBalance(conf, openInternal, closeInternal, 'Internal', true, openIdx);
 | 
			
		||||
export const getMatchingParenIdx = (conf: MathConf[], openIdx: number): number => checkBalance(conf, '(', ')', 'Paren', true, openIdx);
 | 
			
		||||
export const getMatchingPostfixIdx = (conf: MathConf[], openIdx: number): number => checkBalance(conf, config.prefix, config.postfix, 'PrefixPostfix', true, openIdx);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue