diff --git a/gui/characterEditor.py b/gui/characterEditor.py index b96fe41cb..76e0b296a 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -42,7 +42,7 @@ from wx.lib.agw.floatspin import FloatSpin from gui.utils.clipboard import toClipboard, fromClipboard -import utils.roman as roman +import roman import re pyfalog = Logger(__name__) diff --git a/gui/utils/roman.py b/gui/utils/roman.py deleted file mode 100644 index 0a75ccadc..000000000 --- a/gui/utils/roman.py +++ /dev/null @@ -1,95 +0,0 @@ -"""Convert to and from Roman numerals""" - -__author__ = "Mark Pilgrim (f8dy@diveintopython.org)" -__version__ = "1.4" -__date__ = "8 August 2001" -__copyright__ = """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 -""" - -import re - - -# Define exceptions -class RomanError(Exception): - pass - - -class OutOfRangeError(RomanError): - pass - - -class NotIntegerError(RomanError): - pass - - -class InvalidRomanNumeralError(RomanError): - pass - - -# Define digit mapping -romanNumeralMap = (('M', 1000), - ('CM', 900), - ('D', 500), - ('CD', 400), - ('C', 100), - ('XC', 90), - ('L', 50), - ('XL', 40), - ('X', 10), - ('IX', 9), - ('V', 5), - ('IV', 4), - ('I', 1)) - - -def toRoman(n): - """convert integer to Roman numeral""" - if not isinstance(n, int): - raise NotIntegerError("decimals can not be converted") - if not (0 < n < 5000): - raise OutOfRangeError("number out of range (must be 1..4999)") - - result = "" - for numeral, integer in romanNumeralMap: - while n >= integer: - result += numeral - n -= integer - return result - - -# Define pattern to detect valid Roman numerals -romanNumeralPattern = re.compile(""" - ^ # 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 - """, re.VERBOSE) - - -def fromRoman(s): - """convert Roman numeral to integer""" - if not s: - raise InvalidRomanNumeralError('Input can not be blank') - if not romanNumeralPattern.search(s): - raise InvalidRomanNumeralError('Invalid Roman numeral: %s' % s) - - result = 0 - index = 0 - for numeral, integer in romanNumeralMap: - while s[index:index + len(numeral)] == numeral: - result += integer - index += len(numeral) - return result diff --git a/requirements.txt b/requirements.txt index 5800936c0..6f8d33890 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,5 @@ python-dateutil requests >= 2.0.0 sqlalchemy >= 1.0.5 markdown2 -packaging \ No newline at end of file +packaging +roman \ No newline at end of file