filter/inc/filter/msfilter/util.hxx | 16 +++++ filter/source/msfilter/util.cxx | 78 +++++++++++++++++++++++++ sw/source/filter/inc/msfilter.hxx | 9 -- sw/source/filter/rtf/swparrtf.cxx | 4 - sw/source/filter/ww8/docxattributeoutput.cxx | 53 ---------------- sw/source/filter/ww8/writerwordglue.cxx | 33 ---------- sw/source/filter/ww8/ww8par.cxx | 4 - sw/source/filter/ww8/ww8par4.cxx | 2 writerfilter/source/rtftok/rtfdocumentimpl.cxx | 40 ------------ 9 files changed, 103 insertions(+), 136 deletions(-)
New commits: commit 42e41ea6d6ec40977cc339af529b2306840d31cb Author: Miklos Vajna <vmik...@suse.cz> Date: Fri Jun 15 17:48:17 2012 +0200 move DTTM2DateTime and DateTimeToOString to msfilter to avoid copy&paste diff --git a/filter/inc/filter/msfilter/util.hxx b/filter/inc/filter/msfilter/util.hxx index 2dc5fa7..ff52209 100644 --- a/filter/inc/filter/msfilter/util.hxx +++ b/filter/inc/filter/msfilter/util.hxx @@ -30,6 +30,7 @@ #define INCLUDED_MSFILTER_UTIL_HXX #include <rtl/textenc.h> +#include <tools/datetime.hxx> #include <com/sun/star/lang/Locale.hpp> #include "filter/msfilter/msfilterdllapi.h" @@ -43,6 +44,21 @@ MSFILTER_DLLPUBLIC rtl_TextEncoding getBestTextEncodingFromLocale(const ::com::s /// Convert a color in BGR format to RGB. MSFILTER_DLLPUBLIC sal_uInt32 BGRToRGB(sal_uInt32 nColour); + +/** Convert from DTTM to Writer's DateTime + + @author + <a href="mailto:mma...@openoffice.org">Martin Maher</a + */ +MSFILTER_DLLPUBLIC DateTime DTTM2DateTime( long lDTTM ); + +/** Convert DateTime to xsd::dateTime string. + +I guess there must be an implementation of this somewhere in LO, but I failed +to find it, unfortunately :-( +*/ +MSFILTER_DLLPUBLIC rtl::OString DateTimeToOString( const DateTime& rDateTime ); + } } diff --git a/filter/source/msfilter/util.cxx b/filter/source/msfilter/util.cxx index 03df8af..adfe492 100644 --- a/filter/source/msfilter/util.cxx +++ b/filter/source/msfilter/util.cxx @@ -27,6 +27,7 @@ */ #include <rtl/ustring.hxx> +#include <rtl/strbuf.hxx> #include <vcl/svapp.hxx> #include <filter/msfilter/util.hxx> @@ -62,6 +63,83 @@ sal_uInt32 BGRToRGB(sal_uInt32 nColor) return nColor; } +DateTime DTTM2DateTime( long lDTTM ) +{ + /* + mint short :6 0000003F minutes (0-59) + hr short :5 000007C0 hours (0-23) + dom short :5 0000F800 days of month (1-31) + mon short :4 000F0000 months (1-12) + yr short :9 1FF00000 years (1900-2411)-1900 + wdy short :3 E0000000 weekday(Sunday=0 + Monday=1 + ( wdy can be ignored ) Tuesday=2 + Wednesday=3 + Thursday=4 + Friday=5 + Saturday=6) + */ + DateTime aDateTime(Date( 0 ), Time( 0 )); + if( lDTTM ) + { + sal_uInt16 lMin = (sal_uInt16)(lDTTM & 0x0000003F); + lDTTM >>= 6; + sal_uInt16 lHour= (sal_uInt16)(lDTTM & 0x0000001F); + lDTTM >>= 5; + sal_uInt16 lDay = (sal_uInt16)(lDTTM & 0x0000001F); + lDTTM >>= 5; + sal_uInt16 lMon = (sal_uInt16)(lDTTM & 0x0000000F); + lDTTM >>= 4; + sal_uInt16 lYear= (sal_uInt16)(lDTTM & 0x000001FF) + 1900; + aDateTime = DateTime(Date(lDay, lMon, lYear), Time(lHour, lMin)); + } + return aDateTime; +} + +/// Append the number as 2-digit when less than 10. +static void lcl_AppendTwoDigits( rtl::OStringBuffer &rBuffer, sal_Int32 nNum ) +{ + if ( nNum < 0 || nNum > 99 ) + { + rBuffer.append( "00" ); + return; + } + + if ( nNum < 10 ) + rBuffer.append( '0' ); + + rBuffer.append( nNum ); +} + +rtl::OString DateTimeToOString( const DateTime& rDateTime ) +{ + DateTime aInUTC( rDateTime ); +// HACK: this is correct according to the spec, but MSOffice believes everybody lives +// in UTC+0 when reading it back +// aInUTC.ConvertToUTC(); + + rtl::OStringBuffer aBuffer( 25 ); + aBuffer.append( sal_Int32( aInUTC.GetYear() ) ); + aBuffer.append( '-' ); + + lcl_AppendTwoDigits( aBuffer, aInUTC.GetMonth() ); + aBuffer.append( '-' ); + + lcl_AppendTwoDigits( aBuffer, aInUTC.GetDay() ); + aBuffer.append( 'T' ); + + lcl_AppendTwoDigits( aBuffer, aInUTC.GetHour() ); + aBuffer.append( ':' ); + + lcl_AppendTwoDigits( aBuffer, aInUTC.GetMin() ); + aBuffer.append( ':' ); + + lcl_AppendTwoDigits( aBuffer, aInUTC.GetSec() ); + aBuffer.append( 'Z' ); // we are in UTC + + return aBuffer.makeStringAndClear(); +} + } } diff --git a/sw/source/filter/inc/msfilter.hxx b/sw/source/filter/inc/msfilter.hxx index 3958f74..45fd883 100644 --- a/sw/source/filter/inc/msfilter.hxx +++ b/sw/source/filter/inc/msfilter.hxx @@ -37,7 +37,7 @@ #include "wwstyles.hxx" //ww::sti #include <rtl/textenc.h> //rtl_TextEncoding #include <tools/gen.hxx> //Size -#include <tools/datetime.hxx> +#include <filter/msfilter/util.hxx> #include <fltshell.hxx> // fuer den Attribut Stack #include <redline.hxx> #include <shellio.hxx> @@ -107,13 +107,6 @@ namespace sw @author <a href="mailto:mma...@openoffice.org">Martin Maher</a */ - DateTime DTTM2DateTime( long lDTTM ); - - /** Convert from DTTM to Writer's DateTime - - @author - <a href="mailto:mma...@openoffice.org">Martin Maher</a - */ long DateTime2DTTM( const DateTime& rDT ); /** Convert from Word Date/Time field str to Writer's Date Time str diff --git a/sw/source/filter/rtf/swparrtf.cxx b/sw/source/filter/rtf/swparrtf.cxx index 5a73aa1..2e8553a 100644 --- a/sw/source/filter/rtf/swparrtf.cxx +++ b/sw/source/filter/rtf/swparrtf.cxx @@ -1847,12 +1847,12 @@ void SwRTFParser::NextToken( int nToken ) case RTF_REVDTTM: if (pRedlineInsert != NULL) - pRedlineInsert->aStamp = sw::ms::DTTM2DateTime(nTokenValue); + pRedlineInsert->aStamp = msfilter::util::DTTM2DateTime(nTokenValue); break; case RTF_REVDTTMDEL: - pRedlineDelete->aStamp = sw::ms::DTTM2DateTime(nTokenValue); + pRedlineDelete->aStamp = msfilter::util::DTTM2DateTime(nTokenValue); break; diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index db118a8..ba50463 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -1240,55 +1240,6 @@ void DocxAttributeOutput::Redline( const SwRedlineData* /*pRedline*/ ) OSL_TRACE( "TODO DocxAttributeOutput::Redline( const SwRedlineData* pRedline )" ); } -/// Append the number as 2-digit when less than 10. -static void impl_AppendTwoDigits( OStringBuffer &rBuffer, sal_Int32 nNum ) -{ - if ( nNum < 0 || nNum > 99 ) - { - rBuffer.append( "00" ); - return; - } - - if ( nNum < 10 ) - rBuffer.append( '0' ); - - rBuffer.append( nNum ); -} - -/** Convert DateTime to xsd::dateTime string. - -I guess there must be an implementation of this somewhere in OOo, but I failed -to find it, unfortunately :-( -*/ -static OString impl_DateTimeToOString( const DateTime& rDateTime ) -{ - DateTime aInUTC( rDateTime ); -// HACK: this is correct according to the spec, but MSOffice believes everybody lives -// in UTC+0 when reading it back -// aInUTC.ConvertToUTC(); - - OStringBuffer aBuffer( 25 ); - aBuffer.append( sal_Int32( aInUTC.GetYear() ) ); - aBuffer.append( '-' ); - - impl_AppendTwoDigits( aBuffer, aInUTC.GetMonth() ); - aBuffer.append( '-' ); - - impl_AppendTwoDigits( aBuffer, aInUTC.GetDay() ); - aBuffer.append( 'T' ); - - impl_AppendTwoDigits( aBuffer, aInUTC.GetHour() ); - aBuffer.append( ':' ); - - impl_AppendTwoDigits( aBuffer, aInUTC.GetMin() ); - aBuffer.append( ':' ); - - impl_AppendTwoDigits( aBuffer, aInUTC.GetSec() ); - aBuffer.append( 'Z' ); // we are in UTC - - return aBuffer.makeStringAndClear(); -} - void DocxAttributeOutput::StartRedline( const SwRedlineData* pRedlineData ) { m_pRedlineData = pRedlineData; @@ -1303,7 +1254,7 @@ void DocxAttributeOutput::StartRedline( const SwRedlineData* pRedlineData ) const String &rAuthor( SW_MOD()->GetRedlineAuthor( pRedlineData->GetAuthor() ) ); OString aAuthor( OUStringToOString( rAuthor, RTL_TEXTENCODING_UTF8 ) ); - OString aDate( impl_DateTimeToOString( pRedlineData->GetTimeStamp() ) ); + OString aDate( msfilter::util::DateTimeToOString( pRedlineData->GetTimeStamp() ) ); switch ( pRedlineData->GetType() ) { @@ -3380,7 +3331,7 @@ void DocxAttributeOutput::WritePostitFields() const SwPostItField* f = m_postitFields[ i ]; m_pSerializer->startElementNS( XML_w, XML_comment, FSNS( XML_w, XML_id ), idstr.getStr(), FSNS( XML_w, XML_author ), rtl::OUStringToOString( f->GetPar1(), RTL_TEXTENCODING_UTF8 ).getStr(), - FSNS( XML_w, XML_date ), impl_DateTimeToOString(f->GetDateTime()).getStr(), FSEND ); + FSNS( XML_w, XML_date ), msfilter::util::DateTimeToOString(f->GetDateTime()).getStr(), FSEND ); // Check for the text object existing, it seems that it can be NULL when saving a newly created // comment without giving focus back to the main document. As GetTxt() is empty in that case as well, // that is probably a bug in the Writer core. diff --git a/sw/source/filter/ww8/writerwordglue.cxx b/sw/source/filter/ww8/writerwordglue.cxx index 2c1bd54..7dbed56 100644 --- a/sw/source/filter/ww8/writerwordglue.cxx +++ b/sw/source/filter/ww8/writerwordglue.cxx @@ -728,39 +728,6 @@ namespace sw return nDT; } - DateTime DTTM2DateTime( long lDTTM ) - { - /* - mint short :6 0000003F minutes (0-59) - hr short :5 000007C0 hours (0-23) - dom short :5 0000F800 days of month (1-31) - mon short :4 000F0000 months (1-12) - yr short :9 1FF00000 years (1900-2411)-1900 - wdy short :3 E0000000 weekday(Sunday=0 - Monday=1 - ( wdy can be ignored ) Tuesday=2 - Wednesday=3 - Thursday=4 - Friday=5 - Saturday=6) - */ - DateTime aDateTime(Date( 0 ), Time( 0 )); - if( lDTTM ) - { - sal_uInt16 lMin = (sal_uInt16)(lDTTM & 0x0000003F); - lDTTM >>= 6; - sal_uInt16 lHour= (sal_uInt16)(lDTTM & 0x0000001F); - lDTTM >>= 5; - sal_uInt16 lDay = (sal_uInt16)(lDTTM & 0x0000001F); - lDTTM >>= 5; - sal_uInt16 lMon = (sal_uInt16)(lDTTM & 0x0000000F); - lDTTM >>= 4; - sal_uInt16 lYear= (sal_uInt16)(lDTTM & 0x000001FF) + 1900; - aDateTime = DateTime(Date(lDay, lMon, lYear), Time(lHour, lMin)); - } - return aDateTime; - } - sal_uLong MSDateTimeFormatToSwFormat(String& rParams, SvNumberFormatter *pFormatter, sal_uInt16 &rLang, bool bHijri, sal_uInt16 nDocLang) diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx index 82f4312..c497602 100644 --- a/sw/source/filter/ww8/ww8par.cxx +++ b/sw/source/filter/ww8/ww8par.cxx @@ -1509,7 +1509,7 @@ void SwWW8ImplReader::ImportDop() if (xDocuProps.is()) { DateTime aLastPrinted( - sw::ms::DTTM2DateTime(pWDop->dttmLastPrint)); + msfilter::util::DTTM2DateTime(pWDop->dttmLastPrint)); ::util::DateTime uDT(aLastPrinted.Get100Sec(), aLastPrinted.GetSec(), aLastPrinted.GetMin(), aLastPrinted.GetHour(), aLastPrinted.GetDay(), @@ -1828,7 +1828,7 @@ long SwWW8ImplReader::Read_And(WW8PLCFManResult* pRes) nDateTime = SVBT32ToUInt32(*(SVBT32*)(pExtended+(nIndex*18))); } - DateTime aDate = sw::ms::DTTM2DateTime(nDateTime); + DateTime aDate = msfilter::util::DTTM2DateTime(nDateTime); String sTxt; OutlinerParaObject *pOutliner = ImportAsOutliner( sTxt, pRes->nCp2OrIdx, diff --git a/sw/source/filter/ww8/ww8par4.cxx b/sw/source/filter/ww8/ww8par4.cxx index 083fbd2..2765d2c 100644 --- a/sw/source/filter/ww8/ww8par4.cxx +++ b/sw/source/filter/ww8/ww8par4.cxx @@ -522,7 +522,7 @@ void SwWW8ImplReader::Read_CRevisionMark(RedlineType_t eType, // start of new revision mark, if not there default to first entry sal_uInt16 nWWAutNo = pSprmCIbstRMark ? SVBT16ToShort(pSprmCIbstRMark) : 0; sal_uInt32 nWWDate = pSprmCDttmRMark ? SVBT32ToUInt32(pSprmCDttmRMark): 0; - DateTime aStamp(sw::ms::DTTM2DateTime(nWWDate)); + DateTime aStamp(msfilter::util::DTTM2DateTime(nWWDate)); sal_uInt16 nAuthorNo = m_aAuthorInfos[nWWAutNo]; SwFltRedline aNewAttr(eType, nAuthorNo, aStamp); NewAttr(aNewAttr); diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 190b1bd..699b42b 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -150,47 +150,9 @@ static void lcl_putBorderProperty(std::stack<RTFParserState>& aStates, Id nId, R pAttributes->set(nId, pValue); } -// NEEDSWORK: DocxAttributeOutput's impl_AppendTwoDigits does the same. -static void lcl_AppendTwoDigits(OStringBuffer &rBuffer, sal_Int32 nNum) -{ - if ( nNum < 0 || nNum > 99 ) - { - rBuffer.append( "00" ); - return; - } - - if ( nNum < 10 ) - rBuffer.append( '0' ); - - rBuffer.append( nNum ); -} - -// NEEDSWORK: sw::ms::DTTM2DateTime and DocxAttributeOutput's -// impl_DateTimeToOString could be combined to do the same. static OString lcl_DTTM22OString(long lDTTM) { - sal_uInt16 lMin = (sal_uInt16)(lDTTM & 0x0000003F); - lDTTM >>= 6; - sal_uInt16 lHour= (sal_uInt16)(lDTTM & 0x0000001F); - lDTTM >>= 5; - sal_uInt16 lDay = (sal_uInt16)(lDTTM & 0x0000001F); - lDTTM >>= 5; - sal_uInt16 lMon = (sal_uInt16)(lDTTM & 0x0000000F); - lDTTM >>= 4; - sal_uInt16 lYear= (sal_uInt16)(lDTTM & 0x000001FF) + 1900; - - OStringBuffer aBuf; - aBuf.append(sal_Int32(lYear)); - aBuf.append('-'); - lcl_AppendTwoDigits(aBuf, lMon); - aBuf.append('-'); - lcl_AppendTwoDigits(aBuf, lDay); - aBuf.append('T'); - lcl_AppendTwoDigits(aBuf, lHour); - aBuf.append(':'); - lcl_AppendTwoDigits(aBuf, lMin); - aBuf.append(":00Z"); - return aBuf.makeStringAndClear(); + return msfilter::util::DateTimeToOString(msfilter::util::DTTM2DateTime(lDTTM)); } static writerfilter::Reference<Properties>::Pointer_t lcl_getBookmarkProperties(int nPos, OUString& rString) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits