2012-05-06 3 views
0

Я пишу почтовый клиент, и я хочу реализовать такую ​​вещь, как %CURSOR из шаблонов kmail: отметьте позицию, где курсор должен быть помещен после того, как появилось сообщение электронной почты. Какой шаблонный движок может делать такие вещи?Шаблонный двигатель, который может записать некоторую позицию блока

+0

Как это связано с Python? – Amber

+0

@Amber Потому что мне нужен механизм программирования шаблонов python. Это напрямую не связано с kmail: я пишу почтовый клиент, а не плагин к kmail. «kmail» здесь, например, только. – ZyX

+0

Я не думаю, что вы хотите обрабатывать позицию курсора в своем шаблоне. Вместо этого я бы сказал, что у вас есть токен, который вы обнаруживаете позже, и удалите из визуализированного шаблона, чтобы поместить курсор. – Amber

ответ

0
from mako.runtime import Context 
class CursorContext(Context): 
    __slots__=set(('lines', 'position')) 

    def __init__(self, *args, **kwargs): 
     super(CursorContext, self.__class__).__init__(self, self, *args, **kwargs) 
     self.lines=[''] 
     self.position=None 

    def write(self, v): 
     ls=s(v).split('\n') 
     self.lines[-1]+=ls.pop(0) 
     self.lines+=ls 

    def _record_position(self): 
     if self.position is not None: 
      raise ValueError('Position already defined') 
     self.position=(len(self.lines), len(self.lines[-1]) if self.lines else 0) 

    def _get_position(self): 
     if self.position is None: 
      self._record_position() 
     return self.position 

<...> 

context=CursorContext(**env) # env is a dictionary with template environment variables 
template.render_context(context) # template is mako.template.Template object 
# Now template is in context.lines and 
# cursor position can be obtained by context._get_position() 
Смежные вопросы