Esempio n. 1
0
 def test_st_ligatures(self):
     """Tests that st ligatures are formed by dlig."""
     for fontfile in self.fontfiles:
         for combination in [u'st', u'ſt']:
             normal = layout.get_glyphs(combination, fontfile)
             ligated = layout.get_glyphs(
                 combination, fontfile, '--features=dlig')
             self.assertTrue(len(normal) == 2 and len(ligated) == 1)
Esempio n. 2
0
 def test_st_ligatures(self):
     """Tests that st ligatures are formed by dlig."""
     for fontfile in self.fontfiles:
         for combination in [u'st', u'ſt']:
             normal = layout.get_glyphs(combination, fontfile)
             ligated = layout.get_glyphs(
                 combination, fontfile, '--features=dlig')
             self.assertTrue(len(normal) == 2 and len(ligated) == 1)
Esempio n. 3
0
 def _run_ligature_test(self, sequences_with_params, active):
     for fontfile in self.fontfiles:
         for params, sequences in sequences_with_params:
             for sequence in sequences:
                 if params:
                     output = layout.get_glyphs(sequence, fontfile, params)
                 else:
                     output = layout.get_glyphs(sequence, fontfile)
                 if active:  # should ligate with parameters applied
                     expected = 1
                     err_msg = '%s not ligated in %s with parameters: %s'
                 else:  # should not ligate with parameters applied
                     expected = len(sequence)
                     err_msg = '%s ligated in %s with parameters: %s'
                 self.assertEqual(len(output), expected,
                                  err_msg % (sequence, fontfile, params))
Esempio n. 4
0
        def run_test(glyph_order, glyph_set, fontfile, tags,
                     proportional=False, oldstyle=False):

            num = glyph_order[layout.get_glyphs('1', fontfile)[0]]
            styled = glyph_order[layout.get_glyphs(
                '1', fontfile, '--features=' + ','.join(tags))[0]]

            if not (proportional or oldstyle):
                self.assertEqual(num, styled)

            else:
                num, styled = glyph_set[num], glyph_set[styled]
                if proportional:
                    self.assertNotEqual(num.width, styled.width)
                if oldstyle:
                    self.assertNotEqual(num._glyph.yMax, styled._glyph.yMax)
Esempio n. 5
0
        def run_test(glyph_order, glyph_set, fontfile, tags,
                     proportional=False, oldstyle=False):

            num = glyph_order[layout.get_glyphs('1', fontfile)[0]]
            styled = glyph_order[layout.get_glyphs(
                '1', fontfile, '--features=' + ','.join(tags))[0]]

            if not (proportional or oldstyle):
                self.assertEqual(num, styled)

            else:
                num, styled = glyph_set[num], glyph_set[styled]
                if proportional:
                    self.assertNotEqual(num.width, styled.width)
                if oldstyle:
                    self.assertNotEqual(num._glyph.yMax, styled._glyph.yMax)
Esempio n. 6
0
 def _run_ligature_test(self, sequences_with_params, active):
     for fontfile in self.fontfiles:
         for params, sequences in sequences_with_params:
             for sequence in sequences:
                 if params:
                     output = layout.get_glyphs(sequence, fontfile, params)
                 else:
                     output = layout.get_glyphs(sequence, fontfile)
                 if active:  # should ligate with parameters applied
                     expected = 1
                     err_msg = '%s not ligated in %s with parameters: %s'
                 else:  # should not ligate with parameters applied
                     expected = len(sequence)
                     err_msg = '%s ligated in %s with parameters: %s'
                 self.assertEqual(len(output), expected, err_msg % (
                     sequence, fontfile, params))
Esempio n. 7
0
    def test_smcp_coverage(self):
        """Tests that smcp is supported for our required set."""
        with open('res/smcp_requirements.txt') as smcp_reqs_file:
            smcp_reqs_list = []
            for line in smcp_reqs_file.readlines():
                line = line[:line.index(' #')]
                smcp_reqs_list.append(unichr(int(line, 16)))

        for fontfile in self.fontfiles:
            chars_with_no_smcp = []
            for char in smcp_reqs_list:
                normal = layout.get_glyphs(char, fontfile)
                smcp = layout.get_glyphs(char, fontfile, '--features=smcp')
                if normal == smcp:
                    chars_with_no_smcp.append(char)
            self.assertEqual(chars_with_no_smcp, [],
                             ("smcp feature is not applied to '%s'" %
                              u''.join(chars_with_no_smcp).encode('UTF-8')))
Esempio n. 8
0
    def test_combinations(self):
        """Tests that soft-dotted characters lose their dots when combined."""

        for font in self.font_files:
            print 'Testing %s for soft-dotted combinations...' % font

            # TODO: replace the following list with actual derivation based on
            # Unicode's soft-dotted property
            for base_letter in (u'ij\u012F\u0249\u0268\u029D\u02B2\u03F3\u0456'
                                u'\u0458\u1D62\u1D96\u1DA4\u1DA8\u1E2D\u1ECB'
                                u'\u2071\u2C7C'):
                print 'Testing %s combinations' % base_letter.encode('UTF-8')
                for mark in self.marks_to_test:
                    mark = unichr(mark)
                    letter_only = layout.get_glyphs(base_letter, font)
                    combination = layout.get_glyphs(base_letter + mark, font)
                    self.assertNotEqual(combination[0], letter_only[0],
                        "The sequence <%04X, %04X> doesn't lose its dot, "
                        "but it should" % (ord(base_letter), ord(mark)))
