browsh/webext/contrib/font_maker.py
Thomas Buckley-Houston 02bc0aad93 Hide/Show text using seperate font
Previously we were using CSS to make the text's colour transparent.
However that proved to cause a lot of problems with pre-existing
transition animations in the host webpage. There didn't seem to be
anyway to disable the transition time for text transitioning to
transparent, without also disabling all transitions.

Also added censorship to password input boxes.
2018-06-03 19:54:38 +08:00

61 lines
1.7 KiB
Python

# TODO:
# Look into using: https://github.com/adobe-fonts/adobe-blank
# It should both reduce the size of the font and support all possible UTF8 chars
import fontforge
def generate(name, block):
print("Generating " + name)
# TODO:
# This needs to reach 0x9FCF to complete the CJK Ideographs
# But above around 0x7f00, we get this error:
# `Internal Error: Attempt to output 81854 into a 16-bit field. It will be
# truncated and the file may not be useful.`
for i in range(0x0000, 0x7F00):
if i == codepoint: continue
glyph = blocks.createChar(i)
glyph.width = 600
glyph.addReference(block)
print(blocks[codepoint].foreground)
blocks.fontname = name
blocks.fullname = name
blocks.familyname = name
# Fontforge's WOFF output doesn't seem to work. No matter, this isn't for an actual
# remote production website. The font is served locally from the extension and doesn't
# even need to look good.
blocks.generate(name + '.ttf')
# A font with just the █ (0x2588) for all unicode characters
blocks = fontforge.font()
blocks.encoding = 'UnicodeFull'
codepoint = 0x2588
glyph = blocks.createChar(codepoint)
glyph.width = 600
pen = blocks[codepoint].glyphPen()
pen.moveTo((0, -200))
pen.lineTo((0, 800))
pen.lineTo((600, 800))
pen.lineTo((600, -200))
pen.closePath()
generate('BlockCharMono', blocks[codepoint].glyphname)
# A font with just the space character, used to hide all text
blocks = fontforge.font()
blocks.encoding = 'UnicodeFull'
codepoint = 0x2003
glyph = blocks.createChar(codepoint)
glyph.width = 600
pen = blocks[codepoint].glyphPen()
pen.moveTo((0, 0))
pen.lineTo((0, 0))
pen.closePath()
generate('BlankMono', blocks[codepoint].glyphname)