From: <mi...@us...> - 2011-12-20 16:39:16
|
Revision: 7268 http://docutils.svn.sourceforge.net/docutils/?rev=7268&view=rev Author: milde Date: 2011-12-20 16:39:10 +0000 (Tue, 20 Dec 2011) Log Message: ----------- Fix [ 2971827 ] and [ 3442827 ] extras/roman.py moved to docutils/utils/roman.py Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/parsers/rst/states.py trunk/docutils/docutils/writers/manpage.py trunk/docutils/setup.py Added Paths: ----------- trunk/docutils/docutils/utils/roman.py Removed Paths: ------------- trunk/docutils/extras/ Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2011-12-20 14:14:21 UTC (rev 7267) +++ trunk/docutils/HISTORY.txt 2011-12-20 16:39:10 UTC (rev 7268) @@ -26,6 +26,11 @@ .. _Pygments: http://pygments.org/ +* setup.py + + - Fix [ 2971827 ] and [ 3442827 ] + extras/roman.py moved to docutils/utils/roman.py + * docutils/io.py - Fix [ 3395948 ] (Work around encoding problems in Py3k). Modified: trunk/docutils/docutils/parsers/rst/states.py =================================================================== --- trunk/docutils/docutils/parsers/rst/states.py 2011-12-20 14:14:21 UTC (rev 7267) +++ trunk/docutils/docutils/parsers/rst/states.py 2011-12-20 16:39:10 UTC (rev 7268) @@ -105,7 +105,10 @@ import sys import re -import roman +try: + import roman +except ImportError: + import docutils.utils.roman as roman from types import FunctionType, MethodType from docutils import nodes, statemachine, utils, urischemes Copied: trunk/docutils/docutils/utils/roman.py (from rev 7266, trunk/docutils/extras/roman.py) =================================================================== --- trunk/docutils/docutils/utils/roman.py (rev 0) +++ trunk/docutils/docutils/utils/roman.py 2011-12-20 16:39:10 UTC (rev 7268) @@ -0,0 +1,81 @@ +"""Convert to and from Roman numerals""" + +__author__ = "Mark Pilgrim (f8...@di...)" +__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 (0 < n < 5000): + raise OutOfRangeError, "number out of range (must be 1..4999)" + if int(n) != n: + raise NotIntegerError, "decimals can not be converted" + + 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 + Modified: trunk/docutils/docutils/writers/manpage.py =================================================================== --- trunk/docutils/docutils/writers/manpage.py 2011-12-20 14:14:21 UTC (rev 7267) +++ trunk/docutils/docutils/writers/manpage.py 2011-12-20 16:39:10 UTC (rev 7268) @@ -48,7 +48,10 @@ import docutils from docutils import nodes, writers, languages -import roman +try: + import roman +except ImportError: + import docutils.utils.roman as roman FIELD_LIST_INDENT = 7 DEFINITION_LIST_INDENT = 7 Modified: trunk/docutils/setup.py =================================================================== --- trunk/docutils/setup.py 2011-12-20 14:14:21 UTC (rev 7267) +++ trunk/docutils/setup.py 2011-12-20 16:39:10 UTC (rev 7268) @@ -88,9 +88,6 @@ def do_setup(): kwargs = package_data.copy() - extras = get_extras() - if extras: - kwargs['py_modules'] = extras kwargs['classifiers'] = classifiers # Install data files properly. kwargs['cmdclass'] = {'build_data': build_data, @@ -124,7 +121,6 @@ 'license': 'public domain, Python, 2-Clause BSD, GPL 3 (see COPYING.txt)', 'platforms': 'OS-independent', 'package_dir': {'docutils': 'docutils', - '': 'extras', 'docutils.tools': 'tools'}, 'packages': ['docutils', 'docutils.languages', @@ -156,8 +152,6 @@ ['docutils/writers/latex2e/default.tex', 'docutils/writers/latex2e/titlepage.tex', 'docutils/writers/latex2e/xelatex.tex',]), - # ('docutils/writers/newlatex2e', - # ['docutils/writers/newlatex2e/base.tex']), ('docutils/writers/pep_html', ['docutils/writers/pep_html/pep.css', 'docutils/writers/pep_html/template.txt']), @@ -170,7 +164,6 @@ 'scripts' : ['tools/rst2html.py', 'tools/rst2s5.py', 'tools/rst2latex.py', - # 'tools/rst2newlatex.py', 'tools/rst2xetex.py', 'tools/rst2man.py', 'tools/rst2xml.py', @@ -222,26 +215,5 @@ """Trove classifiers for the Distutils "register" command; Python 2.3 and up.""" -extra_modules = [('roman', '1.4', ['toRoman', 'fromRoman', - 'InvalidRomanNumeralError'])] -"""Third-party modules to install if they're not already present. -List of (module name, minimum __version__ string, [attribute names]).""" - -def get_extras(): - extras = [] - for module_name, version, attributes in extra_modules: - try: - module = __import__(module_name) - if version and module.__version__ < version: - raise ValueError - for attribute in attributes or []: - getattr(module, attribute) - print ('"%s" module already present; ignoring extras/%s.py.' - % (module_name, module_name)) - except (ImportError, AttributeError, ValueError): - extras.append(module_name) - return extras - - if __name__ == '__main__' : do_setup() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |