diff options
Diffstat (limited to 'src/main/scala/scalam/m/ast/Identifier.scala')
-rw-r--r-- | src/main/scala/scalam/m/ast/Identifier.scala | 20 |
1 files changed, 13 insertions, 7 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 |