formatted_output.cpp 957 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "formatted_output.h"
  2. namespace NLastGetopt {
  3. TFormattedOutput::IndentGuard::IndentGuard(TFormattedOutput* output)
  4. : Output(output)
  5. {
  6. Output->IndentLevel_ += 2;
  7. }
  8. TFormattedOutput::IndentGuard::~IndentGuard() {
  9. Output->IndentLevel_ -= 2;
  10. }
  11. TFormattedOutput::IndentGuard TFormattedOutput::Indent() {
  12. return IndentGuard(this);
  13. }
  14. TStringBuilder& TFormattedOutput::Line() {
  15. return Lines_.emplace_back(IndentLevel_, TStringBuilder()).second;
  16. }
  17. void TFormattedOutput::Print(IOutputStream& out) {
  18. for (auto&[indent, line] : Lines_) {
  19. if (indent && !line.empty()) {
  20. TTempBuf buf(indent);
  21. Fill(buf.Data(), buf.Data() + indent, ' ');
  22. out.Write(buf.Data(), indent);
  23. }
  24. out << line;
  25. if (!line.EndsWith('\n')) {
  26. out << Endl;
  27. }
  28. }
  29. }
  30. }