diff options
Diffstat (limited to 'hwpfilter/source/htags.cxx')
-rw-r--r-- | hwpfilter/source/htags.cxx | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/hwpfilter/source/htags.cxx b/hwpfilter/source/htags.cxx new file mode 100644 index 000000000000..30244a83f9b8 --- /dev/null +++ b/hwpfilter/source/htags.cxx @@ -0,0 +1,167 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * 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 "precompile.h" + +#ifdef __GNUG__ +#pragma implementation "htags.h" +#endif + +#include <string.h> + +#include "hwplib.h" +#include "hwpfile.h" +#include "htags.h" +#include "himgutil.h" + +bool HyperText::Read(HWPFile & hwpf) +{ + hwpf.Read1b(filename, 256); + hwpf.Read2b(bookmark, 16); + hwpf.Read1b(macro, 325); + hwpf.Read1b(&type, 1); + hwpf.Read1b(reserve, 3); + if( type == 2 ) + { + for( int i = 1; i < 256; i++) + { + filename[i-1] = filename[i]; + if( filename[i] == 0 ) + break; + } + } + return true; +} + + +EmPicture::EmPicture(int tsize):size(tsize - 32) +{ + if (size <= 0) + data = 0; + else + data = new uchar[size]; +} +#ifdef WIN32 +#define unlink _unlink +#endif +EmPicture::~EmPicture(void) +{ +// clear temporary image file + char *fname = (char *) GetEmbImgname(this); + + if (fname && access(fname, 0) == 0) + unlink(fname); + if (data) + delete[]data; +}; + +bool EmPicture::Read(HWPFile & hwpf) +{ + if (size <= 0) + return false; + hwpf.Read1b(name, 16); + hwpf.Read1b(type, 16); + name[0] = 'H'; + name[1] = 'W'; + name[2] = 'P'; + if (hwpf.ReadBlock(data, size) == 0) + return false; + return true; +} + + +OlePicture::OlePicture(int tsize) +{ + size = tsize - 4; + if (size <= 0) + return; +#ifdef WIN32 + pis = 0L; +#else + pis = new char[size]; +#endif +}; + +OlePicture::~OlePicture(void) +{ +#ifdef WIN32 + if( pis ) + pis->Release(); +#else + delete[] pis; +#endif +}; + +#define FILESTG_SIGNATURE_NORMAL 0xF8995568 + +bool OlePicture::Read(HWPFile & hwpf) +{ + if (size <= 0) + return false; + +// We process only FILESTG_SIGNATURE_NORMAL. + hwpf.Read4b(&signature, 1); + if (signature != FILESTG_SIGNATURE_NORMAL) + return false; +#ifdef WIN32 + char *data = new char[size]; + if( data == 0 || hwpf.ReadBlock(data,size) == 0 ) + { + delete [] data; + return false; + } + FILE *fp; + char tname[200]; + wchar_t wtname[200]; + tmpnam(tname); + if (0 == (fp = fopen(tname, "wb"))) + { + delete [] data; + return false; + } + fwrite(data, size, 1, fp); + delete [] data; + fclose(fp); + MultiByteToWideChar(CP_ACP, 0, tname, -1, wtname, 200); + if( StgOpenStorage(wtname, NULL, + STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED, + NULL, 0, &pis) != S_OK ) { + pis = 0; + unlink(tname); + return false; + } + unlink(tname); +#else + if (pis == 0 || hwpf.ReadBlock(pis, size) == 0) + return false; +#endif + + return true; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |