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
11void 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
21void 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
38SkString 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