1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #include <fstream> 29 #include "cr_html.hxx" 30 #include "xmltree.hxx" 31 #include "../support/syshelp.hxx" 32 33 34 35 36 char C_sHtmlFileHeader1[] = 37 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\n" 38 "<HTML>\n" 39 "<HEAD>\n" 40 " <TITLE>"; 41 42 char C_sHtmlFileHeader2[] = 43 "</TITLE>\n" 44 " <META NAME=\"GENERATOR\" CONTENT=\"xml2cmp\">\n" 45 "</HEAD>\n" 46 "<BODY BGCOLOR=\"#ffffff\">\n<P><BR></P>"; 47 48 49 char C_sHtmlFileFoot[] = "</BODY>\n</HTML>\n"; 50 51 52 HtmlCreator::HtmlCreator( const char * i_pOutputFileName, 53 const XmlElement & i_rDocument, 54 const Simstr & i_sIDL_BaseDirectory ) 55 : aFile(i_pOutputFileName, std::ios::out 56 #if defined(WNT) || defined(OS2) 57 | std::ios::binary 58 #endif 59 ), 60 rDocument(i_rDocument), 61 sIdl_BaseDirectory(i_sIDL_BaseDirectory) 62 { 63 if ( !aFile ) 64 { 65 std::cerr << "Error: " << i_pOutputFileName << " could not be created." << std::endl; 66 exit(0); 67 } 68 } 69 70 HtmlCreator::~HtmlCreator() 71 { 72 aFile.close(); 73 } 74 75 void 76 HtmlCreator::Run() 77 { 78 WriteStr( C_sHtmlFileHeader1 ); 79 WriteStr( "ModuleDescription" ); 80 WriteStr( C_sHtmlFileHeader2 ); 81 82 rDocument.Write2Html(*this); 83 84 WriteStr( "<P><BR><BR></P>\n" ); 85 WriteStr( C_sHtmlFileFoot ); 86 } 87 88 void 89 HtmlCreator::StartTable() 90 { 91 WriteStr( "<P><BR></P>\n" ); 92 WriteStr( 93 "<TABLE WIDTH=95% BORDER=1 CELLSPACING=0 CELLPADDING=4>\n" 94 " <TBODY>\n" ); 95 } 96 97 void 98 HtmlCreator::FinishTable() 99 { 100 WriteStr( " </TBODY>\n" 101 "</TABLE>\n\n" ); 102 } 103 104 void 105 HtmlCreator::StartBigCell( const char * i_sTitle ) 106 { 107 WriteStr( "<TR><TD COLSPAN=2>\n" 108 "<H4><BR>" ); 109 WriteStr( i_sTitle ); 110 WriteStr( "</H4>\n" ); 111 112 } 113 114 void 115 HtmlCreator::FinishBigCell() 116 { 117 WriteStr( "</TD><TR>\n" ); 118 } 119 120 void 121 HtmlCreator::Write_SglTextElement( const SglTextElement & i_rElement, 122 bool i_bStrong ) 123 { 124 StartRow(); 125 126 WriteElementName( i_rElement.Name(), i_bStrong ); 127 128 StartCell( "77%"); 129 if (i_bStrong) 130 { 131 WriteStr( "<H4><A NAME=\"" ); 132 unsigned nLen = strlen(i_rElement.Data()); 133 if ( i_rElement.IsReversedName()) 134 { 135 const char * pEnd = strchr(i_rElement.Data(), ' '); 136 nLen = (unsigned)( pEnd - i_rElement.Data() ); 137 } 138 aFile.write( i_rElement.Data(), (int) nLen ); 139 WriteStr( "\">" ); 140 } 141 142 WriteName( aFile, sIdl_BaseDirectory, i_rElement.Data(), 143 i_bStrong ? lt_nolink : i_rElement.LinkType() ); 144 145 if (i_bStrong) 146 WriteStr( "</A></H4>" ); 147 FinishCell(); 148 149 FinishRow(); 150 } 151 152 void 153 HtmlCreator::Write_MultiTextElement( const MultipleTextElement & i_rElement ) 154 { 155 StartRow(); 156 157 WriteElementName( i_rElement.Name(), false ); 158 159 StartCell( "77%"); 160 unsigned i_max = i_rElement.Size(); 161 for ( unsigned i = 0; i < i_max; ++i ) 162 { 163 if (i > 0) 164 WriteStr( "<BR>\n" ); 165 WriteName( aFile, sIdl_BaseDirectory, i_rElement.Data(i), i_rElement.LinkType() ); 166 } // end for 167 FinishCell(); 168 169 FinishRow(); 170 } 171 172 void 173 HtmlCreator::Write_SglText( const Simstr & i_sName, 174 const Simstr & i_sValue ) 175 { 176 StartRow(); 177 178 WriteElementName( i_sName, false ); 179 180 StartCell( "77%"); 181 WriteStr( i_sValue ); 182 FinishCell(); 183 184 FinishRow(); 185 } 186 187 void 188 HtmlCreator::Write_ReferenceDocu( const Simstr & i_sName, 189 const Simstr & i_sRef, 190 const Simstr & i_sRole, 191 const Simstr & i_sTitle ) 192 { 193 StartRow(); 194 195 StartCell( "23%" ); 196 WriteStr(i_sName); 197 FinishCell(); 198 199 StartCell( "77%" ); 200 if ( !i_sRef.is_empty() ) 201 { 202 WriteStr("<A href=\""); 203 WriteStr(i_sRef); 204 WriteStr("\">"); 205 if ( !i_sTitle.is_empty() ) 206 WriteStr( i_sTitle ); 207 else 208 WriteStr(i_sRef); 209 WriteStr("</A><BR>\n"); 210 } 211 else if ( !i_sTitle.is_empty() ) 212 { 213 WriteStr("Title: "); 214 WriteStr( i_sTitle ); 215 WriteStr("<BR>\n"); 216 } 217 if ( !i_sRole.is_empty() ) 218 { 219 WriteStr("Role: "); 220 WriteStr( i_sRole ); 221 } 222 FinishCell(); 223 224 FinishRow(); 225 } 226 227 228 void 229 HtmlCreator::StartRow() 230 { 231 WriteStr( " <TR VALIGN=TOP>\n" ); 232 } 233 234 void 235 HtmlCreator::FinishRow() 236 { 237 WriteStr( " </TR>\n" ); 238 } 239 240 void 241 HtmlCreator::StartCell( const char * i_pWidth) 242 { 243 WriteStr( " <TD WIDTH=" ); 244 WriteStr( i_pWidth ); 245 WriteStr( ">\n <P>" ); 246 } 247 248 void 249 HtmlCreator::FinishCell() 250 { 251 WriteStr( "</P>\n </TD>\n" ); 252 } 253 254 void 255 HtmlCreator::WriteElementName( const Simstr & i_sName, 256 bool i_bStrong ) 257 { 258 StartCell( "23%" ); 259 if (i_bStrong) 260 WriteStr( "<H4>" ); 261 WriteStr(i_sName); 262 if (i_bStrong) 263 WriteStr( "</H4>" ); 264 FinishCell(); 265 } 266 267 268 269