Skip to content

Instantly share code, notes, and snippets.

@elmiko
Created February 28, 2013 18:11
Show Gist options
  • Save elmiko/5058823 to your computer and use it in GitHub Desktop.
Save elmiko/5058823 to your computer and use it in GitHub Desktop.

Revisions

  1. elmiko created this gist Feb 28, 2013.
    46 changes: 46 additions & 0 deletions mdcodestrip.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,46 @@
    #!/usr/bin/env python
    import argparse
    import markdown
    import os.path
    from bs4 import BeautifulSoup


    def read_code_from_file(mdfile):
    """returns a string of the code sections in the Markdown file"""
    origfilepos = mdfile.tell()
    mdfile.seek(0)
    html = markdown.markdown(mdfile.read())
    soup = BeautifulSoup(html)
    codestring = ''
    for codeblock in soup.find_all('code'):
    if len(codestring) > 0:
    codestring += '\n'
    codestring += codeblock.text
    mdfile.seek(origfilepos)
    return codestring


    def write_file_from_code(originalfilename, extension, code):
    """write a new file of source code"""
    basename = os.path.basename(originalfilename)
    dirname = os.path.dirname(originalfilename)
    newname = basename.split('.')[0] + '.' + extension
    newfile = open(os.path.join(dirname, newname), 'w')
    newfile.write(code)
    newfile.close()


    if __name__ == '__main__':
    parser = argparse.ArgumentParser(
    description='Strip the code segments from a Markdown file.')
    parser.add_argument(
    'files', metavar='F', type=file, nargs='+',
    help='a markdown file to strip')
    parser.add_argument(
    '--ext', dest='extension', required=True,
    help='the extension to use for stripped files')

    args = parser.parse_args()
    for mdfile in args.files:
    code = read_code_from_file(mdfile)
    write_file_from_code(mdfile.name, args.extension, code)