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)
+}