aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/antlr4_cpp_runtime/src/support/StringUtils.cpp
blob: 9ee274c8de4f4b7ca232413b960231abeeb05ce7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
 * Use of this file is governed by the BSD 3-clause license that
 * can be found in the LICENSE.txt file in the project root.
 */

#include "support/StringUtils.h"

namespace antlrcpp {

  std::string escapeWhitespace(std::string_view in) {
    std::string out;
    escapeWhitespace(out, in);
    out.shrink_to_fit();
    return out;
  }

  std::string& escapeWhitespace(std::string& out, std::string_view in) {
    out.reserve(in.size());  // Best case, no escaping.
    for (const auto &c : in) {
      switch (c) {
        case '\t':
          out.append("\\t");
          break;
        case '\r':
          out.append("\\r");
          break;
        case '\n':
          out.append("\\n");
          break;
        default:
          out.push_back(c);
          break;
      }
    }
    return out;
  }

} // namespace antrlcpp