#ifndef __TIDY_INT_H__
#define __TIDY_INT_H__
#include "tidy.h"
#include "config.h"
#include "lexer.h"
#include "tags.h"
#include "attrs.h"
#include "pprint.h"
#include "access.h"
#ifndef MAX
#define MAX(a,b) (((a) > (b))?(a):(b))
#endif
#ifndef MIN
#define MIN(a,b) (((a) < (b))?(a):(b))
#endif
struct _TidyDocImpl
{
Node root;
Lexer* lexer;
TidyConfigImpl config;
TidyTagImpl tags;
TidyAttribImpl attribs;
#if SUPPORT_ACCESSIBILITY_CHECKS
TidyAccessImpl access;
#endif
TidyPrintImpl pprint;
StreamIn* docIn;
StreamOut* docOut;
StreamOut* errout;
TidyReportFilter mssgFilt;
TidyOptCallback pOptCallback;
uint optionErrors;
uint errors;
uint warnings;
uint accessErrors;
uint infoMessages;
uint docErrors;
int parseStatus;
uint badAccess;
uint badLayout;
uint badChars;
uint badForm;
void* appData;
uint nClassId;
Bool inputHadBOM;
#ifdef TIDY_STORE_ORIGINAL_TEXT
Bool storeText;
#endif
#if PRESERVE_FILE_TIMES
struct utimbuf filetimes;
#endif
tmbstr givenDoctype;
};
#ifdef NEVER
TidyDocImpl* tidyDocToImpl( TidyDoc tdoc );
TidyDoc tidyImplToDoc( TidyDocImpl* impl );
Node* tidyNodeToImpl( TidyNode tnod );
TidyNode tidyImplToNode( Node* node );
AttVal* tidyAttrToImpl( TidyAttr tattr );
TidyAttr tidyImplToAttr( AttVal* attval );
const TidyOptionImpl* tidyOptionToImpl( TidyOption topt );
TidyOption tidyImplToOption( const TidyOptionImpl* option );
#else
#define tidyDocToImpl( tdoc ) ((TidyDocImpl*)(tdoc))
#define tidyImplToDoc( doc ) ((TidyDoc)(doc))
#define tidyNodeToImpl( tnod ) ((Node*)(tnod))
#define tidyImplToNode( node ) ((TidyNode)(node))
#define tidyAttrToImpl( tattr ) ((AttVal*)(tattr))
#define tidyImplToAttr( attval ) ((TidyAttr)(attval))
#define tidyOptionToImpl( topt ) ((const TidyOptionImpl*)(topt))
#define tidyImplToOption( option ) ((TidyOption)(option))
#endif
#ifdef TIDY_APPLE_CHANGES
#pragma GCC visibility push(default)
#endif
TidyDocImpl* tidyDocCreate(void);
void tidyDocRelease( TidyDocImpl* impl );
int tidyDocStatus( TidyDocImpl* impl );
int tidyDocParseFile( TidyDocImpl* impl, ctmbstr htmlfil );
int tidyDocParseStdin( TidyDocImpl* impl );
int tidyDocParseString( TidyDocImpl* impl, ctmbstr content );
int tidyDocParseBuffer( TidyDocImpl* impl, TidyBuffer* inbuf );
int tidyDocParseSource( TidyDocImpl* impl, TidyInputSource* docIn );
int tidyDocParseStream( TidyDocImpl* impl, StreamIn* in );
int tidyDocRunDiagnostics( TidyDocImpl* doc );
int tidyDocCleanAndRepair( TidyDocImpl* doc );
int tidyDocSaveFile( TidyDocImpl* impl, ctmbstr htmlfil );
int tidyDocSaveStdout( TidyDocImpl* impl );
int tidyDocSaveString( TidyDocImpl* impl, tmbstr buffer, uint* buflen );
int tidyDocSaveBuffer( TidyDocImpl* impl, TidyBuffer* outbuf );
int tidyDocSaveSink( TidyDocImpl* impl, TidyOutputSink* docOut );
int tidyDocSaveStream( TidyDocImpl* impl, StreamOut* out );
#ifdef TIDY_APPLE_CHANGES
#pragma GCC visibility pop
#endif
#endif