示例#1
0
    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
示例#2
0
    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
示例#3
0
    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)))
示例#4
0

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