Add initial version of shape script

This commit is contained in:
Joscha 2019-05-05 09:29:34 +00:00
parent 73fb9cc14b
commit 17984b91d8
3 changed files with 57 additions and 0 deletions

48
shape/shape.py Normal file
View file

@ -0,0 +1,48 @@
import argparse
import PIL.Image
def convert_tabs(line, tabwidth):
result = []
for char in line:
if char == "\t":
result.append(" " * tabwidth)
else:
result.append(char)
return "".join(result)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("infile",
help="input source file")
parser.add_argument("outfile",
help="output image file (image format detected based on extension)")
parser.add_argument("--tabwidth", "-w", type=int, default=8,
help="the amount of spaces per tab")
parser.add_argument("--upscale", "-u", action="store_true",
help="increase the output image's size by 10")
args = parser.parse_args()
with open(args.infile) as f:
text = f.read()
lines = [convert_tabs(line, args.tabwidth) for line in text.splitlines()]
width = max(map(len, lines))
height = len(lines)
image = PIL.Image.new("RGB", (width, height), (255, 255, 255))
# Algorithm for drawing the "shape" of code, to be improved later
for y, line in enumerate(lines):
for x, char in enumerate(line):
if not char.isspace():
image.putpixel((x, y), (0, 0, 0))
if args.upscale:
image = image.resize((width * 10, height * 10),
resample=PIL.Image.NEAREST)
with open(args.outfile, "wb") as f:
image.save(f)
if __name__ == "__main__":
main()