| 539 | } |
| 540 | |
| 541 | func (scanner *ConfigScanner) processStringWord(str string) (string, error) { |
| 542 | var buffer bytes.Buffer |
| 543 | chars := []rune(str) |
| 544 | |
| 545 | if len(chars) < 2 || chars[0] != '"' || chars[len(chars)-1] != '"' { |
| 546 | return str, fmt.Errorf("Invalid string word: %v", str) |
| 547 | } |
| 548 | |
| 549 | chars = chars[1 : len(chars)-1] |
| 550 | escape := false |
| 551 | |
| 552 | for _, char := range chars { |
| 553 | switch { |
| 554 | case escape: |
| 555 | switch char { |
| 556 | case 'n': |
| 557 | buffer.WriteRune('\n') |
| 558 | case 't': |
| 559 | buffer.WriteRune('\t') |
| 560 | default: |
| 561 | buffer.WriteRune(char) |
| 562 | } |
| 563 | |
| 564 | escape = false |
| 565 | case char == '\\': |
| 566 | escape = true |
| 567 | default: |
| 568 | buffer.WriteRune(char) |
| 569 | } |
| 570 | } |
| 571 | |
| 572 | return buffer.String(), nil |
| 573 | } |