Merge "Normalize output from aapt d"

This commit is contained in:
Dianne Hackborn
2011-01-29 22:53:20 -08:00
committed by Android Code Review
3 changed files with 39 additions and 4 deletions

View File

@ -1983,6 +1983,7 @@ public:
#ifndef HAVE_ANDROID_OS #ifndef HAVE_ANDROID_OS
void print(bool inclValues) const; void print(bool inclValues) const;
static String8 normalizeForOutput(const char* input);
#endif #endif
private: private:

View File

@ -4038,6 +4038,38 @@ void print_complex(uint32_t complex, bool isFraction)
} }
} }
// Normalize a string for output
String8 ResTable::normalizeForOutput( const char *input )
{
String8 ret;
char buff[2];
buff[1] = '\0';
while (*input != '\0') {
switch (*input) {
// All interesting characters are in the ASCII zone, so we are making our own lives
// easier by scanning the string one byte at a time.
case '\\':
ret += "\\\\";
break;
case '\n':
ret += "\\n";
break;
case '"':
ret += "\\\"";
break;
default:
buff[0] = *input;
ret += buff;
break;
}
input++;
}
return ret;
}
void ResTable::print_value(const Package* pkg, const Res_value& value) const void ResTable::print_value(const Package* pkg, const Res_value& value) const
{ {
if (value.dataType == Res_value::TYPE_NULL) { if (value.dataType == Res_value::TYPE_NULL) {
@ -4051,13 +4083,13 @@ void ResTable::print_value(const Package* pkg, const Res_value& value) const
const char* str8 = pkg->header->values.string8At( const char* str8 = pkg->header->values.string8At(
value.data, &len); value.data, &len);
if (str8 != NULL) { if (str8 != NULL) {
printf("(string8) \"%s\"\n", str8); printf("(string8) \"%s\"\n", normalizeForOutput(str8).string());
} else { } else {
const char16_t* str16 = pkg->header->values.stringAt( const char16_t* str16 = pkg->header->values.stringAt(
value.data, &len); value.data, &len);
if (str16 != NULL) { if (str16 != NULL) {
printf("(string16) \"%s\"\n", printf("(string16) \"%s\"\n",
String8(str16, len).string()); normalizeForOutput(String8(str16, len).string()).string());
} else { } else {
printf("(string) null\n"); printf("(string) null\n");
} }

View File

@ -451,13 +451,15 @@ void printXMLBlock(ResXMLTree* block)
printf("=?0x%x", (int)value.data); printf("=?0x%x", (int)value.data);
} else if (value.dataType == Res_value::TYPE_STRING) { } else if (value.dataType == Res_value::TYPE_STRING) {
printf("=\"%s\"", printf("=\"%s\"",
String8(block->getAttributeStringValue(i, &len)).string()); ResTable::normalizeForOutput(String8(block->getAttributeStringValue(i,
&len)).string()).string());
} else { } else {
printf("=(type 0x%x)0x%x", (int)value.dataType, (int)value.data); printf("=(type 0x%x)0x%x", (int)value.dataType, (int)value.data);
} }
const char16_t* val = block->getAttributeStringValue(i, &len); const char16_t* val = block->getAttributeStringValue(i, &len);
if (val != NULL) { if (val != NULL) {
printf(" (Raw: \"%s\")", String8(val).string()); printf(" (Raw: \"%s\")", ResTable::normalizeForOutput(String8(val).string()).
string());
} }
printf("\n"); printf("\n");
} }