class GenericLoader(LoaderWithComposites): format_name = '' base_style = None def __init__(self, file, filename, match): LoaderWithComposites.__init__(self) self.file = file self.filename = filename self.match = match self.style = Style() if self.base_style is not None: self.prop_stack = PropertyStack(base=self.base_style.Duplicate()) else: self.prop_stack = PropertyStack() self.messages = {} def get_prop_stack(self): stack = self.prop_stack if not self.style.IsEmpty(): stack.load_AddStyle(self.style) stack.condense() if self.base_style is not None: self.prop_stack = PropertyStack(base=self.base_style.Duplicate()) else: self.prop_stack = PropertyStack() self.style = Style() return stack def set_prop_stack(self, stack): self.prop_stack = stack def document(self, *args, **kw): self.begin_composite(doc_class, args, kw) def layer(self, *args, **kw): self.begin_layer_class(SK1Layer, args, kw) def masterlayer(self, *args, **kw): while not issubclass(self.composite_class, doc_class): self.end_composite() kw['is_MasterLayer'] = 1 self.begin_layer_class(SK1Layer, args, kw) def begin_page(self, *args, **kw): while not issubclass(self.composite_class, doc_class): self.end_composite() if not len(args): args = ["", deepcopy(self.page_layout)] self.begin_composite(page_class, args, kw) def end_layer(self): self.end_composite() def begin_layer_class(self, layer_class, args, kw=None): if issubclass(self.composite_class, SK1Layer): self.end_composite() if issubclass(self.composite_class, doc_class) or issubclass( self.composite_class, page_class): self.begin_composite(layer_class, args, kw) else: print 'self.composite_class is %s, not a document', self.composite_class # raise SketchLoadError('self.composite_class is %s, not a document', # self.composite_class) def bezier(self, paths=None): self.append_object( PolyBezier(paths=paths, properties=self.get_prop_stack())) def rectangle(self, m11, m21, m12, m22, v1, v2, radius1=0, radius2=0): trafo = Trafo(m11, m21, m12, m22, v1, v2) self.append_object( Rectangle(trafo, radius1=radius1, radius2=radius2, properties=self.get_prop_stack())) def ellipse(self, m11, m21, m12, m22, v1, v2, start_angle=0.0, end_angle=0.0, arc_type=sk1const.ArcPieSlice): self.append_object( Ellipse(Trafo(m11, m21, m12, m22, v1, v2), start_angle, end_angle, arc_type, properties=self.get_prop_stack())) def simple_text(self, str, trafo=None, valign=sk1const.ALIGN_BASE, halign=sk1const.ALIGN_LEFT): if type(trafo) == TupleType: if len(trafo) == 2: trafo = apply(Translation, trafo) else: raise TypeError, "trafo must be a Trafo-object or a 2-tuple" self.append_object( text.SimpleText(text=str, trafo=trafo, valign=valign, halign=halign, properties=self.get_prop_stack())) def image(self, image, trafo): if type(trafo) == TupleType: if len(trafo) == 2: trafo = apply(Translation, trafo) else: raise TypeError, "trafo must be a Trafo-object or a 2-tuple" self.append_object(SK1Image(image, trafo=trafo)) def begin_group(self, *args, **kw): self.begin_composite(SK1Group, args, kw) def end_group(self): self.end_composite() def guess_cont(self): self.guess_continuity = 1 def end_composite(self): isdoc = self.composite_class is doc_class LoaderWithComposites.end_composite(self) if isdoc: self.add_meta(self.object) def add_meta(self, doc): doc.meta.fullpathname = self.filename dir, name = os.path.split(self.filename) doc.meta.directory = dir doc.meta.filename = name doc.meta.native_format = 0 doc.meta.format_name = self.format_name def add_message(self, message): # pdebug(('load', 'echo_messages'), message) self.messages[message] = self.messages.get(message, 0) + 1 def Messages(self): messages = self.messages.items() list = [] for message, count in messages: if count > 1: list.append(_("%(message)s (%(count)d times)") % locals()) else: list.append(message) list.sort() return string.join(list, '\n')