Secretary now handles custom jinja tags ending and starting strings.
This commit is contained in:
parent
036d339e70
commit
5daa1a2c2b
1 changed files with 26 additions and 13 deletions
39
secretary.py
39
secretary.py
|
|
@ -140,6 +140,8 @@ class Renderer(object):
|
||||||
self.media_path = kwargs.pop('media_path', '')
|
self.media_path = kwargs.pop('media_path', '')
|
||||||
self.media_callback = self.fs_loader
|
self.media_callback = self.fs_loader
|
||||||
|
|
||||||
|
self._compile_tags_expressions()
|
||||||
|
|
||||||
|
|
||||||
def media_loader(self, callback):
|
def media_loader(self, callback):
|
||||||
"""This sets the the media loader. A user defined function which
|
"""This sets the the media loader. A user defined function which
|
||||||
|
|
@ -203,24 +205,36 @@ class Renderer(object):
|
||||||
Renderer._inc_node_tags_count(node.parentNode, is_block)
|
Renderer._inc_node_tags_count(node.parentNode, is_block)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
def _compile_tags_expressions(self):
|
||||||
def _is_jinja_tag(tag):
|
self.tag_pattern = re.compile(r'(?is)^({0}|{1}).*({2}|{3})$'.format(
|
||||||
|
self.environment.variable_start_string,
|
||||||
|
self.environment.block_start_string,
|
||||||
|
self.environment.variable_end_string,
|
||||||
|
self.environment.block_end_string
|
||||||
|
))
|
||||||
|
|
||||||
|
self.block_pattern = re.compile(r'(?is)^{0}.*{1}$'.format(
|
||||||
|
self.environment.block_start_string,
|
||||||
|
self.environment.block_end_string
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
def _is_jinja_tag(self, tag):
|
||||||
"""
|
"""
|
||||||
Returns True is tag (str) is a valid jinja instruction tag.
|
Returns True is tag (str) is a valid jinja instruction tag.
|
||||||
"""
|
"""
|
||||||
return re.findall(r'(?is)^{[{|%].*[%|}]}$', tag)
|
|
||||||
|
return self.tag_pattern.findall(tag)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
def _is_block_tag(self, tag):
|
||||||
def _is_block_tag(tag):
|
|
||||||
"""
|
"""
|
||||||
Returns True is tag (str) is a jinja flow control tag.
|
Returns True is tag (str) is a jinja flow control tag.
|
||||||
"""
|
"""
|
||||||
return re.findall(r'(?is)^{%[^{}]*%}$', tag)
|
return self.block_pattern.findall(tag)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
def _tags_in_document(self, document):
|
||||||
def _tags_in_document(document):
|
|
||||||
"""
|
"""
|
||||||
Yields a list of available jinja instructions tags in document.
|
Yields a list of available jinja instructions tags in document.
|
||||||
"""
|
"""
|
||||||
|
|
@ -231,25 +245,24 @@ class Renderer(object):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
content = tag.childNodes[0].data.strip()
|
content = tag.childNodes[0].data.strip()
|
||||||
if not Renderer._is_jinja_tag(content):
|
if not self._is_jinja_tag(content):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
yield tag
|
yield tag
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
def _census_tags(self, document):
|
||||||
def _census_tags(document):
|
|
||||||
"""
|
"""
|
||||||
Make a census of all available jinja tags in document. We count all
|
Make a census of all available jinja tags in document. We count all
|
||||||
the children tags nodes within their parents. This process is necesary
|
the children tags nodes within their parents. This process is necesary
|
||||||
to automaticaly avoid generating invalid documents when mixing block
|
to automaticaly avoid generating invalid documents when mixing block
|
||||||
tags in differents parts of a document.
|
tags in differents parts of a document.
|
||||||
"""
|
"""
|
||||||
for tag in Renderer._tags_in_document(document):
|
for tag in self._tags_in_document(document):
|
||||||
content = tag.childNodes[0].data.strip()
|
content = tag.childNodes[0].data.strip()
|
||||||
block_tag = re.findall(r'(?is)^{%[^{}]*%}$', content)
|
block_tag = re.findall(r'(?is)^{%[^{}]*%}$', content)
|
||||||
|
|
||||||
Renderer._inc_node_tags_count(tag.parentNode, block_tag)
|
self._inc_node_tags_count(tag.parentNode, block_tag)
|
||||||
|
|
||||||
|
|
||||||
def _prepare_document_tags(self, document):
|
def _prepare_document_tags(self, document):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue