Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OB_CONV_H
00020 #define OB_CONV_H
00021
00022 #include <openbabel/babelconfig.h>
00023
00024 #include <iostream>
00025 #include <fstream>
00026 #include <sstream>
00027
00028 #include <string>
00029 #include <vector>
00030 #include <map>
00031 #ifdef HAVE_STRINGS_H
00032 #include <strings.h>
00033 #endif
00034
00035 #include <openbabel/dlhandler.h>
00036 #include <openbabel/oberror.h>
00037 #include <openbabel/format.h>
00038 #include <openbabel/lineend.h>
00039
00040
00041
00042 #ifndef OBCONV
00043 #define OBCONV
00044 #endif
00045 #ifndef OBDLL
00046 #define OBDLL
00047 #endif
00048
00049
00050 namespace OpenBabel {
00051
00052
00053 typedef OBPlugin::PluginIterator Formatpos;
00054
00055 OBERROR extern OBMessageHandler obErrorLog;
00056
00057
00059
00060 class OBCONV OBConversion
00061 {
00063 public:
00065
00066 OBConversion(std::istream* is=NULL, std::ostream* os=NULL);
00068 OBConversion(const OBConversion& o);
00069 virtual ~OBConversion();
00071
00072
00073
00074 static int RegisterFormat(const char* ID, OBFormat* pFormat, const char* MIME = NULL);
00076 static OBFormat* FindFormat(const char* ID);
00079 static OBFormat* FindFormat(const std::string ID);
00081 static OBFormat* FormatFromExt(const char* filename);
00084 static OBFormat* FormatFromExt(const std::string filename);
00086 static OBFormat* FormatFromMIME(const char* MIME);
00087
00089 static bool GetNextFormat(Formatpos& itr, const char*& str,OBFormat*& pFormat);
00091
00093
00094 static const char* Description();
00096
00098
00099 std::istream* GetInStream() const {return pInStream;};
00100 std::ostream* GetOutStream() const {return pOutStream;};
00101 void SetInStream(std::istream* pIn)
00102 {
00103 if (pInStream && NeedToFreeInStream) {
00104 delete pInStream; NeedToFreeInStream = false;
00105 }
00106 pInStream=pIn;
00107 CheckedForGzip = false;
00108 };
00109 void SetOutStream(std::ostream* pOut)
00110 {
00111 if (pOutStream && NeedToFreeOutStream) {
00112 delete pOutStream; NeedToFreeOutStream = false;
00113 }
00114 pOutStream=pOut;
00115 };
00117 bool SetInAndOutFormats(const char* inID, const char* outID);
00118 bool SetInAndOutFormats(OBFormat* pIn, OBFormat* pOut);
00120 bool SetInFormat(const char* inID);
00121 bool SetInFormat(OBFormat* pIn);
00123 bool SetOutFormat(const char* outID);
00124 bool SetOutFormat(OBFormat* pOut);
00125
00126 OBFormat* GetInFormat() const{return pInFormat;};
00127 OBFormat* GetOutFormat() const{return pOutFormat;};
00128 std::string GetInFilename() const{return InFilename;};
00129
00131 std::streampos GetInPos()const{return wInpos;};
00132
00134 size_t GetInLen()const{return wInlen;};
00135
00137 const char* GetTitle() const;
00138
00140 OBConversion* GetAuxConv() const {return pAuxConv;};
00141 void SetAuxConv(OBConversion* pConv) {pAuxConv=pConv;};
00143
00180
00181 enum Option_type { INOPTIONS, OUTOPTIONS, GENOPTIONS, ALL };
00182
00184 const char* IsOption(const char* opt,Option_type opttyp=OUTOPTIONS);
00185
00187 const std::map<std::string,std::string>* GetOptions(Option_type opttyp)
00188 { return &OptionsArray[opttyp];};
00189
00191 void AddOption(const char* opt, Option_type opttyp=OUTOPTIONS, const char* txt=NULL);
00192
00193 bool RemoveOption(const char* opt, Option_type optype);
00194
00196 void SetOptions(const char* options, Option_type opttyp);
00197
00199 static void RegisterOptionParam(std::string name, OBFormat* pFormat,
00200 int numberParams=0, Option_type typ=OUTOPTIONS);
00201
00203 static int GetOptionParams(std::string name, Option_type typ);
00205
00207 void CopyOptions(OBConversion* pSourceConv, Option_type typ=ALL);
00208
00210
00211
00212 std::vector<std::string> GetSupportedInputFormat();
00213
00214 std::vector<std::string> GetSupportedOutputFormat();
00216
00218
00219
00220 int Convert(std::istream* is, std::ostream* os);
00221
00223 int Convert();
00224
00227 int FullConvert(std::vector<std::string>& FileList,
00228 std::string& OutputFileName, std::vector<std::string>& OutputFileList);
00230
00232
00233 int AddChemObject(OBBase* pOb);
00234 OBBase* GetChemObject();
00235 bool IsLast();
00236 bool IsFirstInput();
00237 void SetFirstInput(bool b=true);
00238 int GetOutputIndex() const ;
00239 void SetOutputIndex(int indx);
00240 void SetMoreFilesToCome();
00241 void SetOneObjectOnly(bool b=true);
00242 void SetLast(bool b){SetOneObjectOnly(b);}
00243 bool IsLastFile(){ return !MoreFilesToCome;}
00244
00245
00246 int GetCount()const { return Count; }
00248
00249
00250
00251 static OBFormat* GetDefaultFormat(){return OBFormat::FindType(NULL);};
00252
00254
00257 bool Write(OBBase* pOb, std::ostream* pout=NULL);
00258
00260
00266 std::string WriteString(OBBase* pOb, bool trimWhitespace = false);
00267
00269
00274 bool WriteFile(OBBase* pOb, std::string filePath);
00275
00280 void CloseOutFile();
00281
00283
00287 bool Read(OBBase* pOb, std::istream* pin=NULL);
00288
00292
00293
00295
00299 bool ReadString(OBBase* pOb, std::string input);
00300
00302
00309 bool ReadFile(OBBase* pOb, std::string filePath);
00310
00316 bool OpenInAndOutFiles(std::string infilepath, std::string outfilepath);
00317
00322 void ReportNumberConverted(int count, OBFormat* pFormat=NULL);
00323
00327 int NumInputObjects();
00328
00329
00330 protected:
00332 static std::string BatchFileName(std::string& BaseName, std::string& InFile);
00334 static std::string IncrementedFileName(std::string& BaseName, const int Count);
00336 static bool CheckForUnintendedBatch(const std::string& infile, const std::string& outfile);
00338 void InstallStreamFilter();
00339
00341
00342 protected:
00343 bool SetStartAndEnd();
00344
00345
00346 typedef std::map<std::string,int> OPAMapType;
00347 static OPAMapType& OptionParamArray(Option_type typ);
00348 static int LoadFormatFiles();
00349 bool OpenAndSetFormat(bool SetFormat, std::ifstream* is, std::stringstream* ss=NULL);
00350
00351 std::string InFilename;
00352 std::istream* pInStream;
00353 std::ostream* pOutStream;
00354 static OBFormat* pDefaultFormat;
00355 OBFormat* pInFormat;
00356 OBFormat* pOutFormat;
00357
00358 std::map<std::string,std::string> OptionsArray[3];
00359
00360 int Index;
00361 unsigned int StartNumber;
00362 unsigned int EndNumber;
00363 int Count;
00364 bool m_IsFirstInput;
00365 bool m_IsLast;
00366 bool MoreFilesToCome;
00367 bool OneObjectOnly;
00368 bool ReadyToInput;
00369 bool CheckedForGzip;
00370 bool NeedToFreeInStream;
00371 bool NeedToFreeOutStream;
00372 typedef FilteringInputStreambuf< LineEndingExtractor > LErdbuf;
00373 LErdbuf* pLineEndBuf;
00374
00375 static int FormatFilesLoaded;
00376 OBBase* pOb1;
00377 std::streampos wInpos;
00378 std::streampos rInpos;
00379 size_t wInlen;
00380 size_t rInlen;
00381
00382 OBConversion* pAuxConv;
00383
00384 std::vector<std::string> SupportedInputFormat;
00385 std::vector<std::string> SupportedOutputFormat;
00386
00387 };
00388
00389 }
00390 #endif //OB_CONV_H
00391
00394
00395