summaryrefslogtreecommitdiff
path: root/sw/source/filter/html/svxcss1.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/filter/html/svxcss1.hxx')
-rw-r--r--sw/source/filter/html/svxcss1.hxx438
1 files changed, 438 insertions, 0 deletions
diff --git a/sw/source/filter/html/svxcss1.hxx b/sw/source/filter/html/svxcss1.hxx
new file mode 100644
index 000000000000..c7e811e6d456
--- /dev/null
+++ b/sw/source/filter/html/svxcss1.hxx
@@ -0,0 +1,438 @@
+/*************************************************************************
+ *
+ * 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: svxcss1.hxx,v $
+ * $Revision: 1.9 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+#ifndef _SVXCSS1_HXX
+#define _SVXCSS1_HXX
+
+#include <tools/string.hxx>
+#include <svtools/itemset.hxx>
+#include <svx/svxenum.hxx>
+
+#ifndef _SVSTDARR_HXX
+#define _SVSTDARR_USHORTS
+#include <svtools/svstdarr.hxx>
+#endif
+#include <rtl/textenc.h>
+#include "parcss1.hxx"
+
+class SfxItemPool;
+class SvxBoxItem;
+class FontList;
+
+/* */
+
+enum SvxCSS1Position
+{
+ SVX_CSS1_POS_NONE, // nichts angegeben
+ SVX_CSS1_POS_STATIC, // normal
+ SVX_CSS1_POS_ABSOLUTE, // absolut
+ SVX_CSS1_POS_RELATIVE, // relativ
+ SVX_CSS1_POS_END
+};
+
+
+enum SvxCSS1LengthType
+{
+ SVX_CSS1_LTYPE_NONE, // nichts angegeben
+ SVX_CSS1_LTYPE_AUTO, // automatisch
+ SVX_CSS1_LTYPE_TWIP, // twip
+ SVX_CSS1_LTYPE_PERCENTAGE, // %-Angabe
+ SVX_CSS1_LTYPE_END
+};
+
+// Feature: PrintExt
+enum SvxCSS1SizeType
+{
+ SVX_CSS1_STYPE_NONE, // nichts angegeben
+ SVX_CSS1_STYPE_AUTO, // automatisch
+ SVX_CSS1_STYPE_TWIP, // twip
+ SVX_CSS1_STYPE_LANDSCAPE, // Landscape
+ SVX_CSS1_STYPE_PORTRAIT, // Landscape
+ SVX_CSS1_STYPE_END
+};
+
+enum SvxCSS1PageBreak
+{
+ SVX_CSS1_PBREAK_NONE, // nichts angegeben
+ SVX_CSS1_PBREAK_AUTO, // automatisch
+ SVX_CSS1_PBREAK_ALWAYS, // immer
+ SVX_CSS1_PBREAK_AVOID, // nie
+ SVX_CSS1_PBREAK_LEFT, // naechste Seite ist eine linke
+ SVX_CSS1_PBREAK_RIGHT, // naechste Seite ist eine rechte
+ SVX_CSS1_PBREAK_END
+};
+
+// /Feature: PrintExt
+
+#define CSS1_SCRIPT_WESTERN 0x01
+#define CSS1_SCRIPT_CJK 0x02
+#define CSS1_SCRIPT_CTL 0x04
+#define CSS1_SCRIPT_ALL 0x07
+
+/* */
+
+struct CSS1PropertyEnum
+{
+ const sal_Char *pName; // Wert einer Property
+ sal_uInt16 nEnum; // und der dazugehoerige Wert eines Enums
+};
+
+
+/* */
+
+class SvxBorderLine;
+
+SV_DECL_PTRARR_DEL( CSS1Selectors, CSS1Selector*, 1, 1 )
+
+#define SVX_CSS1_BORDERINFO_WIDTH 1
+#define SVX_CSS1_BORDERINFO_COLOR 2
+#define SVX_CSS1_BORDERINFO_STYLE 4
+
+struct SvxCSS1BorderInfo;
+class SvxCSS1PropertyInfo
+{
+ SvxCSS1BorderInfo *aBorderInfos[4];
+
+ void DestroyBorderInfos();
+
+public:
+
+ String aId; // ID fuer Bookmarks, Rahmen etc.
+
+ sal_Bool bTopMargin : 1;
+ sal_Bool bBottomMargin : 1;
+
+ sal_Bool bLeftMargin : 1;
+ sal_Bool bRightMargin : 1;
+ sal_Bool bTextIndent : 1;
+
+ SvxAdjust eFloat;
+
+ SvxCSS1Position ePosition;
+
+ sal_uInt16 nTopBorderDistance;
+ sal_uInt16 nBottomBorderDistance;
+ sal_uInt16 nLeftBorderDistance;
+ sal_uInt16 nRightBorderDistance;
+
+ long nLeft, nTop;
+ long nWidth, nHeight;
+ long nLeftMargin, nRightMargin;
+
+ SvxCSS1LengthType eLeftType, eTopType;
+ SvxCSS1LengthType eWidthType, eHeightType;
+
+// Feature: PrintExt
+ SvxCSS1SizeType eSizeType;
+
+ SvxCSS1PageBreak ePageBreakBefore;
+ SvxCSS1PageBreak ePageBreakAfter;
+// /Feature: PrintExt
+
+ SvxCSS1PropertyInfo();
+ SvxCSS1PropertyInfo( const SvxCSS1PropertyInfo& rProp );
+ ~SvxCSS1PropertyInfo();
+
+ void Merge( const SvxCSS1PropertyInfo& rProp );
+
+ void Clear();
+
+ SvxCSS1BorderInfo *GetBorderInfo( sal_uInt16 nLine, sal_Bool bCreate=sal_True );
+ void CopyBorderInfo( sal_uInt16 nSrcLine, sal_uInt16 nDstLine, sal_uInt16 nWhat );
+ void CopyBorderInfo( sal_uInt16 nCount, sal_uInt16 nWhat );
+
+ void SetBoxItem( SfxItemSet& rItemSet, sal_uInt16 nMinBorderDist,
+ const SvxBoxItem* pDflt=0, sal_Bool bTable = sal_False );
+
+};
+
+class SvxCSS1MapEntry
+{
+ String aKey;
+ SfxItemSet aItemSet;
+ SvxCSS1PropertyInfo aPropInfo;
+
+public:
+
+ SvxCSS1MapEntry( SfxItemPool& rPool, const sal_uInt16 *pWhichMap ) :
+ aItemSet( rPool, pWhichMap )
+ {}
+
+ SvxCSS1MapEntry( const String& rKey, const SfxItemSet& rItemSet,
+ const SvxCSS1PropertyInfo& rProp );
+
+
+ const SfxItemSet& GetItemSet() const { return aItemSet; }
+ SfxItemSet& GetItemSet() { return aItemSet; }
+
+ const SvxCSS1PropertyInfo& GetPropertyInfo() const { return aPropInfo; }
+ SvxCSS1PropertyInfo& GetPropertyInfo() { return aPropInfo; }
+
+ const String& GetKey() const { return aKey; }
+ // TODO: ToUpperAscii -> ???
+ void SetKey( const String& rKey ) { aKey = rKey; aKey.ToUpperAscii(); }
+
+ friend sal_Bool operator==( const SvxCSS1MapEntry& rE1,
+ const SvxCSS1MapEntry& rE2 );
+ friend sal_Bool operator<( const SvxCSS1MapEntry& rE1,
+ const SvxCSS1MapEntry& rE2 );
+};
+
+typedef SvxCSS1MapEntry *SvxCSS1MapEntryPtr;
+SV_DECL_PTRARR_SORT_DEL( SvxCSS1Map, SvxCSS1MapEntryPtr, 5, 5 )
+
+
+#if !defined( ICC ) && !defined( BLC )
+inline sal_Bool operator==( const SvxCSS1MapEntry& rE1, const SvxCSS1MapEntry& rE2 )
+{
+ return rE1.aKey==rE2.aKey;
+}
+
+inline sal_Bool operator<( const SvxCSS1MapEntry& rE1, const SvxCSS1MapEntry& rE2 )
+{
+ return rE1.aKey<rE2.aKey;
+}
+#endif
+
+// Diese Klasse bereitet den Output des CSS1-Parsers auf,
+// indem die CSS1-Properties in SvxItem(Set)s umgewandelt werden.
+// Ausserdem werden die Selektoren samt zugehoeriger Item-Set
+// gespeichert.
+// Ein abgeleiteter Parser kann dies fuer einzelne Selektoren unterdruecken,
+// indem er die Methode StyleParsed ueberlaed.
+
+class SvxCSS1Parser : public CSS1Parser
+{
+ CSS1Selectors aSelectors; // Liste der "offenen" Selectoren
+
+ SvxCSS1Map aIds;
+ SvxCSS1Map aClasses;
+ SvxCSS1Map aPages;
+ SvxCSS1Map aTags;
+
+ String sBaseURL;
+
+ SfxItemSet *pSheetItemSet; // der Item-Set fuer Style-Sheets
+ SfxItemSet *pItemSet; // der aktuelle Item-Set
+ SvxCSS1MapEntry *pSearchEntry;
+
+ SvxCSS1PropertyInfo *pSheetPropInfo;
+ SvxCSS1PropertyInfo *pPropInfo;
+
+ sal_uInt16 nMinFixLineSpace; // Mindest-Abstand fuer festen Zeilenabstand
+
+ rtl_TextEncoding eDfltEnc;
+ sal_uInt16 nScriptFlags;
+
+ sal_Bool bIgnoreFontFamily;
+
+ void ParseProperty( const String& rProperty,
+ const CSS1Expression *pExpr );
+
+ SvUShorts aWhichMap; // Which-Map des Parser
+
+ using CSS1Parser::ParseStyleOption;
+
+protected:
+
+ using CSS1Parser::ParseStyleSheet;
+
+ // Diese Methode wird fuer jeden Selektor mit dem zugehoerigen
+ // Item-Set aufgerufen. Fuer einen Selektor koennen mehrere
+ // Aufrufe erfolgen.
+ // wenn sal_True zuruckgegeben wird, wird der Item-Set bzw. der
+ // Selektor nicht mehr gespeichert!
+ // Der ItemSet darf entsprechend modifiziert werden!
+ // Die Implementierung dieser Methode gibt sal_False zurueck.
+ virtual sal_Bool StyleParsed( const CSS1Selector *pSelector,
+ SfxItemSet& rItemSet,
+ SvxCSS1PropertyInfo& rPropInfo );
+
+ // Diese Methode wird aufgerufen, wenn ein Selektor geparst wurde
+ // Wenn bFirst gesetzt ist, wird der Inhalt von aItemSet in alle
+ // zuletzt angelegten Styles kopiert.
+ // Diese Methode sollte in abgleiteten Parsern nicht mehr
+ // ueberladen werden!
+ virtual sal_Bool SelectorParsed( const CSS1Selector *pSelector,
+ sal_Bool bFirst );
+
+ // Diese Methode wird fuer jede geparste Property aufgerufen
+ // sie fuegt das Item in den ItemSet 'pItemSet' ein
+ // Sie sollte in abgeleiteten Parsern nicht mehr ueberladen werden!
+ virtual sal_Bool DeclarationParsed( const String& rProperty,
+ const CSS1Expression *pExpr );
+
+public:
+
+
+ SvxCSS1Parser( SfxItemPool& rPool,
+ const String& rBaseURL,
+ sal_uInt16 nMinFixLineSp,
+ sal_uInt16 *pWhichIds=0, sal_uInt16 nWhichIds=0 );
+ virtual ~SvxCSS1Parser();
+
+ sal_Bool IsIgnoreFontFamily() const { return bIgnoreFontFamily; }
+ void SetIgnoreFontFamily( sal_Bool bSet ) { bIgnoreFontFamily = bSet; }
+
+ // Parsen eines Style-Sheets. Fuer jeden gefundenen Selektor
+ // wird StyleParsed mit dem entsprechenem Item-Set aufgerufen
+ virtual sal_Bool ParseStyleSheet( const String& rIn );
+
+ // Parsen einer Style-Option. Hier wird einfach nur der Item-Set
+ // gefuellt.
+ sal_Bool ParseStyleOption( const String& rIn, SfxItemSet& rItemSet,
+ SvxCSS1PropertyInfo& rPropInfo );
+
+ // Umwandeln eines Strings in den Wert eines Enums
+ static sal_Bool GetEnum( const CSS1PropertyEnum *pPropTable,
+ const String& rValue, sal_uInt16 &rEnum );
+
+ // Pixel in Twips wandeln
+ static void PixelToTwip( long &nWidth, long &nHeight );
+
+ // Die Breite einer Umrandung einstellen
+ static void SetBorderWidth( SvxBorderLine& aBorderLine, sal_uInt16 nWidth,
+ sal_Bool bDouble, sal_Bool bTable=sal_False );
+
+ // Die Font-Hoehe fuer eine bestimmte Font-Groesse (0-6) ermitteln
+ virtual sal_uInt32 GetFontHeight( sal_uInt16 nSize ) const;
+
+ virtual const FontList *GetFontList() const;
+
+ const sal_uInt16 *GetWhichMap() const { return aWhichMap.GetData(); }
+
+ SvxCSS1MapEntry *GetMapEntry( const String& rKey,
+ const SvxCSS1Map& rMap ) const;
+
+ void InsertMapEntry( const String& rKey, const SfxItemSet& rItemSet,
+ const SvxCSS1PropertyInfo& rProp, SvxCSS1Map& rMap );
+
+ void InsertId( const String& rId, const SfxItemSet& rItemSet,
+ const SvxCSS1PropertyInfo& rProp );
+
+ inline SvxCSS1MapEntry *GetId( const String& rId ) const;
+
+ void InsertClass( const String& rClass, const SfxItemSet& rItemSet,
+ const SvxCSS1PropertyInfo& rProp );
+
+ inline SvxCSS1MapEntry *GetClass( const String& rClass ) const;
+
+ inline void InsertPage( const String& rPage, sal_Bool bPseudo,
+ const SfxItemSet& rItemSet,
+ const SvxCSS1PropertyInfo& rProp );
+
+ inline SvxCSS1MapEntry *GetPage( const String& rPage, sal_Bool bPseudo ) const;
+
+ inline SvxCSS1MapEntry *GetPage( sal_uInt16 i ) const { return aPages[i]; }
+ sal_uInt16 GetPageCount() const { return aPages.Count(); }
+
+ void InsertTag( const String& rTag, const SfxItemSet& rItemSet,
+ const SvxCSS1PropertyInfo& rProp );
+
+ inline SvxCSS1MapEntry *GetTag( const String& rTag ) const;
+
+ void MergeStyles( const SfxItemSet& rSrcSet,
+ const SvxCSS1PropertyInfo& rSrcInfo,
+ SfxItemSet& rTargetSet,
+ SvxCSS1PropertyInfo& rTargetInfo,
+ sal_Bool bSmart );
+
+ sal_uInt16 GetMinFixLineSpace() const { return nMinFixLineSpace; }
+
+ virtual void SetDfltEncoding( rtl_TextEncoding eEnc );
+ rtl_TextEncoding GetDfltEncoding() const { return eDfltEnc; }
+
+ sal_Bool IsSetWesternProps() const { return (nScriptFlags & CSS1_SCRIPT_WESTERN) != 0; }
+ sal_Bool IsSetCJKProps() const { return (nScriptFlags & CSS1_SCRIPT_CJK) != 0; }
+ sal_Bool IsSetCTLProps() const { return (nScriptFlags & CSS1_SCRIPT_CTL) != 0; }
+
+ const String& GetBaseURL() const { return sBaseURL;}
+
+};
+
+inline void SvxCSS1Parser::InsertId( const String& rId,
+ const SfxItemSet& rItemSet,
+ const SvxCSS1PropertyInfo& rProp )
+{
+ InsertMapEntry( rId, rItemSet, rProp, aIds );
+}
+
+inline SvxCSS1MapEntry *SvxCSS1Parser::GetId( const String& rId ) const
+{
+ return GetMapEntry( rId, aIds );
+}
+
+inline void SvxCSS1Parser::InsertClass( const String& rClass,
+ const SfxItemSet& rItemSet,
+ const SvxCSS1PropertyInfo& rProp )
+{
+ InsertMapEntry( rClass, rItemSet, rProp, aClasses );
+}
+
+inline SvxCSS1MapEntry *SvxCSS1Parser::GetClass( const String& rClass ) const
+{
+ return GetMapEntry( rClass, aClasses );
+}
+
+inline void SvxCSS1Parser::InsertPage( const String& rPage,
+ sal_Bool bPseudo,
+ const SfxItemSet& rItemSet,
+ const SvxCSS1PropertyInfo& rProp )
+{
+ String aKey( rPage );
+ if( bPseudo )
+ aKey.Insert( ':', 0 );
+ InsertMapEntry( aKey, rItemSet, rProp, aPages );
+}
+
+inline SvxCSS1MapEntry *SvxCSS1Parser::GetPage( const String& rPage,
+ sal_Bool bPseudo ) const
+{
+ String aKey( rPage );
+ if( bPseudo )
+ aKey.Insert( ':', 0 );
+ return GetMapEntry( aKey, aPages );
+}
+
+inline void SvxCSS1Parser::InsertTag( const String& rTag,
+ const SfxItemSet& rItemSet,
+ const SvxCSS1PropertyInfo& rProp )
+{
+ InsertMapEntry( rTag, rItemSet, rProp, aTags );
+}
+
+inline SvxCSS1MapEntry *SvxCSS1Parser::GetTag( const String& rTag ) const
+{
+ return GetMapEntry( rTag, aTags );
+}
+
+
+#endif
+
+