Signed-off-by: Huw Davies huw@codeweavers.com --- dlls/riched20/caret.c | 2 +- dlls/riched20/editor.h | 14 ++++++++------ dlls/riched20/para.c | 38 +++++++++++++++++++------------------- dlls/riched20/table.c | 10 +++++----- dlls/riched20/undo.c | 20 ++++++++++---------- 5 files changed, 43 insertions(+), 41 deletions(-)
diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c index ffea3ee0c35..cce4755257c 100644 --- a/dlls/riched20/caret.c +++ b/dlls/riched20/caret.c @@ -619,7 +619,7 @@ void ME_InsertTextFromCursor(ME_TextEditor *editor, int nCursor, run = &cursor->pRun->member.run; }
- new_para = &ME_SplitParagraph( editor, run_get_di( run ), style, eol_str, eol_len, 0 )->member.para; + new_para = para_split( editor, run, style, eol_str, eol_len, 0 ); end_run = para_end_run( para_prev( new_para ) );
/* Move any cursors that were at the end of the previous run to the beginning of the new para */ diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h index fba9616ab4f..b0c3ec46214 100644 --- a/dlls/riched20/editor.h +++ b/dlls/riched20/editor.h @@ -198,7 +198,6 @@ void ME_SendRequestResize(ME_TextEditor *editor, BOOL force) DECLSPEC_HIDDEN; ME_DisplayItem *ME_GetParagraph(ME_DisplayItem *run) DECLSPEC_HIDDEN; void ME_GetSelectionParas(ME_TextEditor *editor, ME_DisplayItem **para, ME_DisplayItem **para_end) DECLSPEC_HIDDEN; void ME_MakeFirstParagraph(ME_TextEditor *editor) DECLSPEC_HIDDEN; -ME_DisplayItem *ME_SplitParagraph(ME_TextEditor *editor, ME_DisplayItem *rp, ME_Style *style, const WCHAR *eol_str, int eol_len, int paraFlags) DECLSPEC_HIDDEN; ME_DisplayItem *ME_JoinParagraphs(ME_TextEditor *editor, ME_DisplayItem *tp, BOOL keepFirstParaFormat) DECLSPEC_HIDDEN; void ME_DumpParaStyle(ME_Paragraph *s) DECLSPEC_HIDDEN; @@ -207,16 +206,19 @@ BOOL ME_SetSelectionParaFormat(ME_TextEditor *editor, const PARAFORMAT2 *pFmt) D void ME_GetSelectionParaFormat(ME_TextEditor *editor, PARAFORMAT2 *pFmt) DECLSPEC_HIDDEN; void ME_MarkAllForWrapping(ME_TextEditor *editor) DECLSPEC_HIDDEN; void ME_SetDefaultParaFormat(ME_TextEditor *editor, PARAFORMAT2 *pFmt) DECLSPEC_HIDDEN; -void para_num_init( ME_Context *c, ME_Paragraph *para ) DECLSPEC_HIDDEN; -void para_num_clear( struct para_num *pn ) DECLSPEC_HIDDEN; int get_total_width(ME_TextEditor *editor) DECLSPEC_HIDDEN; -void para_mark_rewrap( ME_TextEditor *editor, ME_Paragraph *para ) DECLSPEC_HIDDEN; +ME_Run *para_end_run( ME_Paragraph *para ) DECLSPEC_HIDDEN; +ME_Run *para_first_run( ME_Paragraph *para ) DECLSPEC_HIDDEN; void para_mark_add( ME_TextEditor *editor, ME_Paragraph *para ) DECLSPEC_HIDDEN; void para_mark_remove( ME_TextEditor *editor, ME_Paragraph *para ) DECLSPEC_HIDDEN; +void para_mark_rewrap( ME_TextEditor *editor, ME_Paragraph *para ) DECLSPEC_HIDDEN; ME_Paragraph *para_next( ME_Paragraph *para ) DECLSPEC_HIDDEN; +void para_num_clear( struct para_num *pn ) DECLSPEC_HIDDEN; +void para_num_init( ME_Context *c, ME_Paragraph *para ) DECLSPEC_HIDDEN; ME_Paragraph *para_prev( ME_Paragraph *para ) DECLSPEC_HIDDEN; -ME_Run *para_first_run( ME_Paragraph *para ) DECLSPEC_HIDDEN; -ME_Run *para_end_run( ME_Paragraph *para ) DECLSPEC_HIDDEN; +ME_Paragraph *para_split( ME_TextEditor *editor, ME_Run *run, ME_Style *style, + const WCHAR *eol_str, int eol_len, int paraFlags ) DECLSPEC_HIDDEN; + static inline ME_DisplayItem *para_get_di(ME_Paragraph *para) { return (ME_DisplayItem *)((ptrdiff_t)para - offsetof(ME_DisplayItem, member)); diff --git a/dlls/riched20/para.c b/dlls/riched20/para.c index e9246fa7cf7..7251d1620a6 100644 --- a/dlls/riched20/para.c +++ b/dlls/riched20/para.c @@ -512,40 +512,40 @@ static BOOL ME_SetParaFormat(ME_TextEditor *editor, ME_Paragraph *para, const PA }
/* split paragraph at the beginning of the run */ -ME_DisplayItem *ME_SplitParagraph(ME_TextEditor *editor, ME_DisplayItem *run, - ME_Style *style, const WCHAR *eol_str, int eol_len, - int paraFlags) +ME_Paragraph *para_split( ME_TextEditor *editor, ME_Run *run, ME_Style *style, + const WCHAR *eol_str, int eol_len, int paraFlags ) { ME_Paragraph *new_para = para_create( editor ), *old_para, *next_para; ME_Run *end_run, *next_run; int ofs, i; int run_flags = MERF_ENDPARA;
- if (!editor->bEmulateVersion10) { /* v4.1 */ + if (!editor->bEmulateVersion10) /* v4.1 */ + { /* At most 1 of MEPF_CELL, MEPF_ROWSTART, or MEPF_ROWEND should be set. */ - assert(!(paraFlags & ~(MEPF_CELL|MEPF_ROWSTART|MEPF_ROWEND))); - assert(!(paraFlags & (paraFlags-1))); + assert( !(paraFlags & ~(MEPF_CELL | MEPF_ROWSTART | MEPF_ROWEND)) ); + assert( !(paraFlags & (paraFlags-1)) ); if (paraFlags == MEPF_CELL) - run_flags |= MERF_ENDCELL; + run_flags |= MERF_ENDCELL; else if (paraFlags == MEPF_ROWSTART) - run_flags |= MERF_TABLESTART|MERF_HIDDEN; - } else { /* v1.0 - v3.0 */ - assert(!(paraFlags & (MEPF_CELL|MEPF_ROWSTART|MEPF_ROWEND))); + run_flags |= MERF_TABLESTART | MERF_HIDDEN; } - assert(run->type == diRun); - old_para = &ME_GetParagraph( run )->member.para; + else /* v1.0 - v3.0 */ + assert( !(paraFlags & (MEPF_CELL |MEPF_ROWSTART | MEPF_ROWEND)) ); + + old_para = run->para; assert( old_para->fmt.cbSize == sizeof(PARAFORMAT2) );
/* Clear any cached para numbering following this paragraph */ if (old_para->fmt.wNumbering) para_num_clear_list( editor, old_para, &old_para->fmt );
- new_para->text = ME_VSplitString( old_para->text, run->member.run.nCharOfs ); + new_para->text = ME_VSplitString( old_para->text, run->nCharOfs );
end_run = run_create( style, run_flags ); - ofs = end_run->nCharOfs = run->member.run.nCharOfs; + ofs = end_run->nCharOfs = run->nCharOfs; end_run->len = eol_len; - end_run->para = run->member.run.para; + end_run->para = run->para; ME_AppendString( old_para->text, eol_str, eol_len ); next_para = &old_para->next_para->member.para;
@@ -555,14 +555,14 @@ ME_DisplayItem *ME_SplitParagraph(ME_TextEditor *editor, ME_DisplayItem *run, for (i = 0; i < editor->nCursors; i++) { if (editor->pCursors[i].pPara == para_get_di( old_para ) && - run->member.run.nCharOfs <= editor->pCursors[i].pRun->member.run.nCharOfs) + run->nCharOfs <= editor->pCursors[i].pRun->member.run.nCharOfs) { editor->pCursors[i].pPara = para_get_di( new_para ); } }
/* the new paragraph will have a different starting offset, so update its runs */ - for (next_run = &run->member.run; next_run; next_run = run_next( next_run )) + for (next_run = run; next_run; next_run = run_next( next_run )) { next_run->nCharOfs -= ofs; next_run->para = new_para; @@ -584,7 +584,7 @@ ME_DisplayItem *ME_SplitParagraph(ME_TextEditor *editor, ME_DisplayItem *run, next_para->prev_para = para_get_di( new_para );
/* insert end run of the old paragraph, and new paragraph, into DI double linked list */ - ME_InsertBefore( run, para_get_di( new_para ) ); + ME_InsertBefore( run_get_di( run ), para_get_di( new_para ) ); ME_InsertBefore( para_get_di( new_para ), run_get_di( end_run ) );
/* Fix up the paras' eop_run ptrs */ @@ -651,7 +651,7 @@ ME_DisplayItem *ME_SplitParagraph(ME_TextEditor *editor, ME_DisplayItem *run, ME_PropagateCharOffset( para_get_di( next_para ), eol_len ); editor->nParagraphs++;
- return para_get_di( new_para ); + return new_para; }
/* join tp with tp->member.para.next_para, keeping tp's style; this diff --git a/dlls/riched20/table.c b/dlls/riched20/table.c index 95b0fb0a8a6..876244c9706 100644 --- a/dlls/riched20/table.c +++ b/dlls/riched20/table.c @@ -64,16 +64,16 @@ static ME_DisplayItem* ME_InsertEndParaFromCursor(ME_TextEditor *editor, int paraFlags) { ME_Style *pStyle = ME_GetInsertStyle(editor, nCursor); - ME_DisplayItem *tp; + ME_Paragraph *para; ME_Cursor* cursor = &editor->pCursors[nCursor];
if (cursor->nOffset) run_split( editor, cursor );
- tp = ME_SplitParagraph(editor, cursor->pRun, pStyle, eol_str, eol_len, paraFlags); + para = para_split( editor, &cursor->pRun->member.run, pStyle, eol_str, eol_len, paraFlags ); ME_ReleaseStyle(pStyle); - cursor->pPara = tp; - cursor->pRun = ME_FindItemFwd(tp, diRun); - return tp; + cursor->pPara = para_get_di( para ); + cursor->pRun = run_get_di( para_first_run( para ) ); + return para_get_di( para ); }
ME_DisplayItem* ME_InsertTableRowStartFromCursor(ME_TextEditor *editor) diff --git a/dlls/riched20/undo.c b/dlls/riched20/undo.c index 3f3fd48bebd..5616c64005a 100644 --- a/dlls/riched20/undo.c +++ b/dlls/riched20/undo.c @@ -379,29 +379,29 @@ static void ME_PlayUndoItem(ME_TextEditor *editor, struct undo_item *undo) case undo_split_para: { ME_Cursor tmp; - ME_DisplayItem *this_para, *new_para; + ME_Paragraph *this_para, *new_para; BOOL bFixRowStart; int paraFlags = undo->u.split_para.flags & (MEPF_ROWSTART|MEPF_CELL|MEPF_ROWEND);
cursor_from_char_ofs( editor, undo->u.split_para.pos, &tmp ); if (tmp.nOffset) run_split( editor, &tmp ); - this_para = tmp.pPara; - bFixRowStart = this_para->member.para.nFlags & MEPF_ROWSTART; + this_para = &tmp.pPara->member.para; + bFixRowStart = this_para->nFlags & MEPF_ROWSTART; if (bFixRowStart) { /* Re-insert the paragraph before the table, making sure the nFlag value * is correct. */ - this_para->member.para.nFlags &= ~MEPF_ROWSTART; + this_para->nFlags &= ~MEPF_ROWSTART; } - new_para = ME_SplitParagraph(editor, tmp.pRun, tmp.pRun->member.run.style, - undo->u.split_para.eol_str->szData, undo->u.split_para.eol_str->nLen, paraFlags); + new_para = para_split( editor, &tmp.pRun->member.run, tmp.pRun->member.run.style, + undo->u.split_para.eol_str->szData, undo->u.split_para.eol_str->nLen, paraFlags ); if (bFixRowStart) - new_para->member.para.nFlags |= MEPF_ROWSTART; - new_para->member.para.fmt = undo->u.split_para.fmt; - new_para->member.para.border = undo->u.split_para.border; + new_para->nFlags |= MEPF_ROWSTART; + new_para->fmt = undo->u.split_para.fmt; + new_para->border = undo->u.split_para.border; if (paraFlags) { - ME_DisplayItem *pCell = new_para->member.para.pCell; + ME_DisplayItem *pCell = new_para->pCell; pCell->member.cell.nRightBoundary = undo->u.split_para.cell_right_boundary; pCell->member.cell.border = undo->u.split_para.cell_border; }