def interpolate(ufos, master_dir, out_dir, instance_data, debug=False):
    """Create MutatorMath designspace and generate instances.
    Returns instance UFOs, or unused instance data if debug is True.
    """
    from defcon import Font
    from mutatorMath.ufo import build

    designspace_path, instance_files = build_designspace(
        ufos, master_dir, out_dir, instance_data)

    print('>>> Building instances')
    for path, _ in instance_files:
        clean_ufo(path)
    build(designspace_path, outputUFOFormatVersion=3)

    instance_ufos = []
    for path, data in instance_files:
        ufo = Font(path)
        set_custom_params(ufo, data=data)
        set_redundant_data(ufo)
        ufo.save()
        instance_ufos.append(ufo)

    if debug:
        return clear_data(instance_data)
    return instance_ufos
Example #2
0
def interpolate(ufos, master_dir, out_dir, instance_data, debug=False):
    """Create MutatorMath designspace and generate instances.
    Returns instance UFOs, or unused instance data if debug is True.
    """
    from defcon import Font
    from mutatorMath.ufo import build

    designspace_path, instance_files = build_designspace(
        ufos, master_dir, out_dir, instance_data)

    print('>>> Building instances')
    for path, _ in instance_files:
        clean_ufo(path)
    build(designspace_path, outputUFOFormatVersion=3)

    instance_ufos = []
    for path, data in instance_files:
        ufo = Font(path)
        set_custom_params(ufo, data=data)
        set_redundant_data(ufo)
        ufo.save()
        instance_ufos.append(ufo)

    if debug:
        return clear_data(instance_data)
    return instance_ufos
Example #3
0
 def test_normalizes_curved_quotes_in_names(self):
     ufo = Font()
     data = {'customParameters': (
         {'name': '‘bad’', 'value': 1},
         {'name': '“also bad”', 'value': 2})}
     set_custom_params(ufo, data=data)
     self.assertIn(GLYPHS_PREFIX + "'bad'", ufo.lib)
     self.assertIn(GLYPHS_PREFIX + '"also bad"', ufo.lib)
Example #4
0
 def test_normalizes_curved_quotes_in_names(self):
     ufo = Font()
     data = {'customParameters': (
         {'name': '‘bad’', 'value': 1},
         {'name': '“also bad”', 'value': 2})}
     set_custom_params(ufo, data=data)
     self.assertIn(GLYPHS_PREFIX + "'bad'", ufo.lib)
     self.assertIn(GLYPHS_PREFIX + '"also bad"', ufo.lib)
Example #5
0
    def test_gasp_table(self):
        gasp_table = {'65535': '15', '20': '7', '8': '10'}
        set_custom_params(self.ufo, parsed=[('GASP Table', gasp_table)])

        ufo_range_records = self.ufo.info.openTypeGaspRangeRecords
        self.assertIsNotNone(ufo_range_records)
        self.assertEqual(len(ufo_range_records), 3)
        rec1, rec2, rec3 = ufo_range_records
        self.assertEqual(rec1['rangeMaxPPEM'], 8)
        self.assertEqual(rec1['rangeGaspBehavior'], [1, 3])
        self.assertEqual(rec2['rangeMaxPPEM'], 20)
        self.assertEqual(rec2['rangeGaspBehavior'], [0, 1, 2])
        self.assertEqual(rec3['rangeMaxPPEM'], 65535)
        self.assertEqual(rec3['rangeGaspBehavior'], [0, 1, 2, 3])
Example #6
0
    def test_parse_glyphs_filter(self, mock_parse_glyphs_filter):
        filter1 = (
            'Filter',
            'Transformations;OffsetX:40;OffsetY:60;include:uni0334,uni0335')
        filter2 = (
            'Filter',
            'Transformations;OffsetX:10;OffsetY:-10;exclude:uni0334,uni0335')
        set_custom_params(self.ufo, parsed=[filter1, filter2])

        self.assertEqual(mock_parse_glyphs_filter.call_count, 2)
        self.assertEqual(mock_parse_glyphs_filter.call_args_list[0],
                         mock.call(filter1[1]))
        self.assertEqual(mock_parse_glyphs_filter.call_args_list[1],
                         mock.call(filter2[1]))
Example #7
0
def apply_instance_data(instance_data):
    """Open instances, apply data, and re-save.

    Args:
        instance_data: List of (path, data) tuples, one for each instance.
        dst_ufo_list: List to add opened instances to.
    Returns:
        List of opened and updated instance UFOs.
    """
    from defcon import Font

    instance_ufos = []
    for path, data in instance_data:
        ufo = Font(path)
        set_custom_params(ufo, data=data)
        set_redundant_data(ufo)
        ufo.save()
        instance_ufos.append(ufo)
    return instance_ufos
Example #8
0
def apply_instance_data(instance_data):
    """Open instances, apply data, and re-save.

    Args:
        instance_data: List of (path, data) tuples, one for each instance.
        dst_ufo_list: List to add opened instances to.
    Returns:
        List of opened and updated instance UFOs.
    """
    from defcon import Font

    instance_ufos = []
    for path, data in instance_data:
        ufo = Font(path)
        set_custom_params(ufo, data=data)
        set_redundant_data(ufo)
        ufo.save()
        instance_ufos.append(ufo)
    return instance_ufos
Example #9
0
    def test_set_fsSelection_flags(self):
        self.assertEqual(self.ufo.info.openTypeOS2Selection, None)

        set_custom_params(self.ufo, parsed=[('Has WWS Names', False)])
        self.assertEqual(self.ufo.info.openTypeOS2Selection, None)

        set_custom_params(self.ufo, parsed=[('Use Typo Metrics', True)])
        self.assertEqual(self.ufo.info.openTypeOS2Selection, [7])

        self.ufo = Font()
        set_custom_params(self.ufo,
                          parsed=[('Has WWS Names', True),
                                  ('Use Typo Metrics', True)])
        self.assertEqual(self.ufo.info.openTypeOS2Selection, [8, 7])
Example #10
0
 def test_set_glyphOrder(self):
     set_custom_params(self.ufo, parsed=[('glyphOrder', ['A', 'B'])])
     self.assertEqual(self.ufo.lib[PUBLIC_PREFIX + 'glyphOrder'],
                      ['A', 'B'])
Example #11
0
    def test_underlineThickness(self):
        set_custom_params(self.ufo, parsed=[('underlineThickness', 100)])
        self.assertEqual(self.ufo.info.postscriptUnderlineThickness, 100)

        set_custom_params(self.ufo, parsed=[('underlineThickness', 0)])
        self.assertEqual(self.ufo.info.postscriptUnderlineThickness, 0)
Example #12
0
    def test_underlinePosition(self):
        set_custom_params(self.ufo, parsed=[('underlinePosition', -2)])
        self.assertEqual(self.ufo.info.postscriptUnderlinePosition, -2)

        set_custom_params(self.ufo, parsed=[('underlinePosition', 1)])
        self.assertEqual(self.ufo.info.postscriptUnderlinePosition, 1)
Example #13
0
 def test_set_openTypeOS2CodePageRanges(self):
     set_custom_params(self.ufo,
                       parsed=[('openTypeOS2CodePageRanges', [0, 1])])
     self.assertEqual(self.ufo.info.openTypeOS2CodePageRanges, [0, 1])