summaryrefslogtreecommitdiff
path: root/soltools/inc/gi_parse.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'soltools/inc/gi_parse.hxx')
-rw-r--r--soltools/inc/gi_parse.hxx165
1 files changed, 165 insertions, 0 deletions
diff --git a/soltools/inc/gi_parse.hxx b/soltools/inc/gi_parse.hxx
new file mode 100644
index 000000000000..636e3bffcb9c
--- /dev/null
+++ b/soltools/inc/gi_parse.hxx
@@ -0,0 +1,165 @@
+/*************************************************************************
+ *
+ * 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 SOLTOOLS_GI_PARSE_HXX
+#define SOLTOOLS_GI_PARSE_HXX
+
+#include "simstr.hxx"
+#include "gilacces.hxx"
+#include <fstream>
+
+class GenericInfoList_Builder;
+class GenericInfoList_Browser;
+
+/** Reads generic information files into a simple structure in memory.
+
+Information files used by this parser have the following format:
+
+key [value]
+{
+ key [value]
+ key [value]
+ {
+ key [value]
+ ...
+ ...
+ }
+}
+key [value]
+...
+...
+
+*/
+
+
+class GenericInfo_Parser : public GenericInfoParseTypes
+{
+ public:
+ typedef unsigned long UINT32;
+ typedef short INT16;
+
+ GenericInfo_Parser();
+ ~GenericInfo_Parser();
+
+ /** reads a information file and stores the data in a
+ List_GenericInfo
+ */
+ bool LoadList(
+ GenericInfoList_Builder &
+ o_rResult,
+ const Simstr & i_sSourceFileName );
+
+ /** save the InformationList to rSourceFile
+ returns false on error
+ */
+ bool SaveList(
+ const Simstr & i_rOutputFile,
+ GenericInfoList_Browser &
+ io_rListBrowser );
+
+ E_Error GetLastError(
+ UINT32 * o_pErrorLine = 0 ) const;
+
+ private:
+ enum E_LineType
+ {
+ lt_empty = 0,
+ lt_key,
+ lt_open_list,
+ lt_close_list,
+ lt_comment
+ };
+
+ void SetError(
+ E_Error i_eError );
+ void ResetState(
+ GenericInfoList_Builder &
+ io_rResult );
+ void ResetState(
+ GenericInfoList_Browser &
+ io_rSrc );
+
+ void ReadLine();
+ bool InterpretLine();
+ E_LineType ClassifyLine();
+
+ void ReadKey();
+ void PushLevel_Read(); /// When list is opened by '{':
+ void PopLevel_Read(); /// When list is closed by '}':
+ void AddCurLine2CurComment();
+
+ void WriteList(
+ std::ostream & o_rFile );
+
+ void PushLevel_Write(); /// When SubList is pushed in pResource
+ void PopLevel_Write(); /// When SubList is popped in pResource
+
+ void WriteComment(
+ std::ostream & o_rFile,
+ const char * i_sStr );
+ void WriteKey(
+ std::ostream & o_rFile,
+ const char * i_sStr );
+ void WriteValue(
+ std::ostream & o_rFile,
+ const char * i_sStr );
+ void WriteIndentation(
+ std::ostream & o_rFile );
+
+ // DATA
+ const char * sCurParsePosition;
+
+ UINT32 nCurLine;
+ INT16 nLevel;
+ bool bGoon;
+
+ Simstr sCurComment;
+
+ E_Error eErrorCode;
+ UINT32 nErrorLine;
+
+ GenericInfoList_Builder *
+ pResult;
+ GenericInfoList_Browser *
+ pResource;
+
+ char * dpBuffer;
+ char * sFilePtr;
+};
+
+
+inline GenericInfo_Parser::E_Error
+GenericInfo_Parser::GetLastError( UINT32 * o_pErrorLine ) const
+{
+ if ( o_pErrorLine != 0 )
+ *o_pErrorLine = nErrorLine;
+ return eErrorCode;
+}
+
+
+#endif
+
+