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) { |