blob: b67535a7b1b88a67926bfb7dce6628ad54f1acc2 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil -*- */
#ifndef _WW8PAR2_HXX
#define _WW8PAR2_HXX
#ifndef SWTYPES_HXX
#include <swtypes.hxx> // enum RndStdIds
#endif
#include <fmtfsize.hxx>
#include <fmtornt.hxx>
#include <fmtsrnd.hxx>
#include <editeng/lrspitem.hxx>
#ifndef WW8SCAN_HXX
#include "ww8scan.hxx" // class WW8Style
#endif
#ifndef WW8PAR_HXX
#include "ww8par.hxx" // WW8_BRC5
#endif
class WW8RStyle;
class WW8DupProperties
{
public:
WW8DupProperties(SwDoc &rDoc, SwWW8FltControlStack *pStk);
void Insert(const SwPosition &rPos);
private:
//No copying
WW8DupProperties(const WW8DupProperties&);
WW8DupProperties& operator=(const WW8DupProperties&);
SwWW8FltControlStack* pCtrlStck;
SfxItemSet aChrSet,aParSet;
};
struct WW8FlyPara
{ // WinWord-Attribute
// Achtung: *Nicht* umsortieren, da Teile mit
// memcmp verglichen werden
bool bVer67;
sal_Int16 nSp26, nSp27; // rohe Position
sal_Int16 nSp45, nSp28; // Breite / Hoehe
sal_Int16 nLeMgn, nRiMgn, nUpMgn, nLoMgn; // Raender
sal_uInt8 nSp29; // rohe Bindung + Alignment
sal_uInt8 nSp37; // Wrap-Mode ( 1 / 2; 0 = no Apo ? )
WW8_BRC5 brc; // Umrandung Top, Left, Bottom, Right, Between
bool bBorderLines; // Umrandungslinien
bool bGrafApo; // true: Dieser Rahmen dient allein dazu, die
// enthaltene Grafik anders als zeichengebunden
// zu positionieren
bool mbVertSet; // true if vertical positioning has been set
sal_uInt8 nOrigSp29;
WW8FlyPara(bool bIsVer67, const WW8FlyPara* pSrc = 0);
bool operator==(const WW8FlyPara& rSrc) const;
void Read(const sal_uInt8* pSprm29, WW8PLCFx_Cp_FKP* pPap);
void ReadFull(const sal_uInt8* pSprm29, SwWW8ImplReader* pIo);
void Read(const sal_uInt8* pSprm29, WW8RStyle* pStyle);
void ApplyTabPos(const WW8_TablePos *pTabPos);
bool IsEmpty() const;
};
struct WW8SwFlyPara
{
SwFlyFrmFmt* pFlyFmt;
// 1. Teil: daraus abgeleitete Sw-Attribute
sal_Int16 nXPos, nYPos; // Position
sal_Int16 nLeMgn, nRiMgn; // Raender
sal_Int16 nUpMgn, nLoMgn; // Raender
sal_Int16 nWidth, nHeight; // Groesse
sal_Int16 nNettoWidth;
SwFrmSize eHeightFix; // Hoehe Fix oder Min
RndStdIds eAnchor; // Bindung
short eHRel; // Seite oder Seitenrand
short eVRel; // Seite oder Seitenrand
sal_Int16 eVAlign; // Oben, unten, mittig
sal_Int16 eHAlign; // links, rechts, mittig
SwSurround eSurround; // Wrap-Mode
sal_uInt8 nXBind, nYBind; // relativ zu was gebunden
// 2.Teil: sich waehrend des Einlesens ergebende AEnderungen
long nNewNettoWidth;
SwPosition* pMainTextPos; // um nach Apo in Haupttext zurueckzukehren
sal_uInt16 nLineSpace; // LineSpace in tw fuer Graf-Apos
bool bAutoWidth;
bool bToggelPos;
// --> OD 2007-07-03 #148498#
// add parameter <nWWPgTop> - WW8's page top margin
WW8SwFlyPara( SwPaM& rPaM,
SwWW8ImplReader& rIo,
WW8FlyPara& rWW,
const sal_uInt32 nWWPgTop,
const sal_uInt32 nPgLeft,
const sal_uInt32 nPgWidth,
const sal_Int32 nIniFlyDx,
const sal_Int32 nIniFlyDy );
void BoxUpWidth( long nWidth );
SwWW8FltAnchorStack *pOldAnchorStck;
};
class SwWW8StyInf
{
String sWWStyleName;
sal_uInt16 nWWStyleId;
public:
rtl_TextEncoding eLTRFontSrcCharSet; // rtl_TextEncoding fuer den Font
rtl_TextEncoding eRTLFontSrcCharSet; // rtl_TextEncoding fuer den Font
rtl_TextEncoding eCJKFontSrcCharSet; // rtl_TextEncoding fuer den Font
SwFmt* pFmt;
WW8FlyPara* pWWFly;
SwNumRule* pOutlineNumrule;
long nFilePos;
sal_uInt16 nBase;
sal_uInt16 nFollow;
sal_uInt16 nLFOIndex;
sal_uInt8 nListLevel;
// WW8 outline level is zero-based:
// 0: outline level 1
// 1: outline level 2
// ...
// 8: outline level 9
// 9: body text
sal_uInt8 mnWW8OutlineLevel;
sal_uInt16 n81Flags; // Fuer Bold, Italic, ...
sal_uInt16 n81BiDiFlags; // Fuer Bold, Italic, ...
SvxLRSpaceItem maWordLR;
bool bValid; // leer oder Valid
bool bImported; // fuers rekursive Importieren
bool bColl; // true-> pFmt ist SwTxtFmtColl
bool bImportSkipped; // nur true bei !bNewDoc && vorh. Style
bool bHasStyNumRule; // true-> Benannter NumRule in Style
bool bHasBrokenWW6List; // true-> WW8+ style has a WW7- list
bool bListReleventIndentSet; //true if this style's indent has
//been explicitly set, it's set to the value
//of pFmt->GetItemState(RES_LR_SPACE, false)
//if it was possible to get the ItemState
//for L of the LR space independantly
bool bParaAutoBefore; // For Auto spacing before a paragraph
bool bParaAutoAfter; // For Auto Spacing after a paragraph
SwWW8StyInf() :
sWWStyleName( aEmptyStr ),
nWWStyleId( 0 ),
eLTRFontSrcCharSet(0),
eRTLFontSrcCharSet(0),
eCJKFontSrcCharSet(0),
pFmt( 0 ),
pWWFly( 0 ),
pOutlineNumrule( 0 ),
nFilePos( 0 ),
nBase( 0 ),
nFollow( 0 ),
nLFOIndex( USHRT_MAX ),
nListLevel(WW8ListManager::nMaxLevel),
mnWW8OutlineLevel( MAXLEVEL ),
n81Flags( 0 ),
n81BiDiFlags(0),
maWordLR( RES_LR_SPACE ),
bValid(false),
bImported(false),
bColl(false),
bImportSkipped(false),
bHasStyNumRule(false),
bHasBrokenWW6List(false),
bListReleventIndentSet(false),
bParaAutoBefore(false),
bParaAutoAfter(false)
{}
~SwWW8StyInf()
{
delete pWWFly;
}
void SetOrgWWIdent( const String& rName, const sal_uInt16 nId )
{
sWWStyleName = rName;
nWWStyleId = nId;
// apply default WW8 outline level to WW8 Built-in Heading styles
if ( IsWW8BuiltInHeadingStyle() )
{
mnWW8OutlineLevel = nWWStyleId - 1;
}
}
const String& GetOrgWWName() const
{
return sWWStyleName;
}
bool HasWW8OutlineLevel() const
{
return ( pFmt != NULL && (MAXLEVEL > mnWW8OutlineLevel) );
}
bool IsOutlineNumbered() const
{
return pOutlineNumrule != NULL && HasWW8OutlineLevel();
}
const SwNumRule* GetOutlineNumrule() const
{
return pOutlineNumrule;
}
CharSet GetCharSet() const;
CharSet GetCJKCharSet() const;
inline sal_uInt16 GetWWStyleId() const
{
return nWWStyleId;
}
inline bool IsWW8BuiltInHeadingStyle()
{
return GetWWStyleId() >= 1 && GetWWStyleId() <= 9;
}
inline bool IsWW8BuiltInDefaultStyle()
{
return GetWWStyleId() == 0;
}
static sal_uInt8 WW8OutlineLevelToOutlinelevel( const sal_uInt8 nWW8OutlineLevel )
{
if ( nWW8OutlineLevel < MAXLEVEL )
{
if ( nWW8OutlineLevel == 9 )
{
return 0; // no outline level --> body text
}
else
{
return nWW8OutlineLevel + 1; // outline level 1..9
}
}
return 0;
}
};
class WW8RStyle: public WW8Style
{
friend class SwWW8ImplReader;
wwSprmParser maSprmParser;
SwWW8ImplReader* pIo; // Parser-Klasse
SvStream* pStStrm; // Input-File
SwNumRule* pStyRule; // Bullets und Aufzaehlungen in Styles
sal_uInt8* pParaSprms; // alle ParaSprms des UPX falls UPX.Papx
sal_uInt16 nSprmsLen; // Laenge davon
sal_uInt8 nWwNumLevel; // fuer Bullets und Aufzaehlungen in Styles
bool bTxtColChanged;
bool bFontChanged; // For Simulating Default-Font
bool bCJKFontChanged; // For Simulating Default-CJK Font
bool bCTLFontChanged; // For Simulating Default-CTL Font
bool bFSizeChanged; // For Simulating Default-FontSize
bool bFCTLSizeChanged; // For Simulating Default-CTL FontSize
bool bWidowsChanged; // For Simulating Default-Widows / Orphans
void ImportSprms(sal_Size nPosFc, short nLen, bool bPap);
void ImportSprms(sal_uInt8 *pSprms, short nLen, bool bPap);
void ImportGrupx(short nLen, bool bPara, bool bOdd);
short ImportUPX(short nLen, bool bPAP, bool bOdd);
void Set1StyleDefaults();
void Import1Style(sal_uInt16 nNr);
void RecursiveReg(sal_uInt16 nNr);
void ImportStyles();
void ImportNewFormatStyles();
void ScanStyles();
void ImportOldFormatStyles();
bool PrepareStyle(SwWW8StyInf &rSI, ww::sti eSti, sal_uInt16 nThisStyle, sal_uInt16 nNextStyle);
void PostStyle(SwWW8StyInf &rSI, bool bOldNoImp);
//No copying
WW8RStyle(const WW8RStyle&);
WW8RStyle& operator=(const WW8RStyle&);
public:
WW8RStyle( WW8Fib& rFib, SwWW8ImplReader* pI );
void Import();
void PostProcessStyles();
const sal_uInt8* HasParaSprm( sal_uInt16 nId ) const;
};
class WW8FlySet: public SfxItemSet
{
private:
//No copying
const WW8FlySet& operator=(const WW8FlySet&);
void Init(const SwWW8ImplReader& rReader, const SwPaM* pPaM);
public:
WW8FlySet(SwWW8ImplReader& rReader, const WW8FlyPara* pFW,
const WW8SwFlyPara* pFS, bool bGraf);
WW8FlySet(SwWW8ImplReader& rReader, const SwPaM* pPaM, const WW8_PIC& rPic,
long nWidth, long nHeight);
};
enum WW8LvlType {WW8_None, WW8_Outline, WW8_Numbering, WW8_Sequence, WW8_Pause};
WW8LvlType GetNumType(sal_uInt8 nWwLevelNo);
#endif
/* vi:set tabstop=4 shiftwidth=4 expandtab: */