mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
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:
parent
d52590bc8c
commit
3e42eeae66
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user