aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorosboxes.org <anders.forsgren@gmail.com>2015-10-07 11:35:49 +0200
committerosboxes.org <anders.forsgren@gmail.com>2015-10-07 11:35:49 +0200
commitdea8646b8b98583d15528031138682d1ac9ada85 (patch)
tree0649ef3ba81f8db77c18139e6c6100bb6fc50745
parent96c6cd94ec32fb58603764ba33e19319a3165d75 (diff)
downloadmilf-rs-dea8646b8b98583d15528031138682d1ac9ada85.tar.gz
milf-rs-dea8646b8b98583d15528031138682d1ac9ada85.zip
Allow BOM (Byte order mark) in toml
-rw-r--r--src/parser.rs9
-rw-r--r--tests/valid.rs3
-rw-r--r--tests/valid/example-bom.toml5
3 files changed, 17 insertions, 0 deletions
diff --git a/src/parser.rs b/src/parser.rs
index 394465f..190454c 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -190,6 +190,14 @@ impl<'a> Parser<'a> {
false
}
+ // Consumes a BOM (Byte Order Mark) if one is next
+ fn bom(&mut self) -> bool {
+ match self.peek(0) {
+ Some((_, '\u{feff}')) => { self.cur.next(); true }
+ _ => false
+ }
+ }
+
// Consumes whitespace ('\t' and ' ') until another character (or EOF) is
// reached. Returns if any whitespace was consumed
fn ws(&mut self) -> bool {
@@ -234,6 +242,7 @@ impl<'a> Parser<'a> {
/// to determine the cause of the parse failure.
pub fn parse(&mut self) -> Option<super::Table> {
let mut ret = TomlTable { values: BTreeMap::new(), defined: false };
+ self.bom();
while self.peek(0).is_some() {
self.ws();
if self.newline() { continue }
diff --git a/tests/valid.rs b/tests/valid.rs
index 568518b..f346781 100644
--- a/tests/valid.rs
+++ b/tests/valid.rs
@@ -178,3 +178,6 @@ test!(example3,
test!(example4,
include_str!("valid/example-v0.4.0.toml"),
include_str!("valid/example-v0.4.0.json"));
+test!(example_bom,
+ include_str!("valid/example-bom.toml"),
+ include_str!("valid/example.json"));
diff --git a/tests/valid/example-bom.toml b/tests/valid/example-bom.toml
new file mode 100644
index 0000000..fb5ac81
--- /dev/null
+++ b/tests/valid/example-bom.toml
@@ -0,0 +1,5 @@
+best-day-ever = 1987-07-05T17:45:00Z
+
+[numtheory]
+boring = false
+perfection = [6, 28, 496]