@Override
    public List<Integer> applyTransforms(List<Integer> originalGlyphIds)
    {
        List<Integer> intermediateGlyphsFromGsub = originalGlyphIds;

        for (String feature : FEATURES_IN_ORDER)
        {
            if (!gsubData.isFeatureSupported(feature))
            {
                LOG.debug("the feature {} was not found", feature);
                continue;
            }

            LOG.debug("applying the feature {}", feature);

            ScriptFeature scriptFeature = gsubData.getFeature(feature);

            intermediateGlyphsFromGsub = applyGsubFeature(scriptFeature,
                    intermediateGlyphsFromGsub);
        }

        return Collections.unmodifiableList(intermediateGlyphsFromGsub);
    }
@Test
    void testApplyLigaturesCalibri() throws IOException
    {
        File file = new File("c:/windows/fonts/calibri.ttf");
        Assumptions.assumeTrue(file.exists(), "calibri ligature test skipped");

        CmapLookup cmapLookup;
        GsubWorker gsubWorkerForLatin;
        try (TrueTypeFont ttf = new TTFParser().parse(new RandomAccessReadBufferedFile(file)))
        {
            cmapLookup = ttf.getUnicodeCmapLookup();
            gsubWorkerForLatin = new GsubWorkerFactory().getGsubWorker(cmapLookup, ttf.getGsubData());
        }

        assertEquals(Arrays.asList(286, 299, 286, 272, 415, 448, 286),
                gsubWorkerForLatin.applyTransforms(getGlyphIds("effective", cmapLookup)));
        assertEquals(Arrays.asList(258, 427, 410, 437, 282, 286), 
                gsubWorkerForLatin.applyTransforms(getGlyphIds("attitude", cmapLookup)));
        assertEquals(Arrays.asList(258, 312, 367, 349, 258, 410, 286),
                gsubWorkerForLatin.applyTransforms(getGlyphIds("affiliate", cmapLookup)));
        assertEquals(Arrays.asList(302, 367, 373),
                gsubWorkerForLatin.applyTransforms(getGlyphIds("film", cmapLookup)));
        assertEquals(Arrays.asList(327, 381, 258, 410),
                gsubWorkerForLatin.applyTransforms(getGlyphIds("float", cmapLookup)));
        assertEquals(Arrays.asList(393, 367, 258, 414, 381, 396, 373),
                gsubWorkerForLatin.applyTransforms(getGlyphIds("platform", cmapLookup)));
    }