semicolon continuation
This commit is contained in:
parent
f8d83ee5b7
commit
e251d499d6
@ -1 +1 @@
|
|||||||
1.12.0 15
|
1.12.0 51
|
||||||
|
46
main.go
46
main.go
@ -85,11 +85,15 @@ func goInteractiveReadline(opt *Options, ctx expr.ExprContext, r io.Reader) {
|
|||||||
fmt.Print(intro)
|
fmt.Print(intro)
|
||||||
rl.SetPrompt(mainPrompt)
|
rl.SetPrompt(mainPrompt)
|
||||||
for line, err := rl.ReadLine(); err == nil; line, err = rl.ReadLine() {
|
for line, err := rl.ReadLine(); err == nil; line, err = rl.ReadLine() {
|
||||||
if len(line) > 0 && line[len(line)-1] == '\\' {
|
if continuation(&sb, line) {
|
||||||
sb.WriteString(line[0 : len(line)-1])
|
|
||||||
rl.SetPrompt(contPrompt)
|
rl.SetPrompt(contPrompt)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
// if len(line) > 0 && line[len(line)-1] == '\\' {
|
||||||
|
// sb.WriteString(line[0 : len(line)-1])
|
||||||
|
// rl.SetPrompt(contPrompt)
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
rl.SetPrompt(mainPrompt)
|
rl.SetPrompt(mainPrompt)
|
||||||
sb.WriteString(line)
|
sb.WriteString(line)
|
||||||
source := strings.TrimSpace(sb.String())
|
source := strings.TrimSpace(sb.String())
|
||||||
@ -116,11 +120,14 @@ func goInteractive(opt *Options, ctx expr.ExprContext, r io.Reader) {
|
|||||||
fmt.Print(mainPrompt)
|
fmt.Print(mainPrompt)
|
||||||
reader := bufio.NewReaderSize(r, 1024)
|
reader := bufio.NewReaderSize(r, 1024)
|
||||||
for line, err := reader.ReadString('\n'); err == nil && line != "exit\n"; line, err = reader.ReadString('\n') {
|
for line, err := reader.ReadString('\n'); err == nil && line != "exit\n"; line, err = reader.ReadString('\n') {
|
||||||
if strings.HasSuffix(line, "\\\n") {
|
if continuation(&sb, line) {
|
||||||
sb.WriteString(line[0 : len(line)-2])
|
|
||||||
fmt.Print(contPrompt)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
// if strings.HasSuffix(line, "\\\n") {
|
||||||
|
// sb.WriteString(line[0 : len(line)-2])
|
||||||
|
// fmt.Print(contPrompt)
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
sb.WriteString(line)
|
sb.WriteString(line)
|
||||||
source := strings.TrimSpace(sb.String())
|
source := strings.TrimSpace(sb.String())
|
||||||
// fmt.Printf("source=%q\n", source)
|
// fmt.Printf("source=%q\n", source)
|
||||||
@ -140,12 +147,37 @@ func goInteractive(opt *Options, ctx expr.ExprContext, r io.Reader) {
|
|||||||
fmt.Println()
|
fmt.Println()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func continuation(sb *strings.Builder, line string) (cont bool) {
|
||||||
|
line = strings.TrimSpace(line)
|
||||||
|
if strings.HasSuffix(line, "\\") {
|
||||||
|
sb.WriteString(line[0 : len(line)-1])
|
||||||
|
cont = true
|
||||||
|
} else if strings.HasSuffix(line, ";") {
|
||||||
|
sb.WriteString(line)
|
||||||
|
cont = true
|
||||||
|
} else if len(line) > 0 {
|
||||||
|
if expr.StringEndsWithOperator(line) {
|
||||||
|
sb.WriteString(line)
|
||||||
|
cont = true
|
||||||
|
} else {
|
||||||
|
fullInput := sb.String() + line
|
||||||
|
if strings.Count(fullInput, "(") > strings.Count(fullInput, ")") ||
|
||||||
|
strings.Count(fullInput, "[") > strings.Count(fullInput, "]") ||
|
||||||
|
strings.Count(fullInput, "{") > strings.Count(fullInput, "}") {
|
||||||
|
sb.WriteString(line)
|
||||||
|
cont = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func goBatch(opt *Options, ctx expr.ExprContext, r io.Reader) {
|
func goBatch(opt *Options, ctx expr.ExprContext, r io.Reader) {
|
||||||
var sb strings.Builder
|
var sb strings.Builder
|
||||||
reader := bufio.NewReaderSize(r, 1024)
|
reader := bufio.NewReaderSize(r, 1024)
|
||||||
for line, err := reader.ReadString('\n'); err == nil && line != "exit\n"; line, err = reader.ReadString('\n') {
|
for line, err := reader.ReadString('\n'); err == nil && line != "exit\n"; line, err = reader.ReadString('\n') {
|
||||||
if strings.HasSuffix(line, "\\\n") {
|
if continuation(&sb, line) {
|
||||||
sb.WriteString(line[0 : len(line)-2])
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
sb.WriteString(line)
|
sb.WriteString(line)
|
||||||
|
Loading…
Reference in New Issue
Block a user