/******************************************************************************
*
* Projet    : DilibDam
* Module    : DamRecord
* Fichier   : DamRecord.h
* Auteur    : Ducloy
*
****************************************************************************
*
* Copyright (c) 1994 CNRS/CRIN & INRIA Lorraine
* 
****************************************************************************
*				     SgmlRecord.h 
*
*     SgmlRecord : Structure intermédiaire pour l'input de données SGML
*
****************************************************************************/

#ifndef _DAM_RECORD_H
#define _DAM_RECORD_H
#include <stdio.h>
#include <string.h>
#include "Buffer.h"
#include "SgmlString.h"



struct DamRecordField_Struct
{
  char            type;
  /*
                      u: undefined
                      C: comment
                      c: Dtd Element treated as comment
                      S: Sgml
                      D: data
  */
  struct DamRecordField_Struct *next;
  int            offsetBeginField;
  int            offsetEndField;
  int            offsetEffectiveBeginField;
  int            offsetEffectiveEndField;
  char           *beginField;
  char           *endField;
  char           *effectiveBeginField;
  char           *effectiveEndField;
};

typedef struct DamRecordField_Struct DamRecordField;

struct DamRecord_Struct
{
  int             purged;
  Buffer         *bufferInput;
  SgmlNode       *recordNode;
  char           *stringBuf;
  int             offset;
  Buffer         *key;
  Buffer         *content;
  char           *tag;
  DamRecordField *first;
  DamRecordField *last;
  DamRecordField *firstFreeList;
  int             pileMark; /* for matching <rec>...<rec>...</rec>...<rec> */
};

typedef struct DamRecord_Struct DamRecord;

DamRecordField *DamRecordField_Create();
DamRecord      *DamRecord_GetData();
DamRecord      *DamRecord_fgets();
DamRecord      *DamRecord_Create();
void            DamRecord_Free();
DamRecord      *DamRecord_Init();
SgmlNode       *DamRecordToSgml();
#define         DamRecordPrint(x) SgmlPrint(x)
#define         DamRecordKey(x) BufferString(x->key)
void DamRecordPrintStdin();

char *DamRecordSeekContent();
char *DamRecordAfterKey();
char *DamRecordGetString();

#endif    /*  _DAM_RECORD_H_ */


