From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: Basic WYSIWYG printing in GNU Emacs (Arabic & Hebrew) Date: Thu, 12 Aug 2021 09:29:24 +0300 Message-ID: <83bl63dvln.fsf@gnu.org> References: <831r71h5jv.fsf@gnu.org> <831r70fc0b.fsf@gnu.org> <83k0krex7n.fsf@gnu.org> Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="5335"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Anand Tamariya Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Aug 12 08:30:30 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mE4EX-00019b-HI for ged-emacs-devel@m.gmane-mx.org; Thu, 12 Aug 2021 08:30:29 +0200 Original-Received: from localhost ([::1]:38460 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mE4EU-0006L2-TQ for ged-emacs-devel@m.gmane-mx.org; Thu, 12 Aug 2021 02:30:26 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:38134) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mE4Dl-0005eK-HD for emacs-devel@gnu.org; Thu, 12 Aug 2021 02:29:41 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:57402) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mE4Dl-000805-AK; Thu, 12 Aug 2021 02:29:41 -0400 Original-Received: from 84.94.185.95.cable.012.net.il ([84.94.185.95]:4935 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mE4Dk-0002Bw-TY; Thu, 12 Aug 2021 02:29:41 -0400 In-Reply-To: (message from Anand Tamariya on Thu, 12 Aug 2021 10:54:41 +0530) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:272343 Archived-At: > From: Anand Tamariya > Date: Thu, 12 Aug 2021 10:54:41 +0530 > Cc: emacs-devel@gnu.org > > So if the entire buffer uses just a single font, like TUTORIAL.he > does, you do the test only once, at the first character of the buffer > text? But that could produce incorrect results, because the text > further into the buffer could have both RTL and LTR paragraphs > intermixed, and the correct display will show each of these at their > correct base direction. For example, most of the paragraphs in > TUTORIAL.he have right-to-left base direction, but the last paragraph, > with the Local Variables, is left-to-right, so its display starts at > the left edge of the window. > > Intermixed paragraphs are fine though mixed text is slightly problematic (see attachment). Yes, the problems with rendering mixed text are to be expected with such simplistic handling of bidirectional text. > The window positioning information can only be obtained for the part > of the buffer text actually visible in a window; for buffer positions > outside of the viewport posn-at-point will give you nil. How do you > work around this limitation to allow printing text of the entire > buffer? > > You are correct with your doubts. And unfortunately, I don't have all the answers. That's why in all my > communication I've always maintained "Basic" WYSIWYG. Maybe somebody else can improve upon the > algorithm. OK, thanks. I think a better way of doing this job is to implement a PS display back-end, similar to the X, w32, and NS back-ends we have now (see xterm.c, w32term.c, nsterm.m), but one which would emit PS code to print stuff on a paper page of known dimensions, instead of showing it on the screen. Then the bidi reordering will be taken care of by the display code without any additional efforts, and we will be free from the limitations of having the buffer displayed in its entirety in a window etc. Unfortunately, this means most of the job will have to be in C, not in Lisp. Since you know much more than I do about PostScript and PS printers, may I ask you a question: if one sends RTL text embedded in a PS program to a PS printer, does the printer have the capability to reorder RTL text when it prints it? That is, if you send a string of RTL characters that way, are they printed in reverse order? Or do PS printers need the text in the "visual" order, already reordered for display?