diff --git a/control.go b/control.go index 5a73e26..165a7dc 100644 --- a/control.go +++ b/control.go @@ -31,11 +31,3 @@ func initDefaultVars(ctx ExprContext) { ctx.SetVar(ControlBoolShortcut, true) ctx.SetVar(ControlSearchPath, init_search_path) } - -func getControlString(ctx ExprContext, name string) (s string, exists bool) { - var v any - if v, exists = ctx.GetVar(name); exists { - s, exists = v.(string) - } - return -} diff --git a/func-import.go b/func-import.go index 80b683d..48c5f93 100644 --- a/func-import.go +++ b/func-import.go @@ -9,8 +9,6 @@ import ( "os" ) -const ENV_EXPR_PATH = "EXPR_PATH" - func importFunc(ctx ExprContext, name string, args []any) (result any, err error) { return importGeneral(ctx, name, args) } @@ -21,19 +19,11 @@ func importAllFunc(ctx ExprContext, name string, args []any) (result any, err er } func importGeneral(ctx ExprContext, name string, args []any) (result any, err error) { - var dirList []string - - dirList = addEnvImportDirs(dirList) - dirList = addPresetImportDirs(ctx, dirList) + dirList := buildSearchDirList("sources", ENV_EXPR_SOURCE_PATH) result, err = doImport(ctx, name, dirList, NewArrayIterator(args)) return } -func addPresetImportDirs(ctx ExprContext, dirList []string) []string { - // return addPresetDirs(ctx, ControlImportPath, dirList) - return addSearchDirs(ctx, "sources", dirList) -} - func doImport(ctx ExprContext, name string, dirList []string, it Iterator) (result any, err error) { var v any var sourceFilepath string diff --git a/global-context.go b/global-context.go index 58d4624..fc56b52 100644 --- a/global-context.go +++ b/global-context.go @@ -128,6 +128,14 @@ func CtrlIsEnabled(ctx ExprContext, name string) (status bool) { return } +func getControlString(name string) (s string, exists bool) { + var v any + if v, exists = globalCtx.GetVar(name); exists { + s, exists = v.(string) + } + return +} + func init() { globalCtx = NewSimpleStore() initDefaultVars(globalCtx) diff --git a/import-utils.go b/import-utils.go index b1af7d0..ee1e1b5 100644 --- a/import-utils.go +++ b/import-utils.go @@ -13,6 +13,11 @@ import ( "strings" ) +const ( + ENV_EXPR_SOURCE_PATH = "EXPR_PATH" + ENV_EXPR_PLUGIN_PATH = "EXPR_PLUGIN_PATH" +) + func checkStringParamExpected(funcName string, paramValue any, paramPos int) (err error) { if !(IsString(paramValue) /*|| isList(paramValue)*/) { err = fmt.Errorf("%s(): param nr %d has wrong type %s, string expected", funcName, paramPos+1, typeName(paramValue)) @@ -20,8 +25,16 @@ func checkStringParamExpected(funcName string, paramValue any, paramPos int) (er return } -func addEnvImportDirs(dirList []string) []string { - if dirSpec, exists := os.LookupEnv(ENV_EXPR_PATH); exists { +func addSourceEnvImportDirs(varName string, dirList []string) []string { + return addEnvImportDirs(ENV_EXPR_SOURCE_PATH, dirList) +} + +func addPluginEnvImportDirs(varName string, dirList []string) []string { + return addEnvImportDirs(ENV_EXPR_PLUGIN_PATH, dirList) +} + +func addEnvImportDirs(envVarName string, dirList []string) []string { + if dirSpec, exists := os.LookupEnv(envVarName); exists { dirs := strings.Split(dirSpec, ":") if dirList == nil { dirList = dirs @@ -32,22 +45,8 @@ func addEnvImportDirs(dirList []string) []string { return dirList } -/* -func addPresetDirs(ctx ExprContext, ctrlKey string, dirList []string) []string { - if dirSpec, exists := getControlString(ctx, ctrlKey); exists { - dirs := strings.Split(dirSpec, ":") - if dirList == nil { - dirList = dirs - } else { - dirList = append(dirList, dirs...) - } - } - return dirList -} -*/ - -func addSearchDirs(ctx ExprContext, endingPath string, dirList []string) []string { - if dirSpec, exists := getControlString(ctx, ControlSearchPath); exists { +func addSearchDirs(endingPath string, dirList []string) []string { + if dirSpec, exists := getControlString(ControlSearchPath); exists { dirs := strings.Split(dirSpec, ":") if dirList == nil { dirList = dirs @@ -64,6 +63,12 @@ func addSearchDirs(ctx ExprContext, endingPath string, dirList []string) []strin return dirList } +func buildSearchDirList(endingPath, envVarName string) (dirList []string) { + dirList = addEnvImportDirs(envVarName, dirList) + dirList = addSearchDirs(endingPath, dirList) + return +} + func isFile(filePath string) bool { info, err := os.Stat(filePath) return (err == nil || errors.Is(err, os.ErrExist)) && info.Mode().IsRegular() @@ -93,7 +98,7 @@ func makeFilepath(filename string, dirList []string) (filePath string, err error filePath = searchAmongPath(filename, dirList) } if len(filePath) == 0 { - err = fmt.Errorf("source file %q not found", filename) + err = fmt.Errorf("file %q not found", filename) } return }