Skip to content

Instantly share code, notes, and snippets.

@jdevera
Created July 22, 2011 15:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jdevera/1099639 to your computer and use it in GitHub Desktop.
Save jdevera/1099639 to your computer and use it in GitHub Desktop.
An Unball script for vimballs
#!/usr/bin/python
#-*- coding:utf-8 -*-
import os, sys
if len(sys.argv) < 2:
raise SystemExit('Please specify a vba file (and optionally the directory to unball it to)')
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'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment