Taken from http://forrst.com/posts/An_unball_script_for_vimball_plugins-CHM
python unball.py some-plugin.vba
Taken from http://forrst.com/posts/An_unball_script_for_vimball_plugins-CHM
python unball.py some-plugin.vba
| #!/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' |