Well first of all, if there are bugs with the underlying richedit,On Fri, Jul 04, 2014 at 07:00:16PM +0800, Jactry Zeng wrote:
> A few weeks ago, I have made some tests about this problem. And it seem is an
> unimplement feature of Rich edit control and should not be fixed in ME_GetTextW
> or ITextSeletction::GetText simply:
>
> 1. end-of-story is different from end-of-paragraph
> From document of ITextDocument::GetStoryCount: Rich edit controls have only one
> story.[1]
> So ‘story’ may is an unit like 'paragraph' in Rich edit control. We may need
> add a MERF_ENDSTORY to implement it.[2]
>
> 2. What does the end-of-story looks like?
> When we run the wordpad with native riched20, we can use ‘ctrl + shitf + →’ to
> select the ‘space’ at the end of the Rich edit control. But we cannot set the
> cursor behind it.(a picture here[3])
> And wine’s riched20 didn’t implement this ‘space’. This 'space' may is the end-
> of-story.
>
> A crash will happen when we copy the ‘space’ from a native Rich edit control to
> a builtin one.(backtrace.txt[4])
>
> BTW, there is a know bug of EM_SETSEL: cannot select the last character of Rich
> edit control.[5]
>
> 3.
> From the last paragraph of this blog: http://blogs.msdn.com/b/murrays/archive/
> 2008/11/22/paragraphs-and-paragraph-formatting.aspx
> It is sure there is a final EOP in a Rich edit control.
>
> There seems to be every indication that we should implement the final EOP of
> Rich edit control rather than just append a ‘\r’ in ITextSelection::GetText.
> So I just let a FIXME comment there. I am not sure if I am right.
> Do you have any suggestion?
these need fixing first. Note, that every richedit consists of at
least one paragraph (and hence one final EOP).
I was suggesting adding to ME_GetTextW the ability to append a '\r' if it
were passed an appropriate flag, of course this wouldn't be the behaviour
used for its current callers. There's already a diTextEnd item in the
display list to mark the end of the document, so there should be no
need to add a new end-of-story marker. Most of the iterator functions
stop when this is reached, so you tend not to actually see it, but
that shouldn't be a problem.
Huw.