def get_glyphs_jsondata(glyphid, master): """ Returns dictionary with glyph's information for concrete master and interpolated glyph. Example result: ```yaml --- M: {} # same as `get_json` R: {} # same as `get_json` master_id: 1 ``` """ project = master.project masters = project.get_ordered_masters() glyph = Glyph.get(master_id=master.id, name=glyphid) metapost = Metapost(project) metapost.execute_interpolated_single(glyph) instancelog = project.get_instancelog(masters[0].version) M_glyphjson = get_glyph_info_from_log(instancelog, glyphid) metapost.execute_single(master, glyph) instancelog = project.get_instancelog(master.version, 'a') glyphjson = get_glyph_info_from_log(instancelog, glyphid, master) return {'M': M_glyphjson, 'R': glyphjson, 'master_id': master.id}
def get_master_data(master, glyph, axislabel): project = master.project masters = project.get_ordered_masters() prepare_master_environment(masters[0]) prepare_master_environment(master) metapost = Metapost(project) glyphs = masters[0].get_glyphs() glyphs = glyphs.filter(models.Glyph.name == glyph) if not metapost.execute_single(masters[0], glyphs.first()): return instancelog = project.get_instancelog(masters[0].version) metaglyphs = get_glyph_info_from_log(instancelog) glyphs = master.get_glyphs() glyphs = glyphs.filter(models.Glyph.name == glyph) if not metapost.execute_single(master, glyphs.first()): return master_instancelog = project.get_instancelog(master.version, 'a') glyphsdata = get_glyph_info_from_log(master_instancelog, master=master) metalabel = get_metapolation_label(axislabel) return {'glyphs': glyphsdata, 'metaglyphs': metaglyphs, 'master_name': master.name, 'master_version': '{0:03d}'.format(master.version), 'master_id': master.id, 'metapolation': metalabel, 'label': axislabel, 'versions': project.get_versions()}
def POST(self): postdata = web.input(project_id=0) project = models.Project.get(id=postdata.project_id) if not project: raise web.notfound() instance = models.Instance.create(project_id=project.id) indexname = models.Instance.filter(project_id=project.id).count() metapost = Metapost(project, version=indexname) metapost.execute_interpolated_bulk() for extension in ['.otf']: dest_dir = op.join(project.get_directory(), 'instances') if not op.exists(dest_dir): os.makedirs(dest_dir) dest = op.join(dest_dir, '%s%s' % (instance.id, extension)) try: shutil.copy( op.join(project.get_master_directory(), 'static', 'interpolated.otf'), dest) except: pass return ujson.dumps({})
def GET(self): x = web.input(project=0) project = models.Project.get(id=x.project) if not project: raise web.notfound() if x.get('glyph'): if not models.Glyph.exists(name=x.get('glyph'), project_id=project.id): raise web.notfound() project.currentglyph = x.glyph web.ctx.orm.commit() masters = project.get_ordered_masters() masters_list = [] metapost = Metapost(project) for i, master in enumerate(masters): prepare_master_environment(master) glyphs = master.get_glyphs() glyphs = glyphs.filter(models.Glyph.name == project.currentglyph) if not metapost.execute_single(master, glyphs.first()): return web.badrequest() master_instancelog = project.get_instancelog(master.version, 'a') glyphsdata = get_glyph_info_from_log(master_instancelog, master=master) metalabel = get_metapolation_label(chr(models.LABELS[i])) masters_list.append({ 'glyphs': glyphsdata, 'label': chr(models.LABELS[i]), 'metapolation': metalabel, 'master_id': master.id }) glyphs = masters[0].get_glyphs() glyphs = glyphs.filter(models.Glyph.name == project.currentglyph) if not metapost.execute_interpolated_single(glyphs.first()): return web.badrequest() instancelog = project.get_instancelog(masters[0].version) metaglyphs = get_glyph_info_from_log(instancelog) import operator masters = map(operator.attrgetter('id', 'version'), models.Master.filter(project_id=project.id)) return ujson.dumps({ 'masters': masters_list, 'versions': project.get_versions(), 'metaglyphs': metaglyphs, 'mode': project.mfparser, 'project_id': project.id })
def POST(self): postdata = web.input(project_id=0) project = models.Project.get(id=postdata.project_id) if not project: raise web.notfound() masters = project.get_ordered_masters() master = project.create_master() web.ctx.orm.commit() prepare_master_environment(master) metapost = Metapost(project) metapost.execute_interpolated_bulk() primary_master = masters[0] master.name = primary_master.name logpath = project.get_instancelog(version=primary_master.version) for glyph in primary_master.get_glyphs(): json = get_glyph_info_from_log(logpath, glyph.name) if not json: error = ('could not find any contours for ' 'instance in %s for %s') % (logpath, glyph.name) raise web.badrequest(ujson.dumps({'error': error})) zpoints = glyph.get_zpoints() points = [] for i, contourpoints in enumerate(json[0]['contours']): if not contourpoints: error = ('could not find any points in contour ' 'for instance in %s') % logpath raise web.badrequest(ujson.dumps({'error': error})) metapost_points = [] for point in contourpoints: if project.mfparser == 'controlpoints': p = { 'x': self.round(point['controls'][0]['x']), 'y': self.round(point['controls'][0]['y']) } metapost_points.append(p) metapost_points.append({ 'x': self.round(point['x']), 'y': self.round(point['y']) }) if project.mfparser == 'controlpoints': p = { 'x': self.round(point['controls'][1]['x']), 'y': self.round(point['controls'][1]['y']) } metapost_points.append(p) if project.mfparser == 'controlpoints' and metapost_points: if i != 0: points_ = metapost_points[1:] + metapost_points[:1] points += points_ else: points_ = metapost_points[2:] + metapost_points[:2] points += points_[::-1] else: points += metapost_points if len(zpoints) != len(points): error = '%s zp != mp %s' % (len(zpoints), len(points)) raise web.badrequest(ujson.dumps({'error': error})) newglypha = models.Glyph.create(master_id=master.id, name=glyph.name, width=glyph.width, project_id=glyph.project_id) i = 0 for point in points: self.create_glyphpoint(newglypha, (i + 1), zpoints[i], point) i += 1 project.masters = ','.join([str(master.id)] * len(masters)) web.ctx.orm.commit() return ujson.dumps({'versions': project.get_versions()})