Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.78 KB | None | 0 0
  1.   val textblock : Parser[String] = rep1sep("[ \\S]+".r, "\n") ^^ (lst => lst.mkString(" ").replaceAll("\\W+"," "))
  2.   val restrictions  = " *".r ~> ("an" | "n" | "a" ) ~ opt("..") ~ wholeNumber
  3.  
  4.   val lengthrestriction : Parser[Parser[Unit]] =
  5.     (("an" | "n" | "a" | "id" ) ~ opt("..") ~ wholeNumber ^^ {
  6.      case "an" ~ Some(_) ~ charlength => { s".{0,$charlength}".r }
  7.      case "an" ~ None ~ charlength => { s".{$charlength}".r }
  8.      case "n" ~ Some(_) ~ charlength => { s"\\d{0,$charlength}".r }
  9.      case "n" ~ None ~ charlength => { s"\\d{$charlength}".r }
  10.      case "a" ~ Some(_) ~ charlength => { s"[a-zA-Z +_:-]{0,$charlength}".r } //TODO extend for all legit chars
  11.      case "a" ~ None ~ charlength => { s"[a-zA-Z +_:-]{$charlength}".r }
  12.  
  13.    }).map( _.map( s => Unit) )
  14.  
  15.   val changeIndicators : Parser[String] = "+" | "*" | "#" | "|" | "X"
  16.  
  17.   def block =
  18.     blockheader ~ subblockparser(" *".r ~ "Desc: ") ~ subblockparser(" *".r ~ "Repr: ") ~ optionblock.* ^^ {
  19.       case (id, name, batch) ~ description ~ repr ~ options => (id, name, batch, description, options)
  20.     }
  21.  
  22.   def blockheader : Parser[(Int,String,String)] =
  23.     opt(changeIndicators) ~ " *".r ~> "[0-9]*".r ~ "\\s*".r ~ "(\\S|(\\s\\S))*".r ~ "\\s*".r ~ ("[" ~> ".".r <~ "]" ) <~ "\n\n" ^^ {
  24.       case id ~ _ ~ name ~ _ ~ batch => (id.toInt, name, batch )
  25.     }
  26.  
  27.   def optionblock: Parser[(String,String,String)] =
  28.     " *".r ~> "\\S*".r ~ "\\s*".r ~ "[^\n]*".r ~ "\n" ~ subblockparser(" *".r) ^^ {
  29.       case option ~ _ ~ name ~ _ ~ description => (option, name, description)
  30.     }
  31.  
  32.   def subblockparser(preamble: Parser[Any]) : Parser[String] =
  33.     preamble ~> "[^\n]*".r ~ ( ("""\n*\z""".r | "\n\n") ^^^ "" | "\n" ~> subblockparser(" *".r) ) ^^ {
  34.       case a ~ "" => a
  35.       case a ~ b => a + " " + b
  36.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement