Пример #1
0
    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({})
Пример #2
0
    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({})
Пример #3
0
    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()})
Пример #4
0
    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()})