diff options
author | Jakob Odersky <jakob@odersky.com> | 2018-04-08 20:01:45 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2018-04-08 20:01:45 -0700 |
commit | cecbadcd128d3b3113e133f92555b16dbc68e51d (patch) | |
tree | eb765c7faa3d558262d3e68e3b4c2a9f7f26d6f5 | |
parent | c3de3b92ce7af3ed2bede39859890c6c47a06cc9 (diff) | |
download | yamlesque-cecbadcd128d3b3113e133f92555b16dbc68e51d.tar.gz yamlesque-cecbadcd128d3b3113e133f92555b16dbc68e51d.tar.bz2 yamlesque-cecbadcd128d3b3113e133f92555b16dbc68e51d.zip |
Add empty value
-rw-r--r-- | yamlesque-spray/src/main/scala/formats.scala | 4 | ||||
-rw-r--r-- | yamlesque/src/main/scala/YamlParser.scala | 19 | ||||
-rw-r--r-- | yamlesque/src/main/scala/YamlPrinter.scala | 2 | ||||
-rw-r--r-- | yamlesque/src/main/scala/yamlValues.scala | 5 | ||||
-rw-r--r-- | yamlesque/src/test/scala/ParserTests.scala | 8 |
5 files changed, 19 insertions, 19 deletions
diff --git a/yamlesque-spray/src/main/scala/formats.scala b/yamlesque-spray/src/main/scala/formats.scala index 4434347..188f4a9 100644 --- a/yamlesque-spray/src/main/scala/formats.scala +++ b/yamlesque-spray/src/main/scala/formats.scala @@ -17,7 +17,7 @@ trait JsonYamlFormats { object JsonFormats { def jsonToYaml(js: JsValue): YamlValue = js match { - case JsNull => YamlScalar.Empty + case JsNull => YamlEmpty case JsNumber(number) => YamlScalar(number.toString) case JsBoolean(value) => YamlScalar(value.toString) case JsString(value) => YamlScalar(value) @@ -28,7 +28,7 @@ object JsonFormats { val JsNumberPattern = """([-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)""".r def yamlToJson(yaml: YamlValue): JsValue = yaml match { - case YamlScalar.Empty => JsNull + case YamlEmpty => JsNull case YamlScalar("true") => JsTrue case YamlScalar("false") => JsFalse case YamlScalar(JsNumberPattern(x)) => JsNumber(x.toDouble) diff --git a/yamlesque/src/main/scala/YamlParser.scala b/yamlesque/src/main/scala/YamlParser.scala index 71849f1..f7a0f9b 100644 --- a/yamlesque/src/main/scala/YamlParser.scala +++ b/yamlesque/src/main/scala/YamlParser.scala @@ -140,20 +140,19 @@ object YamlParser extends (Iterator[Char] => YamlValue) { } private def fetchScalar(): Unit = { - def finishScalar() = token = Token(IDENTIFIER, tokenValue()) + val l = line + val c = col @tailrec def fetchRest(): Unit = ch0 match { case ':' if isBlank(ch1) => - finishScalar() + token = Token(IDENTIFIER, tokenValue()) case LF => - finishScalar() + token = Token(IDENTIFIER, tokenValue()) case SU => - finishScalar() + token = Token(IDENTIFIER, tokenValue()) case c => putChar() fetchRest() } - val l = line - val c = col fetchRest() token.setPos(l, c) } @@ -199,7 +198,7 @@ object YamlParser extends (Iterator[Char] => YamlValue) { token0.kind match { case ITEM => readNext() - items += nextBlock(startCol) + items += nextBlock(startCol + 1) case _ => wrongKind(token0, ITEM) } } @@ -217,7 +216,7 @@ object YamlParser extends (Iterator[Char] => YamlValue) { token0.kind match { case MAPPING => readNext() - val value = nextBlock(startCol) + val value = nextBlock(startCol + 1) fields += key -> value case _ => wrongKind(token0, MAPPING) } @@ -230,7 +229,7 @@ object YamlParser extends (Iterator[Char] => YamlValue) { def nextBlock(startCol: Int): YamlValue = { if (token0.col < startCol) { - YamlScalar.Empty + YamlEmpty } else { token0.kind match { case IDENTIFIER => @@ -243,7 +242,7 @@ object YamlParser extends (Iterator[Char] => YamlValue) { } case ITEM => nextSequence() - case EOF => YamlScalar.Empty + case EOF => YamlEmpty case _ => wrongKind(token0, IDENTIFIER, ITEM) } } diff --git a/yamlesque/src/main/scala/YamlPrinter.scala b/yamlesque/src/main/scala/YamlPrinter.scala index 0a1c008..083a8a8 100644 --- a/yamlesque/src/main/scala/YamlPrinter.scala +++ b/yamlesque/src/main/scala/YamlPrinter.scala @@ -38,6 +38,8 @@ class YamlPrinter(compact: Boolean = true) extends (YamlValue => String) { p(value, indentation + 1) } } + case YamlEmpty => + str += '\n' } p(value, 0) str.toString diff --git a/yamlesque/src/main/scala/yamlValues.scala b/yamlesque/src/main/scala/yamlValues.scala index 958fccc..4432b9d 100644 --- a/yamlesque/src/main/scala/yamlValues.scala +++ b/yamlesque/src/main/scala/yamlValues.scala @@ -19,6 +19,5 @@ object YamlSequence { } case class YamlScalar(value: String) extends YamlValue -object YamlScalar { - final val Empty = YamlScalar("") -} + +case object YamlEmpty extends YamlValue diff --git a/yamlesque/src/test/scala/ParserTests.scala b/yamlesque/src/test/scala/ParserTests.scala index b93b159..9229a14 100644 --- a/yamlesque/src/test/scala/ParserTests.scala +++ b/yamlesque/src/test/scala/ParserTests.scala @@ -6,7 +6,7 @@ object ParserTests extends TestSuite { val tests = Tests { "parse empty string" - { - "".parseYaml ==> YamlScalar.Empty + "".parseYaml ==> YamlEmpty } "parse simple scalar" - { "hello".parseYaml ==> YamlScalar("hello") @@ -27,7 +27,7 @@ object ParserTests extends TestSuite { "-hello world".parseYaml ==> YamlScalar("-hello world") } "parse empty list" - { - "-".parseYaml ==> YamlSequence(YamlScalar.Empty) + "-".parseYaml ==> YamlSequence(YamlEmpty) } "parse a simple list" - { "-\n a\n-\n b\n-\n c".parseYaml ==> YamlSequence(YamlScalar("a"), @@ -106,13 +106,13 @@ object ParserTests extends TestSuite { } "parse a simple mapping without a value" - { "a:\n".parseYaml ==> YamlMapping( - "a" -> YamlScalar("") + "a" -> YamlEmpty ) } "parse a mapping without a value" - { "k1: v1\nk2:\nk3: v3".parseYaml ==> YamlMapping( "k1" -> YamlScalar("v1"), - "k2" -> YamlScalar.Empty, + "k2" -> YamlEmpty, "k3" -> YamlScalar("v3") ) } |