aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@odersky.com>2018-04-08 20:01:45 -0700
committerJakob Odersky <jakob@odersky.com>2018-04-08 20:01:45 -0700
commitcecbadcd128d3b3113e133f92555b16dbc68e51d (patch)
treeeb765c7faa3d558262d3e68e3b4c2a9f7f26d6f5
parentc3de3b92ce7af3ed2bede39859890c6c47a06cc9 (diff)
downloadyamlesque-cecbadcd128d3b3113e133f92555b16dbc68e51d.tar.gz
yamlesque-cecbadcd128d3b3113e133f92555b16dbc68e51d.tar.bz2
yamlesque-cecbadcd128d3b3113e133f92555b16dbc68e51d.zip
Add empty value
-rw-r--r--yamlesque-spray/src/main/scala/formats.scala4
-rw-r--r--yamlesque/src/main/scala/YamlParser.scala19
-rw-r--r--yamlesque/src/main/scala/YamlPrinter.scala2
-rw-r--r--yamlesque/src/main/scala/yamlValues.scala5
-rw-r--r--yamlesque/src/test/scala/ParserTests.scala8
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")
)
}