| Index: experimental/PdfViewer/SkPdfFont.cpp
|
| ===================================================================
|
| --- experimental/PdfViewer/SkPdfFont.cpp (revision 9735)
|
| +++ experimental/PdfViewer/SkPdfFont.cpp (working copy)
|
| @@ -70,6 +70,7 @@
|
| // see FT_Get_Postscript_Name
|
| // Font config is not using it, yet.
|
| //https://bugs.freedesktop.org/show_bug.cgi?id=18095
|
| +
|
| gPdfStandardFonts["Arial-Black"] = {"Arial", true, false};
|
| gPdfStandardFonts["DejaVuSans"] = {"DejaVu Sans", false, false};
|
| gPdfStandardFonts["DejaVuSansMono"] = {"DejaVuSans Mono", false, false};
|
| @@ -82,6 +83,34 @@
|
| gPdfStandardFonts["TrebuchetMS-Bold"] = {"Trebuchet MS", true, false};
|
| gPdfStandardFonts["Verdana-Bold"] = {"Verdana", true, false};
|
| gPdfStandardFonts["WenQuanYiMicroHei"] = {"WenQuanYi Micro Hei", false, false};
|
| +
|
| + // TODO(edisonn): list all phonts available, builf post script name as in pdf spec
|
| + /*
|
| + * The PostScript name for the value of BaseFontis determined in one of two ways:
|
| +• Use the PostScript name that is an optional entry in the “name” table of the
|
| +TrueType font itself.
|
| +• In the absence of such an entry in the “name” table, derive a PostScript name
|
| +from the name by which the font is known in the host operating system: on a
|
| +Windows system, it is based on the lfFaceName field in a LOGFONT structure; in
|
| +the Mac OS, it is based on the name of the FONDresource. If the name contains
|
| +any spaces, the spaces are removed.
|
| +If the font in a source document uses a bold or italic style, but there is no font
|
| +data for that style, the host operating system will synthesize the style. In this case,
|
| +a comma and the style name (one of Bold, Italic, or BoldItalic) are appended to the
|
| +font name. For example, for a TrueType font that is a bold variant of the New
|
| + */
|
| +
|
| + /*
|
| + * If the value of Subtype is MMType1.
|
| +• If the PostScript name of the instance contains spaces, the spaces are replaced
|
| +by underscores in the value of BaseFont. For instance, as illustrated in Example
|
| +5.7, the name “MinionMM 366 465 11 ” (which ends with a space character)
|
| +becomes /MinionMM_366_465_11_.
|
| + */
|
| +
|
| + // might not work on all oses ?
|
| + //
|
| +
|
| }
|
|
|
| return gPdfStandardFonts;
|
| @@ -178,6 +207,8 @@
|
| return NULL; // default one?
|
| }
|
|
|
| +
|
| +
|
| return new SkPdfType3Font(dict);
|
| }
|
|
|
| @@ -213,26 +244,11 @@
|
| return ret;
|
| }
|
|
|
| -SkPdfType0Font::SkPdfType0Font(SkPdfType0FontDictionary* dict) {
|
| - fBaseFont = SkPdfFontFromName(dict, dict->BaseFont().c_str());
|
| -
|
| - // TODO(edisonn): load encoding, let it now to be Identity-H by default
|
| - if (dict->has_Encoding()) {
|
| - if (dict->isEncodingAName()) {
|
| - //report encoding not supported
|
| - //fEncoding = loadEncodingFromName(dict->getEncodingAsName().c_str());
|
| - } else if (dict->isEncodingAStream()) {
|
| - //fEncoding = loadEncodingFromStream(dict->getEncodingAsStream());
|
| - } else {
|
| - // error
|
| - }
|
| - }
|
| -
|
| +SkPdfToUnicode::SkPdfToUnicode(const SkPdfStream* stream) {
|
| fCMapEncoding = NULL;
|
| fCMapEncodingFlag = NULL;
|
|
|
| - if (dict->has_ToUnicode()) {
|
| - const SkPdfStream* stream = dict->ToUnicode();
|
| + if (stream) {
|
| SkPdfTokenizer tokenizer(stream);
|
| PdfToken token;
|
|
|
| @@ -318,3 +334,44 @@
|
| }
|
| }
|
| }
|
| +
|
| +
|
| +SkPdfType0Font::SkPdfType0Font(SkPdfType0FontDictionary* dict) {
|
| + fBaseFont = SkPdfFontFromName(dict, dict->BaseFont().c_str());
|
| + fEncoding = NULL;
|
| +
|
| + if (dict->has_Encoding()) {
|
| + if (dict->isEncodingAName()) {
|
| + fEncoding = SkPdfEncoding::fromName(dict->getEncodingAsName().c_str());
|
| + } else if (dict->isEncodingAStream()) {
|
| + //fEncoding = loadEncodingFromStream(dict->getEncodingAsStream());
|
| + } else {
|
| + // TODO(edisonn): error ... warning .. assert?
|
| + }
|
| + }
|
| +
|
| + if (dict->has_ToUnicode()) {
|
| + fToUnicode = new SkPdfToUnicode(dict->ToUnicode());
|
| + }
|
| +}
|
| +
|
| +std::map<std::string, SkPdfEncoding*>& getStandardEncodings() {
|
| + static std::map<std::string, SkPdfEncoding*> encodings;
|
| + if (encodings.empty()) {
|
| + encodings["Identity-H"] = SkPdfIdentityHEncoding::instance();
|
| + }
|
| +
|
| + return encodings;
|
| +}
|
| +
|
| +
|
| +SkPdfEncoding* SkPdfEncoding::fromName(const char* name) {
|
| + SkPdfEncoding* encoding = getStandardEncodings()[name];
|
| +
|
| +#ifdef PDF_TRACE
|
| + if (encoding == NULL) {
|
| + printf("Encoding not found: %s\n", name);
|
| + }
|
| +#endif
|
| + return encoding;
|
| +}
|
|
|