Subject: bug#22250: 25.0.50; Eww fails to break RTL paragraph

From: Eli Zaretskii <[email-masked]>
Date: Mon, 28 Dec 2015 05:32:34 +0200

> From: Benjamin Riefenstahl <[email-masked]>
> Cc: [email-masked], Lars Ingebrigtsen <[email-masked]>
> Date: Mon, 28 Dec 2015 00:09:51 +0100
> 
> I experimented a bit and I can't quite exactly say what is needed to
> cause the problem.  The same file/URL has it and than again not when I
> try again.  It seems that "g" usually fixes it, while "G RET" usually
> reproduces it, if it has happend with that particular file/URL before.
> It also seems that the length of the URL has an impact, probably because
> it is shown at the top of the frame and during loading of the URL (as in
> "Loading http[...]").  It seems to require that the URL is longer than
> the frame width.
> 
> I have no sure recipe using a file, but I have something based on a
> simple 10-line HTTP server look-alike, see attachments.  Put the files
> in some directory, make the script executable, execute it, and call EWW
> with the URL
> http://127.0.0.1:1234/abc/abc/abc/abc/abc/abc/abc/abc/abc/abc/abc/abc/.
> If it looks good on the first call, try "G RET", than it reliably
> exhibits the problem for me.  I even get it with "emacs -Q -nw".  Note
> that the script depends on netcat and different versions of netcat use
> different options to run a server, so the script may not work as-is for
> you.

Does the patch below fix the problem?

Lars, we don't seem to have a test suite for eww or shr, so if you
have some layout tests, including with the indentation you explained
above, could you try with this patch and see if anything breaks?

Thanks.

diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index c28e0b8..f7da3e9 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -244,7 +244,8 @@ shr-insert-document
                                      (if (and (null shr-width)
                                               (not (shr--have-one-fringe-p)))
                                          (* (frame-char-width) 2)
-                                       0))))))
+                                       0)))))
+        bidi-display-reordering)
     (shr-descend dom)
     (shr-fill-lines start (point))
     (shr-remove-trailing-whitespace start (point))