diff options
Diffstat (limited to 'subex/subexstate.go')
| -rw-r--r-- | subex/subexstate.go | 23 | 
1 files changed, 23 insertions, 0 deletions
| diff --git a/subex/subexstate.go b/subex/subexstate.go index 3bcbdee..bf5bab9 100644 --- a/subex/subexstate.go +++ b/subex/subexstate.go @@ -104,6 +104,29 @@ func (state SubexCopyNumberState) accepting(aux auxiliaryState) []OutputStack {  	return nil  } +type SubexNumberMappingState struct { +	Range NumberExpr +	Replace []NumberExpr +	next SubexState +} +func (state SubexNumberMappingState) eat(aux auxiliaryState, edible walk.Edible) []SubexBranch { +	number, isNumber := edible.(walk.NumberValue) +	if !isNumber || state.Range.Eval(float64(number)) == 0.0 { +		return nil +	} +	var res []walk.Value +	for _, expr := range state.Replace { +		res = append(res, walk.NumberValue(expr.Eval(float64(number)))) +	} +	return []SubexBranch {{ +		state: state.next, +		aux: aux.topAppend(res), +	}} +} +func (state SubexNumberMappingState) accepting(aux auxiliaryState) []OutputStack { +	return nil +} +  // Just pushes to the OutputStack and hands over to the next state  // Used to capture the output of the state being handed over to  type SubexCaptureBeginState struct { | 
