Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- val textblock : Parser[String] = rep1sep("[ \\S]+".r, "\n") ^^ (lst => lst.mkString(" ").replaceAll("\\W+"," "))
- val restrictions = " *".r ~> ("an" | "n" | "a" ) ~ opt("..") ~ wholeNumber
- val lengthrestriction : Parser[Parser[Unit]] =
- (("an" | "n" | "a" | "id" ) ~ opt("..") ~ wholeNumber ^^ {
- case "an" ~ Some(_) ~ charlength => { s".{0,$charlength}".r }
- case "an" ~ None ~ charlength => { s".{$charlength}".r }
- case "n" ~ Some(_) ~ charlength => { s"\\d{0,$charlength}".r }
- case "n" ~ None ~ charlength => { s"\\d{$charlength}".r }
- case "a" ~ Some(_) ~ charlength => { s"[a-zA-Z +_:-]{0,$charlength}".r } //TODO extend for all legit chars
- case "a" ~ None ~ charlength => { s"[a-zA-Z +_:-]{$charlength}".r }
- }).map( _.map( s => Unit) )
- val changeIndicators : Parser[String] = "+" | "*" | "#" | "|" | "X"
- def block =
- blockheader ~ subblockparser(" *".r ~ "Desc: ") ~ subblockparser(" *".r ~ "Repr: ") ~ optionblock.* ^^ {
- case (id, name, batch) ~ description ~ repr ~ options => (id, name, batch, description, options)
- }
- def blockheader : Parser[(Int,String,String)] =
- opt(changeIndicators) ~ " *".r ~> "[0-9]*".r ~ "\\s*".r ~ "(\\S|(\\s\\S))*".r ~ "\\s*".r ~ ("[" ~> ".".r <~ "]" ) <~ "\n\n" ^^ {
- case id ~ _ ~ name ~ _ ~ batch => (id.toInt, name, batch )
- }
- def optionblock: Parser[(String,String,String)] =
- " *".r ~> "\\S*".r ~ "\\s*".r ~ "[^\n]*".r ~ "\n" ~ subblockparser(" *".r) ^^ {
- case option ~ _ ~ name ~ _ ~ description => (option, name, description)
- }
- def subblockparser(preamble: Parser[Any]) : Parser[String] =
- preamble ~> "[^\n]*".r ~ ( ("""\n*\z""".r | "\n\n") ^^^ "" | "\n" ~> subblockparser(" *".r) ) ^^ {
- case a ~ "" => a
- case a ~ b => a + " " + b
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement