added mod_tag
parent
4f6c373934
commit
2665d10c09
41
lib.go
41
lib.go
|
@ -24,6 +24,10 @@ func (m Mode) String() string {
|
||||||
return "ESCAPE"
|
return "ESCAPE"
|
||||||
case MODE_ESCAPE_STR:
|
case MODE_ESCAPE_STR:
|
||||||
return "ESCAPE_STR"
|
return "ESCAPE_STR"
|
||||||
|
case MODE_TAG:
|
||||||
|
return "MODE_TAG"
|
||||||
|
case MODE_ESCAPE_TAG:
|
||||||
|
return "MODE_ESCAPE_TAG"
|
||||||
}
|
}
|
||||||
|
|
||||||
return "UNKNOWN"
|
return "UNKNOWN"
|
||||||
|
@ -32,8 +36,10 @@ func (m Mode) String() string {
|
||||||
const (
|
const (
|
||||||
MODE_NORMAL Mode = iota
|
MODE_NORMAL Mode = iota
|
||||||
MODE_STR
|
MODE_STR
|
||||||
|
MODE_TAG
|
||||||
MODE_ESCAPE
|
MODE_ESCAPE
|
||||||
MODE_ESCAPE_STR
|
MODE_ESCAPE_STR
|
||||||
|
MODE_ESCAPE_TAG
|
||||||
)
|
)
|
||||||
|
|
||||||
type LineType int
|
type LineType int
|
||||||
|
@ -77,7 +83,7 @@ func Tokens(str string) ([]string, error) {
|
||||||
params = append(params, sb.String())
|
params = append(params, sb.String())
|
||||||
}
|
}
|
||||||
sb = strings.Builder{}
|
sb = strings.Builder{}
|
||||||
case MODE_STR:
|
case MODE_STR, MODE_TAG:
|
||||||
sb.WriteRune(a)
|
sb.WriteRune(a)
|
||||||
default:
|
default:
|
||||||
return nil, errors.New(fmt.Sprintf("Error at char %d - cant add space here. Mode: %s", i, mode.String()))
|
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 {
|
switch mode {
|
||||||
case MODE_NORMAL:
|
case MODE_NORMAL:
|
||||||
if sb.Len() > 0 {
|
if sb.Len() > 0 {
|
||||||
|
lchar := sb.String()[sb.Len()-1]
|
||||||
|
if lchar == '=' {
|
||||||
|
sb.WriteRune(a)
|
||||||
|
mode = MODE_TAG
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
params = append(params, sb.String())
|
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{}
|
sb = strings.Builder{}
|
||||||
mode = MODE_STR
|
mode = MODE_NORMAL
|
||||||
|
|
||||||
case MODE_STR:
|
case MODE_STR:
|
||||||
params = append(params, sb.String())
|
params = append(params, sb.String())
|
||||||
sb = strings.Builder{}
|
sb = strings.Builder{}
|
||||||
|
@ -114,12 +133,15 @@ func Tokens(str string) ([]string, error) {
|
||||||
sb.WriteRune(a)
|
sb.WriteRune(a)
|
||||||
mode = MODE_STR
|
mode = MODE_STR
|
||||||
}
|
}
|
||||||
|
|
||||||
case '\\':
|
case '\\':
|
||||||
switch mode {
|
switch mode {
|
||||||
case MODE_NORMAL:
|
case MODE_NORMAL:
|
||||||
mode = MODE_ESCAPE
|
mode = MODE_ESCAPE
|
||||||
case MODE_STR:
|
case MODE_STR:
|
||||||
mode = MODE_ESCAPE_STR
|
mode = MODE_ESCAPE_STR
|
||||||
|
case MODE_TAG:
|
||||||
|
mode = MODE_ESCAPE_TAG
|
||||||
case MODE_ESCAPE:
|
case MODE_ESCAPE:
|
||||||
sb.WriteString("\\")
|
sb.WriteString("\\")
|
||||||
mode = MODE_NORMAL
|
mode = MODE_NORMAL
|
||||||
|
@ -129,16 +151,18 @@ func Tokens(str string) ([]string, error) {
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
switch mode {
|
switch mode {
|
||||||
case MODE_NORMAL:
|
case MODE_NORMAL, MODE_TAG, MODE_STR:
|
||||||
sb.WriteRune(a)
|
|
||||||
case MODE_STR:
|
|
||||||
sb.WriteRune(a)
|
sb.WriteRune(a)
|
||||||
|
|
||||||
case MODE_ESCAPE:
|
case MODE_ESCAPE:
|
||||||
sb.WriteString("\\" + string(a))
|
sb.WriteString("\\" + string(a))
|
||||||
mode = MODE_NORMAL
|
mode = MODE_NORMAL
|
||||||
case MODE_ESCAPE_STR:
|
case MODE_ESCAPE_STR:
|
||||||
sb.WriteString("\\" + string(a))
|
sb.WriteString("\\" + string(a))
|
||||||
mode = MODE_STR
|
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 {
|
for _, tk := range tokens {
|
||||||
switch tk {
|
switch tk {
|
||||||
|
|
||||||
case "\n", ";", "&&":
|
case "\n", ";", "&&":
|
||||||
if len(line.Tokens) > 0 {
|
if len(line.Tokens) > 0 {
|
||||||
addLine(line)
|
addLine(line)
|
||||||
|
@ -201,7 +226,13 @@ func Lines(str string) ([]Line, error) {
|
||||||
Tokens: make([]string, 0),
|
Tokens: make([]string, 0),
|
||||||
}
|
}
|
||||||
default:
|
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)
|
line.Tokens = append(line.Tokens, tk)
|
||||||
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(line.Tokens) > 0 {
|
if len(line.Tokens) > 0 {
|
||||||
|
|
|
@ -8,9 +8,13 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestLines(t *testing.T) {
|
func TestLines(t *testing.T) {
|
||||||
lines, err := Lines("; \";\" ;;")
|
//lines, err := Lines("; \";\" ;;")
|
||||||
//Lines("a\nb\\\\nc")
|
//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 &
|
//"A STR" 1 2 "a b" 1.23 \n &
|
||||||
//"STR \\ with escape \n chars \t" 1 234 true
|
//"STR \\ with escape \n chars \t" 1 234 true
|
||||||
//ls -larth
|
//ls -larth
|
||||||
|
|
Loading…
Reference in New Issue