Skip to content

Instantly share code, notes, and snippets.

@erikvanzijst
Last active September 1, 2019 16:51
Show Gist options
  • Save erikvanzijst/50b74403c8a2465201c41968dd26081b to your computer and use it in GitHub Desktop.
Save erikvanzijst/50b74403c8a2465201c41968dd26081b to your computer and use it in GitHub Desktop.
Linux console fonts to Python
#!/usr/bin/env python3
#
# Compiles a text string into the binary format used by the circuit from
# https://www.youtube.com/watch?v=7vDrLuH4eWA
import sys
from itertools import islice
# Generated with psf2python.py
charset = {'�': ['-######-', '##----##', '#--##--#', '####--##', '###--###',
'########', '###--###', '-######-', '--------'],
'π': ['--------', '--------', '-#######', '###--##-', '-##--##-',
'-##--##-', '##----##', '--------', '--------'],
'≠': ['----##--', '---##---', '######--', '--##----', '######--',
'-##-----', '##------', '--------', '--------'],
'≤': ['---##---', '--##----', '-##-----', '--##----', '---##---',
'--------', '-#####--', '--------', '--------'],
'≥': ['-##-----', '--##----', '---##---', '--##----', '-##-----',
'--------', '#####---', '--------', '--------'],
'■': ['--------', '--------', '--####--', '--####--', '--####--',
'--####--', '--------', '--------', '--------'],
'◆': ['---#----', '--###---', '-#####--', '#######-', '-#####--',
'--###---', '---#----', '--------', '--------'],
'¼': ['##----##', '##---##-', '##--##--', '##-##---', '--##-##-',
'-##-###-', '##-#-##-', '#-######', '-----##-'],
'½': ['##----##', '##---##-', '##--##--', '##-##---', '--##-##-',
'-##-#-##', '##---##-', '#---##--', '----####'],
'¾': ['###----#', '--##--##', '-##--##-', '--##-#--', '###-#-#-',
'--##-##-', '-##-#-#-', '##-#####', '#-----#-'],
'¦': ['---##---', '---##---', '---##---', '---##---', '--------',
'---##---', '---##---', '---##---', '---##---'],
'¨': ['-##-##--', '--------', '--------', '--------', '--------',
'--------', '--------', '--------', '--------'],
'¸': ['--------', '--------', '--------', '--------', '--------',
'--------', '----##--', '-####---', '--------'],
'ƒ': ['----###-', '---##-##', '---##---', '--####--', '---##---',
'---##---', '##-##---', '-###----', '--------'],
'†': ['---##---', '---##---', '-######-', '---##---', '---##---',
'---##---', '---##---', '--------', '--------'],
'‡': ['---##---', '---##---', '-######-', '---##---', '-######-',
'---##---', '---##---', '--------', '--------'],
'‰': ['--------', '##--##--', '##-##---', '--##----', '-##-----',
'##-##-##', '#--##-##', '--------', '--------'],
'™': ['####---#', '-#-##-##', '-#-#-#-#', '-#-#---#', '--------',
'--------', '--------', '--------', '--------'],
'…': ['--------', '--------', '--------', '--------', '--------',
'##-##-##', '##-##-##', '--------', '--------'],
'‹': ['--------', '----##--', '---##---', '--##----', '---##---',
'----##--', '--------', '--------', '--------'],
'›': ['--------', '--##----', '---##---', '----##--', '---##---',
'--##----', '--------', '--------', '--------'],
'“': ['##--##--', '##--##--', '-##--##-', '--------', '--------',
'--------', '--------', '--------', '--------'],
'”': ['-##--##-', '-##--##-', '##--##--', '--------', '--------',
'--------', '--------', '--------', '--------'],
'„': ['--------', '--------', '--------', '--------', '--------',
'-##--##-', '-##--##-', '##--##--', '--------'],
'⹂': ['--------', '--------', '--------', '--------', '--------',
'##--##--', '##--##--', '-##--##-', '--------'],
'⹁': ['--------', '--------', '--------', '--------', '--------',
'---##---', '---##---', '----##--', '--------'],
'Ğ': ['##---##-', '-#####--', '-######-', '##------', '##--###-',
'##---##-', '-######-', '--------', '--------'],
'ğ': ['##---##-', '-#####--', '--------', '-###-##-', '##--##--',
'-#####--', '----##--', '#####---', '--------'],
'İ': ['--##----', '--------', '-####---', '--##----', '--##----',
'--##----', '-####---', '--------', '--------'],
'ı': ['--------', '--------', '-###----', '--##----', '--##----',
'--##----', '-####---', '--------', '--------'],
'Ş': ['-####---', '##---#--', '-###----', '--###---', '#---##--',
'-####---', '----##--', '-####---', '--------'],
'ş': ['--------', '-#####--', '##------', '-####---', '----##--',
'#####---', '----##--', '-####---', '--------'],
' ': ['--------', '--------', '--------', '--------', '--------',
'--------', '--------', '--------', '--------'],
'!': ['--##----', '-####---', '-####---', '--##----', '--##----',
'--------', '--##----', '--------', '--------'],
'"': ['-##-##--', '-##-##--', '--#-#---', '--------', '--------',
'--------', '--------', '--------', '--------'],
'#': ['-##-##--', '-##-##--', '#######-', '-##-##--', '#######-',
'-##-##--', '-##-##--', '--------', '--------'],
'$': ['---#----', '-#####--', '##-#----', '-#####--', '---#-##-',
'-#####--', '---#----', '--------', '--------'],
'%': ['--------', '##---##-', '##--##--', '---##---', '--##----',
'-##--##-', '##---##-', '--------', '--------'],
'&': ['--###---', '-##-##--', '--###---', '-###-##-', '##-###--',
'##--##--', '-###-##-', '--------', '--------'],
"'": ['---##---', '---##---', '--##----', '--------', '--------',
'--------', '--------', '--------', '--------'],
'(': ['---##---', '--##----', '-##-----', '-##-----', '-##-----',
'--##----', '---##---', '--------', '--------'],
')': ['-##-----', '--##----', '---##---', '---##---', '---##---',
'--##----', '-##-----', '--------', '--------'],
'*': ['--------', '-##-##--', '--###---', '#######-', '--###---',
'-##-##--', '--------', '--------', '--------'],
'+': ['--------', '--##----', '--##----', '######--', '--##----',
'--##----', '--------', '--------', '--------'],
',': ['--------', '--------', '--------', '--------', '--------',
'---##---', '---##---', '--##----', '--------'],
'-': ['--------', '--------', '--------', '######--', '--------',
'--------', '--------', '--------', '--------'],
'.': ['--------', '--------', '--------', '--------', '--------',
'--##----', '--##----', '--------', '--------'],
'/': ['-----##-', '----##--', '---##---', '--##----', '-##-----',
'##------', '#-------', '--------', '--------'],
'0': ['-#####--', '##---##-', '##---##-', '##-#-##-', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'1': ['--##----', '-###----', '--##----', '--##----', '--##----',
'--##----', '######--', '--------', '--------'],
'2': ['-####---', '##--##--', '----##--', '--###---', '-##-----',
'##--##--', '######--', '--------', '--------'],
'3': ['-####---', '##--##--', '----##--', '--###---', '----##--',
'##--##--', '-####---', '--------', '--------'],
'4': ['---###--', '--####--', '-##-##--', '##--##--', '#######-',
'----##--', '---####-', '--------', '--------'],
'5': ['######--', '##------', '#####---', '----##--', '----##--',
'##--##--', '-####---', '--------', '--------'],
'6': ['--###---', '-##-----', '##------', '#####---', '##--##--',
'##--##--', '-####---', '--------', '--------'],
'7': ['######--', '##--##--', '----##--', '---##---', '--##----',
'--##----', '--##----', '--------', '--------'],
'8': ['-####---', '##--##--', '##--##--', '-####---', '##--##--',
'##--##--', '-####---', '--------', '--------'],
'9': ['-####---', '##--##--', '##--##--', '-#####--', '----##--',
'---##---', '-###----', '--------', '--------'],
':': ['--------', '--##----', '--##----', '--------', '--------',
'--##----', '--##----', '--------', '--------'],
';': ['--------', '--##----', '--##----', '--------', '--------',
'--##----', '--##----', '-##-----', '--------'],
'<': ['---##---', '--##----', '-##-----', '##------', '-##-----',
'--##----', '---##---', '--------', '--------'],
'=': ['--------', '--------', '######--', '--------', '######--',
'--------', '--------', '--------', '--------'],
'>': ['-##-----', '--##----', '---##---', '----##--', '---##---',
'--##----', '-##-----', '--------', '--------'],
'?': ['-####---', '##--##--', '----##--', '---##---', '--##----',
'--------', '--##----', '--------', '--------'],
'@': ['-#####--', '##---##-', '##-####-', '##-####-', '##-###--',
'##------', '-####---', '--------', '--------'],
'A': ['--###---', '-##-##--', '##---##-', '##---##-', '#######-',
'##---##-', '##---##-', '--------', '--------'],
'B': ['######--', '-##--##-', '-##--##-', '-#####--', '-##--##-',
'-##--##-', '######--', '--------', '--------'],
'C': ['--####--', '-##--##-', '##------', '##------', '##------',
'-##--##-', '--####--', '--------', '--------'],
'D': ['#####---', '-##-##--', '-##--##-', '-##--##-', '-##--##-',
'-##-##--', '#####---', '--------', '--------'],
'E': ['#######-', '-##---#-', '-##-#---', '-####---', '-##-#---',
'-##---#-', '#######-', '--------', '--------'],
'F': ['#######-', '-##---#-', '-##-#---', '-####---', '-##-#---',
'-##-----', '####----', '--------', '--------'],
'G': ['--####--', '-##--##-', '##------', '##------', '##--###-',
'-##--##-', '--#####-', '--------', '--------'],
'H': ['##---##-', '##---##-', '##---##-', '#######-', '##---##-',
'##---##-', '##---##-', '--------', '--------'],
'I': ['-####---', '--##----', '--##----', '--##----', '--##----',
'--##----', '-####---', '--------', '--------'],
'J': ['---####-', '----##--', '----##--', '----##--', '##--##--',
'##--##--', '-####---', '--------', '--------'],
'K': ['###--##-', '-##--##-', '-##-##--', '-####---', '-##-##--',
'-##--##-', '###--##-', '--------', '--------'],
'L': ['####----', '-##-----', '-##-----', '-##-----', '-##---#-',
'-##--##-', '#######-', '--------', '--------'],
'M': ['##---##-', '###-###-', '#######-', '#######-', '##-#-##-',
'##---##-', '##---##-', '--------', '--------'],
'N': ['##---##-', '###--##-', '####-##-', '##-####-', '##--###-',
'##---##-', '##---##-', '--------', '--------'],
'O': ['-#####--', '##---##-', '##---##-', '##---##-', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'P': ['######--', '-##--##-', '-##--##-', '-#####--', '-##-----',
'-##-----', '####----', '--------', '--------'],
'Q': ['-#####--', '##---##-', '##---##-', '##---##-', '##---##-',
'##--###-', '-#####--', '----###-', '--------'],
'R': ['######--', '-##--##-', '-##--##-', '-#####--', '-##-##--',
'-##--##-', '###--##-', '--------', '--------'],
'S': ['-####---', '##--##--', '###-----', '-####---', '---###--',
'##--##--', '-####---', '--------', '--------'],
'T': ['######--', '#-##-#--', '--##----', '--##----', '--##----',
'--##----', '-####---', '--------', '--------'],
'U': ['##---##-', '##---##-', '##---##-', '##---##-', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'V': ['##---##-', '##---##-', '##---##-', '##---##-', '##---##-',
'-##-##--', '--###---', '--------', '--------'],
'W': ['##---##-', '##---##-', '##---##-', '##-#-##-', '##-#-##-',
'#######-', '-##-##--', '--------', '--------'],
'X': ['##---##-', '##---##-', '-##-##--', '--###---', '-##-##--',
'##---##-', '##---##-', '--------', '--------'],
'Y': ['##--##--', '##--##--', '##--##--', '-####---', '--##----',
'--##----', '-####---', '--------', '--------'],
'Z': ['#######-', '##--##--', '#--##---', '--##----', '-##---#-',
'##---##-', '#######-', '--------', '--------'],
'[': ['-####---', '-##-----', '-##-----', '-##-----', '-##-----',
'-##-----', '-####---', '--------', '--------'],
'\\': ['##------', '-##-----', '--##----', '---##---', '----##--',
'-----##-', '------#-', '--------', '--------'],
']': ['-####---', '---##---', '---##---', '---##---', '---##---',
'---##---', '-####---', '--------', '--------'],
'^': ['---#----', '--###---', '-##-##--', '##---##-', '--------',
'--------', '--------', '--------', '--------'],
'_': ['--------', '--------', '--------', '--------', '--------',
'--------', '--------', '#######-', '--------'],
'`': ['--##----', '--##----', '---##---', '--------', '--------',
'--------', '--------', '--------', '--------'],
'a': ['--------', '--------', '-####---', '----##--', '-#####--',
'##--##--', '-###-##-', '--------', '--------'],
'b': ['###-----', '-##-----', '-##-----', '-#####--', '-##--##-',
'-##--##-', '##-###--', '--------', '--------'],
'c': ['--------', '--------', '-####---', '##--##--', '##------',
'##--##--', '-####---', '--------', '--------'],
'd': ['---###--', '----##--', '----##--', '-#####--', '##--##--',
'##--##--', '-###-##-', '--------', '--------'],
'e': ['--------', '--------', '-####---', '##--##--', '######--',
'##------', '-####---', '--------', '--------'],
'f': ['--###---', '-##-##--', '-##-----', '####----', '-##-----',
'-##-----', '####----', '--------', '--------'],
'g': ['--------', '--------', '-###-##-', '##--##--', '##--##--',
'-#####--', '----##--', '#####---', '--------'],
'h': ['###-----', '-##-----', '-##-##--', '-###-##-', '-##--##-',
'-##--##-', '###--##-', '--------', '--------'],
'i': ['--##----', '--------', '-###----', '--##----', '--##----',
'--##----', '-####---', '--------', '--------'],
'j': ['----##--', '--------', '---###--', '----##--', '----##--',
'##--##--', '##--##--', '-####---', '--------'],
'k': ['###-----', '-##-----', '-##--##-', '-##-##--', '-####---',
'-##-##--', '###--##-', '--------', '--------'],
'l': ['-###----', '--##----', '--##----', '--##----', '--##----',
'--##----', '-####---', '--------', '--------'],
'm': ['--------', '--------', '###-##--', '#######-', '##-#-##-',
'##-#-##-', '##-#-##-', '--------', '--------'],
'n': ['--------', '--------', '##-###--', '-##--##-', '-##--##-',
'-##--##-', '-##--##-', '--------', '--------'],
'o': ['--------', '--------', '-####---', '##--##--', '##--##--',
'##--##--', '-####---', '--------', '--------'],
'p': ['--------', '--------', '##-###--', '-##--##-', '-##--##-',
'-#####--', '-##-----', '####----', '--------'],
'q': ['--------', '--------', '-###-##-', '##--##--', '##--##--',
'-#####--', '----##--', '---####-', '--------'],
'r': ['--------', '--------', '##-###--', '-###-##-', '-##-----',
'-##-----', '####----', '--------', '--------'],
's': ['--------', '--------', '-#####--', '##------', '-####---',
'----##--', '#####---', '--------', '--------'],
't': ['---#----', '--##----', '######--', '--##----', '--##----',
'--##-##-', '---###--', '--------', '--------'],
'u': ['--------', '--------', '##--##--', '##--##--', '##--##--',
'##--##--', '-###-##-', '--------', '--------'],
'v': ['--------', '--------', '##---##-', '##---##-', '##---##-',
'-##-##--', '--###---', '--------', '--------'],
'w': ['--------', '--------', '##---##-', '##-#-##-', '##-#-##-',
'#######-', '-##-##--', '--------', '--------'],
'x': ['--------', '--------', '##---##-', '-##-##--', '--###---',
'-##-##--', '##---##-', '--------', '--------'],
'y': ['--------', '--------', '##--##--', '##--##--', '##--##--',
'-#####--', '----##--', '#####---', '--------'],
'z': ['--------', '--------', '######--', '#--##---', '--##----',
'-##--#--', '######--', '--------', '--------'],
'{': ['---###--', '--##----', '--##----', '###-----', '--##----',
'--##----', '---###--', '--------', '--------'],
'|': ['---##---', '---##---', '---##---', '---##---', '---##---',
'---##---', '---##---', '---##---', '--------'],
'}': ['###-----', '--##----', '--##----', '---###--', '--##----',
'--##----', '###-----', '--------', '--------'],
'~': ['-###-##-', '##-###--', '--------', '--------', '--------',
'--------', '--------', '--------', '--------'],
'•': ['--------', '--------', '---##---', '--####--', '--####--',
'---##---', '--------', '--------', '--------'],
'À': ['##------', '-##-----', '---###--', '--##-##-', '-##---##',
'-#######', '-##---##', '--------', '--------'],
'Á': ['------##', '-----##-', '--###---', '-##-##--', '##---##-',
'#######-', '##---##-', '--------', '--------'],
'Â': ['---#----', '--#-#---', '--------', '-#####--', '##---##-',
'#######-', '##---##-', '--------', '--------'],
'Ã': ['-###-##-', '##-###--', '--------', '-#####--', '##---##-',
'#######-', '##---##-', '--------', '--------'],
'Ä': ['-##-##--', '--------', '--###---', '-##-##--', '##---##-',
'#######-', '##---##-', '--------', '--------'],
'Å': ['--###---', '-##-##--', '--###---', '-##-##--', '##---##-',
'#######-', '##---##-', '--------', '--------'],
'Æ': ['--######', '-##-##-#', '##--##--', '########', '##--##--',
'##--##-#', '##--####', '--------', '--------'],
'Ç': ['--####--', '-##--##-', '##------', '##------', '-##--##-',
'--####--', '-----##-', '--####--', '--------'],
'È': ['-##-----', '--##----', '#######-', '-##---#-', '-####---',
'-##---#-', '#######-', '--------', '--------'],
'É': ['----##--', '---##---', '#######-', '-##---#-', '-####---',
'-##---#-', '#######-', '--------', '--------'],
'Ê': ['---#----', '--#-#---', '#######-', '-##---#-', '-####---',
'-##---#-', '#######-', '--------', '--------'],
'Ë': ['-##-##--', '--------', '#######-', '-##---#-', '-####---',
'-##---#-', '#######-', '--------', '--------'],
'Ì': ['-##-----', '--##----', '--------', '-####---', '--##----',
'--##----', '-####---', '--------', '--------'],
'Í': ['---##---', '--##----', '--------', '-####---', '--##----',
'--##----', '-####---', '--------', '--------'],
'Î': ['--#-----', '-#-#----', '--------', '-####---', '--##----',
'--##----', '-####---', '--------', '--------'],
'Ï': ['##--##--', '--------', '-####---', '--##----', '--##----',
'--##----', '-####---', '--------', '--------'],
'Ð': ['#####---', '-##-##--', '-##--##-', '####-##-', '-##--##-',
'-##-##--', '#####---', '--------', '--------'],
'Ñ': ['-###-##-', '##-###--', '--------', '###--##-', '####-##-',
'##-####-', '##--###-', '--------', '--------'],
'Ò': ['-##-----', '--##----', '--------', '-#####--', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'Ó': ['----##--', '---##---', '--------', '-#####--', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'Ô': ['---#----', '--#-#---', '--------', '-#####--', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'Õ': ['-###-##-', '##-###--', '--------', '-#####--', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'Ö': ['-##-##--', '--------', '-#####--', '##---##-', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'×': ['--------', '--------', '-##-##--', '--###---', '-##-##--',
'--------', '--------', '--------', '--------'],
'Ø': ['--####-#', '-##--###', '-##-###-', '-######-', '-###-##-',
'###--##-', '#-####--', '--------', '--------'],
'Ù': ['-##-----', '--##----', '--------', '##---##-', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'Ú': ['----##--', '---##---', '--------', '##---##-', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'Û': ['---#----', '--#-#---', '--------', '##---##-', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'Ü': ['-##-##--', '--------', '##---##-', '##---##-', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'Ý': ['---##---', '--##----', '##--##--', '##--##--', '-####---',
'--##----', '-####---', '--------', '--------'],
'Þ': ['####----', '-##-----', '-#####--', '-##--##-', '-#####--',
'-##-----', '####----', '--------', '--------'],
'ß': ['-####---', '##--##--', '##--##--', '##-##---', '##--##--',
'##---##-', '##--##--', '--------', '--------'],
'▒': ['#-#-#-#-', '-#-#-#-#', '#-#-#-#-', '-#-#-#-#', '#-#-#-#-',
'-#-#-#-#', '#-#-#-#-', '-#-#-#-#', '#-#-#-#-'],
'¡': ['--##----', '--------', '--##----', '--##----', '-####---',
'-####---', '--##----', '--------', '--------'],
'¢': ['--------', '---#----', '-#####--', '##-#-##-', '##-#----',
'##-#-##-', '-#####--', '---#----', '--------'],
'£': ['--###---', '-##-##--', '-##--#--', '####----', '-##-----',
'-##--##-', '######--', '--------', '--------'],
'€': ['---####-', '--##---#', '######--', '-##-----', '#####---',
'--##--##', '---####-', '--------', '--------'],
'¥': ['##--##--', '##--##--', '-####---', '######--', '--##----',
'######--', '--##----', '--------', '--------'],
'Š': ['--#-#---', '---#----', '-#####--', '##------', '-####---',
'----##--', '#####---', '--------', '--------'],
'§': ['--#####-', '-##----#', '--####--', '-##--##-', '-##--##-',
'--####--', '#----##-', '-#####--', '--------'],
'š': ['--#-#---', '---#----', '-#####--', '##------', '-####---',
'----##--', '#####---', '--------', '--------'],
'©': ['--####--', '-#----#-', '#--##--#', '#-#----#', '#-#----#',
'#--##--#', '-#----#-', '--####--', '--------'],
'ª': ['--####--', '-##-##--', '-##-##--', '--#####-', '--------',
'-######-', '--------', '--------', '--------'],
'«': ['--------', '--##--##', '-##--##-', '##--##--', '-##--##-',
'--##--##', '--------', '--------', '--------'],
'¬': ['--------', '--------', '--------', '######--', '----##--',
'----##--', '--------', '--------', '--------'],
'¤': ['--------', '-##--##-', '--####--', '-##--##-', '-##--##-',
'--####--', '-##--##-', '--------', '--------'],
'®': ['--####--', '-#----#-', '#-###--#', '#-#--#-#', '#-###--#',
'#-#--#-#', '-#----#-', '--####--', '--------'],
'¯': ['-#####--', '--------', '--------', '--------', '--------',
'--------', '--------', '--------', '--------'],
'°': ['--###---', '-##-##--', '-##-##--', '--###---', '--------',
'--------', '--------', '--------', '--------'],
'±': ['--##----', '--##----', '######--', '--##----', '--##----',
'--------', '######--', '--------', '--------'],
'²': ['--###---', '-##-##--', '---##---', '--##----', '-#####--',
'--------', '--------', '--------', '--------'],
'³': ['-####---', '----##--', '--###---', '----##--', '-####---',
'--------', '--------', '--------', '--------'],
'Ž': ['-#-#----', '--#-----', '######--', '#--##---', '--##----',
'-##--#--', '######--', '--------', '--------'],
'µ': ['--------', '--------', '-##--##-', '-##--##-', '-##--##-',
'-##--##-', '-####-##', '##------', '--------'],
'¶': ['-#######', '##-##-##', '##-##-##', '-####-##', '---##-##',
'---##-##', '---##-##', '--------', '--------'],
'·': ['--------', '--------', '--------', '--##----', '--##----',
'--------', '--------', '--------', '--------'],
'ž': ['-#-#----', '--#-----', '######--', '#--##---', '--##----',
'-##--#--', '######--', '--------', '--------'],
'¹': ['---##---', '--###---', '---##---', '---##---', '--####--',
'--------', '--------', '--------', '--------'],
'º': ['--###---', '-##-##--', '-##-##--', '--###---', '--------',
'-#####--', '--------', '--------', '--------'],
'»': ['--------', '##--##--', '-##--##-', '--##--##', '-##--##-',
'##--##--', '--------', '--------', '--------'],
'Œ': ['-#######', '##--##-#', '##--##--', '##--####', '##--##--',
'##--##-#', '-#######', '--------', '--------'],
'œ': ['--------', '--------', '-######-', '##-##-##', '##-####-',
'##-##---', '-######-', '--------', '--------'],
'Ÿ': ['##--##--', '--------', '##--##--', '##--##--', '-####---',
'--##----', '-####---', '--------', '--------'],
'¿': ['--##----', '--------', '--##----', '-##-----', '##------',
'##--##--', '-####---', '--------', '--------'],
'─': ['--------', '--------', '--------', '--------', '########',
'--------', '--------', '--------', '--------'],
'│': ['---##---', '---##---', '---##---', '---##---', '---##---',
'---##---', '---##---', '---##---', '---##---'],
'┌': ['--------', '--------', '--------', '--------', '---#####',
'---##---', '---##---', '---##---', '---##---'],
'┐': ['--------', '--------', '--------', '--------', '#####---',
'---##---', '---##---', '---##---', '---##---'],
'└': ['---##---', '---##---', '---##---', '---##---', '---#####',
'--------', '--------', '--------', '--------'],
'┘': ['---##---', '---##---', '---##---', '---##---', '#####---',
'--------', '--------', '--------', '--------'],
'├': ['---##---', '---##---', '---##---', '---##---', '---#####',
'---##---', '---##---', '---##---', '---##---'],
'┤': ['---##---', '---##---', '---##---', '---##---', '#####---',
'---##---', '---##---', '---##---', '---##---'],
'┬': ['--------', '--------', '--------', '--------', '########',
'---##---', '---##---', '---##---', '---##---'],
'┴': ['---##---', '---##---', '---##---', '---##---', '########',
'--------', '--------', '--------', '--------'],
'┼': ['---##---', '---##---', '---##---', '---##---', '########',
'---##---', '---##---', '---##---', '---##---'],
'░': ['#---#---', '--#---#-', '#---#---', '--#---#-', '#---#---',
'--#---#-', '#---#---', '--#---#-', '#---#---'],
'⎺': ['########', '--------', '--------', '--------', '--------',
'--------', '--------', '--------', '--------'],
'⎻': ['--------', '--------', '########', '--------', '--------',
'--------', '--------', '--------', '--------'],
'⎼': ['--------', '--------', '--------', '--------', '--------',
'--------', '########', '--------', '--------'],
'⎽': ['--------', '--------', '--------', '--------', '--------',
'--------', '--------', '--------', '########'],
'═': ['--------', '--------', '--------', '########', '--------',
'########', '--------', '--------', '--------'],
'║': ['--##-##-', '--##-##-', '--##-##-', '--##-##-', '--##-##-',
'--##-##-', '--##-##-', '--##-##-', '--##-##-'],
'╔': ['--------', '--------', '--------', '--######', '--##----',
'--##-###', '--##-##-', '--##-##-', '--##-##-'],
'╗': ['--------', '--------', '--------', '#######-', '-----##-',
'####-##-', '--##-##-', '--##-##-', '--##-##-'],
'╚': ['--##-##-', '--##-##-', '--##-##-', '--##-###', '--##----',
'--######', '--------', '--------', '--------'],
'╝': ['--##-##-', '--##-##-', '--##-##-', '####-##-', '-----##-',
'#######-', '--------', '--------', '--------'],
'╠': ['--##-##-', '--##-##-', '--##-##-', '--##-###', '--##----',
'--##-###', '--##-##-', '--##-##-', '--##-##-'],
'╣': ['--##-##-', '--##-##-', '--##-##-', '####-##-', '-----##-',
'####-##-', '--##-##-', '--##-##-', '--##-##-'],
'╦': ['--------', '--------', '--------', '########', '--------',
'####-###', '--##-##-', '--##-##-', '--##-##-'],
'╩': ['--##-##-', '--##-##-', '--##-##-', '####-###', '--------',
'########', '--------', '--------', '--------'],
'╬': ['--##-##-', '--##-##-', '--##-##-', '####-###', '--------',
'####-###', '--##-##-', '--##-##-', '--##-##-'],
'█': ['########', '########', '########', '########', '########',
'########', '########', '########', '########'],
'↑': ['---##---', '--####--', '-######-', '---##---', '---##---',
'---##---', '---##---', '--------', '--------'],
'↓': ['---##---', '---##---', '---##---', '---##---', '-######-',
'--####--', '---##---', '--------', '--------'],
'←': ['--------', '---##---', '--##----', '-#######', '--##----',
'---##---', '--------', '--------', '--------'],
'→': ['--------', '---##---', '----##--', '#######-', '----##--',
'---##---', '--------', '--------', '--------'],
'à': ['-##-----', '--##----', '-####---', '----##--', '-#####--',
'##--##--', '-###-##-', '--------', '--------'],
'á': ['---##---', '--##----', '-####---', '----##--', '-#####--',
'##--##--', '-###-##-', '--------', '--------'],
'â': ['---#----', '--#-#---', '-####---', '----##--', '-#####--',
'##--##--', '-###-##-', '--------', '--------'],
'ã': ['-###-##-', '##-###--', '-####---', '----##--', '-#####--',
'##--##--', '-###-##-', '--------', '--------'],
'ä': ['-##-##--', '--------', '-####---', '----##--', '-#####--',
'##--##--', '-###-##-', '--------', '--------'],
'å': ['--###---', '-##-##--', '--###---', '----##--', '-#####--',
'##--##--', '-###-##-', '--------', '--------'],
'æ': ['--------', '--------', '-######-', '---##-##', '-######-',
'##-##---', '-##-###-', '--------', '--------'],
'ç': ['--------', '-####---', '##--##--', '##------', '##--##--',
'-####---', '----##--', '-####---', '--------'],
'è': ['-##-----', '--##----', '-####---', '##--##--', '######--',
'##------', '-####---', '--------', '--------'],
'é': ['---##---', '--##----', '-####---', '##--##--', '######--',
'##------', '-####---', '--------', '--------'],
'ê': ['---#----', '--#-#---', '-####---', '##--##--', '######--',
'##------', '-####---', '--------', '--------'],
'ë': ['-##-##--', '--------', '-####---', '##--##--', '######--',
'##------', '-####---', '--------', '--------'],
'ì': ['-##-----', '--##----', '--------', '-###----', '--##----',
'--##----', '-####---', '--------', '--------'],
'í': ['---##---', '--##----', '--------', '-###----', '--##----',
'--##----', '-####---', '--------', '--------'],
'î': ['--#-----', '-#-#----', '--------', '-###----', '--##----',
'--##----', '-####---', '--------', '--------'],
'ï': ['##-##---', '--------', '-###----', '--##----', '--##----',
'--##----', '-####---', '--------', '--------'],
'ð': ['--##-#--', '---##---', '--#-##--', '-#####--', '##--##--',
'##--##--', '-####---', '--------', '--------'],
'ñ': ['-###-##-', '##-###--', '--------', '##-###--', '-##--##-',
'-##--##-', '-##--##-', '--------', '--------'],
'ò': ['-##-----', '--##----', '--------', '-#####--', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'ó': ['----##--', '---##---', '--------', '-#####--', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'ô': ['---#----', '--#-#---', '--------', '-#####--', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'õ': ['-###-##-', '##-###--', '--------', '-#####--', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'ö': ['--------', '-##-##--', '--------', '-#####--', '##---##-',
'##---##-', '-#####--', '--------', '--------'],
'÷': ['--##----', '--##----', '--------', '######--', '--------',
'--##----', '--##----', '--------', '--------'],
'ø': ['--------', '--####-#', '-##--##-', '-##-###-', '-###-##-',
'-##--##-', '#-####--', '--------', '--------'],
'ù': ['-##-----', '--##----', '--------', '##--##--', '##--##--',
'##--##--', '-###-##-', '--------', '--------'],
'ú': ['---##---', '--##----', '--------', '##--##--', '##--##--',
'##--##--', '-###-##-', '--------', '--------'],
'û': ['--#-----', '-#-#----', '--------', '##--##--', '##--##--',
'##--##--', '-###-##-', '--------', '--------'],
'ü': ['##--##--', '--------', '##--##--', '##--##--', '##--##--',
'##--##--', '-###-##-', '--------', '--------'],
'ý': ['---##---', '--##----', '##--##--', '##--##--', '##--##--',
'-#####--', '----##--', '#####---', '--------'],
'þ': ['###-----', '-##-----', '-#####--', '-##--##-', '-##--##-',
'-#####--', '-##-----', '####----', '--------'],
'ÿ': ['##--##--', '--------', '##--##--', '##--##--', '##--##--',
'-#####--', '----##--', '#####---', '--------']}
def to_bytes(char: str) -> bytes:
"""Returns the byte sequence for the specified unicode character."""
ba = bytearray(8)
for i, line in enumerate(islice(charset[char], 8)):
for j in range(8):
ba[j] |= (({'-': 0, '#': 1}[line[j]]) << i)
return bytes(ba)
for l in ('Hello World! -- ' * 5).splitlines():
for c in l.replace('\n', ' '):
sys.stdout.buffer.write(to_bytes(c))
#!/usr/bin/env python3
#
# Loads ASCII rendering of the Linux 8x9 console font extracted through
# psftools and builds a Python dict mapping unicode character to 8x9 ASCII
# pattern.
#
# * https://www.zap.org.au/software/fonts/console-fonts-zap/#download
# * https://www.seasip.info/Unix/PSF/
#
# $ psf2txt zap-vga09.psf > zap-vga09.txt
import re
from itertools import islice
it = iter(open('zap-vga09.txt'))
charset = {}
while True:
line = next(it, None)
if line is None:
break
elif line.startswith('// Character'):
data = [re.match(r'.*([-#]{8}).*', ll).group(1) for ll in islice(it, 9)]
code = re.match(r'Unicode: \[\w{4}(\w{4})\];', next(it)).group(1)
name = eval("u'\\u%04x'" % int(code, 16))
charset[name] = data
print(charset)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment