// 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_STANDARD_OUT_H_
#define TOOLS_GN_STANDARD_OUT_H_

#include <string>

enum TextDecoration {
  DECORATION_NONE = 0,
  DECORATION_DIM,
  DECORATION_RED,
  DECORATION_GREEN,
  DECORATION_BLUE,
  DECORATION_YELLOW
};

enum HtmlEscaping {
  NO_ESCAPING,

  // Convert < and > to &lt; and &gt; when writing markdown output in non-code
  // sections.
  DEFAULT_ESCAPING,
};

void OutputString(const std::string& output,
                  TextDecoration dec = DECORATION_NONE,
                  HtmlEscaping = DEFAULT_ESCAPING);

// If printing markdown, this generates table-of-contents entries with
// links to the actual help; otherwise, prints a one-line description.
void PrintSectionHelp(const std::string& line,
                      const std::string& topic,
                      const std::string& tag);

// Prints a line for a command, assuming there is a colon. Everything before
// the colon is the command (and is highlighted). After the colon if there is
// a square bracket, the contents of the bracket is dimmed.
//
// The line is indented 2 spaces.
void PrintShortHelp(const std::string& line);

// Rules:
// - Lines beginning with non-whitespace are highlighted up to the first
//   colon (or the whole line if not).
// - Lines whose first non-whitespace character is a # are dimmed.
void PrintLongHelp(const std::string& text, const std::string& tag = "");

#endif  // TOOLS_GN_STANDARD_OUT_H_
