]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed wxHtmlWindow::SelectionToText() to correctly insert newlines after single-cell...
authorVáclav Slavík <vslavik@fastmail.fm>
Wed, 15 Oct 2008 15:43:45 +0000 (15:43 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Wed, 15 Oct 2008 15:43:45 +0000 (15:43 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56334 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/html/htmlwin.cpp

index 3ef8f9a1f9e6493f1d89623aad7d0e02d5e367db..042e4fbbf2cb05c5039394ba5b347cbb0f75e64c 100644 (file)
@@ -890,21 +890,27 @@ wxString wxHtmlWindow::DoSelectionToText(wxHtmlSelection *sel)
         return wxEmptyString;
 
     wxClientDC dc(this);
-
-    const wxHtmlCell *end = sel->GetToCell();
     wxString text;
-    wxHtmlTerminalCellsInterator i(sel->GetFromCell(), end);
-    if ( i )
-    {
-        text << i->ConvertToText(sel);
-        ++i;
-    }
-    const wxHtmlCell *prev = *i;
+
+    wxHtmlTerminalCellsInterator i(sel->GetFromCell(), sel->GetToCell());
+    const wxHtmlCell *prev = NULL;
+
     while ( i )
     {
-        if ( prev->GetParent() != i->GetParent() )
-            text << _T('\n');
-        text << i->ConvertToText(*i == end ? sel : NULL);
+        // When converting HTML content to plain text, the entire paragraph
+        // (container in wxHTML) goes on single line. A new paragraph (that
+        // should go on its own line) has its own container. Therefore, the
+        // simplest way of detecting where to insert newlines in plain text
+        // is to check if the parent container changed -- if it did, we moved
+        // to a new paragraph.
+        if ( prev && prev->GetParent() != i->GetParent() )
+            text << '\n';
+
+        // NB: we don't need to pass the selection to ConvertToText() in the
+        //     middle of the selected text; it's only useful when only part of
+        //     a cell is selected
+        text << i->ConvertToText(sel);
+
         prev = *i;
         ++i;
     }