Skip to content

Instantly share code, notes, and snippets.

Created September 7, 2011 23:28
Show Gist options
  • Save anonymous/1202131 to your computer and use it in GitHub Desktop.
Save anonymous/1202131 to your computer and use it in GitHub Desktop.
package ircdA.dAmn.util
import ircdA.dAmn.Packet._
import scala.util.parsing.combinator.RegexParsers
object PacketParser extends PacketParser
class PacketParser extends RegexParsers {
override def skipWhitespace = false
def identifier = """(\p{Alnum}+)""".r
def command = identifier
def param = """([\p{Alnum}:\-\.]+)""".r
def arg = ("""\n""".r ~> identifier) ~ ("=" ~> """([\p{Graph} ]+)""".r) ^^ { case key ~ value => (key, value) }
def args = (arg <~ """\n""".r.?) ~ (arg*) ^^ { case a ~ as => a :: as }
def body = """\n\n([\p{Graph}\p{Space}]*)"""
def packet:Parser[BasePacket] = command ~ (" " ~> param).? ~ args ~ body.? ^^
{ case cmd ~ prm ~ arglist ~ pk => PacketFactory.makePacket(cmd, prm, arglist.toMap, pk.map { _.toString }) }
def pattern = packet
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment