multiple_non_comments = (
    (atomic.paragraphs_marker | atomic.paragraph_marker
        | atomic.sections_marker | atomic.section_marker)
    + _inner_non_comment.copy().setParseAction(keep_pos).setResultsName("head")
    + _inner_non_comment_tail)

multiple_section_paragraphs = (
    section_paragraph.copy().setParseAction(keep_pos).setResultsName("head")
    + _inner_non_comment_tail)

multiple_period_sections = (
    atomic.sections_marker
    + part_section.copy().setParseAction(keep_pos).setResultsName("head")
    + OneOrMore(
        atomic.conj_phrases
        + period_section.copy().setParseAction(keep_pos).setResultsName(
            "tail", listAllMatches=True)))

multiple_appendix_section = (
    appendix_with_section.copy().setParseAction(keep_pos).setResultsName(
        "head")
    + OneOrMore(
        Optional(Suppress('('))
        + atomic.conj_phrases
        + _inner_non_comment.copy().setParseAction(keep_pos).setResultsName(
            "tail", listAllMatches=True)
        + Optional(Suppress(')'))))

#   Use "Empty" so we don't rename atomic.appendix
multiple_appendices = (
    atomic.appendices_marker
    + (atomic.appendix + Empty()).setParseAction(keep_pos).setResultsName(
        "tail", listAllMatches=True) + Optional(Suppress(')')))

multiple_non_comments = (
    (atomic.paragraphs_marker | atomic.paragraph_marker
     | atomic.sections_marker | atomic.section_marker) +
    _inner_non_comment.copy().setParseAction(keep_pos).setResultsName("head") +
    _inner_non_comment_tail)

multiple_section_paragraphs = (
    section_paragraph.copy().setParseAction(keep_pos).setResultsName("head") +
    _inner_non_comment_tail)

multiple_period_sections = (
    atomic.sections_marker +
    part_section.copy().setParseAction(keep_pos).setResultsName("head") +
    OneOrMore(atomic.conj_phrases + period_section.copy().setParseAction(
        keep_pos).setResultsName("tail", listAllMatches=True)))

multiple_appendix_section = (appendix_with_section.copy().setParseAction(
    keep_pos).setResultsName("head") + OneOrMore(
        Optional(Suppress('(')) + atomic.conj_phrases +
        _inner_non_comment.copy().setParseAction(keep_pos).setResultsName(
            "tail", listAllMatches=True) + Optional(Suppress(')'))))

#   Use "Empty" so we don't rename atomic.appendix
multiple_appendices = (
    atomic.appendices_marker +
    (atomic.appendix + Empty()).setParseAction(keep_pos).setResultsName("head")
    + OneOrMore(atomic.conj_phrases +
                (atomic.appendix + Empty()).setParseAction(
                    keep_pos).setResultsName("tail", listAllMatches=True)))