Fix up the workings
This commit is contained in:
92
main.go
92
main.go
@@ -53,22 +53,48 @@ func main() {
|
||||
luaExpr := args[1]
|
||||
files := args[2:]
|
||||
|
||||
// Generate the Lua script
|
||||
luaScript := buildLuaScript(luaExpr)
|
||||
log.Printf("Final expression: %s", luaExpr)
|
||||
|
||||
// Make sure the regex can match across multiple lines by adding (?s) flag
|
||||
if !strings.HasPrefix(regexPattern, "(?s)") {
|
||||
regexPattern = "(?s)" + regexPattern
|
||||
}
|
||||
log.Printf("Regex pattern: %s", regexPattern)
|
||||
log.Printf("Lua script: %s", luaScript)
|
||||
log.Printf("Processing files: %v", files)
|
||||
|
||||
// Compile the pattern for file processing
|
||||
pattern, err := regexp.Compile(regexPattern)
|
||||
if err != nil {
|
||||
Error.Printf("Invalid regex pattern: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Process each file
|
||||
for _, file := range files {
|
||||
err := processFile(file, pattern, luaScript)
|
||||
if err != nil {
|
||||
Error.Printf("Error processing file %s: %v", file, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// buildLuaScript creates a complete Lua script from the expression
|
||||
func buildLuaScript(luaExpr string) string {
|
||||
// Check if the expression needs v1 to be prepended
|
||||
if strings.HasPrefix(luaExpr, "*") || strings.HasPrefix(luaExpr, "/") ||
|
||||
strings.HasPrefix(luaExpr, "+") || strings.HasPrefix(luaExpr, "-") ||
|
||||
strings.HasPrefix(luaExpr, "^") || strings.HasPrefix(luaExpr, "%") {
|
||||
luaExpr = "v[1]" + luaExpr
|
||||
log.Printf("Expression modified to: %s", luaExpr)
|
||||
}
|
||||
|
||||
// Replace shorthand v1, v2, etc. with v[1], v[2]
|
||||
shorthandRegex := regexp.MustCompile(`\bv(\d+)\b`)
|
||||
luaExpr = shorthandRegex.ReplaceAllString(luaExpr, "v[$1]")
|
||||
log.Printf("Final expression: %s", luaExpr)
|
||||
|
||||
// Check if the expression is a simple expression or explicitly manipulates v table
|
||||
var fullScript string
|
||||
// Add custom script header
|
||||
// Add custom script header with helper functions
|
||||
scriptHeader := `
|
||||
-- Custom Lua helpers for math operations
|
||||
function min(a, b) return math.min(a, b) end
|
||||
@@ -78,6 +104,8 @@ function floor(x) return math.floor(x) end
|
||||
function ceil(x) return math.ceil(x) end
|
||||
`
|
||||
|
||||
// Check if the expression already has assignments or a return statement
|
||||
var fullScript string
|
||||
if strings.Contains(luaExpr, "v[1] =") || strings.Contains(luaExpr, "v[2] =") ||
|
||||
strings.Contains(luaExpr, "return") {
|
||||
// Already has assignments, use as is
|
||||
@@ -98,39 +126,31 @@ end
|
||||
`, scriptHeader, luaExpr)
|
||||
}
|
||||
|
||||
log.Printf("Regex pattern: %s", regexPattern)
|
||||
log.Printf("Lua script: %s", fullScript)
|
||||
log.Printf("Processing files: %v", files)
|
||||
return fullScript
|
||||
}
|
||||
|
||||
// Compile the pattern for file processing
|
||||
pattern, err := regexp.Compile(regexPattern)
|
||||
func processFile(filename string, pattern *regexp.Regexp, luaScript string) error {
|
||||
log.Printf("Processing file: %s", filename)
|
||||
fullPath := filepath.Join(".", filename)
|
||||
|
||||
content, err := os.ReadFile(fullPath)
|
||||
if err != nil {
|
||||
Error.Printf("Invalid regex pattern: %v", err)
|
||||
return
|
||||
return fmt.Errorf("error reading file: %v", err)
|
||||
}
|
||||
|
||||
// Process each file
|
||||
for _, file := range files {
|
||||
log.Printf("Processing file: %s", file)
|
||||
fullPath := filepath.Join(".", file)
|
||||
|
||||
content, err := os.ReadFile(fullPath)
|
||||
if err != nil {
|
||||
Error.Printf("error reading file: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
fileContent := string(content)
|
||||
result, err := process(fileContent, pattern, fullScript)
|
||||
if err != nil {
|
||||
Error.Printf("Error processing file %s: %v", file, err)
|
||||
}
|
||||
|
||||
err = os.WriteFile(fullPath, []byte(result), 0644)
|
||||
if err != nil {
|
||||
Error.Printf("error writing file: %v", err)
|
||||
}
|
||||
fileContent := string(content)
|
||||
result, err := process(fileContent, pattern, luaScript)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = os.WriteFile(fullPath, []byte(result), 0644)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error writing file: %v", err)
|
||||
}
|
||||
|
||||
log.Printf("File %s updated successfully", filename)
|
||||
return nil
|
||||
}
|
||||
|
||||
func process(data string, pattern *regexp.Regexp, luaScript string) (string, error) {
|
||||
@@ -149,6 +169,7 @@ func process(data string, pattern *regexp.Regexp, luaScript string) (string, err
|
||||
return data, fmt.Errorf("error in Lua script: %v", err)
|
||||
}
|
||||
|
||||
modified := false
|
||||
// Process all regex matches
|
||||
result := pattern.ReplaceAllStringFunc(data, func(match string) string {
|
||||
captures := pattern.FindStringSubmatch(match)
|
||||
@@ -203,6 +224,7 @@ func process(data string, pattern *regexp.Regexp, luaScript string) (string, err
|
||||
// Replace old value with new value
|
||||
result = strings.Replace(result, oldVal, newVal, 1)
|
||||
}
|
||||
modified = true
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -210,5 +232,9 @@ func process(data string, pattern *regexp.Regexp, luaScript string) (string, err
|
||||
return match
|
||||
})
|
||||
|
||||
if !modified {
|
||||
log.Printf("No changes made to the content")
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user