3

T'íc€
ã@s‚dZdZdZdZdZddlZGdd„deƒZGd	d
„d
eƒZGdd„deƒZ	Gd
d„deƒZ
d;Zd)d*„Zej
d+ejƒZd,d-„ZdS)<z"Convert to and from Roman numeralsz&Mark Pilgrim (f8dy@diveintopython.org)z1.4z
8 August 2001agCopyright (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eZdZdS)Ú
RomanErrorN)Ú__name__Ú
__module__Ú__qualname__©rrú8/tmp/pip-build-gk9425m9/docutils/docutils/utils/roman.pyrsrc@seZdZdS)ÚOutOfRangeErrorN)rrrrrrrrsrc@seZdZdS)ÚNotIntegerErrorN)rrrrrrrr	sr	c@seZdZdS)ÚInvalidRomanNumeralErrorN)rrrrrrrr
sr
ÚMéèÚCMé„ÚDéôÚCDéÚCédÚXCéZÚLé2ÚXLé(ÚXé
ÚIXé	ÚVéÚIVéÚIécCsld|kodkns tdƒ‚t|ƒ|kr4tdƒ‚d}x.tD]&\}}x||krb||7}||8}qHWq>W|S)z convert integer to Roman numeralriˆz%number out of range (must be 1..4999)zdecimals can not be convertedÚ)rÚintr	ÚromanNumeralMap)ÚnÚresultÚnumeralÚintegerrrrÚ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
    cCsr|stdƒ‚tj|ƒs"td|ƒ‚d}d}xBtD]:\}}x0|||t|ƒ…|krh||7}|t|ƒ7}q:Wq0W|S)z convert Roman numeral to integerzInput can not be blankzInvalid Roman numeral: %sr)r
ÚromanNumeralPatternÚsearchr'Úlen)Úsr)Úindexr*r+rrrÚ	fromRomanCs
r2©rr©r
r©rr©rr©rr©rr©rr©rr©rr©rr©rr ©r!r"©r#r$)
r3r4r5r6r7r8r9r:r;r<r=r>r?)Ú__doc__Ú
__author__Ú__version__Ú__date__Ú
__copyright__ÚreÚ	Exceptionrrr	r
r'r,ÚcompileÚVERBOSEr-r2rrrrÚ<module>s4