From cecbadcd128d3b3113e133f92555b16dbc68e51d Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sun, 8 Apr 2018 20:01:45 -0700 Subject: Add empty value --- yamlesque/src/main/scala/YamlParser.scala | 19 +++++++++---------- yamlesque/src/main/scala/YamlPrinter.scala | 2 ++ yamlesque/src/main/scala/yamlValues.scala | 5 ++--- yamlesque/src/test/scala/ParserTests.scala | 8 ++++---- 4 files changed, 17 insertions(+), 17 deletions(-) (limited to 'yamlesque') 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") ) } -- cgit v1.2.3