tachibana/charmap_gen.ipynb
jaseg d49062bddb Basic passthrough working
... but super unstable. It looks as if pixel data gets subtly corrupted
when output over HDMI.

To-Do:
 * Check whether broken output persists on Windows and is not linux-only
 * Check whether output is still broken if software
   rendering/window compositing is used
 * Maybe check on an apple platform?
 * Research this behavior
2021-06-25 19:55:58 +02:00

181 lines
25 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 96,
"id": "median-landing",
"metadata": {},
"outputs": [],
"source": [
"import string\n",
"import contextlib\n",
"import itertools\n",
"\n",
"import bdfparser\n",
"from PIL import Image\n",
"import numpy as np\n",
"import jinja2"
]
},
{
"cell_type": "code",
"execution_count": 119,
"id": "italian-temperature",
"metadata": {},
"outputs": [],
"source": [
"class GlyphTableGenerator:\n",
" IS_PRINTABLE_TPL = '''\n",
"module gen_charmap_is_printable_{{font_id}}(input glyph[15:0], output reg is_printable) begin\n",
" always @(glyph) begin\n",
" case(glyph)\n",
" {% for glyph in glyphs %} 16'h{{ '{:04x}'.format(ord(glyph)) }}: is_printable <= 1;\n",
" {% endfor %} default: is_printable <= 0;\n",
" endcase\n",
" end\n",
"end\n",
"'''\n",
" \n",
" def __init__(self, font_id, bdf_file, glyph_w, glyph_h, chars=[chr(x) for x in range(128)]):\n",
" self.font_id = font_id\n",
" self.font = bdfparser.Font(bdf_file)\n",
" self.chars = chars # [ char for char in chars if ord(char) in font.glyphs ]\n",
" self.glyph_w, self.glyph_h = glyph_w, glyph_h\n",
" \n",
" self.glyphs = [ self.font.glyph(char).draw().crop(self.glyph_w, self.glyph_h)\n",
" if ord(char) in font.glyphs else bdfparser.Bitmap(['0'*glyph_w]*glyph_h)\n",
" for char in self.chars ]\n",
" self.glyphtable = bdfparser.Bitmap.concatall(self.glyphs, direction=0)\n",
" \n",
" def font_preview(self):\n",
" preview = self.font.drawall()\n",
" return Image.frombytes('1', (preview.width(), preview.height()), preview.tobytes('1'))\n",
"\n",
" def glyphtable_preview(self):\n",
" return Image.frombytes('1',\n",
" (self.glyphtable.width(), self.glyphtable.height()),\n",
" self.glyphtable.tobytes('1')).rotate(90, expand=True)\n",
"\n",
" def write_printable_table(self):\n",
" with open(f'src/gen/gen_charmap_is_printable_{self.font_id}.v', 'w') as f, contextlib.redirect_stdout(f):\n",
" print(jinja2.Environment().from_string(IS_PRINTABLE_TPL, globals=globals()).render(\n",
" font_id=self.font_id,\n",
" glyphs=self.chars,\n",
" ord=ord\n",
" ))\n",
"\n",
" def write_glyphtable_memory_init_file(self):\n",
" #for prefix in ('Artix-7-HDMI-processing.sim/sim_1/behav/xsim/', 'Artix-7-HDMI-processing.runs/synth_1/'):\n",
" with open(f'src/gen/gen_glyphtable_{self.font_id}.hex', 'w') as f, contextlib.redirect_stdout(f):\n",
" for row in np.array(self.glyphtable.todata(2)):\n",
" width = (len(row)+3)//4\n",
" print(format(int(''.join(str(b) for b in row), 2), 'x').zfill(width))\n",
"\n",
" def write_font_param_file(self):\n",
" with open(f'src/gen/gen_font_params_{self.font_id}.vh', 'w') as f, contextlib.redirect_stdout(f):\n",
" print(f'`define GEN_FONT_GLYPH_W_{self.font_id} {self.glyph_w}')\n",
" print(f'`define GEN_FONT_GLYPH_H_{self.font_id} {self.glyph_h}')\n",
" print(f'`define GEN_FONT_GLYPH_COUNT_{self.font_id} {len(self.chars)}')\n"
]
},
{
"cell_type": "code",
"execution_count": 120,
"id": "cheap-least",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<PIL.Image.Image image mode=1 size=512x352 at 0x7FCBB43F2FD0>"
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"default_glyphtable_gen = GlyphTableGenerator('default', 'terminus-font-4.49.1/ter-u16n.bdf', 8, 16)\n",
"\n",
"default_glyphtable_gen.write_printable_table()\n",
"default_glyphtable_gen.write_glyphtable_memory_init_file()\n",
"default_glyphtable_gen.write_font_param_file()\n",
"\n",
"default_glyphtable_gen.font_preview()"
]
},
{
"cell_type": "code",
"execution_count": 121,
"id": "comparative-master",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<PIL.Image.Image image mode=1 size=512x352 at 0x7FCBB4C95D90>"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bold_glyphtable_gen = GlyphTableGenerator('bold', 'terminus-font-4.49.1/ter-u16b.bdf', 8, 16)\n",
"\n",
"bold_glyphtable_gen.write_printable_table()\n",
"bold_glyphtable_gen.write_glyphtable_memory_init_file()\n",
"bold_glyphtable_gen.write_font_param_file()\n",
"\n",
"bold_glyphtable_gen.font_preview()"
]
},
{
"cell_type": "code",
"execution_count": 123,
"id": "driven-photographer",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAACAAAAAAIAQAAAABFYCKXAAAC7klEQVR4nOWUT27bRhTGf6QVwykKcBZdFMiCs8giuwrIMgvzCDlCTlDrBtINLPQC9g2aG5gsEMBZUbugMGSO7BQu0CYzhheRxD9fF5ScGE2BNs6uHwES7715783HefNF4v+N+PX0a5RpJkuLU+gtffJeWMLbcGkLU1nZUy7tItvmwFsWw4W5tL8fX2cuOK5sYcDhAqEwhVnYCxbfXwRvHYX9hcLMZjNOw8fG0JrWdq4w7cSxGrQGoAnQmta0trWruKE5JqzMipVdz1aDZpN/DFB53RuHypP3vvz5Ku3t9UknqZNU6szLz/3c+/Hcz/2vmvvzSpK8r8ed5npzcK65r7yvKl/p3LeS8tRX8l4aV/5clT+v5r6SfLev6mb/RmdeUil5qZbWvu6fgzPV72pJpzttJdWqtYmoPqi9vPbluxO9W/nKS628pNia+5//iGcjeMzNDFy4zuJ8G3lMTGEjYA+ABxPAAOwF0CR6zmYegunoAHAhne052EOT3oHr10RT3MP8G2JcYFSYANy2+ojwdB05wmc2OoUohwiA3yxA/F/J/h3Fc4CfvlsNxRQTdAzrjBkwe0jEDy6awKCnYADWs/Vs4KDLopd3a0XAwloGOcSbS4Qlh4UBUA6RiYA2T53j7g94YABe2wFRXtj+MmzxagggCxBNdoaFaWcBiF34UuJb7L+c8mr6459/vPiWEdGLYLpsN+cJMNzJoskeZDExYGAEsDvcfRLn0Nj+RO4idRBNYDsRwATSABpF2YdMIZos7AfA9qFbPAoAT11fZeeWWQw8c8AocsqA7JHbD/SDdXp4fw2Q6vF7/6bsNhrQaasBKl0qXZVXR924qEJa6SJdbNbUY+8vVXmX5IlL8yTffCUd5UmeePW2S/Pk8qhSnhZSVZY3qg6lUlsNUJonTdqkTVqr6fNv8kSqtUyadBk16TJpfK1lupT8qlymddnv80QSX4O+JF1/oZq69J8iefKpVd36yn9ZeZl8xnenWynpL8gRenmHTEe6AAAAAElFTkSuQmCC\n",
"text/plain": [
"<PIL.Image.Image image mode=1 size=2048x8 at 0x7FCB9DE2DC70>"
]
},
"execution_count": 123,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"default_glyphtable_gen.glyphtable_preview()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}