def put_font_all_glyphs(master, glyph=None, preload=False, force_update=False): gliflist = extract_gliflist_from_ufo(master, glyph=glyph, extract_first=preload) fontpath = op.join(master.get_ufo_path(), 'glyphs') glyphs = [] for ch1 in gliflist: glyphName, ext = buildfname(ch1) if not glyphName or glyphName.startswith('.') or ext not in ["glif"]: continue if force_update: glyph_obj = Glyph.get(name=glyphName, master_id=master.id) if glyph_obj: GlyphPointParam.filter(glyph_id=glyph_obj.id).delete() GlyphPoint.filter(glyph_id=glyph_obj.id).delete() Glyph.delete(glyph_obj) glif = etree.parse(op.join(fontpath, ch1)) newglyph_obj = create_glyph(glif, master) if newglyph_obj: glyphs.append(newglyph_obj.name) try: return glyphs[0] except IndexError: return
def save_to_database(self, glyph): """ Save list of point dictionary to database """ for point in self.points: glyphpoint = GlyphPoint.get(glyphname=glyph.name, glyph_id=glyph.id, master_id=glyph.master_id, pointnr=point['number']) if not glyphpoint: glyphpoint = GlyphPoint.create(glyphname=glyph.name, glyph_id=glyph.id, master_id=glyph.master_id, pointnr=point['number']) glyphpoint.x = self.x(point) glyphpoint.y = self.y(point) glyphpointparam = GlyphPointParam.get(glyphpoint_id=glyphpoint.id, glyph_id=glyph.id) if not glyphpointparam: glyphpointparam = GlyphPointParam.create(glyphpoint_id=glyphpoint.id, master_id=glyph.master_id, glyph_id=glyph.id, pointname=self.name(point)) for attr in point['preset']: if attr == 'name': continue setattr(glyphpointparam, attr, point['preset'][attr]) web.ctx.orm.commit()
def get_glyph_points_from_db(master, glyphid): """ Returns json with information about glyphs' points including coords and point parameters. Example result: ```yaml --- width: 1680 points: - x: 12 y: 123 pointnr: 1 iszpoint: true data: width: 1680 width_new: 1490 # then list of another point parameters ``` """ # todo: move mflist to another common module glyph = Glyph.get(master_id=master.id, name=glyphid) points = GlyphPoint.filter(glyph_id=glyph.id) localparam = LocalParam.get(id=master.idlocala) _points = [] for point in points.order_by(GlyphPoint.pointnr.asc()): param = GlyphPointParam.get(glyphpoint_id=point.id) iszpoint = False if re.match('z(\d+)[lr]', param.pointname): iszpoint = True x = point.x if localparam: x += localparam.px params = param.as_dict() params.update({'width': glyph.width}) params.update({'width_new': glyph.width_new}) _points.append({ 'x': x, 'y': point.y, 'pointnr': point.pointnr, 'iszpoint': iszpoint, 'data': params }) return {'width': glyph.width, 'points': _points}
def get_glyph_points_from_db(master, glyphid): """ Returns json with information about glyphs' points including coords and point parameters. Example result: ```yaml --- width: 1680 points: - x: 12 y: 123 pointnr: 1 iszpoint: true data: width: 1680 width_new: 1490 # then list of another point parameters ``` """ # todo: move mflist to another common module glyph = Glyph.get(master_id=master.id, name=glyphid) points = GlyphPoint.filter(glyph_id=glyph.id) localparam = LocalParam.get(id=master.idlocala) _points = [] for point in points.order_by(GlyphPoint.pointnr.asc()): param = GlyphPointParam.get(glyphpoint_id=point.id) iszpoint = False if re.match('z(\d+)[lr]', param.pointname): iszpoint = True x = point.x if localparam: x += localparam.px params = param.as_dict() params.update({'width': glyph.width}) params.update({'width_new': glyph.width_new}) _points.append({'x': x, 'y': point.y, 'pointnr': point.pointnr, 'iszpoint': iszpoint, 'data': params}) return {'width': glyph.width, 'points': _points}