Added support for all special characters except null

This commit is contained in:
moandji.ezana 2013-02-28 10:59:17 +02:00
parent c00eff9dad
commit 53c2de5519
3 changed files with 28 additions and 7 deletions

View file

@ -84,7 +84,7 @@ class TomlParser extends BaseParser<Object> {
}
Rule SpecialCharacter() {
return Sequence(Sequence('\\', FirstOf('n', '"')), pushCharacter(match()));
return Sequence(Sequence('\\', ANY), pushCharacter(match()));
}
Rule AnyCharacter() {
@ -132,7 +132,7 @@ class TomlParser extends BaseParser<Object> {
}
Object currentValue = newKeyGroup.get(splitKey);
if (!(currentValue instanceof Map)) {
results().errors.append("Could not create key group ").append(name).append(": key already exists!");
results().errors.append("Could not create key group ").append(name).append(": key already exists!\n");
return true;
}
@ -174,7 +174,7 @@ class TomlParser extends BaseParser<Object> {
push(date);
return true;
} catch (Exception e) {
results().errors.append("Invalid date: ").append(dateString);
results().errors.append("Invalid date: ").append(dateString).append("\n");
return false;
}
}
@ -207,6 +207,14 @@ class TomlParser extends BaseParser<Object> {
sb.append('\n');
} else if (sc.equals("\\\"")) {
sb.append('\"');
} else if (sc.equals("\\t")) {
sb.append('\t');
} else if (sc.equals("\\r")) {
sb.append('\r');
} else if (sc.equals("\\\\")) {
sb.append('\\');
} else if (sc.startsWith("\\")) {
results().errors.append(sc + " is a reserved special character and cannot be used!\n");
} else {
sb.append(sc);
}
@ -217,7 +225,7 @@ class TomlParser extends BaseParser<Object> {
void putValue(String name, Object value) {
Map<String, Object> values = (Map<String, Object>) peek();
if (values.containsKey(name)) {
results().errors.append("Key ").append(name).append(" already exists!");
results().errors.append("Key ").append(name).append(" already exists!\n");
return;
}
values.put(name, value);

View file

@ -170,10 +170,22 @@ public class TomlTest {
}
@Test
public void should_support_double_quote_in_string() {
Toml toml = new Toml().parse("key=\"double \\\" quote\"");
public void should_support_special_characters_in_strings() {
Toml toml = new Toml().parse(new File(getClass().getResource("should_support_special_characters_in_strings.toml").getFile()));
assertEquals("double \" quote", toml.getString("key"));
assertEquals("\" \t \n \r \\", toml.getString("key"));
}
@Test(expected = IllegalStateException.class)
public void should_fail_on_reserved_special_character_in_strings() throws Exception {
new Toml().parse("key=\"\\m\"");
}
@Test
public void should_ignore_comma_at_end_of_array() throws Exception {
Toml toml = new Toml().parse("key=[1,2,3,]");
assertEquals(asList(1L, 2L, 3L), toml.getList("key", Long.class));
}
@Test(expected = IllegalStateException.class)

View file

@ -0,0 +1 @@
key = "\" \t \n \r \\"