# HG changeset patch # User Steve Losh # Date 1291992138 18000 # Node ID 8341feacc8f98996eb71b657043839910680fa2f # Parent edd3e758a0c82ae512f26e9d8650e32ace224b21 vim: I hate vimballs THIS much diff -r edd3e758a0c8 -r 8341feacc8f9 vim/castrate.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vim/castrate.py Fri Dec 10 09:42:18 2010 -0500 @@ -0,0 +1,41 @@ +#!/usr/bin/python +# Original source: http://forrst.com/posts/An_unball_script_for_vimball_plugins-CHM + +import os, sys + +if len(sys.argv) < 2: + raise SystemExit('usage: python castrate.py annoying.vba bundle/annoying') + +infile = sys.argv[1] + +vba_dir = os.path.splitext(infile)[0] +if len(sys.argv) > 2: + vba_dir = sys.argv[2] + +if os.path.exists(vba_dir): + raise SystemExit('The location ' + vba_dir + ' already exists. ' + 'Please delete/move it or give a different folder to extract into.') + +lines = open(infile).read().splitlines() +vbasize = len(lines) +i = 0 + +while i < vbasize: + line = lines[i] + if line.endswith('\t[[[1'): + path = line.rstrip('\t[[[1').replace('\\', '/') + size = int(lines[i + 1]) + content = '\n'.join(lines[i + 2 : i + 2 + size]) + relpath = os.path.join(vba_dir, path) + dirname = os.path.dirname(relpath) + if not os.path.exists(dirname): + os.makedirs(dirname) + open(relpath, 'w').write(content) + print 'wrote', path + i += 2 + size + else: + i += 1 + +print 'Unballed', infile, 'into', vba_dir +print 'And hence the world rests in peace' +