From 2665d10c09c2359deb4ac6160aaa7f6827cd2626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Sima=CC=83o?= Date: Tue, 2 Nov 2021 21:38:03 -0300 Subject: [PATCH] added mod_tag --- lib.go | 41 ++++++++++++++++++++++++++++++++++++----- lib_test.go | 8 ++++++-- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/lib.go b/lib.go index bca64d2..adcebfc 100644 --- a/lib.go +++ b/lib.go @@ -24,6 +24,10 @@ func (m Mode) String() string { return "ESCAPE" case MODE_ESCAPE_STR: return "ESCAPE_STR" + case MODE_TAG: + return "MODE_TAG" + case MODE_ESCAPE_TAG: + return "MODE_ESCAPE_TAG" } return "UNKNOWN" @@ -32,8 +36,10 @@ func (m Mode) String() string { const ( MODE_NORMAL Mode = iota MODE_STR + MODE_TAG MODE_ESCAPE MODE_ESCAPE_STR + MODE_ESCAPE_TAG ) type LineType int @@ -77,7 +83,7 @@ func Tokens(str string) ([]string, error) { params = append(params, sb.String()) } sb = strings.Builder{} - case MODE_STR: + case MODE_STR, MODE_TAG: sb.WriteRune(a) default: return nil, errors.New(fmt.Sprintf("Error at char %d - cant add space here. Mode: %s", i, mode.String())) @@ -99,10 +105,23 @@ func Tokens(str string) ([]string, error) { switch mode { case MODE_NORMAL: if sb.Len() > 0 { + lchar := sb.String()[sb.Len()-1] + if lchar == '=' { + sb.WriteRune(a) + mode = MODE_TAG + continue + } + params = append(params, sb.String()) + sb = strings.Builder{} + mode = MODE_STR } + case MODE_TAG: + sb.WriteRune(a) + params = append(params, sb.String()) sb = strings.Builder{} - mode = MODE_STR + mode = MODE_NORMAL + case MODE_STR: params = append(params, sb.String()) sb = strings.Builder{} @@ -114,12 +133,15 @@ func Tokens(str string) ([]string, error) { sb.WriteRune(a) mode = MODE_STR } + case '\\': switch mode { case MODE_NORMAL: mode = MODE_ESCAPE case MODE_STR: mode = MODE_ESCAPE_STR + case MODE_TAG: + mode = MODE_ESCAPE_TAG case MODE_ESCAPE: sb.WriteString("\\") mode = MODE_NORMAL @@ -129,16 +151,18 @@ func Tokens(str string) ([]string, error) { } default: switch mode { - case MODE_NORMAL: - sb.WriteRune(a) - case MODE_STR: + case MODE_NORMAL, MODE_TAG, MODE_STR: sb.WriteRune(a) + case MODE_ESCAPE: sb.WriteString("\\" + string(a)) mode = MODE_NORMAL case MODE_ESCAPE_STR: sb.WriteString("\\" + string(a)) mode = MODE_STR + case MODE_ESCAPE_TAG: + sb.WriteString("\\" + string(a)) + mode = MODE_TAG } } @@ -185,6 +209,7 @@ func Lines(str string) ([]Line, error) { for _, tk := range tokens { switch tk { + case "\n", ";", "&&": if len(line.Tokens) > 0 { addLine(line) @@ -201,7 +226,13 @@ func Lines(str string) ([]Line, error) { Tokens: make([]string, 0), } default: + //if len(line.Tokens) > 2 && line.Tokens[len(line.Tokens)-1] == "=" { + // line.Tokens[len(line.Tokens)-2] = line.Tokens[len(line.Tokens)-2] + "=" + tk + // line.Tokens = line.Tokens[:len(line.Tokens)-1] + //} else { line.Tokens = append(line.Tokens, tk) + //} + } } if len(line.Tokens) > 0 { diff --git a/lib_test.go b/lib_test.go index f4a96f3..3881d61 100644 --- a/lib_test.go +++ b/lib_test.go @@ -8,9 +8,13 @@ import ( ) func TestLines(t *testing.T) { - lines, err := Lines("; \";\" ;;") + //lines, err := Lines("; \";\" ;;") //Lines("a\nb\\\\nc") - // Lines(` + lines, err := Lines(` + go build -o main.exe -ldflags="a=1 b=2" ./main.go + `) + //lines, err := Lines(` + //go build -o main.exe -ldflags="a=1 b=2" ./main.go //"A STR" 1 2 "a b" 1.23 \n & //"STR \\ with escape \n chars \t" 1 234 true //ls -larth