diff --git a/docs/settings.rst b/docs/settings.rst index 9c596da3..482a5350 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -51,7 +51,7 @@ Setting name (default value) what does it do? `PDF_GENERATOR` (``False``) Set to True if you want to have PDF versions of your documents. You will need to install `rst2pdf`. -`RELATIVE_URL` (``True``) Defines if pelican should use relative urls or +`RELATIVE_URLS` (``True``) Defines if pelican should use relative urls or not. `SITEURL` base URL of your website. Note that this is not a way to tell pelican to use relative urls diff --git a/pelican/__init__.py b/pelican/__init__.py index 7112fcec..4b743d52 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -152,7 +152,7 @@ def main(): else: pelican.run() except Exception, e: - log.critical(str(e)) + log.critical(unicode(e)) if __name__ == '__main__': diff --git a/pelican/utils.py b/pelican/utils.py index 8e48c2e9..2fb76670 100644 --- a/pelican/utils.py +++ b/pelican/utils.py @@ -15,7 +15,7 @@ def get_date(string): If no format matches the given date, raise a ValuEerror """ formats = ['%Y-%m-%d %H:%M', '%Y/%m/%d %H:%M', '%Y-%m-%d', '%Y/%m/%d', - '%d/%m/%Y', '%d.%m.%Y', '%d.%m.%Y %H:%M'] + '%d/%m/%Y', '%d.%m.%Y', '%d.%m.%Y %H:%M', '%Y-%m-%d %H:%M:%S'] for date_format in formats: try: return datetime.strptime(string, date_format) diff --git a/pelican/writers.py b/pelican/writers.py index 1f560c01..13ab9647 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -111,7 +111,8 @@ class Writer(object): localcontext['SITEURL'] = get_relative_path(name) localcontext.update(kwargs) - self.update_context_contents(name, localcontext) + if relative_urls: + self.update_context_contents(name, localcontext) # check paginated paginated = paginated or {} @@ -166,24 +167,23 @@ class Writer(object): """ content = input._content - hrefs = re.compile(r'<\s*[^\>]*href\s*=(^!#)\s*(["\'])(.*?)\1') - srcs = re.compile(r'<\s*[^\>]*src\s*=\s*(["\'])(.*?)\1') + hrefs = re.compile(r""" + (?P<\s*[^\>]* # match tag with src and href attr + (?:href|src)\s*=\s* + ) + (?P["\']) # require value to be quoted + (?![#?]) # don't match fragment or query URLs + (?![a-z]+:) # don't match protocol URLS + (?P.*?) # the url value + \2""", re.X) - matches = hrefs.findall(content) - matches.extend(srcs.findall(content)) - relative_paths = [] - for found in matches: - found = found[1] - if found not in relative_paths: - relative_paths.append(found) + def replacer(m): + relative_path = m.group('path') + dest_path = os.path.normpath( os.sep.join( (get_relative_path(name), + "static", relative_path) ) ) + return m.group('markup') + m.group('quote') + dest_path + m.group('quote') - for relative_path in relative_paths: - if not ":" in relative_path: # we don't want to rewrite protocols - dest_path = os.sep.join((get_relative_path(name), "static", - relative_path)) - content = content.replace(relative_path, dest_path) - - return content + return hrefs.sub(replacer, content) if context is None: return