def extendMarkdown(self, md, md_globals):
        """
        Every extension requires a extendMarkdown method to tell the markdown
        renderer how use the extension.
        """
        md.registerExtension(self)

        for processor in (self.preprocessors or []):
            md.preprocessors.add(processor.__name__.lower(), processor(md), '_end')

        for pattern in (self.inlinepatterns or []):
            md.inlinePatterns.add(pattern.__name__.lower(), pattern(md), '_end')

        for processor in (self.postprocessors or []):
            md.postprocessors.add(processor.__name__.lower(), processor(md), '_end')
Every extension requires a extendMarkdown method to tell the markdown
        renderer how use the extension.