Revised title sorting for Catalog

This commit is contained in:
GRiker 2010-01-27 09:56:21 -07:00
parent 2253c81d32
commit b86b62eda2

View File

@ -305,6 +305,7 @@ class EPUB_MOBI(CatalogPlugin):
def __init__(self, number): def __init__(self, number):
self.number = number self.number = number
self.number_as_float = 0.0
self.text = '' self.text = ''
self.numberTranslate() self.numberTranslate()
@ -361,13 +362,20 @@ class EPUB_MOBI(CatalogPlugin):
# Test for time # Test for time
if re.search(':',self.number): if re.search(':',self.number):
self.number_as_float = re.sub(':','.',self.number)
time_strings = self.number.split(":") time_strings = self.number.split(":")
hours = EPUB_MOBI.NumberToText(time_strings[0]).text hours = EPUB_MOBI.NumberToText(time_strings[0]).text
minutes = EPUB_MOBI.NumberToText(time_strings[1]).text minutes = EPUB_MOBI.NumberToText(time_strings[1]).text
self.text = '%s-%s' % (hours.capitalize(), minutes) self.text = '%s-%s' % (hours.capitalize(), minutes)
# Test for %
elif re.search('%', self.number):
self.number_as_float = self.number.split('%')[0]
self.text = EPUB_MOBI.NumberToText(self.number.replace('%',' percent')).text
# Test for decimal # Test for decimal
elif re.search('\.',self.number): elif re.search('\.',self.number):
self.number_as_float = self.number
decimal_strings = self.number.split(".") decimal_strings = self.number.split(".")
left = EPUB_MOBI.NumberToText(decimal_strings[0]).text left = EPUB_MOBI.NumberToText(decimal_strings[0]).text
right = EPUB_MOBI.NumberToText(decimal_strings[1]).text right = EPUB_MOBI.NumberToText(decimal_strings[1]).text
@ -375,6 +383,7 @@ class EPUB_MOBI(CatalogPlugin):
# Test for hypenated # Test for hypenated
elif re.search('-', self.number): elif re.search('-', self.number):
self.number_as_float = self.number.split('-')[0]
strings = self.number.split('-') strings = self.number.split('-')
if re.search('[0-9]+', strings[0]): if re.search('[0-9]+', strings[0]):
left = EPUB_MOBI.NumberToText(strings[0]).text left = EPUB_MOBI.NumberToText(strings[0]).text
@ -386,6 +395,7 @@ class EPUB_MOBI(CatalogPlugin):
# Test for comma # Test for comma
elif re.search(',', self.number): elif re.search(',', self.number):
self.number_as_float = re.sub(',','',self.number)
self.text = EPUB_MOBI.NumberToText(self.number.replace(',','')).text self.text = EPUB_MOBI.NumberToText(self.number.replace(',','')).text
# Test for hybrid e.g., 'K2' # Test for hybrid e.g., 'K2'
@ -400,6 +410,7 @@ class EPUB_MOBI(CatalogPlugin):
else: else:
try: try:
self.float_as_number = float(self.number)
number = int(self.number) number = int(self.number)
except: except:
return return
@ -2305,7 +2316,7 @@ class EPUB_MOBI(CatalogPlugin):
# Ignore leading stop words # Ignore leading stop words
# Optionally convert leading numbers to strings # Optionally convert leading numbers to strings
from calibre.ebooks.metadata import title_sort from calibre.ebooks.metadata import title_sort
# Strip stop words
title_words = title_sort(title).split() title_words = title_sort(title).split()
translated = [] translated = []
@ -2315,9 +2326,19 @@ class EPUB_MOBI(CatalogPlugin):
if self.opts.numbers_as_text and re.search('[0-9]+',word): if self.opts.numbers_as_text and re.search('[0-9]+',word):
translated.append(EPUB_MOBI.NumberToText(word).text.capitalize()) translated.append(EPUB_MOBI.NumberToText(word).text.capitalize())
else: else:
if re.search('-',word):
# Split hyphenated words for sorting
tokens = word.split('-')
title_words[0] = tokens[0]
title_words.insert(1,tokens[1])
if re.search('[0-9]+',word): if re.search('[0-9]+',word):
# Coerce standard-width strings for numbers for value sorting # Coerce standard-width strings for numbers for value sorting
word = '%10.2f' % float(re.sub('[^\d\.]','',word)) # Any non-digit is interpreted as a decimal point
# word = '%10.2f' % float(re.sub('[^\d\.]','',word))
try:
word = '%10.2f' % float(re.sub('[^\d\.]','.',word))
except:
word = '%10.2f' % float(EPUB_MOBI.NumberToText(word).number_as_float)
translated.append(word) translated.append(word)
else: else:
if re.search('[0-9]+',word): if re.search('[0-9]+',word):