Browse Source

Changed signature of parsed_until

pull/58/head
Louis 11 years ago
parent
commit
4f37f3c7c2
  1. 21
      patacrep/plastex_chord.py

21
patacrep/plastex_chord.py

@ -76,28 +76,30 @@ def match_egroup(token):
"""Return True if token is of type `egroup` (end of group).""" """Return True if token is of type `egroup` (end of group)."""
return isinstance(token, plasTeX.Base.Text.egroup) #pylint: disable=no-member return isinstance(token, plasTeX.Base.Text.egroup) #pylint: disable=no-member
def parse_until(tex, end=lambda x: False, discard_last=True): def parse_until(tex, end=lambda x: False):
"""Parse `tex` until condition `end`, or `egroup` is met. """Parse `tex` until condition `end`, or `egroup` is met.
Arguments: Arguments:
- tex: object to parse - tex: object to parse
- end: function taking a token in argument, and returning a boolean. - end: function taking a token in argument, and returning a boolean.
Parsing stops when this function returns True, or an `egroup` is met. Parsing stops when this function returns True, or an `egroup` is met.
- discard_last: if True, does not return last token.
Return: the list of parsed tokens. Return: a tuple of two items (the list of parsed tokens, last token). This
is done so that caller can decide whether they want to discard it or not.
Last token can be None if everything has been parsed without the end
condition being met.
""" """
parsed = [] parsed = []
last = None
for token in tex: for token in tex:
if end(token) or match_egroup(token): if end(token) or match_egroup(token):
if not discard_last: last = token
parsed.append(token)
break break
elif isinstance(token, plasTeX.Base.Text.bgroup): #pylint: disable=no-member elif isinstance(token, plasTeX.Base.Text.bgroup): #pylint: disable=no-member
# pylint: disable=expression-not-assigned # pylint: disable=expression-not-assigned
[token.appendChild(item) for item in parse_until(tex, match_egroup)] [token.appendChild(item) for item in parse_until(tex, match_egroup)]
parsed.append(token) parsed.append(token)
return parsed return (parsed, last)
class Chord(Command): class Chord(Command):
@ -124,7 +126,7 @@ class BeginChordOrDisplayMath(BeginDisplayMath):
self.ownerDocument.context.catcode("&", 13) #pylint: disable=no-member self.ownerDocument.context.catcode("&", 13) #pylint: disable=no-member
chord.setAttribute( chord.setAttribute(
'name', 'name',
parse_until(tex, match_closing_square_bracket), parse_until(tex, match_closing_square_bracket)[0],
) )
self.ownerDocument.context.pop() #pylint: disable=no-member self.ownerDocument.context.pop() #pylint: disable=no-member
@ -154,11 +156,12 @@ class BeginChordOrDisplayMath(BeginDisplayMath):
return [chord] return [chord]
elif isinstance(token, plasTeX.Base.Text.bgroup): #pylint: disable=no-member elif isinstance(token, plasTeX.Base.Text.bgroup): #pylint: disable=no-member
# pylint: disable=expression-not-assigned # pylint: disable=expression-not-assigned
[chord.appendChild(item) for item in parse_until(tex)] [chord.appendChild(item) for item in parse_until(tex)[0]]
return [chord] return [chord]
else: else:
chord.appendChild(token) chord.appendChild(token)
parsed = parse_until(tex, match_space, discard_last=False) (parsed, last) = parse_until(tex, match_space)
parsed.append(last)
# pylint: disable=expression-not-assigned # pylint: disable=expression-not-assigned
[chord.appendChild(item) for item in parsed[:-1]] [chord.appendChild(item) for item in parsed[:-1]]
return [chord] return [chord]

Loading…
Cancel
Save