From 2f34307e129a8ae14b29262b9c63c0ab091f0f7f Mon Sep 17 00:00:00 2001 From: Talha Mansoor Date: Thu, 29 Aug 2013 23:14:47 +0500 Subject: [PATCH 1/4] Change the regex so that it parse |filename| and {filename} equally Updates getpelican/pelican#1061 --- pelican/contents.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pelican/contents.py b/pelican/contents.py index 900049a2..94790612 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -187,7 +187,7 @@ class Content(object): (?:href|src)\s*=) (?P["\']) # require value to be quoted - (?P\|(?P.*?)\|(?P.*?)) # the url value + (?P[|{](?P.*?)[|}](?P.*?)) # the url value \2""", re.X) def replacer(m): From 8eef9624f5944802f456297108119393cc47aaa6 Mon Sep 17 00:00:00 2001 From: Talha Mansoor Date: Thu, 29 Aug 2013 23:23:54 +0500 Subject: [PATCH 2/4] Update documentation to reflect change in intrasite link syntax Updates getpelican/pelican#1061 --- docs/getting_started.rst | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/docs/getting_started.rst b/docs/getting_started.rst index bad9bbda..310d1715 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -400,7 +400,7 @@ and images that may be sitting alongside the current post (instead of having to determine where those resources will be placed after site generation). To link to internal content (files in the ``content`` directory), use the -following syntax: ``|filename|path/to/file``:: +following syntax: ``{filename}path/to/file``:: website/ @@ -421,8 +421,8 @@ In this example, ``article1.rst`` could look like:: See below intra-site link examples in reStructuredText format. - `a link relative to content root <|filename|/cat/article2.rst>`_ - `a link relative to current file <|filename|cat/article2.rst>`_ + `a link relative to content root <{filename}/cat/article2.rst>`_ + `a link relative to current file <{filename}cat/article2.rst>`_ and ``article2.md``:: @@ -431,8 +431,8 @@ and ``article2.md``:: See below intra-site link examples in Markdown format. - [a link relative to content root](|filename|/article1.md) - [a link relative to current file](|filename|../article1.md) + [a link relative to content root]({filename}/article1.md) + [a link relative to current file]({filename}../article1.md) Embedding non-article or non-page content is slightly different in that the directories need to be specified in ``pelicanconf.py`` file. The ``images`` @@ -447,7 +447,7 @@ manually:: And ``image-test.md`` would include:: - ![Alt Text](|filename|/images/han.jpg) + ![Alt Text]({filename}/images/han.jpg) Any content can be linked in this way. What happens is that the ``images`` directory gets copied to ``output/static/`` upon publishing. This is @@ -459,9 +459,15 @@ following to ``pelicanconf.py``:: And then the ``pdfs`` directory would also be copied to ``output/static/``. -You can also link to categories or tags, using the `|tag|tagname` and -`|category|foobar` syntax. +You can also link to categories or tags, using the `{tag}tagname` and +`{category}foobar` syntax. +For backward compatibility, Pelican also supports `|filename|an_article.rst` +or `|tag|tagname` or `|category|foobar`, i.e. the `filename`, `tag` +and `category` identifiers can be enclosed in bar `|` instead of braces `{}`. + +Using `{}` ensures that the syntax will not collide with markdown extensions or +reST directives. Importing an existing blog -------------------------- From 315f066398d967028f162aeb4e62a6003675affa Mon Sep 17 00:00:00 2001 From: Talha Mansoor Date: Thu, 29 Aug 2013 23:33:14 +0500 Subject: [PATCH 3/4] Add INTRASITE_LINK_REGEX to configuration that user can modify Updates getpelican/pelican#1061 --- pelican/contents.py | 8 +------- pelican/settings.py | 7 +++++++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/pelican/contents.py b/pelican/contents.py index 94790612..1f326b0d 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -182,13 +182,7 @@ class Content(object): if not content: return content - hrefs = re.compile(r""" - (?P<\s*[^\>]* # match tag with src and href attr - (?:href|src)\s*=) - - (?P["\']) # require value to be quoted - (?P[|{](?P.*?)[|}](?P.*?)) # the url value - \2""", re.X) + hrefs = re.compile(self.settings['INTRASITE_LINK_REGEX'], re.X) def replacer(m): what = m.group('what') diff --git a/pelican/settings.py b/pelican/settings.py index 1f2646f6..7b656960 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -110,6 +110,13 @@ DEFAULT_CONFIG = { 'TEMPLATE_PAGES': {}, 'IGNORE_FILES': ['.#*'], 'SLUG_SUBSTITUTIONS': (), + 'INTRASITE_LINK_REGEX': r""" + (?P<\s*[^\>]* # match tag with src and href attr + (?:href|src)\s*=) + + (?P["\']) # require value to be quoted + (?P[|{](?P.*?)[|}](?P.*?)) # the url value + \2""", } From c62fa3d8f1754c1ddb4ff138a19e93836c0d9712 Mon Sep 17 00:00:00 2001 From: Talha Mansoor Date: Fri, 30 Aug 2013 00:13:36 +0500 Subject: [PATCH 4/4] Update settings documentation to explain INTRASITE_LINK_REGEX Updates getpelican/pelican#1061 --- docs/settings.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/settings.rst b/docs/settings.rst index c709a339..97854d01 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -156,9 +156,11 @@ Setting name (default value) What doe `_ `WITH_FUTURE_DATES` (``True``) If disabled, content with dates in the future will get a default status of draft. +`INTRASITE_LINK_REGEX` (''[#]_) Regex to parse intra site links to files, images, category, tags etc ===================================================================== ===================================================================== .. [#] Default is the system locale. +.. [#] Default is ``'(?P<\s*[^\>]*(?:href|src)\s*=) (?P["\'])(?P[|{](?P.*?)[|}] (?P.*?))\2'`` URL settings