# - - - C e n s u s R o w L a b e l . _ f o B i r d N a m e def _foBirdName(self, s, abbr): '''Format the English name for a given bird code in XSL-Fo. [ (s is a sox.Sox instance) and (abbr is a string) -> if abbr is defined in self.birdId.txny -> s +:= the corresponding English name, in inverted order, as XSL-FO ] '''
There are two complications in proper formatting of bird
names. Double-quote (“
characters should occur in pairs as opening and closing
double-quotes; and they may contain italicized portions.
Although the xnomo3 package has
support for these features as XHTML, it does not support
Txny class does have a method named
.abbrToRawEng() that gives us the internal form, with
underbars used to signify the start and end of italics. This
will be our starting point. Example values:
"Redpoll, (_flammea_) Common".
#-- 1 # [ if abbr is defined in self.birdId.txny -> # rawEng := the corresponding raw English name # else -> raise ScriptError ] try: rawEng = self.birdId.txny.abbrToRawEng(abbr) except KeyError: raise ScriptError("Unknown bird code '%s'" % abbr)
rawEng on underbar characters gives
us a list of strings in which the elements with even indexes
are presented as-is and the ones with odd indexes are
presented in italics. Consider, for example, that the expression
'small _Accipiter_ sp.'.split('_') yields the
['small ', 'Accipiter', ' sp.']. For
['', 'Buteo', ' sp.'].
#-- 2 partList = rawEng.split('_')
Italicization is handled by Section 36.9, “
CensusRowLabel._foItalicize(): Render in
italics”; substitution of
proper paired double-quotes is handled by Section 36.10, “
#-- 3 # [ s +:= elements of partList such that elements with even # indices are presented as-is and elements with odd # indices italicized, and double-quote characters in # each element alternate between “ and # ” ] for elx, part in enumerate(partList): #-- 3 body # [ if elx is even -> # s +:= part with double-quote characters replaced # alternately by “ and ” # else -> # s +:= part in italics, with double-quote characters # replaced alternately by “ and ” ] if (elx % 2) == 0: self._foRealQuotes(s, part) else: self._foItalicize(s, part)