summaryrefslogtreecommitdiff
path: root/chomp.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2019-06-06 15:59:49 -0700
committerJeff Carr <[email protected]>2019-06-06 15:59:49 -0700
commitf59e1b1f8403216d435e4904550eb6c2844ce690 (patch)
treefbee32ba3e521b82de8ad4a6722cf6155445bf72 /chomp.go
parentd7a665031c8f95eb6c96bbdc642fe3ab74e851cf (diff)
add perl 'chomp'. too lazy to make it correct with regex
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'chomp.go')
-rw-r--r--chomp.go73
1 files changed, 73 insertions, 0 deletions
diff --git a/chomp.go b/chomp.go
new file mode 100644
index 0000000..b452ff2
--- /dev/null
+++ b/chomp.go
@@ -0,0 +1,73 @@
+package shell
+
+/*
+ perl 'chomp'
+
+ send it anything, always get back a string
+*/
+
+import "log"
+import "reflect"
+import "strings"
+import "bytes"
+
+// import "github.com/davecgh/go-spew/spew"
+
+func chompBytesBuffer(buf *bytes.Buffer) string {
+ var bytesSplice []byte
+ bytesSplice = buf.Bytes()
+
+ return Chomp(string(bytesSplice))
+}
+
+//
+// TODO: obviously this is stupidly wrong
+// TODO: fix this to trim fucking everything
+// really world? 8 fucking years of this language
+// and I'm fucking writing this? jesus. how the
+// hell is everyone else doing this? Why isn't
+// this already in the strings package?
+//
+func perlChomp(s string) string {
+ // lots of stuff in go moves around the whole block of whatever it is so lots of things are padded with NULL values
+ s = strings.Trim(s, "\x00") // removes NULL (needed!)
+
+ // TODO: christ. make some fucking regex that takes out every NULL, \t, ' ", \n, and \r
+ s = strings.Trim(s, "\n")
+ s = strings.Trim(s, "\n")
+ s = strings.TrimSuffix(s, "\r")
+ s = strings.TrimSuffix(s, "\n")
+
+ s = strings.TrimSpace(s) // this is like 'chomp' in perl
+ s = strings.TrimSuffix(s, "\n") // this is like 'chomp' in perl
+ return s
+}
+
+// TODO: fix this to chomp \n \r NULL \t and ' '
+func Chomp(a interface{}) string {
+ // switch reflect.TypeOf(a) {
+ switch t := a.(type) {
+ case string:
+ var s string
+ s = a.(string)
+ return perlChomp(s)
+ case []uint8:
+ log.Printf("shell.Chomp() FOUND []uint8")
+ var u8s []uint8
+ u8s = a.([]uint8)
+
+ s := string(u8s)
+ return perlChomp(s)
+ case *bytes.Buffer:
+ log.Printf("shell.Chomp() FOUND *bytes.Buffer")
+ var tmp *bytes.Buffer
+ tmp = a.(*bytes.Buffer)
+
+ var bytesSplice []byte
+ bytesSplice = tmp.Bytes()
+ return Chomp(string(bytesSplice))
+ default:
+ log.Printf("shell.Chomp() NEED TO MAKE CONVERTER FOR type =", reflect.TypeOf(t))
+ }
+ return ""
+}