diff options
| author | Charlie Stanton <charlie@shtanton.xyz> | 2023-04-21 10:06:58 +0100 | 
|---|---|---|
| committer | Charlie Stanton <charlie@shtanton.xyz> | 2023-04-21 10:06:58 +0100 | 
| commit | 40276dc66bffda2692096fb1facbc7cf44e18fde (patch) | |
| tree | 03055914c6c1acdb890c5c85f6b35938ac0116a3 /subex | |
| parent | f1e5bc37723a4faa30bbfeed392c31489914eb50 (diff) | |
| download | stred-go-40276dc66bffda2692096fb1facbc7cf44e18fde.tar | |
Add ^xyz^ as a shorthand for ="xyz"= in subex
Diffstat (limited to 'subex')
| -rw-r--r-- | subex/parse.go | 25 | 
1 files changed, 18 insertions, 7 deletions
| diff --git a/subex/parse.go b/subex/parse.go index 106663d..b403adc 100644 --- a/subex/parse.go +++ b/subex/parse.go @@ -166,7 +166,7 @@ func parseReplacement(l RuneReader) (output []OutputContent) {  		switch r {  			case eof:  				panic("Missing closing \"") -			case '=': +			case '=', '^':  				break loop  			case '$':  				slot := l.Next() @@ -287,6 +287,23 @@ func parseSubex(l RuneReader, minPower int) SubexAST {  		case '=':  			replacement := parseReplacement(l)  			lhs = SubexASTOutput{replacement} +		case '`': +			literals := parseNonStringLiteral(l) +			lhs = SubexASTEmpty{} +			for _, literal := range literals { +				lhs = SubexASTConcat {lhs, SubexASTCopyAtom {literal}} +			} +		case '^': +			replacement := parseReplacement(l) +			replacement = append( +				[]OutputContent{OutputAtomLiteral {walk.StringTerminal{}}}, +				replacement... +			) +			replacement = append( +				replacement, +				OutputAtomLiteral {walk.StringTerminal{}}, +			) +			lhs = SubexASTOutput {replacement}  		case '.':  			lhs = SubexASTCopyAny{}  		case '?': @@ -301,12 +318,6 @@ func parseSubex(l RuneReader, minPower int) SubexAST {  			lhs = SubexASTCopyValue{}  		case '"':  			lhs = SubexASTCopyAtom {walk.StringTerminal{}} -		case '`': -			literals := parseNonStringLiteral(l) -			lhs = SubexASTEmpty{} -			for _, literal := range literals { -				lhs = SubexASTConcat {lhs, SubexASTCopyAtom {literal}} -			}  		case '~':  			literals := parseNonStringLiteral(l)  			var replacement []OutputContent | 
