summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Reuter <freuter@novell.com>2010-12-01 16:38:15 +0100
committerCédric Bosdonnat <cedricbosdo@openoffice.org>2010-12-01 16:45:32 +0100
commit54e3f214f58830e52a1276cca42dd16f1cd3b2ce (patch)
tree03d11d09a5f391b04978622946ecf87b028d1b88
parentf3b47ff0c59c046e390cf433004fe6d3f03100ee (diff)
Added a layout dump hidden feature for dbglevel>1
-rw-r--r--sw/source/core/inc/bodyfrm.hxx2
-rw-r--r--sw/source/core/inc/frame.hxx9
-rw-r--r--sw/source/core/layout/pagechg.cxx17
-rw-r--r--sw/source/core/text/makefile.mk1
-rw-r--r--sw/source/core/text/porlay.hxx6
-rw-r--r--sw/source/core/text/porlin.hxx7
-rw-r--r--sw/source/core/text/portxt.hxx4
-rw-r--r--sw/source/core/text/xmldump.cxx294
-rw-r--r--sw/source/ui/docvw/edtwin.cxx19
-rw-r--r--sw/util/makefile.mk15
10 files changed, 370 insertions, 4 deletions
diff --git a/sw/source/core/inc/bodyfrm.hxx b/sw/source/core/inc/bodyfrm.hxx
index 02fe0c88c8..5694c0b118 100644
--- a/sw/source/core/inc/bodyfrm.hxx
+++ b/sw/source/core/inc/bodyfrm.hxx
@@ -44,6 +44,8 @@ protected:
public:
SwBodyFrm( SwFrmFmt* );
+ virtual void Paint( const SwRect&, const SwPrtOptions *pPrintData = NULL ) const;
+
DECL_FIXEDMEMPOOL_NEWDEL(SwBodyFrm)
};
diff --git a/sw/source/core/inc/frame.hxx b/sw/source/core/inc/frame.hxx
index 98436673a9..14cea936f2 100644
--- a/sw/source/core/inc/frame.hxx
+++ b/sw/source/core/inc/frame.hxx
@@ -33,6 +33,11 @@
#include "swrect.hxx"
#include "calbck.hxx" // fuer SwClient
+#if OSL_DEBUG_LEVEL > 1
+#include <libxml/encoding.h>
+#include <libxml/xmlwriter.h>
+#endif
+
class SwLayoutFrm;
class SwRootFrm;
class SwPageFrm;
@@ -915,6 +920,10 @@ public:
void ValidateThisAndAllLowers( const USHORT nStage );
public:
+#if OSL_DEBUG_LEVEL > 1
+ virtual void dumpAsXml(xmlTextWriterPtr writer);
+ void dumpChildrenAsXml(xmlTextWriterPtr writer);
+#endif
bool IsCollapse() const;
};
diff --git a/sw/source/core/layout/pagechg.cxx b/sw/source/core/layout/pagechg.cxx
index bf1ff812f7..ab5e523a58 100644
--- a/sw/source/core/layout/pagechg.cxx
+++ b/sw/source/core/layout/pagechg.cxx
@@ -189,6 +189,23 @@ void SwBodyFrm::Format( const SwBorderAttrs * )
bValidSize = bValidPrtArea = TRUE;
}
+void SwBodyFrm::Paint( const SwRect& rRect, const SwPrtOptions* ) const
+{
+#if OSL_DEBUG_LAYOUT > 1
+ fprintf( stderr, "SwBodyFrm::Paint()\n" );
+#endif
+ ViewShell *pSh = GetShell();
+ OutputDevice* pOut = pSh->GetOut();
+ pOut->Push();
+ pOut->SetLineColor(Color(255, 0, 0));
+ pOut->SetFillColor(COL_TRANSPARENT);
+ SwRect aRect(Frm().Left()+5, Frm().Top()+5, Frm().Width()-5, Frm().Height()-5);
+// SwRect aRect = Frm();
+ pOut->DrawRect(aRect.SVRect());
+ pOut->Pop();
+ SwLayoutFrm::Paint(rRect);
+}
+
/*************************************************************************
|*
|* SwPageFrm::SwPageFrm(), ~SwPageFrm()
diff --git a/sw/source/core/text/makefile.mk b/sw/source/core/text/makefile.mk
index f7786a5a6b..8b943a82da 100644
--- a/sw/source/core/text/makefile.mk
+++ b/sw/source/core/text/makefile.mk
@@ -91,6 +91,7 @@ SLOFILES = \
.IF "$(DBG_LEVEL)">="2"
SLOFILES += \
+ $(SLO)$/xmldump.obj \
$(SLO)$/txtio.obj
.ENDIF
diff --git a/sw/source/core/text/porlay.hxx b/sw/source/core/text/porlay.hxx
index c66852273c..5a90ac88c6 100644
--- a/sw/source/core/text/porlay.hxx
+++ b/sw/source/core/text/porlay.hxx
@@ -259,6 +259,8 @@ public:
#if OSL_DEBUG_LEVEL > 1
void DebugPortions( SvStream &rOs, const XubString &rTxt,
const xub_StrLen nStart ); //$ ostream
+
+ void dumpLineAsXml(xmlTextWriter* writer, USHORT& ofs, String& aText);
#endif
OUTPUT_OPERATOR
@@ -368,6 +370,10 @@ public:
const SwDropPortion *FindDropPortion() const;
+#if OSL_DEBUG_LEVEL > 1
+ void dumpAsXml( xmlTextWriter* writer, SwTxtFrm* pTxtFrm );
+#endif
+
OUTPUT_OPERATOR
DECL_FIXEDMEMPOOL_NEWDEL(SwParaPortion)
};
diff --git a/sw/source/core/text/porlin.hxx b/sw/source/core/text/porlin.hxx
index 489ea594f2..a3ff1b40fe 100644
--- a/sw/source/core/text/porlin.hxx
+++ b/sw/source/core/text/porlin.hxx
@@ -30,6 +30,10 @@
#include "possiz.hxx" // SwPosSize
+#if OSL_DEBUG_LEVEL > 1
+#include <libxml/xmlwriter.h>
+#endif
+
class XubString;
class SwTxtSizeInfo;
class SwTxtPaintInfo;
@@ -196,6 +200,9 @@ public:
// Accessibility: pass information about this portion to the PortionHandler
virtual void HandlePortion( SwPortionHandler& rPH ) const;
+#if OSL_DEBUG_LEVEL > 1
+ void dumpPortionAsXml(USHORT ofs, String& aText, xmlTextWriter* writer);
+#endif
OUTPUT_OPERATOR
};
diff --git a/sw/source/core/text/portxt.hxx b/sw/source/core/text/portxt.hxx
index 43ed29d7fc..2715c67356 100644
--- a/sw/source/core/text/portxt.hxx
+++ b/sw/source/core/text/portxt.hxx
@@ -67,6 +67,10 @@ public:
// Accessibility: pass information about this portion to the PortionHandler
virtual void HandlePortion( SwPortionHandler& rPH ) const;
+#if OSL_DEBUG_LEVEL > 1
+ void dumpPortionAsXml(USHORT ofs, String& aText, xmlTextWriter* writer);
+#endif
+
OUTPUT_OPERATOR
DECL_FIXEDMEMPOOL_NEWDEL(SwTxtPortion)
};
diff --git a/sw/source/core/text/xmldump.cxx b/sw/source/core/text/xmldump.cxx
new file mode 100644
index 0000000000..caa9dff467
--- /dev/null
+++ b/sw/source/core/text/xmldump.cxx
@@ -0,0 +1,294 @@
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ * Novell Inc.
+ * Portions created by the Initial Developer are Copyright (C) 2010 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s): Florian Reuter <freuter@novell.com>
+ * Cedric Bosdonnat <cbosdonnat@novell.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+#include "precompiled_sw.hxx"
+
+#include "frame.hxx"
+#include "txtfrm.hxx"
+#include "porlin.hxx"
+#include "porlay.hxx"
+#include "portxt.hxx"
+#include <SwPortionHandler.hxx>
+
+
+
+class XmlPortionDumper:public SwPortionHandler
+{
+ private:
+ xmlTextWriterPtr writer;
+ USHORT ofs;
+ public:
+
+ XmlPortionDumper( xmlTextWriterPtr some_writer ):writer( some_writer ), ofs( 0 )
+ {
+ }
+
+ virtual ~ XmlPortionDumper( )
+ {
+ }
+
+ /**
+ @param nLength
+ length of this portion in the model string
+ @param rText
+ text which is painted on-screen
+ */
+ virtual void Text( USHORT nLength,
+ USHORT nType )
+ {
+ ofs += nLength;
+ xmlTextWriterStartElement( writer, BAD_CAST( "Text" ) );
+ xmlTextWriterWriteFormatAttribute( writer,
+ BAD_CAST( "nLength" ),
+ "%i", ( int ) nLength );
+ xmlTextWriterWriteFormatAttribute( writer,
+ BAD_CAST( "nType" ),
+ "%i", ( int ) nType );
+ xmlTextWriterEndElement( writer );
+ }
+
+ /**
+ @param nLength
+ length of this portion in the model string
+ @param rText
+ text which is painted on-screen
+ @param nType
+ type of this portion
+ */
+ virtual void Special( USHORT nLength,
+ const String & rText,
+ USHORT nType )
+ {
+ xmlTextWriterStartElement( writer, BAD_CAST( "Special" ) );
+ xmlTextWriterWriteFormatAttribute( writer,
+ BAD_CAST( "nLength" ),
+ "%i", ( int ) nLength );
+ xmlTextWriterWriteFormatAttribute( writer,
+ BAD_CAST( "nType" ),
+ "%i", ( int ) nType );
+ rtl::OUString sText( rText );
+ rtl::OString sText8 =::rtl::OUStringToOString( sText,
+ RTL_TEXTENCODING_UTF8 );
+ xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "rText" ),
+ "%s", sText8.getStr( ) );
+
+ xmlTextWriterEndElement( writer );
+ ofs += nLength;
+ }
+
+ virtual void LineBreak( )
+ {
+ xmlTextWriterStartElement( writer, BAD_CAST( "LineBreak" ) );
+ xmlTextWriterEndElement( writer );
+ }
+
+ /**
+ * @param nLength
+ * number of 'model string' characters to be skipped
+ */
+ virtual void Skip( USHORT nLength )
+ {
+ xmlTextWriterStartElement( writer, BAD_CAST( "Skip" ) );
+ xmlTextWriterWriteFormatAttribute( writer,
+ BAD_CAST( "nLength" ),
+ "%i", ( int ) nLength );
+ xmlTextWriterEndElement( writer );
+ ofs += nLength;
+ }
+
+ virtual void Finish( )
+ {
+ xmlTextWriterStartElement( writer, BAD_CAST( "Finish" ) );
+ xmlTextWriterEndElement( writer );
+ }
+
+};
+
+
+void SwTxtPortion::dumpPortionAsXml( xub_StrLen ofs, XubString & /*aText */,
+ xmlTextWriterPtr writer )
+{
+ xmlTextWriterStartElement( writer, BAD_CAST( "SwTxtPortion" ) );
+ xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "ofs" ), "%i", ofs );
+ xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "len" ), "%i",
+ ( int ) this->GetLen( ) );
+
+ xmlTextWriterEndElement( writer );
+}
+
+void SwLinePortion::dumpPortionAsXml( xub_StrLen ofs, XubString & /*aText */,
+ xmlTextWriterPtr writer )
+{
+ xmlTextWriterStartElement( writer, BAD_CAST( "SwLinePortion" ) );
+ xmlTextWriterWriteFormatAttribute( writer,
+ BAD_CAST( "nWhichPor" ),
+ "%04X",
+ ( int ) this->GetWhichPor( ) );
+ xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "ofs" ), "%i", ofs );
+ xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "len" ), "%i",
+ ( int ) this->GetLen( ) );
+ xmlTextWriterEndElement( writer );
+}
+
+void SwLineLayout::dumpLineAsXml( xmlTextWriterPtr writer,
+ xub_StrLen & ofs, XubString & aText )
+{ // not used any longer...
+ xmlTextWriterStartElement( writer, BAD_CAST( "SwLineLayout" ) );
+ SwLinePortion *portion = this;
+ while ( portion != NULL )
+ {
+ portion->dumpPortionAsXml( ofs, aText, writer );
+ ofs += portion->GetLen( );
+ portion = portion->GetPortion( );
+ }
+ xmlTextWriterEndElement( writer );
+}
+
+
+void SwParaPortion::dumpAsXml( xmlTextWriterPtr writer, SwTxtFrm * pTxtFrm )
+{
+ xmlTextWriterStartElement( writer, BAD_CAST( "SwParaPortion" ) );
+ SwParaPortion *pPara = this;
+
+ if ( pPara && pTxtFrm )
+ {
+ xub_StrLen ofs = 0;
+ XubString & aText = ( String & ) pTxtFrm->GetTxt( );
+ if ( pTxtFrm->IsFollow( ) )
+ ofs += pTxtFrm->GetOfst( );
+
+ SwLineLayout *pLine = pPara;
+ while ( pLine )
+ {
+ xmlTextWriterStartElement( writer, BAD_CAST( "line" ) );
+ SwLinePortion *pPor = pLine->GetFirstPortion( );
+ while ( pPor )
+ {
+ pPor->dumpPortionAsXml( ofs, aText, writer );
+ ofs += pPor->GetLen( );
+ pPor = pPor->GetPortion( );
+ }
+
+ xmlTextWriterEndElement( writer ); // line
+ pLine = pLine->GetNext( );
+ }
+ }
+ xmlTextWriterEndElement( writer );
+}
+
+
+void SwFrm::dumpAsXml( xmlTextWriterPtr writer )
+{
+ const char *name = NULL;
+
+ switch ( GetType( ) )
+ {
+ case FRM_ROOT:
+ name = "root";
+ break;
+ case FRM_PAGE:
+ name = "page";
+ break;
+ case FRM_COLUMN:
+ name = "column";
+ break;
+ case FRM_HEADER:
+ name = "header";
+ break;
+ case FRM_FOOTER:
+ name = "footer";
+ break;
+ case FRM_FTNCONT:
+ name = "ftncont";
+ break;
+ case FRM_FTN:
+ name = "ftn";
+ break;
+ case FRM_BODY:
+ name = "body";
+ break;
+ case FRM_FLY:
+ name = "fly";
+ break;
+ case FRM_SECTION:
+ name = "section";
+ break;
+ case FRM_UNUSED:
+ name = "unused";
+ break;
+ case FRM_TAB:
+ name = "tab";
+ break;
+ case FRM_ROW:
+ name = "row";
+ break;
+ case FRM_CELL:
+ name = "cell";
+ break;
+ case FRM_TXT:
+ name = "txt";
+ break;
+ case FRM_NOTXT:
+ name = "txt";
+ break;
+ };
+
+ if ( name != NULL )
+ {
+ xmlTextWriterStartElement( writer, ( const xmlChar * ) name );
+ if ( IsTxtFrm( ) )
+ {
+ SwTxtFrm *pTxtFrm = ( SwTxtFrm * ) this;
+ rtl::OUString aTxt = pTxtFrm->GetTxt( );
+ for ( int i = 0; i < 32; i++ )
+ {
+ aTxt = aTxt.replace( i, '*' );
+ }
+ rtl::OString aTxt8 =::rtl::OUStringToOString( aTxt,
+ RTL_TEXTENCODING_UTF8 );
+ xmlTextWriterWriteString( writer,
+ ( const xmlChar * ) aTxt8.getStr( ) );
+ XmlPortionDumper pdumper( writer );
+ pTxtFrm->VisitPortions( pdumper );
+
+ }
+ else
+ {
+ dumpChildrenAsXml( writer );
+ }
+ xmlTextWriterEndElement( writer );
+ }
+}
+
+void SwFrm::dumpChildrenAsXml( xmlTextWriterPtr writer )
+{
+ SwFrm *pFrm = GetLower( );
+ for ( ; pFrm != NULL; pFrm = pFrm->GetNext( ) )
+ {
+ pFrm->dumpAsXml( writer );
+ }
+}
diff --git a/sw/source/ui/docvw/edtwin.cxx b/sw/source/ui/docvw/edtwin.cxx
index bf184f7ca5..2213afb0d6 100644
--- a/sw/source/ui/docvw/edtwin.cxx
+++ b/sw/source/ui/docvw/edtwin.cxx
@@ -140,6 +140,8 @@
#include <PostItMgr.hxx>
+#include "../../core/inc/rootfrm.hxx"
+
using namespace sw::mark;
using namespace ::com::sun::star;
@@ -1335,6 +1337,23 @@ void SwEditWin::KeyInput(const KeyEvent &rKEvt)
BOOL bChkInsBlank = pQuickHlpData->bChkInsBlank;
pQuickHlpData->bChkInsBlank = FALSE;
+#if OSL_DEBUG_LEVEL > 1
+ if (rKEvt.GetKeyCode().GetCode() == KEY_F12)
+ {
+ SwRootFrm* pLayout = GetView().GetDocShell()->GetWrtShell()->GetLayout();
+ xmlTextWriterPtr writer = xmlNewTextWriterFilename("layout.xml", 0);
+ if (writer!=NULL)
+ {
+ printf("dumping layout in \"layout.xml\"\n");
+ xmlTextWriterStartDocument(writer, NULL, NULL, NULL);
+ pLayout->dumpAsXml(writer);
+ xmlTextWriterEndDocument(writer);
+ xmlFreeTextWriter(writer);
+ }
+ return;
+ }
+#endif
+
KeyEvent aKeyEvent( rKEvt );
// look for vertical mappings
if( !bIsDocReadOnly && !rSh.IsSelFrmMode() && !rSh.IsObjSelected() )
diff --git a/sw/util/makefile.mk b/sw/util/makefile.mk
index 4088abeae7..9b07ba1df6 100644
--- a/sw/util/makefile.mk
+++ b/sw/util/makefile.mk
@@ -1,7 +1,7 @@
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
+#
# Copyright 2000, 2010 Oracle and/or its affiliates.
#
# OpenOffice.org - a multi-platform office productivity suite
@@ -114,14 +114,16 @@ SHL1STDLIBS+= \
$(UCBHELPERLIB) \
$(CPPUHELPERLIB) \
$(CPPULIB) \
- \
$(SALLIB) \
$(SALHELPERLIB) \
$(ICUUCLIB) \
- $(I18NUTILLIB)
-SHL1STDLIBS+= \
+ $(I18NUTILLIB) \
$(AVMEDIALIB)
+.IF "$(DBG_LEVEL)">="2"
+SHL1STDLIBS+= $(LIBXML2LIB)
+.ENDIF
+
.IF "$(GUI)"=="WNT"
SHL1STDLIBS+= $(ADVAPI32LIB)
.ENDIF # WNT
@@ -160,6 +162,8 @@ SHL2OBJS= $(SLO)$/swdetect.obj \
.IF "$(DBG_LEVEL)">="2"
SHL2OBJS+= \
$(SLO)$/errhdl.obj
+SHL2STDLIBS+= \
+ $(LIBXML2LIB)
.ENDIF
SHL2DEPN+= makefile.mk
@@ -192,6 +196,9 @@ SHL3STDLIBS= \
$(CPPULIB) \
$(SALLIB) \
$(SOTLIB)
+.IF "$(DBG_LEVEL)">="2"
+SHL3STDLIBS+= $(LIBXML2LIB)
+.ENDIF
SHL3LIBS= $(SLB)$/swui.lib
LIB3TARGET = $(SLB)$/swui.lib