This method scans a type U (unbanded) encounter line. For the line's format, see the specification.
# - - - B a s e E n c o u n t e r . s c a n U n b a n d e d - - - def scanUnbanded(self, scan): '''Scan an unbanded encounter line. [ scan is a Scan object -> if CAPTURE_UNBANDED + (line in scan) is a valid unbanded encounter line in the context of self.compiler -> scan := scan advanced to end of line self := self with all fields from that line added using names in self.OUT_FIELD_LIST else -> scan := scan advanced no further than end of line Log() +:= error messages raise SyntaxError ] '''
Unbanded lines start with
"U ", with two
spaces after the capture code so that these lines line up with
adjacent new-band lines. So first we need to verify the
presence of that blank suffix.
#-- 1 -- # [ if scan starts with BLANK_BAND_NO_SUFFIX -> # scan := scan advanced past that string # else -> # Log() +:= error message(s) # raise SyntaxError ] m = scan.tabMatch(BLANK_BAND_NO_SUFFIX) if m is None: scan.syntax("Expecting a blank suffix field.")
The rest of the line has exactly the same format as the corresponding parts of a new-band line, so we can use the same parser.
#-- 2 -- # [ if scan contains a valid encounter body and tail in # the context of self -> # scan := scan advanced to end of line # self := self with all fields from that line added # else -> # Log() +:= error message(s) # raise SyntaxError ] self.scanBody(scan)