PaleoCrafter

Untitled

Sep 26th, 2014
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.94 KB | None | 0 0
  1. def mobile: Parser[Any] = ("[" ~> leftElements ~ "|" ~ rightElements <~ "]") ^^ { case left ~ "|" ~ right => Mobile(left ::: right, 0)}
  2.  
  3. def leftElements: Parser[List[Node]] = repsep(element, ",") ^^ {
  4.   case nodes: List[Node] =>
  5.     var pos = 1D
  6.     nodes.reverse foreach {
  7.       case s: Spacer =>
  8.         pos += s.distance
  9.       case n =>
  10.         n.distance = pos
  11.         pos += 1D
  12.     }
  13.     nodes
  14. }
  15.  
  16. def rightElements: Parser[List[Node]] = repsep(element, ",") ^^ {
  17.   case nodes: List[Node] =>
  18.     var pos = 1D
  19.     nodes foreach {
  20.       case s: Spacer =>
  21.         pos += s.distance
  22.         s.distance = -s.distance
  23.       case n =>
  24.         n.distance = -pos
  25.         pos += 1D
  26.     }
  27.     nodes
  28. }
  29.  
  30. def element: Parser[Any] = number | spacer | mobile
  31.  
  32. def number: Parser[Leaf] = floatingPointNumber ^^ { case n => Leaf(n.toDouble, 0)}
  33.  
  34. def spacer: Parser[Spacer] = ("s" ~ floatingPointNumber) ^^ { case "s" ~ n => Spacer(n.toDouble)}
Advertisement
Add Comment
Please, Sign In to add comment