package parser import "regexp" // String constants const ( StartIndicatorPrefix = "ZCZC" EndHeaderMarker = "." BeginPartMarker = "BEGIN PART" Category = "category" CategoryArrival = "ARR" CategoryDeparture = "DEP" CategoryCancellation = "CNL" CategoryDelay = "DLA" CategoryFlightPlan = "FPL" CANCELLED = "CNL" AirportCode = "airport" Date = "date" Task = "task" Index = "idx" FlightNumber = "number" Register = "reg" ) // Regular expression patterns const ( AllDigitsPattern = `^(?P\d+)$` IndexPattern = `^(?P\(?L?[0-9]+\)?:?\.?)$` DatePattern = `^(?P\d{2}\w{3})$` TaskPattern = `(?P[A-Z]\/[A-Z])$` WaypointPattern = `^(SI:)?(?P\d{4}(\(\d{2}[A-Z]{3}\))?)?\/?(?P[A-Z]{3})\/?(?P\d{4}(\(\d{2}[A-Z]{3}\))?)?$` FlightNumberPattern = `^(?P[0-9A-Z][0-9A-Z]\d{3,5}(\/\d+)*)$` RegisterPattern = `^(?PB\d{4})$` ArrPatternString = `^\((?P[A-Z]{3})-(?P[A-Z0-9]+)(\/?(?P[A-Z0-9]+))?-(?P[A-Z]{4})-(?P[A-Z]{4})(?P\d{4})\)$` DepPatternString = `^\((?P[A-Z]{3})-(?P[A-Z0-9]+)(\/(?P[A-Z0-9]+))?-(?P[A-Z]{4})(?P\d{4})-(?P[A-Z]{4})\)$` FplPatternString = `\((?P[A-Z]{3})-(?P[A-Z]+\d+)-(?P[A-Z]{2})\n-(?P[A-Z]+\d+\/?[A-Z]?)\n?-(?P.*)\n?-(?P[A-Z]{4})(?P\d{4})\n?-(?P[A-Z]+\d+)(?P[A-Z0-9]+)\s+(?P(.|\n)+)\n-(?P[A-Z]{4})(?P\d{4})\s?(?P(\s[A-Z]{4})+)\n?-([A-Z]{3}\/(?:[A-Z]{4}\d{4}\s?)+)?(?P(?m)[A-Z]{3}\/(.|\n)*)\)$` CnlPatternString = `^\((?P[A-Z]{3})-(?P\w+\d+)-?(?P[A-Z]{4})?-?(?[A-Z]{4})\)$` DlaPatternString = `^\((?P[A-Z]{3})-(?P\w+\d+)-?(?P[A-Z]{4})(?P\d{4})?-?(?[A-Z]{4})(?\d{4})?\)$` ) // Compiled regular expressions var ( AllDigitsExpression = regexp.MustCompile(AllDigitsPattern) IndexExpression = regexp.MustCompile(IndexPattern) TaskExpression = regexp.MustCompile(TaskPattern) DateExpression = regexp.MustCompile(DatePattern) WaypointExpression = regexp.MustCompile(WaypointPattern) FlightNumberExpression = regexp.MustCompile(FlightNumberPattern) RegisterExpression = regexp.MustCompile(RegisterPattern) ArrPatternExpression = regexp.MustCompile(ArrPatternString) DepPatternExpression = regexp.MustCompile(DepPatternString) FplPatternExpression = regexp.MustCompile(FplPatternString) CnlPatternExpression = regexp.MustCompile(CnlPatternString) DlaPatternExpression = regexp.MustCompile(DlaPatternString) BodyTypePattern = regexp.MustCompile(`^\(([A-Z]{3})(.*\n?)+\)$`) categoryRegex = regexp.MustCompile(`\((?P[A-Z]+)-`) emptyLineRemove = regexp.MustCompile(`(?m)^\s*$`) bodyOnly = regexp.MustCompile(`(.|\n)?(ZCZC(.|\n)*)NNNN(.|\n)?$`) originator = regexp.MustCompile(`(?P[0-9]+)\s(?P[A-Z]+)`) navPattern = regexp.MustCompile(`(?m)NAV\/(?P