summaryrefslogtreecommitdiff
path: root/hwpfilter/source/hwpfile.h
diff options
context:
space:
mode:
Diffstat (limited to 'hwpfilter/source/hwpfile.h')
-rw-r--r--hwpfilter/source/hwpfile.h312
1 files changed, 312 insertions, 0 deletions
diff --git a/hwpfilter/source/hwpfile.h b/hwpfilter/source/hwpfile.h
new file mode 100644
index 000000000000..a0d934de827c
--- /dev/null
+++ b/hwpfilter/source/hwpfile.h
@@ -0,0 +1,312 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+//
+// hwpfile.h
+// (C) 1998 Mizi Research, All rights are reserved
+//
+// $Id: hwpfile.h,v 1.5 2008-06-04 10:01:33 vg Exp $
+//
+
+#ifndef _HWPFILE_H_
+#define _HWPFILE_H_
+
+#include <stdio.h>
+#include <string.h>
+#include <fcntl.h>
+
+#include "hwplib.h"
+#include "hfont.h"
+#include "hstyle.h"
+#include "hpara.h"
+#include "list.hxx"
+
+#define HWP_V20 20
+#define HWP_V21 21
+#define HWP_V30 30
+
+struct FBox;
+struct EmPicture;
+struct HyperText;
+struct FBoxStyle;
+struct CellLine;
+struct Cell;
+struct OlePicture;
+struct Picture;
+struct HeaderFooter;
+struct ShowPageNum;
+struct DateCode;
+struct Table;
+
+class HIODev;
+class HWPInfo;
+class HWPFont;
+class HWPStyle;
+class HWPPara;
+class HStream;
+
+struct ColumnInfo{
+ int start_page;
+ bool bIsSet;
+ ColumnDef *coldef;
+ ColumnInfo(int num){
+ start_page = num;
+ bIsSet = false;
+ coldef = 0;
+ }
+};
+
+/**
+ * The HWPFile class is the main class of hwp for reading file
+ * information from stream
+ *
+ * The example is as below:
+ * <pre>
+ * HWPFile f;
+ * f.ReadHwpFile( stream );
+ * </pre>
+ *
+ * There are two way to read hwp information from stream, one is to read all at a time
+ * to use @ref ReadhwpFile() method like above example, other is to read partial information
+ * to use @ref Open(), @ref InfoRead(), @ref FontRead(), @ref StyleRead(), @ref ParaListRead(), @ref TagsRead(),
+ *
+ * @short HWP file management object
+ * @author Mizi Reserach
+ * @version $Id: hwpfile.h,v 1.5 2008-06-04 10:01:33 vg Exp $
+ */
+class DLLEXPORT HWPFile
+{
+ public:
+/**
+ * Default constructor
+ */
+ HWPFile( void );
+
+ ~HWPFile( void );
+
+ public:
+/**
+ * Initialize this object
+ */
+ void Init();
+
+/**
+ * Opens HStream to use it.
+ * @returns 0 if success, otherwise error code
+ * @see State()
+ */
+ int Open( HStream & );
+
+/**
+ * Say current state
+ * @returns 0 if normal, otherwise error code. If it's bigger than USER_ERROR_BIT, it is internally using error, otherwise it's system error which is able to get the message @ref strerror() method.
+ */
+ int State( void ) const;
+/**
+ * Sets the current state
+ */
+ int SetState(int errcode);
+/**
+ * Reads one byte from HIODev
+ */
+ int Read1b( void );
+/**
+ * Reads two byte from HIODev
+ */
+ int Read2b( void );
+/**
+ * Reads four byte from HIODev
+ */
+ long Read4b( void );
+/**
+ * Reads nmemb byte array from HIODev
+ */
+ int Read1b( void *ptr, size_t nmemb );
+/**
+ * Reads nmemb short type array from HIODev
+ */
+ int Read2b( void *ptr, size_t nmemb );
+/**
+ * Reads nmemb long type array from HIODev
+ */
+ int Read4b( void *ptr, size_t nmemb );
+/**
+ * Reads some bytes from HIODev not regarding endian's way
+ * @param size Amount for reading
+ */
+ size_t ReadBlock( void *ptr, size_t size );
+/**
+ * Skips some bytes from HIODev
+ */
+ size_t SkipBlock( size_t size );
+/**
+ * Reads main paragraph list
+ */
+ bool ReadParaList(LinkedList<HWPPara> &plist, unsigned char flag = 0);
+/**
+ * Sets if the stream is compressed
+ */
+ bool SetCompressed( bool );
+/**
+ * Sets current HIODev
+ */
+ HIODev *SetIODevice( HIODev *hiodev );
+
+/**
+ * Reads all information of hwp file from stream
+ */
+ int ReadHwpFile( HStream &);
+/**
+ * Reads document information of hwp file from HIODev
+ */
+ bool InfoRead(void);
+/**
+ * Reads font list of hwp file from HIODev
+ */
+ bool FontRead(void);
+/**
+ * Reads style list of hwp file from HIODev
+ */
+ bool StyleRead(void);
+/**
+ * Reads paragraph list of hwp file from HIODev
+ */
+ bool ParaListRead();
+/* ׸ ߰ д´. */
+/**
+ * Reads additional information like embeded image of hwp file from HIODev
+ */
+ bool TagsRead(void);
+
+ enum Paper
+ {
+ UserPaper = 0,
+ Col80Paper = 1,
+ Col132Paper = 2,
+ A4Paper = 3,
+ LetterPaper = 4,
+ B5Paper = 5,
+ B4Paper = 6,
+ LegalPaper = 7,
+ A3Paper = 8
+ };
+
+ void AddBox(FBox *);
+ void AddPage(){ m_nCurrentPage++;}
+ void AddColumnInfo();
+ void SetColumnDef(ColumnDef *coldef);
+ void AddParaShape(ParaShape *);
+ void AddCharShape(CharShape *);
+ void AddFBoxStyle(FBoxStyle *);
+ void AddDateFormat(DateCode *);
+ void AddHeaderFooter(HeaderFooter *);
+ void AddPageNumber(ShowPageNum *);
+ void AddTable(Table *);
+
+ ColumnDef* GetColumnDef(int);
+ int GetPageMasterNum(int page);
+
+ int getCurrentPage(){ return m_nCurrentPage;}
+ HWPInfo *GetHWPInfo(void) { return &_hwpInfo; }
+ HWPFont *GetHWPFont(void) { return &_hwpFont; }
+ HWPStyle *GetHWPStyle(void) { return &_hwpStyle; }
+ HWPPara *GetFirstPara(void) { return plist.first(); }
+ HWPPara *GetLastPara(void) { return plist.last(); }
+
+ EmPicture *GetEmPicture(Picture *pic);
+ EmPicture *GetEmPictureByName(char * name);
+ HyperText *GetHyperText();
+ FBox *GetBoxHead (void) { return blist.count()?blist.first():0; }
+ ParaShape *getParaShape(int);
+ CharShape *getCharShape(int);
+ FBoxStyle *getFBoxStyle(int);
+ DateCode *getDateCode(int);
+ HeaderFooter *getHeaderFooter(int);
+ ShowPageNum *getPageNumber(int);
+ Table *getTable(int);
+
+ int getParaShapeCount(){ return pslist.count(); }
+ int getCharShapeCount(){ return cslist.count(); }
+ int getFBoxStyleCount(){ return fbslist.count(); }
+ int getDateFormatCount(){ return datecodes.count(); }
+ int getHeaderFooterCount(){ return headerfooters.count(); }
+ int getPageNumberCount(){ return pagenumbers.count(); }
+ int getTableCount(){ return tables.count(); }
+ int getColumnCount(){ return columnlist.count(); }
+
+ int getMaxSettedPage(){ return m_nMaxSettedPage; }
+ void setMaxSettedPage(){ m_nMaxSettedPage = m_nCurrentPage; }
+
+ private :
+ int compareCharShape(CharShape *shape);
+ int compareParaShape(ParaShape *shape);
+
+ public:
+ int version;
+ bool compressed;
+ bool encrypted;
+ unsigned char linenumber;
+ int info_block_len;
+ int error_code;
+ OlePicture *oledata;
+
+ private:
+/* hwp ̸ */
+ char fname[256];
+ int m_nCurrentPage;
+ int m_nMaxSettedPage;
+ HIODev *hiodev;
+// read hwp contents
+ HWPInfo _hwpInfo;
+ HWPFont _hwpFont;
+ HWPStyle _hwpStyle;
+ LinkedList<ColumnInfo> columnlist;
+ // paragraph linked list
+ LinkedList<HWPPara> plist;
+ // floating box linked list
+ LinkedList<FBox> blist;
+ // embedded picture list(tag datas)
+ LinkedList<EmPicture> emblist;
+ LinkedList<HyperText> hyperlist;
+ int currenthyper;
+ LinkedList<ParaShape> pslist; /* Ÿǽ ʿ */
+ LinkedList<CharShape> cslist;
+ LinkedList<FBoxStyle> fbslist;
+ LinkedList<DateCode> datecodes;
+ LinkedList<HeaderFooter> headerfooters;
+ LinkedList<ShowPageNum> pagenumbers;
+ LinkedList<Table> tables;
+
+// for global document handling
+ static HWPFile *cur_doc;
+ friend HWPFile *GetCurrentDoc(void);
+ friend HWPFile *SetCurrentDoc(HWPFile *);
+};
+
+HWPFile *GetCurrentDoc(void);
+HWPFile *SetCurrentDoc(HWPFile *hwpfp);
+#endif /* _HWPFILE_H_ */