summaryrefslogtreecommitdiff
path: root/autodoc/source/parser/inc/semantic
diff options
context:
space:
mode:
Diffstat (limited to 'autodoc/source/parser/inc/semantic')
-rw-r--r--autodoc/source/parser/inc/semantic/callf.hxx287
-rw-r--r--autodoc/source/parser/inc/semantic/parseenv.hxx110
-rw-r--r--autodoc/source/parser/inc/semantic/sub_pe.hxx112
-rw-r--r--autodoc/source/parser/inc/semantic/sub_peu.hxx131
4 files changed, 640 insertions, 0 deletions
diff --git a/autodoc/source/parser/inc/semantic/callf.hxx b/autodoc/source/parser/inc/semantic/callf.hxx
new file mode 100644
index 000000000000..a76da81e280c
--- /dev/null
+++ b/autodoc/source/parser/inc/semantic/callf.hxx
@@ -0,0 +1,287 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_CALLF_HXX
+#define ADC_CPP_CALLF_HXX
+
+// USED SERVICES
+
+
+
+
+/** This represents a function to be called, if a specific kind of token
+ arrives in the semantic parser.
+
+ @descr This class is only to be used as member of PeStatus<PE>.
+ @template PE
+ The owning ParseEnvironment.
+ @see PeStatus, ParseEnvironment
+*/
+template <class PE>
+class CallFunction
+{
+ public:
+ typedef void (PE::*F_Tok)(const char *);
+
+ CallFunction(
+ F_Tok i_f2Call,
+ INT16 i_nTokType );
+
+ F_Tok GetF() const;
+ INT16 TokType() const;
+
+ private:
+ // DATA
+ F_Tok f2Call;
+ INT16 nTokType;
+};
+
+
+/** One state within a ParseEnvironment.
+
+ @template PE
+ The owning ParseEnvironment.
+*/
+template <class PE>
+class PeStatus
+{
+ public:
+ typedef typename CallFunction<PE>::F_Tok F_Tok;
+
+ PeStatus(
+ PE & i_rMyPE,
+ uintt i_nSize,
+ F_Tok * i_pFuncArray,
+ INT16 * i_pTokTypeArray,
+ F_Tok i_pDefault );
+ virtual ~PeStatus();
+
+ virtual void Call_Handler(
+ INT16 i_nTokTypeId,
+ const char * i_sTokenText ) const;
+
+ private:
+ bool CheckForCall(
+ uintt i_nPos,
+ INT16 i_nTokTypeId,
+ const char * i_sTokenText ) const;
+
+ PE * pMyPE;
+ std::vector< CallFunction<PE> >
+ aBranches;
+ F_Tok fDefault;
+};
+
+
+template <class PE>
+class PeStatusArray
+{
+ public:
+ typedef typename PE::E_State State;
+
+ PeStatusArray();
+ void InsertState(
+ State i_ePosition,
+ DYN PeStatus<PE> & let_drState );
+ ~PeStatusArray();
+
+ const PeStatus<PE> &
+ operator[](
+ State i_ePosition ) const;
+
+ void SetCur(
+ State i_eCurState );
+ const PeStatus<PE> &
+ Cur() const;
+
+ private:
+ DYN PeStatus<PE> * aStati[PE::size_of_states];
+ State eState;
+};
+
+
+
+// IMPLEMENTATION
+
+
+// CallFunction
+
+template <class PE>
+CallFunction<PE>::CallFunction( F_Tok i_f2Call,
+ INT16 i_nTokType )
+ : f2Call(i_f2Call),
+ nTokType(i_nTokType)
+{
+}
+
+template <class PE>
+inline typename CallFunction<PE>::F_Tok
+CallFunction<PE>::GetF() const
+{
+ return f2Call;
+}
+
+template <class PE>
+inline INT16
+CallFunction<PE>::TokType() const
+{
+ return nTokType;
+}
+
+
+
+// PeStatus
+
+template <class PE>
+PeStatus<PE>::PeStatus( PE & i_rMyPE,
+ uintt i_nSize,
+ F_Tok * i_pFuncArray,
+ INT16 * i_pTokTypeArray,
+ F_Tok i_fDefault )
+ : pMyPE(&i_rMyPE),
+ fDefault(i_fDefault)
+{
+ aBranches.reserve(i_nSize);
+ for ( uintt i = 0; i < i_nSize; ++i )
+ {
+// csv_assert(i > 0 ? i_pTokTypeArray[i] > i_pTokTypeArray[i-1] : true);
+ aBranches.push_back( CallFunction<PE>( i_pFuncArray[i], i_pTokTypeArray[i]) );
+ } // end for
+}
+
+template <class PE>
+PeStatus<PE>::~PeStatus()
+{
+
+}
+
+template <class PE>
+void
+PeStatus<PE>::Call_Handler( INT16 i_nTokTypeId,
+ const char * i_sTokenText ) const
+{
+ uintt nSize = aBranches.size();
+ uintt nPos = nSize / 2;
+
+ if ( i_nTokTypeId < aBranches[nPos].TokType() )
+ {
+ for ( --nPos; intt(nPos) >= 0; --nPos )
+ {
+ if (CheckForCall(nPos, i_nTokTypeId, i_sTokenText))
+ return;
+ }
+ }
+ else
+ {
+ for ( ; nPos < nSize; ++nPos )
+ {
+ if (CheckForCall(nPos, i_nTokTypeId, i_sTokenText))
+ return;
+ }
+ }
+
+ (pMyPE->*fDefault)(i_sTokenText);
+}
+
+template <class PE>
+bool
+PeStatus<PE>::CheckForCall( uintt i_nPos,
+ INT16 i_nTokTypeId,
+ const char * i_sTokenText ) const
+{
+ if ( aBranches[i_nPos].TokType() == i_nTokTypeId )
+ {
+ (pMyPE->*aBranches[i_nPos].GetF())(i_sTokenText);
+ return true;
+ }
+ return false;
+}
+
+// PeStatusArray
+
+template <class PE>
+PeStatusArray<PE>::PeStatusArray()
+ : eState(PE::size_of_states)
+{
+ memset(aStati, 0, sizeof aStati);
+}
+
+template <class PE>
+void
+PeStatusArray<PE>::InsertState( State i_ePosition,
+ DYN PeStatus<PE> & let_drState )
+{
+ csv_assert(aStati[i_ePosition] == 0);
+ aStati[i_ePosition] = &let_drState;
+}
+
+template <class PE>
+PeStatusArray<PE>::~PeStatusArray()
+{
+ int i_max = PE::size_of_states;
+ for (int i = 0; i < i_max; i++)
+ {
+ delete aStati[i];
+ } // end for
+}
+
+template <class PE>
+inline const PeStatus<PE> &
+PeStatusArray<PE>::operator[]( State i_ePosition ) const
+{
+ csv_assert( uintt(i_ePosition) < PE::size_of_states );
+ csv_assert( aStati[i_ePosition] != 0 );
+ return *aStati[i_ePosition];
+}
+
+template <class PE>
+inline void
+PeStatusArray<PE>::SetCur( State i_eCurState )
+{
+ eState = i_eCurState;
+}
+
+
+template <class PE>
+const PeStatus<PE> &
+PeStatusArray<PE>::Cur() const
+{
+ return (*this)[eState];
+}
+
+#define SEMPARSE_CREATE_STATUS(penv, state, default_function) \
+ pStati->InsertState( state, \
+ *new PeStatus<penv>( \
+ *this, \
+ sizeof( stateT_##state ) / sizeof (INT16), \
+ stateF_##state, \
+ stateT_##state, \
+ &penv::default_function ) )
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/semantic/parseenv.hxx b/autodoc/source/parser/inc/semantic/parseenv.hxx
new file mode 100644
index 000000000000..d6ba3daf661a
--- /dev/null
+++ b/autodoc/source/parser/inc/semantic/parseenv.hxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_PARSEENV_HXX
+#define ADC_PARSEENV_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <tokens/tokproct.hxx>
+ // COMPONENTS
+ // PARAMETERS
+
+
+namespace ary
+{
+namespace info
+{
+class CodeInfo;
+} // namespace info
+} // namespace ary)
+
+
+
+class SubPeUseIfc;
+
+
+class ParseEnvironment : protected TokenProcessing_Types
+{
+ public:
+ virtual ~ParseEnvironment() {}
+
+ // Parsing
+ void Enter(
+ E_EnvStackAction i_eWayOfEntering );
+ void Leave(
+ E_EnvStackAction i_eWayOfLeaving );
+ void SetCurSPU(
+ const SubPeUseIfc * i_pCurSPU );
+
+ ParseEnvironment * Parent() const;
+
+
+ // ACCESS
+ protected:
+ ParseEnvironment(
+ ParseEnvironment * i_pParent );
+ const SubPeUseIfc * CurSubPeUse() const;
+ private:
+ virtual void InitData() = 0;
+ virtual void TransferData() = 0;
+
+ ParseEnvironment * pParent;
+ const SubPeUseIfc * pCurSubPe;
+};
+
+class SubPeUseIfc
+{
+ public:
+ virtual ~SubPeUseIfc() {}
+
+ virtual void InitParse() const = 0;
+ virtual void GetResults() const = 0;
+};
+
+
+
+// IMPLEMENTATION
+
+inline void
+ParseEnvironment::SetCurSPU( const SubPeUseIfc * i_pCurSPU )
+ { pCurSubPe = i_pCurSPU; }
+
+inline ParseEnvironment *
+ParseEnvironment::Parent() const
+ { return pParent; }
+
+inline const SubPeUseIfc *
+ParseEnvironment::CurSubPeUse() const
+ { return pCurSubPe; }
+
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/semantic/sub_pe.hxx b/autodoc/source/parser/inc/semantic/sub_pe.hxx
new file mode 100644
index 000000000000..84775f2e9425
--- /dev/null
+++ b/autodoc/source/parser/inc/semantic/sub_pe.hxx
@@ -0,0 +1,112 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_SUB_PE_HXX
+#define ADC_CPP_SUB_PE_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+ // COMPONENTS
+ // PARAMETERS
+
+
+class ParseEnvironment;
+
+template <class PE, class SUB>
+class SubPe
+{
+ public:
+ typedef SubPe< PE, SUB > self;
+
+ SubPe(
+ PE & i_rParent );
+ PE & Parent() const;
+ SUB & Child() const;
+
+ ParseEnvironment & Get() const;
+
+ private:
+ SUB & CreateChild() const;
+
+ PE & rParent;
+ Dyn<SUB> pChild;
+};
+
+
+
+// IMPLEMENTATION
+
+
+// SubPe
+
+template <class PE, class SUB>
+SubPe<PE,SUB>::SubPe( PE & i_rParent )
+ : rParent(i_rParent)
+{
+}
+
+template <class PE, class SUB>
+PE &
+SubPe<PE,SUB>::Parent() const
+{
+ return rParent;
+}
+
+template <class PE, class SUB>
+inline SUB &
+SubPe<PE,SUB>::Child() const
+{
+ return pChild ? *pChild.MutablePtr() : CreateChild();
+}
+
+template <class PE, class SUB>
+ParseEnvironment &
+SubPe<PE,SUB>::Get() const
+{
+ return Child();
+}
+
+template <class PE, class SUB>
+SUB &
+SubPe<PE,SUB>::CreateChild() const
+{
+ self * pThis = const_cast< self* >(this);
+
+ SUB * pNewChild = new SUB( &rParent);
+
+ pThis->pChild = pNewChild;
+
+ return *pChild.MutablePtr();
+}
+
+
+
+
+#endif
+
diff --git a/autodoc/source/parser/inc/semantic/sub_peu.hxx b/autodoc/source/parser/inc/semantic/sub_peu.hxx
new file mode 100644
index 000000000000..c939f295c373
--- /dev/null
+++ b/autodoc/source/parser/inc/semantic/sub_peu.hxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef ADC_CPP_SUB_PEU_HXX
+#define ADC_CPP_SUB_PEU_HXX
+
+
+
+// USED SERVICES
+ // BASE CLASSES
+#include <semantic/parseenv.hxx>
+#include <tokens/tokproct.hxx>
+ // COMPONENTS
+ // PARAMETERS
+#include <semantic/sub_pe.hxx>
+
+
+
+template <class PE, class SUB>
+class SubPeUse : public SubPeUseIfc,
+ private TokenProcessing_Types
+{
+ public:
+ typedef void (PE::*F_INIT)();
+ typedef void (PE::*F_RETURN)();
+
+ SubPeUse(
+ SubPe<PE,SUB> & i_rSubPeCreator,
+ F_INIT i_fInit,
+ F_RETURN i_fReturn );
+ ~SubPeUse();
+
+ void Push(
+ E_TokenDone i_eDone );
+ virtual void InitParse() const;
+ virtual void GetResults() const;
+
+ PE & Parent() const;
+ SUB & Child() const;
+
+ private:
+ // DATA
+ SubPe<PE,SUB> & rSubPeCreator;
+ F_INIT fInit;
+ F_RETURN fReturn;
+};
+
+
+// IMPLEMENTATION
+
+
+template <class PE, class SUB>
+SubPeUse<PE,SUB>::SubPeUse( SubPe<PE,SUB> & i_rSubPeCreator,
+ F_INIT i_fInit,
+ F_RETURN i_fReturn )
+ : rSubPeCreator(i_rSubPeCreator),
+ fInit(i_fInit),
+ fReturn(i_fReturn)
+{
+}
+
+template <class PE, class SUB>
+SubPeUse<PE,SUB>::~SubPeUse()
+{
+}
+
+template <class PE, class SUB>
+void
+SubPeUse<PE,SUB>::Push( E_TokenDone i_eDone )
+{
+ Parent().SetTokenResult( i_eDone, push, &rSubPeCreator.Get() );
+ Parent().SetCurSPU(this);
+}
+
+template <class PE, class SUB>
+void
+SubPeUse<PE,SUB>::InitParse() const
+{
+ if (fInit != 0)
+ (Parent().*fInit)();
+}
+
+template <class PE, class SUB>
+void
+SubPeUse<PE,SUB>::GetResults() const
+{
+ if (fReturn != 0)
+ (Parent().*fReturn)();
+}
+
+template <class PE, class SUB>
+inline PE &
+SubPeUse<PE,SUB>::Parent() const
+{
+ return rSubPeCreator.Parent();
+}
+
+template <class PE, class SUB>
+inline SUB &
+SubPeUse<PE,SUB>::Child() const
+{
+ return rSubPeCreator.Child();
+}
+
+
+#endif
+