Esempio n. 1
0
 def check_footnotes(footnotes):
     """
     Complain if there are any footnotes that don't refer to anything.
     """
     for i, line in enumerate(lines, start=1):
         for match in re.finditer(cls.FOOTNOTE_REGEX, line):
             refs = parse_range(match.group(1))
             unknown_refs = set(refs) - set(footnotes)
             if unknown_refs:
                 raise ParseError(
                         template=f"unknown {plural(unknown_refs):footnote/s} [{format_range(unknown_refs)}]",
                         culprit=inform.get_culprit(i),
                         unknown_refs=unknown_refs,
                 )
Esempio n. 2
0
    def prune_footnotes(self):
        """
        Remove footnotes that aren't referenced in the protocol.

        This can happen if a particular footnote applies to a part of a 
        protocol that wasn't included.
        """

        def union(it):
            return set.union(set(), *it)

        formatted_steps = self._format_steps().format_text(inf)
        referenced_ids = union(
                parse_range(m.group(1))
                for m in re.finditer(self.FOOTNOTE_REGEX, formatted_steps)
        )
        self.footnotes = {
                k: v
                for k, v in self.footnotes.items()
                if k in referenced_ids
        }
        self.renumber_footnotes()
Esempio n. 3
0
 def merge_footnotes(m):
     ref_ids = set()
     for ref_str in re.findall(self.FOOTNOTE_REGEX, m.group()):
         ref_ids |= parse_range(ref_str)
     return f'[{format_range(ref_ids)}]'
Esempio n. 4
0
 def renumber_footnote(m):
     ii = parse_range(m.group(1))
     jj = [new_ids[i] for i in ii]
     return f'[{format_range(jj)}]'
Esempio n. 5
0
def parse_dependencies(dependencies):
    return parse_range(dependencies) if dependencies else []
Esempio n. 6
0
def parse_ids(ids):
    if ids is None:
        return []

    return parse_range(ids, cast=parse_id)