summaryrefslogtreecommitdiff
path: root/hwpfilter/source/hwpread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'hwpfilter/source/hwpread.cpp')
-rw-r--r--hwpfilter/source/hwpread.cpp816
1 files changed, 816 insertions, 0 deletions
diff --git a/hwpfilter/source/hwpread.cpp b/hwpfilter/source/hwpread.cpp
new file mode 100644
index 000000000000..c62d37ef4429
--- /dev/null
+++ b/hwpfilter/source/hwpread.cpp
@@ -0,0 +1,816 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: hwpread.cpp,v $
+ * $Revision: 1.5 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+/* $Id: hwpread.cpp,v 1.5 2008-04-10 12:10:14 rt Exp $ */
+
+#include "precompile.h"
+
+#include "list.hxx"
+
+#include "hwpfile.h"
+#include "hbox.h"
+#include "hpara.h"
+#include "drawing.h"
+#include "htags.h"
+#include "hcode.h"
+
+static short fboxnum = 1;
+static int zindex = 1;
+static int lnnumber = 0;
+
+int HBox::Read(HWPFile & )
+{
+// already read
+ return 1;
+}
+
+
+// skip block
+
+int SkipBlock::Read(HWPFile & hwpf)
+{
+ hwpf.Read4b(&data_block_len, 1);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(IS_SP_SKIP_BLOCK(hh) && (hh == dummy))){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+
+ data_block = new char[data_block_len];
+
+ return hwpf.Read1b(data_block, data_block_len);
+}
+
+
+// Field code(5)
+int FieldCode::Read(HWPFile & hwpf)
+{
+ ulong size;
+ hchar dummy;
+ ulong len1; /* hcharŸÀÔÀÇ ¹®ÀÚ¿­ Å×ÀÌÅÍ #1ÀÇ ±æÀÌ */
+ ulong len2; /* hcharŸÀÔÀÇ ¹®ÀÚ¿­ Å×ÀÌÅÍ #2ÀÇ ±æÀÌ */
+ ulong len3; /* hcharŸÀÔÀÇ ¹®ÀÚ¿­ Å×ÀÌÅÍ #3ÀÇ ±æÀÌ */
+ ulong binlen; /* ÀÓÀÇ Çü½ÄÀÇ ¹ÙÀ̳ʸ® µ¥ÀÌŸ ±æÀÌ */
+
+ hwpf.Read4b(&size, 1);
+ hwpf.Read2b(&dummy, 1);
+ hwpf.Read1b(&type, 2);
+ hwpf.Read4b(reserved1, 1);
+ hwpf.Read2b(&location_info, 1);
+ hwpf.Read1b(reserved2, 22);
+ hwpf.Read4b(&len1, 1);
+ hwpf.Read4b(&len2, 1);
+ hwpf.Read4b(&len3, 1);
+ hwpf.Read4b(&binlen, 1);
+
+ str1 = new hchar[len1];
+ str2 = new hchar[len2];
+ str3 = new hchar[len3];
+ bin = new char[binlen];
+
+ hwpf.Read2b(str1, len1/2);
+ hwpf.Read2b(str2, len2/2);
+ hwpf.Read2b(str3, len3/2);
+
+ hwpf.ReadBlock(bin, binlen);
+
+ if( type[0] == 3 && type[1] == 2 ){ /* ¸¸µç³¯Â¥·Î¼­ Æ÷¸ËÀ» »ý¼ºÇØ¾ß ÇÑ´Ù. */
+ DateCode *pDate = new DateCode;
+ for( int i = 0 ;i < (int)(len3/2) ; i++ ){
+ if(str3[i] == 0 ) break;
+ if( i >= DATE_SIZE ) break;
+ pDate->format[i] = str3[i];
+ }
+ hwpf.AddDateFormat(pDate);
+ m_pDate = pDate;
+ }
+
+ return true;
+}
+
+
+// book mark(6)
+int Bookmark::Read(HWPFile & hwpf)
+{
+ long len;
+
+ hwpf.Read4b(&len, 1);
+ dummy = sal::static_int_cast<hchar>(hwpf.Read2b());
+
+ if (!(len == 34))// 2 * (BMK_COMMENT_LEN + 1) + 2
+ {
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ if (!(hh == dummy && dummy == CH_BOOKMARK)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+
+ hwpf.Read2b(id, BMK_COMMENT_LEN + 1);
+ hwpf.Read2b(&type, 1);
+//return hwpf.Read2b(&type, 1);
+ return 1;
+}
+
+
+// date format(7)
+
+int DateFormat::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(format, DATE_SIZE);
+ dummy = sal::static_int_cast<hchar>(hwpf.Read2b());
+ if (!(hh == dummy && CH_DATE_FORM == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return true;
+}
+
+
+// date code(8)
+
+int DateCode::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(format, DATE_SIZE);
+ hwpf.Read2b(date, 6);
+ dummy = sal::static_int_cast<hchar>(hwpf.Read2b());
+ if (!(hh == dummy && CH_DATE_CODE == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ hwpf.AddDateFormat(this);
+ return true;
+}
+
+
+// tab(9)
+
+int Tab::Read(HWPFile & hwpf)
+{
+ width = hwpf.Read2b();
+ leader = sal::static_int_cast<unsigned short>(hwpf.Read2b());
+ dummy = sal::static_int_cast<hchar>(hwpf.Read2b());
+ if (!(hh == dummy && CH_TAB == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return true;
+}
+
+
+// tbox(10) TABLE BOX MATH BUTTON HYPERTEXT
+
+static void UpdateBBox(FBox * fbox)
+{
+ fbox->boundsy = fbox->pgy;
+ fbox->boundey = fbox->pgy + fbox->ys - 1;
+}
+
+
+void Cell::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&p, 1);
+ hwpf.Read2b(&color, 1);
+ hwpf.Read2b(&x, 1);
+ hwpf.Read2b(&y, 1);
+ hwpf.Read2b(&w, 1);
+ hwpf.Read2b(&h, 1);
+ hwpf.Read2b(&txthigh, 1);
+ hwpf.Read2b(&cellhigh, 1);
+
+ hwpf.Read1b(&flag, 1);
+ hwpf.Read1b(&changed, 1);
+ hwpf.Read1b(&used, 1);
+ hwpf.Read1b(&ver_align, 1);
+ hwpf.Read1b(linetype, 4);
+ hwpf.Read1b(&shade, 1);
+ hwpf.Read1b(&diagonal, 1);
+ hwpf.Read1b(&protect, 1);
+}
+
+
+int TxtBox::Read(HWPFile & hwpf)
+{
+ int ii, ncell;
+
+ hwpf.Read2b(reserved, 2);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy && CH_TEXT_BOX == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ hwpf.AddBox(this);
+ hwpf.Read2b(&style.cap_len, 1);
+ hwpf.Read2b(&dummy1, 1);
+ hwpf.Read2b(&next, 1);
+ hwpf.Read2b(&dummy2, 1);
+
+ style.boxnum = fboxnum++;
+ zorder = zindex++;
+ hwpf.Read1b(&style.anchor_type, 1);
+ hwpf.Read1b(&style.txtflow, 1);
+ hwpf.Read2b(&style.xpos, 1);
+ hwpf.Read2b(&style.ypos, 1);
+ hwpf.Read2b(&option, 1);
+ hwpf.Read2b(&ctrl_ch, 1);
+ hwpf.Read2b(style.margin, 12);
+ hwpf.AddFBoxStyle(&style);
+ hwpf.Read2b(&box_xs, 1);
+ hwpf.Read2b(&box_ys, 1);
+ hwpf.Read2b(&cap_xs, 1);
+ hwpf.Read2b(&cap_ys, 1);
+ hwpf.Read2b(&style.cap_len, 1);
+ hwpf.Read2b(&xs, 1);
+ hwpf.Read2b(&ys, 1);
+ hwpf.Read2b(&cap_margin, 1);
+ hwpf.Read1b(&xpos_type, 1);
+ hwpf.Read1b(&ypos_type, 1);
+ hwpf.Read1b(&smart_linesp, 1);
+ hwpf.Read1b(&reserved1, 1);
+ hwpf.Read2b(&pgx, 1);
+ hwpf.Read2b(&pgy, 1);
+ hwpf.Read2b(&pgno, 1);
+ if( ( pgno +1 ) != hwpf.getCurrentPage() )
+ pgno = sal::static_int_cast<short>(hwpf.getCurrentPage() -1) ;
+
+ hwpf.Read2b(&showpg, 1);
+ hwpf.Read2b(&cap_pos, 1);
+ hwpf.Read2b(&num, 1);
+ hwpf.Read2b(&dummy3, 1);
+ hwpf.Read2b(&baseline, 1);
+ hwpf.Read2b(&type, 1);
+ hwpf.Read2b(&nCell, 1);
+ hwpf.Read2b(&protect, 1);
+ switch (type)
+ {
+ case 0: //table
+ style.boxtype = 'T';
+ break;
+ case 1: // text-box
+ style.boxtype = 'X';
+ break;
+ case 2: // equation
+ style.boxtype = 'E';
+ break;
+ case 3: // button
+ style.boxtype = 'B';
+ break;
+ default: // other
+ style.boxtype = 'O';
+ break;
+ }
+
+ UpdateBBox(this);
+
+ ncell = NCell();
+ if (!(ncell > 0)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+
+ cell = new Cell[ncell];
+ for (ii = 0; ii < ncell; ii++)
+ {
+ cell[ii].Read(hwpf);
+ cell[ii].key = sal::static_int_cast<unsigned char>(ii);
+ }
+ if (ncell == 1)
+ style.cell = &cell[0];
+ plists = new LinkedList < HWPPara >[ncell];
+ for (ii = 0; ii < ncell; ii++)
+ hwpf.ReadParaList(plists[ii]);
+ // caption
+ hwpf.ReadParaList(caption);
+
+ if( type == 0 ){ // if table?
+ Table *tbl = new Table;
+ for( ii = 0 ; ii < ncell; ii++)
+ {
+ tbl->columns.insert(cell[ii].x);
+ tbl->columns.insert(cell[ii].x + cell[ii].w);
+ tbl->rows.insert(cell[ii].y);
+ tbl->rows.insert(cell[ii].y + cell[ii].h);
+ }
+ TCell* *pArr = new TCell*[ncell];
+ for( ii = 0 ; ii < ncell; ii++)
+ {
+ TCell *tcell = new TCell;
+ tcell->nColumnIndex = tbl->columns.getIndex(cell[ii].x);
+ tcell->nColumnSpan = tbl->columns.getIndex(cell[ii].x + cell[ii].w) -
+ tcell->nColumnIndex;
+ tcell->nRowIndex = tbl->rows.getIndex(cell[ii].y);
+ tcell->nRowSpan = tbl->rows.getIndex(cell[ii].y + cell[ii].h) -
+ tcell->nRowIndex;
+ tcell->pCell = &cell[ii];
+ pArr[ii] = tcell;
+ }
+ TCell *tmp;
+ // Sort by row and column
+ for( ii = 0 ; ii < ncell - 1; ii++ ){
+ for( int jj = ii ; jj < ncell ; jj++){
+ if( pArr[ii]->nRowIndex > pArr[jj]->nRowIndex ){
+ tmp = pArr[ii];
+ pArr[ii] = pArr[jj];
+ pArr[jj] = tmp;
+ }
+ }
+ for( int kk = ii ; kk > 0 ; kk--){
+ if( ( pArr[kk]->nRowIndex == pArr[kk-1]->nRowIndex ) &&
+ (pArr[kk]->nColumnIndex < pArr[kk-1]->nColumnIndex )){
+ tmp = pArr[kk];
+ pArr[kk] = pArr[kk-1];
+ pArr[kk-1] = tmp;
+ }
+ }
+ }
+ for( ii = 0 ; ii < ncell ; ii++ ){
+ tbl->cells.insert(pArr[ii]);
+ }
+ tbl->box = this;
+ hwpf.AddTable(tbl);
+ m_pTable = tbl;
+ delete[] pArr;
+ }
+ else
+ m_pTable = 0L;
+
+ return !hwpf.State();
+}
+
+
+// picture(11)
+int Picture::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(reserved, 2);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy && CH_PICTURE == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ hwpf.AddBox(this);
+
+ hwpf.Read4b(&follow_block_size, 1);
+ hwpf.Read2b(&dummy1, 1); /* ¿¹¾à 4¹ÙÀÌÆ® */
+ hwpf.Read2b(&dummy2, 1);
+
+ style.boxnum = fboxnum++;
+ zorder = zindex++;
+ hwpf.Read1b(&style.anchor_type, 1); /* ±âÁØÀ§Ä¡ */
+ hwpf.Read1b(&style.txtflow, 1); /* ±×¸²ÇÇÇÔ. 0-2(ÀÚ¸®Â÷Áö,Åõ¸í,¾î¿ï¸²) */
+ hwpf.Read2b(&style.xpos, 1); /* °¡·ÎÀ§Ä¡ : 1 ¿ÞÂÊ, 2¿À¸¥ÂÊ, 3 °¡¿îµ¥, ÀÌ¿Ü = ÀÓÀÇ */
+ hwpf.Read2b(&style.ypos, 1); /* ¼¼·ÎÀ§Ä¡ : 1 À§, 2 ¾Æ·¡, 3 °¡¿îµ¥, ÀÌ¿Ü ÀÓÀÇ */
+ hwpf.Read2b(&option, 1); /* ±âŸ¿É¼Ç : Å׵θ®,±×¸²¹ÝÀü,µî. bit·Î ÀúÀå. */
+ hwpf.Read2b(&ctrl_ch, 1); /* Ç×»ó 11 */
+ hwpf.Read2b(style.margin, 12); /* ¿©¹é : [0-2][] out/in/¼¿,[][0-3] ¿Þ/¿À¸¥/À§/¾Æ·¡ ¿©¹é */
+ hwpf.Read2b(&box_xs, 1); /* ¹Ú½ºÅ©±â °¡·Î */
+ hwpf.Read2b(&box_ys, 1); /* ¼¼·Î */
+ hwpf.Read2b(&cap_xs, 1); /* ĸ¼Ç Å©±â °¡·Î */
+ hwpf.Read2b(&cap_ys, 1); /* ¼¼·Î */
+ hwpf.Read2b(&style.cap_len, 1); /* ±æÀÌ */
+ hwpf.Read2b(&xs, 1); /* Àüü Å©±â(¹Ú½º Å©±â + ĸ¼Ç + ¿©¹é) °¡·Î */
+ hwpf.Read2b(&ys, 1); /* ¼¼·Î */
+ hwpf.Read2b(&cap_margin, 1); /* ĸ¼Ç ¿©¹é */
+ hwpf.Read1b(&xpos_type, 1);
+ hwpf.Read1b(&ypos_type, 1);
+ hwpf.Read1b(&smart_linesp, 1); /* ÁÙ°£°Ý º¸È£ : 0 ¹Ìº¸È£, 1 º¸È£ */
+ hwpf.Read1b(&reserved1, 1);
+ hwpf.Read2b(&pgx, 1); /* ½ÇÁ¦ °è»êµÈ ¹Ú½º °¡·Î */
+ hwpf.Read2b(&pgy, 1); /* ¼¼·Î */
+ hwpf.Read2b(&pgno, 1); /* ÆäÀÌÁö ¼ýÀÚ : 0ºÎÅÍ ½ÃÀÛ */
+ hwpf.Read2b(&showpg, 1); /* ¹Ú½ºº¸¿©ÁÜ */
+ hwpf.Read2b(&cap_pos, 1); /* ĸ¼ÇÀ§Ä¡ 0 - 7 ¸Þ´º¼ø¼­. */
+ hwpf.Read2b(&num, 1); /* ¹Ú½º¹øÈ£ 0ºÎÅÍ ½ÃÀÛÇؼ­ ¸Å±äÀϷùøÈ£ */
+
+ hwpf.Read1b(&pictype, 1); /* ±×¸²Á¾·ù */
+
+ skip[0] = (short) hwpf.Read2b(); /* ±×¸²¿¡¼­ ½ÇÁ¦ Ç¥½Ã¸¦ ½ÃÀÛÇÒ À§Ä¡ °¡·Î */
+ skip[1] = (short) hwpf.Read2b(); /* ¼¼·Î */
+ scale[0] = (short) hwpf.Read2b(); /* È®´ëºñÀ² : 0 °íÁ¤, ÀÌ¿Ü ÆÛ¼¾Æ® ´ÜÀ§ °¡·Î */
+ scale[1] = (short) hwpf.Read2b(); /* ¼¼·Î */
+
+ hwpf.Read1b(picinfo.picun.path, 256); /* ±×¸²ÆÄÀÏ À̸§ : Á¾·ù°¡ DrawingÀÌ ¾Æ´Ò¶§. */
+ hwpf.Read1b(reserved3, 9); /* ¹à±â/¸í¾Ï/±×¸²È¿°ú µî */
+
+ UpdateBBox(this);
+ if( pictype != PICTYPE_DRAW )
+ style.cell = reserved3;
+
+ if (follow_block_size != 0)
+ {
+ follow = new unsigned char[follow_block_size];
+
+ hwpf.Read1b(follow, follow_block_size);
+ if (pictype == PICTYPE_DRAW)
+ {
+ hmem = new HMemIODev((char *) follow, follow_block_size);
+ LoadDrawingObjectBlock(this);
+ style.cell = picinfo.picdraw.hdo;
+ delete hmem;
+
+ hmem = 0;
+ }
+ else
+ {
+ if ((follow[3] << 24 | follow[2] << 16 | follow[1] << 8 | follow[0]) == 0x269)
+ {
+ ishyper = true;
+ }
+ }
+ }
+
+ if( pictype != 3 )
+ style.boxtype = 'G';
+ else
+ style.boxtype = 'D';
+ hwpf.AddFBoxStyle(&style);
+
+// cation
+ hwpf.ReadParaList(caption);
+
+ return !hwpf.State();
+}
+
+
+// line(15)
+
+Line::Line():FBox(CH_LINE)
+{
+}
+
+
+int Line::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(reserved, 2);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy && CH_LINE == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ hwpf.AddBox(this);
+
+ style.boxnum = fboxnum++;
+ zorder = zindex++;
+ style.boxtype = 'L';
+ hwpf.Read1b(&reserved2, 8);
+ hwpf.Read1b(&style.anchor_type, 1);
+ hwpf.Read1b(&style.txtflow, 1);
+ hwpf.Read2b(&style.xpos, 1);
+ hwpf.Read2b(&style.ypos, 1);
+ hwpf.Read2b(&option, 1);
+ hwpf.Read2b(&ctrl_ch, 1);
+ hwpf.Read2b(style.margin, 12);
+ hwpf.AddFBoxStyle(&style);
+ hwpf.Read2b(&box_xs, 1);
+ hwpf.Read2b(&box_ys, 1);
+ hwpf.Read2b(&cap_xs, 1);
+ hwpf.Read2b(&cap_ys, 1);
+ hwpf.Read2b(&style.cap_len, 1);
+ hwpf.Read2b(&xs, 1);
+ hwpf.Read2b(&ys, 1);
+ lnnumber = style.boxnum;
+ hwpf.linenumber = 1;
+ hwpf.Read2b(&boundsy, 1);
+ hwpf.Read2b(&boundey, 1);
+ hwpf.Read1b(&boundx, 1);
+ hwpf.Read1b(&draw, 1);
+
+ hwpf.Read2b(&pgx, 1);
+ hwpf.Read2b(&pgy, 1);
+ hwpf.Read2b(&pgno, 1);
+ hwpf.Read2b(&showpg, 1);
+
+ hwpf.Read2b(&sx, 1);
+ hwpf.Read2b(&sy, 1);
+ hwpf.Read2b(&ex, 1);
+ hwpf.Read2b(&sy, 1);
+ hwpf.Read2b(&width, 1);
+ hwpf.Read2b(&shade, 1);
+ hwpf.Read2b(&color, 1);
+ style.xpos = width;
+
+ return !hwpf.State();
+}
+
+
+// hidden(15)
+Hidden::Hidden():HBox(CH_HIDDEN)
+{
+}
+
+
+int Hidden::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(reserved, 2);
+ hwpf.Read2b(&dummy, 1);
+ if (!(hh == dummy && CH_HIDDEN == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+
+ hwpf.Read1b(info, 8);
+ hwpf.ReadParaList(plist);
+
+ return !hwpf.State();
+}
+
+
+// header/footer(16)
+HeaderFooter::HeaderFooter():HBox(CH_HEADER_FOOTER)
+{
+ linenumber = 0;
+}
+
+
+int HeaderFooter::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(reserved, 2);
+ hwpf.Read2b(&dummy, 1);
+ if (!(hh == dummy && CH_HEADER_FOOTER == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+
+ hwpf.Read1b(info, 8);
+ hwpf.Read1b(&type, 1);
+ hwpf.Read1b(&where, 1);
+ lnnumber = 0;
+ hwpf.ReadParaList(plist, CH_HEADER_FOOTER);
+ linenumber = sal::static_int_cast<unsigned char>(lnnumber);
+ m_nPageNumber = hwpf.getCurrentPage();
+ hwpf.setMaxSettedPage();
+ hwpf.AddHeaderFooter(this);
+
+ return !hwpf.State();
+}
+
+
+// footnote(17)
+Footnote::Footnote():HBox(CH_FOOTNOTE)
+{
+}
+
+
+int Footnote::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(reserved, 2);
+ hwpf.Read2b(&dummy, 1);
+ if (!(hh == dummy && CH_FOOTNOTE == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+
+ hwpf.Read1b(info, 8);
+ hwpf.Read2b(&number, 1);
+ hwpf.Read2b(&type, 1);
+ width = (short) hwpf.Read2b();
+ hwpf.ReadParaList(plist, CH_FOOTNOTE);
+
+ return !hwpf.State();
+}
+
+
+// auto number(18)
+AutoNum::AutoNum():HBox(CH_AUTO_NUM)
+{
+}
+
+
+int AutoNum::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&type, 1);
+ hwpf.Read2b(&number, 1);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}
+
+
+// new number(19)
+NewNum::NewNum():HBox(CH_NEW_NUM)
+{
+}
+
+
+int NewNum::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&type, 1);
+ hwpf.Read2b(&number, 1);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}
+
+
+// show page number (20)
+ShowPageNum::ShowPageNum():HBox(CH_SHOW_PAGE_NUM)
+{
+}
+
+
+int ShowPageNum::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&where, 1);
+ hwpf.Read2b(&shape, 1);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ m_nPageNumber = hwpf.getCurrentPage();
+ hwpf.setMaxSettedPage();
+ hwpf.AddPageNumber(this);
+ return !hwpf.State();
+}
+
+
+/* Ȧ¼öÂʽÃÀÛ/°¨Ãß±â (21) */
+PageNumCtrl::PageNumCtrl():HBox(CH_PAGE_NUM_CTRL)
+{
+}
+
+
+int PageNumCtrl::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&kind, 1);
+ hwpf.Read2b(&what, 1);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}
+
+
+// mail merge(22)
+MailMerge::MailMerge():HBox(CH_MAIL_MERGE)
+{
+}
+
+
+int MailMerge::Read(HWPFile & hwpf)
+{
+ hwpf.Read1b(field_name, 20);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}
+
+
+// char compositon(23)
+Compose::Compose():HBox(CH_COMPOSE)
+{
+}
+
+
+int Compose::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(compose, 3);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}
+
+
+// hyphen(24)
+Hyphen::Hyphen():HBox(CH_HYPHEN)
+{
+}
+
+
+int Hyphen::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&width, 1);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}
+
+
+// toc mark(25)
+TocMark::TocMark():HBox(CH_TOC_MARK)
+{
+}
+
+
+int TocMark::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&kind, 1);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}
+
+
+// index mark(26)
+IndexMark::IndexMark():HBox(CH_INDEX_MARK)
+{
+}
+
+
+int IndexMark::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&keyword1, 60);
+ hwpf.Read2b(&keyword2, 60);
+ hwpf.Read2b(&pgno, 1);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}
+
+
+// outline(28)
+Outline::Outline():HBox(CH_OUTLINE)
+{
+}
+
+
+int Outline::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&kind, 1);
+ hwpf.Read1b(&shape, 1);
+ hwpf.Read1b(&level, 1);
+ hwpf.Read2b(number, 7);
+ hwpf.Read2b(user_shape, 7);
+ hwpf.Read2b(deco, 14);
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}
+
+
+/* ¹­À½ ºóÄ­(30) */
+KeepSpace::KeepSpace():HBox(CH_KEEP_SPACE)
+{
+}
+
+
+int KeepSpace::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}
+
+
+/* °íÁ¤Æø ºóÄ­(31) */
+FixedSpace::FixedSpace():HBox(CH_FIXED_SPACE)
+{
+}
+
+
+int FixedSpace::Read(HWPFile & hwpf)
+{
+ hwpf.Read2b(&dummy, 1);
+
+ if (!(hh == dummy)){
+ return hwpf.SetState(HWP_InvalidFileFormat);
+ }
+ return !hwpf.State();
+}