예제 #1
0
    def test_useProductionNames(self):
        for value in (True, False):
            glyphs_param = ("Don't use Production Names", value)
            set_custom_params(self.ufo, parsed=[glyphs_param])

            self.assertIn(UFO2FT_USE_PROD_NAMES_KEY, self.ufo.lib)
            self.assertEqual(self.ufo.lib[UFO2FT_USE_PROD_NAMES_KEY],
                             not value)
예제 #2
0
 def test_normalizes_curved_quotes_in_names(self):
     master = GSFontMaster()
     master.customParameters = [
         GSCustomParameter(name='‘bad’', value=1),
         GSCustomParameter(name='“also bad”', value=2)
     ]
     set_custom_params(self.ufo, data=master)
     self.assertIn(GLYPHS_PREFIX + "'bad'", self.ufo.lib)
     self.assertIn(GLYPHS_PREFIX + '"also bad"', self.ufo.lib)
예제 #3
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])
예제 #4
0
    def test_parse_glyphs_filter(self, mock_parse_glyphs_filter):
        filter1 = ('PreFilter', 'AddExtremes')
        filter2 = (
            'Filter',
            'Transformations;OffsetX:40;OffsetY:60;include:uni0334,uni0335')
        filter3 = (
            'Filter',
            'Transformations;OffsetX:10;OffsetY:-10;exclude:uni0334,uni0335')
        set_custom_params(self.ufo, parsed=[filter1, filter2, filter3])

        self.assertEqual(mock_parse_glyphs_filter.call_count, 3)
        self.assertEqual(mock_parse_glyphs_filter.call_args_list[0],
                         mock.call(filter1[1], is_pre=True))
        self.assertEqual(mock_parse_glyphs_filter.call_args_list[1],
                         mock.call(filter2[1], is_pre=False))
        self.assertEqual(mock_parse_glyphs_filter.call_args_list[2],
                         mock.call(filter3[1], is_pre=False))
예제 #5
0
    def test_replace_feature(self):
        self.ufo.features.text = dedent("""
            feature liga {
            # only the first match is replaced
            sub f i by fi;
            } liga;

            feature calt {
            sub e' t' c by ampersand;
            } calt;

            feature liga {
            sub f l by fl;
            } liga;
        """)

        repl = "liga; sub f f by ff;"

        set_custom_params(self.ufo, parsed=[("Replace Feature", repl)])

        self.assertEqual(
            self.ufo.features.text,
            dedent("""
            feature liga {
            sub f f by ff;
            } liga;

            feature calt {
            sub e' t' c by ampersand;
            } calt;

            feature liga {
            sub f l by fl;
            } liga;
        """))

        # only replace feature body if tag already present
        original = self.ufo.features.text
        repl = "numr; sub one by one.numr;\nsub two by two.numr;\n"

        set_custom_params(self.ufo, parsed=[("Replace Feature", repl)])

        self.assertEqual(self.ufo.features.text, original)
예제 #6
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.
    Returns:
        List of opened and updated instance UFOs.
    """
    from defcon import Font

    instance_ufos = []
    for path, data in instance_data:
        ufo = Font(path)
        set_weight_class(ufo, data)
        set_width_class(ufo, data)
        set_custom_params(ufo, data=data)
        ufo.save()
        instance_ufos.append(ufo)
    return instance_ufos
예제 #7
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])
예제 #8
0
 def test_xHeight(self):
     set_custom_params(self.ufo, parsed=[('xHeight', '500')])
     self.assertEqual(self.ufo.info.xHeight, 500)
예제 #9
0
 def test_set_disable_last_change(self):
     set_custom_params(self.ufo, parsed=[('Disable Last Change', True)])
     self.assertEqual(True,
                      self.ufo.lib[GLYPHS_PREFIX + 'disablesLastChange'])
예제 #10
0
 def test_set_disables_nice_names(self):
     set_custom_params(self.ufo, parsed=[('disablesNiceNames', False)])
     self.assertEqual(True, self.ufo.lib[GLYPHS_PREFIX + 'useNiceNames'])
예제 #11
0
 def test_set_openTypeOS2CodePageRanges(self):
     set_custom_params(self.ufo,
                       parsed=[('openTypeOS2CodePageRanges', [0, 1])])
     self.assertEqual(self.ufo.info.openTypeOS2CodePageRanges, [0, 1])
예제 #12
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)
예제 #13
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)
예제 #14
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'])