Implement escapable characters in strings
diff --git a/lexer.go b/lexer.go index 698406b..ba18a9b 100644 --- a/lexer.go +++ b/lexer.go
@@ -311,6 +311,18 @@ if l.follow("\\\"") { l.pos += 1 growing_string += "\"" + } else if l.follow("\\n") { + l.pos += 1 + growing_string += "\n" + } else if l.follow("\\t") { + l.pos += 1 + growing_string += "\t" + } else if l.follow("\\r") { + l.pos += 1 + growing_string += "\r" + } else if l.follow("\\\\") { + l.pos += 1 + growing_string += "\\" } else { growing_string += string(l.peek()) }
diff --git a/parser_test.go b/parser_test.go index 1aabc32..70f8051 100644 --- a/parser_test.go +++ b/parser_test.go
@@ -65,6 +65,28 @@ }) } +func TestStringEscapables(t *testing.T) { + tree, err := Load("a = \"a \\n b\"") + assertTree(t, tree, err, map[string]interface{}{ + "a": "a \n b", + }) + + tree, err = Load("a = \"a \\t b\"") + assertTree(t, tree, err, map[string]interface{}{ + "a": "a \t b", + }) + + tree, err = Load("a = \"a \\r b\"") + assertTree(t, tree, err, map[string]interface{}{ + "a": "a \r b", + }) + + tree, err = Load("a = \"a \\\\ b\"") + assertTree(t, tree, err, map[string]interface{}{ + "a": "a \\ b", + }) +} + func TestBools(t *testing.T) { tree, err := Load("a = true\nb = false") assertTree(t, tree, err, map[string]interface{}{ @@ -95,12 +117,11 @@ } func TestArraySimple(t *testing.T) { - fmt.Println("test") tree, err := Load("a = [42, 21, 10]") assertTree(t, tree, err, map[string]interface{}{ "a": []int64{int64(42), int64(21), int64(10)}, }) - fmt.Println("blah") + tree, _ = Load("a = [42, 21, 10,]") assertTree(t, tree, err, map[string]interface{}{ "a": []int64{int64(42), int64(21), int64(10)}, @@ -156,7 +177,7 @@ "title": "TOML Example", "owner.name": "Tom Preston-Werner", "owner.organization": "GitHub", - "owner.bio": "GitHub Cofounder & CEO\nLikes tater tots and bee.", + "owner.bio": "GitHub Cofounder & CEO\nLikes tater tots and beer.", "owner.dob": time.Date(1979, time.May, 27, 7, 32, 0, 0, time.UTC), "database.server": "192.168.1.1", "database.ports": []int64{8001, 8001, 8002},