| Index: experimental/PdfViewer/SkPdfFont.cpp
|
| ===================================================================
|
| --- experimental/PdfViewer/SkPdfFont.cpp (revision 10721)
|
| +++ experimental/PdfViewer/SkPdfFont.cpp (working copy)
|
| @@ -4,89 +4,89 @@
|
| #include "SkTypeface.h"
|
| #include "SkPdfNativeTokenizer.h"
|
|
|
| -std::map<std::string, SkPdfStandardFontEntry>& getStandardFonts() {
|
| - static std::map<std::string, SkPdfStandardFontEntry> gPdfStandardFonts;
|
| +SkTDict<SkPdfStandardFontEntry>& getStandardFonts() {
|
| + static SkTDict<SkPdfStandardFontEntry> gPdfStandardFonts(100);
|
|
|
| // TODO (edisonn): , vs - ? what does it mean?
|
| // TODO (edisonn): MT, PS, Oblique=italic?, ... what does it mean?
|
| - if (gPdfStandardFonts.empty()) {
|
| - gPdfStandardFonts["Arial"] = SkPdfStandardFontEntry("Arial", false, false);
|
| - gPdfStandardFonts["Arial,Bold"] = SkPdfStandardFontEntry("Arial", true, false);
|
| - gPdfStandardFonts["Arial,BoldItalic"] = SkPdfStandardFontEntry("Arial", true, true);
|
| - gPdfStandardFonts["Arial,Italic"] = SkPdfStandardFontEntry("Arial", false, true);
|
| - gPdfStandardFonts["Arial-Bold"] = SkPdfStandardFontEntry("Arial", true, false);
|
| - gPdfStandardFonts["Arial-BoldItalic"] = SkPdfStandardFontEntry("Arial", true, true);
|
| - gPdfStandardFonts["Arial-BoldItalicMT"] = SkPdfStandardFontEntry("Arial", true, true);
|
| - gPdfStandardFonts["Arial-BoldMT"] = SkPdfStandardFontEntry("Arial", true, false);
|
| - gPdfStandardFonts["Arial-Italic"] = SkPdfStandardFontEntry("Arial", false, true);
|
| - gPdfStandardFonts["Arial-ItalicMT"] = SkPdfStandardFontEntry("Arial", false, true);
|
| - gPdfStandardFonts["ArialMT"] = SkPdfStandardFontEntry("Arial", false, false);
|
| - gPdfStandardFonts["Courier"] = SkPdfStandardFontEntry("Courier New", false, false);
|
| - gPdfStandardFonts["Courier,Bold"] = SkPdfStandardFontEntry("Courier New", true, false);
|
| - gPdfStandardFonts["Courier,BoldItalic"] = SkPdfStandardFontEntry("Courier New", true, true);
|
| - gPdfStandardFonts["Courier,Italic"] = SkPdfStandardFontEntry("Courier New", false, true);
|
| - gPdfStandardFonts["Courier-Bold"] = SkPdfStandardFontEntry("Courier New", true, false);
|
| - gPdfStandardFonts["Courier-BoldOblique"] = SkPdfStandardFontEntry("Courier New", true, true);
|
| - gPdfStandardFonts["Courier-Oblique"] = SkPdfStandardFontEntry("Courier New", false, true);
|
| - gPdfStandardFonts["CourierNew"] = SkPdfStandardFontEntry("Courier New", false, false);
|
| - gPdfStandardFonts["CourierNew,Bold"] = SkPdfStandardFontEntry("Courier New", true, false);
|
| - gPdfStandardFonts["CourierNew,BoldItalic"] = SkPdfStandardFontEntry("Courier New", true, true);
|
| - gPdfStandardFonts["CourierNew,Italic"] = SkPdfStandardFontEntry("Courier New", false, true);
|
| - gPdfStandardFonts["CourierNew-Bold"] = SkPdfStandardFontEntry("Courier New", true, false);
|
| - gPdfStandardFonts["CourierNew-BoldItalic"] = SkPdfStandardFontEntry("Courier New", true, true);
|
| - gPdfStandardFonts["CourierNew-Italic"] = SkPdfStandardFontEntry("Courier New", false, true);
|
| - gPdfStandardFonts["CourierNewPS-BoldItalicMT"] = SkPdfStandardFontEntry("Courier New", true, true);
|
| - gPdfStandardFonts["CourierNewPS-BoldMT"] = SkPdfStandardFontEntry("Courier New", true, false);
|
| - gPdfStandardFonts["CourierNewPS-ItalicMT"] = SkPdfStandardFontEntry("Courier New", false, true);
|
| - gPdfStandardFonts["CourierNewPSMT"] = SkPdfStandardFontEntry("Courier New", false, false);
|
| - gPdfStandardFonts["Helvetica"] = SkPdfStandardFontEntry("Helvetica", false, false);
|
| - gPdfStandardFonts["Helvetica,Bold"] = SkPdfStandardFontEntry("Helvetica", true, false);
|
| - gPdfStandardFonts["Helvetica,BoldItalic"] = SkPdfStandardFontEntry("Helvetica", true, true);
|
| - gPdfStandardFonts["Helvetica,Italic"] = SkPdfStandardFontEntry("Helvetica", false, true);
|
| - gPdfStandardFonts["Helvetica-Bold"] = SkPdfStandardFontEntry("Helvetica", true, false);
|
| - gPdfStandardFonts["Helvetica-BoldItalic"] = SkPdfStandardFontEntry("Helvetica", true, true);
|
| - gPdfStandardFonts["Helvetica-BoldOblique"] = SkPdfStandardFontEntry("Helvetica", true, true);
|
| - gPdfStandardFonts["Helvetica-Italic"] = SkPdfStandardFontEntry("Helvetica", false, true);
|
| - gPdfStandardFonts["Helvetica-Oblique"] = SkPdfStandardFontEntry("Helvetica", false, true);
|
| - gPdfStandardFonts["Times-Bold"] = SkPdfStandardFontEntry("Times New Roman", true, false);
|
| - gPdfStandardFonts["Times-BoldItalic"] = SkPdfStandardFontEntry("Times New Roman", true, true);
|
| - gPdfStandardFonts["Times-Italic"] = SkPdfStandardFontEntry("Times New Roman", false, true);
|
| - gPdfStandardFonts["Times-Roman"] = SkPdfStandardFontEntry("Times New Roman", false, false);
|
| - gPdfStandardFonts["TimesNewRoman"] = SkPdfStandardFontEntry("Times New Roman", false, false);
|
| - gPdfStandardFonts["TimesNewRoman,Bold"] = SkPdfStandardFontEntry("Times New Roman", true, false);
|
| - gPdfStandardFonts["TimesNewRoman,BoldItalic"] = SkPdfStandardFontEntry("Times New Roman", true, true);
|
| - gPdfStandardFonts["TimesNewRoman,Italic"] = SkPdfStandardFontEntry("Times New Roman", false, true);
|
| - gPdfStandardFonts["TimesNewRoman-Bold"] = SkPdfStandardFontEntry("Times New Roman", true, false);
|
| - gPdfStandardFonts["TimesNewRoman-BoldItalic"] = SkPdfStandardFontEntry("Times New Roman", true, true);
|
| - gPdfStandardFonts["TimesNewRoman-Italic"] = SkPdfStandardFontEntry("Times New Roman", false, true);
|
| - gPdfStandardFonts["TimesNewRomanPS"] = SkPdfStandardFontEntry("Times New Roman", false, false);
|
| - gPdfStandardFonts["TimesNewRomanPS-Bold"] = SkPdfStandardFontEntry("Times New Roman", true, false);
|
| - gPdfStandardFonts["TimesNewRomanPS-BoldItalic"] = SkPdfStandardFontEntry("Times New Roman", true, true);
|
| - gPdfStandardFonts["TimesNewRomanPS-BoldItalicMT"] = SkPdfStandardFontEntry("Times New Roman", true, true);
|
| - gPdfStandardFonts["TimesNewRomanPS-BoldMT"] = SkPdfStandardFontEntry("Times New Roman", true, false);
|
| - gPdfStandardFonts["TimesNewRomanPS-Italic"] = SkPdfStandardFontEntry("Times New Roman", false, true);
|
| - gPdfStandardFonts["TimesNewRomanPS-ItalicMT"] = SkPdfStandardFontEntry("Times New Roman", false, true);
|
| - gPdfStandardFonts["TimesNewRomanPSMT"] = SkPdfStandardFontEntry("Times New Roman", false, false);
|
| - gPdfStandardFonts["Symbol"] = SkPdfStandardFontEntry("Symbol", false, false);
|
| - gPdfStandardFonts["ZapfDingbats"] = SkPdfStandardFontEntry("ZapfDingbats", false, false);
|
| + if (gPdfStandardFonts.count() == 0) {
|
| + gPdfStandardFonts.set("Arial", SkPdfStandardFontEntry("Arial", false, false));
|
| + gPdfStandardFonts.set("Arial,Bold", SkPdfStandardFontEntry("Arial", true, false));
|
| + gPdfStandardFonts.set("Arial,BoldItalic", SkPdfStandardFontEntry("Arial", true, true));
|
| + gPdfStandardFonts.set("Arial,Italic", SkPdfStandardFontEntry("Arial", false, true));
|
| + gPdfStandardFonts.set("Arial-Bold", SkPdfStandardFontEntry("Arial", true, false));
|
| + gPdfStandardFonts.set("Arial-BoldItalic", SkPdfStandardFontEntry("Arial", true, true));
|
| + gPdfStandardFonts.set("Arial-BoldItalicMT", SkPdfStandardFontEntry("Arial", true, true));
|
| + gPdfStandardFonts.set("Arial-BoldMT", SkPdfStandardFontEntry("Arial", true, false));
|
| + gPdfStandardFonts.set("Arial-Italic", SkPdfStandardFontEntry("Arial", false, true));
|
| + gPdfStandardFonts.set("Arial-ItalicMT", SkPdfStandardFontEntry("Arial", false, true));
|
| + gPdfStandardFonts.set("ArialMT", SkPdfStandardFontEntry("Arial", false, false));
|
| + gPdfStandardFonts.set("Courier", SkPdfStandardFontEntry("Courier New", false, false));
|
| + gPdfStandardFonts.set("Courier,Bold", SkPdfStandardFontEntry("Courier New", true, false));
|
| + gPdfStandardFonts.set("Courier,BoldItalic", SkPdfStandardFontEntry("Courier New", true, true));
|
| + gPdfStandardFonts.set("Courier,Italic", SkPdfStandardFontEntry("Courier New", false, true));
|
| + gPdfStandardFonts.set("Courier-Bold", SkPdfStandardFontEntry("Courier New", true, false));
|
| + gPdfStandardFonts.set("Courier-BoldOblique", SkPdfStandardFontEntry("Courier New", true, true));
|
| + gPdfStandardFonts.set("Courier-Oblique", SkPdfStandardFontEntry("Courier New", false, true));
|
| + gPdfStandardFonts.set("CourierNew", SkPdfStandardFontEntry("Courier New", false, false));
|
| + gPdfStandardFonts.set("CourierNew,Bold", SkPdfStandardFontEntry("Courier New", true, false));
|
| + gPdfStandardFonts.set("CourierNew,BoldItalic", SkPdfStandardFontEntry("Courier New", true, true));
|
| + gPdfStandardFonts.set("CourierNew,Italic", SkPdfStandardFontEntry("Courier New", false, true));
|
| + gPdfStandardFonts.set("CourierNew-Bold", SkPdfStandardFontEntry("Courier New", true, false));
|
| + gPdfStandardFonts.set("CourierNew-BoldItalic", SkPdfStandardFontEntry("Courier New", true, true));
|
| + gPdfStandardFonts.set("CourierNew-Italic", SkPdfStandardFontEntry("Courier New", false, true));
|
| + gPdfStandardFonts.set("CourierNewPS-BoldItalicMT", SkPdfStandardFontEntry("Courier New", true, true));
|
| + gPdfStandardFonts.set("CourierNewPS-BoldMT", SkPdfStandardFontEntry("Courier New", true, false));
|
| + gPdfStandardFonts.set("CourierNewPS-ItalicMT", SkPdfStandardFontEntry("Courier New", false, true));
|
| + gPdfStandardFonts.set("CourierNewPSMT", SkPdfStandardFontEntry("Courier New", false, false));
|
| + gPdfStandardFonts.set("Helvetica", SkPdfStandardFontEntry("Helvetica", false, false));
|
| + gPdfStandardFonts.set("Helvetica,Bold", SkPdfStandardFontEntry("Helvetica", true, false));
|
| + gPdfStandardFonts.set("Helvetica,BoldItalic", SkPdfStandardFontEntry("Helvetica", true, true));
|
| + gPdfStandardFonts.set("Helvetica,Italic", SkPdfStandardFontEntry("Helvetica", false, true));
|
| + gPdfStandardFonts.set("Helvetica-Bold", SkPdfStandardFontEntry("Helvetica", true, false));
|
| + gPdfStandardFonts.set("Helvetica-BoldItalic", SkPdfStandardFontEntry("Helvetica", true, true));
|
| + gPdfStandardFonts.set("Helvetica-BoldOblique", SkPdfStandardFontEntry("Helvetica", true, true));
|
| + gPdfStandardFonts.set("Helvetica-Italic", SkPdfStandardFontEntry("Helvetica", false, true));
|
| + gPdfStandardFonts.set("Helvetica-Oblique", SkPdfStandardFontEntry("Helvetica", false, true));
|
| + gPdfStandardFonts.set("Times-Bold", SkPdfStandardFontEntry("Times New Roman", true, false));
|
| + gPdfStandardFonts.set("Times-BoldItalic", SkPdfStandardFontEntry("Times New Roman", true, true));
|
| + gPdfStandardFonts.set("Times-Italic", SkPdfStandardFontEntry("Times New Roman", false, true));
|
| + gPdfStandardFonts.set("Times-Roman", SkPdfStandardFontEntry("Times New Roman", false, false));
|
| + gPdfStandardFonts.set("TimesNewRoman", SkPdfStandardFontEntry("Times New Roman", false, false));
|
| + gPdfStandardFonts.set("TimesNewRoman,Bold", SkPdfStandardFontEntry("Times New Roman", true, false));
|
| + gPdfStandardFonts.set("TimesNewRoman,BoldItalic", SkPdfStandardFontEntry("Times New Roman", true, true));
|
| + gPdfStandardFonts.set("TimesNewRoman,Italic", SkPdfStandardFontEntry("Times New Roman", false, true));
|
| + gPdfStandardFonts.set("TimesNewRoman-Bold", SkPdfStandardFontEntry("Times New Roman", true, false));
|
| + gPdfStandardFonts.set("TimesNewRoman-BoldItalic", SkPdfStandardFontEntry("Times New Roman", true, true));
|
| + gPdfStandardFonts.set("TimesNewRoman-Italic", SkPdfStandardFontEntry("Times New Roman", false, true));
|
| + gPdfStandardFonts.set("TimesNewRomanPS", SkPdfStandardFontEntry("Times New Roman", false, false));
|
| + gPdfStandardFonts.set("TimesNewRomanPS-Bold", SkPdfStandardFontEntry("Times New Roman", true, false));
|
| + gPdfStandardFonts.set("TimesNewRomanPS-BoldItalic", SkPdfStandardFontEntry("Times New Roman", true, true));
|
| + gPdfStandardFonts.set("TimesNewRomanPS-BoldItalicMT", SkPdfStandardFontEntry("Times New Roman", true, true));
|
| + gPdfStandardFonts.set("TimesNewRomanPS-BoldMT", SkPdfStandardFontEntry("Times New Roman", true, false));
|
| + gPdfStandardFonts.set("TimesNewRomanPS-Italic", SkPdfStandardFontEntry("Times New Roman", false, true));
|
| + gPdfStandardFonts.set("TimesNewRomanPS-ItalicMT", SkPdfStandardFontEntry("Times New Roman", false, true));
|
| + gPdfStandardFonts.set("TimesNewRomanPSMT", SkPdfStandardFontEntry("Times New Roman", false, false));
|
| + gPdfStandardFonts.set("Symbol", SkPdfStandardFontEntry("Symbol", false, false));
|
| + gPdfStandardFonts.set("ZapfDingbats", SkPdfStandardFontEntry("ZapfDingbats", false, false));
|
|
|
| // TODO(edisonn): these are hacks. Load Post Script font name.
|
| // see FT_Get_Postscript_Name
|
| // Font config is not using it, yet.
|
| //https://bugs.freedesktop.org/show_bug.cgi?id=18095
|
|
|
| - gPdfStandardFonts["Arial-Black"] = SkPdfStandardFontEntry("Arial", true, false);
|
| - gPdfStandardFonts["DejaVuSans"] = SkPdfStandardFontEntry("DejaVu Sans", false, false);
|
| - gPdfStandardFonts["DejaVuSansMono"] = SkPdfStandardFontEntry("DejaVuSans Mono", false, false);
|
| - gPdfStandardFonts["DejaVuSansMono-Bold"] = SkPdfStandardFontEntry("DejaVuSans Mono", true, false);
|
| - gPdfStandardFonts["DejaVuSansMono-Oblique"] = SkPdfStandardFontEntry("DejaVuSans Mono", false, true);
|
| - gPdfStandardFonts["Georgia-Bold"] = SkPdfStandardFontEntry("Georgia", true, false);
|
| - gPdfStandardFonts["Georgia-BoldItalic"] = SkPdfStandardFontEntry("Georgia", true, true);
|
| - gPdfStandardFonts["Georgia-Italic"] = SkPdfStandardFontEntry("Georgia", false, true);
|
| - gPdfStandardFonts["TrebuchetMS"] = SkPdfStandardFontEntry("Trebuchet MS", false, false);
|
| - gPdfStandardFonts["TrebuchetMS-Bold"] = SkPdfStandardFontEntry("Trebuchet MS", true, false);
|
| - gPdfStandardFonts["Verdana-Bold"] = SkPdfStandardFontEntry("Verdana", true, false);
|
| - gPdfStandardFonts["WenQuanYiMicroHei"] = SkPdfStandardFontEntry("WenQuanYi Micro Hei", false, false);
|
| + gPdfStandardFonts.set("Arial-Black", SkPdfStandardFontEntry("Arial", true, false));
|
| + gPdfStandardFonts.set("DejaVuSans", SkPdfStandardFontEntry("DejaVu Sans", false, false));
|
| + gPdfStandardFonts.set("DejaVuSansMono", SkPdfStandardFontEntry("DejaVuSans Mono", false, false));
|
| + gPdfStandardFonts.set("DejaVuSansMono-Bold", SkPdfStandardFontEntry("DejaVuSans Mono", true, false));
|
| + gPdfStandardFonts.set("DejaVuSansMono-Oblique", SkPdfStandardFontEntry("DejaVuSans Mono", false, true));
|
| + gPdfStandardFonts.set("Georgia-Bold", SkPdfStandardFontEntry("Georgia", true, false));
|
| + gPdfStandardFonts.set("Georgia-BoldItalic", SkPdfStandardFontEntry("Georgia", true, true));
|
| + gPdfStandardFonts.set("Georgia-Italic", SkPdfStandardFontEntry("Georgia", false, true));
|
| + gPdfStandardFonts.set("TrebuchetMS", SkPdfStandardFontEntry("Trebuchet MS", false, false));
|
| + gPdfStandardFonts.set("TrebuchetMS-Bold", SkPdfStandardFontEntry("Trebuchet MS", true, false));
|
| + gPdfStandardFonts.set("Verdana-Bold", SkPdfStandardFontEntry("Verdana", true, false));
|
| + gPdfStandardFonts.set("WenQuanYiMicroHei", SkPdfStandardFontEntry("WenQuanYi Micro Hei", false, false));
|
|
|
| // TODO(edisonn): list all phonts available, builf post script name as in pdf spec
|
| /*
|
| @@ -121,12 +121,12 @@
|
| }
|
|
|
| SkTypeface* SkTypefaceFromPdfStandardFont(const char* fontName, bool bold, bool italic) {
|
| - std::map<std::string, SkPdfStandardFontEntry>& standardFontMap = getStandardFonts();
|
| + SkTDict<SkPdfStandardFontEntry>& standardFontMap = getStandardFonts();
|
|
|
| SkTypeface* typeface = NULL;
|
| - if (standardFontMap.find(fontName) != standardFontMap.end()) {
|
| - SkPdfStandardFontEntry fontData = standardFontMap[fontName];
|
| + SkPdfStandardFontEntry fontData;
|
|
|
| + if (standardFontMap.find(fontName, &fontData)) {
|
| // TODO(edisonn): How does the bold/italic specified in standard definition combines with
|
| // the one in /font key? use OR for now.
|
| bold = bold || fontData.fIsBold;
|
| @@ -207,7 +207,7 @@
|
| continue;
|
| }
|
|
|
| - if (fd->has_FontName() && fd->FontName(doc) == fontName) {
|
| + if (fd->has_FontName() && fd->FontName(doc).equals(fontName)) {
|
| SkPdfFont* font = SkPdfFont::fontFromFontDescriptor(doc, fd, false);
|
| if (font) {
|
| return font;
|
| @@ -432,18 +432,22 @@
|
| }
|
| }
|
|
|
| -std::map<std::string, SkPdfEncoding*>& getStandardEncodings() {
|
| - static std::map<std::string, SkPdfEncoding*> encodings;
|
| - if (encodings.empty()) {
|
| - encodings["Identity-H"] = SkPdfIdentityHEncoding::instance();
|
| +SkTDict<SkPdfEncoding*>& getStandardEncodings() {
|
| + static SkTDict<SkPdfEncoding*> encodings(10);
|
| + if (encodings.count() == 0) {
|
| + encodings.set("Identity-H", SkPdfIdentityHEncoding::instance());
|
| }
|
|
|
| return encodings;
|
| }
|
|
|
| -
|
| SkPdfEncoding* SkPdfEncoding::fromName(const char* name) {
|
| - SkPdfEncoding* encoding = getStandardEncodings()[name];
|
| + SkPdfEncoding* encoding = NULL;
|
| + if (!getStandardEncodings().find(name, &encoding)) {
|
| + // TODO(edisonn): if the function return false, and we a guaranteed that the value is not
|
| + // changed, delete this set to null
|
| + encoding = NULL;
|
| + }
|
|
|
| #ifdef PDF_TRACE
|
| if (encoding == NULL) {
|
|
|