00001 /* 00002 This product contains certain software code or other information 00003 ("AT&T Software") proprietary to AT&T Corp. ("AT&T"). The AT&T 00004 Software is provided to you "AS IS". YOU ASSUME TOTAL RESPONSIBILITY 00005 AND RISK FOR USE OF THE AT&T SOFTWARE. AT&T DOES NOT MAKE, AND 00006 EXPRESSLY DISCLAIMS, ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND 00007 WHATSOEVER, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 00008 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, WARRANTIES OF 00009 TITLE OR NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS, ANY 00010 WARRANTIES ARISING BY USAGE OF TRADE, COURSE OF DEALING OR COURSE OF 00011 PERFORMANCE, OR ANY WARRANTY THAT THE AT&T SOFTWARE IS "ERROR FREE" OR 00012 WILL MEET YOUR REQUIREMENTS. 00013 00014 Unless you accept a license to use the AT&T Software, you shall not 00015 reverse compile, disassemble or otherwise reverse engineer this 00016 product to ascertain the source code for any AT&T Software. 00017 00018 (c) AT&T Corp. All rights reserved. AT&T is a registered trademark of AT&T Corp. 00019 00020 *********************************************************************** 00021 00022 History: 00023 00024 24/11/99 - initial release by Hartmut Liefke, liefke@seas.upenn.edu 00025 Dan Suciu, suciu@research.att.com 00026 */ 00027 00028 //************************************************************************** 00029 //************************************************************************** 00030 00031 // This module contains the SAX-Client. The interface used is very similar to SAX. 00032 00033 #ifndef SAX_CLIENT 00034 #define SAX_CLIENT 00035 00036 #include "MemStreamer.hpp" 00037 #include "PathTree.hpp" 00038 #include "LabelDict.hpp" 00039 #include "Compress.hpp" 00040 00041 void PrintLabel(char *str,int len); 00042 00043 // XMLParse contains the XML parser that calls the SAX client. 00044 class XMLParse; 00045 extern XMLParse *xmlparser; 00046 00047 class SAXClient 00048 { 00049 public: 00050 00051 static void HandleAttribName(char *str,int len,char iscont); 00052 // Handles a given attribute name 00053 // 'iscont' is one, if the string is not complete and more is to follow 00054 00055 static void HandleAttribValue(char *str,int len,char iscont); 00056 // Handles an attribute value 00057 // 'iscont' is one, if the string is not complete and more is to follow 00058 00059 static void HandleAttribWhiteSpaces(char *str,int len,char iscont); 00060 // Handles white spaces between attribute-value pairs 00061 // 'iscont' is one, if the string is not complete and more is to follow 00062 00063 static void HandleStartLabel(char *str,int len,char iscont); 00064 // Handles a start tag 00065 // 'iscont' is one, if the string is not complete and more is to follow 00066 00067 static void HandleEndLabel(char *str,int len,char iscont); 00068 // Handles an end tag 00069 // 'iscont' is one, if the string is not complete and more is to follow 00070 00071 static void HandleText(char *str,int len,char iscont,int leftwslen,int rightwslen); 00072 // Handles a piece of text. 00073 // 'leftwslen' and 'rightwslen' specify how many white spaces (' ', '\n', ...) 00074 // are on the left and right end of the text. 00075 // If 'iscont=1', then 'rightwslen' must be zero and for the text piece 00076 // coming afterwards, 'leftwslen' must be zero. 00077 // It is also possible that 'len=leftwslen=rightwslen' 00078 00079 static void HandleComment(char *str,int len,char iscont); 00080 // Handles a piece of comment data 00081 00082 static void HandlePI(char *str,int len,char iscont); 00083 // Handles a piece of processing instruction data 00084 00085 static void HandleDOCTYPE(char *str,int len,char iscont); 00086 // Handles a piece of DOCTYPE data 00087 00088 static void HandleCDATA(char *str,int len,char iscont); 00089 // Handles a piece of CDATA data 00090 }; 00091 00092 #endif