Implement escapable characters in strings
This commit is contained in:
@@ -311,6 +311,18 @@ func lexString(l *lexer) stateFn {
|
|||||||
if l.follow("\\\"") {
|
if l.follow("\\\"") {
|
||||||
l.pos += 1
|
l.pos += 1
|
||||||
growing_string += "\""
|
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 {
|
} else {
|
||||||
growing_string += string(l.peek())
|
growing_string += string(l.peek())
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-3
@@ -65,6 +65,28 @@ func TestSimpleString(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
func TestBools(t *testing.T) {
|
||||||
tree, err := Load("a = true\nb = false")
|
tree, err := Load("a = true\nb = false")
|
||||||
assertTree(t, tree, err, map[string]interface{}{
|
assertTree(t, tree, err, map[string]interface{}{
|
||||||
@@ -95,12 +117,11 @@ func TestArrayZero(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestArraySimple(t *testing.T) {
|
func TestArraySimple(t *testing.T) {
|
||||||
fmt.Println("test")
|
|
||||||
tree, err := Load("a = [42, 21, 10]")
|
tree, err := Load("a = [42, 21, 10]")
|
||||||
assertTree(t, tree, err, map[string]interface{}{
|
assertTree(t, tree, err, map[string]interface{}{
|
||||||
"a": []int64{int64(42), int64(21), int64(10)},
|
"a": []int64{int64(42), int64(21), int64(10)},
|
||||||
})
|
})
|
||||||
fmt.Println("blah")
|
|
||||||
tree, _ = Load("a = [42, 21, 10,]")
|
tree, _ = Load("a = [42, 21, 10,]")
|
||||||
assertTree(t, tree, err, map[string]interface{}{
|
assertTree(t, tree, err, map[string]interface{}{
|
||||||
"a": []int64{int64(42), int64(21), int64(10)},
|
"a": []int64{int64(42), int64(21), int64(10)},
|
||||||
@@ -156,7 +177,7 @@ func TestParseFile(t *testing.T) {
|
|||||||
"title": "TOML Example",
|
"title": "TOML Example",
|
||||||
"owner.name": "Tom Preston-Werner",
|
"owner.name": "Tom Preston-Werner",
|
||||||
"owner.organization": "GitHub",
|
"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),
|
"owner.dob": time.Date(1979, time.May, 27, 7, 32, 0, 0, time.UTC),
|
||||||
"database.server": "192.168.1.1",
|
"database.server": "192.168.1.1",
|
||||||
"database.ports": []int64{8001, 8001, 8002},
|
"database.ports": []int64{8001, 8001, 8002},
|
||||||
|
|||||||
Reference in New Issue
Block a user