All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Classes | Public Member Functions | Static Public Member Functions
GpCoreTools::ApplicationHelp Class Reference

Brief description of class still missing. More...

#include <ApplicationHelp.h>

List of all members.

Classes

struct  Example
struct  Option
struct  OptionGroup

Public Member Functions

void addExample (const char *command, const char *comments)
void addGroup (const char *title, const char *section)
void addOption (const char *option, const char *comments)
 ApplicationHelp ()
void exec (const char *group=0)
std::list< const char * > sections ()
void setComments (const char *comments)
void setOptionSummary (const char *optionSummary)
void setSeeAlso (const char *seeAlso)
 ~ApplicationHelp ()

Static Public Member Functions

static std::string getLine (std::string &text, int maxLength, bool *newLine=0)
static void print (std::string p, const std::string &linePrefix="", int indent=0)

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing

{
}

Description of destructor still missing

{
}

Member Function Documentation

void GpCoreTools::ApplicationHelp::addExample ( const char *  command,
const char *  comments 
)
{
  Example o;
  o.command=command;
  o.comments=comments;
  _examples.push_back(o);
}
void GpCoreTools::ApplicationHelp::addGroup ( const char *  title,
const char *  section 
)

Referenced by help(), and GpCoreTools::CoreApplication::setHelp().

{
  OptionGroup g;
  g.title=title;
  g.section=section;
  _options.push_back(g);
}
void GpCoreTools::ApplicationHelp::addOption ( const char *  option,
const char *  comments 
)

Referenced by help(), and GpCoreTools::CoreApplication::setHelp().

{
  OptionGroup& g=_options.back();
  Option o;
  o.option=option;
  o.comments=comments;
  g.options.push_back(o);
}
void GpCoreTools::ApplicationHelp::exec ( const char *  group = 0)

References GpCoreTools::CoreApplication::authors(), GpCoreTools::CoreApplication::instance(), and print().

Referenced by GpCoreTools::CoreApplication::showHelp().

{
  if(group) {
    if(strcmp(group,"html")==0) {
      execHtml();
      return;
    }
  }

  printf("\nUsage: %s %s\n\n", CoreApplication::instance()->applicationName(), _optionSummary.data());
  print(_comments, "", 0);
  if(group) {
    if(strcmp(group, "all")==0) {
      for(std::list<OptionGroup>::iterator it=_options.begin(); it!=_options.end(); it++ ) {
        print( *it);
      }
    } else if(strncmp(group, "no-", 3)==0) {
      group+=3;
      for(std::list<OptionGroup>::iterator it=_options.begin(); it!=_options.end(); it++ ) {
        if(strcmp(group, it->section.data())!=0) {
          print( *it);
        }
      }
    } else {
      for(std::list<OptionGroup>::iterator it=_options.begin(); it!=_options.end(); it++ ) {
        if(strcmp(group, it->section.data())==0) {
          print( *it);
        }
      }
    }
  } else if(!_options.empty()) {
    print(_options.front());
    if(_options.size()>1) print(_options.back());
  }
  if( !_examples.empty()) {
    printf("\nExamples:\n");
    for(std::list<Example>::iterator it=_examples.begin(); it!=_examples.end(); it++ ) {
      Example& o=*it;
      printf("\n");
      print(o.command, "", 9);
      printf("\n");
      print(o.comments, "", 2);
    }
  }
  printf("\nSee also:\n");
  if( !_seeAlso.empty()) {
    print(_seeAlso, "", 2);
  }
  print("More information at http://www.geopsy.org", "", 2);
  printf("\nAuthors:\n");
  print(CoreApplication::authors()+"\n", "", 2);
}
std::string GpCoreTools::ApplicationHelp::getLine ( std::string &  text,
int  maxLength,
bool *  newLine = 0 
) [static]

Returns the first line of text. The first line is removed from text. newLine is set to true if a '
' is encountered else it is set to false.

Referenced by print().

{
  if(maxLength<10) {
    std::string line=text;
    text="";
    return line;
  }
  std::string line=text;
  int index=text.find_first_of("\n");
  if(index>-1) {
    if(index<=maxLength) {
      text=text.substr(index+1);
      line=line.substr(0, index);
      if(newLine) *newLine=true;
      return line;
    }
  }
  if((int)text.length()<=maxLength) {
    text.clear();
    if(newLine) *newLine=false;
    return line;
  }
  line=line.substr(0, maxLength);
  index=line.find_last_of(" ");
  if(maxLength>20 && index>maxLength-20) {
    text=text.substr(index+1); // skip the blank
    line=line.substr(0, index);
    if(newLine) *newLine=false;
    return line;
  }
  text=text.substr(0, maxLength);
  if(newLine) *newLine=false;
  return line;
}
void GpCoreTools::ApplicationHelp::print ( std::string  p,
const std::string &  linePrefix = "",
int  indent = 0 
) [static]

Print string p to stdout. Prefix linePrefix and indent indent are inserted before each line. app.terminalCols() is the maximum number of characters per line.

References getLine(), and GpCoreTools::CoreApplication::instance().

Referenced by exec().

{
  std::string line;
  std::string mainIndentStr, customIndentStr;
  bool newLine=true;
  mainIndentStr.assign(indent, ' ');
  while(!p.empty()) {
    bool lastNewLine=newLine;
    line=getLine(p, CoreApplication::instance()->terminalCols()-indent-linePrefix.size()-customIndentStr.size(), &newLine);
    printf("%s%s%s%s\n", linePrefix.data(), mainIndentStr.data(), customIndentStr.data(), line.data());
    if(lastNewLine && !newLine) {
      // Set indent by the position of the last double space
      customIndentStr=getCustomIndent(line);
      newLine=false;
    } else if(newLine) {
      customIndentStr="";
    }
  }
}
std::list< const char * > GpCoreTools::ApplicationHelp::sections ( )

Returns the list of sections

Referenced by GpCoreTools::CoreApplication::setHelp().

{
  std::list<const char *> l;
  for(std::list<OptionGroup>::iterator it=_options.begin(); it!=_options.end(); it++ ) {
    l.push_back(it->section.data());
  }
  if( !_examples.empty()) {
    l.push_back("examples");
  }
  return l;
}
void GpCoreTools::ApplicationHelp::setComments ( const char *  comments) [inline]

Referenced by help().

{_comments=comments;}
void GpCoreTools::ApplicationHelp::setOptionSummary ( const char *  optionSummary) [inline]

Referenced by help().

{_optionSummary=optionSummary;}
void GpCoreTools::ApplicationHelp::setSeeAlso ( const char *  seeAlso) [inline]
{_seeAlso=seeAlso;}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines