Exemple #1
0
 def test_blend_round_trip(self):
     ttx_path = self.getpath('TestSparseCFF2VF.ttx')
     ttf_font = TTFont(recalcBBoxes=False, recalcTimestamp=False)
     ttf_font.importXML(ttx_path)
     fontGlyphList = ttf_font.getGlyphOrder()
     topDict = ttf_font['CFF2'].cff.topDictIndex[0]
     charstrings = topDict.CharStrings
     for glyphName in fontGlyphList:
         cs = charstrings[glyphName]
         cs.decompile()
         cmds = programToCommands(cs.program, getNumRegions=cs.getNumRegions)
         cmds_g = generalizeCommands(cmds)
         cmds = specializeCommands(cmds_g, generalizeFirst=False)
         program = commandsToProgram(cmds)
         self.assertEqual(program, cs.program)
         program = specializeProgram(program, getNumRegions=cs.getNumRegions)
         self.assertEqual(program, cs.program)
         program_g = generalizeProgram(program, getNumRegions=cs.getNumRegions)
         program = commandsToProgram(cmds_g)
         self.assertEqual(program, program_g)
Exemple #2
0
 def test_blend_round_trip(self):
     ttx_path = self.getpath('TestSparseCFF2VF.ttx')
     ttf_font = TTFont(recalcBBoxes=False, recalcTimestamp=False)
     ttf_font.importXML(ttx_path)
     fontGlyphList = ttf_font.getGlyphOrder()
     topDict = ttf_font['CFF2'].cff.topDictIndex[0]
     charstrings = topDict.CharStrings
     for glyphName in fontGlyphList:
         cs = charstrings[glyphName]
         cs.decompile()
         cmds = programToCommands(cs.program,
                                  getNumRegions=cs.getNumRegions)
         cmds_g = generalizeCommands(cmds)
         cmds = specializeCommands(cmds_g, generalizeFirst=False)
         program = commandsToProgram(cmds)
         self.assertEqual(program, cs.program)
         program = specializeProgram(program,
                                     getNumRegions=cs.getNumRegions)
         self.assertEqual(program, cs.program)
         program_g = generalizeProgram(program,
                                       getNumRegions=cs.getNumRegions)
         program = commandsToProgram(cmds_g)
         self.assertEqual(program, program_g)
Exemple #3
0
 def test_blend_programToCommands(self):
     ttx_path = self.getpath('TestCFF2Widths.ttx')
     ttf_font = TTFont(recalcBBoxes=False, recalcTimestamp=False)
     ttf_font.importXML(ttx_path)
     fontGlyphList = ttf_font.getGlyphOrder()
     topDict = ttf_font['CFF2'].cff.topDictIndex[0]
     charstrings = topDict.CharStrings
     for glyphName in fontGlyphList:
         cs = charstrings[glyphName]
         cs.decompile()
         cmds = programToCommands(cs.program,
                                  getNumRegions=cs.getNumRegions)
         program = commandsToProgram(cmds)
         self.assertEqual(program, cs.program)
Exemple #4
0
	def getCharString(
					self, private=None, globalSubrs=None,
					var_model=None, optimize=True):
		commands = self._commands
		commands = self.reorder_blend_args(commands, partial (var_model.getDeltas, round=self.round))
		if optimize:
			commands = specializeCommands(
						commands, generalizeFirst=False,
						maxstack=maxStackLimit)
		program = commandsToProgram(commands)
		charString = T2CharString(
						program=program, private=private,
						globalSubrs=globalSubrs)
		return charString
Exemple #5
0
 def test_blend_round_trip(self):
     otfvf_path = self.get_test_input('TestSparseCFF2VF.otf')
     ttf_font = TTFont(otfvf_path)
     fontGlyphList = ttf_font.getGlyphOrder()
     topDict = ttf_font['CFF2'].cff.topDictIndex[0]
     charstrings = topDict.CharStrings
     for glyphName in fontGlyphList:
         print(glyphName)
         cs = charstrings[glyphName]
         cs.decompile()
         cmds = programToCommands(cs.program,
                                  getNumRegions=cs.getNumRegions)
         cmds_g = generalizeCommands(cmds)
         cmds = specializeCommands(cmds_g, generalizeFirst=False)
         program = commandsToProgram(cmds)
         self.assertEqual(program, cs.program)
         program = specializeProgram(program,
                                     getNumRegions=cs.getNumRegions)
         self.assertEqual(program, cs.program)
         program_g = generalizeProgram(program,
                                       getNumRegions=cs.getNumRegions)
         program = commandsToProgram(cmds_g)
         self.assertEqual(program, program_g)
Exemple #6
0
	def getCharString(
					self, private=None, globalSubrs=None,
					var_model=None, optimize=True):
		commands = self._commands
		commands = self.reorder_blend_args(commands, var_model.getDeltas,
											self.roundNumber)
		if optimize:
			commands = specializeCommands(
						commands, generalizeFirst=False,
						maxstack=maxStackLimit)
		program = commandsToProgram(commands)
		charString = T2CharString(
						program=program, private=private,
						globalSubrs=globalSubrs)
		return charString
 def getCharString(self, private=None, globalSubrs=None, optimize=True):
     commands = self._commands
     if optimize:
         maxstack = 48 if not self._CFF2 else 513
         commands = specializeCommands(commands,
                                       generalizeFirst=False,
                                       maxstack=maxstack)
     program = commandsToProgram(commands)
     if self._width is not None:
         assert not self._CFF2, "CFF2 does not allow encoding glyph width in CharString."
         program.insert(0, otRound(self._width))
     if not self._CFF2:
         program.append('endchar')
     charString = T2CharString(
         program=program, private=private, globalSubrs=globalSubrs)
     return charString
Exemple #8
0
    def getCharStrings(self,
                       num_masters,
                       private=None,
                       globalSubrs=None,
                       default_idx=0):
        """ A command looks like:
        [op_name, [
            [source 0 arglist for op],
            [source 1 arglist for op],
            ...
            [source n arglist for op],
        I am not optimizing this there, as that will be done when
        the CFF2 Charstring is created in fontTools.varLib.build().

        If I did, I would have to rearrange the arguments to:
        [
        [arg 0 for source 0 ... arg 0 for source n]
        [arg 1 for source 0 ... arg 1 for source n]
        ...
        [arg M for source 0 ... arg M for source n]
        ]
        before calling specialize.
        """
        t2List = []
        merged_commands = self._commands
        for i in range(num_masters):
            commands = []
            for op in merged_commands:
                source_op = [op[0], op[1][i]]
                commands.append(source_op)
            program = commandsToProgram(commands)
            if self._width is not None:
                assert not self._CFF2, (
                    "CFF2 does not allow encoding glyph width in CharString.")
                program.insert(0, otRound(self._width))
            if not self._CFF2:
                program.append('endchar')
            charString = T2CharString(program=program,
                                      private=private,
                                      globalSubrs=globalSubrs)
            t2List.append(charString)
        # if default_idx is not 0, we need to move it to the right index.
        if default_idx:
            default_font_cs = t2List.pop(0)
            t2List.insert(default_idx, default_font_cs)
        return t2List