diff -r c869766e25ff -r 59da528bc470 hpgl_parser.py --- a/hpgl_parser.py Fri Jan 25 20:51:56 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,451 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import numpy - -vsplitter = re.compile('[ ,]') -vextractor = re.compile('(?P[^;\n\r\aA-DF-Za-df-z]*?)(?P[;\n\r\a]+)', re.S+re.M) - -class HPGLParser(object): - def __init__(self, data=None): - self.str_terminator = chr(0x03) - self.IN() - if data: - self.parse(data) - - def parse(self, data): - self.data = data - self.idx = 0 - self.IN() - while self.idx1: - self.pattern_len = values[1] - - def PW(self): - """ Pen Width """ - values = self.extract_value() - if len(values) == 1: - self.pen_thickness = values[0] - - def SM(self): - """ Symbol Mode """ - values = self.extract_value() - if len(values) == 0: - self.symbol_mode = False - elif len(values) == 1: - self.symbol_mode = values[0] - - def SP(self): - """ Select Pen """ - values = self.extract_value() - if len(values) == 1: - self.pen = values[0] - - def TL(self): - """ Tick Len """ - values = self.extract_value() - # TODO - - def XT(self): - """ X-axis Tick """ - # TODO - print "X ticks" - - def YT(self): - """ X-axis Tick """ - # TODO - print "Y ticks" - - def PT(self): - """ Pen Thickness Select """ - values = self.extract_value() - if len(values) == 0: - self.pen_thickness = 0.3 - elif len(values) == 1: - self.pen_thickness = values[0] - - def CS(self): - """ Standard Character Set """ - values = self.extract_value() - if len(values) == 0: - self.std_char_set = 0 - elif len(values) == 1: - self.std_char_set = values[0] - - def CA(self): - """ Alternate Character Set """ - values = self.extract_value() - if len(values) == 0: - self.alt_char_set = 0 - elif len(values) == 1: - self.alt_char_set = values[0] - - def SS(self): - """ Select Standard Character Set """ - self.char_set = "std" - - def SA(self): - """ Select Alternate Character Set """ - self.char_set = "alt" - - def DT(self): - """ Define Label Terminator """ - values = self.extract_value(raw=True) - if len(values) == 0: - self.str_terminator = chr(0x03) - elif len(values) == 1: - self.str_terminator = values[0] - - def LB(self): - """ Character Plot """ - values = self.extract_string() - self.plot_string(values) - x, y = self.pos - values = values.split('\n') - if self.char_size == "absolute": - x += len(values[-1]) * self.char_width *1016/2.54 - y += (len(values)-1) * self.char_height *1016/2.54 - else: - x0, x1, y0, y1 = self.scale - dx = x1-x0 - dy = y1-y0 - x += len(values[-1]) * self.char_width / 100.0 * dx - y += (len(values)-1) * self.char_height / 100.0 * dy - - #print "LB pos[%s] %s -> %s"%(repr(values), self.pos, (x,y)) - self.pos = [x, y] - - def get_char_size(self): - if self.char_size == "absolute": - x = self.char_width *1016/2.54 - y = self.char_height *1016/2.54 - else: - x0, x1, y0, y1 = self.scale - dx = x1-x0 - dy = y1-y0 - x = self.char_width / 100.0 * dx - y = self.char_height / 100.0 * dy - return x, y - - def DI(self): - """ Absolute Direction """ - values = self.extract_value() - if len(values) == 0: - self.char_direction = 1.0, 0.0 - elif len(values) == 2: - self.char_direction = values - - def DR(self): - """ Relative Direction """ - values = self.extract_value() - if len(values) == 0: - self.char_direction = 1.0, 0.0 - elif len(values) == 2: - # TODO : compute as percentages - self.char_direction = values - - def CP(self): - """ Character Plot """ - values = self.extract_value() - # TODO - if len(values) == 0: - values = 0, 1 - x, y = self.pos - if self.char_size == "absolute": - x += values[0] * self.char_width *1016/2.54 - y += values[1] * self.char_height *1016/2.54 - else: - x0, x1, y0, y1 = self.scale - dx = x1-x0 - dy = y1-y0 - x += values[0] * self.char_width / 100.0 * dx - y += values[1] * self.char_height / 100.0 * dy - #print "CB pos[%s] %s -> %s"%(repr(values), self.pos, (x,y)) - self.pos = [x, y] - - def SI(self): - """ Set Absolute Character Size """ - values = self.extract_value() - self.char_size = "absolute" - if len(values) == 0: - self.char_width = 0.1879 # cm - self.char_height = 0.2690 # cm - elif len(values) == 2: - self.char_width, self.char_height = values - - def SR(self): - """ Set Relative Character Size """ - values = self.extract_value() - self.char_size = "relative" - if len(values) == 0: - self.char_width = 0.75 # percentage - self.char_height = 1.5 # id - elif len(values) == 2: - self.char_width, self.char_height = values - - def SL(self): - """ Character Slant """ - values = self.extract_value() - # TODO - - def UC(self): - """ User Defined Character """ - values = self.extract_value() - # TODO - -if __name__ == '__main__': - import sys - data = open(sys.argv[1]).read() - - p = HPGLParser(data) -