You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.3 KiB

  1. # Forked from https://github.com/daGrevis/mdx_linkify/blob/master/mdx_linkify/mdx_linkify.py
  2. # Added linker_options.setdefault("callbacks", []) so that rel=nofollow isn't automatically added.
  3. from bleach.linkifier import Linker
  4. from markdown.postprocessors import Postprocessor
  5. from markdown.extensions import Extension
  6. class LinkifyExtension(Extension):
  7. def __init__(self, **kwargs):
  8. self.config = {
  9. 'linker_options': [{}, 'Options for bleach.linkifier.Linker'],
  10. }
  11. super(LinkifyExtension, self).__init__(**kwargs)
  12. def extendMarkdown(self, md):
  13. md.postprocessors.register(
  14. LinkifyPostprocessor(
  15. md,
  16. self.getConfig('linker_options'),
  17. ),
  18. "linkify",
  19. 50,
  20. )
  21. class LinkifyPostprocessor(Postprocessor):
  22. def __init__(self, md, linker_options):
  23. super(LinkifyPostprocessor, self).__init__(md)
  24. linker_options.setdefault("skip_tags", ["code"])
  25. linker_options.setdefault("callbacks", [])
  26. self._linker_options = linker_options
  27. def run(self, text):
  28. linker = Linker(**self._linker_options)
  29. return linker.linkify(text)
  30. def makeExtension(*args, **kwargs):
  31. return LinkifyExtension(*args, **kwargs)
  32. makeExtension()