This class parses the OpenDocument XML. More...
#include <ODi_StreamListener.h>
Classes | |
class | StackCell |
Public Member Functions | |
ODi_StreamListener (PD_Document *pAbiDocument, GsfInfile *pGsfInfile, ODi_Office_Styles *pStyles, ODi_Abi_Data &rAbiData, ODi_ElementStack *pElementStack=NULL) | |
Constructor. | |
virtual | ~ODi_StreamListener () |
Destructor. | |
void | startElement (const gchar *pName, const gchar **ppAtts) |
void | endElement (const gchar *pName) |
void | charData (const gchar *pBuffer, int length) |
UT_Error | setState (const char *pStateName) |
Sets the current state of the stream listener. | |
void | setState (ODi_ListenerState *pState, bool deleteWhenPop) |
void | clearFontFaceDecls () |
ODi_ElementStack * | getElementStack () |
ODi_ListenerState * | getCurrentState () |
Private Types | |
enum | ODi_StreamListenerAction { ODI_NONE, ODI_RECORDING, ODI_IGNORING } |
Private Member Functions | |
void | _startElement (const gchar *pName, const gchar **ppAtts, bool doingRecursion) |
void | _endElement (const gchar *pName, bool doingRecursion) |
void | _handleStateAction () |
Push or pop the stack according to the action stated by the current state. | |
void | _clear () |
Clear the state stack. | |
ODi_ListenerState * | _createState (const char *pStateName) |
Create a state given its name. | |
void | _resumeParsing (ODi_Postpone_ListenerState *pPostponeState) |
Resumes the parsing of a XML element that was postponed. | |
void | _playRecordedElement () |
Private Attributes | |
PD_Document * | m_pAbiDocument |
GsfInfile * | m_pGsfInfile |
ODi_Office_Styles * | m_pStyles |
ODi_Abi_Data & | m_rAbiData |
ODi_FontFaceDecls | m_fontFaceDecls |
ODi_ListenerStateAction | m_stateAction |
ODi_ElementStack * | m_pElementStack |
enum ODi_StreamListener::ODi_StreamListenerAction | m_currentAction |
UT_sint32 | m_elemenStackSize |
ODi_XMLRecorder | m_xmlRecorder |
ODi_ListenerState * | m_pCurrentState |
bool | m_deleteCurrentWhenPop |
bool | m_ownStack |
UT_GenericVector < ODi_StreamListener::StackCell > | m_stateStack |
UT_GenericVector < ODi_Postpone_ListenerState * > | m_postponedParsing |
This class parses the OpenDocument XML.
Its behaviour is distributed among several ODi_*_ListenerState classes. So, the code used for its functions depends on its current state.
It follows the State design pattern.
enum ODi_StreamListener::ODi_StreamListenerAction [private] |
ODi_StreamListener::ODi_StreamListener | ( | PD_Document * | pAbiDocument, | |
GsfInfile * | pGsfInfile, | |||
ODi_Office_Styles * | pStyles, | |||
ODi_Abi_Data & | rAbiData, | |||
ODi_ElementStack * | pElementStack = NULL | |||
) |
Constructor.
References m_ownStack, m_pAbiDocument, m_pElementStack, m_pGsfInfile, m_pStyles, and UT_ASSERT_HARMLESS.
ODi_StreamListener::~ODi_StreamListener | ( | ) | [virtual] |
Destructor.
References _clear(), DELETEP, UT_GenericVector< T >::getItemCount(), m_currentAction, m_ownStack, m_pCurrentState, m_pElementStack, m_postponedParsing, m_stateStack, ODI_NONE, UT_ASSERT, UT_DEBUGMSG, and UT_VECTOR_PURGEALL.
void ODi_StreamListener::_clear | ( | ) | [private] |
Clear the state stack.
References UT_GenericVector< T >::clear(), DELETEP, UT_GenericVector< T >::getItemCount(), UT_GenericVector< T >::getNthItem(), m_deleteCurrentWhenPop, ODi_StreamListener::StackCell::m_deleteWhenPop, m_pCurrentState, ODi_StreamListener::StackCell::m_pState, and m_stateStack.
Referenced by setState(), and ~ODi_StreamListener().
ODi_ListenerState * ODi_StreamListener::_createState | ( | const char * | pStateName | ) | [private] |
Create a state given its name.
pStateName | Tha name of the state to be created. |
References m_fontFaceDecls, m_pAbiDocument, m_pElementStack, m_pGsfInfile, m_pStyles, m_rAbiData, and UT_DEBUGMSG.
Referenced by _handleStateAction(), and setState().
void ODi_StreamListener::_endElement | ( | const gchar * | pName, | |
bool | doingRecursion | |||
) | [private] |
References _handleStateAction(), _playRecordedElement(), ODi_ListenerStateAction::ACTION_NONE, ODi_XMLRecorder::endElement(), ODi_ElementStack::endElement(), ODi_ListenerState::endElement(), ODi_ListenerStateAction::getAction(), ODi_ElementStack::getStackSize(), m_currentAction, m_elemenStackSize, m_pCurrentState, m_pElementStack, m_stateAction, m_xmlRecorder, ODI_IGNORING, ODI_RECORDING, ODi_ListenerStateAction::reset(), and UT_return_if_fail.
Referenced by endElement().
void ODi_StreamListener::_handleStateAction | ( | ) | [private] |
Push or pop the stack according to the action stated by the current state.
References _createState(), _resumeParsing(), ODi_ListenerStateAction::ACTION_BRINGUP, ODi_ListenerStateAction::ACTION_BRINGUPALL, ODi_ListenerStateAction::ACTION_IGNORE, ODi_ListenerStateAction::ACTION_POP, ODi_ListenerStateAction::ACTION_POSTPONE, ODi_ListenerStateAction::ACTION_PUSH, ODi_ListenerStateAction::ACTION_REPEAT, UT_GenericVector< T >::addItem(), UT_String::c_str(), ODi_XMLRecorder::clear(), UT_GenericVector< T >::clear(), DELETEP, UT_String::empty(), ODi_ListenerStateAction::getAction(), ODi_ListenerStateAction::getComeBackAfter(), ODi_ListenerStateAction::getDeleteWhenPop(), ODi_ListenerStateAction::getElementLevel(), UT_GenericVector< T >::getItemCount(), UT_GenericVector< T >::getLastItem(), ODi_Postpone_ListenerState::getParserState(), ODi_ElementStack::getStackSize(), ODi_ListenerStateAction::getState(), ODi_ListenerState::getStateName(), ODi_ListenerStateAction::getStateName(), m_currentAction, m_deleteCurrentWhenPop, ODi_StreamListener::StackCell::m_deleteWhenPop, m_elemenStackSize, m_fontFaceDecls, m_pCurrentState, m_pElementStack, m_postponedParsing, ODi_StreamListener::StackCell::m_pState, m_stateAction, m_stateStack, m_xmlRecorder, ODI_NONE, UT_GenericVector< T >::pop_back(), ODi_ListenerStateAction::popState(), UT_GenericVector< T >::push_back(), UT_ASSERT, and UT_VECTOR_PURGEALL.
Referenced by _endElement(), and _startElement().
void ODi_StreamListener::_playRecordedElement | ( | ) | [private] |
References charData(), ODi_XMLRecorder::clear(), endElement(), gchar, ODi_XMLRecorder::getCall(), ODi_XMLRecorder::getCallCount(), m_currentAction, ODi_XMLRecorder::CharDataCall::m_length, ODi_XMLRecorder::CharDataCall::m_pBuffer, ODi_XMLRecorder::EndElementCall::m_pName, ODi_XMLRecorder::StartElementCall::m_pName, ODi_XMLRecorder::StartElementCall::m_ppAtts, m_xmlRecorder, startElement(), ODi_XMLRecorder::XMLCallType_CharData, ODi_XMLRecorder::XMLCallType_EndElement, and ODi_XMLRecorder::XMLCallType_StartElement.
Referenced by _endElement().
void ODi_StreamListener::_resumeParsing | ( | ODi_Postpone_ListenerState * | pPostponeState | ) | [private] |
Resumes the parsing of a XML element that was postponed.
References charData(), endElement(), gchar, ODi_XMLRecorder::getCall(), ODi_XMLRecorder::getCallCount(), ODi_Postpone_ListenerState::getDeleteParserStateWhenPop(), ODi_Postpone_ListenerState::getParserState(), ODi_Postpone_ListenerState::getXMLRecorder(), ODi_XMLRecorder::CharDataCall::m_length, m_pAbiDocument, ODi_XMLRecorder::CharDataCall::m_pBuffer, m_pElementStack, m_pGsfInfile, ODi_XMLRecorder::EndElementCall::m_pName, ODi_XMLRecorder::StartElementCall::m_pName, ODi_XMLRecorder::StartElementCall::m_ppAtts, m_pStyles, m_rAbiData, setState(), startElement(), ODi_XMLRecorder::XMLCallType_CharData, ODi_XMLRecorder::XMLCallType_EndElement, and ODi_XMLRecorder::XMLCallType_StartElement.
Referenced by _handleStateAction().
void ODi_StreamListener::_startElement | ( | const gchar * | pName, | |
const gchar ** | ppAtts, | |||
bool | doingRecursion | |||
) | [private] |
References _handleStateAction(), ODi_ListenerStateAction::ACTION_NONE, ODi_ListenerStateAction::getAction(), m_currentAction, m_pCurrentState, m_pElementStack, m_stateAction, m_xmlRecorder, ODI_IGNORING, ODI_RECORDING, ODi_ListenerStateAction::reset(), ODi_ElementStack::startElement(), ODi_XMLRecorder::startElement(), ODi_ListenerState::startElement(), and UT_ASSERT.
Referenced by startElement().
void ODi_StreamListener::charData | ( | const gchar * | pBuffer, | |
int | length | |||
) | [virtual] |
Implements UT_XML::Listener.
References ODi_XMLRecorder::charData(), ODi_ListenerState::charData(), m_currentAction, m_pCurrentState, m_xmlRecorder, ODI_RECORDING, and UT_return_if_fail.
Referenced by _playRecordedElement(), and _resumeParsing().
void ODi_StreamListener::clearFontFaceDecls | ( | ) | [inline] |
References ODi_FontFaceDecls::clear(), and m_fontFaceDecls.
void ODi_StreamListener::endElement | ( | const gchar * | pName | ) | [inline, virtual] |
Implements UT_XML::Listener.
References _endElement().
Referenced by _playRecordedElement(), and _resumeParsing().
ODi_ListenerState* ODi_StreamListener::getCurrentState | ( | ) | [inline] |
References m_pCurrentState.
ODi_ElementStack* ODi_StreamListener::getElementStack | ( | ) | [inline] |
References m_pElementStack.
Referenced by IE_Imp_OpenDocument::_handleManifestStream().
UT_Error ODi_StreamListener::setState | ( | const char * | pStateName | ) |
Sets the current state of the stream listener.
pStateName | The name of the state |
References _clear(), _createState(), UT_GenericVector< T >::getItemCount(), m_deleteCurrentWhenPop, m_pCurrentState, m_stateStack, and UT_ASSERT.
Referenced by IE_Imp_OpenDocument::_handleContentStream(), IE_Imp_OpenDocument::_handleManifestStream(), IE_Imp_OpenDocument::_handleMetaStream(), IE_Imp_OpenDocument::_handleSettingsStream(), IE_Imp_OpenDocument::_handleStylesStream(), and _resumeParsing().
void ODi_StreamListener::setState | ( | ODi_ListenerState * | pState, | |
bool | deleteWhenPop | |||
) |
References _clear(), UT_GenericVector< T >::getItemCount(), m_deleteCurrentWhenPop, m_pCurrentState, m_stateStack, and UT_ASSERT.
void ODi_StreamListener::startElement | ( | const gchar * | pName, | |
const gchar ** | ppAtts | |||
) | [inline, virtual] |
Implements UT_XML::Listener.
References _startElement().
Referenced by _playRecordedElement(), and _resumeParsing().
Referenced by _endElement(), _handleStateAction(), _playRecordedElement(), _startElement(), charData(), and ~ODi_StreamListener().
bool ODi_StreamListener::m_deleteCurrentWhenPop [private] |
Referenced by _clear(), _handleStateAction(), and setState().
Referenced by _endElement(), and _handleStateAction().
Referenced by _createState(), _handleStateAction(), and clearFontFaceDecls().
bool ODi_StreamListener::m_ownStack [private] |
Referenced by ODi_StreamListener(), and ~ODi_StreamListener().
PD_Document* ODi_StreamListener::m_pAbiDocument [private] |
Referenced by _createState(), _resumeParsing(), and ODi_StreamListener().
Referenced by _clear(), _endElement(), _handleStateAction(), _startElement(), charData(), getCurrentState(), setState(), and ~ODi_StreamListener().
GsfInfile* ODi_StreamListener::m_pGsfInfile [private] |
Referenced by _createState(), _resumeParsing(), and ODi_StreamListener().
Referenced by _handleStateAction(), and ~ODi_StreamListener().
ODi_Office_Styles* ODi_StreamListener::m_pStyles [private] |
Referenced by _createState(), _resumeParsing(), and ODi_StreamListener().
ODi_Abi_Data& ODi_StreamListener::m_rAbiData [private] |
Referenced by _createState(), and _resumeParsing().
Referenced by _endElement(), _handleStateAction(), and _startElement().
Referenced by _clear(), _handleStateAction(), setState(), and ~ODi_StreamListener().
Referenced by _endElement(), _handleStateAction(), _playRecordedElement(), _startElement(), and charData().