# Some functions to convert to 
# and from Roman numerals
# for numbers n with
# 0 < n < 5000
#
# (c) 2/2008 Goetz Schwandtner <schwandtner@googlemail.com>
#
# see www.schwandtner.info

def rdigit(dig, chrs):
    "returns digit from chrs-1,5,10"
    if dig==9:
        return chrs[0]+chrs[2]
    if dig==4:
        return chrs[0]+chrs[1]
    if dig>4:
        return chrs[1]+(dig-5)*chrs[0]
    else:
        return dig*chrs[0]
        
def toroman(n):
    "roman numeral string of n<4000"
    return "M"*(n/1000)+rdigit(n/100%10,"CDM")+rdigit(n/10%10,"XLC")+rdigit(n%10,"IVX")

def ddigit(digs, dstr):
    "first digits value, rest dstr"
    if dstr[0:2]==digs[0]+digs[2]:
        return 9,dstr[2:]
    if dstr[0:2]==digs[0]+digs[1]:
        return 4,dstr[2:]
    v,i=0,0
    if dstr[0]==digs[1]:
        v,i=5,1
    while dstr[i]==digs[0]:
        v,i=v+1,i+1
    if i<5:
        return v,dstr[i:]
    else:
        return None

def todec(s):
    "decimal value of Roman number s"
    m,s=ddigit("Mxx",s+".")
    c,s=ddigit("CDM",s)
    x,s=ddigit("XLC",s)
    i,s=ddigit("IVX",s)
    if s==".":
        return m*1000+c*100+x*10+i
    else:
        return None



    