ArFileParser Class Reference

#include <ArFileParser.h>

List of all members.


Detailed Description

Class for parsing files more easily.

This class helps parse text files based on keywords followed by various values. To use it, add functors of different types of arguments with addHandler(), then call parseFile() to parse the file and invoke the various functors as items are read from the file. parseFile() returns true if there were no errors parsing and false if there were errors.

One side feature is that you can have ONE handler for the keyword NULL, and if there is a line read that isn't entirely comments or whitespace that handler will be given the line. There isn't an explicit set for them since then there'd be another set of 5 adds.

There should be some whitespace after keywords in the file, and any semicolon (;) or hash mark (#) will act as a comment with the rest of the line ignored. (Alternative comment delimeters may be set using setCommentDelimeters()). If no handler exists for the first word the line is passed to the handler above for NULL. You can't have any lines longer than 10000 characters or keywords longer than 512 characters (though I don't know why you'd have either). If you have more than 2048 words on a line you'll have problems as well.

Note:
ArFileParser does not escape any special characters when writing or loading to/from a file. Therefore in general keywords, values, and comments must not contain characters which have special meaning in a config file, such as '#', ';', tab or newline.


Public Member Functions

bool addHandler (const char *keyword, ArRetFunctor1< bool, ArArgumentBuilder * > *functor)
 Adds a functor to handle a keyword that wants an easily parsable string.
bool addHandlerWithError (const char *keyword, ArRetFunctor3< bool, ArArgumentBuilder *, char *, size_t > *functor)
 Adds a functor to handle a keyword that wants an easily parsable string and returns error messages.
 ArFileParser (const char *baseDirectory="./")
 Constructor.
void clearCommentDelimiters ()
 Clears the strings used to mark comments in the file to be parsed.
const char * getBaseDirectory (void) const
 Gets the base directory.
bool parseFile (FILE *file, char *buffer, int bufferLength, bool continueOnErrors=true, char *errorBuffer=NULL, size_t errorBufferLen=0)
 Parses an open file; the file is not closed by this method.
bool parseFile (const char *fileName, bool continueOnErrors=true, bool noFileNotFoundMessage=false, char *errorBuffer=NULL, size_t errorBufferLen=0)
 The function to parse a file.
bool parseLine (char *line, char *errorBuffer=NULL, size_t errorBufferLen=0)
 Function to parse a single line.
bool remHandler (ArRetFunctor3< bool, ArArgumentBuilder *, char *, size_t > *functor)
 Removes any handlers with this functor.
bool remHandler (ArRetFunctor1< bool, ArArgumentBuilder * > *functor)
 Removes any handlers with this functor.
bool remHandler (const char *keyword, bool logIfCannotFind=true)
 Removes a handler for a keyword.
void resetCounters (void)
 Function to reset counters.
void setBaseDirectory (const char *baseDirectory)
 Sets the base directory.
void setCommentDelimiters (const std::list< std::string > &delimiters)
 Sets the strings used to mark comments in the file to be parsed.
void setMaxNumArguments (size_t maxNumArguments=512)
 Sets the maximum number of arguments in a line we can expect.
void setPreParseFunctor (ArFunctor1< const char * > *functor)
void setQuiet (bool isQuiet)
 Turn on this flag to reduce the number of verbose log messages.
 ~ArFileParser (void)
 Destructor.

Protected Attributes

std::string myBaseDir
std::list< std::string > myCommentDelimiterList
bool myIsQuiet
int myLineNumber
std::map< std::string, HandlerCBType *,
ArStrCaseCmpOp
myMap
size_t myMaxNumArguments
ArFunctor1< const char * > * myPreParseFunctor
HandlerCBType * myRemainderHandler


Member Function Documentation

bool ArFileParser::parseFile ( FILE *  file,
char *  buffer,
int  bufferLength,
bool  continueOnErrors = true,
char *  errorBuffer = NULL,
size_t  errorBufferLen = 0 
)

Parses an open file; the file is not closed by this method.

Parameters:
file the open FILE* to be parsed; must not be NULL
buffer a non-NULL char array in which to read the file
bufferLength the number of chars in the buffer; must be greater than 0
continueOnErrors a bool set to true if parsing should continue even after an error is detected


The documentation for this class was generated from the following file:
Generated on Thu Aug 6 09:39:35 2009 for Aria by  doxygen 1.5.1