Commit c862e534 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

RtfFile фиксинг по результатам тестирования

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@62215 954022d7-b5bf-4e40-9824-e11837661b57
parent a3cb7a27
......@@ -23,14 +23,14 @@ public:
{
case OOX::et_m_mathFont:
{
OOX::Logic::CMathFont* pFont = static_cast<OOX::Logic::CMathFont*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CMathFont* pFont = dynamic_cast<OOX::Logic::CMathFont*>(m_ooxMathPr->m_arrItems[i]);
RtfFont oFont;
if (( pFont && pFont->m_val.IsInit()) && (true == oParam.oRtf->m_oFontTable.GetFont(pFont->m_val.get2(), oFont)))
oParam.oRtf->m_oMathProp.mmathFont = oFont.m_nID;
}break;
case OOX::et_m_brkBin:
{
OOX::Logic::CBrkBin* pBrkBin = static_cast<OOX::Logic::CBrkBin*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CBrkBin* pBrkBin = dynamic_cast<OOX::Logic::CBrkBin*>(m_ooxMathPr->m_arrItems[i]);
if ((pBrkBin) && (pBrkBin->m_val.IsInit()))
{
switch(pBrkBin->m_val->GetValue())
......@@ -45,7 +45,7 @@ public:
}break;
case OOX::et_m_brkBinSub:
{
OOX::Logic::CBrkBinSub* pBrkBinSub = static_cast<OOX::Logic::CBrkBinSub*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CBrkBinSub* pBrkBinSub = dynamic_cast<OOX::Logic::CBrkBinSub*>(m_ooxMathPr->m_arrItems[i]);
if ((pBrkBinSub) && (pBrkBinSub->m_val.IsInit()))
{
switch(pBrkBinSub->m_val->GetValue())
......@@ -58,7 +58,7 @@ public:
}break;
case OOX::et_m_defJc:
{
OOX::Logic::CDefJc* pDefJc = static_cast<OOX::Logic::CDefJc*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CDefJc* pDefJc = dynamic_cast<OOX::Logic::CDefJc*>(m_ooxMathPr->m_arrItems[i]);
if ((pDefJc) && (pDefJc->m_val.IsInit()))
{
switch(pDefJc->m_val->GetValue())
......@@ -73,37 +73,37 @@ public:
}break;
case OOX::et_m_dispDef:
{
OOX::Logic::CDispDef* pDispDef = static_cast<OOX::Logic::CDispDef*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CDispDef* pDispDef = dynamic_cast<OOX::Logic::CDispDef*>(m_ooxMathPr->m_arrItems[i]);
if ((pDispDef) && (pDispDef->m_val.IsInit()))
oParam.oRtf->m_oMathProp.mdispDef = pDispDef->m_val->ToBool();
}break;
case OOX::et_m_interSp:
{
OOX::Logic::CInterSp* pInterSp = static_cast<OOX::Logic::CInterSp*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CInterSp* pInterSp = dynamic_cast<OOX::Logic::CInterSp*>(m_ooxMathPr->m_arrItems[i]);
if ((pInterSp) && (pInterSp->m_val.IsInit()))
oParam.oRtf->m_oMathProp.minterSp = pInterSp->m_val->ToTwips(); //todooo
}break;
case OOX::et_m_intraSp:
{
OOX::Logic::CIntraSp* pIntraSp = static_cast<OOX::Logic::CIntraSp*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CIntraSp* pIntraSp = dynamic_cast<OOX::Logic::CIntraSp*>(m_ooxMathPr->m_arrItems[i]);
if ((pIntraSp) && (pIntraSp->m_val.IsInit()))
oParam.oRtf->m_oMathProp.mintraSp = pIntraSp->m_val->ToTwips(); //todooo
}break;
case OOX::et_m_lMargin:
{
OOX::Logic::CLMargin* pMargin = static_cast<OOX::Logic::CLMargin*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CLMargin* pMargin = dynamic_cast<OOX::Logic::CLMargin*>(m_ooxMathPr->m_arrItems[i]);
if ((pMargin) && (pMargin->m_val.IsInit()))
oParam.oRtf->m_oMathProp.mlMargin = pMargin->m_val->ToTwips(); //todooo
}break;
case OOX::et_m_rMargin:
{
OOX::Logic::CRMargin* pMargin = static_cast<OOX::Logic::CRMargin*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CRMargin* pMargin = dynamic_cast<OOX::Logic::CRMargin*>(m_ooxMathPr->m_arrItems[i]);
if ((pMargin) && (pMargin->m_val.IsInit()))
oParam.oRtf->m_oMathProp.mrMargin = pMargin->m_val->ToTwips(); //todooo
}break;
case OOX::et_m_naryLim:
{
OOX::Logic::CNaryLim* pNaryLim = static_cast<OOX::Logic::CNaryLim*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CNaryLim* pNaryLim = dynamic_cast<OOX::Logic::CNaryLim*>(m_ooxMathPr->m_arrItems[i]);
if ( (pNaryLim) && (pNaryLim->m_val.IsInit()) )
{
if( pNaryLim->m_val->GetValue() == SimpleTypes::limLocSubSup) oParam.oRtf->m_oMathProp.mnaryLim = 0;
......@@ -112,31 +112,31 @@ public:
}break;
case OOX::et_m_postSp:
{
OOX::Logic::CPostSp* pPostSp = static_cast<OOX::Logic::CPostSp*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CPostSp* pPostSp = dynamic_cast<OOX::Logic::CPostSp*>(m_ooxMathPr->m_arrItems[i]);
if ((pPostSp) && (pPostSp->m_val.IsInit()))
oParam.oRtf->m_oMathProp.mpostSp = pPostSp->m_val->ToTwips(); //todooo
}break;
case OOX::et_m_preSp:
{
OOX::Logic::CPreSp* pPreSp = static_cast<OOX::Logic::CPreSp*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CPreSp* pPreSp = dynamic_cast<OOX::Logic::CPreSp*>(m_ooxMathPr->m_arrItems[i]);
if ((pPreSp) && (pPreSp->m_val.IsInit()))
oParam.oRtf->m_oMathProp.mpreSp = pPreSp->m_val->ToTwips(); //todooo
}break;
case OOX::et_m_smallFrac:
{
OOX::Logic::CSmallFrac* pSmallFrac = static_cast<OOX::Logic::CSmallFrac*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CSmallFrac* pSmallFrac = dynamic_cast<OOX::Logic::CSmallFrac*>(m_ooxMathPr->m_arrItems[i]);
if ((pSmallFrac) && (pSmallFrac->m_val.IsInit()))
oParam.oRtf->m_oMathProp.msmallFrac = pSmallFrac->m_val->ToBool();
}break;
case OOX::et_m_wrapIndent:
{
OOX::Logic::CWrapIndent* pWrapIndent = static_cast<OOX::Logic::CWrapIndent*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CWrapIndent* pWrapIndent = dynamic_cast<OOX::Logic::CWrapIndent*>(m_ooxMathPr->m_arrItems[i]);
if ((pWrapIndent) && (pWrapIndent->m_val.IsInit()))
oParam.oRtf->m_oMathProp.mwrapIndent = pWrapIndent->m_val->ToTwips(); //todooo
}break;
case OOX::et_m_wrapRight:
{
OOX::Logic::CWrapRight* pWrapRight = static_cast<OOX::Logic::CWrapRight*>(m_ooxMathPr->m_arrItems[i]);
OOX::Logic::CWrapRight* pWrapRight = dynamic_cast<OOX::Logic::CWrapRight*>(m_ooxMathPr->m_arrItems[i]);
if ((pWrapRight) && (pWrapRight->m_val.IsInit()))
oParam.oRtf->m_oMathProp.mwrapRight = pWrapRight->m_val->ToBool(); //todooo
}break;
......
......@@ -73,7 +73,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
{
oParam.oReader->m_nCurItap ++ ;
RtfTablePtr oNewTabel( new RtfTable() );
OOX::Logic::CTbl * pTbl = static_cast<OOX::Logic::CTbl*>(m_ooxElement->m_arrItems[i]);
OOX::Logic::CTbl * pTbl = dynamic_cast<OOX::Logic::CTbl*>(m_ooxElement->m_arrItems[i]);
OOXTableReader oTableReader(pTbl);
oTableReader.Parse( oParam, *oNewTabel);
......@@ -82,13 +82,13 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
}break;
case OOX::et_w_r:
{
OOX::Logic::CRun * pRun = static_cast<OOX::Logic::CRun*>(m_ooxElement->m_arrItems[i]);
OOX::Logic::CRun * pRun = dynamic_cast<OOX::Logic::CRun*>(m_ooxElement->m_arrItems[i]);
OOXRunReader m_oRunReader(pRun);
m_oRunReader.Parse ( oParam, oOutputParagraph, poExternalStyle );
}break;
case OOX::et_w_fldSimple:
{
OOX::Logic::CFldSimple * pFldSimple = static_cast<OOX::Logic::CFldSimple*>(m_ooxElement->m_arrItems[i]);
OOX::Logic::CFldSimple * pFldSimple = dynamic_cast<OOX::Logic::CFldSimple*>(m_ooxElement->m_arrItems[i]);
RtfFieldPtr oCurField( new RtfField() );
oCurField->m_oInsert = TextItemContainerPtr( new TextItemContainer() );
......@@ -129,7 +129,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
}break;
case OOX::et_w_hyperlink:
{
OOX::Logic::CHyperlink * pHyperlink = static_cast<OOX::Logic::CHyperlink*>(m_ooxElement->m_arrItems[i]);
OOX::Logic::CHyperlink * pHyperlink = dynamic_cast<OOX::Logic::CHyperlink*>(m_ooxElement->m_arrItems[i]);
if( pHyperlink->m_oId.IsInit() )
{
......@@ -235,7 +235,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
}break;
case OOX::et_w_bookmarkStart:
{
OOX::Logic::CBookmarkStart * pBookmarkStart = static_cast<OOX::Logic::CBookmarkStart*>(m_ooxElement->m_arrItems[i]);
OOX::Logic::CBookmarkStart * pBookmarkStart = dynamic_cast<OOX::Logic::CBookmarkStart*>(m_ooxElement->m_arrItems[i]);
RtfBookmarkStartPtr oNewBookmark( new RtfBookmarkStart() );
oNewBookmark->m_sName = pBookmarkStart->m_sName.IsInit() ? pBookmarkStart->m_sName.get2() : _T("");
......@@ -254,7 +254,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
}break;
case OOX::et_w_bookmarkEnd:
{
OOX::Logic::CBookmarkEnd * pBookmarkEnd = static_cast<OOX::Logic::CBookmarkEnd*>(m_ooxElement->m_arrItems[i]);
OOX::Logic::CBookmarkEnd * pBookmarkEnd = dynamic_cast<OOX::Logic::CBookmarkEnd*>(m_ooxElement->m_arrItems[i]);
RtfBookmarkEndPtr oNewBookmark( new RtfBookmarkEnd() );
//oNewBookmark->m_sName = pBookmarkEnd->;
......@@ -269,11 +269,11 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
}break;
case OOX::et_w_smartTag:
{
OOX::Logic::CSmartTag * pSmartTag = static_cast<OOX::Logic::CSmartTag*>(m_ooxElement->m_arrItems[i]);
OOX::Logic::CSmartTag * pSmartTag = dynamic_cast<OOX::Logic::CSmartTag*>(m_ooxElement->m_arrItems[i]);
for (long i = 0 ; i < pSmartTag->m_arrItems.size(); i++)
{
OOX::Logic::CRun * pRun = static_cast<OOX::Logic::CRun*>(pSmartTag->m_arrItems[i]);
OOX::Logic::CRun * pRun = dynamic_cast<OOX::Logic::CRun*>(pSmartTag->m_arrItems[i]);
if (pRun == NULL) continue;
OOXRunReader m_oRunReader(pRun);
......@@ -282,7 +282,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
}break;
case OOX::et_m_oMathPara:
{
OOX::Logic::COMathPara * pMathPara = static_cast<OOX::Logic::COMathPara*>(m_ooxElement->m_arrItems[i]);
OOX::Logic::COMathPara * pMathPara = dynamic_cast<OOX::Logic::COMathPara*>(m_ooxElement->m_arrItems[i]);
RtfMathPtr oNewMath( new RtfMath() );
oNewMath->SetOOXName(_T("m:oMathPara") );
......@@ -293,7 +293,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
}break;
case OOX::et_w_sdt:
{
OOX::Logic::CSdt * pSdt = static_cast<OOX::Logic::CSdt*>(m_ooxElement->m_arrItems[i]);
OOX::Logic::CSdt * pSdt = dynamic_cast<OOX::Logic::CSdt*>(m_ooxElement->m_arrItems[i]);
if( pSdt->m_oSdtEndPr.IsInit() )
{
//todo
......
......@@ -21,7 +21,7 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
CString srId = image_data->m_oId.IsInit() ? image_data->m_oId.get2() : _T("") ;
if (srId.length() < 1)
if (srId.GetLength() < 1)
srId = image_data->m_rId.IsInit() ? image_data->m_rId->GetValue() : _T("") ;
smart_ptr<OOX::File> oFile = oParam.oDocx->GetDocument()->Find(srId);
......@@ -99,7 +99,6 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
{
OOX::VmlWord::CWrap *wrap = dynamic_cast<OOX::VmlWord::CWrap*>(m_arrElement->m_arrItems[i]);
wrap->m_oSide->GetValue();
if (wrap->m_oType.IsInit())
{
switch(wrap->m_oType->GetValue())
......
......@@ -39,7 +39,7 @@ public:
{
case OOX::et_w_p:
{
OOX::Logic::CParagraph * pParagraph = static_cast<OOX::Logic::CParagraph*>(m_ooxTableCell->m_arrItems[i]);
OOX::Logic::CParagraph * pParagraph = dynamic_cast<OOX::Logic::CParagraph*>(m_ooxTableCell->m_arrItems[i]);
RtfParagraphPtr oNewParagraph( new RtfParagraph() );
//применяем к новому параграфу default property
......@@ -60,7 +60,7 @@ public:
}break;
case OOX::et_w_tbl:
{
OOX::Logic::CTbl * pTbl = static_cast<OOX::Logic::CTbl*>(m_ooxTableCell->m_arrItems[i]);
OOX::Logic::CTbl * pTbl = dynamic_cast<OOX::Logic::CTbl*>(m_ooxTableCell->m_arrItems[i]);
oParam.oReader->m_nCurItap ++ ;
RtfTablePtr oNewTabel( new RtfTable() );
......
......@@ -24,7 +24,7 @@ public:
{
case OOX::et_w_p:
{
OOX::Logic::CParagraph * pParagraph = static_cast<OOX::Logic::CParagraph*>(ooxElement);
OOX::Logic::CParagraph * pParagraph = dynamic_cast<OOX::Logic::CParagraph*>(ooxElement);
bool bStartNewSection = false;
OOXParagraphReader m_oParagraphReader(pParagraph);
RtfParagraphPtr oNewParagraph( new RtfParagraph() );
......@@ -49,7 +49,7 @@ public:
}break;
case OOX::et_w_tbl:
{
OOX::Logic::CTbl * pTbl = static_cast<OOX::Logic::CTbl*>(ooxElement);
OOX::Logic::CTbl * pTbl = dynamic_cast<OOX::Logic::CTbl*>(ooxElement);
RtfTablePtr oNewTable( new RtfTable() );
OOXTableReader oTableReader(pTbl);
......@@ -62,7 +62,7 @@ public:
}break;
case OOX::et_w_sdt:
{
OOX::Logic::CSdt * pSdt = static_cast<OOX::Logic::CSdt*>(ooxElement);
OOX::Logic::CSdt * pSdt = dynamic_cast<OOX::Logic::CSdt*>(ooxElement);
if( pSdt->m_oSdtEndPr.IsInit())
{
//todo
......
......@@ -66,6 +66,11 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
{
RtfDocument* poRtfDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
CString sFontName = m_sName;
if ((sFontName.GetLength() > 0 ) && (sFontName[0] == 0x00b9 && m_sAltName.GetLength() > 0) )
{
sFontName = m_sAltName;
}
if( _T("") == sFontName )
{
if( PROP_DEF != poRtfDocument->m_oProperty.m_nDeffFont )
......@@ -148,8 +153,31 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
RtfFont oCurFont;
if( true == poRtfDocument->m_oFontTable.GetFont(m_nID,oCurFont) )
{
sResult.AppendFormat(_T("<w:rFonts w:ascii=\"%ls\" w:eastAsia=\"%ls\" w:hAnsi=\"%ls\" w:cs=\"%ls\"/>"),
sFontName.GetBuffer(), sFontName.GetBuffer(), sFontName.GetBuffer(), sFontName.GetBuffer());
CString sHint;
switch(m_nCharset)
{
case 128://Japanese
case 129://Korean
case 130://Korean
case 134://China
case 136://China
case 163://Vietnamese
case 222://Thai
{
sHint = _T(" w:hint=\"eastAsia\"/>");
}break;
case 177://Hebrew
case 178://Arabic
case 179://Arabic
case 180://Arabic
case 181://Hebrew
{
sHint = _T(" w:hint=\"cs\"/>");
}break;
//?? нужно ли описывать default??? todooo
}
sResult.AppendFormat(_T("<w:rFonts w:ascii=\"%ls\" w:eastAsia=\"%ls\" w:hAnsi=\"%ls\" w:cs=\"%ls\"%ls/>"),
sFontName.GetBuffer(), sFontName.GetBuffer(), sFontName.GetBuffer(), sFontName.GetBuffer(), sHint);
}
}
}
......
......@@ -123,14 +123,15 @@ public:
m_nHyphenationRight = PROP_DEF;
m_nZoom = 100;
//вычисляем стандартный default ansi codepage для системы
#if defined (_WIN32) || defined(_WIN64)
TCHAR codepage[7];
if( GetLocaleInfo( LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, codepage, 6 ) != 0)
m_nAnsiCodePage = _ttoi(codepage);
else
#endif
m_nAnsiCodePage = CP_ACP;
// //вычисляем стандартный default ansi codepage для системы
//#if defined (_WIN32) || defined(_WIN64)
// TCHAR codepage[7];
// if( GetLocaleInfo( LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, codepage, 6 ) != 0)
// m_nAnsiCodePage = _ttoi(codepage);
// else
// #endif
// ???? тут локаль где стоит конвертилка будет и тока под виндой
m_nAnsiCodePage = CP_ACP;
m_bDorderSurroundHeader = PROP_DEF;
m_bDorderSurroundFotter = PROP_DEF;
......
......@@ -364,7 +364,6 @@ public:
CFile file;
if (file.CreateFile(sFilename) != S_OK) return;
DWORD dwBytesWritten;
file.WriteFile(pbData ,nLength);
file.CloseFile();
}
......@@ -459,7 +458,7 @@ public:
if( TRUE == TranslateCharsetInfo(dwAcp, &Info, TCI_SRCCHARSET) )
return Info.ciACP;
int CodePagesLength = sizeof( aCodePages ) / ( sizeof( int ) );
int nCodePagesLength = sizeof( aCodePages ) / ( sizeof( int ) );
for( int i = 0; i < nCodePagesLength; i++ )
if( aCodePages[i][0] == nCharset )
return aCodePages[i][1];
......
......@@ -91,17 +91,6 @@ BEGIN
END
IDR_ASCOFFICERTFFILE REGISTRY "ASCOfficeRtfFile.rgs"
////////////////////////////////////////////////////////////////////////////
//
// DOCX xml
//
IDR_APP XML "..\\Resource\\app.xml"
IDR_CORE XML "..\\Resource\\core.xml"
IDR_FONT_TABLE XML "..\\Resource\\fontTable.xml"
IDR_STYLES XML "..\\Resource\\styles.xml"
IDR_THEME XML "..\\Resource\\theme1.xml"
IDR_SETTINGS XML "..\\Resource\\settings.xml"
#endif
......
......@@ -2,6 +2,6 @@
//1
//0
//1
//51
#define INTVER 1,0,1,51
#define STRVER "1,0,1,51\0"
//52
#define INTVER 1,0,1,52
#define STRVER "1,0,1,52\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