summaryrefslogtreecommitdiff
path: root/lotuswordpro/source/filter/lwpmarker.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'lotuswordpro/source/filter/lwpmarker.cxx')
-rw-r--r--lotuswordpro/source/filter/lwpmarker.cxx572
1 files changed, 572 insertions, 0 deletions
diff --git a/lotuswordpro/source/filter/lwpmarker.cxx b/lotuswordpro/source/filter/lwpmarker.cxx
new file mode 100644
index 000000000000..a31b369dc8bc
--- /dev/null
+++ b/lotuswordpro/source/filter/lwpmarker.cxx
@@ -0,0 +1,572 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: IBM Corporation
+ *
+ * Copyright: 2008 by IBM Corporation
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+/*************************************************************************
+ * @file
+ * For LWP filter architecture prototype
+ ************************************************************************/
+/*************************************************************************
+ * Change History
+ Mar 2005 Created
+ ************************************************************************/
+#include "lwpfoundry.hxx"
+#include "lwpfilehdr.hxx"
+#include "lwpstory.hxx"
+#include "lwpmarker.hxx"
+#include "lwpproplist.hxx"
+#include "lwpglobalmgr.hxx"
+#include "xfilter/xfplaceholder.hxx"
+#include "xfilter/xfinputlist.hxx"
+
+LwpMarker::LwpMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm):LwpDLNFPVList(objHdr,pStrm)
+{
+}
+
+void LwpMarker::Read()
+{
+ LwpDLNFPVList::Read();
+ m_objContent.ReadIndexed(m_pObjStrm);
+ m_objLayout.ReadIndexed(m_pObjStrm);
+ m_objMarkerList.ReadIndexed(m_pObjStrm);
+ m_nNeedUpdate = m_pObjStrm->QuickReaduInt16();
+ m_nFlag = m_pObjStrm->QuickReaduInt16();
+ m_nPageNumber = m_pObjStrm->QuickReaduInt16();
+
+ m_pObjStrm->SkipExtra();
+}
+
+OUString LwpMarker::GetNamedProperty(OUString name)
+{
+ LwpPropList* pProp = GetPropList();
+ if (pProp)
+ return pProp->GetNamedProperty(name);
+ else
+ return OUString(A2OUSTR(""));
+}
+
+LwpStoryMarker::LwpStoryMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm):LwpMarker(objHdr,pStrm)
+{
+}
+
+void LwpStoryMarker::Read()
+{
+ LwpMarker::Read();
+ m_nFlag = m_pObjStrm->QuickReaduInt16();
+ m_Range.Read(m_pObjStrm);
+ m_pObjStrm->SkipExtra();
+}
+
+void LwpFribRange::Read(LwpObjectStream* pObjStrm)
+{
+ m_StartPara.ReadIndexed(pObjStrm);
+ m_EndPara.ReadIndexed(pObjStrm);
+}
+
+LwpCHBlkMarker::LwpCHBlkMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm):LwpStoryMarker(objHdr,pStrm)
+{
+}
+
+void LwpCHBlkMarker::Read()
+{
+ LwpStoryMarker::Read();
+ m_objPromptStory.ReadIndexed(m_pObjStrm);
+ m_Help.Read(m_pObjStrm);
+ m_nAction = m_pObjStrm->QuickReaduInt16();
+ m_nTab = m_pObjStrm->QuickReaduInt32();
+ m_nFlag = m_pObjStrm->QuickReaduInt16();
+ if(m_pObjStrm->CheckExtra())
+ {
+ m_Mirror.Read(m_pObjStrm);
+ m_pObjStrm->SkipExtra();
+ }
+}
+
+OUString LwpCHBlkMarker::GetPromptText()
+{
+ LwpStory* pStory = NULL;
+ if (m_objPromptStory.obj())
+ pStory = static_cast<LwpStory*>(m_objPromptStory.obj());
+ if (pStory)
+ return pStory->GetContentText();
+ return A2OUSTR("");
+}
+
+void LwpCHBlkMarker::ConvertCHBlock(XFContentContainer* pXFPara, sal_uInt8 nType)
+{
+ sal_uInt16 nAction = GetAction();
+
+ switch(nAction)
+ {
+ case CLICKHERE_CHBEHAVIORTEXT:
+ case CLICKHERE_CHBEHAVIORTABLE:
+ case CLICKHERE_CHBEHAVIORPICTURE:
+ case CLICKHERE_CHBEHAVIOROLEOBJECT:
+ ProcessPlaceHolder(pXFPara,nAction,nType);
+ break;
+ case CLICKHERE_CHBEHAVIORCHART:
+ case CLICKHERE_CHBEHAVIORDRAWING:
+ case CLICKHERE_CHBEHAVIORGLOSSARY:
+ case CLICKHERE_CHBEHAVIOREQUATION:
+ case CLICKHERE_CHBEHAVIORSYMBOL:
+ case CLICKHERE_CHBEHAVIORPAGENUM:
+ case CLICKHERE_CHBEHAVIORDOCFIELD:
+ case CLICKHERE_CHBEHAVIORDATETIME:
+ ProcessOtherCHB(pXFPara,nType);
+ break;
+// ProcessPageNumber(pXFPara,nType);
+// break;
+ case CLICKHERE_CHBEHAVIORSTRINGLIST:
+ ProcessKeylist(pXFPara,nType);
+ break;
+ default:
+ break;
+ }
+}
+
+void LwpCHBlkMarker::ProcessPlaceHolder(XFContentContainer* pXFPara,sal_uInt16 nAction,
+ sal_uInt8 nType)
+{
+ sal_Bool bFillFlag = IsHasFilled();
+ sal_Bool bHelpFlag = IsBubbleHelp();
+
+ if ( bFillFlag )
+ return;
+ if (nType == MARKER_START)
+ {
+ XFHolderStart* pHolder= new XFHolderStart;
+ switch(nAction)
+ {
+ case CLICKHERE_CHBEHAVIORTEXT:
+ pHolder->SetType(A2OUSTR("text"));
+ break;
+ case CLICKHERE_CHBEHAVIORTABLE:
+ pHolder->SetType(A2OUSTR("table"));
+ break;
+ case CLICKHERE_CHBEHAVIORPICTURE:
+ pHolder->SetType(A2OUSTR("image"));
+ break;
+ case CLICKHERE_CHBEHAVIOROLEOBJECT:
+ pHolder->SetType(A2OUSTR("object"));
+ break;
+ default:
+ break;
+ }
+
+ if (bHelpFlag)
+ pHolder->SetDesc(m_Help.str());
+ pHolder->SetPrompt(GetPromptText());
+ pXFPara->Add(pHolder);
+ }
+ else if (nType == MARKER_END)
+ {
+ XFHolderEnd* pHolder = new XFHolderEnd;
+ pXFPara->Add(pHolder);
+ }
+}
+
+void LwpCHBlkMarker::ProcessOtherCHB(XFContentContainer* pXFPara,sal_uInt8 nType)
+{
+ sal_Bool bFillFlag = IsHasFilled();
+ sal_Bool bHelpFlag = IsBubbleHelp();
+
+ if ( bFillFlag )
+ return;
+ if (nType == MARKER_START)
+ {
+ XFHolderStart* pHolder= new XFHolderStart;
+ pHolder->SetType(A2OUSTR("text"));
+ if (bHelpFlag)
+ pHolder->SetDesc(m_Help.str());
+ pHolder->SetPrompt(GetPromptText());
+ pXFPara->Add(pHolder);
+ }
+ else if (nType == MARKER_END)
+ {
+ XFHolderEnd* pHolder = new XFHolderEnd;
+ pXFPara->Add(pHolder);
+ }
+
+}
+
+void LwpCHBlkMarker::ProcessPageNumber(XFContentContainer* pXFPara,sal_uInt8 nType)
+{
+ sal_Bool bFillFlag = IsHasFilled();
+ sal_Bool bHelpFlag = IsBubbleHelp();
+
+ if ( bFillFlag )
+ return;
+ if (nType == MARKER_START)
+ {
+ XFHolderStart* pHolder= new XFHolderStart;
+ pHolder->SetType(A2OUSTR("text"));
+ if (bHelpFlag)
+ pHolder->SetDesc(m_Help.str());
+ pHolder->SetPrompt(GetPromptText());
+ pXFPara->Add(pHolder);
+ }
+ else if (nType == MARKER_END)
+ {
+ XFHolderEnd* pHolder = new XFHolderEnd;
+ pXFPara->Add(pHolder);
+ }
+
+}
+
+//note: there will be a blank to mark the list
+//all input content of key list processed as normal text
+void LwpCHBlkMarker::ProcessKeylist(XFContentContainer* pXFPara,sal_uInt8 nType)
+{
+ sal_Bool bFillFlag = IsHasFilled();
+
+ if ( bFillFlag )
+ {
+ if (nType == MARKER_START)
+ {
+ EnumAllKeywords();//traverse the proplist to find all keywords
+ XFInputList* pList = new XFInputList;
+ pList->SetName(LwpDLNFPVList::m_Name.str());
+ pList->SetLabels(m_Keylist);
+ pXFPara->Add(pList);
+ }
+ else if (nType == MARKER_END)//skip
+ {
+ }
+ }
+ else
+ {
+ if (nType == MARKER_START)
+ {
+ EnumAllKeywords();
+ XFInputList* pList = new XFInputList;
+ pList->SetName(LwpDLNFPVList::m_Name.str());
+ pList->SetLabels(m_Keylist);
+ pXFPara->Add(pList);
+
+ XFHolderStart* pHolder= new XFHolderStart;
+ pHolder->SetType(A2OUSTR("text"));
+ pHolder->SetPrompt(GetPromptText());
+ pXFPara->Add(pHolder);
+ }
+ else if (nType == MARKER_END)
+ {
+ XFHolderEnd* pHolder = new XFHolderEnd;
+ pXFPara->Add(pHolder);
+ }
+ }
+}
+
+sal_Bool LwpCHBlkMarker::IsHasFilled()
+{
+ if (CHB_PROMPT & m_nFlag)
+ return sal_False;
+ return sal_True;
+}
+
+sal_Bool LwpCHBlkMarker::IsBubbleHelp()
+{
+ return (CHB_HELP & m_nFlag);
+}
+
+void LwpCHBlkMarker::EnumAllKeywords()
+{
+ OUString name1(A2OUSTR(""));
+ OUString value1(A2OUSTR(""));
+ OUString name2(A2OUSTR("start"));
+ LwpPropList* pProp = GetPropList();
+ if (!pProp)
+ return;
+ while(name2.getLength()>0)
+ {
+ name2 = pProp->EnumNamedProperty(name1,value1);
+ if ( name1.match(A2OUSTR("LIST"),0) )
+ {
+ m_Keylist.push_back(value1);
+ }
+ name1 = name2;
+ }
+}
+
+
+LwpBookMark::LwpBookMark(LwpObjectHeader &objHdr, LwpSvStream *pStrm)
+ : LwpDLNFVList(objHdr,pStrm)
+{
+}
+
+void LwpBookMark::Read()
+{
+ LwpDLNFVList::Read();
+ m_objMarker.ReadIndexed(m_pObjStrm);
+ if (LwpFileHeader::m_nFileRevision < 0x0008)
+ {
+ if (m_pObjStrm->QuickReadBool())
+ m_nFlag |= BKMK_NOTESFX;
+ }
+ else
+ m_nFlag = m_pObjStrm->QuickReaduInt16();
+ m_pObjStrm->SkipExtra();
+}
+
+sal_Bool LwpBookMark::IsRightMarker(LwpObjectID objMarker)
+{
+ if (objMarker == m_objMarker)
+ return sal_True;
+ return sal_False;
+}
+
+OUString LwpBookMark::GetName()
+{
+ if (LwpDLNFVList::GetName())
+ return LwpDLNFVList::GetName()->str();
+ else
+ return OUString(A2OUSTR(""));
+}
+
+sal_Bool LwpBookMark::IsRightName(OUString sName)
+{
+ return sName.equals(GetName());
+}
+
+LwpFieldMark::LwpFieldMark(LwpObjectHeader &objHdr, LwpSvStream *pStrm):LwpStoryMarker(objHdr,pStrm),
+ m_bHasStyle(sal_False),m_bHasStart(sal_False),m_bRevisionFlag(sal_False),m_pFrib(NULL)
+{
+}
+
+void LwpFieldMark::Read()
+{
+ LwpStoryMarker::Read();
+ m_Formula.Read(m_pObjStrm);
+ m_objFormulaStory.ReadIndexed(m_pObjStrm);
+ if (LwpFileHeader::m_nFileRevision < 0x000B)
+ return;
+ m_objResultContent.ReadIndexed(m_pObjStrm);
+ m_nFlag = m_pObjStrm->QuickReaduInt16();
+ m_nFieldType = m_pObjStrm->QuickReaduInt16();
+ m_pObjStrm->SkipExtra();
+}
+
+void LwpFieldMark::ParseIndex(OUString& sKey1,OUString& sKey2)
+{
+ OUString sFormula = m_Formula.str();
+ sal_Int32 index[4];
+ sal_Unicode ch(0x0022);//"
+ index[0] = sFormula.indexOf(ch,0);
+ index[1] = sFormula.indexOf(ch,index[0]+1);
+
+ index[2] = sFormula.indexOf(ch,index[1]+1);
+ index[3] = sFormula.indexOf(ch,index[2]+1);
+ if (index[0]>=0 && index[1]>=0)
+ sKey1 = sFormula.copy(index[0]+1,index[1]-index[0]-1);
+ else
+ sKey1 = A2OUSTR("");
+ if (index[2]>=0 && index[3]>=0)
+ sKey2 = sFormula.copy(index[2]+1,index[3]-index[2]-1);
+ else
+ sKey2 = A2OUSTR("");
+}
+
+void LwpFieldMark::ParseTOC(OUString& sLevel,OUString& sText)
+{
+ OUString sFormula = m_Formula.str();
+ sal_Int32 index[4];
+ sal_Unicode ch1(0x0020);//space
+ sal_Unicode ch2(0x0022);//"
+
+ index[0] = sFormula.indexOf(ch1,0);
+ index[1] = sFormula.indexOf(ch1,index[0]+1);
+
+ index[2] = sFormula.indexOf(ch2,index[1]+1);
+ index[3] = sFormula.indexOf(ch2,index[2]+1);
+ if (index[0]>=0 && index[1]>=0)
+ sLevel = sFormula.copy(index[0]+1,index[1]-index[0]-1);
+ else
+ sLevel = A2OUSTR("");
+ if (index[2]>=0 && index[3]>=0)
+ sText = sFormula.copy(index[2]+1,index[3]-index[2]-1);
+ else
+ sText = A2OUSTR("");
+}
+
+sal_Bool LwpFieldMark::IsFormulaInsert()
+{
+ if (m_nFlag & FF_FORMULAINSERTED)
+ return sal_True;
+ return sal_False;
+}
+
+sal_Bool LwpFieldMark::IsDateTimeField(sal_uInt8& type,OUString& formula)
+{
+ OUString sFormula = m_Formula.str();
+ sal_Int32 index;
+ sal_Unicode ch1(0x0020);//space
+ OUString tag;
+
+ index = sFormula.indexOf(ch1,0);
+ if (index < 0)
+ {
+ if (sFormula == A2OUSTR("TotalEditingTime"))
+ {
+ type = DATETIME_TOTALTIME;
+ return sal_True;
+ }
+ return sal_False;
+ }
+
+ tag = sFormula.copy(0,index);
+ if (tag == A2OUSTR("Now()"))
+ {
+ type = DATETIME_NOW;
+ formula = sFormula.copy(index+1,sFormula.getLength()-index-1);
+ return sal_True;
+ }
+ else if (tag == A2OUSTR("CreateDate"))
+ {
+ type = DATETIME_CREATE;
+ formula = sFormula.copy(index+1,sFormula.getLength()-index-1);
+ return sal_True;
+ }
+ else if (tag == A2OUSTR("EditDate"))
+ {
+ type = DATETIME_LASTEDIT;
+ formula = sFormula.copy(index+1,sFormula.getLength()-index-1);
+ return sal_True;
+ }
+ else if (tag == A2OUSTR("YesterdaysDate") || tag == A2OUSTR("TomorrowsDate")
+ || tag == A2OUSTR("TodaysDate"))
+ {
+ type = DATETIME_SKIP;
+ return sal_True;
+ }
+ else
+ return sal_False;
+}
+
+sal_Bool LwpFieldMark::IsCrossRefField(sal_uInt8& nType, OUString& sMarkName)
+{
+ OUString sFormula = m_Formula.str();
+ sal_Int32 index;
+ sal_Unicode ch1(0x0020);//space
+ OUString tag;
+
+ index = sFormula.indexOf(ch1,0);
+ if (index < 0)
+ {
+ LwpGlobalMgr* pGlobal = LwpGlobalMgr::GetInstance();
+ LwpBookmarkMgr* pMarkMgr = pGlobal->GetLwpBookmarkMgr();
+ if (pMarkMgr->FindBookmark(sFormula))
+ {
+ sMarkName = sFormula;
+ nType = CROSSREF_TEXT;
+ return sal_True;
+ }
+ else
+ return sal_False;
+ }
+
+ tag = sFormula.copy(0,index);
+ if (tag == A2OUSTR("PageRef"))
+ {
+ sMarkName = sFormula.copy(index+1,sFormula.getLength()-index-1);
+ nType = CROSSREF_PAGE;
+ return sal_True;
+ }
+ else if (tag == A2OUSTR("ParaRef"))
+ {
+ sMarkName = sFormula.copy(index+1,sFormula.getLength()-index-1);
+ nType = CROSSREF_PARANUMBER;
+ return sal_True;
+ }
+ else
+ return sal_False;
+}
+
+sal_Bool LwpFieldMark::IsDocPowerField(sal_uInt8& nType,OUString& sFormula)
+{
+ sFormula = m_Formula.str();
+
+ if (sFormula == A2OUSTR("Description"))
+ {
+ nType = DOC_DESCRIPTION;
+ return sal_True;
+ }
+ else if (sFormula == A2OUSTR("NumPages"))
+ {
+ nType = DOC_NUMPAGES;
+ return sal_True;
+ }
+ else if (sFormula == A2OUSTR("NumChars"))
+ {
+ nType = DOC_NUMCHARS;
+ return sal_True;
+ }
+ else if (sFormula == A2OUSTR("NumWords"))
+ {
+ nType = DOC_NUMWORDS;
+ return sal_True;
+ }
+ else
+ {
+ return sal_False;
+ }
+}
+
+LwpRubyMarker::LwpRubyMarker(LwpObjectHeader &objHdr, LwpSvStream *pStrm):LwpStoryMarker(objHdr,pStrm)
+{
+}
+
+void LwpRubyMarker::Read()
+{
+ LwpStoryMarker::Read();
+ m_objLayout.ReadIndexed(m_pObjStrm);
+ m_pObjStrm->SkipExtra();
+}