diff --git a/Projects/Win32/BCB6/Xerces-all/SAX2Print/SAX2Print.bpr b/Projects/Win32/BCB6/Xerces-all/SAX2Print/SAX2Print.bpr index 2d3ea6cca271b5f5681111c29c5631e7208fc926..25bb16579d1cb1173669478a0fccef65016d7aa7 100644 --- a/Projects/Win32/BCB6/Xerces-all/SAX2Print/SAX2Print.bpr +++ b/Projects/Win32/BCB6/Xerces-all/SAX2Print/SAX2Print.bpr @@ -5,7 +5,8 @@ <VERSION value="BCB.06.00"/> <PROJECT value="..\..\..\..\..\Build\Win32\BCB6\SAX2Print.exe"/> <OBJFILES value="..\..\..\..\..\Build\Win32\BCB6\obj\SAX2Print.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2PrintHandlers.obj"/> + ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2PrintHandlers.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2FilterHandlers.obj"/> <RESFILES value=""/> <IDLFILES value=""/> <DEFFILE value=""/> diff --git a/Projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr b/Projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr index 016bdd9dbf24c51bc1bbb18be6c1aa366efc3910..18cd8a6f6a8aedcd172af39738e4c8d3ae0e9289 100644 --- a/Projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr +++ b/Projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr @@ -133,6 +133,7 @@ ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractDOMParser.obj ..\..\..\..\..\Build\Win32\BCB6\obj\DOMBuilderImpl.obj ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLReaderImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLFilterImpl.obj ..\..\..\..\..\Build\Win32\BCB6\obj\SAXParser.obj ..\..\..\..\..\Build\Win32\BCB6\obj\XercesDOMParser.obj ..\..\..\..\..\Build\Win32\BCB6\obj\AllContentModel.obj @@ -530,6 +531,7 @@ <FILE FILENAME="..\..\..\..\..\src\xercesc\parsers\AbstractDOMParser.cpp" FORMNAME="" UNITNAME="AbstractDOMParser" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="..\..\..\..\..\src\xercesc\parsers\DOMBuilderImpl.cpp" FORMNAME="" UNITNAME="DOMBuilderImpl" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="..\..\..\..\..\src\xercesc\parsers\SAX2XMLReaderImpl.cpp" FORMNAME="" UNITNAME="SAX2XMLReaderImpl" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> + <FILE FILENAME="..\..\..\..\..\src\xercesc\parsers\SAX2XMLFilterImpl.cpp" FORMNAME="" UNITNAME="SAX2XMLFilterImpl" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="..\..\..\..\..\src\xercesc\parsers\SAXParser.cpp" FORMNAME="" UNITNAME="SAXParser" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="..\..\..\..\..\src\xercesc\parsers\XercesDOMParser.cpp" FORMNAME="" UNITNAME="XercesDOMParser" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="..\..\..\..\..\src\xercesc\validators\common\AllContentModel.cpp" FORMNAME="" UNITNAME="AllContentModel" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> diff --git a/Projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.mak b/Projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.mak index a2ebe9f7e9297dc25b4bbb9af202faddf062d50e..c48a1e5aed6d9281ab97799fe65af7bfdcfa46ca 100644 --- a/Projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.mak +++ b/Projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.mak @@ -131,6 +131,7 @@ OBJFILES = ..\..\..\..\..\Build\Win32\BCB6\obj\Xerceslib.obj \ ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractDOMParser.obj \ ..\..\..\..\..\Build\Win32\BCB6\obj\DOMBuilderImpl.obj \ ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLReaderImpl.obj \ + ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLFilterImpl.obj \ ..\..\..\..\..\Build\Win32\BCB6\obj\SAXParser.obj \ ..\..\..\..\..\Build\Win32\BCB6\obj\XercesDOMParser.obj \ ..\..\..\..\..\Build\Win32\BCB6\obj\AllContentModel.obj \ diff --git a/Projects/Win32/BCC.551/Xerces-all/SAX2Print/SAX2Print.mak b/Projects/Win32/BCC.551/Xerces-all/SAX2Print/SAX2Print.mak index a5fafc122c7c21fac2f81a049c1c660c478a39f0..078b8b9c3ff24163d6fa1c0295fc3bb1a5928b2d 100644 --- a/Projects/Win32/BCC.551/Xerces-all/SAX2Print/SAX2Print.mak +++ b/Projects/Win32/BCC.551/Xerces-all/SAX2Print/SAX2Print.mak @@ -6,7 +6,8 @@ BCB = $(MAKEDIR)\.. TARGETPATH=..\..\..\..\..\Build\Win32\BCC.551 PROJECT = $(TARGETPATH)\SAX2Print.exe OBJFILES = $(TARGETPATH)\obj\SAX2Print.obj \ - $(TARGETPATH)\obj\SAX2PrintHandlers.obj + $(TARGETPATH)\obj\SAX2PrintHandlers.obj \ + $(TARGETPATH)\obj\SAX2FilterHandlers.obj RESFILES = MAINSOURCE = SAX2Print.cpp RESDEPEN = $(RESFILES) diff --git a/Projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak b/Projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak index e52c773b2f36ca84f1c65d2c5da28c8e53ceb051..c982eab139fc2b6ae85e1b512016cd8267856844 100644 --- a/Projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak +++ b/Projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak @@ -161,6 +161,7 @@ OBJFILES = $(TARGETPATH)\obj\XercesLib.obj \ $(TARGETPATH)\obj\XMLReader.obj \ $(TARGETPATH)\obj\XMLScanner.obj \ $(TARGETPATH)\obj\SAX2XMLReaderImpl.obj \ + $(TARGETPATH)\obj\SAX2XMLFilterImpl.obj \ $(TARGETPATH)\obj\SAXParser.obj \ $(TARGETPATH)\obj\DOMAttrImpl.obj \ $(TARGETPATH)\obj\DOMAttrMapImpl.obj \ diff --git a/Projects/Win32/VC6/xerces-all/SAX2Print/SAX2Print.dsp b/Projects/Win32/VC6/xerces-all/SAX2Print/SAX2Print.dsp index 7c61cec2a6f6bb4162e71f041332455662c8c8fb..75cc2b0cc37657c53921d88ec2da5e319d02b8fc 100644 --- a/Projects/Win32/VC6/xerces-all/SAX2Print/SAX2Print.dsp +++ b/Projects/Win32/VC6/xerces-all/SAX2Print/SAX2Print.dsp @@ -43,17 +43,15 @@ RSC=rc.exe # PROP Intermediate_Dir "..\..\..\..\..\Build\Win32\VC6\Release\obj" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /G6 /MD /Za /W3 /GX /O2 /Ob2 /I "..\..\..\..\..\src" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c +# ADD BASE CPP /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /G6 /MD /Za /W3 /GX /O2 /Ob2 /I "..\..\..\..\..\src" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe -# ADD BASE BSC32 -# ADD BSC32 LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib xerces-c_2.lib /version:1.0 /subsystem:console /incremental:yes /machine:I386 /libpath:"..\..\..\..\..\Build\Win32\VC6\Release" +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib xerces-c_2.lib /version:1.0 /subsystem:console /incremental:yes /machine:I386 /libpath:"..\..\..\..\..\Build\Win32\VC6\Release" !ELSEIF "$(CFG)" == "SAX2Print - Win32 Debug" @@ -68,17 +66,15 @@ LINK32=link.exe # PROP Intermediate_Dir "..\..\..\..\..\Build\Win32\VC6\Debug\obj" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c +# ADD BASE CPP /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe -# ADD BASE BSC32 -# ADD BSC32 LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib xerces-c_2D.lib /version:1.0 /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\Build\Win32\VC6\Debug" +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib xerces-c_2D.lib /version:1.0 /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\Build\Win32\VC6\Debug" !ELSEIF "$(CFG)" == "SAX2Print - Win64 Debug" @@ -94,18 +90,16 @@ LINK32=link.exe # PROP Intermediate_Dir "..\..\..\..\..\Build\Win64\VC6\Debug\obj" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c +# ADD BASE CPP /G6 /MDd /Za /W3 /Gm /GX /ZI /Od /I "..\..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c # SUBTRACT BASE CPP /YX # ADD CPP /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\..\src" /D "WIN64" /D "_DEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe -# ADD BASE BSC32 -# ADD BSC32 LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib xerces-c_2D.lib /version:1.0 /subsystem:console /debug /pdbtype:sept /libpath:"..\..\..\..\..\Build\Win32\VC6\Debug" -# ADD LINK32 kernel32.lib user32.lib xerces-c_2D.lib /version:1.0 /subsystem:console /debug /pdbtype:sept /libpath:"..\..\..\..\..\Build\Win64\VC6\Debug" /machine:IA64 -# SUBTRACT LINK32 /pdb:none +# ADD BASE LINK32 kernel32.lib user32.lib xerces-c_2D.lib /version:1.0 /subsystem:console /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\..\..\Build\Win32\VC6\Debug" +# ADD LINK32 kernel32.lib user32.lib xerces-c_2D.lib /version:1.0 /subsystem:console /debug /machine:IX86 /pdbtype:sept /libpath:"..\..\..\..\..\Build\Win64\VC6\Debug" /machine:IA64 +# SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "SAX2Print - Win64 Release" @@ -121,18 +115,16 @@ LINK32=link.exe # PROP Intermediate_Dir "..\..\..\..\..\Build\Win64\VC6\Release\obj" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /G6 /MD /Za /W3 /GX /O2 /Ob2 /I "..\..\..\..\..\src" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c +# ADD BASE CPP /G6 /MD /Za /W3 /GX /O2 /Ob2 /I "..\..\..\..\..\src" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c # SUBTRACT BASE CPP /YX -# ADD CPP /MD /Ze /W3 /GX /O2 /Ob2 /I "..\..\..\..\..\src" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c +# ADD CPP /MD /W3 /GX /O2 /Ob2 /I "..\..\..\..\..\src" /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "WIN32" /D "_WINDOWS" /D "PLATFORM_WIN32" /FD /c # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe -# ADD BASE BSC32 -# ADD BSC32 LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib xerces-c_2.lib /version:1.0 /subsystem:console /incremental:yes /libpath:"..\..\..\..\..\Build\Win32\VC6\Release" -# ADD LINK32 kernel32.lib user32.lib xerces-c_2.lib /version:1.0 /subsystem:console /incremental:yes /libpath:"..\..\..\..\..\Build\Win64\VC6\Release" /machine:IA64 -# SUBTRACT LINK32 /pdb:none +# ADD BASE LINK32 kernel32.lib user32.lib xerces-c_2.lib /version:1.0 /subsystem:console /incremental:yes /machine:IX86 /libpath:"..\..\..\..\..\Build\Win32\VC6\Release" +# ADD LINK32 kernel32.lib user32.lib xerces-c_2.lib /version:1.0 /subsystem:console /incremental:yes /machine:IX86 /libpath:"..\..\..\..\..\Build\Win64\VC6\Release" /machine:IA64 +# SUBTRACT LINK32 /pdb:none !ENDIF @@ -144,6 +136,14 @@ LINK32=link.exe # Name "SAX2Print - Win64 Release" # Begin Source File +SOURCE=..\..\..\..\..\samples\SAX2Print\SAX2FilterHandlers.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\..\samples\SAX2Print\SAX2FilterHandlers.hpp +# End Source File +# Begin Source File + SOURCE=..\..\..\..\..\samples\SAX2Print\SAX2Print.cpp # End Source File # Begin Source File diff --git a/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp b/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp index b6cfabe138bf78a2543363a907495fe69a9874ce..5c5630e61d7e1d4cb905c32726989b728bdc9fe9 100644 --- a/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp +++ b/Projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp @@ -72,7 +72,6 @@ LINK32=link.exe # PROP Target_Dir "" # ADD BASE CPP /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /G6 /MDd /Za /W3 /Gm /GX /Zi /Od /I "..\..\..\..\..\src" /D "_CRTDBG_MAP_ALLOC" /D "PROJ_SAX2" /D "_DEBUG" /D "PROJ_XMLPARSER" /D "PROJ_XMLUTIL" /D "PROJ_PARSERS" /D "PROJ_SAX4C" /D "PROJ_DOM" /D "PROJ_VALIDATORS" /D "XML_SINGLEDLL" /D "WIN32" /D "_WINDOWS" /D "XML_USE_WIN32_TRANSCODER" /D "XML_USE_WIN32_MSGLOADER" /D "XML_USE_NETACCESSOR_WINSOCK" /FR /FD /c -# SUBTRACT CPP /YX # ADD BASE MTL /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" @@ -1752,6 +1751,14 @@ SOURCE=..\..\..\..\..\src\xercesc\parsers\DOMBuilderImpl.hpp # End Source File # Begin Source File +SOURCE=..\..\..\..\..\src\xercesc\parsers\SAX2XMLFilterImpl.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\..\src\xercesc\parsers\SAX2XMLFilterImpl.hpp +# End Source File +# Begin Source File + SOURCE=..\..\..\..\..\src\xercesc\parsers\SAX2XMLReaderImpl.cpp # End Source File # Begin Source File @@ -2556,6 +2563,10 @@ SOURCE=..\..\..\..\..\src\xercesc\sax2\sax2Dummy.cpp # End Source File # Begin Source File +SOURCE=..\..\..\..\..\src\xercesc\sax2\SAX2XMLFilter.hpp +# End Source File +# Begin Source File + SOURCE=..\..\..\..\..\src\xercesc\sax2\SAX2XMLReader.hpp # End Source File # Begin Source File diff --git a/Projects/Win32/VC7.1/xerces-all/SAX2Print/SAX2Print.vcproj b/Projects/Win32/VC7.1/xerces-all/SAX2Print/SAX2Print.vcproj index af0cb3cbddfbf35ce77b4e106d57865278aaeaba..821d96499f40b5ff32620ec1d67271eb928550f5 100644 --- a/Projects/Win32/VC7.1/xerces-all/SAX2Print/SAX2Print.vcproj +++ b/Projects/Win32/VC7.1/xerces-all/SAX2Print/SAX2Print.vcproj @@ -251,6 +251,12 @@ <References> </References> <Files> + <File + RelativePath="..\..\..\..\..\samples\SAX2Print\SAX2FilterHandlers.cpp"> + </File> + <File + RelativePath="..\..\..\..\..\samples\SAX2Print\SAX2FilterHandlers.hpp"> + </File> <File RelativePath="..\..\..\..\..\samples\SAX2Print\SAX2Print.cpp"> </File> diff --git a/Projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj b/Projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj index fbc8b09f87793b1905e8a49654bebc0800c695b4..1680203f4de14b32174637b6d020f866a491d85d 100644 --- a/Projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj +++ b/Projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj @@ -1604,6 +1604,12 @@ <File RelativePath="..\..\..\..\..\src\xercesc\parsers\DOMBuilderImpl.hpp"> </File> + <File + RelativePath="..\..\..\..\..\src\xercesc\parsers\SAX2XMLFilterImpl.cpp"> + </File> + <File + RelativePath="..\..\..\..\..\src\xercesc\parsers\SAX2XMLFilterImpl.hpp"> + </File> <File RelativePath="..\..\..\..\..\src\xercesc\parsers\SAX2XMLReaderImpl.cpp"> </File> @@ -2214,6 +2220,9 @@ <File RelativePath="..\..\..\..\..\src\xercesc\sax2\sax2Dummy.cpp"> </File> + <File + RelativePath="..\..\..\..\..\src\xercesc\sax2\SAX2XMLFilter.hpp"> + </File> <File RelativePath="..\..\..\..\..\src\xercesc\sax2\SAX2XMLReader.hpp"> </File> diff --git a/Projects/Win32/VC7/xerces-all/SAX2Print/SAX2Print.vcproj b/Projects/Win32/VC7/xerces-all/SAX2Print/SAX2Print.vcproj index b0090b5b178abb49f5030193527f3063b34266d0..dbd8ce27d5c76128a3c2faa6917bf271c39805d8 100644 --- a/Projects/Win32/VC7/xerces-all/SAX2Print/SAX2Print.vcproj +++ b/Projects/Win32/VC7/xerces-all/SAX2Print/SAX2Print.vcproj @@ -131,6 +131,12 @@ <File RelativePath="..\..\..\..\..\samples\SAX2Print\SAX2PrintHandlers.hpp"> </File> + <File + RelativePath="..\..\..\..\..\samples\SAX2Print\SAX2FilterHandlers.cpp"> + </File> + <File + RelativePath="..\..\..\..\..\samples\SAX2Print\SAX2FilterHandlers.hpp"> + </File> </Files> <Globals> </Globals> diff --git a/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj b/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj index ba63d3d29382b5e2151f05c23d6cb6f26a849dda..994ca56324bd07ddf498eb0ffedd3b5e5f89a65e 100644 --- a/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj +++ b/Projects/Win32/VC7/xerces-all/XercesLib/XercesLib.vcproj @@ -1374,6 +1374,12 @@ <File RelativePath="..\..\..\..\..\src\xercesc\parsers\SAX2XMLReaderImpl.hpp"> </File> + <File + RelativePath="..\..\..\..\..\src\xercesc\parsers\SAX2XMLFilterImpl.cpp"> + </File> + <File + RelativePath="..\..\..\..\..\src\xercesc\parsers\SAX2XMLFilterImpl.hpp"> + </File> <File RelativePath="..\..\..\..\..\src\xercesc\parsers\SAXParser.cpp"> </File> @@ -1972,6 +1978,9 @@ <File RelativePath="..\..\..\..\..\src\xercesc\sax2\SAX2XMLReader.hpp"> </File> + <File + RelativePath="..\..\..\..\..\src\xercesc\sax2\SAX2XMLFilter.hpp"> + </File> <File RelativePath="..\..\..\..\..\src\xercesc\sax2\XMLReaderFactory.hpp"> </File> diff --git a/samples/SAX2Print/Makefile.in b/samples/SAX2Print/Makefile.in index 5e233a2432090a0779deb22b9a334863cdd2e806..e5b0c3ecc171245cb75b0ae23b3024001cacaa66 100644 --- a/samples/SAX2Print/Makefile.in +++ b/samples/SAX2Print/Makefile.in @@ -47,9 +47,9 @@ APP_NAME=SAX2Print OUTDIR= ${XERCESCOUT}/bin/obj/${APP_NAME} EXEC= ${XERCESCOUT}/bin -OBJS= ${OUTDIR}/SAX2Print.o ${OUTDIR}/SAX2PrintHandlers.o +OBJS= ${OUTDIR}/SAX2Print.o ${OUTDIR}/SAX2PrintHandlers.o ${OUTDIR}/SAX2FilterHandlers.o SRC= ${XERCESCOUT}/samples/${APP_NAME} -HEADER_FILES=${SRC}/SAX2Print.hpp ${SRC}/SAX2PrintHandlers.hpp +HEADER_FILES=${SRC}/SAX2Print.hpp ${SRC}/SAX2PrintHandlers.hpp ${SRC}/SAX2FilterHandlers.hpp ## OS390BATCH ifeq (${OS390BATCH},1) @@ -73,6 +73,9 @@ $(OUTDIR)/SAX2Print.o:: ${SRC}/SAX2Print.cpp ${HEADER_FILES} $(OUTDIR)/SAX2PrintHandlers.o:: ${SRC}/SAX2PrintHandlers.cpp ${HEADER_FILES} ${CC} ${INCLUDES} ${CMP} -o $(OUTDIR)/SAX2PrintHandlers.o ${SRC}/SAX2PrintHandlers.cpp +$(OUTDIR)/SAX2FilterHandlers.o:: ${SRC}/SAX2FilterHandlers.cpp ${HEADER_FILES} + ${CC} ${INCLUDES} ${CMP} -o $(OUTDIR)/SAX2FilterHandlers.o ${SRC}/SAX2FilterHandlers.cpp + clean:: rm -f ${OBJS} ${EXEC}/${APP_NAME} diff --git a/samples/SAX2Print/SAX2Print.cpp b/samples/SAX2Print/SAX2Print.cpp index b5bd746abe8d1384dfd9d173d79703319fd322b6..d1346018a3948d62d3db0f0651e243caf4fd481f 100644 --- a/samples/SAX2Print/SAX2Print.cpp +++ b/samples/SAX2Print/SAX2Print.cpp @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.18 2004/12/24 19:21:46 amassari + * Add support for SAX2 filters (jira# 1133) + * * Revision 1.17 2004/09/08 13:55:33 peiyongz * Apache License Version 2.0 * @@ -81,6 +84,7 @@ #include <xercesc/sax2/XMLReaderFactory.hpp> #include "SAX2Print.hpp" #include <xercesc/util/OutOfMemoryException.hpp> +#include "SAX2FilterHandlers.hpp" // --------------------------------------------------------------------------- // Local data @@ -109,6 +113,7 @@ static bool doNamespaces = true; static bool doSchema = true; static bool schemaFullChecking = false; static bool namespacePrefixes = false; +static bool sortAttributes = false; // --------------------------------------------------------------------------- @@ -132,6 +137,7 @@ static void usage() " NOTE: THIS IS OPPOSITE FROM OTHER SAMPLES.\n" " -s Disable schema processing. Defaults to on.\n" " NOTE: THIS IS OPPOSITE FROM OTHER SAMPLES.\n" + " -sa Print the attributes in alfabetic order. Defaults to off.\n" " -? Show this help.\n\n" " * = Default if not provided explicitly.\n\n" "The parser has intrinsic support for the following encodings:\n" @@ -248,6 +254,10 @@ int main(int argC, char* argV[]) || !strcmp(argV[parmInd], "-P")) { namespacePrefixes = true; + } + else if (!strcmp(argV[parmInd], "-sa")) + { + sortAttributes = true; } else { @@ -272,7 +282,16 @@ int main(int argC, char* argV[]) // Create a SAX parser object. Then, according to what we were told on // the command line, set it to validate or not. // - SAX2XMLReader* parser = XMLReaderFactory::createXMLReader(); + SAX2XMLReader* parser; + SAX2XMLReader* reader = XMLReaderFactory::createXMLReader(); + SAX2XMLReader* filter = NULL; + if(sortAttributes) + { + filter=new SAX2SortAttributesFilter(reader); + parser=filter; + } + else + parser=reader; // // Then, according to what we were told on @@ -337,7 +356,9 @@ int main(int argC, char* argV[]) // // Delete the parser itself. Must be done prior to calling Terminate, below. // - delete parser; + delete reader; + if(filter) + delete filter; // And call the termination method XMLPlatformUtils::Terminate(); diff --git a/scripts/sanityTest.pl b/scripts/sanityTest.pl index 96326f4263f66a4c999942a906b1903b5104ffdd..0c637cf003ffff066841a87f8352e743c19b90ca 100644 --- a/scripts/sanityTest.pl +++ b/scripts/sanityTest.pl @@ -71,6 +71,8 @@ system ("SAX2Print"); system ("SAX2Print -v=never personal.xml"); system ("SAX2Print personal.xml"); system ("SAX2Print -p personal-schema.xml"); +system ("SAX2Print personal.xsd"); +system ("SAX2Print -sa personal.xsd"); # Run MemParse system ("MemParse"); diff --git a/scripts/sanityTest_ExpectedResult.log b/scripts/sanityTest_ExpectedResult.log index d6f800e09ff38c132e244beb040de894cf732e68..1674302336b779d59fac60d18933903435265821 100644 --- a/scripts/sanityTest_ExpectedResult.log +++ b/scripts/sanityTest_ExpectedResult.log @@ -208,6 +208,7 @@ Options: NOTE: THIS IS OPPOSITE FROM OTHER SAMPLES. -s Disable schema processing. Defaults to on. NOTE: THIS IS OPPOSITE FROM OTHER SAMPLES. + -sa Print the attributes in alfabetic order. Defaults to off. -? Show this help. * = Default if not provided explicitly. @@ -333,7 +334,221 @@ The parser has intrinsic support for the following encodings: <link manager="Big.Boss"></link> </person> -</personnel> +</personnel><?xml version="1.0" encoding="LATIN1"?> +<xs:schema> + + <xs:import namespace="http://www.w3.org/XML/1998/namespace"> + <xs:annotation> + <xs:documentation> + The schemaLocation of the relevant file is + "http://www.w3.org/2001/xml.xsd"; however, + we don't want to assume people are always + connected to the 'net when playing with this file. + </xs:documentation> + </xs:annotation> + </xs:import> + + <xs:element name="personnel"> + <xs:complexType> + <xs:sequence> + <xs:element ref="person" minOccurs="1" maxOccurs="unbounded"></xs:element> + </xs:sequence> + </xs:complexType> + + <xs:unique name="unique1"> + <xs:selector xpath="person"></xs:selector> + <xs:field xpath="name/given"></xs:field> + <xs:field xpath="name/family"></xs:field> + </xs:unique> + <xs:key name="empid"> + <xs:selector xpath="person"></xs:selector> + <xs:field xpath="@id"></xs:field> + </xs:key> + <xs:keyref name="keyref1" refer="empid"> + <xs:selector xpath="person"></xs:selector> + <xs:field xpath="link/@manager"></xs:field> + </xs:keyref> + + </xs:element> + + <xs:element name="person"> + <xs:complexType> + <xs:sequence> + <xs:element ref="name"></xs:element> + <xs:element ref="email" minOccurs="0" maxOccurs="unbounded"></xs:element> + <xs:element ref="url" minOccurs="0" maxOccurs="unbounded"></xs:element> + <xs:element ref="link" minOccurs="0" maxOccurs="1"></xs:element> + </xs:sequence> + <xs:attribute name="id" type="xs:ID" use="required"></xs:attribute> + <xs:attribute name="note" type="xs:string"></xs:attribute> + <xs:attribute name="contr" default="false"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="true"></xs:enumeration> + <xs:enumeration value="false"></xs:enumeration> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + <xs:attribute name="salary" type="xs:integer"></xs:attribute> + <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"></xs:anyAttribute> + </xs:complexType> + </xs:element> + + <xs:element name="name"> + <xs:complexType> + <xs:all> + <xs:element ref="family"></xs:element> + <xs:element ref="given"></xs:element> + </xs:all> + <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"></xs:anyAttribute> + </xs:complexType> + </xs:element> + + <xs:element name="family"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"></xs:anyAttribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + + <xs:element name="given"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"></xs:anyAttribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + + <xs:element name="email" type="xs:string"></xs:element> + + <xs:element name="url"> + <xs:complexType> + <xs:attribute name="href" type="xs:string" default="http://"></xs:attribute> + </xs:complexType> + </xs:element> + + <xs:element name="link"> + <xs:complexType> + <xs:attribute name="manager" type="xs:IDREF"></xs:attribute> + <xs:attribute name="subordinates" type="xs:IDREFS"></xs:attribute> + </xs:complexType> + </xs:element> + + <xs:notation name="gif" public="-//APP/Photoshop/4.0" system="photoshop.exe"></xs:notation> + +</xs:schema><?xml version="1.0" encoding="LATIN1"?> +<xs:schema> + + <xs:import namespace="http://www.w3.org/XML/1998/namespace"> + <xs:annotation> + <xs:documentation> + The schemaLocation of the relevant file is + "http://www.w3.org/2001/xml.xsd"; however, + we don't want to assume people are always + connected to the 'net when playing with this file. + </xs:documentation> + </xs:annotation> + </xs:import> + + <xs:element name="personnel"> + <xs:complexType> + <xs:sequence> + <xs:element maxOccurs="unbounded" minOccurs="1" ref="person"></xs:element> + </xs:sequence> + </xs:complexType> + + <xs:unique name="unique1"> + <xs:selector xpath="person"></xs:selector> + <xs:field xpath="name/given"></xs:field> + <xs:field xpath="name/family"></xs:field> + </xs:unique> + <xs:key name="empid"> + <xs:selector xpath="person"></xs:selector> + <xs:field xpath="@id"></xs:field> + </xs:key> + <xs:keyref name="keyref1" refer="empid"> + <xs:selector xpath="person"></xs:selector> + <xs:field xpath="link/@manager"></xs:field> + </xs:keyref> + + </xs:element> + + <xs:element name="person"> + <xs:complexType> + <xs:sequence> + <xs:element ref="name"></xs:element> + <xs:element maxOccurs="unbounded" minOccurs="0" ref="email"></xs:element> + <xs:element maxOccurs="unbounded" minOccurs="0" ref="url"></xs:element> + <xs:element maxOccurs="1" minOccurs="0" ref="link"></xs:element> + </xs:sequence> + <xs:attribute name="id" type="xs:ID" use="required"></xs:attribute> + <xs:attribute name="note" type="xs:string"></xs:attribute> + <xs:attribute default="false" name="contr"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="true"></xs:enumeration> + <xs:enumeration value="false"></xs:enumeration> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + <xs:attribute name="salary" type="xs:integer"></xs:attribute> + <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"></xs:anyAttribute> + </xs:complexType> + </xs:element> + + <xs:element name="name"> + <xs:complexType> + <xs:all> + <xs:element ref="family"></xs:element> + <xs:element ref="given"></xs:element> + </xs:all> + <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"></xs:anyAttribute> + </xs:complexType> + </xs:element> + + <xs:element name="family"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"></xs:anyAttribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + + <xs:element name="given"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"></xs:anyAttribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + + <xs:element name="email" type="xs:string"></xs:element> + + <xs:element name="url"> + <xs:complexType> + <xs:attribute default="http://" name="href" type="xs:string"></xs:attribute> + </xs:complexType> + </xs:element> + + <xs:element name="link"> + <xs:complexType> + <xs:attribute name="manager" type="xs:IDREF"></xs:attribute> + <xs:attribute name="subordinates" type="xs:IDREFS"></xs:attribute> + </xs:complexType> + </xs:element> + + <xs:notation name="gif" public="-//APP/Photoshop/4.0" system="photoshop.exe"></xs:notation> + +</xs:schema> Finished parsing the memory buffer containing the following XML statements: <?xml version='1.0' encoding='ascii'?> diff --git a/src/xercesc/parsers/Makefile.in b/src/xercesc/parsers/Makefile.in index 4feb74f3deee36281e046498223e4c309dfdde86..d49093aab4ef385576f07ecc3aa0829e0feb7d4a 100644 --- a/src/xercesc/parsers/Makefile.in +++ b/src/xercesc/parsers/Makefile.in @@ -45,7 +45,8 @@ PARSERS_CPP_PUBHEADERS = \ DOMBuilderImpl.hpp \ XercesDOMParser.hpp \ SAXParser.hpp \ - SAX2XMLReaderImpl.hpp + SAX2XMLReaderImpl.hpp \ + SAX2XMLFilterImpl.hpp PARSERS_CPP_PRIVHEADERS = @@ -56,7 +57,8 @@ PARSERS_CPP_OBJECTS = \ DOMBuilderImpl.$(TO) \ XercesDOMParser.$(TO) \ SAXParser.$(TO) \ - SAX2XMLReaderImpl.$(TO) + SAX2XMLReaderImpl.$(TO) \ + SAX2XMLFilterImpl.$(TO) XML_INCL := $(XML_INCL) -I$(XERCESCROOT)/src diff --git a/src/xercesc/parsers/SAX2XMLFilterImpl.cpp b/src/xercesc/parsers/SAX2XMLFilterImpl.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7b2df228122308b6b35054a87fd58321e1a4c076 --- /dev/null +++ b/src/xercesc/parsers/SAX2XMLFilterImpl.cpp @@ -0,0 +1,419 @@ +/* + * Copyright 1999-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * $Log$ + * Revision 1.1 2004/12/24 19:21:46 amassari + * Add support for SAX2 filters (jira# 1133) + * + */ + +#include <xercesc/parsers/SAX2XMLFilterImpl.hpp> + +XERCES_CPP_NAMESPACE_BEGIN + +SAX2XMLFilterImpl::SAX2XMLFilterImpl(SAX2XMLReader* parent) : + fParentReader(0) + , fDocHandler(0) + , fDTDHandler(0) + , fEntityResolver(0) + , fErrorHandler(0) +{ + setParent(parent); +} + +SAX2XMLFilterImpl::~SAX2XMLFilterImpl() +{ +} + +// --------------------------------------------------------------------------- +// SAX2XMLFilterImpl: XMLFilter impl +// --------------------------------------------------------------------------- +void SAX2XMLFilterImpl::setParent(SAX2XMLReader* parent) +{ + if(fParentReader) + { + fParentReader->setEntityResolver(0); + fParentReader->setDTDHandler(0); + fParentReader->setContentHandler(0); + fParentReader->setErrorHandler(0); + } + fParentReader=parent; + if(fParentReader) + { + fParentReader->setEntityResolver(this); + fParentReader->setDTDHandler(this); + fParentReader->setContentHandler(this); + fParentReader->setErrorHandler(this); + } +} + +bool SAX2XMLFilterImpl::getExitOnFirstFatalError() const +{ + if(fParentReader) + fParentReader->getExitOnFirstFatalError(); + return false; +} + +bool SAX2XMLFilterImpl::getValidationConstraintFatal() const +{ + if(fParentReader) + fParentReader->getValidationConstraintFatal(); + return false; +} + +Grammar* SAX2XMLFilterImpl::getRootGrammar() +{ + if(fParentReader) + fParentReader->getRootGrammar(); + return NULL; +} + +const XMLCh* SAX2XMLFilterImpl::getURIText(unsigned int uriId) const +{ + if(fParentReader) + fParentReader->getURIText(uriId); + return NULL; +} + +unsigned int SAX2XMLFilterImpl::getSrcOffset() const +{ + if(fParentReader) + fParentReader->getSrcOffset(); + return 0; +} + +// --------------------------------------------------------------------------- +// SAX2XMLFilterImpl Validator functions +// --------------------------------------------------------------------------- +void SAX2XMLFilterImpl::setValidator(XMLValidator* valueToAdopt) +{ + if(fParentReader) + fParentReader->setValidator(valueToAdopt); +} + +XMLValidator* SAX2XMLFilterImpl::getValidator() const +{ + if(fParentReader) + return fParentReader->getValidator(); + return 0; +} + +// --------------------------------------------------------------------------- +// SAX2XMLReader Interface +// --------------------------------------------------------------------------- +int SAX2XMLFilterImpl::getErrorCount() const +{ + if(fParentReader) + return fParentReader->getErrorCount(); + return 0; +} + +void SAX2XMLFilterImpl::setExitOnFirstFatalError(const bool newState) +{ + if(fParentReader) + fParentReader->setExitOnFirstFatalError(newState); +} + +void SAX2XMLFilterImpl::setValidationConstraintFatal(const bool newState) +{ + if(fParentReader) + fParentReader->setValidationConstraintFatal(newState); +} + +void SAX2XMLFilterImpl::parse (const InputSource& source) +{ + if(fParentReader) + fParentReader->parse(source); +} + +void SAX2XMLFilterImpl::parse (const XMLCh* const systemId) +{ + if(fParentReader) + fParentReader->parse(systemId); +} + +void SAX2XMLFilterImpl::parse (const char* const systemId) +{ + if(fParentReader) + fParentReader->parse(systemId); +} + +// --------------------------------------------------------------------------- +// SAX2XMLFilterImpl: Progressive parse methods +// --------------------------------------------------------------------------- +bool SAX2XMLFilterImpl::parseFirst( const XMLCh* const systemId + , XMLPScanToken& toFill) +{ + if(fParentReader) + return fParentReader->parseFirst(systemId, toFill); + return false; +} + +bool SAX2XMLFilterImpl::parseFirst( const char* const systemId + , XMLPScanToken& toFill) +{ + if(fParentReader) + fParentReader->parseFirst(systemId, toFill); + return false; +} + +bool SAX2XMLFilterImpl::parseFirst( const InputSource& source + , XMLPScanToken& toFill) +{ + if(fParentReader) + fParentReader->parseFirst(source, toFill); + return false; +} + +bool SAX2XMLFilterImpl::parseNext(XMLPScanToken& token) +{ + if(fParentReader) + fParentReader->parseNext(token); + return false; +} + +void SAX2XMLFilterImpl::parseReset(XMLPScanToken& token) +{ + if(fParentReader) + fParentReader->parseReset(token); +} + +// --------------------------------------------------------------------------- +// SAX2XMLFilterImpl: Features and Properties +// --------------------------------------------------------------------------- + +void SAX2XMLFilterImpl::setFeature(const XMLCh* const name, const bool value) +{ + if(fParentReader) + fParentReader->setFeature(name,value); +} + +bool SAX2XMLFilterImpl::getFeature(const XMLCh* const name) const +{ + if(fParentReader) + return fParentReader->getFeature(name); + return false; +} + +void SAX2XMLFilterImpl::setProperty(const XMLCh* const name, void* value) +{ + if(fParentReader) + fParentReader->setProperty(name,value); +} + +void* SAX2XMLFilterImpl::getProperty(const XMLCh* const name) const +{ + if(fParentReader) + return fParentReader->getProperty(name); + return NULL; +} + +// --------------------------------------------------------------------------- +// SAX2XMLFilterImpl: Grammar preparsing +// --------------------------------------------------------------------------- +Grammar* SAX2XMLFilterImpl::loadGrammar(const char* const systemId, + const short grammarType, + const bool toCache) +{ + if(fParentReader) + return fParentReader->loadGrammar(systemId, grammarType, toCache); + return NULL; +} + +Grammar* SAX2XMLFilterImpl::loadGrammar(const XMLCh* const systemId, + const short grammarType, + const bool toCache) +{ + if(fParentReader) + return fParentReader->loadGrammar(systemId, grammarType, toCache); + return NULL; +} + +Grammar* SAX2XMLFilterImpl::loadGrammar(const InputSource& source, + const short grammarType, + const bool toCache) +{ + if(fParentReader) + return fParentReader->loadGrammar(source, grammarType, toCache); + return NULL; +} + +void SAX2XMLFilterImpl::resetCachedGrammarPool() +{ + if(fParentReader) + fParentReader->resetCachedGrammarPool(); +} + +void SAX2XMLFilterImpl::setInputBufferSize(const size_t bufferSize) +{ + if(fParentReader) + fParentReader->setInputBufferSize(bufferSize); +} + +Grammar* SAX2XMLFilterImpl::getGrammar(const XMLCh* const nameSpaceKey) +{ + if(fParentReader) + return fParentReader->getGrammar(nameSpaceKey); + return NULL; +} + +// ----------------------------------------------------------------------- +// Implementation of the EntityResolver interface +// ----------------------------------------------------------------------- +InputSource* SAX2XMLFilterImpl::resolveEntity(const XMLCh* const publicId + , const XMLCh* const systemId) +{ + if(fEntityResolver) + return fEntityResolver->resolveEntity(publicId, systemId); + return 0; +} + +// ----------------------------------------------------------------------- +// Implementation of the DTDHandler interface +// ----------------------------------------------------------------------- +void SAX2XMLFilterImpl::notationDecl( const XMLCh* const name + , const XMLCh* const publicId + , const XMLCh* const systemId) +{ + if(fDTDHandler) + fDTDHandler->notationDecl(name, publicId, systemId); +} + +void SAX2XMLFilterImpl::unparsedEntityDecl(const XMLCh* const name + , const XMLCh* const publicId + , const XMLCh* const systemId + , const XMLCh* const notationName) +{ + if(fDTDHandler) + fDTDHandler->unparsedEntityDecl(name, publicId, systemId, notationName); +} + +void SAX2XMLFilterImpl::resetDocType() +{ + if(fDTDHandler) + fDTDHandler->resetDocType(); +} + +// ----------------------------------------------------------------------- +// Implementation of the ContentHandler interface +// ----------------------------------------------------------------------- + +void SAX2XMLFilterImpl::characters(const XMLCh* const chars + , const unsigned int length) +{ + if(fDocHandler) + fDocHandler->characters(chars, length); +} + +void SAX2XMLFilterImpl::endDocument() +{ + if(fDocHandler) + fDocHandler->endDocument(); +} + +void SAX2XMLFilterImpl::endElement(const XMLCh* const uri + , const XMLCh* const localname + , const XMLCh* const qname) +{ + if(fDocHandler) + fDocHandler->endElement(uri, localname, qname); +} + +void SAX2XMLFilterImpl::ignorableWhitespace(const XMLCh* const chars + , const unsigned int length) +{ + if(fDocHandler) + fDocHandler->ignorableWhitespace(chars, length); +} + +void SAX2XMLFilterImpl::processingInstruction(const XMLCh* const target + , const XMLCh* const data) +{ + if(fDocHandler) + fDocHandler->processingInstruction(target, data); +} + +void SAX2XMLFilterImpl::setDocumentLocator(const Locator* const locator) +{ + if(fDocHandler) + fDocHandler->setDocumentLocator(locator); +} + +void SAX2XMLFilterImpl::startDocument() +{ + if(fDocHandler) + fDocHandler->startDocument(); +} + +void SAX2XMLFilterImpl::startElement(const XMLCh* const uri + , const XMLCh* const localname + , const XMLCh* const qname + , const Attributes& attrs) +{ + if(fDocHandler) + fDocHandler->startElement(uri, localname, qname, attrs); +} + +void SAX2XMLFilterImpl::startPrefixMapping(const XMLCh* const prefix + , const XMLCh* const uri) +{ + if(fDocHandler) + fDocHandler->startPrefixMapping(prefix, uri); +} + +void SAX2XMLFilterImpl::endPrefixMapping(const XMLCh* const prefix) +{ + if(fDocHandler) + fDocHandler->endPrefixMapping(prefix); +} + +void SAX2XMLFilterImpl::skippedEntity(const XMLCh* const name) +{ + if(fDocHandler) + fDocHandler->skippedEntity(name); +} + +// ----------------------------------------------------------------------- +// Implementation of the ErrorHandler interface +// ----------------------------------------------------------------------- + +void SAX2XMLFilterImpl::warning(const SAXParseException& exc) +{ + if(fErrorHandler) + fErrorHandler->warning(exc); +} + +void SAX2XMLFilterImpl::error(const SAXParseException& exc) +{ + if(fErrorHandler) + fErrorHandler->error(exc); +} + +void SAX2XMLFilterImpl::fatalError(const SAXParseException& exc) +{ + if(fErrorHandler) + fErrorHandler->fatalError(exc); +} + +void SAX2XMLFilterImpl::resetErrors() +{ + if(fErrorHandler) + fErrorHandler->resetErrors(); +} + +XERCES_CPP_NAMESPACE_END + diff --git a/src/xercesc/parsers/SAX2XMLFilterImpl.hpp b/src/xercesc/parsers/SAX2XMLFilterImpl.hpp new file mode 100644 index 0000000000000000000000000000000000000000..465398a6d4d6b53ede9f86ecc46db82f70f2ac5d --- /dev/null +++ b/src/xercesc/parsers/SAX2XMLFilterImpl.hpp @@ -0,0 +1,1450 @@ +/* + * Copyright 1999-2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * $Log$ + * Revision 1.1 2004/12/24 19:21:46 amassari + * Add support for SAX2 filters (jira# 1133) + * + */ + +#if !defined(SAX2XMLFilterImpl_HPP) +#define SAX2XMLFilterImpl_HPP + +#include <xercesc/sax2/SAX2XMLFilter.hpp> +#include <xercesc/sax/EntityResolver.hpp> +#include <xercesc/sax/DTDHandler.hpp> +#include <xercesc/sax2/ContentHandler.hpp> +#include <xercesc/sax/ErrorHandler.hpp> + +XERCES_CPP_NAMESPACE_BEGIN + +/** + * This class implements the SAX2 'XMLFilterImpl' interface and should be + * used by applications as the base class for their SAX2 filters. + * This implementation simply forwards every call to the parent object. + * + */ + +class PARSERS_EXPORT SAX2XMLFilterImpl : + public SAX2XMLFilter + , public EntityResolver + , public DTDHandler + , public ContentHandler + , public ErrorHandler +{ +public : + // ----------------------------------------------------------------------- + // Constructors and Destructor + // ----------------------------------------------------------------------- + /** @name Constructors and Destructor */ + //@{ + /** The default constructor */ + SAX2XMLFilterImpl(SAX2XMLReader* parent); + + /** The destructor */ + ~SAX2XMLFilterImpl() ; + //@} + + //----------------------------------------------------------------------- + // Implementation of SAX2XMLReader Interface + //----------------------------------------------------------------------- + //----------------------------------------------------------------------- + // The XMLReader interface + //----------------------------------------------------------------------- + /** @name Implementation of SAX 2.0 XMLReader interface's. */ + //@{ + + /** + * This method returns the installed content handler. + * + * @return A pointer to the installed content handler object. + */ + virtual ContentHandler* getContentHandler() const ; + + /** + * This method returns the installed DTD handler. + * + * @return A pointer to the installed DTD handler object. + */ + virtual DTDHandler* getDTDHandler() const ; + + /** + * This method returns the installed entity resolver. + * + * @return A pointer to the installed entity resolver object. + */ + virtual EntityResolver* getEntityResolver() const ; + + /** + * This method returns the installed error handler. + * + * @return A pointer to the installed error handler object. + */ + virtual ErrorHandler* getErrorHandler() const ; + + /** + * Query the current state of any feature in a SAX2 XMLReader. + * + * @param name The unique identifier (URI) of the feature being set. + * @return The current state of the feature. + * @exception SAXNotRecognizedException If the requested feature is not known. + */ + virtual bool getFeature(const XMLCh* const name) const ; + + /** + * Query the current value of a property in a SAX2 XMLReader. + * + * The parser owns the returned pointer. The memory allocated for + * the returned pointer will be destroyed when the parser is deleted. + * + * To ensure assessiblity of the returned information after the parser + * is deleted, callers need to copy and store the returned information + * somewhere else; otherwise you may get unexpected result. Since the returned + * pointer is a generic void pointer, see + * http://xml.apache.org/xerces-c/program-sax2.html#SAX2Properties to learn + * exactly what type of property value each property returns for replication. + * + * @param name The unique identifier (URI) of the property being set. + * @return The current value of the property. The pointer spans the same + * life-time as the parser. A null pointer is returned if nothing + * was specified externally. + * @exception SAXNotRecognizedException If the requested property is not known. + */ + virtual void* getProperty(const XMLCh* const name) const ; + + /** + * Allow an application to register a document event handler. + * + * If the application does not register a document handler, all + * document events reported by the SAX parser will be silently + * ignored (this is the default behaviour implemented by + * HandlerBase). + * + * Applications may register a new or different handler in the + * middle of a parse, and the SAX parser must begin using the new + * handler immediately. + * + * @param handler The document handler. + * @see DocumentHandler#DocumentHandler + * @see HandlerBase#HandlerBase + */ + virtual void setContentHandler(ContentHandler* const handler) ; + + /** + * Allow an application to register a DTD event handler. + * + * If the application does not register a DTD handler, all DTD + * events reported by the SAX parser will be silently ignored (this + * is the default behaviour implemented by HandlerBase). + * + * Applications may register a new or different handler in the middle + * of a parse, and the SAX parser must begin using the new handler + * immediately. + * + * @param handler The DTD handler. + * @see DTDHandler#DTDHandler + * @see HandlerBase#HandlerBase + */ + virtual void setDTDHandler(DTDHandler* const handler) ; + + /** + * Allow an application to register a custom entity resolver. + * + * If the application does not register an entity resolver, the + * SAX parser will resolve system identifiers and open connections + * to entities itself (this is the default behaviour implemented in + * DefaultHandler). + * + * Applications may register a new or different entity resolver + * in the middle of a parse, and the SAX parser must begin using + * the new resolver immediately. + * + * @param resolver The object for resolving entities. + * @see EntityResolver#EntityResolver + * @see DefaultHandler#DefaultHandler + */ + virtual void setEntityResolver(EntityResolver* const resolver) ; + + /** + * Allow an application to register an error event handler. + * + * If the application does not register an error event handler, + * all error events reported by the SAX parser will be silently + * ignored, except for fatalError, which will throw a SAXException + * (this is the default behaviour implemented by HandlerBase). + * + * Applications may register a new or different handler in the + * middle of a parse, and the SAX parser must begin using the new + * handler immediately. + * + * @param handler The error handler. + * @see ErrorHandler#ErrorHandler + * @see SAXException#SAXException + * @see HandlerBase#HandlerBase + */ + virtual void setErrorHandler(ErrorHandler* const handler) ; + + /** + * Set the state of any feature in a SAX2 XMLReader. + * Supported features in SAX2 for xerces-c are: + * <br>(See http://xml.apache.org/xerces-c/program-sax2.html#SAX2Features for detail description). + * + * <br>http://xml.org/sax/features/validation (default: true) + * <br>http://xml.org/sax/features/namespaces (default: true) + * <br>http://xml.org/sax/features/namespace-prefixes (default: false) + * <br>http://apache.org/xml/features/validation/dynamic (default: false) + * <br>http://apache.org/xml/features/validation/reuse-grammar (default: false) + * <br>http://apache.org/xml/features/validation/schema (default: true) + * <br>http://apache.org/xml/features/validation/schema-full-checking (default: false) + * <br>http://apache.org/xml/features/nonvalidating/load-external-dtd (default: true) + * <br>http://apache.org/xml/features/continue-after-fatal-error (default: false) + * <br>http://apache.org/xml/features/validation-error-as-fatal (default: false) + * <br>http://apache.org/xml/features/validation/reuse-validator (Deprecated) (default: false) + * + * @param name The unique identifier (URI) of the feature. + * @param value The requested state of the feature (true or false). + * @exception SAXNotRecognizedException If the requested feature is not known. + * @exception SAXNotSupportedException Feature modification is not supported during parse + * + */ + virtual void setFeature(const XMLCh* const name, const bool value) ; + + /** + * Set the value of any property in a SAX2 XMLReader. + * Supported properties in SAX2 for xerces-c are: + * <br>(See http://xml.apache.org/xerces-c/program-sax2.html#SAX2Properties for detail description). + * + * <br>http://apache.org/xml/properties/schema/external-schemaLocation + * <br>http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation. + * + * It takes a void pointer as the property value. Application is required to initialize this void + * pointer to a correct type. See http://xml.apache.org/xerces-c/program-sax2.html#SAX2Properties + * to learn exactly what type of property value each property expects for processing. + * Passing a void pointer that was initialized with a wrong type will lead to unexpected result. + * If the same property is set more than once, the last one takes effect. + * + * @param name The unique identifier (URI) of the property being set. + * @param value The requested value for the property. See + * http://xml.apache.org/xerces-c/program-sax2.html#SAX2Properties to learn + * exactly what type of property value each property expects for processing. + * Passing a void pointer that was initialized with a wrong type will lead + * to unexpected result. + * @exception SAXNotRecognizedException If the requested property is not known. + * @exception SAXNotSupportedException Property modification is not supported during parse + */ + virtual void setProperty(const XMLCh* const name, void* value) ; + + /** + * Parse an XML document. + * + * The application can use this method to instruct the SAX parser + * to begin parsing an XML document from any valid input + * source (a character stream, a byte stream, or a URI). + * + * Applications may not invoke this method while a parse is in + * progress (they should create a new Parser instead for each + * additional XML document). Once a parse is complete, an + * application may reuse the same Parser object, possibly with a + * different input source. + * + * @param source The input source for the top-level of the + * XML document. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @exception XMLException An exception from the parser or client + * handler code. + * @see InputSource#InputSource + * @see #setEntityResolver + * @see #setDTDHandler + * @see #setDocumentHandler + * @see #setErrorHandler + */ + virtual void parse + ( + const InputSource& source + ) ; + + /** + * Parse an XML document from a system identifier (URI). + * + * This method is a shortcut for the common case of reading a + * document from a system identifier. It is the exact equivalent + * of the following: + * + * parse(new URLInputSource(systemId)); + * + * If the system identifier is a URL, it must be fully resolved + * by the application before it is passed to the parser. + * + * @param systemId The system identifier (URI). + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @exception XMLException An exception from the parser or client + * handler code. + * @see #parse(InputSource) + */ + virtual void parse + ( + const XMLCh* const systemId + ) ; + + /** + * Parse an XML document from a system identifier (URI). + * + * This method is a shortcut for the common case of reading a + * document from a system identifier. It is the exact equivalent + * of the following: + * + * parse(new URLInputSource(systemId)); + * + * If the system identifier is a URL, it must be fully resolved + * by the application before it is passed to the parser. + * + * @param systemId The system identifier (URI). + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @exception XMLException An exception from the parser or client + * handler code. + * @see #parse(InputSource) + */ + virtual void parse + ( + const char* const systemId + ) ; + + //@} + + // ----------------------------------------------------------------------- + // SAX 2.0-ext + // ----------------------------------------------------------------------- + /** @name SAX 2.0-ext */ + //@{ + /** + * This method returns the installed declaration handler. + * + * @return A pointer to the installed declaration handler object. + */ + virtual DeclHandler* getDeclarationHandler() const ; + + /** + * This method returns the installed lexical handler. + * + * @return A pointer to the installed lexical handler object. + */ + virtual LexicalHandler* getLexicalHandler() const ; + + /** + * Allow an application to register a declaration event handler. + * + * If the application does not register a declaration handler, + * all events reported by the SAX parser will be silently + * ignored. (this is the default behaviour implemented by DefaultHandler). + * + * Applications may register a new or different handler in the + * middle of a parse, and the SAX parser must begin using the new + * handler immediately. + * + * @param handler The DTD declaration handler. + * @see DeclHandler#DeclHandler + * @see SAXException#SAXException + * @see DefaultHandler#DefaultHandler + */ + virtual void setDeclarationHandler(DeclHandler* const handler) ; + + /** + * Allow an application to register a lexical event handler. + * + * If the application does not register a lexical handler, + * all events reported by the SAX parser will be silently + * ignored. (this is the default behaviour implemented by HandlerBase). + * + * Applications may register a new or different handler in the + * middle of a parse, and the SAX parser must begin using the new + * handler immediately. + * + * @param handler The error handler. + * @see LexicalHandler#LexicalHandler + * @see SAXException#SAXException + * @see HandlerBase#HandlerBase + */ + virtual void setLexicalHandler(LexicalHandler* const handler) ; + + //@} + + // ----------------------------------------------------------------------- + // Getter Methods + // ----------------------------------------------------------------------- + /** @name Getter Methods (Xerces-C specific) */ + //@{ + /** + * This method is used to get the current validator. + * + * <b>SAX2XMLReader assumes responsibility for the validator. It will be + * deleted when the XMLReader is destroyed.</b> + * + * @return A pointer to the validator. An application should not deleted + * the object returned. + * + */ + virtual XMLValidator* getValidator() const ; + + /** Get error count from the last parse operation. + * + * This method returns the error count from the last parse + * operation. Note that this count is actually stored in the + * scanner, so this method simply returns what the + * scanner reports. + * + * @return number of errors encountered during the latest + * parse operation. + */ + virtual int getErrorCount() const ; + + /** + * This method returns the state of the parser's + * exit-on-First-Fatal-Error flag. + * + * <p>Or you can query the feature "http://apache.org/xml/features/continue-after-fatal-error" + * which indicates the opposite state.</p> + * + * @return true, if the parser is currently configured to + * exit on the first fatal error, false otherwise. + * + * @see #setExitOnFirstFatalError + * @see #getFeature + */ + virtual bool getExitOnFirstFatalError() const ; + + /** + * This method returns the state of the parser's + * validation-constraint-fatal flag. + * + * <p>Or you can query the feature "http://apache.org/xml/features/validation-error-as-fatal" + * which means the same thing. + * + * @return true, if the parser is currently configured to + * set validation constraint errors as fatal, false + * otherwise. + * + * @see #setValidationContraintFatal + * @see #getFeature + */ + virtual bool getValidationConstraintFatal() const ; + + /** + * Retrieve the grammar that is associated with the specified namespace key + * + * @param nameSpaceKey Namespace key + * @return Grammar associated with the Namespace key. + */ + virtual Grammar* getGrammar(const XMLCh* const nameSpaceKey); + + /** + * Retrieve the grammar where the root element is declared. + * + * @return Grammar where root element declared + */ + virtual Grammar* getRootGrammar(); + + /** + * Returns the string corresponding to a URI id from the URI string pool. + * + * @param uriId id of the string in the URI string pool. + * @return URI string corresponding to the URI id. + */ + virtual const XMLCh* getURIText(unsigned int uriId) const; + + /** + * Returns the current src offset within the input source. + * + * @return offset within the input source + */ + virtual unsigned int getSrcOffset() const; + + //@} + + // ----------------------------------------------------------------------- + // Setter Methods + // ----------------------------------------------------------------------- + /** @name Setter Methods (Xerces-C specific) */ + //@{ + /** + * This method is used to set a validator. + * + * <b>SAX2XMLReader assumes responsibility for the validator. It will be + * deleted when the XMLReader is destroyed.</b> + * + * @param valueToAdopt A pointer to the validator that the reader should use. + * + */ + virtual void setValidator(XMLValidator* valueToAdopt) ; + + /** + * This method allows users to set the parser's behaviour when it + * encounters the first fatal error. If set to true, the parser + * will exit at the first fatal error. If false, then it will + * report the error and continue processing. + * + * <p>The default value is 'true' and the parser exits on the + * first fatal error.</p> + * + * <p>Or you can set the feature "http://apache.org/xml/features/continue-after-fatal-error" + * which has the opposite behaviour.</p> + * + * <p>If both the feature above and this function are used, the latter takes effect.</p> + * + * @param newState The value specifying whether the parser should + * continue or exit when it encounters the first + * fatal error. + * + * @see #getExitOnFirstFatalError + * @see #setFeature + */ + virtual void setExitOnFirstFatalError(const bool newState) ; + + /** + * This method allows users to set the parser's behaviour when it + * encounters a validtion constraint error. If set to true, and the + * the parser will treat validation error as fatal and will exit depends on the + * state of "getExitOnFirstFatalError". If false, then it will + * report the error and continue processing. + * + * Note: setting this true does not mean the validation error will be printed with + * the word "Fatal Error". It is still printed as "Error", but the parser + * will exit if "setExitOnFirstFatalError" is set to true. + * + * <p>The default value is 'false'.</p> + * + * <p>Or you can set the feature "http://apache.org/xml/features/validation-error-as-fatal" + * which means the same thing.</p> + * + * <p>If both the feature above and this function are used, the latter takes effect.</p> + * + * @param newState If true, the parser will exit if "setExitOnFirstFatalError" + * is set to true. + * + * @see #getValidationConstraintFatal + * @see #setExitOnFirstFatalError + * @see #setFeature + */ + virtual void setValidationConstraintFatal(const bool newState) ; + //@} + + + // ----------------------------------------------------------------------- + // Progressive scan methods + // ----------------------------------------------------------------------- + + /** @name Progressive scan methods */ + //@{ + + /** Begin a progressive parse operation + * + * This method is used to start a progressive parse on a XML file. + * To continue parsing, subsequent calls must be to the parseNext + * method. + * + * It scans through the prolog and returns a token to be used on + * subsequent scanNext() calls. If the return value is true, then the + * token is legal and ready for further use. If it returns false, then + * the scan of the prolog failed and the token is not going to work on + * subsequent scanNext() calls. + * + * @param systemId A pointer to a Unicode string represting the path + * to the XML file to be parsed. + * @param toFill A token maintaing state information to maintain + * internal consistency between invocation of 'parseNext' + * calls. + * + * @return 'true', if successful in parsing the prolog. It indicates the + * user can go ahead with parsing the rest of the file. It + * returns 'false' to indicate that the parser could parse the + * prolog (which means the token will not be valid.) + * + * @see #parseNext + * @see #parseFirst(char*,...) + * @see #parseFirst(InputSource&,...) + */ + virtual bool parseFirst + ( + const XMLCh* const systemId + , XMLPScanToken& toFill + ) ; + + /** Begin a progressive parse operation + * + * This method is used to start a progressive parse on a XML file. + * To continue parsing, subsequent calls must be to the parseNext + * method. + * + * It scans through the prolog and returns a token to be used on + * subsequent scanNext() calls. If the return value is true, then the + * token is legal and ready for further use. If it returns false, then + * the scan of the prolog failed and the token is not going to work on + * subsequent scanNext() calls. + * + * @param systemId A pointer to a regular native string represting + * the path to the XML file to be parsed. + * @param toFill A token maintaing state information to maintain + * internal consIstency between invocation of 'parseNext' + * calls. + * + * @return 'true', if successful in parsing the prolog. It indicates the + * user can go ahead with parsing the rest of the file. It + * returns 'false' to indicate that the parser could not parse + * the prolog. + * + * @see #parseNext + * @see #parseFirst(XMLCh*,...) + * @see #parseFirst(InputSource&,...) + */ + virtual bool parseFirst + ( + const char* const systemId + , XMLPScanToken& toFill + ) ; + + /** Begin a progressive parse operation + * + * This method is used to start a progressive parse on a XML file. + * To continue parsing, subsequent calls must be to the parseNext + * method. + * + * It scans through the prolog and returns a token to be used on + * subsequent scanNext() calls. If the return value is true, then the + * token is legal and ready for further use. If it returns false, then + * the scan of the prolog failed and the token is not going to work on + * subsequent scanNext() calls. + * + * @param source A const reference to the InputSource object which + * points to the XML file to be parsed. + * @param toFill A token maintaing state information to maintain + * internal consistency between invocation of 'parseNext' + * calls. + * + * @return 'true', if successful in parsing the prolog. It indicates the + * user can go ahead with parsing the rest of the file. It + * returns 'false' to indicate that the parser could not parse + * the prolog. + * + * @see #parseNext + * @see #parseFirst(XMLCh*,...) + * @see #parseFirst(char*,...) + */ + virtual bool parseFirst + ( + const InputSource& source + , XMLPScanToken& toFill + ) ; + + /** Continue a progressive parse operation + * + * This method is used to continue with progressive parsing of + * XML files started by a call to 'parseFirst' method. + * + * It parses the XML file and stops as soon as it comes across + * a XML token (as defined in the XML specification). Relevant + * callback handlers are invoked as required by the SAX + * specification. + * + * @param token A token maintaing state information to maintain + * internal consistency between invocation of 'parseNext' + * calls. + * + * @return 'true', if successful in parsing the next XML token. + * It indicates the user can go ahead with parsing the rest + * of the file. It returns 'false' to indicate that the parser + * could not find next token as per the XML specification + * production rule. + * + * @see #parseFirst(XMLCh*,...) + * @see #parseFirst(char*,...) + * @see #parseFirst(InputSource&,...) + */ + virtual bool parseNext(XMLPScanToken& token) ; + + /** Reset the parser after a progressive parse + * + * If a progressive parse loop exits before the end of the document + * is reached, the parser has no way of knowing this. So it will leave + * open any files or sockets or memory buffers that were in use at + * the time that the parse loop exited. + * + * The next parse operation will cause these open files and such to + * be closed, but the next parse operation might occur at some unknown + * future point. To avoid this problem, you should reset the parser if + * you exit the loop early. + * + * If you exited because of an error, then this cleanup will be done + * for you. Its only when you exit the file prematurely of your own + * accord, because you've found what you wanted in the file most + * likely. + * + * @param token A token maintaing state information to maintain + * internal consistency between invocation of 'parseNext' + * calls. + */ + virtual void parseReset(XMLPScanToken& token) ; + + //@} + + // ----------------------------------------------------------------------- + // Implementation of the grammar preparsing interface + // ----------------------------------------------------------------------- + + /** @name Implementation of Grammar preparsing interface's. */ + //@{ + /** + * Preparse schema grammar (XML Schema, DTD, etc.) via an input source + * object. + * + * This method invokes the preparsing process on a schema grammar XML + * file specified by the SAX InputSource parameter. If the 'toCache' flag + * is enabled, the parser will cache the grammars for re-use. If a grammar + * key is found in the pool, no caching of any grammar will take place. + * + * <p><b>"Experimental - subject to change"</b></p> + * + * @param source A const reference to the SAX InputSource object which + * points to the schema grammar file to be preparsed. + * @param grammarType The grammar type (Schema or DTD). + * @param toCache If <code>true</code>, we cache the preparsed grammar, + * otherwise, no chaching. Default is <code>false</code>. + * @return The preparsed schema grammar object (SchemaGrammar or + * DTDGrammar). That grammar object is owned by the parser. + * + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @exception XMLException An exception from the parser or client + * handler code. + * @exception DOMException A DOM exception as per DOM spec. + * + * @see InputSource#InputSource + */ + virtual Grammar* loadGrammar(const InputSource& source, + const short grammarType, + const bool toCache = false); + + /** + * Preparse schema grammar (XML Schema, DTD, etc.) via a file path or URL + * + * This method invokes the preparsing process on a schema grammar XML + * file specified by the file path parameter. If the 'toCache' flag + * is enabled, the parser will cache the grammars for re-use. If a grammar + * key is found in the pool, no caching of any grammar will take place. + * + * <p><b>"Experimental - subject to change"</b></p> + * + * @param systemId A const XMLCh pointer to the Unicode string which + * contains the path to the XML grammar file to be + * preparsed. + * @param grammarType The grammar type (Schema or DTD). + * @param toCache If <code>true</code>, we cache the preparsed grammar, + * otherwise, no chaching. Default is <code>false</code>. + * @return The preparsed schema grammar object (SchemaGrammar or + * DTDGrammar). That grammar object is owned by the parser. + * + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @exception XMLException An exception from the parser or client + * handler code. + * @exception DOMException A DOM exception as per DOM spec. + */ + virtual Grammar* loadGrammar(const XMLCh* const systemId, + const short grammarType, + const bool toCache = false); + + /** + * Preparse schema grammar (XML Schema, DTD, etc.) via a file path or URL + * + * This method invokes the preparsing process on a schema grammar XML + * file specified by the file path parameter. If the 'toCache' flag + * is enabled, the parser will cache the grammars for re-use. If a grammar + * key is found in the pool, no caching of any grammar will take place. + * + * <p><b>"Experimental - subject to change"</b></p> + * + * @param systemId A const char pointer to a native string which contains + * the path to the XML grammar file to be preparsed. + * @param grammarType The grammar type (Schema or DTD). + * @param toCache If <code>true</code>, we cache the preparsed grammar, + * otherwise, no chaching. Default is <code>false</code>. + * @return The preparsed schema grammar object (SchemaGrammar or + * DTDGrammar). That grammar object is owned by the parser. + * + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @exception XMLException An exception from the parser or client + * handler code. + * @exception DOMException A DOM exception as per DOM spec. + */ + virtual Grammar* loadGrammar(const char* const systemId, + const short grammarType, + const bool toCache = false); + + /** + * Clear the cached grammar pool + */ + virtual void resetCachedGrammarPool(); + + /** Set maximum input buffer size + * + * This method allows users to limit the size of buffers used in parsing + * XML character data. The effect of setting this size is to limit the + * size of a ContentHandler::characters() call. + * + * The parser's default input buffer size is 1 megabyte. + * + * @param bufferSize The maximum input buffer size + */ + void setInputBufferSize(const size_t bufferSize); + + //@} + + + // ----------------------------------------------------------------------- + // Advanced document handler list maintenance methods + // ----------------------------------------------------------------------- + + /** @name Advanced document handler list maintenance methods */ + //@{ + /** + * This method installs the specified 'advanced' document callback + * handler, thereby allowing the user to customize the processing, + * if they choose to do so. Any number of advanced callback handlers + * maybe installed. + * + * <p>The methods in the advanced callback interface represent + * Xerces-C extensions. There is no specification for this interface.</p> + * + * @param toInstall A pointer to the users advanced callback handler. + * + * @see #removeAdvDocHandler + */ + virtual void installAdvDocHandler(XMLDocumentHandler* const toInstall) ; + + /** + * This method removes the 'advanced' document handler callback from + * the underlying parser scanner. If no handler is installed, advanced + * callbacks are not invoked by the scanner. + * @param toRemove A pointer to the advanced callback handler which + * should be removed. + * + * @see #installAdvDocHandler + */ + virtual bool removeAdvDocHandler(XMLDocumentHandler* const toRemove) ; + //@} + + + // ----------------------------------------------------------------------- + // The XMLFilter interface + // ----------------------------------------------------------------------- + + /** @name Implementation of SAX 2.0 XMLFilter interface's. */ + //@{ + /** + * This method returns the parent XMLReader object. + * + * @return A pointer to the parent XMLReader object. + */ + virtual SAX2XMLReader* getParent() const; + + /** + * Sets the parent XMLReader object; parse requests will be forwarded to this + * object, and callback notifications coming from it will be postprocessed + * + * @param parent The new XMLReader parent. + * @see SAX2XMLReader#SAX2XMLReader + */ + virtual void setParent(SAX2XMLReader* parent); + //@} + + // ----------------------------------------------------------------------- + // Implementation of the EntityResolver interface + // ----------------------------------------------------------------------- + /** @name The EntityResolver interface */ + //@{ + + /** + * Allow the application to resolve external entities. + * + * <p>The Parser will call this method before opening any external + * entity except the top-level document entity (including the + * external DTD subset, external entities referenced within the + * DTD, and external entities referenced within the document + * element): the application may request that the parser resolve + * the entity itself, that it use an alternative URI, or that it + * use an entirely different input source.</p> + * + * <p>Application writers can use this method to redirect external + * system identifiers to secure and/or local URIs, to look up + * public identifiers in a catalogue, or to read an entity from a + * database or other input source (including, for example, a dialog + * box).</p> + * + * <p>If the system identifier is a URL, the SAX parser must + * resolve it fully before reporting it to the application.</p> + * + * @param publicId The public identifier of the external entity + * being referenced, or null if none was supplied. + * @param systemId The system identifier of the external entity + * being referenced. + * @return An InputSource object describing the new input source, + * or null to request that the parser open a regular + * URI connection to the system identifier. + * The returned InputSource is owned by the parser which is + * responsible to clean up the memory. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @exception IOException An IO exception, + * possibly the result of creating a new InputStream + * or Reader for the InputSource. + * @see InputSource#InputSource + */ + virtual InputSource* resolveEntity + ( + const XMLCh* const publicId + , const XMLCh* const systemId + ); + + //@} + + // ----------------------------------------------------------------------- + // Implementation of the DTDHandler interface + // ----------------------------------------------------------------------- + /** @name The DTD handler interface */ + //@{ + /** + * Receive notification of a notation declaration event. + * + * <p>It is up to the application to record the notation for later + * reference, if necessary.</p> + * + * <p>If a system identifier is present, and it is a URL, the SAX + * parser must resolve it fully before passing it to the + * application.</p> + * + * @param name The notation name. + * @param publicId The notation's public identifier, or null if + * none was given. + * @param systemId The notation's system identifier, or null if + * none was given. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @see #unparsedEntityDecl + * @see AttributeList#AttributeList + */ + virtual void notationDecl + ( + const XMLCh* const name + , const XMLCh* const publicId + , const XMLCh* const systemId + ); + + /** + * Receive notification of an unparsed entity declaration event. + * + * <p>Note that the notation name corresponds to a notation + * reported by the notationDecl() event. It is up to the + * application to record the entity for later reference, if + * necessary.</p> + * + * <p>If the system identifier is a URL, the parser must resolve it + * fully before passing it to the application.</p> + * + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @param name The unparsed entity's name. + * @param publicId The entity's public identifier, or null if none + * was given. + * @param systemId The entity's system identifier (it must always + * have one). + * @param notationName The name of the associated notation. + * @see #notationDecl + * @see AttributeList#AttributeList + */ + virtual void unparsedEntityDecl + ( + const XMLCh* const name + , const XMLCh* const publicId + , const XMLCh* const systemId + , const XMLCh* const notationName + ); + + /** + * Reset the DocType object on its reuse + * + * <p>This method helps in reseting the DTD object implementational + * defaults each time the DTD is begun.</p> + * + */ + virtual void resetDocType(); + + //@} + + // ----------------------------------------------------------------------- + // Implementation of the ContentHandler interface + // ----------------------------------------------------------------------- + /** @name The virtual document handler interface */ + + //@{ + /** + * Receive notification of character data. + * + * <p>The Parser will call this method to report each chunk of + * character data. SAX parsers may return all contiguous character + * data in a single chunk, or they may split it into several + * chunks; however, all of the characters in any single event + * must come from the same external entity, so that the Locator + * provides useful information.</p> + * + * <p>The application must not attempt to read from the array + * outside of the specified range.</p> + * + * <p>Note that some parsers will report whitespace using the + * ignorableWhitespace() method rather than this one (validating + * parsers must do so).</p> + * + * @param chars The characters from the XML document. + * @param length The number of characters to read from the array. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @see #ignorableWhitespace + * @see Locator#Locator + */ + virtual void characters + ( + const XMLCh* const chars + , const unsigned int length + ); + + /** + * Receive notification of the end of a document. + * + * <p>The SAX parser will invoke this method only once, and it will + * be the last method invoked during the parse. The parser shall + * not invoke this method until it has either abandoned parsing + * (because of an unrecoverable error) or reached the end of + * input.</p> + * + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + */ + virtual void endDocument (); + + /** + * Receive notification of the end of an element. + * + * <p>The SAX parser will invoke this method at the end of every + * element in the XML document; there will be a corresponding + * startElement() event for every endElement() event (even when the + * element is empty).</p> + * + * @param uri The URI of the asscioated namespace for this element + * @param localname The local part of the element name + * @param qname The QName of this element + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + */ + virtual void endElement + ( + const XMLCh* const uri, + const XMLCh* const localname, + const XMLCh* const qname + ); + + /** + * Receive notification of ignorable whitespace in element content. + * + * <p>Validating Parsers must use this method to report each chunk + * of ignorable whitespace (see the W3C XML 1.0 recommendation, + * section 2.10): non-validating parsers may also use this method + * if they are capable of parsing and using content models.</p> + * + * <p>SAX parsers may return all contiguous whitespace in a single + * chunk, or they may split it into several chunks; however, all of + * the characters in any single event must come from the same + * external entity, so that the Locator provides useful + * information.</p> + * + * <p>The application must not attempt to read from the array + * outside of the specified range.</p> + * + * @param chars The characters from the XML document. + * @param length The number of characters to read from the array. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @see #characters + */ + virtual void ignorableWhitespace + ( + const XMLCh* const chars + , const unsigned int length + ); + + /** + * Receive notification of a processing instruction. + * + * <p>The Parser will invoke this method once for each processing + * instruction found: note that processing instructions may occur + * before or after the main document element.</p> + * + * <p>A SAX parser should never report an XML declaration (XML 1.0, + * section 2.8) or a text declaration (XML 1.0, section 4.3.1) + * using this method.</p> + * + * @param target The processing instruction target. + * @param data The processing instruction data, or null if + * none was supplied. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + */ + virtual void processingInstruction + ( + const XMLCh* const target + , const XMLCh* const data + ); + + /** + * Receive an object for locating the origin of SAX document events. + * + * SAX parsers are strongly encouraged (though not absolutely + * required) to supply a locator: if it does so, it must supply + * the locator to the application by invoking this method before + * invoking any of the other methods in the DocumentHandler + * interface. + * + * The locator allows the application to determine the end + * position of any document-related event, even if the parser is + * not reporting an error. Typically, the application will + * use this information for reporting its own errors (such as + * character content that does not match an application's + * business rules). The information returned by the locator + * is probably not sufficient for use with a search engine. + * + * Note that the locator will return correct information only + * during the invocation of the events in this interface. The + * application should not attempt to use it at any other time. + * + * @param locator An object that can return the location of + * any SAX document event. The object is only + * 'on loan' to the client code and they are not + * to attempt to delete or modify it in any way! + * + * @see Locator#Locator + */ + virtual void setDocumentLocator(const Locator* const locator); + + /** + * Receive notification of the beginning of a document. + * + * <p>The SAX parser will invoke this method only once, before any + * other methods in this interface or in DTDHandler (except for + * setDocumentLocator).</p> + * + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + */ + virtual void startDocument(); + + /** + * Receive notification of the beginning of an element. + * + * <p>The Parser will invoke this method at the beginning of every + * element in the XML document; there will be a corresponding + * endElement() event for every startElement() event (even when the + * element is empty). All of the element's content will be + * reported, in order, before the corresponding endElement() + * event.</p> + * + * <p>Note that the attribute list provided will + * contain only attributes with explicit values (specified or + * defaulted): #IMPLIED attributes will be omitted.</p> + * + * @param uri The URI of the asscioated namespace for this element + * @param localname The local part of the element name + * @param qname The QName of this element + * @param attrs The attributes attached to the element, if any. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @see #endElement + * @see Attributes#Attributes + */ + virtual void startElement + ( + const XMLCh* const uri, + const XMLCh* const localname, + const XMLCh* const qname, + const Attributes& attrs + ); + + /** + * Receive notification of the start of an namespace prefix mapping. + * + * <p>By default, do nothing. Application writers may override this + * method in a subclass to take specific actions at the start of + * each namespace prefix mapping.</p> + * + * @param prefix The namespace prefix used + * @param uri The namespace URI used. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + */ + virtual void startPrefixMapping + ( + const XMLCh* const prefix, + const XMLCh* const uri + ); + + /** + * Receive notification of the end of an namespace prefix mapping. + * + * <p>By default, do nothing. Application writers may override this + * method in a subclass to take specific actions at the end of + * each namespace prefix mapping.</p> + * + * @param prefix The namespace prefix used + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + */ + virtual void endPrefixMapping + ( + const XMLCh* const prefix + ); + + /** + * Receive notification of a skipped entity + * + * <p>The parser will invoke this method once for each entity + * skipped. All processors may skip external entities, + * depending on the values of the features:<br> + * http://xml.org/sax/features/external-general-entities<br> + * http://xml.org/sax/features/external-parameter-entities</p> + * + * <p>Note: Xerces (specifically) never skips any entities, regardless + * of the above features. This function is never called in the + * Xerces implementation of SAX2.</p> + * + * <p>Introduced with SAX2</p> + * + * @param name The name of the skipped entity. If it is a parameter entity, + * the name will begin with %, and if it is the external DTD subset, + * it will be the string [dtd]. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + */ + virtual void skippedEntity + ( + const XMLCh* const name + ); + + //@} + + // ----------------------------------------------------------------------- + // Implementation of the ErrorHandler interface + // ----------------------------------------------------------------------- + /** @name The error handler interface */ + //@{ + /** + * Receive notification of a warning. + * + * <p>SAX parsers will use this method to report conditions that + * are not errors or fatal errors as defined by the XML 1.0 + * recommendation. The default behaviour is to take no action.</p> + * + * <p>The SAX parser must continue to provide normal parsing events + * after invoking this method: it should still be possible for the + * application to process the document through to the end.</p> + * + * @param exc The warning information encapsulated in a + * SAX parse exception. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @see SAXParseException#SAXParseException + */ + virtual void warning(const SAXParseException& exc); + + /** + * Receive notification of a recoverable error. + * + * <p>This corresponds to the definition of "error" in section 1.2 + * of the W3C XML 1.0 Recommendation. For example, a validating + * parser would use this callback to report the violation of a + * validity constraint. The default behaviour is to take no + * action.</p> + * + * <p>The SAX parser must continue to provide normal parsing events + * after invoking this method: it should still be possible for the + * application to process the document through to the end. If the + * application cannot do so, then the parser should report a fatal + * error even if the XML 1.0 recommendation does not require it to + * do so.</p> + * + * @param exc The error information encapsulated in a + * SAX parse exception. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @see SAXParseException#SAXParseException + */ + virtual void error(const SAXParseException& exc); + + /** + * Receive notification of a non-recoverable error. + * + * <p>This corresponds to the definition of "fatal error" in + * section 1.2 of the W3C XML 1.0 Recommendation. For example, a + * parser would use this callback to report the violation of a + * well-formedness constraint.</p> + * + * <p>The application must assume that the document is unusable + * after the parser has invoked this method, and should continue + * (if at all) only for the sake of collecting addition error + * messages: in fact, SAX parsers are free to stop reporting any + * other events once this method has been invoked.</p> + * + * @param exc The error information encapsulated in a + * SAX parse exception. + * @exception SAXException Any SAX exception, possibly + * wrapping another exception. + * @see SAXParseException#SAXParseException + */ + virtual void fatalError(const SAXParseException& exc); + + /** + * Reset the Error handler object on its reuse + * + * <p>This method helps in reseting the Error handler object + * implementational defaults each time the Error handler is begun.</p> + * + */ + virtual void resetErrors(); + + //@} + + +private : + // ----------------------------------------------------------------------- + // Unimplemented constructors and operators + // ----------------------------------------------------------------------- + SAX2XMLFilterImpl(const SAX2XMLFilterImpl&); + SAX2XMLFilterImpl& operator=(const SAX2XMLFilterImpl&); + + // ----------------------------------------------------------------------- + // Private data members + // + // fParentReader + // The object that we are filtering + // + // fDocHandler + // The installed SAX content handler, if any. Null if none. + // + // fDTDHandler + // The installed SAX DTD handler, if any. Null if none. + // + // fEntityResolver + // The installed SAX entity handler, if any. Null if none. + // + // fErrorHandler + // The installed SAX error handler, if any. Null if none. + // + // ----------------------------------------------------------------------- + SAX2XMLReader* fParentReader; + ContentHandler* fDocHandler; + DTDHandler* fDTDHandler; + EntityResolver* fEntityResolver; + ErrorHandler* fErrorHandler; +}; + + +// --------------------------------------------------------------------------- +// SAX2XMLReader: Getter methods +// --------------------------------------------------------------------------- +inline SAX2XMLReader* SAX2XMLFilterImpl::getParent() const +{ + return fParentReader; +} + +inline ContentHandler* SAX2XMLFilterImpl::getContentHandler() const +{ + return fDocHandler; +} + +inline DTDHandler* SAX2XMLFilterImpl::getDTDHandler() const +{ + return fDTDHandler; +} + +inline EntityResolver* SAX2XMLFilterImpl::getEntityResolver() const +{ + return fEntityResolver; +} + +inline ErrorHandler* SAX2XMLFilterImpl::getErrorHandler() const +{ + return fErrorHandler; +} + +inline LexicalHandler* SAX2XMLFilterImpl::getLexicalHandler() const +{ + return 0; +} + +inline DeclHandler* SAX2XMLFilterImpl::getDeclarationHandler() const +{ + return 0; +} + +inline void SAX2XMLFilterImpl::setContentHandler(ContentHandler* const handler) +{ + fDocHandler = handler; +} + +inline void SAX2XMLFilterImpl::setDTDHandler(DTDHandler* const handler) +{ + fDTDHandler = handler; +} + +inline void SAX2XMLFilterImpl::setErrorHandler(ErrorHandler* const handler) +{ + fErrorHandler = handler; +} + +inline void SAX2XMLFilterImpl::setEntityResolver(EntityResolver* const resolver) +{ + fEntityResolver = resolver; +} + +inline void SAX2XMLFilterImpl::setLexicalHandler(LexicalHandler* const handler) +{ +} + +inline void SAX2XMLFilterImpl::setDeclarationHandler(DeclHandler* const handler) +{ +} + +inline void SAX2XMLFilterImpl::installAdvDocHandler(XMLDocumentHandler* const toInstall) +{ +} + +inline bool SAX2XMLFilterImpl::removeAdvDocHandler(XMLDocumentHandler* const toRemove) +{ + return false; +} + +XERCES_CPP_NAMESPACE_END + +#endif diff --git a/src/xercesc/sax2/Makefile.in b/src/xercesc/sax2/Makefile.in index 2431e208f63f035f41f10126d7597684eb9c8203..030d872309bdd6d7dc46bd1dd4c7fb62c9b05da3 100644 --- a/src/xercesc/sax2/Makefile.in +++ b/src/xercesc/sax2/Makefile.in @@ -47,6 +47,7 @@ SAX2_CPP_PUBHEADERS = \ LexicalHandler.hpp \ DeclHandler.hpp \ SAX2XMLReader.hpp \ + SAX2XMLFilter.hpp \ XMLReaderFactory.hpp SAX2_CPP_PRIVHEADERS = diff --git a/src/xercesc/sax2/SAX2XMLFilter.hpp b/src/xercesc/sax2/SAX2XMLFilter.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4be3db3bd356d2b70bca71906b24edc98c911e75 --- /dev/null +++ b/src/xercesc/sax2/SAX2XMLFilter.hpp @@ -0,0 +1,84 @@ +/* + * Copyright 1999-2001,2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * $Log$ + * Revision 1.1 2004/12/24 19:21:46 amassari + * Add support for SAX2 filters (jira# 1133) + * + */ + +#ifndef SAX2XMLFilter_HPP +#define SAX2XMLFilter_HPP + +#include <xercesc/sax2/SAX2XMLReader.hpp> + +XERCES_CPP_NAMESPACE_BEGIN + +class SAX2_EXPORT SAX2XMLFilter : public SAX2XMLReader +{ +public: + // ----------------------------------------------------------------------- + // Constructors and Destructor + // ----------------------------------------------------------------------- + /** @name Constructors and Destructor */ + //@{ + /** The default constructor */ + SAX2XMLFilter() + { + } + /** The destructor */ + virtual ~SAX2XMLFilter() + { + } + //@} + + //----------------------------------------------------------------------- + // The XMLFilter interface + //----------------------------------------------------------------------- + /** @name Implementation of SAX 2.0 XMLFilter interface's. */ + //@{ + + /** + * This method returns the parent XMLReader object. + * + * @return A pointer to the parent XMLReader object. + */ + virtual SAX2XMLReader* getParent() const = 0 ; + + /** + * Sets the parent XMLReader object; parse requests will be forwarded to this + * object, and callback notifications coming from it will be postprocessed + * + * @param parent The new XMLReader parent. + * @see SAX2XMLReader#SAX2XMLReader + */ + virtual void setParent(SAX2XMLReader* parent) = 0; + + //@} + +private : + /* The copy constructor, you cannot call this directly */ + SAX2XMLFilter(const SAX2XMLFilter&); + + /* The assignment operator, you cannot call this directly */ + SAX2XMLFilter& operator=(const SAX2XMLFilter&); + +}; + +XERCES_CPP_NAMESPACE_END + +#endif