docs: def md2pypi(filename):
      '''
      Load .md (markdown) file and sanitize it for PyPI.
      Remove unsupported github tags:
       - code-block directive
       - travis ci build badges
      '''
      content = io.open(filename).read()
  
      for match in RE_MD_CODE_BLOCK.finditer(content):
          rst_block = '\n'.join(
              ['.. code-block:: {language}'.format(**match.groupdict()).replace('markdown', ''), ''] +
              ['    {0}'.format(l) for l in match.group('lines').split('\n')] +
              ['']
          )
          content = content.replace(match.group(0), rst_block)
  
      refs = dict(RE_LINK_REF.findall(content))
      content = RE_LINK_REF.sub('.. _\g<key>: \g<url>', content)
      content = RE_SELF_LINK.sub('`\g<1>`_', content)
      content = RE_LINK_TO_URL.sub('`\g<text> <\g<url>>`_', content)
  
      for match in RE_BADGE.finditer(content):
          params = match.groupdict()
          params['badge'] = refs[match.group('badge')]
          params['target'] = refs[match.group('target')]
          content = content.replace(match.group(0), RST_BADGE.format(**params))
  
      for match in RE_IMAGE.finditer(content):
          url = match.group('url')
          if not url.startswith('http'):
              url = '/'.join((GITHUB_REPOSITORY, 'raw/master', url))
  
          rst_block = '\n'.join([
              '.. image:: {0}'.format(url),
              '  :alt: {0}'.format(match.group('text'))
          ])
          content = content.replace(match.group(0), rst_block)
  
      # Must occur after badges
      for match in RE_LINK_TO_REF.finditer(content):
          content = content.replace(match.group(0), '`{text} <{url}>`_'.format(
              text=match.group('text'),
              url=refs[match.group('ref')]
          ))
  
      for match in RE_TITLE.finditer(content):
          underchar = RST_TITLE_LEVELS[len(match.group('level')) - 1]
          title = match.group('title')
          underline = underchar * len(title)
  
          full_title = '\n'.join((title, underline))
          content = content.replace(match.group(0), full_title)
  
      content = RE_CODE.sub('``\g<1>``', content)
  
      return content