|
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.
|