Add span contractions to tag browser to fix first letter display for languages with 'letters' made of more than one character

This commit is contained in:
Charles Haley 2012-07-05 12:37:48 +02:00
parent d52590bc8c
commit 3e42eeae66

View File

@ -17,11 +17,12 @@ from PyQt4.Qt import (QAbstractItemModel, QIcon, QVariant, QFont, Qt,
from calibre.gui2 import NONE, gprefs, config, error_dialog from calibre.gui2 import NONE, gprefs, config, error_dialog
from calibre.library.database2 import Tag from calibre.library.database2 import Tag
from calibre.utils.config import tweaks from calibre.utils.config import tweaks
from calibre.utils.icu import sort_key, lower, strcmp from calibre.utils.icu import sort_key, lower, strcmp, span_contractions
from calibre.library.field_metadata import TagsIcons, category_icon_map from calibre.library.field_metadata import TagsIcons, category_icon_map
from calibre.gui2.dialogs.confirm_delete import confirm from calibre.gui2.dialogs.confirm_delete import confirm
from calibre.utils.formatter import EvalFormatter from calibre.utils.formatter import EvalFormatter
from calibre.utils.search_query_parser import saved_searches from calibre.utils.search_query_parser import saved_searches
from calibre.utils.localization import get_lang
TAG_SEARCH_STATES = {'clear': 0, 'mark_plus': 1, 'mark_plusplus': 2, TAG_SEARCH_STATES = {'clear': 0, 'mark_plus': 1, 'mark_plusplus': 2,
'mark_minus': 3, 'mark_minusminus': 4} 'mark_minus': 3, 'mark_minusminus': 4}
@ -353,6 +354,8 @@ class TagsModel(QAbstractItemModel): # {{{
self.category_nodes.append(node) self.category_nodes.append(node)
self._create_node_tree(data, state_map) self._create_node_tree(data, state_map)
langs_no_span_contractions = frozenset(["en", "it", "ru", "nl", "de", "fr"])
def _create_node_tree(self, data, state_map): def _create_node_tree(self, data, state_map):
sort_by = config['sort_tags_by'] sort_by = config['sort_tags_by']
@ -376,6 +379,10 @@ class TagsModel(QAbstractItemModel): # {{{
else: else:
collapse_model = 'partition' collapse_model = 'partition'
collapse_template = tweaks['categories_collapsed_popularity_template'] collapse_template = tweaks['categories_collapsed_popularity_template']
if get_lang() in self.langs_no_span_contractions:
use_span_contractions = False
else:
use_span_contractions = True
def get_name_components(name): def get_name_components(name):
components = [t.strip() for t in name.split('.') if t.strip()] components = [t.strip() for t in name.split('.') if t.strip()]
@ -416,7 +423,15 @@ class TagsModel(QAbstractItemModel): # {{{
if not tag.sort: if not tag.sort:
c = ' ' c = ' '
else: else:
c = icu_upper(tag.sort[0]) if not use_span_contractions:
c = icu_upper(tag.sort)[0]
else:
v = icu_upper(tag.sort)
le = span_contractions(v)
if le > 0:
c = v[:le]
else:
c = v[0]
if c not in chardict: if c not in chardict:
chardict[c] = [idx, idx] chardict[c] = [idx, idx]
else: else: