U å€C^ ã@s‚dZdZdZdZdZddlZGdd„deƒZGd d „d eƒZGd d „d eƒZ Gd d„deƒZ dZ dd„Z e  dej¡Zdd„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ú:/tmp/pip-install-6_kvzl1k/docutils/docutils/utils/roman.pyrsrc@s eZdZdS)ÚOutOfRangeErrorNrrrrrr sr c@s eZdZdS)ÚNotIntegerErrorNrrrrrr sr c@s eZdZdS)ÚInvalidRomanNumeralErrorNrrrrrr sr ) )ÚMiè)ZCMi„)ÚDiô)ZCDi)ÚCéd)ZXCéZ)ÚLé2)ZXLé()ÚXé )ZIXé )ÚVé)ZIVé)ÚIécCsbd|krdksntdƒ‚t|ƒ|kr2tdƒ‚d}tD]"\}}||kr:||7}||8}qBq:|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 cCsj|s tdƒ‚t |¡s"td|ƒ‚d}d}tD]6\}}|||t|ƒ…|kr.||7}|t|ƒ7}q6q.|S)z convert Roman numeral to integerzInput can not be blankzInvalid Roman numeral: %sr)r ÚromanNumeralPatternÚsearchrÚlen)Úsr Úindexr!r"rrrÚ fromRomanCs   r))Ú__doc__Ú __author__Ú __version__Ú__date__Ú __copyright__ÚreÚ Exceptionrr r r rr#ÚcompileÚVERBOSEr$r)rrrrÚs  ö