diff --git a/src/HTMLRenderer/install.cc b/src/HTMLRenderer/install.cc index f4e23b6..9a7256a 100644 --- a/src/HTMLRenderer/install.cc +++ b/src/HTMLRenderer/install.cc @@ -99,27 +99,6 @@ FontInfo HTMLRenderer::install_font(GfxFont * font) // add a new function and move to text.cc void HTMLRenderer::install_embedded_font(GfxFont * font, const string & suffix, long long fn_id, bool & use_tounicode) { - // TODO Should use standard way to handle CID fonts - /* - * How it works: - * - * 1.dump the font file directly from the font descriptor and put the glyphs into the correct slots - * - * for nonCID - * nothing need to do - * - * for CID + nonTrueType - * Flatten the font - * - * for CID Truetype - * Just use glyph order, and later we'll map GID (instead of char code) to Unicode - * - * - * 2. map charcode (or GID for CID truetype) to Unicode - * - * generate an encoding file and let fontforge handle it. - */ - string fn = (format("f%|1$x|") % fn_id).str(); path script_path = tmp_dir / (fn + ".pe"); @@ -134,6 +113,22 @@ void HTMLRenderer::install_embedded_font(GfxFont * font, const string & suffix, Gfx8BitFont * font_8bit = nullptr; + /* + * Step 1 + * dump the font file directly from the font descriptor and put the glyphs into the correct slots + * + * for 8bit + nonTrueType + * re-encoding the font using a PostScript encoding list (glyph id <-> glpyh name) + * + * for 8bit + TrueType + * sort the glpyhs as the original order, and later will map GID (instead of char code) to Unicode + * + * for CID + nonTrueType + * Flatten the font + * + * for CID Truetype + * same as 8bitTrueType, except for that we have to check 65536 charcodes + */ if(!font->isCIDFont()) { font_8bit = dynamic_cast(font); @@ -193,6 +188,18 @@ void HTMLRenderer::install_embedded_font(GfxFont * font, const string & suffix, } } + /* + * Step 2 + * map charcode (or GID for CID truetype) + * generate an Consortium encoding file and let fontforge handle it. + * + * - Always map to Unicode for 8bit TrueType fonts and CID fonts + * + * - For 8bit nonTruetype fonts: + * Try to calculate the correct Unicode value from the glyph names, unless param->always_apply_tounicode is set + * + */ + use_tounicode = ((suffix == ".ttf") || (font->isCIDFont()) || (param->always_apply_tounicode)); auto ctu = font->getToUnicode();