// Copyright 2014 The Chromium OS 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 CHROMEOS_DBUS_BINDINGS_INDENTED_TEXT_H_ #define CHROMEOS_DBUS_BINDINGS_INDENTED_TEXT_H_ #include <string> #include <utility> #include <vector> #include <base/macros.h> namespace chromeos_dbus_bindings { class IndentedText { public: IndentedText(); virtual ~IndentedText() = default; // Insert a blank line. void AddBlankLine(); // Insert a block of indented text. void AddBlock(const IndentedText& block); void AddBlockWithOffset(const IndentedText& block, size_t shift); // Add a line at the current indentation. void AddLine(const std::string& line); void AddLineWithOffset(const std::string& line, size_t shift); // Adds a line and pushes an offset past the |nth_occurrence| of character |c| // in that line, effectively allowing to align following line to the position // following that character. void AddLineAndPushOffsetTo(const std::string& line, size_t nth_occurrence, char c); // Adds a block of comments. void AddComments(const std::string& doc_string); // Return a string representing the indented text. std::string GetContents() const; // Return a list of lines representing the intended indented text, not // including the \n. std::vector<std::string> GetLines() const; // Add or remove an offset to the current stack of indentation offsets. void PushOffset(size_t shift); void PopOffset(); // Reset to initial state. void Reset(); private: using IndentedLine = std::pair<std::string, size_t>; friend class IndentedTextTest; size_t offset_; std::vector<size_t> offset_history_; std::vector<IndentedLine> contents_; DISALLOW_COPY_AND_ASSIGN(IndentedText); }; } // namespace chromeos_dbus_bindings #endif // CHROMEOS_DBUS_BINDINGS_INDENTED_TEXT_H_