127 lines
2.8 KiB
Go
127 lines
2.8 KiB
Go
// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
|
|
// All rights reserved.
|
|
|
|
// global-context.go
|
|
package expr
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"git.portale-stac.it/go-pkg/expr/kern"
|
|
)
|
|
|
|
//var globalCtx *SimpleStore
|
|
|
|
func ImportInContext(ctx kern.ExprContext, name string) (exists bool) {
|
|
if globalCtx := ctx.GetGlobal(); globalCtx != nil {
|
|
var mod *builtinModule
|
|
if mod, exists = builtinModuleRegister[name]; exists {
|
|
mod.importFunc(globalCtx)
|
|
mod.imported = true
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func ImportInContextByGlobPattern(ctx kern.ExprContext, pattern string) (count int, err error) {
|
|
if globalCtx := ctx.GetGlobal(); globalCtx != nil {
|
|
var matched bool
|
|
for name, mod := range builtinModuleRegister {
|
|
if matched, err = filepath.Match(pattern, name); err == nil {
|
|
if matched {
|
|
count++
|
|
mod.importFunc(globalCtx)
|
|
mod.imported = true
|
|
}
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func GlobalCtrlSet(ctx kern.ExprContext, name string, newValue any) (currentValue any) {
|
|
if globalCtx := ctx.GetGlobal(); globalCtx != nil {
|
|
if !strings.HasPrefix(name, "_") {
|
|
name = "_" + name
|
|
}
|
|
|
|
currentValue, _ = globalCtx.GetVar(name)
|
|
globalCtx.SetVar(name, newValue)
|
|
}
|
|
return currentValue
|
|
}
|
|
|
|
func GlobalCtrlGet(ctx kern.ExprContext, name string) (currentValue any) {
|
|
if globalCtx := ctx.GetGlobal(); globalCtx != nil {
|
|
if !strings.HasPrefix(name, "_") {
|
|
name = "_" + name
|
|
}
|
|
currentValue, _ = globalCtx.GetVar(name)
|
|
}
|
|
return currentValue
|
|
}
|
|
|
|
func CtrlEnable(ctx kern.ExprContext, name string) (currentStatus bool) {
|
|
if !strings.HasPrefix(name, "_") {
|
|
name = "_" + name
|
|
}
|
|
if v, exists := ctx.GetVar(name); exists && kern.IsBool(v) {
|
|
currentStatus, _ = v.(bool)
|
|
}
|
|
|
|
ctx.SetVar(name, true)
|
|
return currentStatus
|
|
}
|
|
|
|
func CtrlDisable(ctx kern.ExprContext, name string) (currentStatus bool) {
|
|
if !strings.HasPrefix(name, "_") {
|
|
name = "_" + name
|
|
}
|
|
if v, exists := ctx.GetVar(name); exists && kern.IsBool(v) {
|
|
currentStatus, _ = v.(bool)
|
|
}
|
|
|
|
ctx.SetVar(name, false)
|
|
return currentStatus
|
|
}
|
|
|
|
// func CtrlIsEnabled(ctx ExprContext, name string) (status bool) {
|
|
// var v any
|
|
// var exists bool
|
|
|
|
// if !strings.HasPrefix(name, "_") {
|
|
// name = "_" + name
|
|
// }
|
|
|
|
// if v, exists = ctx.GetVar(name); !exists {
|
|
// v, exists = globalCtx.GetVar(name)
|
|
// }
|
|
|
|
// if exists {
|
|
// if b, ok := v.(bool); ok {
|
|
// status = b
|
|
// }
|
|
// }
|
|
// return
|
|
// }
|
|
|
|
func getControlString(ctx kern.ExprContext, name string) (s string, exists bool) {
|
|
if globalCtx := ctx.GetGlobal(); globalCtx != nil {
|
|
var v any
|
|
if v, exists = globalCtx.GetVar(name); exists {
|
|
s, exists = v.(string)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func InitGlobal() (ctx kern.ExprContext) {
|
|
ctx = NewSimpleStoreWithoutGlobalContext()
|
|
kern.InitDefaultVars(ctx)
|
|
ImportBuiltinsFuncs(ctx)
|
|
return
|
|
}
|