| Index: src/pdf/SkPDFFont.cpp | 
| diff --git a/src/pdf/SkPDFFont.cpp b/src/pdf/SkPDFFont.cpp | 
| index 99b633508ffa6b61966be80699d211aebbac2d8a..0fce0b98d6d757e195c2a9648464ebcfd9a5f104 100644 | 
| --- a/src/pdf/SkPDFFont.cpp | 
| +++ b/src/pdf/SkPDFFont.cpp | 
| @@ -421,6 +421,16 @@ struct BFRange { | 
| SkUnichar fUnicode; | 
| }; | 
|  | 
| +static void write_utf16be(SkDynamicMemoryWStream* wStream, SkUnichar utf32) { | 
| +    uint16_t utf16[2] = {0, 0}; | 
| +    size_t len = SkUTF16_FromUnichar(utf32, utf16); | 
| +    SkASSERT(len == 1 || len == 2); | 
| +    SkPDFUtils::WriteUInt16BE(wStream, utf16[0]); | 
| +    if (len == 2) { | 
| +        SkPDFUtils::WriteUInt16BE(wStream, utf16[1]); | 
| +    } | 
| +} | 
| + | 
| static void append_bfchar_section(const SkTDArray<BFChar>& bfchar, | 
| SkDynamicMemoryWStream* cmap) { | 
| // PDF spec defines that every bf* list can have at most 100 entries. | 
| @@ -431,9 +441,9 @@ static void append_bfchar_section(const SkTDArray<BFChar>& bfchar, | 
| cmap->writeText(" beginbfchar\n"); | 
| for (int j = 0; j < count; ++j) { | 
| cmap->writeText("<"); | 
| -            cmap->writeHexAsText(bfchar[i + j].fGlyphId, 4); | 
| +            SkPDFUtils::WriteUInt16BE(cmap, bfchar[i + j].fGlyphId); | 
| cmap->writeText("> <"); | 
| -            cmap->writeHexAsText(bfchar[i + j].fUnicode, 4); | 
| +            write_utf16be(cmap, bfchar[i + j].fUnicode); | 
| cmap->writeText(">\n"); | 
| } | 
| cmap->writeText("endbfchar\n"); | 
| @@ -450,11 +460,11 @@ static void append_bfrange_section(const SkTDArray<BFRange>& bfrange, | 
| cmap->writeText(" beginbfrange\n"); | 
| for (int j = 0; j < count; ++j) { | 
| cmap->writeText("<"); | 
| -            cmap->writeHexAsText(bfrange[i + j].fStart, 4); | 
| +            SkPDFUtils::WriteUInt16BE(cmap, bfrange[i + j].fStart); | 
| cmap->writeText("> <"); | 
| -            cmap->writeHexAsText(bfrange[i + j].fEnd, 4); | 
| +            SkPDFUtils::WriteUInt16BE(cmap, bfrange[i + j].fEnd); | 
| cmap->writeText("> <"); | 
| -            cmap->writeHexAsText(bfrange[i + j].fUnicode, 4); | 
| +            write_utf16be(cmap, bfrange[i + j].fUnicode); | 
| cmap->writeText(">\n"); | 
| } | 
| cmap->writeText("endbfrange\n"); | 
|  |