mathvariant = entry.get("mathvariant") baseChar = parseCodePoint(entry.get("baseChar")) transformedChar = parseCodePoint(entry.get("transformedChar")) if mathvariant not in mathvariantTransforms: mathvariantTransforms[mathvariant] = {} mathvariantTransforms[mathvariant][baseChar] = transformedChar # There is no "isolated" mathvariant. del mathvariantTransforms["isolated"] # Create a WOFF font for each mathvariant. for mathvariant in mathvariantTransforms: font = mathfont.create("mathvariant-%s" % mathvariant) for baseChar in mathvariantTransforms[mathvariant]: if baseChar not in font: mathfont.createGlyphFromValue(font, baseChar) transformedChar = mathvariantTransforms[mathvariant][baseChar] mathfont.createGlyphFromValue(font, transformedChar) mathfont.save(font) # Create a test font for each mathvariant. for mathvariant in mathvariantTransforms: print("Generating test for %s..." % mathvariant, end="") reftest = open("../relations/css-styling/mathvariant-%s.html" % mathvariant, "w") reftestReference = open("../relations/css-styling/mathvariant-%s-ref.html" % mathvariant, "w") source = '\ <!DOCTYPE html>\n\ <html>\n\ <head>\n\ <meta charset="utf-8"/>\n\ <title>mathvariant %s</title>\n'
# There is no "isolated" mathvariant. del mathvariantTransforms["isolated"] # Automatic mathvariant uses the same transform as italic. # It is handled specially (see below). mathvariantTransforms["auto"] = mathvariantTransforms["italic"] # Create a WOFF font for each mathvariant. for mathvariant in mathvariantTransforms: if mathvariant == "auto": continue font = mathfont.create("mathvariant-%s" % mathvariant, "Copyright (c) 2016 MathML Association") for baseChar in mathvariantTransforms[mathvariant]: if baseChar not in font: mathfont.createGlyphFromValue(font, baseChar) transformedChar = mathvariantTransforms[mathvariant][baseChar] mathfont.createGlyphFromValue(font, transformedChar) mathfont.save(font) # Create a MathML and CSS test for each mathvariant. for mathvariant in mathvariantTransforms: print("Generating tests for %s..." % mathvariant, end="") reftest = open( "../relations/css-styling/mathvariant-%s.html" % mathvariant, "w") reftestReference = open( "../relations/css-styling/mathvariant-%s-ref.html" % mathvariant, "w") CSSreftest = open( "../../css/css-text/text-transform/math/text-transform-math-%s-001.tentative.html" % mathvariant, "w") CSSreftestReference = open(
# Convert the Python structure into JSON jsonFileName = "../relations/css-styling/mathvariant-transforms.json" print("Generating %s..." % jsonFileName, end="") jsonFile = open(jsonFileName, "w") jsonFile.write(json.dumps(mathvariantTransforms,sort_keys=True, indent=4)) jsonFile.close() print(" done.") # Encode each transformed font = mathfont.create("mathvariant-transforms") transformedCharIndex = 1 # Index of the transformedChar. numberOfBits = 11 # Number of bits to encode transformedCharIndex. glyphWidth = 2 * mathfont.em # width of the mathvariant glyphs rectangleWidth = glyphWidth / numberOfBits assert rectangleWidth > 100 for mathvariant in mathvariantTransforms: for baseChar in mathvariantTransforms[mathvariant]: if baseChar not in font: g = font.createChar(baseChar) mathfont.drawRectangleGlyph(g, glyphWidth, mathfont.em, 0) transformedChar = mathvariantTransforms[mathvariant][baseChar] mathfont.createGlyphFromValue(font, transformedChar, glyphWidth, transformedCharIndex, numberOfBits) transformedCharIndex += 1 mathfont.save(font)