예제 #1
0
 def read_font_metadata(self, path, fileid):
     with lopen(path, 'rb') as f:
         try:
             fm = FontMetadata(f)
         except UnsupportedFont:
             self.cached_fonts[fileid] = {}
         else:
             data = fm.to_dict()
             data['path'] = path
             self.cached_fonts[fileid] = data
예제 #2
0
파일: scanner.py 프로젝트: j-howell/calibre
 def read_font_metadata(self, path, fileid):
     with lopen(path, 'rb') as f:
         try:
             fm = FontMetadata(f)
         except UnsupportedFont:
             self.cached_fonts[fileid] = {}
         else:
             data = fm.to_dict()
             data['path'] = path
             self.cached_fonts[fileid] = data
예제 #3
0
def add_fonts(parent):
    from calibre.utils.fonts.metadata import FontMetadata
    files = choose_files(parent,
                         'add fonts to calibre',
                         _('Select font files'),
                         filters=[(_('TrueType/OpenType Fonts'),
                                   ['ttf', 'otf'])],
                         all_files=False)
    if not files:
        return
    families = set()
    for f in files:
        try:
            with open(f, 'rb') as stream:
                fm = FontMetadata(stream)
        except:
            import traceback
            error_dialog(parent,
                         _('Corrupt font'),
                         _('Failed to read metadata from the font file: %s') %
                         f,
                         det_msg=traceback.format_exc(),
                         show=True)
            return
        families.add(fm.font_family)
    families = sorted(families)

    dest = os.path.join(config_dir, 'fonts')
    for f in files:
        shutil.copyfile(f, os.path.join(dest, os.path.basename(f)))

    return families
def rule_for_font(font_file, added_name):
    try:
        fm = FontMetadata(font_file).to_dict()
    except UnsupportedFont:
        return
    pp = _('Change this to the relative path to: %s') % added_name
    rule = '''@font-face {{
  src: url({pp});
  font-family: "{ff}";
  font-weight: {w};
  font-style: {sy};
  font-stretch: {st};
  }}'''.format(pp=pp, ff=fm['font-family'], w=fm['font-weight'], sy=fm['font-style'], st=fm['font-stretch'])
    return rule
예제 #5
0
    def add_fonts(self):
        from calibre.utils.fonts.metadata import FontMetadata
        files = choose_files(self,
                             'add fonts to calibre',
                             _('Select font files'),
                             filters=[(_('TrueType/OpenType Fonts'),
                                       ['ttf', 'otf'])],
                             all_files=False)
        if not files:
            return
        families = set()
        for f in files:
            try:
                with open(f, 'rb') as stream:
                    fm = FontMetadata(stream)
            except:
                import traceback
                error_dialog(
                    self,
                    _('Corrupt font'),
                    _('Failed to read metadata from the font file: %s') % f,
                    det_msg=traceback.format_exc(),
                    show=True)
                return
            families.add(fm.font_family)
        families = sorted(families)

        dest = os.path.join(config_dir, 'fonts')
        for f in files:
            shutil.copyfile(f, os.path.join(dest, os.path.basename(f)))
        self.font_scanner.do_scan()
        self.m.beginResetModel()
        self.build_font_list()
        self.m.endResetModel()
        self.view.setCurrentIndex(self.m.index(0))
        if families:
            for i, val in enumerate(self.families):
                if icu_lower(val) == icu_lower(families[0]):
                    self.view.setCurrentIndex(self.m.index(i))
                    break

        info_dialog(self,
                    _('Added fonts'),
                    _('Added font families: %s') % (', '.join(families)),
                    show=True)
예제 #6
0
def show_font_face_rule_for_font_file(file_data, added_name, parent=None):
    try:
        fm = FontMetadata(BytesIO(file_data)).to_dict()
    except UnsupportedFont:
        return
    pp = _('Change this to the relative path to: %s') % added_name
    rule = '''@font-face {{
  src: url({pp});
  font-family: "{ff}";
  font-weight: {w};
  font-style: {sy};
  font-stretch: {st};
  }}'''.format(pp=pp,
               ff=fm['font-family'],
               w=fm['font-weight'],
               sy=fm['font-style'],
               st=fm['font-stretch'])
    QApplication.clipboard().setText(rule)
    QMessageBox.information(
        parent, _('Font file added'),
        _('The font file <b>{}</b> has been added. The text for the CSS @font-face rule for this file has been copied'
          ' to the clipboard. You should paste it into whichever css file you want to add this font to.'
          ).format(added_name))