Esempio n. 1
0
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
Esempio n. 2
0
 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'))
Esempio n. 3
0
 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
Esempio n. 4
0
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
Esempio n. 5
0
 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