/**
 * THis is the header file for the object parser.  It is based on some
 * code by Scatter at Dawn Whispers to achive it's parsing.
 * <pre>
 * File name    : newparser.h
 * Creator      : Scatter
 * Creation date: 2000-04-20
 * </pre>
 *
 * Revision history:
 * Date        Creator   Desc
 * 2000-04-20  Scatter   File created.
 * 2000-05-20  Pinkfish  Modified for Discworld
 */
#ifndef ___OBJ_PARSER_H
/** @ignore yes */
#define ___OBJ_PARSER_H
#ifndef OBJ_PARSER_NO_CLASSES
/**
 * The class used for object matching returns.
 * @entry result the result of the operation
 * @entry objects the objects which were matched or errored on
 * @entry text the text which matched or was errored on
 */
class obj_match {
   int result;
   object *objects;
   string text;
}
/**
 * This class used to retain context over various invocations of the parser.
 * @entry ordinal the ordinal number to check, ie: 1st, 2nd
 * @entry number_included used with plurals, ie: 2 frogs
 * @entry fraction the fraction of the object to get ie: ({ 1, 20 })
 * @entry ignore_rest a flag set to say that all the rest of the matches
 * are irrelvant
 * @entry him the object corresponding to the him result
 * @entry her the object corresponding to the her result
 * @entry it the object corresponding to the it result
 * @entry plural the objects matching to the 'them' result
 */
class obj_match_context {
   int ordinal;
   int number_included;
   int *fraction;
   int ignore_rest;
   int no_ambiguous;
   object him;
   object her;
   object it;
   object* plural;
}
#endif
/** The return result was correctly matched. */
#define OBJ_PARSER_SUCCESS         100
/**
 * There was no match on the string in the text field of the obj_match
 * class.
 */
#define OBJ_PARSER_NO_MATCH        315
/**
 * It is too dark to match on the string in the text field of the obj_match
 * class.
 */
#define OBJ_PARSER_TOO_DARK        316
/**
 * It is not possible to do fractional matches on multiple objects.
 * The objects field has the objects it failed to match on and the text it
 * failed to match on.
 */
#define OBJ_PARSER_FRACTION        317
/**
 * The fraction specified is invalid.  The fraction is in the text field of
 * the class.
 */
#define OBJ_PARSER_BAD_FRACTION    318
/**
 * This is only used inside the player objects.  Means that you cannot do
 * remove player actions from this location.
 */
#define OBJ_PARSER_BAD_ENVIRONMENT 319
/**
 * This is only used inside the player object.  It says that the matched
 * objects were not living.
 */
#define OBJ_PARSER_NOT_LIVING      320
/**
 * THis means an ambiguous match was noticed.  An ambiguous match is
 * where 'bag' matches more than one bag and the player did not force
 * it to recognise a specific one.
 */
#define OBJ_PARSER_AMBIGUOUS       322
/**
 * This means that not enough of the specified object were matched.  For
 * example if someone did '5 coins' and only 3 were matched.
 */
#define OBJ_PARSER_NOT_ENOUGH      323
/** The flag to say that the match is a singular id. */
#define OBJ_PARSER_MATCH_SINGULAR 4
/** The flag to say that the match is a plural id. */
#define OBJ_PARSER_MATCH_PLURAL   16
/** The value of the singular parameter, means it matches multiple objects. */
#define OBJ_PARSER_MULTIUPLE   0
/** The value of the singular parameter, means it matches a single object. */
#define OBJ_PARSER_SINGULAR    1
/**
 * The value of the singular parameter, means it matches everything and
 * ignores failure results.
 */
#define OBJ_PARSER_EXISTENCE   2
/** The index of the match type in the return array. */
#define OBJ_PARSER_MATCH_TYPE     0
/** The index of the objects in the return array. */
#define OBJ_PARSER_OBJECTS        1
/**
 * This property controls if the player will be informed of ambiguous
 * references or not.
 */
#define OBJ_PARSER_AMBIGUOUS_PROP "no ambiguous"
/**
 * This number signifies that the word "every" was matched
 * (in number_included).
 */
#define EVERY_NUM 18729487
#endif