"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)