def load_search_index(): topchar = 0x10ffff ver = (1, topchar, icu_unicode_version or unicodedata.unidata_version ) # Increment this when you make any changes to the index name_map = {} path = os.path.join(cache_dir(), 'unicode-name-index.pickle') if os.path.exists(path): with open(path, 'rb') as f: name_map = cPickle.load(f) if name_map.pop('calibre-nm-version:', None) != ver: name_map = {} if not name_map: name_map = defaultdict(set) for x in xrange(1, topchar + 1): for word in character_name_from_code(x).split(): name_map[word.lower()].add(x) from calibre.ebooks.html_entities import html5_entities for name, char in html5_entities.iteritems(): try: name_map[name.lower()].add(ord(char)) except TypeError: continue name_map['nnbsp'].add(0x202F) name_map['calibre-nm-version:'] = ver cPickle.dump(dict(name_map), open(path, 'wb'), -1) del name_map['calibre-nm-version:'] return name_map
def get_char_info(self, char_code): ipos = bisect(self.starts, char_code) - 1 try: category, subcategory = self.category_map[self.starts[ipos]] except IndexError: category = subcategory = _('Unknown') return category, subcategory, (character_name_from_code(char_code) or _('Unknown'))
def data(self, index, role=Qt.DisplayRole): if role == SORT_ROLE: try: return self.sort_keys[index.row()][index.column()] except IndexError: pass elif role == Qt.DisplayRole: col = index.column() try: entry = self.files[index.row()] except IndexError: return None if col == 0: return entry.char if col == 1: return {0xa:'LINE FEED', 0xd:'CARRIAGE RETURN'}.get(entry.codepoint, character_name_from_code(entry.codepoint)) if col == 2: return ('U+%04X' if entry.codepoint < 0x10000 else 'U+%06X') % entry.codepoint if col == 3: return type('')(entry.count) elif role == Qt.UserRole: try: return self.files[index.row()] except IndexError: pass
def load_search_index(): topchar = 0x10ffff ver = (1, topchar, icu_unicode_version or unicodedata.unidata_version) # Increment this when you make any changes to the index name_map = {} path = os.path.join(cache_dir(), 'unicode-name-index.pickle') if os.path.exists(path): with open(path, 'rb') as f: name_map = cPickle.load(f) if name_map.pop('calibre-nm-version:', None) != ver: name_map = {} if not name_map: name_map = defaultdict(set) for x in xrange(1, topchar + 1): for word in character_name_from_code(x).split(): name_map[word.lower()].add(x) from calibre.ebooks.html_entities import html5_entities for name, char in html5_entities.iteritems(): try: name_map[name.lower()].add(ord(char)) except TypeError: continue name_map['nnbsp'].add(0x202F) name_map['calibre-nm-version:'] = ver cPickle.dump(dict(name_map), open(path, 'wb'), -1) del name_map['calibre-nm-version:'] return name_map
def data(self, index, role=Qt.DisplayRole): if role == SORT_ROLE: try: return self.sort_keys[index.row()][index.column()] except IndexError: pass elif role == Qt.DisplayRole: col = index.column() try: entry = self.files[index.row()] except IndexError: return None if col == 0: return entry.char if col == 1: return {0xa:'LINE FEED', 0xd:'CARRIAGE RETURN'}.get(entry.codepoint, character_name_from_code(entry.codepoint)) if col == 2: return ('U+%04X' if entry.codepoint < 0x10000 else 'U+%06X') % entry.codepoint if col == 3: return type('')(entry.count) elif role == Qt.UserRole: try: return self.files[index.row()] except IndexError: pass