def to_stroke_collection(self, dictionary, silent=True): """ @type dictionary: L{CharacterStrokeDictionary """ strokecol = CharacterCollection() for char in self.get_all_characters_gen(): stroke_labels = dictionary.get_strokes(char.get_unicode())[0] strokes = char.get_writing().get_strokes(full=True) if len(strokes) != len(stroke_labels): if silent: continue else: raise ValueError, "The number of strokes doesn't " \ "match with reference character" for stroke, label in zip(strokes, stroke_labels): utf8 = label.encode("utf-8") strokecol.add_set(utf8) writing = Writing() writing.append_stroke(stroke) writing.normalize_position() schar = Character() schar.set_utf8(utf8) schar.set_writing(writing) strokecol.append_character(utf8, schar) return strokecol
def _getCharacter(self): writing = self._getWriting() char = Character() char.set_writing(writing) char.set_utf8("A") return char
def set_writings(self, writings): """ writings: a list of tegaki.Writing objects. """ self._model.clear() characters = [] for writing in writings: char = Character() char.set_writing(writing) char.set_utf8("?") characters.append(char) self.set_characters(characters)
def _end_element(self, name): if name == "kanji": char = Character() char.set_utf8(self._utf8) char.set_writing(self._writing) self._charcol.add_set(self._utf8) self._charcol.append_character(self._utf8, char) for s in ["_tag", "_stroke"]: if s in self.__dict__: del self.__dict__[s] if name == "stroke": self._writing.append_stroke(self._stroke) self._stroke = None self._tag = None
def _end_element(self, name): if name == "kanji": char = Character() char.set_utf8(self._utf8) char.set_writing(self._writing) self._charcol.add_set(self._utf8) self._charcol.append_character(self._utf8, char) for s in ["_tag", "_stroke"]: if s in self.__dict__: del self.__dict__[s] if name == "path": self._writing.append_stroke(self._stroke) self._stroke = None self._tag = None
def get_character_collection(self): charcol = CharacterCollection() # group characters with the same label into sets sets = {} for i in range(len(self._labels)): # Create Character writing = Writing() if self.height and self.width: writing.set_height(self.height) writing.set_width(self.width) for delin_range in self._delineations[i]: if delin_range.start_comp == (delin_range.end_comp - 1): stroke_points = self._strokes[delin_range.start_comp][delin_range.start_point:delin_range.end_point] writing.append_stroke(Stroke.from_list(stroke_points)) else: # add first stroke to writing start_stroke_points = self._strokes[delin_range.start_comp][delin_range.start_point:-1] if len(start_stroke_points) > 0: writing.append_stroke(Stroke.from_list(start_stroke_points)) # add last stroke to writing end_stroke_points = self._strokes[delin_range.end_comp - 1][0:delin_range.end_point] if len(end_stroke_points) > 0: writing.append_stroke(Stroke.from_list(end_stroke_points)) # add the remaining strokes to writing for stroke in self._strokes[delin_range.start_comp + 1:delin_range.end_comp - 1]: writing.append_stroke(stroke) character = Character() character.set_writing(writing) utf8 = self._labels[i] character.set_utf8(utf8) sets[utf8] = sets.get(utf8, []) + [character] charcol.add_sets(sets.keys()) for set_name, characters in sets.items(): charcol.append_characters(set_name, characters) return charcol
def _add_character_writing(self): if self._writing: character = Character() character.set_writing(self._writing) self._characters.append(character)