Esempio n. 9
0
    def test_combinations(self):
        """Tests that soft-dotted characters lose their dots when combined."""

        for font in self.font_files:
            print 'Testing %s for soft-dotted combinations...' % font

            # TODO: replace the following list with actual derivation based on
            # Unicode's soft-dotted property
            for base_letter in (u'ij\u012F\u0249\u0268\u029D\u02B2\u03F3\u0456'
                                u'\u0458\u1D62\u1D96\u1DA4\u1DA8\u1E2D\u1ECB'
                                u'\u2071\u2C7C'):
                print 'Testing %s combinations' % base_letter.encode('UTF-8')
                for mark in self.marks_to_test:
                    mark = unichr(mark)
                    letter_only = layout.get_glyphs(base_letter, font)
                    combination = layout.get_glyphs(base_letter + mark, font)
                    self.assertNotEqual(combination[0], letter_only[0],
                        "The sequence <%04X, %04X> doesn't lose its dot, "
                        "but it should" % (ord(base_letter), ord(mark)))
Esempio n. 10
0
    def test_smcp_coverage(self):
        """Tests that smcp is supported for our required set."""
        with open('res/smcp_requirements.txt') as smcp_reqs_file:
            smcp_reqs_list = []
            for line in smcp_reqs_file.readlines():
                line = line[:line.index(' #')]
                smcp_reqs_list.append(unichr(int(line, 16)))

        for fontfile in self.fontfiles:
            chars_with_no_smcp = []
            for char in smcp_reqs_list:
                normal = layout.get_glyphs(char, fontfile)
                smcp = layout.get_glyphs(char, fontfile, '--features=smcp')
                if normal == smcp:
                    chars_with_no_smcp.append(char)
            self.assertEqual(
                chars_with_no_smcp, [],
                ("smcp feature is not applied to '%s'" %
                    u''.join(chars_with_no_smcp).encode('UTF-8')))
Esempio n. 11
0
    def run_sub_coverage_test(self, feature, reqs_path):
        """Tests that a substitution feature is supported for a required set."""

        with open(reqs_path) as reqs_file:
            reqs_list = []
            for line in reqs_file.readlines():
                input_cp, output_name = line[:line.index(' #')].split()
                reqs_list.append((unichr(int(input_cp, 16)), output_name))

        for fontfile, font in zip(self.fontfiles, self.fonts):
            glyph_order = font.getGlyphOrder()
            chars_with_no_sub = []
            for char, expected_name in reqs_list:
                sub = layout.get_glyphs(char, fontfile, '--features=%s' % feature)
                if glyph_order[sub[0]] != expected_name:
                    chars_with_no_sub.append(char)
            self.assertEqual(
                chars_with_no_sub, [],
                ("%s feature is not applied correctly to '%s'" %
                    (feature, u''.join(chars_with_no_sub).encode('UTF-8'))))
Esempio n. 12
0
    def test_smcp_coverage(self):
        """Tests that smcp is supported for our required set."""

        with open(self.smcp_reqs_path) as smcp_reqs_file:
            smcp_reqs_list = []
            for line in smcp_reqs_file.readlines():
                input_cp, output_name = line[:line.index(' #')].split()
                smcp_reqs_list.append((unichr(int(input_cp, 16)), output_name))

        for fontfile, font in zip(self.fontfiles, self.fonts):
            glyph_order = font.getGlyphOrder()
            chars_with_no_smcp = []
            for char, expected_name in smcp_reqs_list:
                smcp = layout.get_glyphs(char, fontfile, '--features=smcp')
                if glyph_order[smcp[0]] != expected_name:
                    chars_with_no_smcp.append(char)
            self.assertEqual(
                chars_with_no_smcp, [],
                ("smcp feature is not applied correctly to '%s'" %
                    u''.join(chars_with_no_smcp).encode('UTF-8')))
Esempio n. 13
0
    def run_sub_coverage_test(self, feature, reqs_path):
        """Tests that a substitution feature is supported for a required set."""

        with open(reqs_path) as reqs_file:
            reqs_list = []
            for line in reqs_file.readlines():
                input_cp, output_name = line[:line.index(' #')].split()
                reqs_list.append((unichr(int(input_cp, 16)), output_name))

        for fontfile, font in zip(self.fontfiles, self.fonts):
            glyph_order = font.getGlyphOrder()
            chars_with_no_sub = []
            for char, expected_name in reqs_list:
                sub = layout.get_glyphs(char, fontfile, '--features=%s' % feature)
                if glyph_order[sub[0]] != expected_name:
                    chars_with_no_sub.append(char)
            self.assertEqual(
                chars_with_no_sub, [],
                ("%s feature is not applied correctly to '%s'" %
                    (feature, u''.join(chars_with_no_sub).encode('UTF-8'))))