~ubuntu-branches/ubuntu/breezy/libwpd/breezy

« back to all changes in this revision

Viewing changes to src/lib/WPXHLListener.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Masayuki Hatta (mhatta)
  • Date: 2004-08-10 00:37:47 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20040810003747-5i7g92h2v88z70zo
Tags: 0.7.2-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
1
2
/* libwpd
2
3
 * Copyright (C) 2002 William Lachance (william.lachance@sympatico.ca)
3
4
 * Copyright (C) 2002-2003 Marc Maurer (j.m.maurer@student.utwente.nl)
65
66
        m_pageMarginLeft(1.0f),
66
67
        m_pageMarginRight(1.0f),
67
68
        m_paragraphMarginLeft(0.0f), 
68
 
        m_paragraphMarginRight(0.0f)/*,
69
 
        m_currentRow(-1),
 
69
        m_paragraphMarginRight(0.0f)
 
70
        /*m_currentRow(-1),
70
71
        m_currentColumn(-1),
71
72
        
72
73
        m_currentListLevel(0),
82
83
        WPXLLListener(),
83
84
        m_pageList(pageList),
84
85
        m_listenerImpl(listenerImpl),
85
 
        m_ps(new WPXParsingState)
 
86
        m_ps(new WPXParsingState),
 
87
        m_isUndoOn(false)
86
88
{
87
89
}
88
90
 
89
91
WPXHLListener::~WPXHLListener()
90
92
{
91
93
        g_string_free(m_ps->m_fontName, TRUE);
 
94
        DELETEP(m_ps);
92
95
}
93
96
 
94
97
void WPXHLListener::startDocument()
150
153
                if (!currentPage->getHeaderFooterSuppression((*iter).getInternalType())) 
151
154
                {
152
155
                        m_listenerImpl->openHeaderFooter((*iter).getType(), (*iter).getOccurence());
153
 
                        handleSubDocument((*iter).getTextPID());
 
156
                        handleSubDocument((*iter).getTextPID(), true, (*iter).getTableList());
154
157
                        m_listenerImpl->closeHeaderFooter((*iter).getType(), (*iter).getOccurence());                                   
155
158
                        WPD_DEBUG_MSG(("Header Footer Element: type: %i occurence: %i pid: %i\n", 
156
159
                                       (*iter).getType(), (*iter).getOccurence(), (*iter).getTextPID()));
203
206
/**
204
207
Creates an new document state. Saves the old state on a "stack".
205
208
*/
206
 
void WPXHLListener::handleSubDocument(guint16 textPID)
 
209
void WPXHLListener::handleSubDocument(guint16 textPID, const bool isHeaderFooter, WPXTableList *tableList)
207
210
{
208
211
        // save our old parsing state on our "stack"
209
212
        WPXParsingState *oldPS = m_ps;
210
213
        m_ps = new WPXParsingState(false); // false: don't open a new section unless we must inside this type of sub-document
 
214
 
 
215
        // BEGIN: copy relevant page properties into the new parsing state
 
216
        m_ps->m_pageMarginLeft = oldPS->m_pageMarginLeft;
 
217
        m_ps->m_pageMarginRight = oldPS->m_pageMarginRight;
 
218
        // END: copy page properties into the new parsing state
211
219
        
212
 
        _handleSubDocument(textPID);
 
220
        _handleSubDocument(textPID, isHeaderFooter, tableList);
213
221
 
214
222
        // restore our old parsing state
215
223
        delete m_ps;
216
 
        m_ps = oldPS;           
 
224
        m_ps = oldPS;
 
225
}
 
226
 
 
227
void WPXHLListener::insertBreak(const guint8 breakType)
 
228
{
 
229
        if (!isUndoOn())
 
230
        {       
 
231
                _flushText();
 
232
                switch (breakType) 
 
233
                {
 
234
                case WPX_COLUMN_BREAK:
 
235
                        m_ps->m_numDeferredParagraphBreaks++;
 
236
                        m_ps->m_isParagraphColumnBreak = true;
 
237
                        break;
 
238
                case WPX_PAGE_BREAK:
 
239
                        m_ps->m_numDeferredParagraphBreaks++;
 
240
                        m_ps->m_isParagraphPageBreak = true;
 
241
                        break;
 
242
                        // TODO: (.. line break?)
 
243
                }
 
244
                switch (breakType)
 
245
                {
 
246
                case WPX_PAGE_BREAK:
 
247
                case WPX_SOFT_PAGE_BREAK:
 
248
                        if (m_ps->m_numPagesRemainingInSpan > 0)
 
249
                                m_ps->m_numPagesRemainingInSpan--;
 
250
                        else
 
251
                        {
 
252
                                _openPageSpan();
 
253
                        }
 
254
                default:
 
255
                        break;
 
256
                }
 
257
        }
217
258
}