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
SkAddFlagToString(SkString * string,bool flag,const char * flagStr,bool * needSeparator)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
SkAppendScalar(SkString * str,SkScalar value,SkScalarAsStringType asType)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
SkTabString(const SkString & string,int tabCnt)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