コード例 #1
0
def _get_bullet_string(paragraph: ElementTree.Element,
                       context: Dict[str, Any]) -> str:
    """
    Get bullet string if paragraph is numbered. (e.g, '-  ' or '1)  ')

    :param paragraph: <w:p> xml element
    :param context: dictionary of document attributes generated in ``get_context``
    :return: specified 'bullet' string or '' if paragraph is not numbered

    <w:p>
        <w:pPr>
            <w:numPr>
                <w:ilvl w:val="0"/>
                <w:numId w:val="9"/>
            </w:numPr>
        </wpPr>
        <w:r>
            <w:t>this text in numbered or bulleted list
            </w:t>
        </w:r>
    </w:p>

    bullet preceded by four spaces for every indentation level.
    """
    try:
        pPr = paragraph.find(qn("w:pPr"))
        numPr = pPr.find(qn("w:numPr"))
        numId = numPr.find(qn("w:numId")).attrib[qn("w:val")]
        ilvl = numPr.find(qn("w:ilvl")).attrib[qn("w:val")]
        numFmt = context["numId2numFmts"][numId][int(ilvl)]
    except (AttributeError, KeyError):
        # not a numbered paragraph
        return ""

    number = _increment_list_counter(context["numId2count"][numId], ilvl)
    indent = "\t" * int(ilvl)

    def format_bullet(bullet: str) -> str:
        """Indent, format and pad the bullet or number string."""
        if bullet != nums.bullet():
            bullet += ")"
        return indent + bullet + "\t"

    if numFmt == "decimal":
        return format_bullet(nums.decimal(number))
    elif numFmt == "lowerLetter":
        return format_bullet(nums.lower_letter(number))
    elif numFmt == "upperLetter":
        return format_bullet(nums.upper_letter(number))
    elif numFmt == "lowerRoman":
        return format_bullet(nums.lower_roman(number))
    elif numFmt == "upperRoman":
        return format_bullet(nums.upper_roman(number))
    elif numFmt == "bullet":
        return format_bullet(nums.bullet())
    else:
        warnings.warn("%s numbering format not implemented, substituting %s" %
                      (numFmt, nums.bullet()))
        return format_bullet(nums.bullet())
コード例 #2
0
def test_upper_roman() -> None:
    """Same as lower_roman, but upper"""
    for _ in range(100):
        n = randint(1, 10000)
        assert upper_roman(n) == lower_roman(n).upper()
コード例 #3
0
 def test_neg(self) -> None:
     """Raise a value error for < 1"""
     with pytest.raises(ValueError) as msg:
         lower_roman(-1)
     assert "Roman" in str(msg.value)
コード例 #4
0
 def test_convert_positive_int(self) -> None:
     """Convert a positive integer to a string of letters"""
     for arabic, roman in ARABIC_2_ROMAN.items():
         assert lower_roman(arabic) == roman