beremiz

Tests: fix project edit test sikuli IDE test.
wxPython4
2022-03-22, Edouard Tisserant
29dbdb09da2e
Tests: fix project edit test sikuli IDE test.

Background click based on bitmap matching doesn't work.
Grid dots are not good match candidates.
Rendering probably affected by virtual display's bpp or rasterizer approximations.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# This file is part of Beremiz
# Copyright (C) 2021: Edouard TISSERANT
#
# See COPYING file for copyrights details.
from __future__ import print_function
import sys
from base64 import b64encode
from fontTools import ttLib
# Inkscape seems to refer to font with different family name depending on platform.
# this are heuristics that would need extensive testing to be sure.
FamilyNameIDs = [1] if sys.platform.startswith('win') else [1, 16]
def GetFontTypeAndFamilyName(filename):
"""
Getting font family, format and MIME type
"""
familyname = None
uniquename = None
formatname = None
mimetype = None
font = ttLib.TTFont(filename)
# https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html
for name in font["name"].names:
#print(name.nameID, name.platformID, name.langID, name.toUnicode())
if name.nameID in FamilyNameIDs and name.platformID==3 and name.langID==1033:
familyname = name.toUnicode()
if name.nameID==4 and name.platformID==3 and name.langID==1033:
uniquename = name.toUnicode()
if font.flavor :
# woff and woff2
formatname = font.flavor
mimetype = "font/" + formatname
# conditions on sfntVersion was deduced from fontTools.ttLib.sfnt
elif font.sfntVersion in ("\x00\x01\x00\x00", "true"):
formatname = "truetype"
mimetype = "font/ttf"
elif font.sfntVersion == "OTTO":
formatname = "opentype"
mimetype = "font/otf"
return familyname,uniquename,formatname,mimetype
def DataURIFromFile(filename, mimetype):
with open(filename, "rb") as fp:
data = fp.read()
return "".join([
"data:",
mimetype,
";base64,",
b64encode(data).strip()])
def GetCSSFontFaceFromFontFile(filename):
familyname, uniquename, formatname, mimetype = GetFontTypeAndFamilyName(filename)
data_uri = DataURIFromFile(filename, mimetype)
css_font_face = \
"""
@font-face {{
font-family: "{}";
src: url("{}") format("{}")
}}
""".format(familyname, data_uri, formatname)
return css_font_face
# tests
if __name__ == '__main__':
print(GetCSSFontFaceFromFontFile("/usr/share/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf"))
print(GetCSSFontFaceFromFontFile("/usr/share/fonts/opentype/urw-base35/NimbusSans-Regular.otf"))
print(GetCSSFontFaceFromFontFile("/usr/share/yelp/mathjax/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Regular.woff"))