[Checkins] SVN: roman/trunk/ Import code and setup.

Stephan Richter srichter at gmail.com
Thu Jul 23 12:25:58 EDT 2009


Log message for revision 102156:
  Import code and setup.

Changed:
  A   roman/trunk/
  A   roman/trunk/bootstrap.py
  A   roman/trunk/buildout.cfg
  A   roman/trunk/roman.py
  A   roman/trunk/setup.py

-=-
Added: roman/trunk/bootstrap.py
===================================================================
--- roman/trunk/bootstrap.py	                        (rev 0)
+++ roman/trunk/bootstrap.py	2009-07-23 16:25:57 UTC (rev 102156)
@@ -0,0 +1,52 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id$
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+ez = {}
+exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                     ).read() in ez
+ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+import pkg_resources
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+    cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, sys.executable,
+    '-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
+    dict(os.environ,
+         PYTHONPATH=
+         ws.find(pkg_resources.Requirement.parse('setuptools')).location
+         ),
+    ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)


Property changes on: roman/trunk/bootstrap.py
___________________________________________________________________
Added: svn:keywords
   + Id

Added: roman/trunk/buildout.cfg
===================================================================
--- roman/trunk/buildout.cfg	                        (rev 0)
+++ roman/trunk/buildout.cfg	2009-07-23 16:25:57 UTC (rev 102156)
@@ -0,0 +1,8 @@
+[buildout]
+develop = .
+parts = python
+
+[python]
+recipe = zc.recipe.egg
+eggs = roman
+interpreter = python

Added: roman/trunk/roman.py
===================================================================
--- roman/trunk/roman.py	                        (rev 0)
+++ roman/trunk/roman.py	2009-07-23 16:25:57 UTC (rev 102156)
@@ -0,0 +1,81 @@
+"""Convert to and from Roman numerals"""
+
+__author__ = "Mark Pilgrim (f8dy at 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 (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
+


Property changes on: roman/trunk/roman.py
___________________________________________________________________
Added: svn:keywords
   + Id

Added: roman/trunk/setup.py
===================================================================
--- roman/trunk/setup.py	                        (rev 0)
+++ roman/trunk/setup.py	2009-07-23 16:25:57 UTC (rev 102156)
@@ -0,0 +1,21 @@
+from setuptools import setup, find_packages
+
+setup (
+    name='roman',
+    version='1.4.0',
+    author = "Mark Pilgrim",
+    author_email = "f8dy at diveintopython.org",
+    description = "Integer to Roman numerals converter",
+    license = "Python 2.1.1",
+    keywords = "roman",
+    classifiers = [
+        'Development Status :: 5 - Production/Stable',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: Python License',
+        'Programming Language :: Python',
+        'Natural Language :: English',
+        'Operating System :: OS Independent'],
+    url = 'http://pypi.python.org/pypi/roman',
+    include_package_data = True,
+    zip_safe = True,
+    )


Property changes on: roman/trunk/setup.py
___________________________________________________________________
Added: svn:keywords
   + Id



More information about the Checkins mailing list