Commit 5aa42323 authored by Sergey.Konovalov's avatar Sergey.Konovalov Committed by Alexander Trofimov

(1.0.0.42): ASCOfficeRtfFile

Bug 17786 - Нет заливки ячейки.
Bug 17793 - Толщина линии должна быть 4.5pt.
Bug 17797 - в RTF не подхватился флаг переноса заголовка таблицы.
Bug 17811 - В RTF не протащился параметр автофигуры - положение за текстом.
Bug 17784 - первая ячейка в 5-6 строке неверной высоты.
Bug 18780 - RTF документ открывается без картинок, если она была добавлена через PrintScreen в WordPad.
для бага.Bug 17798 - В таблице не подхватилась нумерация.
Bug 22788 - [RTF] Документ с иероглифами открывается со знаками вопросов

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@56358 954022d7-b5bf-4e40-9824-e11837661b57
parent 9c17767b
......@@ -1071,8 +1071,6 @@ private: byte* m_pbBin;
private: int m_nBinLength;
public: PictureReader( RtfReader& oReader, RtfShape& oShape ):m_oShape(oShape)
{
m_bUseDoubleByte = false;
m_bBin = false;
m_pbBin = NULL;
......@@ -1137,7 +1135,6 @@ class OleReader: public RtfAbstractReader
private: RtfOle& m_oOle;
public: OleReader(RtfOle& oOle):m_oOle(oOle)
{
m_bUseDoubleByte = false;
}
public: bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CString sCommand, bool hasParameter, int parameter);
......@@ -1345,6 +1342,8 @@ class ShapePropertyReader : public RtfAbstractReader
m_oShape.m_nLineEndArrowWidth = nValue;
else if( _T("lineEndArrowLength") == m_sPropName )
m_oShape.m_nLineEndArrowLength = nValue;
else if( _T("lineWidth") == m_sPropName )
m_oShape.m_nLineWidth = nValue;
}
public: void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, CString oText )
{
......
......@@ -76,6 +76,9 @@ bool OOXShapeReader::Parse( ReaderParameter oParam , RtfShapePtr& oOutput)
oOutput->m_nGroupRight = oOutput->m_nGroupLeft + Strings::ToInteger( sCoordsize.Left( nDelimiter ) );
oOutput->m_nGroupBottom = oOutput->m_nGroupTop + Strings::ToInteger( sCoordsize.Right( nDelimiter ) );
}
CString sStrokeweight = oXmlReader.ReadNodeAttribute( _T("strokeweight"), _T("") );
if( _T("") != sStrokeweight )
oOutput->m_nLineWidth = RtfUtility::Twips2Emu(RtfUtility::String2Twips( sStrokeweight ));
oXmlReader.ReadNodeList( _T("*") );
for( int i = 0; i < oXmlReader.GetLengthList(); i++ )
......
......@@ -310,14 +310,13 @@ private: void parseText(int car, RtfToken& token)
//while (c != ';' &&c ! = '\\' && c != '}' && c != '{' && c != EOF)
while (c != '\\' && c != '}' && c != '{' && c != EOF)
{
if( nTempBufPos < m_nReadBufSize )
m_caReadBuffer[nTempBufPos++] = c;
else
if( nTempBufPos >= m_nReadBufSize )
{
m_caReadBuffer[nTempBufPos++] = '\0';
nTempBufPos = 0;
token.Key.Append( m_caReadBuffer );
nTempBufPos = 0;
}
m_caReadBuffer[nTempBufPos++] = c;
c = m_oStream.getc();
//Se ignoran los retornos de carro, tabuladores y caracteres nulos
......
......@@ -340,6 +340,9 @@ CString RtfShading::RenderToOOX(RenderParameter oRenderParameter)
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_COLOR_VALUE;
if(PROP_DEF != m_nBackColor && PROP_DEF == m_nValue && st_none == m_eType)
m_nValue = 0;
CString sShading;
if( PROP_DEF != m_nForeColor )
{
......@@ -764,67 +767,79 @@ CString RtfListLevelProperty::RenderToRtf(RenderParameter oRenderParameter)
return sResult;
}
CString RtfListLevelProperty::RenderToOOX(RenderParameter oRenderParameter)
{
return RenderToOOX2(oRenderParameter);
}
CString RtfListLevelProperty::RenderToOOX2(RenderParameter oRenderParameter, int nLvl)
{
CString sResult;
sResult.AppendFormat( _T("<w:lvl w:ilvl=\"%d\""), m_nLevel );
RENDER_OOX_BOOL_ATTRIBUTE( m_bTentative, sResult, _T("w:tentative"))
sResult.Append(_T(">"));
if( PROP_DEF != m_nJustification )
{
switch( m_nJustification )
int nLevel = PROP_DEF;
if(PROP_DEF != nLvl)
nLevel = nLvl;
else if(PROP_DEF != m_nLevel)
nLevel = m_nLevel;
if(PROP_DEF != nLevel)
{
sResult.AppendFormat( _T("<w:lvl w:ilvl=\"%d\""), nLevel );
RENDER_OOX_BOOL_ATTRIBUTE( m_bTentative, sResult, _T("w:tentative"))
sResult.Append(_T(">"));
if( PROP_DEF != m_nJustification )
{
case 0:sResult.Append(_T("<w:lvlJc w:val=\"left\" />")); break;
case 1:sResult.Append(_T("<w:lvlJc w:val=\"center\" />")); break;
case 2:sResult.Append(_T("<w:lvlJc w:val=\"right\" />")); break;
switch( m_nJustification )
{
case 0:sResult.Append(_T("<w:lvlJc w:val=\"left\" />")); break;
case 1:sResult.Append(_T("<w:lvlJc w:val=\"center\" />")); break;
case 2:sResult.Append(_T("<w:lvlJc w:val=\"right\" />")); break;
}
}
}
if( 1 == m_nNoRestart)
sResult.Append(_T("<w:lvlRestart w:val=\"0\"/>"));
if( 1 == m_nLegal)
sResult.Append(_T("<w:isLgl />"));
sResult.AppendFormat( _T("<w:lvlText w:val=\"%s\"/>"), GetLevelTextOOX() );
sResult.AppendFormat(_T("<w:numFmt w:val=\"%s\" />"), GetFormat(m_nNumberType) );
RENDER_OOX_INT( m_nPictureIndex, sResult, _T("w:lvlPicBulletId") )
RENDER_OOX_INT( m_nStart, sResult, _T("w:start") )
if( PROP_DEF != m_nFollow )
{
switch( m_nFollow )
if( 1 == m_nNoRestart)
sResult.Append(_T("<w:lvlRestart w:val=\"0\"/>"));
if( 1 == m_nLegal)
sResult.Append(_T("<w:isLgl />"));
sResult.AppendFormat( _T("<w:lvlText w:val=\"%s\"/>"), GetLevelTextOOX() );
sResult.AppendFormat(_T("<w:numFmt w:val=\"%s\" />"), GetFormat(m_nNumberType) );
RENDER_OOX_INT( m_nPictureIndex, sResult, _T("w:lvlPicBulletId") )
RENDER_OOX_INT( m_nStart, sResult, _T("w:start") )
if( PROP_DEF != m_nFollow )
{
case 0: sResult.Append( _T("<w:suff w:val=\"tab\" />") );break;
case 1: sResult.Append( _T("<w:suff w:val=\"space\" />") );break;
case 2: sResult.Append( _T("<w:suff w:val=\"nothing\" />") );break;
switch( m_nFollow )
{
case 0: sResult.Append( _T("<w:suff w:val=\"tab\" />") );break;
case 1: sResult.Append( _T("<w:suff w:val=\"space\" />") );break;
case 2: sResult.Append( _T("<w:suff w:val=\"nothing\" />") );break;
}
}
}
CString spPr;
CString sIndent;
if( PROP_DEF != m_nFirstIndent )
{
if( m_nFirstIndent >= 0 )
sIndent.AppendFormat( _T(" w:firstLine=\"%d\""), m_nFirstIndent );
else
sIndent.AppendFormat( _T(" w:hanging=\"%d\""), -m_nFirstIndent );
}
RENDER_OOX_INT_ATTRIBUTE( m_nIndent, sIndent, _T("w:left") )
RENDER_OOX_INT_ATTRIBUTE( m_nIndentStart, sIndent, _T("w:start") )
if( false == sIndent.IsEmpty() )
spPr.AppendFormat(_T("<w:ind %s/>"), sIndent);
CString spPr;
CString sIndent;
if( PROP_DEF != m_nFirstIndent )
{
if( m_nFirstIndent >= 0 )
sIndent.AppendFormat( _T(" w:firstLine=\"%d\""), m_nFirstIndent );
else
sIndent.AppendFormat( _T(" w:hanging=\"%d\""), -m_nFirstIndent );
}
RENDER_OOX_INT_ATTRIBUTE( m_nIndent, sIndent, _T("w:left") )
RENDER_OOX_INT_ATTRIBUTE( m_nIndentStart, sIndent, _T("w:start") )
if( false == sIndent.IsEmpty() )
spPr.AppendFormat(_T("<w:ind %s/>"), sIndent);
spPr.Append( m_oTabs.RenderToOOX( oRenderParameter ) );
spPr.Append( m_oTabs.RenderToOOX( oRenderParameter ) );
if( false == spPr.IsEmpty() )
sResult.AppendFormat(_T("<w:pPr>%s</w:pPr>"), spPr);
if( false == spPr.IsEmpty() )
sResult.AppendFormat(_T("<w:pPr>%s</w:pPr>"), spPr);
CString srPr;
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
srPr.Append( m_oCharProp.RenderToOOX(oNewParam) );
if( false == srPr.IsEmpty() )
sResult.AppendFormat(_T("<w:rPr>%s</w:rPr>"), srPr);
CString srPr;
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
srPr.Append( m_oCharProp.RenderToOOX(oNewParam) );
if( false == srPr.IsEmpty() )
sResult.AppendFormat(_T("<w:rPr>%s</w:rPr>"), srPr);
sResult.Append(_T("</w:lvl>"));
sResult.Append(_T("</w:lvl>"));
}
return sResult;
}
CString RtfListProperty::RenderToRtf(RenderParameter oRenderParameter)
......
......@@ -21,6 +21,7 @@ public: class ReaderState
public: RtfOldList m_oCurOldList;
//public: RtfSectionProperty m_oSectionProp;
public: ReaderStatePtr psave;
public: CStringA m_sCurText;
ReaderState()
{
m_nUD = 1;
......@@ -67,8 +68,6 @@ private: bool m_bStop;
private: int m_nSkipChars;
protected: int m_nCurGroups;
private: bool m_bSkip;
private: int m_nLeading;
public: bool m_bUseDoubleByte;
public: NFileWriter::CBufferedFileWriter* m_oFileWriter;
public: RtfAbstractReader()
......@@ -78,9 +77,7 @@ public: RtfAbstractReader()
m_bSkip = false;
m_nSkipChars = 0;
m_nCurGroups = 1;
m_bUseDoubleByte = true;
m_oFileWriter = NULL;
m_nLeading = PROP_DEF;
}
public: bool Parse(RtfDocument& oDocument, RtfReader& oReader )
{
......@@ -97,18 +94,18 @@ public: bool Parse(RtfDocument& oDocument, RtfReader& oReader )
switch (m_oTok.Type)
{
case RtfToken::GroupStart:
EndSHIFTJIS_CHARSET( oDocument, oReader );
ExecuteTextInternal2(oDocument, oReader, m_oTok.Key, m_nSkipChars);
PushState(oReader);
break;
case RtfToken::GroupEnd:
EndSHIFTJIS_CHARSET( oDocument, oReader );
ExecuteTextInternal2(oDocument, oReader, m_oTok.Key, m_nSkipChars);
PopState(oDocument, oReader);
break;
case RtfToken::Keyword:
EndSHIFTJIS_CHARSET( oDocument, oReader );
ExecuteTextInternal2(oDocument, oReader, m_oTok.Key, m_nSkipChars);
if( _T("u") == m_oTok.Key )
{
ExecuteText( oDocument, oReader, ExecuteTextInternal( oDocument, oReader, m_oTok.Key, m_oTok.HasParameter, m_oTok.Parameter, m_nSkipChars, m_bUseDoubleByte, &m_nLeading ) );
ExecuteText( oDocument, oReader, ExecuteTextInternal( oDocument, oReader, m_oTok.Key, m_oTok.HasParameter, m_oTok.Parameter, m_nSkipChars) );
break;
}
else
......@@ -128,11 +125,11 @@ public: bool Parse(RtfDocument& oDocument, RtfReader& oReader )
case RtfToken::Control:
if( m_oTok.Key == _T("42") )
m_bSkip = true;
if( m_oTok.Key == _T("39") )
ExecuteText( oDocument, oReader, ExecuteTextInternal( oDocument, oReader, m_oTok.Key, m_oTok.HasParameter, m_oTok.Parameter, m_nSkipChars, m_bUseDoubleByte, &m_nLeading ));
if( m_oTok.Key == _T("39") && true == m_oTok.HasParameter )
oReader.m_oState->m_sCurText.AppendChar( m_oTok.Parameter );
break;
case RtfToken::Text:
ExecuteText( oDocument, oReader, ExecuteTextInternal( oDocument, oReader, m_oTok.Key, m_oTok.HasParameter, m_oTok.Parameter, m_nSkipChars, m_bUseDoubleByte, &m_nLeading ));
oReader.m_oState->m_sCurText.Append( m_oTok.Key );
break;
}
if( false == m_bStop )
......@@ -204,15 +201,7 @@ public: virtual void ExitReader( RtfDocument& oDocument, RtfReader& oReade )
public: virtual void ExitReader2( RtfDocument& oDocument, RtfReader& oReader )
{
}
public: void EndSHIFTJIS_CHARSET( RtfDocument& oDocument, RtfReader& oReader )// 128 - SHIFTJIS_CHARSET; 932 - codepage
{
if( PROP_DEF != m_nLeading )
{
ExecuteText( oDocument, oReader, ExecuteTextInternal( oDocument, oReader, "39", true, m_nLeading, m_nSkipChars ) );
m_nLeading = PROP_DEF;
}
}
public: static CString ExecuteTextInternal( RtfDocument& oDocument, RtfReader& oReader, CStringA sKey, bool bHasPar, int nPar, int& nSkipChars, bool bUseDoubleByte = false, int* nLeading = NULL )
public: static CString ExecuteTextInternal( RtfDocument& oDocument, RtfReader& oReader, CStringA& sKey, bool bHasPar, int nPar, int& nSkipChars)
{
CString sResult;
......@@ -232,119 +221,27 @@ public: static CString ExecuteTextInternal( RtfDocument& oDocument, RtfReader& o
else
sCharString = sKey;
if( false == sCharString.IsEmpty() )
{
int nCodepage = -1;
// codepage todo associated fonts.
RtfFont oFont;
if( true == oDocument.m_oFontTable.GetFont( oReader.m_oState->m_oCharProp.m_nFont, oFont ) )
{
if( PROP_DEF != oFont.m_nCharset )
nCodepage = RtfUtility::CharsetToCodepage( oFont.m_nCharset );
else if( PROP_DEF != oFont.m_nCodePage )
nCodepage = oFont.m_nCodePage;
}
//
if( -1 == nCodepage && RtfDocumentProperty::cp_none != oDocument.m_oProperty.m_eCodePage )
{
switch ( oDocument.m_oProperty.m_eCodePage )
{
case RtfDocumentProperty::cp_ansi:
{
if( PROP_DEF != oDocument.m_oProperty.m_nAnsiCodePage )
nCodepage = oDocument.m_oProperty.m_nAnsiCodePage;
else
nCodepage = CP_ACP;
break;
}
case RtfDocumentProperty::cp_mac: nCodepage = CP_MACCP;break;
case RtfDocumentProperty::cp_pc: nCodepage = 437;break;
case RtfDocumentProperty::cp_pca: nCodepage = 850;break;
}
}
// ANSI
if( -1 == nCodepage )
nCodepage = CP_ACP;
if( 932 == nCodepage && true == bUseDoubleByte )// 128 - SHIFTJIS_CHARSET; 932 - codepage
{
int nStartIndex = 0;
if( NULL != nLeading && PROP_DEF != *nLeading )
{
int nTralingChar = sCharString[0];
nStartIndex = 1;
CStringA sMultyChar;
sMultyChar.AppendChar( *nLeading );
sMultyChar.AppendChar( nTralingChar );
CString sTempRes;
if( true == Convert::MultybyteToUnicode( sMultyChar, sTempRes, nCodepage ) )
{
sResult.Append( sTempRes );
*nLeading = PROP_DEF;
}
else
{
CStringA sFirstChar;
sFirstChar.AppendChar( *nLeading );
sTempRes = _T("");
Convert::MultybyteToUnicode( sFirstChar, sTempRes, CP_ACP );
sResult.Append( sTempRes );
*nLeading = nTralingChar;
}
}
int nTargetLen = sCharString.GetLength();
if( nTargetLen > nStartIndex )
{
int nCurLeading = *nLeading;
for( int i = nStartIndex; i < nTargetLen; i++ )
{
if( PROP_DEF == nCurLeading )
nCurLeading = sCharString[ i ];
else
{
int nFirstChar = nCurLeading;
int nSecondChar = sCharString[ i ];
CStringA sMultyChar;
sMultyChar.AppendChar( nFirstChar );
sMultyChar.AppendChar( nSecondChar );
CString sTempRes;
if( true == Convert::MultybyteToUnicode( sMultyChar, sTempRes, nCodepage ) )
{
sResult.Append( sTempRes );
nCurLeading = PROP_DEF;
}
else
{
CStringA sFirstChar;
sFirstChar.AppendChar( nFirstChar );
sTempRes = _T("");
Convert::MultybyteToUnicode( sFirstChar, sTempRes, CP_ACP );
sResult.Append( sTempRes );
nCurLeading = nSecondChar;
}
}
}
*nLeading = nCurLeading;
}
sResult = ExecuteTextInternalCodePage(sCharString, oDocument, oReader);
}
ExecuteTextInternalSkipChars(sResult, oReader, sKey, nSkipChars);
return sResult;
}
}
else
{
int nLengthW ;
nLengthW = MultiByteToWideChar(nCodepage, 0, sCharString, -1, NULL, NULL);
MultiByteToWideChar(nCodepage, 0, sCharString, -1, sResult.GetBuffer( nLengthW ), nLengthW);
sResult.ReleaseBuffer();
//sResult = sKey;
}
public: void ExecuteTextInternal2( RtfDocument& oDocument, RtfReader& oReader, CStringA& sKey, int& nSkipChars)
{
if(oReader.m_oState->m_sCurText.GetLength() > 0)
{
CString sResult = ExecuteTextInternalCodePage(oReader.m_oState->m_sCurText, oDocument, oReader);
oReader.m_oState->m_sCurText.Empty();
if(sResult.GetLength() > 0)
{
ExecuteTextInternalSkipChars(sResult, oReader, CStringA(""), nSkipChars);
ExecuteText( oDocument, oReader, sResult);
}
}
}
public: static void ExecuteTextInternalSkipChars(CString & sResult, RtfReader& oReader, CStringA& sKey, int& nSkipChars)
{
//
if( nSkipChars > 0 )
{
......@@ -365,6 +262,50 @@ public: static CString ExecuteTextInternal( RtfDocument& oDocument, RtfReader& o
// m_nSkipChars \ucN
nSkipChars = oReader.m_oState->m_nUD;
}
}
public: static CString ExecuteTextInternalCodePage( CStringA& sCharString, RtfDocument& oDocument, RtfReader& oReader)
{
CString sResult;
if( false == sCharString.IsEmpty() )
{
int nCodepage = -1;
// codepage todo associated fonts.
RtfFont oFont;
if( true == oDocument.m_oFontTable.GetFont( oReader.m_oState->m_oCharProp.m_nFont, oFont ) )
{
if( PROP_DEF != oFont.m_nCharset )
nCodepage = RtfUtility::CharsetToCodepage( oFont.m_nCharset );
else if( PROP_DEF != oFont.m_nCodePage )
nCodepage = oFont.m_nCodePage;
}
//
if( -1 == nCodepage && RtfDocumentProperty::cp_none != oDocument.m_oProperty.m_eCodePage )
{
switch ( oDocument.m_oProperty.m_eCodePage )
{
case RtfDocumentProperty::cp_ansi:
{
if( PROP_DEF != oDocument.m_oProperty.m_nAnsiCodePage )
nCodepage = oDocument.m_oProperty.m_nAnsiCodePage;
else
nCodepage = CP_ACP;
break;
}
case RtfDocumentProperty::cp_mac: nCodepage = CP_MACCP;break;
case RtfDocumentProperty::cp_pc: nCodepage = 437;break;
case RtfDocumentProperty::cp_pca: nCodepage = 850;break;
}
}
// ANSI
if( -1 == nCodepage )
nCodepage = CP_ACP;
int nLengthW ;
nLengthW = MultiByteToWideChar(nCodepage, 0, sCharString, -1, NULL, NULL);
MultiByteToWideChar(nCodepage, 0, sCharString, -1, sResult.GetBuffer( nLengthW ), nLengthW);
sResult.ReleaseBuffer();
//sResult = sKey;
}
return sResult;
}
};
......
......@@ -253,6 +253,8 @@ CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter)
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowWidth}{\\sv %d}}"),m_nLineEndArrowWidth );
if( PROP_DEF != m_nLineEndArrowLength )
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowLength}{\\sv %d}}"),m_nLineEndArrowLength );
if( PROP_DEF != m_nLineWidth )
sResult.AppendFormat( _T("{\\sp{\\sn lineWidth}{\\sv %d}}"),m_nLineWidth );
//pWrapPolygonVertices Points of the text wrap polygon.
int nWrapPointCount = (int)m_aWrapPoints.GetCount();
......@@ -528,7 +530,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != nWidth && PROP_DEF != nHeight )
sResult.AppendFormat( _T("<wp:extent cx=\"%d\" cy=\"%d\"/>"), RtfUtility::Twips2Emu( nWidth ), RtfUtility::Twips2Emu( nHeight ) );
if( PROP_DEF != m_nWrapType )
if( PROP_DEF != m_nWrapType && 3 != m_nWrapType)
{
sResult.Append( _T("<") );
CString sTag;
......@@ -1006,8 +1008,10 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
sResult.Append( _T(" stroked=\"t\"") );
else
sResult.Append( _T(" stroked=\"f\"") );
if(PROP_DEF != m_nLineWidth)
sResult.AppendFormat( _T(" strokeweight=\"%fpt\""), RtfUtility::Emu2Pt(m_nLineWidth) );
sResult.Append( _T(">") );
if( PROP_DEF != m_nWrapType )
if( PROP_DEF != m_nWrapType && 3 != m_nWrapType)
{
sResult.Append( _T("<w10:wrap"));
switch( m_nWrapType )
......@@ -1085,9 +1089,9 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
case 2: sStroke.Append( _T(" endarrowlength=\"long\"") ); break;
}
}
if( PROP_DEF != m_nLineStartArrowWidth )
if( PROP_DEF != m_nLineEndArrowWidth )
{
switch( m_nLineStartArrowWidth )
switch( m_nLineEndArrowWidth )
{
case 0: sStroke.Append( _T(" endarrowwidth=\"narrow\"") ); break;
case 1: sStroke.Append( _T(" endarrowwidth=\"medium\"") ); break;
......
......@@ -119,6 +119,7 @@ public: int m_nLineStartArrowWidth; //lineStartArrowWidth Start arrow width:
public: int m_nLineStartArrowLength; //lineStartArrowLength Start arrow length:
public: int m_nLineEndArrowWidth; //lineEndArrowWidth End arrow width (for acceptable values see meaning for lineStartArrowWidth).
public: int m_nLineEndArrowLength; //lineEndArrowLength End arrow length (for acceptable values see meaning for lineStartArrowLength).
public: int m_nLineWidth; //lineWidth Width of the line.
//pWrapPolygonVertices Points of the text wrap polygon.
public: CAtlArray< int > m_aWrapPoints;
......@@ -342,6 +343,7 @@ public: void SetDefault()
DEFAULT_PROPERTY( m_nLineEndArrow )
DEFAULT_PROPERTY( m_nLineEndArrowWidth )
DEFAULT_PROPERTY( m_nLineEndArrowLength )
DEFAULT_PROPERTY( m_nLineWidth )
m_aTextItems = TextItemContainerPtr();
m_oPicture = RtfPicturePtr();
......
......@@ -46,7 +46,13 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
oXmlWriter.WriteString( m_oProperty.RenderToOOX(oNewParam) );
CString sRowProp = m_oProperty.RenderToOOX(oNewParam);
if( false == sRowProp.IsEmpty() )
{
CString sXml;
sXml.Format(_T("<w:trPr>%s</w:trPr>"), sRowProp);
oXmlWriter.WriteString(sXml);
}
for(int i = 0 ; i < (int)m_aArray.GetCount(); i++)
{
oXmlWriter.WriteString( m_aArray[i]->RenderToOOX(oNewParam) );
......
......@@ -467,8 +467,8 @@ public: static int GetFolderSize( CString sFolder )
public: static int CharsetToCodepage( int nCharset )
{
CHARSETINFO Info;
DWORD dwAcp = nCharset;
if( TRUE == TranslateCharsetInfo((DWORD*)dwAcp, &Info, TCI_SRCCHARSET) )
DWORD* dwAcp = (DWORD*)nCharset;
if( TRUE == TranslateCharsetInfo(dwAcp, &Info, TCI_SRCCHARSET) )
return Info.ciACP;
for( int i = 0; i < nCodePagesLength; i++ )
......@@ -479,8 +479,8 @@ public: static int CharsetToCodepage( int nCharset )
public: static int CodepageToCharset( int nCodepage )
{
CHARSETINFO Info;
DWORD dwAcp = nCodepage;
if( TRUE == TranslateCharsetInfo((DWORD*)dwAcp, &Info, TCI_SRCCODEPAGE) )
DWORD* dwAcp = (DWORD*)nCodepage;
if( TRUE == TranslateCharsetInfo(dwAcp, &Info, TCI_SRCCODEPAGE) )
return Info.ciCharset;
for( int i = 0; i < nCodePagesLength; i++ )
......
......@@ -2,6 +2,6 @@
//1
//0
//0
//38
#define INTVER 1,0,0,38
#define STRVER "1,0,0,38\0"
//42
#define INTVER 1,0,0,42
#define STRVER "1,0,0,42\0"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment