forked from toolshed/abra
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Original work Copyright (c) 2016 Jonas Obrist (https://github.com/ojii/gettext.go)
 | 
						|
// Modified work Copyright (c) 2018 DeineAgentur UG https://www.deineagentur.com
 | 
						|
// Modified work Copyright (c) 2018-present gotext maintainers (https://github.com/leonelquinteros/gotext)
 | 
						|
//
 | 
						|
// Licensed under the 3-Clause BSD License. See LICENSE in the project root for license information.
 | 
						|
 | 
						|
package plurals
 | 
						|
 | 
						|
// Expression is a plurals expression. Eval evaluates the expression for
 | 
						|
// a given n value. Use plurals.Compile to generate Expression instances.
 | 
						|
type Expression interface {
 | 
						|
	Eval(n uint32) int
 | 
						|
}
 | 
						|
 | 
						|
type constValue struct {
 | 
						|
	value int
 | 
						|
}
 | 
						|
 | 
						|
func (c constValue) Eval(n uint32) int {
 | 
						|
	return c.value
 | 
						|
}
 | 
						|
 | 
						|
type test interface {
 | 
						|
	test(n uint32) bool
 | 
						|
}
 | 
						|
 | 
						|
type ternary struct {
 | 
						|
	test      test
 | 
						|
	trueExpr  Expression
 | 
						|
	falseExpr Expression
 | 
						|
}
 | 
						|
 | 
						|
func (t ternary) Eval(n uint32) int {
 | 
						|
	if t.test.test(n) {
 | 
						|
		if t.trueExpr == nil {
 | 
						|
			return -1
 | 
						|
		}
 | 
						|
		return t.trueExpr.Eval(n)
 | 
						|
	}
 | 
						|
	if t.falseExpr == nil {
 | 
						|
		return -1
 | 
						|
	}
 | 
						|
	return t.falseExpr.Eval(n)
 | 
						|
}
 |