| OLD | NEW | 
|    1 # This file is part of the Adblock Plus web scripts, |    1 # This file is part of the Adblock Plus web scripts, | 
|    2 # Copyright (C) 2006-2017 eyeo GmbH |    2 # Copyright (C) 2006-2017 eyeo GmbH | 
|    3 # |    3 # | 
|    4 # Adblock Plus is free software: you can redistribute it and/or modify |    4 # Adblock Plus is free software: you can redistribute it and/or modify | 
|    5 # it under the terms of the GNU General Public License version 3 as |    5 # it under the terms of the GNU General Public License version 3 as | 
|    6 # published by the Free Software Foundation. |    6 # published by the Free Software Foundation. | 
|    7 # |    7 # | 
|    8 # Adblock Plus is distributed in the hope that it will be useful, |    8 # Adblock Plus is distributed in the hope that it will be useful, | 
|    9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |    9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|   10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |   10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|   11 # GNU General Public License for more details. |   11 # GNU General Public License for more details. | 
|   12 # |   12 # | 
|   13 # You should have received a copy of the GNU General Public License |   13 # You should have received a copy of the GNU General Public License | 
|   14 # along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. |   14 # along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
|   15  |   15  | 
|   16 from __future__ import unicode_literals |   16 from __future__ import unicode_literals | 
|   17  |   17  | 
|   18 import os |   18 import os | 
|   19 import HTMLParser |   19 import HTMLParser | 
|   20 import re |   20 import re | 
 |   21 import urlparse | 
|   21  |   22  | 
|   22 import jinja2 |   23 import jinja2 | 
|   23 import markdown |   24 import markdown | 
|   24  |   25  | 
|   25  |   26  | 
|   26 # Monkey-patch Markdown's isBlockLevel function to ensure that no paragraphs |   27 # Monkey-patch Markdown's isBlockLevel function to ensure that no paragraphs | 
|   27 # are inserted into the <head> tag |   28 # are inserted into the <head> tag | 
|   28 orig_isBlockLevel = markdown.util.isBlockLevel |   29 orig_isBlockLevel = markdown.util.isBlockLevel | 
|   29  |   30  | 
|   30  |   31  | 
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  389             'translate': self.translate, |  390             'translate': self.translate, | 
|  390             'linkify': self.linkify, |  391             'linkify': self.linkify, | 
|  391             'toclist': self.toclist, |  392             'toclist': self.toclist, | 
|  392         } |  393         } | 
|  393  |  394  | 
|  394         globals = { |  395         globals = { | 
|  395             'get_string': self.get_string, |  396             'get_string': self.get_string, | 
|  396             'has_string': self.has_string, |  397             'has_string': self.has_string, | 
|  397             'get_page_content': self.get_page_content, |  398             'get_page_content': self.get_page_content, | 
|  398             'get_pages_metadata': self.get_pages_metadata, |  399             'get_pages_metadata': self.get_pages_metadata, | 
 |  400             'get_page_url': self.get_page_url, | 
|  399         } |  401         } | 
|  400  |  402  | 
|  401         for dirname, dictionary in [('filters', filters), |  403         for dirname, dictionary in [('filters', filters), | 
|  402                                     ('globals', globals)]: |  404                                     ('globals', globals)]: | 
|  403             for filename in self._params['source'].list_files(dirname): |  405             for filename in self._params['source'].list_files(dirname): | 
|  404                 root, ext = os.path.splitext(filename) |  406                 root, ext = os.path.splitext(filename) | 
|  405                 if ext.lower() != '.py': |  407                 if ext.lower() != '.py': | 
|  406                     continue |  408                     continue | 
|  407  |  409  | 
|  408                 path = os.path.join(dirname, filename) |  410                 path = os.path.join(dirname, filename) | 
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  510             if isinstance(metadata[filter_name], list): |  512             if isinstance(metadata[filter_name], list): | 
|  511                 if isinstance(filter_value, basestring): |  513                 if isinstance(filter_value, basestring): | 
|  512                     filter_value = [filter_value] |  514                     filter_value = [filter_value] | 
|  513                 for option in filter_value: |  515                 for option in filter_value: | 
|  514                     if str(option) not in metadata[filter_name]: |  516                     if str(option) not in metadata[filter_name]: | 
|  515                         return False |  517                         return False | 
|  516             elif filter_value != metadata[filter_name]: |  518             elif filter_value != metadata[filter_name]: | 
|  517                     return False |  519                     return False | 
|  518         return True |  520         return True | 
|  519  |  521  | 
 |  522     def get_page_url(self, page, locale='default'): | 
 |  523         """Return URL of `page` in given `locale` | 
 |  524  | 
 |  525         By default current locale will be used. When `locale` is set to `None`, | 
 |  526         the canonical URL for the page (with no locale component) will be | 
 |  527         returned. | 
 |  528         """ | 
 |  529         try: | 
 |  530             base_url = self._params['site_url'] | 
 |  531         except KeyError: | 
 |  532             raise Exception('You must configure siteurl to use `get_page_url`') | 
 |  533  | 
 |  534         if locale == 'default': | 
 |  535             locale = self._params['locale'] | 
 |  536         if locale is not None: | 
 |  537             base_url = urlparse.urljoin(base_url, locale + '/') | 
 |  538  | 
 |  539         return urlparse.urljoin(base_url, page) | 
 |  540  | 
|  520     def toclist(self, content): |  541     def toclist(self, content): | 
|  521         toc_re = r'<h(\d)\s[^<>]*\bid="([^<>"]+)"[^<>]*>(.*?)</h\1>' |  542         toc_re = r'<h(\d)\s[^<>]*\bid="([^<>"]+)"[^<>]*>(.*?)</h\1>' | 
|  522         flat = [] |  543         flat = [] | 
|  523         for match in re.finditer(toc_re, content, re.S): |  544         for match in re.finditer(toc_re, content, re.S): | 
|  524             flat.append({ |  545             flat.append({ | 
|  525                 'level': int(match.group(1)), |  546                 'level': int(match.group(1)), | 
|  526                 'anchor': jinja2.Markup(match.group(2)).unescape(), |  547                 'anchor': jinja2.Markup(match.group(2)).unescape(), | 
|  527                 'title': jinja2.Markup(match.group(3)).unescape(), |  548                 'title': jinja2.Markup(match.group(3)).unescape(), | 
|  528                 'subitems': [], |  549                 'subitems': [], | 
|  529             }) |  550             }) | 
|  530  |  551  | 
|  531         structured = [] |  552         structured = [] | 
|  532         stack = [{'level': 0, 'subitems': structured}] |  553         stack = [{'level': 0, 'subitems': structured}] | 
|  533         for item in flat: |  554         for item in flat: | 
|  534             while stack[-1]['level'] >= item['level']: |  555             while stack[-1]['level'] >= item['level']: | 
|  535                 stack.pop() |  556                 stack.pop() | 
|  536             stack[-1]['subitems'].append(item) |  557             stack[-1]['subitems'].append(item) | 
|  537             stack.append(item) |  558             stack.append(item) | 
|  538         return structured |  559         return structured | 
|  539  |  560  | 
|  540 converters = { |  561 converters = { | 
|  541     'html': RawConverter, |  562     'html': RawConverter, | 
|  542     'md': MarkdownConverter, |  563     'md': MarkdownConverter, | 
|  543     'tmpl': TemplateConverter, |  564     'tmpl': TemplateConverter, | 
|  544 } |  565 } | 
| OLD | NEW |