summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorayyansea <ayyansea@gmail.com>2024-12-03 22:34:50 +0300
committerayyansea <ayyansea@gmail.com>2024-12-03 22:34:50 +0300
commit11a101fc1706c184dcd6047e72a267c229fca671 (patch)
treecc167e68a4a6dceafc36165e2f557ad9f87716ce /cmd
parent0f8c056b1214dab67d7cdfe236747e1507b9bd6d (diff)
feat: handle multiline input better
Diffstat (limited to 'cmd')
-rw-r--r--cmd/uptfs/main.go98
1 files changed, 49 insertions, 49 deletions
diff --git a/cmd/uptfs/main.go b/cmd/uptfs/main.go
index ff39ff6..5738131 100644
--- a/cmd/uptfs/main.go
+++ b/cmd/uptfs/main.go
@@ -2,7 +2,6 @@ package main
import (
"bufio"
- "errors"
"fmt"
"log/slog"
"os"
@@ -48,16 +47,10 @@ func main() {
var config config.Config
config.LoadConfig(configFilePath)
- var inputString string
+ var inputStrings []string
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
- inputString = inputString + scanner.Text()
- }
-
- if inputString == "" {
- err := errors.New("the input string is empty")
- fmt.Printf("%v\n", err)
- os.Exit(1)
+ inputStrings = append(inputStrings, scanner.Text())
}
additionalDelimeters := []string{",", ".", " "}
@@ -71,14 +64,47 @@ func main() {
slog.Debug("delimeters: " + delimeterString)
tempword := ""
+ var tokenizedInputSlice []token.LinkedTokenList
var tokenlist token.LinkedTokenList
- for index, character := range inputString {
- slog.Debug("current character: " + string(character))
- if slices.Contains(additionalDelimeters, string(character)) {
- slog.Debug("current character is a delimeter")
- if len(tempword) != 0 {
- slog.Debug("word is longer than 0 characters, filtering it")
+ for _, elem := range inputStrings {
+ for index, character := range elem {
+ slog.Debug("current character: " + string(character))
+ if slices.Contains(additionalDelimeters, string(character)) {
+ slog.Debug("current character is a delimeter")
+ if len(tempword) != 0 {
+ slog.Debug("word is longer than 0 characters, filtering it")
+ for _, filterName := range config.Filters {
+ _, ok := filter.FilterList[filterName]
+ if ok {
+ slog.Debug("using filter " + filterName)
+ currentfilter := filter.FilterList[filterName]()
+ tempword = currentfilter.Filter(tempword)
+ } else {
+ slog.Debug("there's no filter named " + filterName)
+ continue
+ }
+ }
+ slog.Debug("filtered word: " + tempword)
+ tokenlist.AddToken(tempword)
+ slog.Debug("adding delimeter")
+ tokenlist.AddToken(string(character))
+ slog.Debug("resetting current word to an empty string")
+ tempword = ""
+
+ continue
+ }
+ slog.Debug("current word is a zero-length string")
+ slog.Debug("adding delimeter")
+ tokenlist.AddToken(string(character))
+ tempword = ""
+
+ continue
+ }
+ slog.Debug("current character is not a delimeter, adding to word")
+ tempword = tempword + string(character)
+ if index == len(elem)-1 {
+ slog.Debug("string ended, filtering current word")
for _, filterName := range config.Filters {
_, ok := filter.FilterList[filterName]
if ok {
@@ -92,48 +118,22 @@ func main() {
}
slog.Debug("filtered word: " + tempword)
tokenlist.AddToken(tempword)
- slog.Debug("adding delimeter")
- tokenlist.AddToken(string(character))
- slog.Debug("resetting current word to an empty string")
tempword = ""
-
- continue
}
- slog.Debug("current word is a zero-length string")
- slog.Debug("adding delimeter")
- tokenlist.AddToken(string(character))
- tempword = ""
-
- continue
- }
- slog.Debug("current character is not a delimeter, adding to word")
- tempword = tempword + string(character)
- if index == len(inputString)-1 {
- slog.Debug("string ended, filtering current word")
- for _, filterName := range config.Filters {
- _, ok := filter.FilterList[filterName]
- if ok {
- slog.Debug("using filter " + filterName)
- currentfilter := filter.FilterList[filterName]()
- tempword = currentfilter.Filter(tempword)
- } else {
- slog.Debug("there's no filter named " + filterName)
- continue
- }
- }
- slog.Debug("filtered word: " + tempword)
- tokenlist.AddToken(tempword)
- tempword = ""
}
+ tokenizedInputSlice = append(tokenizedInputSlice, tokenlist)
+ tokenlist.Clear()
}
result := ""
- for current := tokenlist.GetHead(); current != nil; current = current.GetNextToken() {
- result = result + current.GetContent()
+ for _, elem := range tokenizedInputSlice {
+ for current := elem.GetHead(); current != nil; current = current.GetNextToken() {
+ result = result + current.GetContent()
+ }
+ fmt.Println(result)
+ result = ""
}
- fmt.Println(result)
-
slog.Debug("uptfs finished")
}