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

PPTFormat

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@65542 954022d7-b5bf-4e40-9824-e11837661b57
parent f76daec9
......@@ -230,7 +230,7 @@ void CTextPFRun_ppt::LoadFromStream(POLE::Stream* pStream, bool bIsIndentation)
{
unsigned short utf16 = (unsigned short)StreamUtils::ReadWORD(pStream);
if (utf16 !=0x04)
if (utf16 > 0x0013)
{
if (sizeof(wchar_t) == 2)
{
......@@ -249,8 +249,8 @@ void CTextPFRun_ppt::LoadFromStream(POLE::Stream* pStream, bool bIsIndentation)
{
m_oRun.bulletFontRef = StreamUtils::ReadWORD(pStream);
//if ((bulletFlag & 0x0F) && !(0x02 == (bulletFlag & 0x02)))
// m_oRun.bulletFontRef.reset();
if ((bulletFlag & 0x0F) && !(0x02 == (bulletFlag & 0x02)))
m_oRun.bulletFontRef.reset();
}
if (bulletSize_)
{
......
......@@ -232,6 +232,8 @@ public:
class CMetaFileBuffer
{
public:
bool m_bIsCompressed;
bool m_bIsValid;
CString m_sExtension;
private:
......@@ -244,6 +246,7 @@ private:
public:
CMetaFileBuffer()
{
m_bIsCompressed = false;
m_bIsValid = false;
m_pMetaHeader = NULL;
......@@ -256,6 +259,10 @@ public:
{
RELEASEARRAYOBJECTS(m_pMetaHeader);
RELEASEARRAYOBJECTS(m_pMetaFile);
if (m_bIsCompressed)
RELEASEARRAYOBJECTS(m_pMetaFile);
m_bIsCompressed = false;
}
void SetHeader(BYTE* pHeader, LONG lSize)
......@@ -266,7 +273,8 @@ public:
void SetData(BYTE* pCompress, LONG lCompressSize, LONG lUncompressSize, bool bIsCompressed)
{
if (!bIsCompressed)
m_bIsCompressed = bIsCompressed;
if (!m_bIsCompressed)
{
m_pMetaFile = pCompress;
m_lMetaFileSize = lUncompressSize;
......@@ -279,11 +287,15 @@ public:
if (bRes)
{
m_lMetaFileSize = (LONG)lSize;
m_bIsCompressed = true;
}
else
{
RELEASEARRAYOBJECTS(m_pMetaFile);
m_lMetaFileSize = 0;
m_pMetaFile = pCompress;
m_lMetaFileSize = lUncompressSize;
m_bIsCompressed = false;
}
}
}
......
......@@ -42,9 +42,8 @@ void CRecordOfficeArtBlip::ReadFromStream(SRecordHeader & oHeader, POLE::Stream*
BYTE* pData = new BYTE[oHeader.RecLen - lOffset];
pStream->read(pData, oHeader.RecLen - lOffset);
oMetaFile.SetData(pData, oMetaHeader.cbSave, oMetaHeader.cbSize, 0 == oMetaHeader.compression);
oMetaFile.SetData(pData, oMetaHeader.cbSave, oMetaHeader.cbSize, (bool)(oMetaHeader.compression != 0xFE) );
if (0 == oMetaHeader.compression) RELEASEARRAYOBJECTS(pData);
}break;
case RECORD_TYPE_ESCHER_BLIP_WMF:
{
......@@ -72,12 +71,10 @@ void CRecordOfficeArtBlip::ReadFromStream(SRecordHeader & oHeader, POLE::Stream*
BYTE* pData = new BYTE[oHeader.RecLen - lOffset];
pStream->read(pData, oHeader.RecLen - lOffset);
oMetaFile.SetData(pData, oMetaHeader.cbSave,
oMetaHeader.cbSize, 0 == oMetaHeader.compression);
oMetaFile.SetData(pData, oMetaHeader.cbSave, oMetaHeader.cbSize, (bool)(oMetaHeader.compression != 0xFE) );
if (0 == oMetaHeader.compression) RELEASEARRAYOBJECTS(pData);
}break;
case RECORD_TYPE_ESCHER_BLIP_PICT:
case RECORD_TYPE_ESCHER_BLIP_PICT://Medwoche.ppt
{
if (0x0542 == oHeader.RecInstance) lOffset = 16;
else if (0x0543 == oHeader.RecInstance) lOffset = 32;
......@@ -90,21 +87,23 @@ void CRecordOfficeArtBlip::ReadFromStream(SRecordHeader & oHeader, POLE::Stream*
CMetaHeader oMetaHeader;
oMetaHeader.FromStream(pStream);
Gdiplus::WmfPlaceableFileHeader oWmfHeader;
oMetaHeader.ToWMFHeader(&oWmfHeader);
LONG lLenHeader = 22;
BYTE* pMetaHeader = new BYTE[lLenHeader];
memcpy(pMetaHeader, (void*)(&oWmfHeader), lLenHeader);
//TODOOO mac pict !!
oMetaFile.SetHeader(pMetaHeader, lLenHeader);
//Gdiplus::WmfPlaceableFileHeader oWmfHeader;
//oMetaHeader.ToWMFHeader(&oWmfHeader);
//LONG lLenHeader = 22;
//BYTE* pMetaHeader = new BYTE[lLenHeader];
//memcpy(pMetaHeader, (void*)(&oWmfHeader), lLenHeader);
//oMetaFile.SetHeader(pMetaHeader, lLenHeader);
BYTE* pData = new BYTE[oHeader.RecLen - lOffset];
pStream->read(pData, oHeader.RecLen - lOffset);
oMetaFile.SetData(pData, oMetaHeader.cbSave, oMetaHeader.cbSize, 0 == oMetaHeader.compression);
if (0 == oMetaHeader.compression) RELEASEARRAYOBJECTS(pData);
oMetaFile.SetData(pData, oMetaHeader.cbSave, oMetaHeader.cbSize, (bool)(oMetaHeader.compression != 0xFE) );
}break;
case RECORD_TYPE_ESCHER_BLIP_JPEG:
{
......
......@@ -36,6 +36,9 @@ public:
std::vector<CRecordShapeContainer*> oArrayShapes;
GetRecordsByType(&oArrayShapes, false, false);
if (!oArrayShapes.empty())
oArrayShapes[0]->bGroupShape = true;//
int nIndexBreak = -1;
for (int nIndex = 0; nIndex < oArrayShapes.size(); ++nIndex)
{
......
......@@ -196,6 +196,8 @@ public:
{
case NSPresentationEditor::etVideo:
{
//default -> line = false
pElement->m_bLine = false;
for (long i = 0; i < lCount; ++i)
{
SetUpPropertyVideo((CVideoElement*)pElement, pTheme, pWrapper, pSlide, &pProperties->m_arProperties[i]);
......@@ -204,6 +206,8 @@ public:
}
case NSPresentationEditor::etPicture:
{
//default -> line = false
pElement->m_bLine = false;
for (long i = 0; i < lCount; ++i)
{
SetUpPropertyImage((CImageElement*)pElement, pTheme, pWrapper, pSlide, &pProperties->m_arProperties[i]);
......@@ -212,6 +216,8 @@ public:
}
case NSPresentationEditor::etAudio:
{
//default -> line = false
pElement->m_bLine = false;
for (long i = 0; i < lCount; ++i)
{
SetUpPropertyAudio((CAudioElement*)pElement, pTheme, pWrapper, pSlide, &pProperties->m_arProperties[i]);
......@@ -830,7 +836,7 @@ public:
}break;
case pibName:
{
pElement->m_sName = NSFile::CUtf8Converter::GetWStringFromUTF16((unsigned short*)pProperty->m_pOptions, pProperty->m_lValue /2-1);
pElement->m_sImageName = NSFile::CUtf8Converter::GetWStringFromUTF16((unsigned short*)pProperty->m_pOptions, pProperty->m_lValue /2-1);
// TextMining05.ppt, 20 - ( - todooo
}break;
case cropFromTop:
......@@ -1188,9 +1194,6 @@ public:
}
};
//
// IElement...
// - video, image, shape, text, color -
class CRecordShapeContainer : public CRecordsContainer
{
private:
......@@ -1198,13 +1201,15 @@ private:
public:
bool bGroupShape;
RECT* m_pGroupBounds;
RECT* m_pGroupClientAnchor;
public:
CRecordShapeContainer()
{
bGroupShape = false;
m_pStream = NULL;
m_pGroupBounds = NULL;
......@@ -1233,6 +1238,8 @@ public:
if (NULL == ppElement)
return;
if (bGroupShape) return;
*ppElement = NULL;
std::vector<CRecordShape*> oArrayShape;
......@@ -1420,6 +1427,7 @@ public:
GetRecordsByType(&oArrayPlaceHolder, true, true);
if (0 < oArrayPlaceHolder.size())
{
pElem->m_bLine = false; //
pElem->m_lPlaceholderID = (int)(oArrayPlaceHolder[0]->m_nPosition);
pElem->m_lPlaceholderType = (int)(oArrayPlaceHolder[0]->m_nPlacementID);
......
......@@ -289,7 +289,7 @@ namespace NSPresentationEditor
bool m_bOLE;
bool m_bImagePresent;
std::wstring m_sName;
std::wstring m_sImageName;
public:
CImageElement() : IElement()
......
......@@ -163,22 +163,20 @@ namespace NSPresentationEditor
}
if (!m_arParagraphs[nIndexP].m_oPFRun.hasBullet.is_init())
{
m_arParagraphs[nIndexP].m_oPFRun.hasBullet = hasBullet;
if (!m_arParagraphs[nIndexP].m_oPFRun.bulletColor.is_init())
m_arParagraphs[nIndexP].m_oPFRun.bulletColor = bulletColor;
if (!m_arParagraphs[nIndexP].m_oPFRun.bulletColor.is_init())
m_arParagraphs[nIndexP].m_oPFRun.bulletColor = bulletColor;
if (!m_arParagraphs[nIndexP].m_oPFRun.bulletSize.is_init())
m_arParagraphs[nIndexP].m_oPFRun.bulletSize = bulletSize;
if (!m_arParagraphs[nIndexP].m_oPFRun.bulletSize.is_init())
m_arParagraphs[nIndexP].m_oPFRun.bulletSize = bulletSize;
if (!m_arParagraphs[nIndexP].m_oPFRun.bulletChar.is_init())
{
m_arParagraphs[nIndexP].m_oPFRun.bulletChar = bulletChar;
m_arParagraphs[nIndexP].m_oPFRun.bulletFontRef = bulletFontRef;
}
else
{
int g=0;
if (!m_arParagraphs[nIndexP].m_oPFRun.bulletChar.is_init())
{
m_arParagraphs[nIndexP].m_oPFRun.bulletChar = bulletChar;
m_arParagraphs[nIndexP].m_oPFRun.bulletFontRef = bulletFontRef;
}
}
if (!m_arParagraphs[nIndexP].m_oPFRun.leftMargin.is_init())
......
......@@ -96,7 +96,24 @@ namespace NSPresentationEditor
return _T("");
}
};
static std::wstring CorrectXmlString3(const std::wstring & str)
{
std::wstring buffer;
buffer.reserve(str.size());
for(size_t pos = 0; pos != str.size(); ++pos)
{
switch(str[pos])
{
case '&': buffer.append(_T("&amp;")); break;
case '\"': buffer.append(_T("&quot;")); break;
case '\'': buffer.append(_T("&apos;")); break;
case '<': buffer.append(_T("&lt;")); break;
case '>': buffer.append(_T("&gt;")); break;
default: buffer.append(&str[pos], 1); break;
}
}
return buffer;
}
class CRelsGenerator
{
private:
......@@ -248,6 +265,7 @@ namespace NSPresentationEditor
m_oWriter.WriteString(strRels);
}
AVSINLINE CString WriteHyperlinkImage(const std::wstring& strImage, bool bExternal = true)
{
std::map<std::wstring, int>::iterator pPair = m_mapImages.find(strImage);
......@@ -281,7 +299,7 @@ namespace NSPresentationEditor
{
std::wstring strImage = m_pManager->GenerateImage(strImagePath);
if (strImage.empty()) return WriteHyperlinkImage(strImagePath, true);
if (strImage.empty()) return WriteHyperlinkImage(CorrectXmlString3(strImagePath), true);
return WriteHyperlinkImage(strImage, false);
}
......
......@@ -1219,7 +1219,7 @@ CString NSPresentationEditor::CShapeWriter::ConvertImage()
CString strRid;
if (m_pImageElement->m_strImageFileName.empty())
{
strRid = m_pRels->WriteHyperlinkImage(m_pImageElement->m_sName);
strRid = m_pRels->WriteHyperlinkImage(CorrectXmlString3(m_pImageElement->m_sImageName));
}
else
{
......
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