1 /* 2 * Copyright 2013 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkString.h" 9 #include "SkStringUtils.h" 10 11 void SkAddFlagToString(SkString* string, bool flag, const char* flagStr, bool* needSeparator) { 12 if (flag) { 13 if (*needSeparator) { 14 string->append("|"); 15 } 16 string->append(flagStr); 17 *needSeparator = true; 18 } 19 } 20 21 void SkAppendScalar(SkString* str, SkScalar value, SkScalarAsStringType asType) { 22 switch (asType) { 23 case kHex_SkScalarAsStringType: 24 str->appendf("SkBits2Float(0x%08x)", SkFloat2Bits(value)); 25 break; 26 case kDec_SkScalarAsStringType: { 27 SkString tmp; 28 tmp.printf("%g", value); 29 if (tmp.contains('.')) { 30 tmp.appendUnichar('f'); 31 } 32 str->append(tmp); 33 break; 34 } 35 } 36 } 37 38 SkString SkTabString(const SkString& string, int tabCnt) { 39 if (tabCnt <= 0) { 40 return string; 41 } 42 SkString tabs; 43 for (int i = 0; i < tabCnt; ++i) { 44 tabs.append("\t"); 45 } 46 SkString result; 47 static const char newline[] = "\n"; 48 const char* input = string.c_str(); 49 int nextNL = SkStrFind(input, newline); 50 while (nextNL >= 0) { 51 if (nextNL > 0) { 52 result.append(tabs); 53 } 54 result.append(input, nextNL + 1); 55 input += nextNL + 1; 56 nextNL = SkStrFind(input, newline); 57 } 58 if (*input != '\0') { 59 result.append(tabs); 60 result.append(input); 61 } 62 return result; 63 } 64