def next(self): "Get the next text segment. Return an 8-element array: (FONTNAME, SIZE, LINEHEIGHT, COLOR, H_ALIGN, V_ALIGN, ANGLE, STR." l = [] changed = 0 self.old_state = self.ts.copy() while self.i < len(self.str): if self.str[self.i] == '/': self.i = self.i+1 ch = self.str[self.i] self.i = self.i+1 self.old_state = self.ts.copy() if ch == '/' or ch == '{' or ch == '}': l.append(ch) elif _font_family_map.has_key(ch): self.ts.family = _font_family_map[ch] changed = 1 elif ch == 'F': # /F{font-family} if self.str[self.i] != '{': raise FontException('"{" must follow /F', self.str) self.i += 1 istart = self.i while self.str[self.i] != '}': self.i += 1 if self.i >= len(self.str): raise FontException('Expecting "/F{...}"', self.str) self.ts.family = self.str[istart:self.i] self.i += 1 changed = 1 elif ch in string.digits: self.i -= 1 self.ts.size = self.__parse_int() self.ts.line_height = self.ts.size changed = 1 elif ch == 'l': self.ts.line_height = self.__parse_int() changed = 1 elif ch == 'b': self.ts.modifiers.append('b') changed = 1 elif ch == 'i': self.ts.modifiers.append('i') changed = 1 elif ch == 'o': self.ts.modifiers.append('q') changed = 1 elif ch == 'c': self.ts.color = color.gray_scale(self.__parse_float()) elif ch == 'v': if self.str[self.i] not in 'BTM': raise FontException('Undefined escape sequence "/v%c"' % self.str[self.i], self.str) self.ts.valign = self.str[self.i] self.i += 1 changed = 1 elif ch == 'h': if self.str[self.i] not in 'LRC': raise FontException('Undefined escape sequence "/h%c"' % self.str[self.i], self.str) self.ts.halign = self.str[self.i] self.i += 1 changed = 1 elif ch == 'a': self.ts.angle = self.__parse_int() changed = 1 else: raise FontException('Undefined escape sequence: "/%c"' % ch, self.str) elif self.str[self.i] == '{': self.stack.append(self.ts.copy()) self.i += 1 elif self.str[self.i] == '}': if len(self.stack) == 0: raise FontError('Unmatched "}"', self.str) self.ts = self.stack[-1] del self.stack[-1] self.i += 1 changed = 1 else: l.append(self.str[self.i]) self.i += 1 if changed and len(l) > 0: return self.__return_state(self.old_state, ''.join(l)) else: # font change in the beginning of the sequence doesn't count. self.old_state = self.ts.copy() changed = 0 if len(l) > 0: return self.__return_state(self.old_state, ''.join(l)) else: return None
def next(self): "Get the next text segment. Return an 8-element array: (FONTNAME, SIZE, LINEHEIGHT, COLOR, H_ALIGN, V_ALIGN, ANGLE, STR." l = [] changed = 0 self.old_state = self.ts.copy() while self.i < len(self.str): if self.str[self.i] == '/': self.i = self.i+1 ch = self.str[self.i] self.i = self.i+1 self.old_state = self.ts.copy() if ch == '/' or ch == '{' or ch == '}': l.append(ch) elif _font_family_map.has_key(ch): self.ts.family = _font_family_map[ch] changed = 1 elif ch == 'F': # /F{font-family} if self.str[self.i] != '{': raise Exception, "'{' must follow /F in \"%s\"" % self.str self.i = self.i + 1 istart = self.i while self.str[self.i] != '}': self.i = self.i + 1 if self.i >= len(self.str): raise Exception, "Expecting /F{...}. in \"%s\"" % self.str self.ts.family = self.str[istart:self.i] self.i = self.i + 1 changed = 1 elif ch in string.digits: istart = self.i-1 while self.i < len(self.str) and self.str[self.i] in string.digits: self.i = self.i + 1 self.ts.size = string.atoi(self.str[istart:self.i]) self.ts.line_height = self.ts.size changed = 1 elif ch == 'l': istart = self.i while self.i < len(self.str) and self.str[self.i] in string.digits: self.i = self.i + 1 self.ts.line_height = string.atoi(self.str[istart:self.i]) changed = 1 elif ch == 'b': self.ts.bold = "Bold" changed = 1 elif ch == 'i': self.ts.italic = "Italic" changed = 1 elif ch == 'o': self.ts.oblique = "Oblique" changed = 1 elif ch == 'c': istart = self.i while self.i < len(self.str) and self.str[self.i] in string.digits or self.str[self.i] == '.': self.i = self.i + 1 self.ts.color = color.gray_scale(string.atof(self.str[istart:self.i])) elif ch == 'v': if self.str[self.i] in ("B", "T", "M"): self.ts.valign = self.str[self.i] self.i = self.i + 1 changed = 1 else: raise Exception, "Undefined escape sequence: /v%c (%s)" % (self.str[self.i], self.str) elif ch == 'h': if self.str[self.i] in ("L", "R", "C"): self.ts.halign = self.str[self.i] self.i = self.i + 1 changed = 1 else: raise Exception, "Undefined escape sequence: /h%c (%s)" % (self.str[self.i], self.str) elif ch == 'a': istart = self.i while self.i < len(self.str) and \ (self.str[self.i] in string.digits or self.str[self.i] == '-'): self.i = self.i + 1 self.ts.angle = string.atoi(self.str[istart:self.i]) changed = 1 else: raise Exception, "Undefined escape sequence: /%c (%s)" % (ch, self.str) elif self.str[self.i] == '{': self.stack.append(self.ts.copy()) self.i = self.i + 1 elif self.str[self.i] == '}': if len(self.stack) == 0: raise ValueError, "unmatched '}' in \"%s\"" % (self.str) self.ts = self.stack[-1] del self.stack[-1] self.i = self.i + 1 changed = 1 else: l.append(self.str[self.i]) self.i = self.i + 1 if changed and len(l) > 0: return self._return_state(self.old_state, string.join(l, '')) else: # font change in the beginning of the sequence doesn't count. self.old_state = self.ts.copy() changed = 0 if len(l) > 0: return self._return_state(self.old_state, string.join(l, '')) else: return None
gray_standards.add(style) return style #black = __intern_both(Plain(bgcolor=color.gray_scale(0.0), line_style=None)) # # Fill styles for grayscale charts. # gray70 = __intern_grayscale(Plain(bgcolor=color.gray70, line_style=None)) diag = __intern_grayscale(Diag(line_style=line_style.T(cap_style=2))) gray30 = __intern_grayscale(Plain(bgcolor=color.gray30, line_style=None)) rdiag = __intern_grayscale(Rdiag(line_style=line_style.T(cap_style=2))) gray10 = __intern_grayscale(Plain(bgcolor=color.gray10, line_style=None)) diag2 = __intern_grayscale(Diag(line_style=line_style.T(width=3, cap_style=2), line_interval=6)) white = __intern_grayscale(Plain(bgcolor=color.gray_scale(1.0), line_style=None)) rdiag2 = __intern_grayscale(Rdiag(line_style=line_style.T(width=3, cap_style=2), line_interval=6)) vert = __intern_grayscale(Vert()) diag3 = __intern_grayscale(Diag(line_style=line_style.T(width=3, color=color.gray50, cap_style=2), line_interval=6)) gray50 = __intern_grayscale(Plain(bgcolor=color.gray50, line_style=None)) horiz = __intern_grayscale(Horiz()) gray90 = __intern_grayscale(Plain(bgcolor=color.gray90, line_style=None)) rdiag3 = __intern_grayscale(Rdiag(line_style=line_style.T(width=3, color=color.gray50, cap_style=2), line_interval=6)) wave = __intern_grayscale(Wave(line_style=line_style.T(cap_style=2, join_style=1))) vwave = __intern_grayscale(Vwave(line_style=line_style.T(cap_style=2, join_style=1)))
#black = __intern_both(Plain(bgcolor=color.gray_scale(0.0), line_style=None)) # # Fill styles for grayscale charts. # gray70 = __intern_grayscale(Plain(bgcolor=color.gray70, line_style=None)) diag = __intern_grayscale(Diag(line_style=line_style.T(cap_style=2))) gray30 = __intern_grayscale(Plain(bgcolor=color.gray30, line_style=None)) rdiag = __intern_grayscale(Rdiag(line_style=line_style.T(cap_style=2))) gray10 = __intern_grayscale(Plain(bgcolor=color.gray10, line_style=None)) diag2 = __intern_grayscale( Diag(line_style=line_style.T(width=3, cap_style=2), line_interval=6)) white = __intern_grayscale( Plain(bgcolor=color.gray_scale(1.0), line_style=None)) rdiag2 = __intern_grayscale( Rdiag(line_style=line_style.T(width=3, cap_style=2), line_interval=6)) vert = __intern_grayscale(Vert()) diag3 = __intern_grayscale( Diag(line_style=line_style.T(width=3, color=color.gray50, cap_style=2), line_interval=6)) gray50 = __intern_grayscale(Plain(bgcolor=color.gray50, line_style=None)) horiz = __intern_grayscale(Horiz()) gray90 = __intern_grayscale(Plain(bgcolor=color.gray90, line_style=None)) rdiag3 = __intern_grayscale( Rdiag(line_style=line_style.T(width=3, color=color.gray50, cap_style=2), line_interval=6)) wave = __intern_grayscale( Wave(line_style=line_style.T(cap_style=2, join_style=1)))