| 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 |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 Converter.__init__(self, *args, **kwargs) | 374 Converter.__init__(self, *args, **kwargs) |
| 375 | 375 |
| 376 filters = { | 376 filters = { |
| 377 'translate': self.translate, | 377 'translate': self.translate, |
| 378 'linkify': self.linkify, | 378 'linkify': self.linkify, |
| 379 'toclist': self.toclist, | 379 'toclist': self.toclist, |
| 380 } | 380 } |
| 381 | 381 |
| 382 globals = { | 382 globals = { |
| 383 'get_string': self.get_string, | 383 'get_string': self.get_string, |
| 384 'has_string': self.has_string, |
| 384 'get_page_content': self.get_page_content, | 385 'get_page_content': self.get_page_content, |
| 385 } | 386 } |
| 386 | 387 |
| 387 for dirname, dictionary in [('filters', filters), | 388 for dirname, dictionary in [('filters', filters), |
| 388 ('globals', globals)]: | 389 ('globals', globals)]: |
| 389 for filename in self._params['source'].list_files(dirname): | 390 for filename in self._params['source'].list_files(dirname): |
| 390 root, ext = os.path.splitext(filename) | 391 root, ext = os.path.splitext(filename) |
| 391 if ext.lower() != '.py': | 392 if ext.lower() != '.py': |
| 392 continue | 393 continue |
| 393 | 394 |
| 394 path = os.path.join(dirname, filename) | 395 path = os.path.join(dirname, filename) |
| 395 namespace = self._params['source'].exec_file(path) | 396 namespace = self._params['source'].exec_file(path) |
| 396 | 397 |
| 397 name = os.path.basename(root) | 398 name = os.path.basename(root) |
| 398 try: | 399 try: |
| 399 dictionary[name] = namespace[name] | 400 dictionary[name] = namespace[name] |
| 400 except KeyError: | 401 except KeyError: |
| 401 raise Exception('Expected symbol {} not found' | 402 raise Exception('Expected symbol {} not found' |
| 402 ' in {}'.format(name, path)) | 403 ' in {}'.format(name, path)) |
| 403 | 404 |
| 404 self._env = jinja2.Environment( | 405 self._env = jinja2.Environment( |
| 405 loader=SourceTemplateLoader(self._params['source']), | 406 loader=SourceTemplateLoader(self._params['source']), |
| 406 autoescape=True) | 407 autoescape=True) |
| 407 self._env.filters.update(filters) | 408 self._env.filters.update(filters) |
| 408 self._env.globals.update(globals) | 409 self._env.globals.update(globals) |
| 409 | 410 |
| 411 def _get_locale_data(self, page): |
| 412 return self._params['source'].read_locale(self._params['locale'], page) |
| 413 |
| 410 def get_html(self, source, filename): | 414 def get_html(self, source, filename): |
| 411 env = self._env | 415 env = self._env |
| 412 code = env.compile(source, None, filename) | 416 code = env.compile(source, None, filename) |
| 413 template = jinja2.Template.from_code(env, code, env.globals) | 417 template = jinja2.Template.from_code(env, code, env.globals) |
| 414 | 418 |
| 415 try: | 419 try: |
| 416 module = template.make_module(self._params) | 420 module = template.make_module(self._params) |
| 417 except Exception: | 421 except Exception: |
| 418 env.handle_exception() | 422 env.handle_exception() |
| 419 | 423 |
| 420 for key, value in module.__dict__.iteritems(): | 424 for key, value in module.__dict__.iteritems(): |
| 421 if not key.startswith('_'): | 425 if not key.startswith('_'): |
| 422 self._params[key] = value | 426 self._params[key] = value |
| 423 | 427 |
| 424 result = unicode(module) | 428 result = unicode(module) |
| 425 result = self.process_links(result) | 429 result = self.process_links(result) |
| 426 return result | 430 return result |
| 427 | 431 |
| 428 def translate(self, default, name, comment=None): | 432 def translate(self, default, name, comment=None): |
| 429 return jinja2.Markup(self.localize_string( | 433 return jinja2.Markup(self.localize_string( |
| 430 self._params['page'], name, default, comment, | 434 self._params['page'], name, default, comment, |
| 431 self._params['localedata'], html_escapes | 435 self._params['localedata'], html_escapes |
| 432 )) | 436 )) |
| 433 | 437 |
| 434 def get_string(self, name, page=None): | 438 def get_string(self, name, page=None): |
| 435 if page is None: | 439 if page is None: |
| 436 page = self._params['page'] | 440 page = self._params['page'] |
| 437 | 441 |
| 438 localedata = self._params['source'].read_locale(self._params['locale'], | 442 localedata = self._get_locale_data(page) |
| 439 page) | |
| 440 default = localedata[name] | 443 default = localedata[name] |
| 441 return jinja2.Markup(self.localize_string( | 444 return jinja2.Markup(self.localize_string( |
| 442 page, name, default, '', localedata, html_escapes | 445 page, name, default, '', localedata, html_escapes |
| 443 )) | 446 )) |
| 444 | 447 |
| 448 def has_string(self, name, page=None): |
| 449 if page is None: |
| 450 page = self._params['page'] |
| 451 |
| 452 localedata = self._get_locale_data(page) |
| 453 return name in localedata |
| 454 |
| 445 def get_page_content(self, page, locale=None): | 455 def get_page_content(self, page, locale=None): |
| 446 from cms.utils import get_page_params | 456 from cms.utils import get_page_params |
| 447 | 457 |
| 448 if locale is None: | 458 if locale is None: |
| 449 locale = self._params['locale'] | 459 locale = self._params['locale'] |
| 450 return get_page_params(self._params['source'], locale, page) | 460 return get_page_params(self._params['source'], locale, page) |
| 451 | 461 |
| 452 def linkify(self, page, locale=None, **attrs): | 462 def linkify(self, page, locale=None, **attrs): |
| 453 if locale is None: | 463 if locale is None: |
| 454 locale = self._params['locale'] | 464 locale = self._params['locale'] |
| (...skipping 24 matching lines...) Expand all Loading... |
| 479 stack.pop() | 489 stack.pop() |
| 480 stack[-1]['subitems'].append(item) | 490 stack[-1]['subitems'].append(item) |
| 481 stack.append(item) | 491 stack.append(item) |
| 482 return structured | 492 return structured |
| 483 | 493 |
| 484 converters = { | 494 converters = { |
| 485 'html': RawConverter, | 495 'html': RawConverter, |
| 486 'md': MarkdownConverter, | 496 'md': MarkdownConverter, |
| 487 'tmpl': TemplateConverter, | 497 'tmpl': TemplateConverter, |
| 488 } | 498 } |
| OLD | NEW |