//--------------------------------------------------------------------
//
// BasicDocument.h
//
// 2/6/2002 created for libhtdig to simplify & mimic Document.cc
//
// Neal Richter nealr@rightnow.com
//
//
// BasicDocument: This class holds everything there is to know about a document.
// The actual contents of the document may or may not be present at
// all times for memory conservation reasons.
//
// This is a basic extensable container for plain text holding documents.
//
// Uses any Parser with parse method handling this class.
//
// Part of the ht://Dig package
// Copyright (c) 1995-2004 The ht://Dig Group
// For copyright details, see the file COPYING in your distribution
// or the GNU Library General Public License (LGPL) version 2 or later or later
//
//
// $Id: BasicDocument.h,v 1.4 2004/05/28 13:15:28 lha Exp $
//
//--------------------------------------------------------------------
#ifndef _BasicDocument_h_
#define _BasicDocument_h_
#include "htString.h"
#include "Parsable.h"
#include "Object.h"
#include "StringList.h"
#include "HtDateTime.h"
class TextCollector;
class BasicDocument:public Object
{
public:
//
// Construction/Destruction
//
BasicDocument(char *location = 0, int max_size = 0);
~BasicDocument();
//
// Interface to the document.
//
void Reset();
int Length();
//int StoredLength() {return contents.length();}
char *Title() {return title;}
void Title(char *t) {title = t; document_length = -1;}
void Title(const String & t) {title = t; document_length = -1;}
int TitleLength() {return title.length();}
char *MetaContent() {return metacontent;}
void MetaContent(char *m) {metacontent = m; document_length = -1;}
void MetaContent(const String & m) {metacontent = m; document_length = -1;}
int MetaContentLength() {return metacontent.length();}
char *Contents() {return contents;}
void Contents(char *s) {contents = s; document_length = -1;}
void Contents(const String & s) {contents = s; document_length = -1;}
int ContentsLength() {return contents.length();}
char *Location() {return location;}
void Location(char *l) {location = l; document_length = -1;}
void Location(const String & l) {location = l; document_length = -1;}
int LocationLength() {return location.length();}
char *DocumentID() {return id;}
void DocumentID(char *ida) {id = ida; document_length = -1;}
void DocumentID(const String & ida) {id = ida; document_length = -1;}
int DocumentIDLength() {return id.length();}
char *ContentType() {return contentType;}
void ContentType(char *ct) {contentType = ct;}
void ContentType(const String & ct) {contentType = ct;}
time_t ModTime() {return modtime.GetTime_t();}
void ModTime(time_t t) {modtime = t;}
//
// Return an appropriate parsable object for the document type.
//
Parsable *getParsable();
int internalParser(TextCollector & textcollector);
int SelfParseable();
private:
String id;
String location;
String title;
String metacontent;
String contents;
String contentType;
HtDateTime modtime;
int document_length;
//int max_doc_size;
};
#endif