"Fossies" - the Fresh Open Source Software Archive

Member "TeXmacs-2.1.2-src/plugins/tmpy/graph/graph.py" (5 May 2022, 4409 Bytes) of package /linux/misc/TeXmacs-2.1.2-src.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Python source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 #!/usr/bin/env python
    2 ###############################################################################
    3 ##
    4 ## MODULE      : graph.py
    5 ## DESCRIPTION : An abstract Graph class
    6 ## COPYRIGHT   : (C) 2019  Darcy Shen
    7 ##
    8 ## This software falls under the GNU general public license version 3 or later.
    9 ## It comes WITHOUT ANY WARRANTY WHATSOEVER. For details, see the file LICENSE
   10 ## in the root directory or <http://www.gnu.org/licenses/gpl-3.0.html>.
   11 
   12 import os
   13 import platform
   14 import shutil
   15 import time
   16 from ..protocol import *
   17 from ..compat import *
   18 
   19 
   20 class Graph(object):
   21     name = ""
   22     message = ""
   23     pre_code = ""
   24     post_code = ""
   25     height = ""
   26     width = ""
   27     output = ""
   28     default_width = "0px"
   29     default_height = "0px"
   30     default_output = "eps"
   31 
   32     def greet(self):
   33         for x in self.message.split("\n"):
   34             if len(x) == 0:
   35                 pass
   36             else:
   37                 flush_verbatim (x + "\n")
   38                 flush_prompt (self.name + "] ")
   39 
   40     def available(self):
   41         return which(self.name) is not None
   42 
   43     def reset_options(self):
   44         self.height = self.default_height
   45         self.width = self.default_width
   46         self.output = self.default_output
   47 
   48     def apply_magic(self, magic_line):
   49         args = list(filter(lambda x: len(x)!=0, magic_line.split(" ")[1:]))
   50         while (len(args) > 1):
   51             option = args[0]
   52             value = args[1]
   53             if (option == '-width'):
   54                 self.width = value
   55             elif (option == '-height'):
   56                 self.height = value
   57             elif (option == '-output'):
   58                 self.output = value
   59             else:
   60                 pass
   61             args = args[2:]
   62 
   63     def before_evaluate(self):
   64         self.reset_options()
   65         if not os.path.exists(self.get_tmp_dir()):
   66             os.mkdir(self.get_tmp_dir())
   67 
   68     def evaluate(self, code):
   69         pass
   70 
   71     def after_evaluate(self):
   72         self.clean_tmp_dir()
   73         self.remove_tmp_dir()
   74 
   75     def eval(self, code):
   76         self.before_evaluate()
   77         if (code.startswith("%")):
   78             magic_lines = code.split("\n")
   79             magic_line = magic_lines[0]
   80             self.apply_magic(magic_line)
   81             code = '\n'.join(magic_lines[1:])
   82         self.evaluate(code)
   83         time.sleep(1)
   84         self.after_evaluate()
   85 
   86     def main_loop(self):
   87         # Main session loop.
   88         while True:
   89             line = tm_input()
   90             if not line:
   91                 continue
   92             if line[0] == DATA_COMMAND:
   93                 # TODO: Handle completions
   94                 continue
   95             else:
   96                 lines = [line]
   97                 while line != "<EOF>":
   98                     line = tm_input()
   99                     lines.append(line)
  100                 text = '\n'.join(lines[:-1])
  101                 self.eval(text)
  102 
  103     def get_tmp_dir(self):
  104         dir = "graph_" + self.name + "_" + str(os.getpid())
  105         if (platform.system() == "Windows"):
  106             return os.getenv("TEXMACS_HOME_PATH") + "\\system\\tmp\\" + dir + "\\"
  107         else:
  108             return os.getenv("TEXMACS_HOME_PATH") + "/system/tmp/" + dir + "/"
  109 
  110     def remove_tmp_dir(self):
  111         if (platform.system() != "Windows"):
  112             os.rmdir(self.get_tmp_dir())
  113 
  114     def clean_tmp_dir(self):
  115         folder = self.get_tmp_dir()
  116         for the_file in os.listdir(folder):
  117             file_path = os.path.join(folder, the_file)
  118             try:
  119                 if os.path.isfile(file_path):
  120                     os.unlink(file_path)
  121                 elif os.path.isdir(file_path):
  122                     shutil.rmtree(file_path)
  123             except Exception as e:
  124                 print(e)
  125 
  126     def get_png_path(self):
  127         return self.get_tmp_dir() + self.name + ".png"
  128 
  129     def get_eps_path(self):
  130         return self.get_tmp_dir() + self.name + ".eps"
  131 
  132     def get_svg_path(self):
  133         return self.get_tmp_dir() + self.name + ".svg"
  134 
  135     def get_png(self):
  136         return self.get_png_path() +\
  137             "?" + "width=" + str(self.width) +\
  138             "&" + "height=" + str(self.height)
  139 
  140     def get_eps(self):
  141         return self.get_eps_path() +\
  142             "?" + "width=" + str(self.width) +\
  143             "&" + "height=" + str(self.height)
  144 
  145     def get_svg(self):
  146         return self.get_svg_path() +\
  147             "?" + "width=" + str(self.width) +\
  148             "&" + "height=" + str(self.height)