Example #1
0
    def apply_asy(self, filename, expr, evaluation, **options):
        '%(name)s[filename_String, expr_, OptionsPattern[%(name)s]]'

        if expr.get_head_name() == "System`Image":
            res = Expression("System`ImageExport", filename, expr)
            return res.evaluate(evaluation)

        filename = filename.value
        if expr.get_head_name() not in ("System`Graphics",
                                        "System`Graphics3D"):
            expr = Expression("Text", expr)
            expr = Expression("Graphics", Expression("List", expr))

        asy_code = Expression("MakeBoxes", expr).evaluate(evaluation)
        try:
            asy_code = asy_code.boxes_to_tex(evaluation=evaluation)
        except BoxError as e:
            evaluation.message(self.get_name(), "boxerr", e.box)
            return SymbolFailed

        asy_code = asy_code[13:-10]
        asy_code = replace_wl_with_plain_text(asy_code, False)
        # TODO: Handle properly WL characters to latex commands
        asy_code = asy_code.replace("\\[DifferentialD]", "d ")
        fin = os.path.join(tempfile._get_default_tempdir(),
                           next(tempfile._get_candidate_names()))
        from pymathics.asy import asy_path
        try:
            with open(fin, 'w+') as borrador:
                borrador.write(asy_code)
        except:
            evaluation.message(self.get_name(), "nowrtacs")
            return SymbolFailed
        if self.extension == "svg":
            cmdline = [
                asy_path, '-f', self.extension, '--svgemulation', '-o',
                filename, fin
            ]
        else:
            cmdline = [asy_path, '-f', self.extension, '-o', filename, fin]
        try:
            check_call(cmdline, stdout=DEVNULL, stderr=DEVNULL)
        except:
            evaluation.message(self.get_name(), "asyfld")
            return SymbolFailed
        return SymbolNull