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