*path source: ~/Scrivania/build/clone/writer/sw/source/filter/html*
deleted comments in German. diff attached
greetings to all
--
Linux user number 526206 http://counter.li.org/
--- css1atr.cxx 2010-10-28 22:12:01.426127545 +0200
+++ css1atrNEW.cxx 2010-10-29 19:27:40.563512829 +0200
@@ -103,15 +103,7 @@
#include <IDocumentStylePoolAccess.hxx>
#include <numrule.hxx>
-/*
- * um nicht immer wieder nach einem Update festzustellen, das irgendwelche
- * Hint-Ids dazugekommen sind, wird hier definiert, die Groesse der Tabelle
- * definiert und mit der akt. verglichen. Bei unterschieden wird der
- * Compiler schon meckern.
- *
- * diese Section und die dazugeherigen Tabellen muessen in folgenden Files
- * gepflegt werden: rtf\rtfatr.cxx, sw6\sw6atr.cxx, w4w\w4watr.cxx
- */
+
#if !defined(UNX) && !defined(MSC) && !defined(PPC) && !defined(CSET) && !defined(__MWERKS__) && !defined(WTC) && !defined(__MINGW32__) && !defined(OS2)
#define ATTRFNTAB_SIZE 130
@@ -188,7 +180,7 @@
{
sal_Char aNToABuf[] = "00";
- // Pointer an das Bufferende setzen
+
sal_Char *pStr = aNToABuf + (sizeof(aNToABuf)-1);
for( BYTE n = 0; n < 2; ++n )
{
@@ -296,7 +288,7 @@
(sOut += pProp) += ": ";
if( nCSS1OutMode & CSS1_OUTMODE_ENCODE )
{
- // In STYLE-Optionen den String codieren
+
Strm() << sOut.GetBuffer();
sOut.Erase();
if( pVal )
@@ -307,7 +299,7 @@
}
else
{
- // Im STYLE-Tag des String direct ausgeben
+
if( pVal )
sOut += pVal;
else if( pSVal )
@@ -325,12 +317,12 @@
{
if( nVal < 0 )
{
- // Vorzeichen extra behandeln
+
nVal = -nVal;
rOut += '-';
}
- // Die umgerechnete Einheit ergibt sich aus (x * nMul)/(nDiv*nFac*10)
+
long nMul = 1000;
long nDiv = 1;
long nFac = 100;
@@ -357,7 +349,7 @@
nDiv = 1440; // 72 * 20;
nFac = 1000;
#else
- // 0.01cm = 5.7twip (ist zwar ungenau, aber die UI ist auch ungenau)
+ // 0.01cm = 5.7twip
nMul = 2540; // 2.54 * 1000
nDiv = 1440; // 72 * 20;
nFac = 100;
@@ -374,7 +366,7 @@
nDiv = 20;
nFac = 100;
#else
- // 0.1pt = 2.0twip (ist zwar ungenau, aber die UI ist auch ungenau)
+ // 0.1pt = 2.0twip
nMul = 100;
nDiv = 20;
nFac = 10;
@@ -389,7 +381,7 @@
nDiv = 12 * 20;
nFac = 1000;
#else
- // 0.01pc = 2.40twip (ist zwar ungenau, aber die UI ist auch ungenau)
+ // 0.01pc = 2.40twip
nMul = 1000;
nDiv = 240; // 12 * 20;
nFac = 100;
@@ -411,7 +403,7 @@
nDiv = 1440; // 72 * 20;
nFac = 10000;
#else
- // 0.01in = 14.4twip (ist zwar ungenau, aber die UI ist auch ungenau)
+ // 0.01in = 14.4twip
nMul = 1000;
nDiv = 1440; // 72 * 20;
nFac = 100;
@@ -424,7 +416,7 @@
BOOL bOutLongVal = TRUE;
if( nVal > LONG_MAX / nMul )
{
- // Zum Unrechnen der Einheit wird ein BigInt benoetigt
+
#ifdef SAL_INT64_IS_STRUCT
BigInt nBigVal( nVal );
nBigVal *= nMul;
@@ -434,7 +426,7 @@
if( nBigVal.IsLong() )
{
- // Zum Ausgeben des Wertes reicht ein long.
+
nLongVal = (long)nBigVal;
}
else
@@ -463,7 +455,7 @@
if( nBigVal <= LONG_MAX )
{
- // Zum Ausgeben des Wertes reicht ein long.
+
nLongVal = (long)nBigVal;
}
else
@@ -535,14 +527,13 @@
void SwHTMLWriter::OutCSS1_SfxItemSet( const SfxItemSet& rItemSet,
BOOL bDeep )
{
- // den ItemSet ausgeben, und zwar inklusive aller Attribute
+
Out_SfxItemSet( aCSS1AttrFnTab, *this, rItemSet, bDeep );
- // ein par Attribute benoetigen eine Spezial-Behandlung
+
const SfxPoolItem *pItem = 0;
- // Underline, Overline, CrossedOut und Blink bilden zusammen eine CSS1-Property
- // (geht natuerlich nicht bei Hints)
+
if( !IsCSS1Source(CSS1_OUTMODE_HINT) )
{
const SvxUnderlineItem *pUnderlineItem = 0;
@@ -572,8 +563,7 @@
if( !bFirstCSS1Property )
{
- // wenn eine Property als Bestandteil einer Style-Option
- // ausgegeben wurde, muss die Optiomn noch beendet werden
+
ByteString sOut;
switch( nCSS1OutMode & CSS1_OUTMODE_ANY_OFF )
{
@@ -605,22 +595,14 @@
USHORT nFirstRefPoolId = RES_POOLPAGE_HTML;
bCSS1IgnoreFirstPageDesc = TRUE;
- // Erstmal versuchen wir zu erraten, wie das Dokument so augebaut ist.
- // Erlaubt sind nur die Vorlagen HTML, erste Seite, linke Seite und
- // rechte Seite.
- // Eine erste Seite wird nur exportiert, wenn die erste Seite auch
- // wirklich die Vorlage "erste Seite" ist.
- // Linke und rechte Seiten werden nur exportiert, wenn diese beiden
- // Vorlagen untereinander verkettet werden.
- // Wenn andere Vorlagen verwendet werden, wird nur in sehr einfachen
- // Faellen etwas exportiert.
+
const SwPageDesc *pPageDesc = &rPageDesc;
const SwPageDesc *pFollow = rPageDesc.GetFollow();
if( RES_POOLPAGE_FIRST == pPageDesc->GetPoolFmtId() &&
pFollow != pPageDesc &&
!IsPoolUserFmt( pFollow->GetPoolFmtId() ) )
{
- // Das Dokument hat eine erste Seite
+
pFirstPageDesc = pPageDesc;
pPageDesc = pFollow;
pFollow = pPageDesc->GetFollow();
@@ -629,10 +611,7 @@
IDocumentStylePoolAccess* pStylePoolAccess = getIDocumentStylePoolAccess();
if( pPageDesc == pFollow )
{
- // Das Dokument ist einseitig. Egal welche Seite verwendet wird,
- // es wird kein zweiseitiges Dokument daraus gemacht.
- // Die Attributierung wird relativ zur HTML-Seitenvorlage
- // aus der HTML-Vorlage exportiert.
+
OutCSS1_SwPageDesc( *this, *pPageDesc, pStylePoolAccess, pTemplate,
RES_POOLPAGE_HTML, TRUE, FALSE );
nFirstRefPoolId = pFollow->GetPoolFmtId();
@@ -642,7 +621,7 @@
(RES_POOLPAGE_RIGHT == pPageDesc->GetPoolFmtId() &&
RES_POOLPAGE_LEFT == pFollow->GetPoolFmtId()) )
{
- // Das Dokument ist zweiseitig
+
OutCSS1_SwPageDesc( *this, *pPageDesc, pStylePoolAccess, pTemplate,
RES_POOLPAGE_HTML, TRUE );
OutCSS1_SwPageDesc( *this, *pFollow, pStylePoolAccess, pTemplate,
@@ -650,7 +629,7 @@
nFirstRefPoolId = RES_POOLPAGE_RIGHT;
bCSS1IgnoreFirstPageDesc = FALSE;
}
- // Alles andere bekommen wir nicht hin.
+
if( pFirstPageDesc )
OutCSS1_SwPageDesc( *this, *pFirstPageDesc, pStylePoolAccess, pTemplate,
@@ -664,8 +643,7 @@
// that maps to <P>, and that's especially the standard style
getIDocumentStylePoolAccess()->GetTxtCollFromPool( RES_POOLCOLL_TEXT, false );
- // das Default-TextStyle wir nicht mit ausgegeben !!
- // das 0-Style ist das Default, wird nie ausgegeben !!
+
USHORT nArrLen = pDoc->GetTxtFmtColls()->Count();
USHORT i;
@@ -678,7 +656,7 @@
OutCSS1_SwFmt( *this, *pColl, pDoc, pTemplate );
}
- // das Default-TextStyle wir nicht mit ausgegeben !!
+ !
nArrLen = pDoc->GetCharFmts()->Count();
for( i=1; i<nArrLen; i++ )
{
@@ -723,8 +701,7 @@
//-----------------------------------------------------------------------
-// wenn pPseudo gesetzt ist werden Styles-Sheets ausgegeben,
-// sonst wird nur nach Token und Class fuer ein Format gesucht
+
USHORT SwHTMLWriter::GetCSS1Selector( const SwFmt *pFmt, ByteString& rToken,
String& rClass, USHORT& rRefPoolId,
String *pPseudo )
@@ -737,8 +714,7 @@
BOOL bChrFmt = RES_CHRFMT==pFmt->Which();
- // Nach oben die Formate abklappern, bis man auf eine Standard-
- // oder eine HTML-Tag-Vorlage trifft
+
const SwFmt *pPFmt = pFmt;
while( pPFmt && !pPFmt->IsDefault() )
{
@@ -746,7 +722,7 @@
USHORT nPoolId = pPFmt->GetPoolFmtId();
if( USER_FMT & nPoolId )
{
- // Benutzer-Vorlagen
+
const String& rNm = pPFmt->GetName();
switch( rNm.GetChar(0) )
{
@@ -786,9 +762,7 @@
else if( !bChrFmt )
{
USHORT nDefListLvl = GetDefListLvl( rNm, nPoolId );
- // Die Vorlagen DD 1/DT 1 werden ausgegeben,
- // aber keine von ihnen abgeleiteten Vorlagen,
- // auch nicht DD 2/DT 2 etc.
+
if( nDefListLvl )
{
if( pPseudo &&
@@ -816,7 +790,7 @@
}
break;
case 'H': if( !bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_horzrule ) )
- // HR nicht ausgeben!
+
bStop = (nDeep==0);
break;
case 'K': if( bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_keyboard ) )
@@ -827,8 +801,7 @@
break;
case 'L': if( !bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_listing ) )
{
- // Listing als PRE exportieren bzw. von
- // PRE abgeleitete Vorlage exportieren
+
rToken.Assign( OOO_STRING_SVTOOLS_HTML_preformtxt );
rRefPoolId = RES_POOLCOLL_HTML_PRE;
nDeep = CSS1_FMT_CMPREF;
@@ -868,8 +841,7 @@
break;
case 'X': if( !bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_xmp ) )
{
- // XMP als PRE exportieren (aber nicht die
- // Vorlage als Style)
+
rToken.Assign( OOO_STRING_SVTOOLS_HTML_preformtxt );
rRefPoolId = RES_POOLCOLL_HTML_PRE;
nDeep = CSS1_FMT_CMPREF;
@@ -877,20 +849,19 @@
break;
}
- // Wenn eine PoolId gesetzt ist, entspricht der Name der
- // Vorlage dem szugehoerigen Token
+
ASSERT( rRefPoolId != 0 == rToken.Len() > 0,
"Token missing" );
}
else
{
- // Pool-Vorlagen
+
switch( nPoolId )
{
- // Absatz-Vorlagen
+
case RES_POOLCOLL_HEADLINE_BASE:
case RES_POOLCOLL_STANDARD:
- // diese Vorlagen nicht ausgeben
+
bStop = (nDeep==0);
break;
case RES_POOLCOLL_TEXT:
@@ -952,7 +923,7 @@
rToken.Assign( OOO_STRING_SVTOOLS_HTML_parabreak );
break;
case RES_POOLCOLL_HTML_HR:
- // HR nicht ausgeben!
+
bStop = (nDeep==0);
break;
case RES_POOLCOLL_FOOTNOTE:
@@ -974,7 +945,7 @@
}
break;
- // Zeichen-Vorlagen
+
case RES_POOLCHR_HTML_EMPHASIS:
rToken.Assign( OOO_STRING_SVTOOLS_HTML_emphasis );
break;
@@ -1019,20 +990,19 @@
break;
}
- // Wenn ein Token gesetzt ist, enthaelt nPoolId die dazugehoerige
- // Vorlage
+
if( rToken.Len() && !rRefPoolId )
rRefPoolId = nPoolId;
}
if( rToken.Len() || bStop )
{
- // Anhalten wenn eine HTML-Tag-Vorlage gefunden wurde
+
break;
}
else
{
- // sonst weitersuchen
+
nDeep++;
pPFmt = pPFmt->DerivedFrom();
}
@@ -1040,21 +1010,18 @@
if( rToken.Len() )
{
- // Es ist eine HTML-Tag-Vorlage
+
if( !nDeep )
nDeep = CSS1_FMT_ISTAG;
}
else
{
- // Es ist keine HTML-Tag-Vorlage und auch keine davon abgeleitete
+
nDeep = 0;
}
if( nDeep > 0 && nDeep < CSS1_FMT_SPECIAL )
{
- // Wenn die Vorlage von einer HTML-Vorlage abgeleitet ist,
- // wird sie als <TOKEN>.<CLASS> exportiert, sonst als .<CLASS>.
- // <CLASS> ergibt sich aus dem Namen der Vorlage durch entfernen
- // aller Zeichen vor und inklusive dem ersten '.'
+
rClass = pFmt->GetName();
xub_StrLen nPos = rClass.Search( '.' );
if( nPos != STRING_NOTFOUND && rClass.Len() > nPos+1 )
@@ -1124,8 +1091,7 @@
if( nDeep > 0 )
{
- // hier wird die HTML-Tag-Vorlage, von der die Vorlage abgeleitet
- // ist als Referenz geholt
+
pRefFmt = &rFmt;
for( USHORT i=nDeep; i>0; i-- )
pRefFmt = pRefFmt->DerivedFrom();
@@ -1156,7 +1122,7 @@
SfxItemSet aRefItemSet( *rRefItemSet.GetPool(), rRefItemSet.GetRanges() );
aRefItemSet.Set( rRefItemSet );
- // und mit dem Attr-Set der Vorlage vergleichen
+
SfxWhichIter aIter( rItemSet );
USHORT nWhich = aIter.FirstWhich();
while( nWhich )
@@ -1209,8 +1175,7 @@
RES_CHRATR_CTL_FONT == nWhich) &&
lcl_css1atr_equalFontItems( *pItem, *pRefItem )) ) )
{
- // das Attribut ist mit dem gleichen Wert in beiden
- // Vorlagen vorhanden und muss nicht ausgegeben werden
+
rItemSet.ClearItem( nWhich );
}
}
@@ -1218,8 +1183,7 @@
{
if( (bSetDefaults || pRefScriptItemSet) && bRefItemSet )
{
- // das Attribut ist nur in der Referenz vorhanden. Das
- // Default muss ggf. ausgegeben werden
+
rItemSet.Put( rItemSet.GetPool()->GetDefaultItem(nWhich) );
}
}
@@ -1637,41 +1601,24 @@
case RES_TXTFMTCOLL:
case RES_CONDTXTFMTCOLL:
- // diese Vorlagen-Typen koennen exportiert werden
+
break;
default:
- // und diese nicht
+
return rWrt;
}
- // den Selector und die auszugebende Attr-Set-Tiefe ermitteln
+
String aSelector;
USHORT nRefPoolId = 0;
USHORT nDeep = GetCSS1Selector( &rFmt, aSelector, nRefPoolId );
if( !nDeep )
- return rWrt; // von keiner HTML-Vorlage abgeleitet
+ return rWrt;
USHORT nPoolFmtId = rFmt.GetPoolFmtId();
- // Den auszugebenden Attr-Set bestimmen. Hier muessen 3 Faelle
- // unterschieden werden:
- // - HTML-Tag-Vorlagen (nDeep==USHRT_MAX):
- // Es werden die Attrs ausgegeben
- // - die in der Vorlage gesetzt sind, aber nicht im Original aus
- // der HTML-Vorlage
- // - die Default-Attrs fuer die Attrs, die im Original aus der
- // HTML-Vorlage gesetzt sind, aber nicht in der vorliegeden Vorlage.
- // - direkt von HTML-Vorlagen abgeleitete Vorlagen (nDeep==1):
- // Es weren nur die Attribute des Vorlagen-Item-Set ohne seine
- // Parents ausgegeben.
- // - indirekt von HTML-Tag-Vorlagen abgeleitete Vorlagen (nDeep>1)
- // Es werden die Attribute des Vorlagen-Item-Sets inkl. seiner Parents,
- // aber ohne die Attribute, die in der HTML-Tag-Vorlage gesetzt sind,
- // ausgegeben.
-
- // einen Item-Set mit allen Attributen aus der Vorlage anlegen
- // (ausser fuer nDeep==1)
+
const SfxItemSet& rFmtItemSet = rFmt.GetAttrSet();
SfxItemSet aItemSet( *rFmtItemSet.GetPool(), rFmtItemSet.GetRanges() );
aItemSet.Set( rFmtItemSet, TRUE ); // Was nDeep!=1 that is not working
@@ -1700,8 +1647,7 @@
if( pRefFmt )
{
- // Den Item-Set der Referenz-Vorlage (inkl. seiner Parents) vom
- // ItemSet abziehen
+
SwHTMLWriter::SubtractItemSet( aItemSet, pRefFmt->GetAttrSet(),
bSetDefaults, bClearSame,
pRefFmtScript
@@ -1717,13 +1663,12 @@
}
else if( CSS1_FMT_ISTAG==nDeep && !bCharFmt )
{
- // die Default-Abstaende nach oben und unten setzen (fuer den
- // Fall, dass es keine Vorlage als Referenz gibt)
+
rHTMLWrt.nDfltTopMargin = 0;
rHTMLWrt.nDfltBottomMargin = HTML_PARSPACE;
if( USER_FMT & nPoolFmtId )
{
- // Benutzer-Vorlagen
+
const String& rNm = rFmt.GetName();
switch( rNm.GetChar(0) )
{
@@ -1743,7 +1688,7 @@
}
else
{
- // Pool-Vorlagen
+
switch( nPoolFmtId )
{
case RES_POOLCOLL_HEADLINE1:
@@ -1764,7 +1709,7 @@
}
}
- // wo nicht auszugeben ist ...
+
if( !aItemSet.Count() )
return rWrt;
@@ -1776,7 +1721,7 @@
bCheckForPseudo = sal_True;
- // jetzt die Attribute (inkl. Selektor) ausgeben
+
sal_Bool bHasScriptDependencies = sal_False;
if( OutCSS1Rule( rHTMLWrt, aSelector, aItemSet, CSS1_FMT_ISTAG != nDeep,
bCheckForPseudo ) )
@@ -1798,7 +1743,7 @@
if( nPoolFmtId==RES_POOLCOLL_TEXT && !rHTMLWrt.bFirstCSS1Property )
rHTMLWrt.bPoolCollTextModified = TRUE;
- // Drop-Caps ausgeben
+
const SfxPoolItem *pItem;
if( rHTMLWrt.IsHTMLMode(HTMLMODE_DROPCAPS) &&
SFX_ITEM_SET==aItemSet.GetItemState( RES_PARATR_DROP, FALSE, &pItem ))
@@ -1848,9 +1793,7 @@
SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_RULE_ON|CSS1_OUTMODE_TEMPLATE,
TRUE, &aSelector );
- // Die Groesse: Wenn sie sich nur durch das Landscape-Flag unterscheidet,
- // wird nur Portrait oder Landscape exportiert. Sonst wird die Groesse
- // exportiert.
+
BOOL bRefLandscape = pRefPageDesc ? pRefPageDesc->GetLandscape() : FALSE;
Size aRefSz;
const Size& rSz = rPageDesc.GetMaster().GetFrmSize().GetSize();
@@ -1865,13 +1808,7 @@
}
}
- // Boeser uebler Hack: Auf der Seiten-Tabpage gibt es leichte
- // Rundungsfehler bei der Seitengroesse. Unter anderem wegen bug
- // 25535 wird dummerweise auch noch immer Size-Item vom Dialog geputtet,
- // auch wenn man gar nichts geaendert hat. Folge: Sobald man einmal im
- // Seiten-Dialog war und ihn mit OK verlassen hat, bekommt man eine
- // neue Seitengroesse, die dann hier exportiert wuerde. Um das
- // vermeiden erlauben wir hier kleine Abweichungen.
+
if( Abs( rSz.Width() - aRefSz.Width() ) <= 2 &&
Abs( rSz.Height() - aRefSz.Height() ) <= 2 )
{
@@ -1891,7 +1828,7 @@
rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_size, sVal );
}
- // Die Abstand-Attribute koennen auf gwohnte Weise exportiert werden
+
const SwFrmFmt &rMaster = rPageDesc.GetMaster();
SfxItemSet aItemSet( *rMaster.GetAttrSet().GetPool(),
RES_LR_SPACE, RES_UL_SPACE );
@@ -1906,9 +1843,7 @@
OutCSS1_SvxULSpace_SvxLRSpace( rWrt, aItemSet, FALSE );
- // Wenn fuer einen Pseudo-Selektor keine Property ausgegeben wurde, muessen
- // wir trotzdem etwas ausgeben, damit beim Import die entsprechende
- // Vorlage angelegt wird.
+
if( rHTMLWrt.bFirstCSS1Property && bPseudo )
{
rHTMLWrt.OutNewLine();
@@ -1950,10 +1885,7 @@
SfxItemSet aItemSet( *rFmtItemSet.GetPool(), rFmtItemSet.GetRanges() );
aItemSet.Set( rFmtItemSet, TRUE );
- // Wenn es Fuss- bzw. Endnoten gibt, dann muessen alles Attribute
- // ausgegeben werden, damit Netscape das Dokument richtig anzeigt.
- // Anderenfalls genuegt es, die Unterschiede zur Fuss-/Endnoten
- // Vorlage rauszuschreiben.
+
if( nNotes == 0 && rHTMLWrt.pTemplate )
{
SwFmt *pRefFmt = rHTMLWrt.pTemplate->GetCharFmtFromPool(
@@ -1985,9 +1917,7 @@
CSS1_OUTMODE_ENCODE|CSS1_OUTMODE_BODY );
- // Es werden nur die Attribute der Seiten-Vorlage ausgegeben.
- // Die Attribute der Standard-Absatz-Vorlage werden schon beim
- // Export der Absatz-Vorlagen beruecksichtigt.
+
const SfxPoolItem *pItem;
if( SFX_ITEM_SET == rItemSet.GetItemState( RES_BACKGROUND, FALSE,
@@ -2005,8 +1935,7 @@
if( !rHTMLWrt.bFirstCSS1Property )
{
- // wenn eine Property als Bestandteil einer Style-Option
- // ausgegeben wurde, muss die Optiomn noch beendet werden
+
rWrt.Strm() << '\"';
}
@@ -2055,7 +1984,7 @@
return rWrt;
}
-// Wrapper fuer die Ausgabe von Tabellen-Hintergruenden
+
Writer& OutCSS1_TableBGStyleOpt( Writer& rWrt, const SfxPoolItem& rHt )
{
SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
@@ -2147,13 +2076,7 @@
// position
OutCSS1_PropertyAscii( sCSS1_P_position, sCSS1_PV_absolute );
- // Fuer top/left muessen die Abstaende des Rahmens von
- // der Position abgezogen werden, da sie in CSS1 noch
- // zur Position addiert werden.
- // Das funktioniert auch fuer automatisch ausgerichtete
- // Rahmen, obwohl der Abstand da ja auch im Writer noch
- // addiert wird. Denn auch in diesem Fall enthalten
- // die Orient-Attribute die korrekte Position
+
// top
long nXPos=0, nYPos=0;
@@ -2295,7 +2218,7 @@
OutCSS1_SvxBox( *this, *pItem );
}
- // background (wenn, dann muss auch eine Farbe ausgegeben werden)
+ // background
if( nFrmOpts & HTML_FRMOPT_S_BACKGROUND )
OutCSS1_FrmFmtBackground( rFrmFmt );
@@ -2361,12 +2284,11 @@
void SwHTMLWriter::OutCSS1_FrmFmtBackground( const SwFrmFmt& rFrmFmt )
{
- // Wenn der Rahmen selbst einen Hintergrund hat, wird der ausgegeben.
+
if( OutCSS1_FrmFmtBrush( *this, rFrmFmt.GetBackground() ) )
return;
- // Wenn der Rahmen nicht seitengebunden ist, wird sonst muss der
- // Hintergrund vom Anker betrachtet
+
const SwFmtAnchor& rAnchor = rFrmFmt.GetAnchor();
RndStdIds eAnchorId = rAnchor.GetAnchorId();
const SwPosition *pAnchorPos = rAnchor.GetCntntAnchor();
@@ -2375,14 +2297,12 @@
const SwNode& rNode = pAnchorPos->nNode.GetNode();
if( rNode.IsCntntNode() )
{
- // Wenn der Rahmen in einem Content-Node verankert ist,
- // wird der Hintergrund von Content-Node ausgegeben, wenn
- // der einen hat.
+
if( OutCSS1_FrmFmtBrush( *this,
rNode.GetCntntNode()->GetSwAttrSet().GetBackground()) )
return;
- // Sonst koennen wir evtl. auch in einer Tabelle stehen
+
const SwTableNode *pTableNd = rNode.FindTableNode();
if( pTableNd )
{
@@ -2390,12 +2310,12 @@
const SwTableBox *pBox =
pTableNd->GetTable().GetTblBox( pBoxSttNd->GetIndex() );
- // Wenn die Box einen Hintergrund hat, nehmen wir den.
+
if( OutCSS1_FrmFmtBrush( *this,
pBox->GetFrmFmt()->GetBackground() ) )
return;
- // Sonst betrachten wir den der Lines
+
const SwTableLine *pLine = pBox->GetUpper();
while( pLine )
{
@@ -2406,7 +2326,7 @@
pLine = pBox ? pBox->GetUpper() : 0;
}
- // Wenn da auch nichts war den der Tabelle.
+
if( OutCSS1_FrmFmtBrush( *this,
pTableNd->GetTable().GetFrmFmt()->GetBackground() ) )
return;
@@ -2414,8 +2334,7 @@
}
- // Wenn der Anker wieder in einem Fly-Frame steht, dann
- // wird der Hintergrund des Fly-Frames ausgegeben.
+
const SwFrmFmt *pFrmFmt = rNode.GetFlyFmt();
if( pFrmFmt )
{
@@ -2424,18 +2343,14 @@
}
}
- // Schliesslich bleibt noch der Hintergrund der Seite uebrig und als
- // letzte Rettung das Item der Config.
+
ASSERT( pCurrPageDesc, "Keine Seiten-Vorlage gemerkt" );
if( !OutCSS1_FrmFmtBrush( *this,
pCurrPageDesc->GetMaster().GetBackground() ) )
{
Color aColor( COL_WHITE );
- // Die Hintergrund-Farbe wird normalerweise nur in Browse-Mode
- // benutzt. Wir benutzen si bei einem HTML-Dokument immer und
- // bei einem Text-Dokument nur, wenn es im Browse-Mode angezeigt
- // wird.
+
if( pDoc->get(IDocumentSettingAccess::HTML_MODE) ||
pDoc->get(IDocumentSettingAccess::BROWSE_MODE))
{
@@ -2476,8 +2391,7 @@
default:
if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
{
- // das geht auch in HTML und muss nicht als STYLE-Option
- // und darf nicht als Hint geschrieben werden
+
ASSERT( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
"Underline als Hint schreiben?" );
pUStr = sCSS1_PV_underline;
@@ -2499,8 +2413,7 @@
default:
if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
{
- // das geht auch in HTML und muss nicht als STYLE-Option
- // und darf nicht als Hint geschrieben werden
+
ASSERT( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
"Overline als Hint schreiben?" );
pOStr = sCSS1_PV_overline;
@@ -2522,8 +2435,7 @@
default:
if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
{
- // das geht auch in HTML und muss nicht als STYLE-Option
- // und darf nicht als Hint geschrieben werden
+
ASSERT( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
"CrossedOut als Hint schreiben?" );
pCOStr = sCSS1_PV_line_through;
@@ -2541,8 +2453,7 @@
}
else if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
{
- // das geht auch in HTML und muss nicht als STYLE-Option
- // und darf nicht als Hint geschrieben werden
+
ASSERT( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
"Blink als Hint schreiben?" );
pBStr = sCSS1_PV_blink;
@@ -2613,7 +2524,7 @@
{
SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
- // Farben muessen nicht in der Style-Option ausgegeben werden.
+
if( rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) &&
!rHTMLWrt.bCfgPreferStyles )
return rWrt;
@@ -2635,8 +2546,7 @@
static Writer& OutCSS1_SvxCrossedOut( Writer& rWrt, const SfxPoolItem& rHt )
{
- // Mit dieser Methode werden nur Hints ausgegeben!
- // Sonst wird OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink() direkt aufgerufen.
+
if( ((SwHTMLWriter&)rWrt).IsCSS1Source(CSS1_OUTMODE_HINT) )
OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( rWrt,
@@ -2649,7 +2559,7 @@
{
SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
- // Fonts muessen nicht in der Style-Option ausgegeben werden.
+
if( rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
return rWrt;
@@ -2666,7 +2576,7 @@
"Font wirklich als Hint ausgeben?" );
String sOut;
- // MS IE3b1 hat mit einfachen Haekchen Probleme
+
USHORT nMode = rHTMLWrt.nCSS1OutMode & CSS1_OUTMODE_ANY_ON;
sal_Unicode cQuote = nMode == CSS1_OUTMODE_RULE_ON ? '\"' : '\'';
SwHTMLWriter::PrepareFontList( ((const SvxFontItem&)rHt), sOut, cQuote,
@@ -2681,8 +2591,7 @@
{
SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
- // Font-Hoehen muessen nicht in der Style-Option ausgegeben werden.
- // Fuer Drop-Caps wird ein andewres font-size ausgegeben
+
if( rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) ||
rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_DROPCAP ) )
return rWrt;
@@ -2699,7 +2608,7 @@
UINT32 nHeight = ((const SvxFontHeightItem&)rHt).GetHeight();
if( rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT) )
{
- // einen Hint nur dann ausgeben wenn es auch was bringt
+
USHORT nSize = rHTMLWrt.GetHTMLFontSize( nHeight );
if( rHTMLWrt.aFontHeights[nSize-1] == nHeight )
return rWrt;
@@ -2734,8 +2643,7 @@
case ITALIC_NORMAL:
if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
{
- // das geht auch in HTML und muss nicht als STYLE-Option
- // und darf nicht als Hint geschrieben werden
+
ASSERT( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
"Italic als Hint schreiben?" );
pStr = sCSS1_PV_italic;
@@ -2755,7 +2663,7 @@
{
SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
- // Kerning-Item nur ausgeben, wenn volle Style-Unterst?tzung da ist
+
if( !rHTMLWrt.IsHTMLMode(HTMLMODE_FULL_STYLES) )
return rWrt;
@@ -2769,7 +2677,7 @@
nValue = -nValue;
}
- // Breite als n.n pt
+
nValue = (nValue + 1) / 2; // 1/10pt
sOut.Append( ByteString::CreateFromInt32( (sal_Int32)(nValue / 10) ) );
sOut.Append( '.' );
@@ -2820,8 +2728,7 @@
static Writer& OutCSS1_SvxUnderline( Writer& rWrt, const SfxPoolItem& rHt )
{
- // Mit dieser Methode werden nur Hints ausgegeben!
- // Sonst wird OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink() direkt aufgerufen.
+
if( ((SwHTMLWriter&)rWrt).IsCSS1Source(CSS1_OUTMODE_HINT) )
OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( rWrt,
@@ -2833,8 +2740,7 @@
static Writer& OutCSS1_SvxOverline( Writer& rWrt, const SfxPoolItem& rHt )
{
- // Mit dieser Methode werden nur Hints ausgegeben!
- // Sonst wird OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink() direkt aufgerufen.
+
if( ((SwHTMLWriter&)rWrt).IsCSS1Source(CSS1_OUTMODE_HINT) )
OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( rWrt,
@@ -2868,8 +2774,7 @@
case WEIGHT_BOLD:
if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
{
- // das geht auch in HTML und muss nicht als STYLE-Option
- // und darf nicht als Hint geschrieben werden
+
ASSERT( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
"Fett als Hint schreiben?" );
pStr = sCSS1_PV_bold;
@@ -2888,8 +2793,7 @@
static Writer& OutCSS1_SvxBlink( Writer& rWrt, const SfxPoolItem& rHt )
{
- // Mit dieser Methode werden nur Hints ausgegeben!
- // Sonst wird OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink() direkt aufgerufen.
+
if( ((SwHTMLWriter&)rWrt).IsCSS1Source(CSS1_OUTMODE_HINT) )
OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( rWrt,
@@ -2902,10 +2806,7 @@
{
SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
- // #60393#: Netscape4 hat massive Probleme mit den Zellenhoehen
- // wenn der Zeilenabstand innerhalb einer Tabelle geaendert wird
- // und die Breite der Tabelle nicht automatisch berechnet wird
- // (also wenn eine WIDTH-Option vorhanden ist).
+
if( rHTMLWrt.bOutTable && rHTMLWrt.bCfgNetscape4 )
return rWrt;
@@ -2959,8 +2860,7 @@
{
SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
- // Alignment in Style-Option nur ausgeben, wenn das Tag kein
- // ALIGN=xxx zulaesst
+
if( rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) &&
!rHTMLWrt.bNoAlign)
return rWrt;
@@ -3032,15 +2932,15 @@
const SwFmtDrop& rDrop,
const SfxItemSet *pCharFmtItemSet )
{
- // Text fliesst rechts drumrum
+
rHWrt.OutCSS1_PropertyAscii( sCSS1_P_float, sCSS1_PV_left );
- // Anzahl der Zeilen -> %-Angabe fuer Font-Hoehe!
+
ByteString sOut( ByteString::CreateFromInt32( rDrop.GetLines()*100 ) );
sOut += '%';
rHWrt.OutCSS1_PropertyAscii( sCSS1_P_font_size, sOut );
- // Abstand zum Text = rechter Rand
+
USHORT nDistance = rDrop.GetDistance();
if( nDistance > 0 )
rHWrt.OutCSS1_UnitProperty( sCSS1_P_margin_right, nDistance );
@@ -3059,7 +2959,7 @@
{
SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
- // nie als Option eines Absatzes ausgeben, sondern nur als Hints
+
if( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT) )
return rWrt;
@@ -3070,7 +2970,7 @@
CSS1_OUTMODE_DROPCAP );
OutCSS1_SwFmtDropAttrs( rHTMLWrt, (const SwFmtDrop&)rHt );
- // Ein "> wird schon vom aufrufenden OutCSS1_HintAsSpanTag geschrieben.
+
}
else
{
@@ -3158,11 +3058,7 @@
const SvxLRSpaceItem& rLRItem = (const SvxLRSpaceItem&)rHt;
- // Der Export der harten Attributierung ist unnoetig, wenn die
- // neuen Werte denen der aktuellen Vorlage entsprechen
-
- // Einen linken Rand kann es durch eine Liste bereits in der
- // Umgebung geben
+
long nLeftMargin = (long)rLRItem.GetTxtLeft() - rHTMLWrt.nLeftMargin;
if( rHTMLWrt.nDfltLeftMargin != nLeftMargin )
{
@@ -3175,8 +3071,7 @@
(long)rLRItem.GetRight() );
}
- // Der Erstzeilen-Einzug kann den Platz fuer eine Numerierung
- // enthalten
+
long nFirstLineIndent = (long)rLRItem.GetTxtFirstLineOfst() -
rHTMLWrt.nFirstLineIndent;
if( rHTMLWrt.nDfltFirstLineIndent != nFirstLineIndent )
@@ -3352,7 +3247,7 @@
return rWrt;
}
-// Wrapper fuer OutCSS1_SfxItemSet etc.
+
static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt )
{
OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_ATTR, 0 );
@@ -3365,14 +3260,12 @@
{
SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
- // Das Zeichen-Attribut wird nicht ausgegeben, wenn gerade
- // Optionen ausgegeben werden
+
if( rHt.Which() < RES_CHRATR_END &&
rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
return rWrt;
- // Erstmal ein par Werte holen
-// const Brush &rBrush = ((const SvxBrushItem &)rHt).GetBrush();
+
const Color & rColor = ((const SvxBrushItem &)rHt).GetColor();
const String *pLink = pGrfName ? pGrfName
: ((const SvxBrushItem &)rHt).GetGraphicLink();
@@ -3380,14 +3273,13 @@
if( CSS1_BACKGROUND_PAGE==nMode )
{
- // Fuer Seitenvorlagen wurde der Grafik-Name uebergeben. Es wird
- // nur ein Attribut ausgegeben, wenn die Grafik nicht gekachelt ist.
+
ASSERT( pLink, "Wo ist der Grafik-Name der Seitenvorlage?" );
if( !pLink || !pLink->Len() || GPOS_TILED==ePos )
return rWrt;
}
- // Erstmal die Farbe holen
+
BOOL bColor = FALSE;
/// OD 02.09.2002 #99657#
/// set <bTransparent> to TRUE, if color is "no fill"/"auto fill"
@@ -3399,23 +3291,23 @@
bColor = TRUE;
}
- // und jetzt eine Grafik
+
String sGrfNm;
if( !pLink )
{
- // embeddete Grafik -> WriteEmbedded schreiben
+
const Graphic* pGrf = ((const SvxBrushItem &)rHt).GetGraphic();
if( pGrf )
{
- // Grafik als (JPG-)File speichern
+
const String* pTempFileName = rHTMLWrt.GetOrigFileName();
if( pTempFileName )
sGrfNm = *pTempFileName;
USHORT nErr = XOutBitmap::WriteGraphic( *pGrf, sGrfNm,
String::CreateFromAscii("JPG"),
XOUTBMP_USE_NATIVE_IF_POSSIBLE );
- if( !nErr ) // fehlerhaft, da ist nichts auszugeben
+ if( !nErr )
{
sGrfNm = URIHelper::SmartRel2Abs(
INetURLObject(rWrt.GetBaseURL()), sGrfNm,
@@ -3435,12 +3327,11 @@
pLink = &sGrfNm;
}
- // In Tabellen wird nur dann etwas exportiert, wenn eine Grafik
- // existiert.
+
if( CSS1_BACKGROUND_TABLE==nMode && !pLink )
return rWrt;
- // ggf. noch die Ausrichtung der Grafik
+
const sal_Char *pRepeat = 0, *pHori = 0, *pVert = 0;
if( pLink )
{
@@ -3503,11 +3394,11 @@
}
}
- // jetzt den String zusammen bauen
+
String sOut;
if( !pLink && !bColor )
{
- // keine Farbe und kein Link, aber ein transparenter Brush
+
if( bTransparent && CSS1_BACKGROUND_FLY != nMode )
sOut.AssignAscii( sCSS1_PV_transparent );
}
@@ -3584,15 +3475,14 @@
nWidth <= Application::GetDefaultDevice()->PixelToLogic(
Size( 1, 1 ), MapMode( MAP_TWIP) ).Width() )
{
- // Wenn die Breite kleiner ist als ein Pixel, dann als 1px
- // ausgeben, damit Netscape und IE die Linie auch darstellen.
+
sOut += "1px";
}
else
{
nWidth *= 5; // 1/100pt
- // Breite als n.nn pt
+
sOut += ByteString::CreateFromInt32( nWidth / 100 );
(((sOut += '.')
+= ByteString::CreateFromInt32((nWidth/10) % 10))
@@ -3619,7 +3509,7 @@
}
sOut += ' ';
- // und noch die Farbe
+
GetCSS1Color( pLine->GetColor(), sOut );
rHTMLWrt.OutCSS1_PropertyAscii( pProperty, sOut );
@@ -3629,8 +3519,7 @@
{
SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
- // Das Zeichen-Attribut wird nicht ausgegeben, wenn gerade
- // Optionen ausgegeben werden
+
// if( !rHTMLWrt.IsHTMLMode(HTMLMODE_PARA_BORDER))
// return rWrt;
@@ -3644,13 +3533,13 @@
*pTop == *pBottom && *pTop == *pLeft && *pTop == *pRight) ||
(!pTop && !pBottom && !pLeft && !pRight) )
{
- // alle Linien gesetzt und gleich oder alle Linien nicht gesetzt
+
// => border : ...
OutCSS1_SvxBorderLine( rHTMLWrt, sCSS1_P_border, pTop );
}
else
{
- // sonst alle Linien individuell ausgeben
+
OutCSS1_SvxBorderLine( rHTMLWrt, sCSS1_P_border_top, pTop );
OutCSS1_SvxBorderLine( rHTMLWrt, sCSS1_P_border_bottom, pBottom );
OutCSS1_SvxBorderLine( rHTMLWrt, sCSS1_P_border_left, pLeft );
@@ -3716,12 +3605,7 @@
return rWrt;
}
-/*
- * lege hier die Tabellen fuer die HTML-Funktions-Pointer auf
- * die Ausgabe-Funktionen an.
- * Es sind lokale Strukturen, die nur innerhalb der HTML-DLL
- * bekannt sein muessen.
- */
+/
SwAttrFnTab aCSS1AttrFnTab = {
_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice