[BiDi] Right-to-left Hebrew does not work on Mac

RESOLVED FIXED in mozilla0.9.8

Status

()

Core
Layout: Text
RESOLVED FIXED
17 years ago
10 years ago

People

(Reporter: Herouth Maoz, Assigned: Frank Tang)

Tracking

Trunk
mozilla0.9.8
PowerPC
Mac System 9.x
Points:
---
Dependency tree / graph

Firefox Tracking Flags

(Not tracked)

Details

(URL)

(Reporter)

Description

17 years ago
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:0.9.3+) Gecko/20010821
BuildID:    2001082108

When viewing *any* logical Hebrew page, text renders left-to-right, so, in
effect, only visual Hebrew is supported. Picking ISO-8859-8-I, Windows-1255 or
Visual Hebrew makes no difference. I tried changing my default script from
Hebrew to Roman. I tried restarting without WorldScript I at all. Neither helps.


Reproducible: Always
Steps to Reproduce:
1.View any logical Hebrew page on the web

Actual Results:  It was rendered left-to-right

Expected Results:  Render it bidirectionally.

Comment 1

17 years ago

*** This bug has been marked as a duplicate of 80577 ***
Status: UNCONFIRMED → RESOLVED
Last Resolved: 17 years ago
Resolution: --- → DUPLICATE
(Reporter)

Comment 2

17 years ago
This bug is NOT a duplicate of bug 80577. The other bug complained that, although each different word is displayed correctly, their order is reversed. The current bug informs that, in fact, there is no BiDi at all on the Mac. The Individual words are displayed left-to-right.
Status: RESOLVED → UNCONFIRMED
Resolution: DUPLICATE → ---

Comment 3

17 years ago
No. that bug says that bidi doesn't work on macos. the fact that the summary or 
individual cases don't exactly match doesn't mean that the spirit isn't the 
same.
(Reporter)

Comment 4

17 years ago
I checked the attached documents on bug 80577, and they describe a different 
situation. They describe a situation in which the BiDi algorithm has been 
applied to the text, but produces bad results. In my situation, the BiDi 
algorithm is not applied to the text at all.
As an experienced programmer, this suggests to me that these are two different 
bugs. Perhaps on MacOS 8.5 the BiDi algorithm is enabled, and for some reason 
it was completely disabled for MacOS 9.0. You can see that from the comments 
in that bug as well.

Comment 5

17 years ago
With regard to what might have been enabled before or not: I know for sure that
that in earlier versions of Mozilla it was possible to display numbers
RightToLeft by adding the RightToLeft entities/marks. Example in utf code:
?ÄÆ13579?Ĩ. At the same time the Hebrew text went the wrong way, so it was a
bit strange. But this RTL-ing of number no longer works, as much as I have found
out. It suggests to me that Herouth might be right: 80577 is not the same bug.

Comment 6

17 years ago
Herouth, can you provide a URL and instructions on how this bug can be verified? I 
would like to get this off the unconfirmed list, but I can't read Hebrew so I don't know 
right from wrong.

Comment 7

17 years ago
The page <http://homepage.mac.com/sillijdfiu81j/simple_machebrew_sample.html>
have been updated to clarify that it also relates to this bug report. It now
also features a picture showing how the page looks like in Mac Mozilla (in case
you only have a PC).

Comment 8

17 years ago
I can confirm the behavior described by Leif's URL. Whether this is a duplicate
or not will have to be decided later.
Status: UNCONFIRMED → NEW
Ever confirmed: true

Comment 9

17 years ago
Mass-move all BiDi Hebrew and Arabic qa to me, zach@zachlipton.com. 
Thank you Gilad for your service to this component, and best of luck to you 
in the future.

Sholom. 
QA Contact: giladehven → zach

Comment 10

17 years ago
So, what is going on with this bug? Mozilla isn't worth much if it can't 
display logical web sites...

Comment 11

17 years ago
Leif Halvard Silli:

Can you please update your webpage now that x-mac-hebrew is working so 
that we can see the reversing/ordering problem?

Thank you.
(Reporter)

Comment 12

17 years ago
Since it seems thet Mr. Silli is not responding to Mr. Kaply's request, I hereby suggest a simple HTML file in the ISO-8859-8-i encoding, which shows a Hebrew sentence, and the GIF of how it should look like.

http://www.herouth.f2s.com/hebrew.html
*** Bug 110766 has been marked as a duplicate of this bug. ***

Comment 14

17 years ago
It seems that on mac which is a Bidi System ,
The functions FormatUnicodeText (used in nsTextFrame::PaintUnicodeText) , is reversing 
the text => double reversing .
tricking the below code might solve the problem on mac.

anyway , i see to options.
Plan A:
----------
we should let the mac use its own Bidi capabilities.
and Reverse text only when there is a need.

++>  if text is Right-To-Left & Logical & OS 9 , then 
++>  	aIsOddLevel++;

On OS X , Quickdraw doesnt support Bidi , so Hebrew Rendering
is OK . also the bug 86253 , doesn't appear on OS X ( but it might be back when
Hebrew will be fixed on OS X).

Plan B:
--------
for Bidi/Unicode Drawing , use ATSUI to draw the text . 
with ATSUI we can disable OS Bidi .

From mozilla/gfx/mac/ :
nsUnicodeRenderingToolkit::DrawString()  should call mATSUIToolkit.DrawString()
instead of nsUnicodeRenderingToolkit::DrawTextSegment() 

for example see : nsUnicodeRenderingToolkit :: ATSUIFallbackDrawChar

Nissan.
-----------------------------------
/mozilla/layout/base/src/nsBidiPresUtils.cpp

