示例#1
0
class TextTemplate(TextBuffer):
    def __init__(self, name='TextTemplate'):
        TextBuffer.__init__(self)
        #self.set_name(name)
        self.__tagtable__ = self.get_tag_table()
        template_tag = _TemplateTag('template', foreground='magenta', scale=.85)
        self.__tagtable__.add(template_tag)
        self.__template__ = Template()
        #StringTemplate('', delimiters=self.delimiters)
        

    def _remake_tag_(self, span):
        start, end = span
        tagtext = self.__template__.template[start:end]
        start, end = map(self.get_iter_at_offset, span)
        self.delete(start, end)
        self.insert_with_tags_by_name(start, tagtext, 'template')

    def position_tag(self):
        start, end = self.get_selection_bounds()
        self.__replace_pos__ = start, end

    def tag_slice(self):
        return self.get_slice(*self.__replace_pos__)

    def insert_tag(self, keytext):
        self.position_tag()
        start, end = self.__replace_pos__
        text = self.get_slice(start, end)
        self.delete(start, end)
        left, right = self.__template__.delimiters
        tag = ''.join([left, keytext, right])
        self.insert_with_tags_by_name(start, tag, 'template')
        self.__template__[keytext] = text
        self.reset_template()

    def set_text(self, text):
        TextBuffer.set_text(self, text)
        self.reset_template()

    def reset_template(self):
        text = get_buffer_text(self)
        self.__template__.set_template(text)
        map(self._remake_tag_, self.__template__.spans())
        
    def set_subs(self, datadict):
        self.__template__.clear()
        self.__template__.update(datadict)
        self.reset_template()

    def preview(self):
        return str(self.__template__.sub())

    def get_full_text(self):
        return self.get_text(*self.get_bounds())