// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef TOOLS_GN_STRING_UTILS_H_ #define TOOLS_GN_STRING_UTILS_H_ #include #include "base/strings/string_piece.h" class Err; class Scope; class Token; class Value; inline std::string operator+(const std::string& a, const base::StringPiece& b) { std::string ret; ret.reserve(a.size() + b.size()); ret.assign(a); ret.append(b.data(), b.size()); return ret; } inline std::string operator+(const base::StringPiece& a, const std::string& b) { std::string ret; ret.reserve(a.size() + b.size()); ret.assign(a.data(), a.size()); ret.append(b); return ret; } // Unescapes and expands variables in the given literal, writing the result // to the given value. On error, sets |err| and returns false. bool ExpandStringLiteral(Scope* scope, const Token& literal, Value* result, Err* err); // Returns the minimum number of inserts, deleted, and replacements of // characters needed to transform s1 to s2, or max_edit_distance + 1 if // transforming s1 into s2 isn't possible in at most max_edit_distance steps. size_t EditDistance(const base::StringPiece& s1, const base::StringPiece& s2, size_t max_edit_distance); // Given a string |text| and a vector of correctly-spelled strings |words|, // returns the first string in |words| closest to |text|, or an empty // StringPiece if none of the strings in |words| is close. base::StringPiece SpellcheckString(const base::StringPiece& text, const std::vector& words); #endif // TOOLS_GN_STRING_UTILS_H_