
    -Ph                     *   d Z dZdZdZdZddlZddlZddlZ G d de          Z	 G d	 d
e	          Z
 G d de	          Z G d de	          ZdZd Z ej        dej                  Zd Zd Zd Zedk    r ej         e                       dS dS )z"Convert to and from Roman numeralsz&Mark Pilgrim (f8dy@diveintopython.org)z1.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                       e Zd ZdS )
RomanErrorN__name__
__module____qualname__     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/docutils/utils/roman.pyr   r   $           Dr
   r   c                       e Zd ZdS )OutOfRangeErrorNr   r	   r
   r   r   r   (   r   r
   r   c                       e Zd ZdS )NotIntegerErrorNr   r	   r
   r   r   r   ,   r   r
   r   c                       e Zd ZdS )InvalidRomanNumeralErrorNr   r	   r
   r   r   r   0   r   r
   r   ))Mi  )CMi  )Di  )CDi  )Cd   )XCZ   )L2   )XL(   )X
   )IX	   )V   )IV   )I   c                     t          | t                    st          d          d| cxk     rdk     sn t          d          | dk    rdS d}t          D ]\  }}| |k    r||z  }| |z  } | |k    |S )z convert integer to Roman numeralzdecimals can not be convertedi  z%number out of range (must be 0..4999)r   N )
isinstanceintr   r   romanNumeralMap)nresultnumeralintegers       r   toRomanr4   D   s    a ?=>>>MMMMTMMMMEFFF 	AvvsF+  7llgFLA 7ll Mr
   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                 X   | st          d          | dk    rdS t                              |           st          d| z            d}d}t          D ]X\  }}| ||t	          |          z            |k    r5||z  }|t	          |          z  }| ||t	          |          z            |k    5Y|S )z convert Roman numeral to integerzInput can not be blankr+   r   zInvalid Roman numeral: %s)r   romanNumeralPatternsearchr/   len)sr1   indexr2   r3   s        r   	fromRomanr;   e   s     A&'?@@@ 	Cxxq%%a(( H&'BQ'FGGGFE+ " "ec'll**+w66gFS\\!E ec'll**+w66 Mr
   c                      t          j        dd          } |                     dd           |                     ddd	d
d           |                                 }|j        |_        |S )Nromanz)convert between roman and arabic numerals)progdescriptionnumberzthe value to convert)helpz-rz	--reverse
store_trueFz<convert roman to numeral (case insensitive) [default: False])actiondefaultrA   )argparseArgumentParseradd_argument
parse_argsr@   )parserargss     r   rH   rH   z   s    $?  F '=>>>
kK	  M M M D+DKKr
   c                     t                      } | j        r8| j                                        }t	          |          }t          |           n2t          | j                  }t          |          }t          |           dS )Nr   )rH   reverser@   upperr;   printr.   r4   )rJ   urir0   s        r   mainrR      sj    <<D| KaLLaAJJa1r
   __main__)__doc__
__author____version____date____copyright__rE   resys	Exceptionr   r   r   r   r/   r4   compileVERBOSEr6   r;   rH   rR   r   exitr	   r
   r   <module>r_      s   ) (5
	  				 



	 	 	 	 	 	 	 		 	 	 	 	j 	 	 		 	 	 	 	j 	 	 		 	 	 	 	z 	 	 	
  ( !bj 
" 

 
   *  "   zCHTTVV r
   