Index: sitescripts/cms/converters.py |
=================================================================== |
--- a/sitescripts/cms/converters.py |
+++ b/sitescripts/cms/converters.py |
@@ -115,6 +115,9 @@ |
text = re.sub(r"(<img\s[^<>]*\b(src)=\")([^<>\"]+)(\")", process_link, text) |
return text |
+ include_start_regex = '<' |
+ include_end_regex = '>' |
+ |
def resolve_includes(self, text): |
def resolve_include(match): |
global converters |
@@ -126,7 +129,14 @@ |
return converter() |
raise Exception("Failed to resolve include %s in page %s" % (name, self._params["page"])) |
- return re.sub(r'<\?\s*include\s+([^\s<>"]+)\s*\?>', resolve_include, text) |
+ return re.sub( |
+ r'%s\?\s*include\s+([^\s<>"]+)\s*\?%s' % ( |
+ self.include_start_regex, |
+ self.include_end_regex |
+ ), |
+ resolve_include, |
+ text |
+ ) |
def __call__(self): |
result = self.get_html(self._params[self._key]) |
@@ -148,6 +158,15 @@ |
return result |
class MarkdownConverter(Converter): |
+ include_start_regex = r'(?:%s|%s)' % ( |
+ Converter.include_start_regex, |
+ re.escape(jinja2.escape(Converter.include_start_regex)) |
+ ) |
+ include_end_regex = r'(?:%s|%s)' % ( |
+ Converter.include_end_regex, |
+ re.escape(jinja2.escape(Converter.include_end_regex)) |
+ ) |
+ |
def get_html(self, source): |
def remove_unnecessary_entities(match): |
char = unichr(int(match.group(1))) |
@@ -172,6 +191,16 @@ |
return result |
class TemplateConverter(Converter): |
+ class _SourceLoader(jinja2.BaseLoader): |
+ def __init__(self, source): |
+ self.source = source |
+ |
+ def get_source(self, environment, template): |
+ try: |
+ return self.source.read_file(template + ".tmpl"), None, None |
+ except Exception: |
+ raise jinja2.TemplateNotFound(template) |
+ |
def __init__(self, *args, **kwargs): |
Converter.__init__(self, *args, **kwargs) |
@@ -197,7 +226,7 @@ |
filters[func] = getattr(module, func) |
filters[func].module_ref = module # Prevent garbage collection |
- self._env = get_custom_template_environment(filters) |
+ self._env = get_custom_template_environment(filters, self._SourceLoader(self._params["source"])) |
def get_html(self, source): |
template = self._env.from_string(source) |