Kaydet (Commit) 87c3fdee authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl

sd html: export outline, code simplification

Change-Id: Ic201f4bd7716806edd031a2935d1e859a6b51958
üst af51f3fb
...@@ -1205,9 +1205,8 @@ OUString HtmlExport::CreateTextForTitle( SdrOutliner* pOutliner, SdPage* pPage, ...@@ -1205,9 +1205,8 @@ OUString HtmlExport::CreateTextForTitle( SdrOutliner* pOutliner, SdPage* pPage,
// creates a outliner text for a page // creates a outliner text for a page
OUString HtmlExport::CreateTextForPage( SdrOutliner* pOutliner, OUString HtmlExport::CreateTextForPage(SdrOutliner* pOutliner, SdPage* pPage,
SdPage* pPage, bool bHeadLine, const Color& rBackgroundColor)
bool bHeadLine, const Color& rBackgroundColor )
{ {
OUStringBuffer aStr; OUStringBuffer aStr;
...@@ -1216,171 +1215,114 @@ OUString HtmlExport::CreateTextForPage( SdrOutliner* pOutliner, ...@@ -1216,171 +1215,114 @@ OUString HtmlExport::CreateTextForPage( SdrOutliner* pOutliner,
SdrObject* pObject = pPage->GetObj(i); SdrObject* pObject = pPage->GetObj(i);
PresObjKind eKind = pPage->GetPresObjKind(pObject); PresObjKind eKind = pPage->GetPresObjKind(pObject);
if (eKind == PRESOBJ_TABLE) switch (eKind)
{ {
SdrTableObj* pTableObject = (SdrTableObj*) pObject; case PRESOBJ_TABLE:
CellPos aStart, aEnd;
aStart = pTableObject->getFirstCell();
aEnd = pTableObject->getLastCell();
sal_Int32 nColCount = pTableObject->getColumnCount();
aStr.append("<table>\r\n");
for (sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++)
{ {
aStr.append(" <tr>\r\n"); SdrTableObj* pTableObject = (SdrTableObj*) pObject;
for (sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++)
{
aStr.append(" <td>\r\n");
sal_Int32 nCellIndex = nRow * nColCount + nCol;
SdrText* pText = pTableObject->getText(nCellIndex);
if (!pText || !pText->GetOutlinerParaObject())
continue;
pOutliner->SetText(*(pText->GetOutlinerParaObject()));
sal_Int32 nCount = pOutliner->GetParagraphCount(); CellPos aStart, aEnd;
Paragraph* pPara = NULL; aStart = pTableObject->getFirstCell();
aEnd = pTableObject->getLastCell();
sal_Int16 nCurrentDepth = -1; sal_Int32 nColCount = pTableObject->getColumnCount();
aStr.append("<table>\r\n");
for (sal_Int32 nPara = 0; nPara < nCount; nPara++) for (sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++)
{
aStr.append(" <tr>\r\n");
for (sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++)
{ {
pPara = pOutliner->GetParagraph(nPara); aStr.append(" <td>\r\n");
if(pPara == 0) sal_Int32 nCellIndex = nRow * nColCount + nCol;
continue; SdrText* pText = pTableObject->getText(nCellIndex);
const sal_Int16 nDepth = (sal_uInt16) pOutliner->GetDepth(nPara); if (pText == NULL)
OUString aParaText = ParagraphToHTMLString(pOutliner, nPara, rBackgroundColor);
if (aParaText.isEmpty())
continue; continue;
WriteOutlinerParagraph(aStr, pOutliner, pText->GetOutlinerParaObject(), rBackgroundColor, false);
if (nDepth < 0) aStr.append(" </td>\r\n");
{
lclAppendStyle(aStr, "p", getParagraphStyle(pOutliner, nPara));
aStr.append(aParaText);
aStr.append("</p>\r\n");
}
else
{
while(nCurrentDepth < nDepth)
{
aStr.append("<ul>\r\n");
nCurrentDepth++;
}
while(nCurrentDepth > nDepth)
{
aStr.append("</ul>\r\n");
nCurrentDepth--;
}
lclAppendStyle(aStr, "li", getParagraphStyle(pOutliner, nPara));
aStr.append(aParaText);
aStr.append("</li>\r\n");
}
} }
while(nCurrentDepth >= 0) aStr.append(" </tr>\r\n");
{
aStr.append("</ul>\r\n");
nCurrentDepth--;
}
pOutliner->Clear();
aStr.append(" </td>\r\n");
} }
aStr.append(" </tr>\r\n"); aStr.append("</table>\r\n");
}
break;
case PRESOBJ_TEXT:
case PRESOBJ_OUTLINE:
{
SdrTextObj* pTextObject = (SdrTextObj*) pObject;
if (pTextObject->IsEmptyPresObj())
continue;
WriteOutlinerParagraph(aStr, pOutliner, pTextObject->GetOutlinerParaObject(), rBackgroundColor, bHeadLine);
} }
aStr.append("</table>\r\n"); break;
default:
break;
} }
} }
return aStr.makeStringAndClear();
}
SdrTextObj* pTO = (SdrTextObj*)pPage->GetPresObj(PRESOBJ_TEXT); void HtmlExport::WriteOutlinerParagraph(OUStringBuffer& aStr, SdrOutliner* pOutliner,
if(!pTO) OutlinerParaObject* pOutlinerParagraphObject,
pTO = GetLayoutTextObject(pPage); const Color& rBackgroundColor, bool bHeadLine)
{
if (pOutlinerParagraphObject == NULL)
return;
if (pTO && !pTO->IsEmptyPresObj()) pOutliner->SetText(*pOutlinerParagraphObject);
{
OutlinerParaObject* pOPO = pTO->GetOutlinerParaObject();
if (pOPO)
{
pOutliner->Clear();
pOutliner->SetText( *pOPO );
sal_Int32 nCount = pOutliner->GetParagraphCount(); sal_Int32 nCount = pOutliner->GetParagraphCount();
Paragraph* pPara = NULL; Paragraph* pParagraph = NULL;
sal_Int16 nActDepth = -1;
OUString aParaText; sal_Int16 nCurrentDepth = -1;
for (sal_Int32 nPara = 0; nPara < nCount; nPara++)
{
pPara = pOutliner->GetParagraph(nPara);
if(pPara == 0)
continue;
const sal_Int16 nDepth = (sal_uInt16) pOutliner->GetDepth( nPara ); for (sal_Int32 nIndex = 0; nIndex < nCount; nIndex++)
aParaText = ParagraphToHTMLString(pOutliner,nPara,rBackgroundColor); {
pParagraph = pOutliner->GetParagraph(nIndex);
if(pParagraph == NULL)
continue;
if (aParaText.isEmpty()) const sal_Int16 nDepth = (sal_uInt16) pOutliner->GetDepth(nIndex);
continue; OUString aParaText = ParagraphToHTMLString(pOutliner, nIndex, rBackgroundColor);
if(nDepth < nActDepth ) if (aParaText.isEmpty())
{ continue;
do
{
aStr.append("</ul>");
nActDepth--;
}
while(nDepth < nActDepth);
}
else if(nDepth > nActDepth )
{
do
{
aStr.append("<ul>");
nActDepth++;
}
while( nDepth > nActDepth );
}
OUString sStyle(getParagraphStyle(pOutliner, nPara)); if (nDepth < 0)
if(nActDepth >= 0 ) {
{ OUString aTag = bHeadLine ? OUString("h2") : OUString("p");
lclAppendStyle(aStr, "li", sStyle); lclAppendStyle(aStr, aTag, getParagraphStyle(pOutliner, nIndex));
}
if(nActDepth <= 0 && bHeadLine) aStr.append(aParaText);
{ aStr.append("</" + aTag + ">\r\n");
if( nActDepth == 0 ) }
{ else
aStr.append("<h2>"); {
} while(nCurrentDepth < nDepth)
else {
{ aStr.append("<ul>\r\n");
lclAppendStyle(aStr, "h2", sStyle); nCurrentDepth++;
}
}
aStr.append(aParaText);
if(nActDepth == 0 && bHeadLine)
aStr.append("</h2>");
if(nActDepth >= 0 )
aStr.append("</li>");
aStr.append("\r\n");
} }
while(nCurrentDepth > nDepth)
while( nActDepth >= 0 )
{ {
aStr.append("</ul>"); aStr.append("</ul>\r\n");
nActDepth--; nCurrentDepth--;
}; }
lclAppendStyle(aStr, "li", getParagraphStyle(pOutliner, nIndex));
aStr.append(aParaText);
aStr.append("</li>\r\n");
} }
} }
while(nCurrentDepth >= 0)
return aStr.makeStringAndClear(); {
aStr.append("</ul>\r\n");
nCurrentDepth--;
}
pOutliner->Clear();
} }
// creates a outliner text for a note page // creates a outliner text for a note page
OUString HtmlExport::CreateTextForNotesPage( SdrOutliner* pOutliner, OUString HtmlExport::CreateTextForNotesPage( SdrOutliner* pOutliner,
SdPage* pPage, SdPage* pPage,
......
...@@ -211,6 +211,10 @@ class HtmlExport ...@@ -211,6 +211,10 @@ class HtmlExport
bool WriteHtml( const OUString& rFileName, bool bAddExtension, const OUString& rHtmlData ); bool WriteHtml( const OUString& rFileName, bool bAddExtension, const OUString& rHtmlData );
OUString GetButtonName( int nButton ) const; OUString GetButtonName( int nButton ) const;
void WriteOutlinerParagraph(OUStringBuffer& aStr, SdrOutliner* pOutliner,
OutlinerParaObject* pOutlinerParagraphObject,
const Color& rBackgroundColor, bool bHeadLine);
public: public:
HtmlExport(const OUString& aPath, HtmlExport(const OUString& aPath,
const css::uno::Sequence<css::beans::PropertyValue>& rParams, const css::uno::Sequence<css::beans::PropertyValue>& rParams,
......
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