Hi all,
I am Vidhoon, a newbie developer at Abiword. :)
I am looking forward to participate in GSOC 2013.
I worked on bug 8795:
http://bugzilla.abisource.com/show_bug.cgi?id=8795
I have created a first draft fix patch for the same with some detailed comments.
I am also copy pasting the patch for easier reference at the end of
this mail body.
Please provide your valuable suggestions so that I can improve this
patch and get it merged.
I could not find any template mails in mailing list archives to send bug fixes.
So excuse me if I am not following any procedures. Please indicate the
same and I will oblige.
Pointers to coding conventions (some I was able to note from existing
code and pick automatically) are also welcome to improve on this first
draft patch.
Index: text/fmt/xp/fb_LineBreaker.cpp
===================================================================
--- text/fmt/xp/fb_LineBreaker.cpp (revision 32687)
+++ text/fmt/xp/fb_LineBreaker.cpp (working copy)
@@ -37,7 +37,8 @@
m_pFirstRunToKeep(NULL),
m_pLastRunToKeep(NULL),
m_iMaxLineWidth(0),
- m_iWorkingLineWidth(0)
+ m_iWorkingLineWidth(0),
+ m_iTrailingSpace(-1)
{
xxx_UT_DEBUGMSG(("fb_LineBreaker %x created \n",this));
}
@@ -630,7 +631,7 @@
UT_ASSERT(pNewLine); // TODO check for outofmem
pNextLine = pNewLine;
m_iMaxLineWidth = pNextLine->getMaxWidth();
- xxx_UT_DEBUGMSG(("!!!! Generated a new Line \n"));
+ xxx_UT_DEBUGMSG(("!!!! Generated a new Line \n"));
}
else
{
@@ -648,7 +649,43 @@
while (pRunToBump && pLine->getNumRunsInLine() &&
(pLine->getLastRun() != m_pLastRunToKeep))
{
UT_ASSERT(pRunToBump->getLine() == pLine);
- xxx_UT_DEBUGMSG(("RunToBump %x Type %d Offset %d Length %d
\n",pRunToBump,pRunToBump->getType(),pRunToBump->getBlockOffset(),pRunToBump->getLength()));
+ if(pRunToBump->getType() == FPRUN_ENDOFPARAGRAPH )
+ {
+ xxx_UT_DEBUGMSG(("Trailing space present in prev run
%d\n",pRunToBump->getPrevRun()->findTrailingSpaceDistance()));
+/*
+FIX for bug 8795
+================
+if EOP then
+ if prev run has trailing white space then
+ 1)store actual trailing space
+ 2)delay run bump till trailing space is exhausted
+ else
+ bump contents into newline
+*/
+
+
if(pRunToBump->getPrevRun()->findTrailingSpaceDistance())
+ {
+ if(m_iTrailingSpace == -1)
+ {
+ xxx_UT_DEBUGMSG(("backing up trailing space"));
+ m_iTrailingSpace = pRunToBump->getPrevRun()->findTrailingSpaceDistance();
+ }
+ if(pLine->getFilledWidth() - m_iTrailingSpace < m_iMaxLineWidth)
+ {
+ xxx_UT_DEBUGMSG(("Filledwidth %d TrailingSpace %d FW-TS %d
MaxWidth %d",pLine->getFilledWidth(),m_iTrailingSpace,pLine->getFilledWidth()
- m_iTrailingSpace, m_iMaxLineWidth));
+ break;
+ }
+ else
+ {
+ xxx_UT_DEBUGMSG(("trailing space over.. should now start newline"));
+ m_iTrailingSpace = -1;
+ }
+ }
+
+
+ }
+
+ UT_DEBUGMSG(("RunToBump %x Type %d Offset %d Length %d
\n",pRunToBump,pRunToBump->getType(),pRunToBump->getBlockOffset(),pRunToBump->getLength()));
if(!pLine->removeRun(pRunToBump))
{
//
@@ -673,8 +710,12 @@
xxx_UT_DEBUGMSG(("Next runToBump %x \n",pRunToBump));
}
}
-
- UT_ASSERT((!m_pLastRunToKeep) || (pLine->getLastRun() == m_pLastRunToKeep));
+/*
+below assert not applicable now since when trailing space
+is present the current line is not broken immediately and
+delayed till trailing space is exhausted by non blank characters
+*/
+ //UT_ASSERT((!m_pLastRunToKeep) || (pLine->getLastRun() ==
m_pLastRunToKeep));
#if DEBUG
pLine->assertLineListIntegrity();
if(pNextLine)
Index: text/fmt/xp/fb_LineBreaker.h
===================================================================
--- text/fmt/xp/fb_LineBreaker.h (revision 32687)
+++ text/fmt/xp/fb_LineBreaker.h (working copy)
@@ -54,6 +54,7 @@
UT_sint32 m_iMaxLineWidth;
UT_sint32 m_iWorkingLineWidth;
+ UT_sint32 m_iTrailingSpace;
};
#endif /* FB_LINEBREAKER_H */
regards,
-- Vidhoon Viswanathan +91 7760711773
This archive was generated by hypermail 2.1.8 : Sun Mar 10 2013 - 23:44:18 CET