[Libreoffice-commits] .: sw/source
Noel Power
noelp at kemper.freedesktop.org
Tue Jun 7 02:58:49 PDT 2011
sw/source/filter/ww8/docxattributeoutput.cxx | 9 -
sw/source/filter/ww8/ww8par3.cxx | 174 +++++++++++++++------------
2 files changed, 98 insertions(+), 85 deletions(-)
New commits:
commit f1e4db1390ea82d8c272be74d246317d68fd22f8
Author: Noel Power <noel.power at novell.com>
Date: Tue Jun 7 10:58:17 2011 +0100
Revert "fix date format export, N is not a recognised format code"
This reverts commit 186032185beaa6859193c8946e7d1d0197db55be.
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index a70d5fe..85ee6df 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -756,15 +756,6 @@ void DocxAttributeOutput::CmdField_Impl( FieldInfos& rInfos )
for ( xub_StrLen i = 0; i < nNbToken; i++ )
{
String sToken = rInfos.sCmd.GetToken( i, '\t' );
- if ( rInfos.eType == ww::eCREATEDATE
- || rInfos.eType == ww::eSAVEDATE
- || rInfos.eType == ww::ePRINTDATE
- || rInfos.eType == ww::eDATE
- || rInfos.eType == ww::eTIME )
- {
- sToken.SearchAndReplaceAll( String( RTL_CONSTASCII_USTRINGPARAM("NNNN") ), String( RTL_CONSTASCII_USTRINGPARAM("dddd") ) );
- sToken.SearchAndReplaceAll( String( RTL_CONSTASCII_USTRINGPARAM("NN") ), String( RTL_CONSTASCII_USTRINGPARAM("ddd") ) );
- }
// Write the Field command
DoWriteCmd( sToken );
diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx
index 03f594a..6b54aaa 100644
--- a/sw/source/filter/ww8/ww8par3.cxx
+++ b/sw/source/filter/ww8/ww8par3.cxx
@@ -2138,88 +2138,118 @@ void WW8FormulaControl::FormulaRead(SwWw8ControlType nWhich,
SvStream *pDataStream)
{
sal_uInt8 nField;
- // nHeaderBype == version
- sal_uInt32 nHeaderByte;
-
- // The following is a FFData structure as described in
- // Microsoft's DOC specification (chapter 2.9.78)
+ sal_uInt8 nHeaderByte;
+ int nType=0;
*pDataStream >> nHeaderByte;
+ if (nHeaderByte == 0xFF) //Guesswork time, difference between 97 and 95 ?
+ {
+ pDataStream->SeekRel(3);
+ *pDataStream >> nHeaderByte;
+ nType=1;
+ }
+ fUnknown = nHeaderByte & 0x3;
+ fDropdownIndex = (nHeaderByte & 0x7C) >> 2;
+ *pDataStream >> nField;
+ fToolTip = nField & 0x01;
+ fNoMark = (nField & 0x02)>>1;
+ fUseSize = (nField & 0x04)>>2;
+ fNumbersOnly= (nField & 0x08)>>3;
+ fDateOnly = (nField & 0x10)>>4;
+ fUnused = (nField & 0xE0)>>5;
+ *pDataStream >> nSize;
- // wouldn't it be better to read the bits as a 16 bit word ( like it is in the spec.
- // certainly easier to follow.
- sal_uInt8 bits1;
- *pDataStream >> bits1;
- sal_uInt8 bits2;
- *pDataStream >> bits2;
-
- sal_uInt8 iType = ( bits1 & 0x3 );
-
- // we should verify that bits.iType & nWhich concur
- OSL_ENSURE( iType == nWhich, "something wrong, expect control type read from stream doesn't match nWhich passed in");
- if ( !( iType == nWhich ) )
- return; // bail out
-
- sal_uInt8 iRes = (bits1 & 0x7C) >> 2;
-
- sal_uInt16 cch;
- *pDataStream >> cch;
-
- sal_uInt16 hps;
- *pDataStream >> hps;
+ *pDataStream >> hpsCheckBox;
+ if (nType == 0)
+ pDataStream->SeekRel(2); //Guess
rtl_TextEncoding eEnc = rRdr.eStructCharSet;
+ sTitle = !nType ? WW8ReadPString(*pDataStream, eEnc, true)
+ : WW8Read_xstz(*pDataStream, 0, true);
- // xstzName
- sTitle = WW8Read_xstz(*pDataStream, 0, true);
+ if (nWhich == WW8_CT_CHECKBOX)
+ {
+ *pDataStream >> nDefaultChecked;
+ nChecked = nDefaultChecked;
- if (nWhich == WW8_CT_EDIT)
- { // Field is a textbox
- // Default text
- // xstzTextDef
- sDefault = WW8Read_xstz(*pDataStream, 0, true);
+ sal_uInt8 iRes = (nHeaderByte >> 2) & 0x1F;
+ switch (iRes)
+ {
+ case 1: //checked
+ nChecked = true;
+ break;
+ case 25: //undefined, Undefined checkboxes are treated as unchecked
+ //but it appear that both visually and the value are picked up from the default in that case
+ break;
+ case 0: //unchecked
+ nChecked = false;
+ break;
+ default:
+ OSL_ENSURE(!this, "unknown option, please report to cmc");
+ break;
+ }
+ if ( nDefaultChecked )
+ sDefault = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("1") );
+ else
+ sDefault = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("0") );
}
+ else if (nWhich == WW8_CT_DROPDOWN)
+ *pDataStream >> nChecked;
else
{
- // CheckBox or ComboBox
- sal_uInt16 wDef = 0;
- *pDataStream >> wDef;
- nChecked = wDef; // default
- if (nWhich == WW8_CT_CHECKBOX)
- {
- if ( iRes != 25 )
- nChecked = iRes;
- sDefault = ( wDef == 0 ) ? rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("0") ) : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("1") );
- }
+ sDefault = !nType ? WW8ReadPString(*pDataStream, eEnc, true)
+ : WW8Read_xstz(*pDataStream, 0, true);
}
- // xstzTextFormat
- sFormatting = WW8Read_xstz(*pDataStream, 0, true);
- // xstzHelpText
- sHelp = WW8Read_xstz(*pDataStream, 0, true);
- // xstzStatText
- sToolTip = WW8Read_xstz(*pDataStream, 0, true);
- String sEntryMacro = WW8Read_xstz(*pDataStream, 0, true);
- String sExitMcr = WW8Read_xstz(*pDataStream, 0, true);
+ sFormatting = !nType ? WW8ReadPString(*pDataStream, eEnc, true)
+ : WW8Read_xstz(*pDataStream, 0, true);
- if (nWhich == WW8_CT_DROPDOWN)
- {
- bool bAllOk = true;
- // SSTB (see Spec. 2.2.4)
- sal_uInt16 fExtend;
- *pDataStream >> fExtend;
- sal_uInt16 nNoStrings;
+ sHelp = !nType ? WW8ReadPString(*pDataStream, eEnc, true)
+ : WW8Read_xstz(*pDataStream, 0, true);
- // Isn't it that if fExtend isn't 0xFFFF then fExtend actually
- // doesn't exist and we really have just read nNoStrings ( or cData )?
- if (fExtend != 0xFFFF)
- bAllOk = false;
- *pDataStream >> nNoStrings;
+ if (nWhich == WW8_CT_DROPDOWN) //is this the case ?
+ fToolTip = true;
- // I guess this should be zero ( and we should ensure that )
- sal_uInt16 cbExtra;
- *pDataStream >> cbExtra;
+ if( fToolTip )
+ {
+ sToolTip = !nType ? WW8ReadPString(*pDataStream, eEnc, true)
+ : WW8Read_xstz(*pDataStream, 0, true);
+ }
+ if (nWhich == WW8_CT_DROPDOWN)
+ {
+ bool bAllOk = true;
+ pDataStream->SeekRel(4 * (nType ? 2 : 1));
+ sal_uInt16 nDummy;
+ *pDataStream >> nDummy;
+ sal_uInt32 nNoStrings;
+ if (!nType)
+ {
+ sal_uInt16 nWord95NoStrings;
+ *pDataStream >> nWord95NoStrings;
+ nNoStrings = nWord95NoStrings;
+ *pDataStream >> nWord95NoStrings;
+ if (nNoStrings != nWord95NoStrings)
+ bAllOk = false;
+ nNoStrings = nWord95NoStrings;
+ sal_uInt16 nDummy2;
+ *pDataStream >> nDummy2;
+ if (nDummy2 != 0)
+ bAllOk = false;
+ *pDataStream >> nDummy2;
+ if (nDummy2 != 0xA)
+ bAllOk = false;
+ if (!bAllOk) //Not as expected, don't risk it at all.
+ nNoStrings = 0;
+ for (sal_uInt16 nI = 0; nI < nNoStrings; ++nI)
+ pDataStream->SeekRel(2);
+ }
+ else
+ {
+ if (nDummy != 0xFFFF)
+ bAllOk = false;
+ *pDataStream >> nNoStrings;
+ }
OSL_ENSURE(bAllOk,
"Unknown formfield dropdown list structure. Report to cmc");
if (!bAllOk) //Not as expected, don't risk it at all.
@@ -2227,19 +2257,11 @@ void WW8FormulaControl::FormulaRead(SwWw8ControlType nWhich,
maListEntries.reserve(nNoStrings);
for (sal_uInt32 nI = 0; nI < nNoStrings; ++nI)
{
- String sEntry = WW8Read_xstz(*pDataStream, 0, false);
+ String sEntry = !nType ? WW8ReadPString(*pDataStream, eEnc, false)
+ : WW8Read_xstz(*pDataStream, 0, false);
maListEntries.push_back(sEntry);
}
}
- fDropdownIndex = iRes;
-
- nField = bits2;
- fToolTip = nField & 0x01;
- fNoMark = (nField & 0x02)>>1;
- fUseSize = (nField & 0x04)>>2;
- fNumbersOnly= (nField & 0x08)>>3;
- fDateOnly = (nField & 0x10)>>4;
- fUnused = (nField & 0xE0)>>5;
}
WW8FormulaListBox::WW8FormulaListBox(SwWW8ImplReader &rR)
More information about the Libreoffice-commits
mailing list