nsBidiPresUtils::FormatUnicodeText (...)  
 inside...
	if (aIsBidiSystem) {
	    if ( (CHARTYPE_IS_RTL(aCharType)) ^ (aIsOddLevel) )
	      doReverse = PR_TRUE;
	  }
	}
later...
	if (doReverse) {
	      rv = mBidiEngine->WriteReverse(aText, aTextLength, buffer,
	                    NSBIDI_REMOVE_BIDI_CONTROLS | NSBIDI_DO_MIRRORING, &newLen);
	      if (NS_SUCCEEDED(rv) ) {
	        aTextLength = newLen;
	        nsCRT::memcpy(aText, buffer, aTextLength * sizeof(PRUnichar) );
	      }
	    }

Comment 15

17 years ago
Below is a part of an email a gollege of mine sent mkaply. I think it might 
help (re a similar bug):

=== start email ===

Someone pointed me to this bug report in bugzilla and I have a possible 
solution to the problems mentioned:
You wrote:
>
> From what we know, Bidi support on the Mac is a tricky because there
> is no way to tell the OS NOT to do anything with Arabic/Hebrew text
> that it is given - it always tries to reverse/shape it.
>

There is a way, actually. There are spacial flags to control this 
behaviour you can access them through Get/SetScriptVariable
with the smScriptFlags selector
The flags are
smsfForms - turn the contextual forms on and off
smsfLigatures - turn off ligature formation
smsfReverse - turn off the reordering (this flag is used for line 
breaking as well (you need to switch reordering off for pixelToChar to 
give you the correct results))
There is complete documentation in apple's site (I guess you can figure 
out the URL... :->).
=== end email ===

Comment 16

17 years ago
Thanks Shoshannah ,

Here is an example for disabling reordering of RTL text :
	long		aSaveFlags,aFlags;
	short	aScriptCode;
	bool		isReverse;
   	int		aHebrewFont  = 18432;	// Arial Hebrew
		
	aScriptCode = FontToScript(aHebrewFont);
	TextFont(aHebrewFont);
	
	aSaveFlags = aFlags = GetScriptVariable (aScriptCode,smScriptFlags);
	
	isReverse = (aFlags>>smsfReverse) & 1;
	
	if (isReverse)	{
		aFlags &= ~(1 << smsfReverse);
		SetScriptVariable(aScriptCode,smScriptFlags,aFlags);
	}
	
	::MoveTo(100,100);
	::DrawString("\pעברית");
	
	if (isReverse)	SetScriptVariable(aScriptCode,smScriptFlags,aSaveFlags);
	
(Assignee)

Updated

17 years ago
Blocks: 115710
(Assignee)

Comment 17

17 years ago
We probably need to fix bug 116976 and bug 116982 first before fixing others. On
MacOS X w/o Hebrew script support (but have Hebrew font), fixing bug 116976 and
116982 make it work. We may need to twick the script flag for MacOS 9.
Assignee: mkaply → ftang
Depends on: 116976, 116982
(Assignee)

Updated

17 years ago
Status: NEW → ASSIGNED
Target Milestone: --- → mozilla0.9.8
(Assignee)

Comment 18

17 years ago
I believe the following three patch should fix most mac os hewbrew problem

big endian issue in nsFrame.cpp
see latest patch in http://bugzilla.mozilla.org/show_bug.cgi?id=116976

big endian issue in nsBidiImp.cpp 
http://bugzilla.mozilla.org/attachment.cgi?id=62917&action=view

turn off hebrew reordering and do not report hint on mac gfx
http://bugzilla.mozilla.org/attachment.cgi?id=62920&action=view

Comment 19

17 years ago
Great moves .
but turnning off hebrew reordering has system wide effect under OS 9.
screen updates of other applications at background can be hurt .

i dont see where you are enabling it again ( this is vital )

lets say you enabled hebrew in the destructor of nsUnicodeRenderingToolkit
is it possible that WaitNextEvent will be called while hebrew is disabled ?
if so , it will be better to disable hebrew just before the drawing , and enable it
a right after.
(Assignee)

Comment 20

17 years ago
>Great moves .
>but turnning off hebrew reordering has system wide effect under OS 9.
>screen updates of other applications at background can be hurt .
>
>i dont see where you are enabling it again ( this is vital )
Well... then we can do what we did to Arabic. Complete remove the QD code path
and use ATSUI only. This will make it work the same way as MacOS X.

Comment 21

17 years ago
1.Can you point me to the place where Hebrew and Arabcic are branched to different drawing 
method ?
2. ATSUI is bidi support by default . Are you going to add Bidi Directions format chars to disable reordering ?
(Assignee)

Comment 22

17 years ago
>1.Can you point me to the place where Hebrew and Arabcic are branched to
different drawing 
method ?

several places. smontague can show you.
The good thing is once we take this approach. The code path is similar to
non-BIDI window and simplified the bug fixing.

>2. ATSUI is bidi support by default . Are you going to add Bidi Directions
format chars to disable reordering ?

I know, but we are not using ATSUI as main stream drawing routines on Mac yet.
(dur to worst case performance issue)

we currently use ATSUI as fallback drawing method draw one character at a time
from left to right. 
(Assignee)

Comment 23

17 years ago
this should be fixed right now.
Status: ASSIGNED → RESOLVED
Last Resolved: 17 years ago17 years ago
Resolution: --- → FIXED
(Assignee)

Updated

17 years ago
Blocks: 104060
(Assignee)

Updated

17 years ago
No longer blocks: 104060

Updated

10 years ago
Component: Layout: BiDi Hebrew & Arabic → Layout: Text
QA Contact: zach → layout.fonts-and-text
You need to log in before you can comment on or make changes to this bug.