From 71c57b5939a013656114449e67b4aba18bb9addf Mon Sep 17 00:00:00 2001 From: Sanket Chaudhari Date: Tue, 16 Apr 2019 17:32:45 +0530 Subject: [PATCH 1/5] Renamed fieldDate to fieldDateTime --- modules/packages/TOML.chpl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/packages/TOML.chpl b/modules/packages/TOML.chpl index 560e25244c92..158343f27dae 100644 --- a/modules/packages/TOML.chpl +++ b/modules/packages/TOML.chpl @@ -433,7 +433,7 @@ pragma "no doc" fieldReal, fieldString, fieldEmpty, - fieldDate }; + fieldDateTime }; use fieldtag; pragma "no doc" @@ -481,7 +481,7 @@ pragma "no doc" if t == nil { t = new unmanaged Toml(dt); } else { - t.tag = fieldDate; + t.tag = fieldDateTime; t.dt = dt; } } @@ -548,7 +548,7 @@ used to recursively hold tables and respective values // Datetime proc init(dt: datetime) { this.dt = dt; - this.tag = fieldDate; + this.tag = fieldDateTime; } // Int @@ -757,7 +757,7 @@ used to recursively hold tables and respective values when fieldEmpty { throw new owned TomlError("Keys must have a value"); } - when fieldDate { + when fieldDateTime { f.write(key, ' = ', toString(value)); } otherwise { @@ -810,7 +810,7 @@ used to recursively hold tables and respective values when fieldEmpty { throw new owned TomlError("Keys must have a value"); } - when fieldDate { + when fieldDateTime { f.writef('%s"%s": {"type": "%s", "value": "%s"}', ' '*indent, key, value.tomlType, toString(value)); } otherwise { @@ -848,7 +848,7 @@ used to recursively hold tables and respective values when fieldReal do return val.re:string; when fieldString do return ('"' + val.s + '"'); when fieldEmpty do return ""; // empty - when fieldDate do return val.dt.isoformat(); + when fieldDateTime do return val.dt.isoformat(); otherwise { throw new owned TomlError("Error in printing " + val.s); return val.s; @@ -886,7 +886,7 @@ used to recursively hold tables and respective values when fieldReal do return 'float'; when fieldString do return 'string'; when fieldEmpty do return 'empty'; - when fieldDate do return 'datetime'; + when fieldDateTime do return 'datetime'; when fieldToml do return 'toml'; otherwise { throw new owned TomlError("Unknown type"); From 3b0dacce812780be1226eac473b51f1539e367e8 Mon Sep 17 00:00:00 2001 From: Sanket Chaudhari Date: Tue, 16 Apr 2019 17:38:34 +0530 Subject: [PATCH 2/5] Added local date support --- modules/packages/TOML.chpl | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/modules/packages/TOML.chpl b/modules/packages/TOML.chpl index 158343f27dae..2919652f4f0d 100644 --- a/modules/packages/TOML.chpl +++ b/modules/packages/TOML.chpl @@ -144,6 +144,7 @@ module TomlParser { kv = compile('|'.join(doubleQuotes, singleQuotes, digit, keys)), dt = compile('^\\d{4}-\\d{2}-\\d{2}[ T]\\d{2}:\\d{2}:\\d{2}$'), realNum = compile("\\+\\d*\\.\\d+|\\-\\d*\\.\\d+|\\d*\\.\\d+"), + ld = compile('^\\d{4}-\\d{2}-\\d{2}$'), ints = compile("(\\d+|\\+\\d+|\\-\\d+)"), inBrackets = compile("(\\[.*?\\])"), corner = compile("(\\[.+\\])"), @@ -359,6 +360,16 @@ module TomlParser { Datetime = date; return Datetime; } + // Date + else if ld.match(val) { + var raw = getToken(source).split("-"); + var d = new date(raw[1]: int, + raw[2]: int, + raw[3]: int); + var Date: unmanaged Toml; + Date = d; + return Date; + } // Real else if realNum.match(val) { var token = getToken(source); @@ -433,6 +444,7 @@ pragma "no doc" fieldReal, fieldString, fieldEmpty, + fieldDate, fieldDateTime }; use fieldtag; @@ -476,6 +488,16 @@ pragma "no doc" } } + pragma "no doc" + proc =(ref t: unmanaged Toml, ld: date) { + if t == nil { + t = new unmanaged Toml(ld); + } else { + t.tag = fieldDate; + t.ld = ld; + } + } + pragma "no doc" proc =(ref t: unmanaged Toml, dt: datetime) { if t == nil { @@ -520,6 +542,7 @@ used to recursively hold tables and respective values boo: bool, re: real, s: string, + ld: date, dt: datetime, dom: domain(1), arr: [dom] unmanaged Toml, @@ -545,6 +568,12 @@ used to recursively hold tables and respective values this.tag = fieldToml; } + // Date + proc init(ld: date) { + this.ld = ld; + this.tag = fieldDate; + } + // Datetime proc init(dt: datetime) { this.dt = dt; @@ -757,6 +786,9 @@ used to recursively hold tables and respective values when fieldEmpty { throw new owned TomlError("Keys must have a value"); } + when fieldDate { + f.write(key, ' = ', toString(value)); + } when fieldDateTime { f.write(key, ' = ', toString(value)); } @@ -810,6 +842,7 @@ used to recursively hold tables and respective values when fieldEmpty { throw new owned TomlError("Keys must have a value"); } + // TODO: writef for fieldDate when fieldDateTime { f.writef('%s"%s": {"type": "%s", "value": "%s"}', ' '*indent, key, value.tomlType, toString(value)); } @@ -848,6 +881,7 @@ used to recursively hold tables and respective values when fieldReal do return val.re:string; when fieldString do return ('"' + val.s + '"'); when fieldEmpty do return ""; // empty + when fieldDate do return val.ld.isoformat(); when fieldDateTime do return val.dt.isoformat(); otherwise { throw new owned TomlError("Error in printing " + val.s); @@ -886,6 +920,7 @@ used to recursively hold tables and respective values when fieldReal do return 'float'; when fieldString do return 'string'; when fieldEmpty do return 'empty'; + when fieldDate do return 'date'; when fieldDateTime do return 'datetime'; when fieldToml do return 'toml'; otherwise { From 5bcdedd48f4bdb2f642e586e05f47370fcf0176e Mon Sep 17 00:00:00 2001 From: Sanket Chaudhari Date: Tue, 16 Apr 2019 18:25:24 +0530 Subject: [PATCH 3/5] Added local date in Toml clone --- modules/packages/TOML.chpl | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/packages/TOML.chpl b/modules/packages/TOML.chpl index 2919652f4f0d..7d2bae38bc53 100644 --- a/modules/packages/TOML.chpl +++ b/modules/packages/TOML.chpl @@ -614,6 +614,7 @@ used to recursively hold tables and respective values this.re = root.re; this.dom = root.dom; for idx in root.dom do this.arr[idx] = new unmanaged Toml(root.arr[idx]); + this.ld = root.ld; this.dt = root.dt; this.s = root.s; this.D = root.D; From bcc55e6628d274b4f16e757424e3abad3e00732b Mon Sep 17 00:00:00 2001 From: Sanket Chaudhari Date: Fri, 19 Apr 2019 19:55:02 +0530 Subject: [PATCH 4/5] Added tests for 'date' in TOML Parser --- test/library/packages/TOML/test/date.chpl | 16 ++++++++++++++++ test/library/packages/TOML/test/date.good | 1 + 2 files changed, 17 insertions(+) create mode 100644 test/library/packages/TOML/test/date.chpl create mode 100644 test/library/packages/TOML/test/date.good diff --git a/test/library/packages/TOML/test/date.chpl b/test/library/packages/TOML/test/date.chpl new file mode 100644 index 000000000000..d8842ee3a78a --- /dev/null +++ b/test/library/packages/TOML/test/date.chpl @@ -0,0 +1,16 @@ + +use TOML; + +config const str: string = """[owner] + name = "Foo Bar" + dob = 2000-04-30 + """; + +proc main() { + var TomlData = parseToml(str); + var dob = TomlData["owner"]["dob"]; + writeln(dob.toString()); + + delete TomlData; +} + diff --git a/test/library/packages/TOML/test/date.good b/test/library/packages/TOML/test/date.good new file mode 100644 index 000000000000..2120ab57d6a1 --- /dev/null +++ b/test/library/packages/TOML/test/date.good @@ -0,0 +1 @@ +2000-04-30 From 437df7974fdb50ee59b8de698f6969062a9a84c3 Mon Sep 17 00:00:00 2001 From: Sanket Chaudhari Date: Sat, 20 Apr 2019 19:24:51 +0530 Subject: [PATCH 5/5] added JSON for fieldDate --- modules/packages/TOML.chpl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/packages/TOML.chpl b/modules/packages/TOML.chpl index 7d2bae38bc53..07589eb96482 100644 --- a/modules/packages/TOML.chpl +++ b/modules/packages/TOML.chpl @@ -843,7 +843,9 @@ used to recursively hold tables and respective values when fieldEmpty { throw new owned TomlError("Keys must have a value"); } - // TODO: writef for fieldDate + when fieldDate { + f.writef('%s"%s": {"type": "%s", "value": "%s"}', ' '*indent, key, value.tomlType, toString(value)); + } when fieldDateTime { f.writef('%s"%s": {"type": "%s", "value": "%s"}', ' '*indent, key, value.tomlType, toString(value)); }