mirror of
https://github.com/progval/Limnoria.git
synced 2025-04-26 13:01:06 -05:00
Added depluralize function and fixed latent (untested) capitalization buggerishness.
This commit is contained in:
parent
121be3d9cf
commit
2ffe5a13dd
33
src/utils.py
33
src/utils.py
@ -44,6 +44,8 @@ import sgmllib
|
|||||||
import textwrap
|
import textwrap
|
||||||
import htmlentitydefs
|
import htmlentitydefs
|
||||||
|
|
||||||
|
from structures import TwoWayDictionary
|
||||||
|
|
||||||
def normalizeWhitespace(s):
|
def normalizeWhitespace(s):
|
||||||
"""Normalizes the whitespace in a string; \s+ becomes one space."""
|
"""Normalizes the whitespace in a string; \s+ becomes one space."""
|
||||||
return ' '.join(s.split())
|
return ' '.join(s.split())
|
||||||
@ -286,7 +288,16 @@ def ellipsisify(s, n):
|
|||||||
else:
|
else:
|
||||||
return (textwrap.wrap(s, n-3)[0] + '...')
|
return (textwrap.wrap(s, n-3)[0] + '...')
|
||||||
|
|
||||||
plurals = {'match': 'matches'}
|
plurals = TwoWayDictionary({'match': 'matches',
|
||||||
|
'patch': 'patches',})
|
||||||
|
def _matchCase(s1, s2):
|
||||||
|
"""Matches the case of s1 in s2"""
|
||||||
|
L = list(s2)
|
||||||
|
for (i, char) in enumerate(s1[:len(s2)]):
|
||||||
|
if char.isupper():
|
||||||
|
L[i] = char.upper()
|
||||||
|
return ''.join(L)
|
||||||
|
|
||||||
def pluralize(i, s):
|
def pluralize(i, s):
|
||||||
"""Returns the plural of s based on its number i. Put any exceptions to
|
"""Returns the plural of s based on its number i. Put any exceptions to
|
||||||
the general English rule of appending 's' in the plurals dictionary.
|
the general English rule of appending 's' in the plurals dictionary.
|
||||||
@ -294,10 +305,24 @@ def pluralize(i, s):
|
|||||||
if i == 1:
|
if i == 1:
|
||||||
return s
|
return s
|
||||||
else:
|
else:
|
||||||
if s in plurals:
|
lowered = s.lower()
|
||||||
return plurals[s]
|
if lowered in plurals:
|
||||||
|
return _matchCase(s, plurals[lowered])
|
||||||
else:
|
else:
|
||||||
return s + 's'
|
if s.isupper():
|
||||||
|
return s + 'S'
|
||||||
|
else:
|
||||||
|
return s + 's'
|
||||||
|
|
||||||
|
def depluralize(s):
|
||||||
|
lowered = s.lower()
|
||||||
|
if lowered in plurals:
|
||||||
|
return _matchCase(s, plurals[lowered])
|
||||||
|
else:
|
||||||
|
if s.endswith('s') or s.endswith('S'):
|
||||||
|
return s[:-1] # Chop off 's'.
|
||||||
|
else:
|
||||||
|
return s # Don't know what to do.
|
||||||
|
|
||||||
def nItems(n, item, between=None):
|
def nItems(n, item, between=None):
|
||||||
"""Works like this:
|
"""Works like this:
|
||||||
|
@ -36,6 +36,25 @@ import utils
|
|||||||
|
|
||||||
|
|
||||||
class UtilsTest(unittest.TestCase):
|
class UtilsTest(unittest.TestCase):
|
||||||
|
def testPluralize(self):
|
||||||
|
f = utils.pluralize
|
||||||
|
self.assertEqual('bike', f(1, 'bike'))
|
||||||
|
self.assertEqual('bikes', f(2, 'bike'))
|
||||||
|
self.assertEqual('BIKE', f(1, 'BIKE'))
|
||||||
|
self.assertEqual('BIKES', f(2, 'BIKE'))
|
||||||
|
self.assertEqual('match', f(1, 'match'))
|
||||||
|
self.assertEqual('matches', f(2, 'match'))
|
||||||
|
self.assertEqual('Patch', f(1, 'Patch'))
|
||||||
|
self.assertEqual('Patches', f(2, 'Patch'))
|
||||||
|
|
||||||
|
def testDepluralize(self):
|
||||||
|
f = utils.depluralize
|
||||||
|
self.assertEqual('bike', f('bikes'))
|
||||||
|
self.assertEqual('Bike', f('Bikes'))
|
||||||
|
self.assertEqual('BIKE', f('BIKES'))
|
||||||
|
self.assertEqual('match', f('matches'))
|
||||||
|
self.assertEqual('Match', f('Matches'))
|
||||||
|
|
||||||
def testTimeElapsed(self):
|
def testTimeElapsed(self):
|
||||||
self.assertRaises(ValueError, utils.timeElapsed, 0, 0, seconds=False)
|
self.assertRaises(ValueError, utils.timeElapsed, 0, 0, seconds=False)
|
||||||
then = 0
|
then = 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user