Make debugger 'text' output less useless.
https://codereview.appspot.com/7588043/


git-svn-id: http://skia.googlecode.com/svn/trunk@8029 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/debugger/SkObjectParser.cpp b/debugger/SkObjectParser.cpp
index a3738db..2d1f140 100644
--- a/debugger/SkObjectParser.cpp
+++ b/debugger/SkObjectParser.cpp
@@ -14,6 +14,7 @@
 #include "SkStream.h"
 #include "SkStringUtils.h"
 #include "SkTypeface.h"
+#include "SkUtils.h"
 
 /* TODO(chudy): Replace all std::strings with char */
 
@@ -318,9 +319,49 @@
     return mScalar;
 }
 
-SkString* SkObjectParser::TextToString(const void* text, size_t byteLength) {
-    SkString* mText = new SkString(6+byteLength+1);
-    mText->append("Text: ");
-    mText->append((char*) text, byteLength);
-    return mText;
+SkString* SkObjectParser::TextToString(const void* text, size_t byteLength,
+                                       SkPaint::TextEncoding encoding) {
+
+    SkString* decodedText = new SkString();
+    switch (encoding) {
+        case SkPaint::kUTF8_TextEncoding: {
+            decodedText->append("UTF-8: ");
+            decodedText->append((const char*)text, byteLength);
+            break;
+        }
+        case SkPaint::kUTF16_TextEncoding: {
+            decodedText->append("UTF-16: ");
+            size_t sizeNeeded = SkUTF16_ToUTF8((uint16_t*)text, byteLength / 2, NULL);
+            char* utf8 = new char[sizeNeeded];
+            SkUTF16_ToUTF8((uint16_t*)text, byteLength / 2, utf8);
+            decodedText->append(utf8, sizeNeeded);
+            delete utf8;
+            break;
+        }
+        case SkPaint::kUTF32_TextEncoding: {
+            decodedText->append("UTF-32: ");
+            const SkUnichar* begin = (const SkUnichar*)text;
+            const SkUnichar* end = (const SkUnichar*)((const char*)text + byteLength);
+            for (const SkUnichar* unichar = begin; unichar < end; ++unichar) {
+                decodedText->appendUnichar(*unichar);
+            }
+            break;
+        }
+        case SkPaint::kGlyphID_TextEncoding: {
+            decodedText->append("GlyphID: ");
+            const uint16_t* begin = (const uint16_t*)text;
+            const uint16_t* end = (const uint16_t*)((const char*)text + byteLength);
+            for (const uint16_t* glyph = begin; glyph < end; ++glyph) {
+                decodedText->append("0x");
+                decodedText->appendHex(*glyph);
+                decodedText->append(" ");
+            }
+            break;
+        }
+        default:
+            decodedText->append("Unknown text encoding.");
+            break;
+    }
+
+    return decodedText;
 }