From 2dfddf1c5f8f43d32a1a60af4263f5b338c15bd0 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Thu, 1 Nov 2012 13:01:29 +0100 Subject: add default dataset name check --- src/main/scala/scalam/m/ast/Identifier.scala | 20 +++++++++++++------- src/main/scala/scalam/plotting/DataSet.scala | 11 +++++++++-- src/main/scala/scalam/plotting/Plot.scala | 6 +++--- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/scala/scalam/m/ast/Identifier.scala b/src/main/scala/scalam/m/ast/Identifier.scala index 6778e74..45dd967 100644 --- a/src/main/scala/scalam/m/ast/Identifier.scala +++ b/src/main/scala/scalam/m/ast/Identifier.scala @@ -7,15 +7,21 @@ package scalam.m.ast * @define construct identifier */ case class Identifier(name: String) extends Mable { - def m = name +} + +object Identifier { + + def makeValid(raw: String) = { + val transformSymbols = Map(' ' -> '_').withDefault(c => c) - def toValid = { - val word = name.filter(c => c.isLetterOrDigit || c == '_') - val id = word.headOption match { - case None => "x" - case Some(c) => if (!c.isLetter) 'x' + word else word + val validChars = raw.map(c => transformSymbols(c)) + + validChars.headOption match { + case Some(c) if (!c.isLetter) => 'x' + validChars + case Some(c) => validChars + case None => "id" } - Identifier(id) } + } \ No newline at end of file diff --git a/src/main/scala/scalam/plotting/DataSet.scala b/src/main/scala/scalam/plotting/DataSet.scala index 768189c..31e65c7 100644 --- a/src/main/scala/scalam/plotting/DataSet.scala +++ b/src/main/scala/scalam/plotting/DataSet.scala @@ -1,12 +1,13 @@ package scalam.plotting +import scalam.m.ast.Identifier import scalax.file.Path import breeze.linalg.{ Vector, DenseVector } -case class DataSet(points: Seq[(Double, Double)], label: String) { - val name = scalam.m.ast.Identifier(label).toValid.name +case class DataSet(points: Seq[(Double, Double)], label: String, name: String) { lazy val (xs, ys) = points.unzip + def save(path: Path) = { path.createFile(createParents = true, failIfExists = false) for (processor <- path.outputProcessor; out = processor.asOutput) @@ -15,3 +16,9 @@ case class DataSet(points: Seq[(Double, Double)], label: String) { } +object DataSet { + + def apply(points: Seq[(Double, Double)], label: String) = new DataSet(points, label, Identifier.makeValid(label)) + +} + diff --git a/src/main/scala/scalam/plotting/Plot.scala b/src/main/scala/scalam/plotting/Plot.scala index 3c96a22..45d755e 100644 --- a/src/main/scala/scalam/plotting/Plot.scala +++ b/src/main/scala/scalam/plotting/Plot.scala @@ -116,12 +116,12 @@ object Plot { import scala.util.Random val data = for (i <- 0 until length) yield (i * 1.0, Random.nextDouble() * 10) val name = "a" - new DataSet(data, name) + DataSet(data, name) } val ds = Seq( - new DataSet(Seq((0.0, 1.0), (1.0, 1.0), (2.0, 1.0), (3.0, 0.0), (4.0, 1.0), (5.0, 1.0)), "temperature"), - new DataSet(Seq((0.0, 0.0), (1.0, 1.0), (2.0, 4.0), (3.0, 9.0)), """\alpha""")) ++ (0 to 10).map(_ => randomDataSet(10)) + DataSet(Seq((0.0, 1.0), (1.0, 1.0), (2.0, 1.0), (3.0, 0.0), (4.0, 1.0), (5.0, 1.0)), "temperature"), + DataSet(Seq((0.0, 0.0), (1.0, 1.0), (2.0, 4.0), (3.0, 9.0)), """\alpha""")) ++ (0 to 10).map(_ => randomDataSet(10)) val test = new Plot(ds, "title", "x", "y") -- cgit v1.2.3