Mercurial > yakumo_izuru > aya
diff vendor/github.com/eknkc/amber/runtime.go @ 66:787b5ee0289d draft
Use vendored modules
Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author | yakumo.izuru |
---|---|
date | Sun, 23 Jul 2023 13:18:53 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/github.com/eknkc/amber/runtime.go Sun Jul 23 13:18:53 2023 +0000 @@ -0,0 +1,287 @@ +package amber + +import ( + "encoding/json" + "fmt" + "html/template" + "reflect" +) + +var FuncMap = template.FuncMap{ + "__amber_add": runtime_add, + "__amber_sub": runtime_sub, + "__amber_mul": runtime_mul, + "__amber_quo": runtime_quo, + "__amber_rem": runtime_rem, + "__amber_minus": runtime_minus, + "__amber_plus": runtime_plus, + "__amber_eql": runtime_eql, + "__amber_gtr": runtime_gtr, + "__amber_lss": runtime_lss, + + "json": runtime_json, + "unescaped": runtime_unescaped, +} + +func runtime_add(x, y interface{}) interface{} { + vx, vy := reflect.ValueOf(x), reflect.ValueOf(y) + switch vx.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Int() + vy.Int() + case reflect.Float32, reflect.Float64: + return float64(vx.Int()) + vy.Float() + case reflect.String: + return fmt.Sprintf("%d%s", vx.Int(), vy.String()) + } + } + case reflect.Float32, reflect.Float64: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Float() + float64(vy.Int()) + case reflect.Float32, reflect.Float64: + return vx.Float() + vy.Float() + case reflect.String: + return fmt.Sprintf("%f%s", vx.Float(), vy.String()) + } + } + case reflect.String: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return fmt.Sprintf("%s%d", vx.String(), vy.Int()) + case reflect.Float32, reflect.Float64: + return fmt.Sprintf("%s%f", vx.String(), vy.Float()) + case reflect.String: + return fmt.Sprintf("%s%s", vx.String(), vy.String()) + } + } + } + + return "<nil>" +} + +func runtime_sub(x, y interface{}) interface{} { + vx, vy := reflect.ValueOf(x), reflect.ValueOf(y) + switch vx.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Int() - vy.Int() + case reflect.Float32, reflect.Float64: + return float64(vx.Int()) - vy.Float() + } + } + case reflect.Float32, reflect.Float64: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Float() - float64(vy.Int()) + case reflect.Float32, reflect.Float64: + return vx.Float() - vy.Float() + } + } + } + + return "<nil>" +} + +func runtime_mul(x, y interface{}) interface{} { + vx, vy := reflect.ValueOf(x), reflect.ValueOf(y) + switch vx.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Int() * vy.Int() + case reflect.Float32, reflect.Float64: + return float64(vx.Int()) * vy.Float() + } + } + case reflect.Float32, reflect.Float64: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Float() * float64(vy.Int()) + case reflect.Float32, reflect.Float64: + return vx.Float() * vy.Float() + } + } + } + + return "<nil>" +} + +func runtime_quo(x, y interface{}) interface{} { + vx, vy := reflect.ValueOf(x), reflect.ValueOf(y) + switch vx.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Int() / vy.Int() + case reflect.Float32, reflect.Float64: + return float64(vx.Int()) / vy.Float() + } + } + case reflect.Float32, reflect.Float64: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Float() / float64(vy.Int()) + case reflect.Float32, reflect.Float64: + return vx.Float() / vy.Float() + } + } + } + + return "<nil>" +} + +func runtime_rem(x, y interface{}) interface{} { + vx, vy := reflect.ValueOf(x), reflect.ValueOf(y) + switch vx.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Int() % vy.Int() + } + } + } + + return "<nil>" +} + +func runtime_minus(x interface{}) interface{} { + vx := reflect.ValueOf(x) + switch vx.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return -vx.Int() + case reflect.Float32, reflect.Float64: + return -vx.Float() + } + + return "<nil>" +} + +func runtime_plus(x interface{}) interface{} { + vx := reflect.ValueOf(x) + switch vx.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return +vx.Int() + case reflect.Float32, reflect.Float64: + return +vx.Float() + } + + return "<nil>" +} + +func runtime_eql(x, y interface{}) bool { + vx, vy := reflect.ValueOf(x), reflect.ValueOf(y) + switch vx.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Int() == vy.Int() + case reflect.Float32, reflect.Float64: + return float64(vx.Int()) == vy.Float() + case reflect.String: + return fmt.Sprintf("%d", vx.Int()) == vy.String() + } + } + case reflect.Float32, reflect.Float64: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Float() == float64(vy.Int()) + case reflect.Float32, reflect.Float64: + return vx.Float() == vy.Float() + case reflect.String: + return fmt.Sprintf("%f", vx.Float()) == vy.String() + } + } + case reflect.String: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.String() == fmt.Sprintf("%d", vy.Int()) + case reflect.Float32, reflect.Float64: + return vx.String() == fmt.Sprintf("%f", vy.Float()) + case reflect.String: + return vx.String() == fmt.Sprintf("%s", vy.String()) + } + } + case reflect.Bool: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Bool() && vy.Int() != 0 + case reflect.Bool: + return vx.Bool() == vy.Bool() + } + } + } + + return false +} + +func runtime_lss(x, y interface{}) bool { + vx, vy := reflect.ValueOf(x), reflect.ValueOf(y) + switch vx.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Int() < vy.Int() + case reflect.Float32, reflect.Float64: + return float64(vx.Int()) < vy.Float() + case reflect.String: + return fmt.Sprintf("%d", vx.Int()) < vy.String() + } + } + case reflect.Float32, reflect.Float64: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.Float() < float64(vy.Int()) + case reflect.Float32, reflect.Float64: + return vx.Float() < vy.Float() + case reflect.String: + return fmt.Sprintf("%f", vx.Float()) < vy.String() + } + } + case reflect.String: + { + switch vy.Kind() { + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int16, reflect.Int8: + return vx.String() < fmt.Sprintf("%d", vy.Int()) + case reflect.Float32, reflect.Float64: + return vx.String() < fmt.Sprintf("%f", vy.Float()) + case reflect.String: + return vx.String() < vy.String() + } + } + } + + return false +} + +func runtime_gtr(x, y interface{}) bool { + return !runtime_lss(x, y) && !runtime_eql(x, y) +} + +func runtime_json(x interface{}) (res string, err error) { + bres, err := json.Marshal(x) + res = string(bres) + return +} + +func runtime_unescaped(x string) interface{} { + return template.HTML(x) +}