summaryrefslogtreecommitdiffstats
path: root/Source/cmDocumentation.h
blob: 2735143296c60f1b4aeabde0a819c9984788af03 (plain)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*=========================================================================

  Program:   CMake - Cross-Platform Makefile Generator
  Module:    $RCSfile$
  Language:  C++
  Date:      $Date$
  Version:   $Revision$

  Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
  See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.

     This software is distributed WITHOUT ANY WARRANTY; without even 
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#ifndef _cmDocumentation_h
#define _cmDocumentation_h

#include "cmStandardIncludes.h"

/** Class to generate documentation.  */
class cmDocumentation
{
public:
  cmDocumentation();
  
  enum Type { None, Usage, Help, HelpHTML, Man, Copyright, Version };
  
  void Print(Type ht, std::ostream& os);
  void PrintUsage(std::ostream& os);
  void PrintHelp(std::ostream& os);
  void PrintHelpHTML(std::ostream& os);
  void PrintManPage(std::ostream& os);
  void PrintCopyright(std::ostream& os);
  void PrintVersion(std::ostream& os);
  
  void SetCommands(const cmDocumentationEntry* d)    {this->Commands = d;}
  void SetDescription(const cmDocumentationEntry* d) {this->Description = d;}
  void SetName(const cmDocumentationEntry* d)        {this->Name = d;}
  void SetOptions(const cmDocumentationEntry* d);
  void SetUsage(const cmDocumentationEntry* d)       {this->UsageHelp = d;}
  
  Type CheckOptions(int argc, char** argv);
private:
  void PrintColumn(std::ostream& os, int width,
                   const char* indent, const char* text);
  void PrintManSection(std::ostream& os, const cmDocumentationEntry* section,
                       const char* name);
  void PrintHelpSection(std::ostream& os, const cmDocumentationEntry* section);
  void PrintHTMLEscapes(std::ostream& os, const char* text);
  void PrintHTMLFull(std::ostream& os, const char* text);
  void PrintHelpHTMLSection(std::ostream& os,
                            const cmDocumentationEntry* section,
                            const char* header);
  void PrintUsageSection(std::ostream& os,
                         const cmDocumentationEntry* section);
  
  const cmDocumentationEntry* Commands;
  const cmDocumentationEntry* Description;
  const cmDocumentationEntry* Name;
  std::vector<cmDocumentationEntry> Options;
  const cmDocumentationEntry* UsageHelp;
};

#endif