| Index: src/pdf/SkPDFTypes.cpp
|
| diff --git a/src/pdf/SkPDFTypes.cpp b/src/pdf/SkPDFTypes.cpp
|
| index ba5d6e29e7c22a32b8629e0cb3e3936168a37cc6..2b2921d3fd6b6df144de4464c6dc689ed3b89c4f 100644
|
| --- a/src/pdf/SkPDFTypes.cpp
|
| +++ b/src/pdf/SkPDFTypes.cpp
|
| @@ -7,6 +7,7 @@
|
| */
|
|
|
| #include "SkPDFTypes.h"
|
| +#include "SkPDFUtils.h"
|
| #include "SkStream.h"
|
|
|
| #ifdef SK_BUILD_FOR_WIN
|
| @@ -134,11 +135,11 @@ static void write_string(SkWStream* o, const SkString& s) {
|
| }
|
|
|
| static SkString format_string(const SkString& s) {
|
| - return SkPDFString::FormatString(s.c_str(), s.size());
|
| + return SkPDFUtils::FormatString(s.c_str(), s.size());
|
| }
|
|
|
| static SkString format_string(const char* s) {
|
| - return SkPDFString::FormatString(s, strlen(s));
|
| + return SkPDFUtils::FormatString(s, strlen(s));
|
| }
|
|
|
| void SkPDFUnion::emitObject(SkWStream* stream,
|
| @@ -152,7 +153,7 @@ void SkPDFUnion::emitObject(SkWStream* stream,
|
| stream->writeText(fBoolValue ? "true" : "false");
|
| return;
|
| case Type::kScalar:
|
| - SkPDFScalar::Append(fScalarValue, stream);
|
| + SkPDFUtils::AppendScalar(fScalarValue, stream);
|
| return;
|
| case Type::kName:
|
| stream->writeText("/");
|
| @@ -281,103 +282,6 @@ void SkPDFAtom::addResources(SkPDFObjNumMap* map,
|
| fValue.addResources(map, substitutes);
|
| }
|
| #endif // 0
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -// static
|
| -void SkPDFScalar::Append(SkScalar value, SkWStream* stream) {
|
| - // The range of reals in PDF/A is the same as SkFixed: +/- 32,767 and
|
| - // +/- 1/65,536 (though integers can range from 2^31 - 1 to -2^31).
|
| - // When using floats that are outside the whole value range, we can use
|
| - // integers instead.
|
| -
|
| -#if !defined(SK_ALLOW_LARGE_PDF_SCALARS)
|
| - if (value > 32767 || value < -32767) {
|
| - stream->writeDecAsText(SkScalarRoundToInt(value));
|
| - return;
|
| - }
|
| -
|
| - char buffer[SkStrAppendScalar_MaxSize];
|
| - char* end = SkStrAppendFixed(buffer, SkScalarToFixed(value));
|
| - stream->write(buffer, end - buffer);
|
| - return;
|
| -#endif // !SK_ALLOW_LARGE_PDF_SCALARS
|
| -
|
| -#if defined(SK_ALLOW_LARGE_PDF_SCALARS)
|
| - // Floats have 24bits of significance, so anything outside that range is
|
| - // no more precise than an int. (Plus PDF doesn't support scientific
|
| - // notation, so this clamps to SK_Max/MinS32).
|
| - if (value > (1 << 24) || value < -(1 << 24)) {
|
| - stream->writeDecAsText(value);
|
| - return;
|
| - }
|
| - // Continue to enforce the PDF limits for small floats.
|
| - if (value < 1.0f/65536 && value > -1.0f/65536) {
|
| - stream->writeDecAsText(0);
|
| - return;
|
| - }
|
| - // SkStrAppendFloat might still use scientific notation, so use snprintf
|
| - // directly..
|
| - static const int kFloat_MaxSize = 19;
|
| - char buffer[kFloat_MaxSize];
|
| - int len = SNPRINTF(buffer, kFloat_MaxSize, "%#.8f", value);
|
| - // %f always prints trailing 0s, so strip them.
|
| - for (; buffer[len - 1] == '0' && len > 0; len--) {
|
| - buffer[len - 1] = '\0';
|
| - }
|
| - if (buffer[len - 1] == '.') {
|
| - buffer[len - 1] = '\0';
|
| - }
|
| - stream->writeText(buffer);
|
| - return;
|
| -#endif // SK_ALLOW_LARGE_PDF_SCALARS
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -// static
|
| -
|
| -SkString SkPDFString::FormatString(const char* cin, size_t len) {
|
| - SkASSERT(len <= kMaxLen);
|
| -
|
| - // 7-bit clean is a heuristic to decide what string format to use;
|
| - // a 7-bit clean string should require little escaping.
|
| - bool sevenBitClean = true;
|
| - size_t characterCount = 2 + len;
|
| - for (size_t i = 0; i < len; i++) {
|
| - if (cin[i] > '~' || cin[i] < ' ') {
|
| - sevenBitClean = false;
|
| - break;
|
| - }
|
| - if (cin[i] == '\\' || cin[i] == '(' || cin[i] == ')') {
|
| - ++characterCount;
|
| - }
|
| - }
|
| - SkString result;
|
| - if (sevenBitClean) {
|
| - result.resize(characterCount);
|
| - char* str = result.writable_str();
|
| - *str++ = '(';
|
| - for (size_t i = 0; i < len; i++) {
|
| - if (cin[i] == '\\' || cin[i] == '(' || cin[i] == ')') {
|
| - *str++ = '\\';
|
| - }
|
| - *str++ = cin[i];
|
| - }
|
| - *str++ = ')';
|
| - } else {
|
| - result.resize(2 * len + 2);
|
| - char* str = result.writable_str();
|
| - *str++ = '<';
|
| - for (size_t i = 0; i < len; i++) {
|
| - uint8_t c = static_cast<uint8_t>(cin[i]);
|
| - static const char gHex[] = "0123456789ABCDEF";
|
| - *str++ = gHex[(c >> 4) & 0xF];
|
| - *str++ = gHex[(c ) & 0xF];
|
| - }
|
| - *str++ = '>';
|
| - }
|
| - return result;
|
| -}
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|