From 1748432796116bc942dbf3922c97b5220237e733 Mon Sep 17 00:00:00 2001 From: halcanary Date: Mon, 29 Aug 2016 09:47:48 -0700 Subject: [PATCH] SkPDF: Remove some unused glyphs from fallback fonts This makes the /Widths and the /Differences arrays smaller. Example diff in output PDF (lines are wrapped for easy viewing): <> +/Differences [0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 +/g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g1D +/g0 /g0 /g0 /g21 /g0 /g0 /g0 /g0 /g26 /g27 /g28 /g29 /g0 /g0 /g0 /g0 +/g0 /g0 /g30 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g3E +/g0 /g40 /g0 /g0 /g0 /g44 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 +/g50 /g0 /g0 /g0 /g0 /g0 /g0 /g57 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 +/g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g0 /g6E /g0 /g0 /g0 +/g0 /g0 /g0 /g0 /g76]>> /CharProcs <(); metrics->fLastGlyphID = SkToU16(count - 1); - } + } SkASSERT(metrics->fLastGlyphID == SkToU16(count - 1)); return *canon->fTypefaceMetrics.set(id, metrics.release()); } @@ -603,6 +603,11 @@ static void add_type3_font_info(SkPDFCanon* canon, SkGlyphID firstGlyphID, SkGlyphID lastGlyphID) { SkASSERT(lastGlyphID >= firstGlyphID); + // Remove unused glyphs at the end of the range. + // Keep the lastGlyphID >= firstGlyphID invariant true. + while (lastGlyphID > firstGlyphID && !subset.has(lastGlyphID)) { + --lastGlyphID; + } SkASSERT(emSize > 0.0f); SkAutoGlyphCache cache = vector_cache(typeface, emSize); font->insertName("Subtype", "Type3"); -- 2.7.4