예제 #1
0
from regparser import utils
from regparser.citations import internal_citations, Label
from regparser.tree.appendix import carving, generic
from regparser.tree.paragraph import ParagraphParser
from regparser.tree.struct import Node
import string

parParser = ParagraphParser(r"\(%s\)", Node.APPENDIX)


def trees_from(text, part, parent_label):
    """Build a tree for the appendix section. It will have children for each
    appendix. Text is the text of the entire regulation, while part is the
    regulation's part (e.g. 1520.)"""
    children = []
    for begin, end in carving.appendices(text):
        title, appendix = utils.title_body(text[begin:end])
        appendix_letter = carving.get_appendix_letter(title, part)
        label = parent_label + [appendix_letter]
        sections = carving.appendix_sections(appendix, appendix_letter)
        if sections:
            child = paragraph_tree(appendix_letter, sections, appendix, label,
                                   title)
        else:
            child = generic_tree(appendix, label, title)
        children.append(child)
    return children


def letter_for(index):
    """Convert an index into a letter (or letter pair). a-z, then aa-az-zz"""
예제 #2
0
 def setUp(self):
     """Use a parser like that used for reg text."""
     self.regParser = ParagraphParser(r"\({0}\)", Node.REGTEXT)
from itertools import takewhile
import logging

from regparser import utils
from regparser.citations import internal_citations, Label
from regparser.grammar import unified
import regparser.grammar.interpretation_headers as grammar
from regparser.tree.paragraph import ParagraphParser
from regparser.tree.struct import Node, treeify


#   Can only be preceded by white space or a start of line
interpParser = ParagraphParser(r"(?<![^\s])%s\.", Node.INTERP)


def build(text, part):
    """Create a tree representing the whole interpretation."""
    part = str(part)
    title, body = utils.title_body(text)
    segments = segment_by_header(body, part)

    if segments:
        children = [segment_tree(body[s:e], part, [part]) for s, e in segments]
        return Node(
            body[:segments[0][0]], treeify(children),
            [part, Node.INTERP_MARK], title, Node.INTERP)
    else:
        return Node(
            body, [], [part, Node.INTERP_MARK], title,
            Node.INTERP)
예제 #4
0
        for start, end in subpart_locations:
            subpart_body = body[start:end]
            subpart, _ = build_subparts_tree(
                subpart_body, part, lambda p: build_subpart(subpart_body, p))
            subparts_list.append(subpart)
    else:
        emptypart, children_text = build_subparts_tree(body, part,
                                                       build_empty_part)
        if emptypart.children:
            subparts_list.append(emptypart)
        else:
            return struct.Node(text, [build_empty_part(part)], label, title)
    return struct.Node(children_text, subparts_list, label, title)


regParser = ParagraphParser(r"\(%s\)", struct.Node.REGTEXT)


def build_empty_part(part):
    """ When a regulation doesn't have a subpart, we give it an emptypart (a
    dummy subpart) so that the regulation tree is consistent. """

    label = [str(part), 'Subpart']
    return struct.Node('', [], label, '', node_type=struct.Node.EMPTYPART)


def build_subpart(text, part):
    results = marker_subpart_title.parseString(text)
    subpart_letter = results.subpart
    subpart_title = results.subpart_title
    label = [str(part), 'Subpart', subpart_letter]