summaryrefslogtreecommitdiff
path: root/xml2cmp/source/xcd/main.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xml2cmp/source/xcd/main.cxx')
-rw-r--r--xml2cmp/source/xcd/main.cxx326
1 files changed, 326 insertions, 0 deletions
diff --git a/xml2cmp/source/xcd/main.cxx b/xml2cmp/source/xcd/main.cxx
new file mode 100644
index 000000000000..d692149d2523
--- /dev/null
+++ b/xml2cmp/source/xcd/main.cxx
@@ -0,0 +1,326 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+
+
+#include <string.h>
+#include "../support/cmdline.hxx"
+#include "cr_metho.hxx"
+#include "cr_html.hxx"
+#include "cr_index.hxx"
+#include "xmlelem.hxx"
+#include "xmltree.hxx"
+#include "parse.hxx"
+#include "../support/syshelp.hxx"
+#include "../support/heap.hxx"
+
+
+
+int Do_IndexCommandLine(
+ const CommandLine & i_rCommandLine );
+int Do_SingleFileCommandLine(
+ const CommandLine & i_rCommandLine );
+void Create_TypeInfo(
+ const char * o_sOutputFile,
+ ModuleDescription & i_rData );
+
+
+int
+#ifdef WNT
+_cdecl
+#endif
+main( int argc,
+ char * argv[] )
+{
+ // Variables
+ CommandLine aCommandLine(argc, argv);
+ int ret = 0;
+
+ if (! aCommandLine.IsOk())
+ {
+ std::cerr << aCommandLine.ErrorText() << std::endl ;
+ return 1;
+ }
+
+ if ( aCommandLine.IsIndexCommand() )
+ ret = Do_IndexCommandLine(aCommandLine);
+ else
+ ret = Do_SingleFileCommandLine(aCommandLine);
+
+ return ret;
+}
+
+
+int
+Do_SingleFileCommandLine(const CommandLine & i_rCommandLine)
+{
+ ModuleDescription aDescr;
+ X2CParser aParser(aDescr);
+
+ // Load file and create Function-file
+ bool bLoadResult = aParser.LoadFile(i_rCommandLine.XmlSrcFile());
+ if (! bLoadResult)
+ {
+ std::cerr << "Error: File " << i_rCommandLine.XmlSrcFile() << " could not be loaded." << std::endl;
+ return 1;
+ }
+
+ if ( strlen(i_rCommandLine.FuncFile()) > 0 )
+ {
+ Create_AccessMethod( i_rCommandLine.FuncFile(),
+ aParser.PureText() );
+
+ std::cout << "File "
+ << i_rCommandLine.FuncFile()
+ << " with component_getDescriptionFunc() is created now."
+ << std::endl;
+ }
+
+ // Parse
+ aParser.Parse();
+
+ // Produce output
+ if ( strlen(i_rCommandLine.HtmlFile()) > 0 )
+ {
+ HtmlCreator aHtmlCreator( i_rCommandLine.HtmlFile(),
+ aDescr,
+ i_rCommandLine.IdlRootPath() );
+ aHtmlCreator.Run();
+ }
+
+ if (strlen(i_rCommandLine.TypeInfoFile()) > 0)
+ {
+ Create_TypeInfo( i_rCommandLine.TypeInfoFile(),
+ aDescr );
+ }
+
+ return 0;
+};
+
+int
+Do_IndexCommandLine(const CommandLine & i_rCommandLine)
+{
+ // Parsen files:
+ List<Simstr> aFiles;
+ Index aIndex( i_rCommandLine.OutputDirectory(),
+ i_rCommandLine.IdlRootPath(),
+ i_rCommandLine.IndexedTags() );
+
+ std::cout << "Gather xml-files ..." << std::endl;
+ GatherFileNames( aFiles, i_rCommandLine.XmlSrcDirectory() );
+
+ std::cout << "Create output ..." << std::endl;
+ aIndex.GatherData(aFiles);
+ aIndex.WriteOutput( i_rCommandLine.IndexOutputFile() );
+
+ std::cout << "... done." << std::endl;
+
+ return 0;
+};
+
+
+
+//******************** Creating of typeinfo ********************//
+
+
+void Put2StdOut_TypeInfo(
+ ModuleDescription & i_rData );
+void Put2File_TypeInfo(
+ const char * i_sOutputFile,
+ ModuleDescription & i_rData );
+void StreamOut_TypeInfo(
+ std::ostream & o_rOut,
+ ModuleDescription & i_rData,
+ const char * i_sSeparator );
+
+
+
+
+void
+Create_TypeInfo( const char * o_sOutputFile,
+ ModuleDescription & i_rData )
+{
+ if ( strcmp(o_sOutputFile, "stdout") == 0 )
+ Put2StdOut_TypeInfo(i_rData);
+ else
+ Put2File_TypeInfo(o_sOutputFile,i_rData);
+
+#if 0
+ std::ofstream aOut(o_sOutputFile, std::ios::out
+#if defined(WNT) || defined(OS2)
+ | std::ios::binary
+#endif
+ );
+ if ( !aOut )
+ {
+ std::cerr << "Error: " << o_sOutputFile << " could not be created." << std::endl;
+ return;
+ }
+
+ Heap aTypesHeap(12);
+ Simstr sLibPrefix = i_rData.ModuleName();
+
+ // Gather types:
+ List< const MultipleTextElement * > aTypes;
+ i_rData.Get_Types(aTypes);
+
+ for ( unsigned t = 0; t < aTypes.size(); ++t )
+ {
+ unsigned i_max = aTypes[t]->Size();
+ for ( unsigned i = 0; i < i_max; ++i )
+ {
+ aTypesHeap.InsertValue( aTypes[t]->Data(i), "" );
+ } // end for
+ }
+
+ // Write types:
+ WriteStr( aOut, sLibPrefix );
+ WriteStr( aOut, "_XML2CMPTYPES= ");
+
+ HeapItem * pLastHeapTop = 0;
+ for ( HeapItem * pHeapTop = aTypesHeap.ReleaseTop(); pHeapTop != 0; pHeapTop = aTypesHeap.ReleaseTop() )
+ {
+ if (pLastHeapTop != 0)
+ {
+ if ( 0 == strcmp(pHeapTop->Key(), pLastHeapTop->Key()) )
+ continue;
+ delete pLastHeapTop;
+ // pLastHeapTop = 0;
+ }
+ pLastHeapTop = pHeapTop;
+
+ WriteStr( aOut, "\t\\\n\t\t" );
+
+ const char * sEnd = strchr( pHeapTop->Key(), ' ' );
+ if (sEnd != 0)
+ {
+ const char * sQuali = strrchr( pHeapTop->Key(), ' ' )+1;
+ WriteStr( aOut, sQuali );
+ WriteStr( aOut, "." );
+ aOut.write( pHeapTop->Key(), sEnd - pHeapTop->Key() );
+ }
+ else
+ WriteStr( aOut, pHeapTop->Key() );
+ } // end for
+
+ if (pLastHeapTop != 0)
+ {
+ delete pLastHeapTop;
+ pLastHeapTop = 0;
+ }
+
+ aOut.close();
+#endif // 0
+}
+
+void
+Put2StdOut_TypeInfo( ModuleDescription & i_rData )
+{
+ StreamOut_TypeInfo(std::cout, i_rData, " ");
+}
+
+void
+Put2File_TypeInfo( const char * i_sOutputFile,
+ ModuleDescription & i_rData )
+{
+ std::ofstream aOut(i_sOutputFile, std::ios::out
+#if defined(WNT) || defined(OS2)
+ | std::ios::binary
+#endif
+ );
+ if ( !aOut )
+ {
+ std::cerr << "Error: " << i_sOutputFile << " could not be created." << std::endl;
+ return;
+ }
+
+ Simstr sLibPrefix = i_rData.ModuleName();
+ WriteStr( aOut, sLibPrefix );
+ WriteStr( aOut, "_XML2CMPTYPES= ");
+
+ StreamOut_TypeInfo(aOut, i_rData, "\t\\\n\t\t");
+
+ aOut.close();
+}
+
+void
+StreamOut_TypeInfo( std::ostream & o_rOut,
+ ModuleDescription & i_rData,
+ const char * i_sSeparator )
+{
+ Heap aTypesHeap(12);
+
+ // Gather types:
+ List< const MultipleTextElement * > aTypes;
+ i_rData.Get_Types(aTypes);
+
+ for ( unsigned t = 0; t < aTypes.size(); ++t )
+ {
+ unsigned i_max = aTypes[t]->Size();
+ for ( unsigned i = 0; i < i_max; ++i )
+ {
+ aTypesHeap.InsertValue( aTypes[t]->Data(i), "" );
+ } // end for
+ }
+
+ // Write types:
+ HeapItem * pLastHeapTop = 0;
+ for ( HeapItem * pHeapTop = aTypesHeap.ReleaseTop(); pHeapTop != 0; pHeapTop = aTypesHeap.ReleaseTop() )
+ {
+ if (pLastHeapTop != 0)
+ {
+ if ( 0 == strcmp(pHeapTop->Key(), pLastHeapTop->Key()) )
+ continue;
+ delete pLastHeapTop;
+ // pLastHeapTop = 0;
+ }
+ pLastHeapTop = pHeapTop;
+
+ WriteStr( o_rOut, i_sSeparator );
+
+ const char * sEnd = strchr( pHeapTop->Key(), ' ' );
+ if (sEnd != 0)
+ {
+ const char * sQuali = strrchr( pHeapTop->Key(), ' ' ) + 1;
+ WriteStr( o_rOut, sQuali );
+ WriteStr( o_rOut, "." );
+ o_rOut.write( pHeapTop->Key(), sEnd - pHeapTop->Key() );
+ }
+ else
+ WriteStr( o_rOut, pHeapTop->Key() );
+ } // end for
+
+ if (pLastHeapTop != 0)
+ {
+ delete pLastHeapTop;
+ pLastHeapTop = 0;
+ }
+}
+