Add initial version of shape script
This commit is contained in:
parent
73fb9cc14b
commit
17984b91d8
3 changed files with 57 additions and 0 deletions
5
shape/.gitignore
vendored
Normal file
5
shape/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
# venv stuff
|
||||||
|
bin/
|
||||||
|
lib/
|
||||||
|
lib64
|
||||||
|
pyvenv.cfg
|
||||||
4
shape/README.md
Normal file
4
shape/README.md
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# Shape
|
||||||
|
|
||||||
|
A similar idea to [visualize](../visualize/), but converts text files to pngs
|
||||||
|
(with syntax highlighting support for various languages).
|
||||||
48
shape/shape.py
Normal file
48
shape/shape.py
Normal 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()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue