File: //proc/thread-self/root/lib/python3.6/site-packages/docutils/utils/__pycache__/roman.cpython-36.pyc
3
w2�e
� @ s� d Z dZdZdZdZddlZG dd� de�ZG d d
� d
e�ZG dd� de�Z G d
d� de�Z
d;Zd)d*� Zej
d+ej�Zd,d-� ZdS )<z"Convert to and from Roman numeralsz&Mark Pilgrim ([email protected])z1.4z
8 August 2001ag Copyright (c) 2001 Mark Pilgrim
This program is part of "Dive Into Python", a free Python tutorial for
experienced programmers. Visit http://diveintopython.org/ for the
latest version.
This program is free software; you can redistribute it and/or modify
it under the terms of the Python 2.1.1 license, available at
http://www.python.org/2.1.1/license.html
� Nc @ s e Zd ZdS )�
RomanErrorN)�__name__�
__module__�__qualname__� r r �/usr/lib/python3.6/roman.pyr s r c @ s e Zd ZdS )�OutOfRangeErrorN)r r r r r r r r s r c @ s e Zd ZdS )�NotIntegerErrorN)r r r r r r r r s r c @ s e Zd ZdS )�InvalidRomanNumeralErrorN)r r r r r r r r
s r
�M�� �CM� �D�� �CD� �C�d �XC�Z �L�2 �XL�( �X�
�IX� �V� �IV� �I� c C sl d| k odk n s t d��t| �| kr4td��d}x.tD ]&\}}x| |krb||7 }| |8 } qHW q>W |S )z convert integer to Roman numeralr i� z%number out of range (must be 1..4999)zdecimals can not be converted� )r �intr �romanNumeralMap)�n�result�numeral�integerr r r �toRoman( s
r, a8
^ # beginning of string
M{0,4} # thousands - 0 to 4 M's
(CM|CD|D?C{0,3}) # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),
# or 500-800 (D, followed by 0 to 3 C's)
(XC|XL|L?X{0,3}) # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),
# or 50-80 (L, followed by 0 to 3 X's)
(IX|IV|V?I{0,3}) # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),
# or 5-8 (V, followed by 0 to 3 I's)
$ # end of string
c C sr | st d��tj| �s"t d| ��d}d}xBtD ]:\}}x0| ||t|� � |krh||7 }|t|�7 }q:W q0W |S )z convert Roman numeral to integerzInput can not be blankzInvalid Roman numeral: %sr )r
�romanNumeralPattern�searchr'