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 "cmdline.hxx" 29 30 #include <ctype.h> 31 #include <string.h> 32 #include <stdlib.h> 33 #include <iostream> 34 35 36 char C_sUseText[] = "Use: xml2cmp.exe \n" 37 " [-func funcFile] \n" 38 " [-html htmlFile] \n" 39 " [-types typeFile] \n" 40 " [-idlpath idlPath] \n" 41 " Xml_FileName\n" 42 " or: xml2cmp.exe \n" 43 " -ix \n" 44 " sourceDirectory \n" 45 " outputDirectory \n" 46 " [-idlpath idlPath] \n" 47 " tagname [tagname ...]"; 48 49 50 char C_sCmdFunc[] = "-func"; 51 char C_sCmdHtml[] = "-html"; 52 char C_sCmdType[] = "-types"; 53 char C_sCmdIndex[] = "-ix"; 54 char C_sCmdIdlPath[] = "-idlpath"; 55 56 57 58 bool GetParameter( Simstr & o_rMemory, int & io_nCountArg, int argc, char * argv[] ); 59 60 61 CommandLine::CommandLine( int argc, 62 char * argv[] ) 63 : bIsOk(true) 64 { 65 bool bDisplayUse = false; 66 67 /* Check command line: */ 68 if ( argc < 2 ) 69 bDisplayUse = true; 70 else if ( argc == 2 && ! isalnum(argv[1][0]) ) 71 bDisplayUse = true; 72 else if ( strcmp( argv[1], C_sCmdIndex ) == 0 && argc < 5 ) 73 bDisplayUse = true; 74 75 if (bDisplayUse) 76 { 77 std::cout << C_sUseText << std::endl; 78 bIsOk = false; 79 exit(0); 80 } 81 82 if ( strcmp( argv[1], C_sCmdIndex ) == 0 ) 83 { 84 ParseIndexCommand(argc,argv); 85 } 86 else 87 { 88 ParseSingleFileCommand(argc,argv); 89 } 90 91 if ( sXmlSourceFile.l() == 0 92 && sXmlSourceDirectory.l() == 0 ) 93 { 94 bIsOk = false; 95 } 96 else if ( sXmlSourceFile.l() > 0 97 && sXmlSourceDirectory.l() > 0 ) 98 { 99 bIsOk = false; 100 } 101 else if ( sIndexFile.l() > 0 102 && ( sXmlSourceDirectory.l() == 0 103 || aTagsInIndex.size() == 0 104 ) 105 ) 106 { 107 bIsOk = false; 108 } 109 110 } 111 112 CommandLine::~CommandLine() 113 { 114 } 115 116 117 const char * 118 CommandLine::ErrorText() const 119 { 120 static char cOut[] = "Error: Command line was incorrect. Probably there was a flag without\n" 121 " the corresponding parameter. Or there was no XML-sourcefile specified.\n"; 122 return cOut; 123 } 124 125 bool 126 GetParameter( Simstr & o_pMemory, 127 int & io_pCountArg, 128 int argc, 129 char * argv[] ) 130 { 131 io_pCountArg++; 132 if( io_pCountArg < argc ) 133 { 134 o_pMemory = argv[io_pCountArg]; 135 return true; 136 } 137 return false; 138 } 139 140 141 void 142 CommandLine::ParseIndexCommand( int argc, 143 char * argv[] ) 144 { 145 int nCountArg = 1; 146 bIsOk = GetParameter( 147 sXmlSourceDirectory, 148 nCountArg, 149 argc, 150 argv ); 151 if (bIsOk) 152 bIsOk = GetParameter( 153 sOutputDirectory, 154 nCountArg, 155 argc, 156 argv ); 157 if (bIsOk && strcmp( argv[nCountArg+1], C_sCmdIdlPath ) == 0 ) 158 bIsOk = GetParameter( 159 sIdlRootPath, 160 ++nCountArg, 161 argc, 162 argv ); 163 164 sIndexFile = sOutputDirectory; 165 #if defined(WNT) || defined(OS2) 166 sIndexFile+= "\\xmlindex.html"; 167 #elif defined(UNX) 168 sIndexFile+= "/xmlindex.html"; 169 #endif 170 171 for ( ++nCountArg; nCountArg < argc; ++nCountArg ) 172 { 173 Simstr sElementName(argv[nCountArg]); 174 aTagsInIndex.push_back( sElementName ); 175 } 176 } 177 178 179 void 180 CommandLine::ParseSingleFileCommand( int argc, 181 char * argv[] ) 182 { 183 for ( int nCountArg = 1; nCountArg < argc && bIsOk; ++nCountArg ) 184 { 185 if ( strcmp( argv[nCountArg], C_sCmdFunc ) == 0 ) 186 { 187 bIsOk = GetParameter( 188 sFuncFile, 189 nCountArg, 190 argc, 191 argv ); 192 } 193 else if ( strcmp( argv[nCountArg], C_sCmdHtml ) == 0 ) 194 { 195 bIsOk = GetParameter( 196 sHtmlFile, 197 nCountArg, 198 argc, 199 argv ); 200 } 201 else if ( strcmp( argv[nCountArg], C_sCmdType ) == 0 ) 202 { 203 bIsOk = GetParameter( 204 sTypeInfoFile, 205 nCountArg, 206 argc, 207 argv ); 208 } 209 else if ( strcmp( argv[nCountArg], C_sCmdIdlPath ) == 0 ) 210 { 211 bIsOk = GetParameter( 212 sIdlRootPath, 213 nCountArg, 214 argc, 215 argv ); 216 } 217 else 218 { 219 sXmlSourceFile = argv[nCountArg]; 220 } 221 } /* end for */ 222 } 223