summaryrefslogtreecommitdiff
path: root/xml2cmp/source/xcd/cr_index.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xml2cmp/source/xcd/cr_index.cxx')
-rw-r--r--xml2cmp/source/xcd/cr_index.cxx275
1 files changed, 275 insertions, 0 deletions
diff --git a/xml2cmp/source/xcd/cr_index.cxx b/xml2cmp/source/xcd/cr_index.cxx
new file mode 100644
index 000000000000..e73d87971cb8
--- /dev/null
+++ b/xml2cmp/source/xcd/cr_index.cxx
@@ -0,0 +1,275 @@
+/*************************************************************************
+ *
+ * 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 "cr_index.hxx"
+
+#include <string.h>
+#include <fstream>
+#include "../support/syshelp.hxx"
+#include "xmltree.hxx"
+#include "parse.hxx"
+#include "cr_html.hxx"
+
+
+extern unsigned C_nSupportedServicesIndex;
+
+char C_sLineEnd[] = "\n";
+
+char C_sFileBegin[] = "<HTML><HEAD></HEAD><BODY bgcolor=\"#ffffff\">\n";
+char C_sFileEnd[] = "</BODY></HTML>\n";
+char C_sTableBegin[] = "<TABLE WIDTH=100% BORDER=1 CELLPADDING=4 CELLSPACING=0><TBODY>\n";
+char C_sTableEnd[] = "</TBODY></TABLE>\n";
+char C_sService[] = "SupportedService";
+char C_sModule[] = "ModuleName";
+char C_sComponentname[] = "ComponentName";
+
+
+
+Simstr sIdlRootPath;
+
+
+Index::Index( const char * i_sOutputDirectory,
+ const char * i_sIdlRootPath,
+ const List<Simstr> & )
+ : aService2Module(20),
+ aModule2Service(20),
+ sOutputDirectory(i_sOutputDirectory),
+ sIdlRootPath(i_sIdlRootPath)
+ // sCurModule
+{
+ ::sIdlRootPath = i_sIdlRootPath;
+}
+
+Index::~Index()
+{
+}
+
+void
+Index::GatherData( const List<Simstr> & i_rInputFileList )
+{
+ for ( unsigned i = 0; i < i_rInputFileList.size(); ++i )
+ {
+ ReadFile( i_rInputFileList[i].str() );
+ }
+}
+
+void
+Index::WriteOutput( const char * i_sOuputFile )
+{
+ std::ofstream aOut( i_sOuputFile, std::ios::out );
+ if (! aOut)
+ {
+ std::cerr << "Error: Indexfile \""
+ << i_sOuputFile
+ << "\" could not be created."
+ << std::endl;
+ return;
+ }
+
+ WriteStr(aOut, C_sFileBegin);
+
+ WriteStr(aOut, "<H2>Module Descriptions Index</H2>");
+ WriteStr(aOut, C_sLineEnd );
+
+
+ WriteTableFromHeap( aOut, aService2Module, C_sService, C_sModule, lt_html );
+ WriteTableFromHeap( aOut, aModule2Service, C_sModule, C_sService, lt_idl );
+
+ WriteStr( aOut, C_sFileEnd );
+ aOut.close();
+}
+
+void
+Index::InsertSupportedService( const Simstr & i_sService )
+{
+ aService2Module.InsertValue( i_sService, sCurModule );
+ aModule2Service.InsertValue( sCurModule, i_sService );
+}
+
+void
+Index::ReadFile( const char * i_sFilename )
+{
+ static char sOutputHtml[1020];
+
+ ModuleDescription aModule;
+ X2CParser aParser(aModule);
+
+ // Parse
+ bool bResult = aParser.Parse(i_sFilename);
+ if (! bResult)
+ {
+ std::cerr << "Error: File \""
+ << i_sFilename
+ << "\" could not be parsed."
+ << std::endl;
+ return;
+ }
+
+ // Create Html:
+ CreateHtmlFileName( sOutputHtml, aModule );
+ HtmlCreator aHtmlCreator( sOutputHtml, aModule, sIdlRootPath );
+ aHtmlCreator.Run();
+
+ // GetResults:
+ sCurModule = aModule.ModuleName();
+
+ List< const MultipleTextElement* > aSupportedServices;
+ aModule.Get_SupportedServices(aSupportedServices);
+
+ for ( unsigned s = 0; s < aSupportedServices.size(); ++s )
+ {
+ aSupportedServices[s]->Insert2Index(*this);
+ }
+}
+
+void
+Index::CreateHtmlFileName( char * o_sOutputHtml,
+ const ModuleDescription & i_rModule )
+{
+ if ( strlen(sOutputDirectory.str()) + strlen(i_rModule.ModuleName()) > 1000 )
+ {
+ strcpy( o_sOutputHtml, "too-long-filename.html"); // STRCPY SAFE HERE
+ return;
+ }
+
+ strcpy( o_sOutputHtml, sOutputDirectory.str() ); // STRCPY SAFE HERE
+#if defined(WNT) || defined(OS2)
+ strcat(o_sOutputHtml, "\\"); // STRCAT SAFE HERE
+#elif defined(UNX)
+ strcat(o_sOutputHtml, "/"); // STRCAT SAFE HERE
+#else
+#error WNT or UNX have to be defined.
+#endif
+ strcat( o_sOutputHtml, i_rModule.ModuleName() ); // STRCAT SAFE HERE
+ strcat( o_sOutputHtml, ".html" ); // STRCAT SAFE HERE
+}
+
+
+void
+Index::WriteTableFromHeap( std::ostream & o_rOut,
+ Heap & i_rHeap,
+ const char * i_sIndexValue,
+ const char * i_sIndexReference,
+ E_LinkType i_eLinkType )
+{
+ WriteStr(o_rOut, "<H3><BR>");
+ WriteStr(o_rOut, i_sIndexValue );
+ WriteStr(o_rOut, " -> ");
+ WriteStr(o_rOut, i_sIndexReference );
+ WriteStr(o_rOut, "</H3>\n");
+
+ WriteStr(o_rOut, C_sTableBegin);
+ WriteHeap( o_rOut, i_rHeap, i_eLinkType );
+ WriteStr(o_rOut, C_sTableEnd);
+}
+
+
+void
+Index::WriteHeap( std::ostream & o_rOut,
+ Heap & i_rHeap,
+ E_LinkType i_eLinkType )
+{
+ static Simstr S_sKey;
+ static char C_sSpaceInName[] = "&nbsp;&nbsp;&nbsp;";
+ S_sKey = "";
+
+
+ WriteStr( o_rOut, "<TR><TD width=33% valign=\"top\">" );
+
+ for ( HeapItem * pHeapTop = i_rHeap.ReleaseTop();
+ pHeapTop != 0;
+ pHeapTop = i_rHeap.ReleaseTop() )
+ {
+ if ( S_sKey != pHeapTop->Key() )
+ {
+ const char * pStart = pHeapTop->Key().str();
+ const char * pBreak = strstr( pStart, " in ");
+
+ if (S_sKey.l()>0)
+ {
+ WriteStr( o_rOut, "</TD></TR>\n" );
+ WriteStr( o_rOut, "<TR><TD width=33% valign=\"top\">" );
+ }
+
+ if ( pBreak == 0 )
+ WriteStr( o_rOut, pStart );
+ else
+ {
+ o_rOut.write( pStart, pBreak - pStart );
+ WriteStr( o_rOut, C_sSpaceInName );
+ WriteStr( o_rOut, pBreak );
+ }
+ WriteStr( o_rOut, "</TD><TD width=66%>" );
+ S_sKey = pHeapTop->Key();
+ }
+ else
+ {
+ WriteStr( o_rOut, "<BR>" );
+ }
+ WriteName( o_rOut, sIdlRootPath, pHeapTop->Value(), i_eLinkType );
+ delete pHeapTop;
+ }
+
+ WriteStr( o_rOut, "</TD></TR>\n" );
+}
+
+
+
+/** bersicht der Struktur
+
+MODULEDESCRIPTION
+{
+ ModuleName,
+ COMPONENTDESCRIPTION
+ {
+ Author,
+ Name,
+ Description,
+ LoaderName,
+ Language,
+ Status,
+ SupportedService+,
+ ReferenceDocu*
+ ServiceDependency*
+ Type*
+ }
+ ProjectBuildDependency*
+ RuntimeModuleDependency*
+ ReferenceDocu*
+ ServiceDependency*
+ Type*
+}
+
+
+*/
+
+
+
+
+
+