German character ß - buggy capitalization (text-transform: uppercase or capitalize)

RESOLVED FIXED in mozilla1.8alpha2

Status

()

Core
Layout: Text
RESOLVED FIXED
16 years ago
12 years ago

People

(Reporter: rbs, Assigned: rbs)

Tracking

({intl, testcase})

Trunk
mozilla1.8alpha2
intl, testcase
Points:
---

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(4 attachments, 7 obsolete attachments)

(Assignee)

Description

16 years ago
With the tip of the tree,  consider the following document (note the whitespace
' ' in the second case):

<html>
<head><title>TextTransformer: Capitalize Bug</title></head>
<body>
  <span style="text-transform: capitalize;">&szlig;</span><br>
  <span style="text-transform: capitalize;">&szlig; </span>
</body>
</html>

1)
 Expected results: the two lines should render identically. 
 Actual results: The first line renders as 'S', while the second line renders as
'SS'.

2)
When setting an assertion in nsFontMetricsWin::FindFont() -- this is how I
discovered the bug BTW -- I noted that the Unicode point of the transformed
character is not  that of 'S', suggesting that a byte isn't properly cleared
somewhere -- but I am not sure.  Anyway , with the above document, placing an
NS_ASSERTION(aChar<0xFF,"Unexpected") will catch a value that seems to come from
no where in the transformed document.

Comment 1

16 years ago
Note that the second line, although correctly capitalized, is missing the
trailing space. It is a quirk of the German language that the capital form of
&szlig; is "SS", i.e. *two* characters. Looks like the last charcter of the
string gets pushed over the edge of the world.
(Assignee)

Comment 2

16 years ago
Created attachment 51182 [details]
testcase above as an attachment

Comment 3

16 years ago
-->attinasi

Comment 4

16 years ago
-->attinasi
Assignee: karnaze → attinasi

Updated

16 years ago
Target Milestone: --- → mozilla1.2
->il8n first, since there seems to be unicode character trouble.
Assignee: attinasi → yokoyama
Component: Layout → Internationalization
Keywords: testcase
QA Contact: petersen → ruixu

Updated

16 years ago
Keywords: intl
QA Contact: ruixu → ylong

Comment 6

16 years ago
reassign it to myself.
Assignee: yokoyama → shanjian

Comment 7

16 years ago
the code handle this is in
http://lxr.mozilla.org/seamonkey/source/layout/html/base/src/nsTextTransformer.cpp

946           if(kSzlig == *result)
947           {
948               if ((prevBufferPos + wordLen + 1) >= mTransformBuf.mBufferLen) {
949                 mTransformBuf.GrowBy(128);
950                 result = &mTransformBuf.mBuffer[prevBufferPos];
951               }
952               PRUnichar* src = result +  wordLen;
953               while(src>result) 
954               {
955                   *(src+1) = *src;
956                   src--;
957               }
958               result[0] = PRUnichar('S');
959               result[1] = PRUnichar('S');
960               wordLen++;
961           }
962           break;

Comment 8

16 years ago
Saito san, you have developed some experience with transformation. Would you
mind take a look at this bug?
Status: NEW → ASSIGNED

Comment 9

16 years ago
I found two problems, a  point one is a small problem, but point two needs to be
careful.

point one:
--- /tmp/nsTextTransformer.cpp  Mon May 13 11:16:11 2002
+++ layout/html/base/src/nsTextTransformer.cpp  Mon May 13 11:16:42 2002
@@ -1055,8 +1055,8 @@
               PRUnichar* src = result +  wordLen;
               while(src>result) 
               {
-                  *(src+1) = *src;
                   src--;
+                  *(src+1) = *src;
               }
               result[0] = PRUnichar('S');
               result[1] = PRUnichar('S');

point two:
--- /tmp/nsTextFrame.cpp        Mon May 13 11:16:11 2002
+++ layout/html/base/src/nsTextFrame.cpp        Mon May 13 11:17:17 2002
@@ -1581,9 +1581,11 @@
     if (contentLen > n) {
       contentLen = n;
     }
+#if 0
     if (wordLen > n) {
       wordLen = n;
     }
+#endif
     inWord = PR_FALSE;
     if (isWhitespace) {
       if ('\t' == bp[0]) {

About whether side effects arises or not, it cannot immediately answer.

Comment 10

16 years ago
A previous patch was changed.

--- /tmp/nsTextTransformer.cpp  Mon May 13 11:16:11 2002
+++ layout/html/base/src/nsTextTransformer.cpp  Mon May 13 11:57:20 2002
@@ -1052,7 +1052,7 @@
                 mTransformBuf.GrowBy(128);
                 result = &mTransformBuf.mBuffer[prevBufferPos];
               }
-              PRUnichar* src = result +  wordLen;
+              PRUnichar* src = result +  wordLen - 1;
               while(src>result) 
               {
                   *(src+1) = *src;
--- /tmp/nsTextFrame.cpp        Mon May 13 11:16:11 2002
+++ layout/html/base/src/nsTextFrame.cpp        Mon May 13 11:52:38 2002
@@ -1561,7 +1561,7 @@
   while (0 != n) {
     PRUnichar* bp;
     PRBool isWhitespace, wasTransformed;
-    PRInt32 wordLen, contentLen;
+    PRInt32 wordLen, contentLen, addedLen;
 
 #ifdef IBMBIDI
     wordLen = (mState & NS_FRAME_IS_BIDI) ? mContentOffset + mContentLength :
-1;
@@ -1578,12 +1578,15 @@
 #endif // IBMBIDI
       break;
     }
+    addedLen = wordLen - contentLen;
     if (contentLen > n) {
       contentLen = n;
     }
     if (wordLen > n) {
       wordLen = n;
     }
+    if (addedLen > 0)
+      wordLen += addedLen;
     inWord = PR_FALSE;
     if (isWhitespace) {
       if ('\t' == bp[0]) {

Comment 11

16 years ago
Created attachment 83302 [details] [diff] [review]
v1 patch

A previous patch was changed again.

Comment 12

16 years ago
Comment on attachment 83302 [details] [diff] [review]
v1 patch

>-              PRUnichar* src = result +  wordLen;
>+              PRUnichar* src = result +  wordLen - 1;

Maybe you can add a comment explaining why it needs to be -1, so people don't
accidently revert this or anything?

Comment 13

16 years ago
Sorry, there was no explanation.
If a copy is begun from "result + wordLen", it will copy too many 1 word.
(Assignee)

Comment 14

16 years ago
I applied your patch. The two 'SS' show up. But I am still hitting the assertion
that I mentioned in point 2 of my opening comment 0. To set the assertion, just
do the following and visit the testcase (the assertion is weird because the
testcase should internally be all plain ASCII after transformation).

Index: nsFontMetricsWin.cpp
===================================================================
RCS file: /cvsroot/mozilla/gfx/src/windows/nsFontMetricsWin.cpp,v
retrieving revision 3.167
diff -u -r3.167 nsFontMetricsWin.cpp
--- nsFontMetricsWin.cpp        2 May 2002 22:24:59 -0000       3.167
+++ nsFontMetricsWin.cpp        14 May 2002 04:28:19 -0000
@@ -3136,6 +3136,7 @@
 nsFontWin*
 nsFontMetricsWin::FindFont(HDC aDC, PRUint32 aChar)
 {
+NS_ASSERTION(aChar<0xFF, "Unexpected");
   nsFontWin* font = FindUserDefinedFont(aDC, aChar);
   if (!font) {
     font = FindLocalFont(aDC, aChar);

Comment 15

16 years ago
In testcase, it is called twice by making 'a' into an argument 
from "nsFontMetricsGTK::Init()", since there are two lines.

nsFontMetricsGTK::Init()

  mWesternFont = FindFont('a');
  if (!mWesternFont) {
    return NS_ERROR_FAILURE;
  }

The normal motion for displaying a text is seemed.
It is anxious in whether it is an answer.
(Assignee)

Comment 16

16 years ago
What changes did you make specifically?

[There are usually two lookups of fonts (one for measuring, and another one for
drawing -- but the second lookup shouldn't/doesn't go back again to FindFont()
because the loaded fonts are cached)]

Comment 17

16 years ago
Even if there was nothing between <body> and </body>, 2 times FindFont('a') was
called.
Therefore, condition cannot be checked.
I tested by the version 0.9.8 on NetBSD.

(Assignee)

Comment 18

16 years ago
That might happen if you are on a non-Latin platform (e.g., to display other UI 
elements such as the status msg which might need to lookup other fonts).

Anyway, what is of interest is to make sure that the transformed document is 
clean -- which is what my testing is aimed at verifying. Could you try a 
JavaScript example to avoid external effects? e.g, have a document with this 
(warning: this is a pseudo-code for the idea):

<style>
.caps {
  text-transform: capitalize;
}
</style>
[...]
<body onload="get(id1).class='caps'; get(id2).class='caps';">
  <span id="id1">&szlig;</span><br>
  <span id="id2">&szlig; </span>
</body>

(and the assertion)
(Assignee)

Comment 19

16 years ago
Using an onclick='...' once the page is done loading is better in this case.

Comment 20

16 years ago
Although it thinks that it is not related to the error condition,
please add and test a patch.

--- /tmp/nsTextTransformer.cpp  Wed May 15 10:06:41 2002
+++ nsTextTransformer.cpp       Wed May 15 10:06:52 2002
@@ -871,7 +871,7 @@
   PRBool isWhitespace = PR_FALSE;
   PRBool isBreakChar = PR_FALSE;
   PRUnichar* result = nsnull;
-  PRBool prevBufferPos;
+  PRInt32 prevBufferPos;
   PRBool skippedWhitespace = PR_FALSE;
   PRUnichar firstChar = mfirstChar;
 
@@ -1061,6 +1061,7 @@
               result[0] = PRUnichar('S');
               result[1] = PRUnichar('S');
               wordLen++;
+              mBufferPos++;
           }
           break;
         case NS_STYLE_TEXT_TRANSFORM_LOWERCASE:
@@ -1083,6 +1084,7 @@
               }
               ReplaceGermanSzligToSS(result, wordLen, szligCnt);
               wordLen += szligCnt;
+              mBufferPos += szligCnt;
             }
           }
           break;

Comment 21

16 years ago
Saito, I tried your patch and did some investigation. What I found is the same
as yours. So add the change you made in #20 and post a new patch. That should be
the complete fix. 

Comment 22

16 years ago
Created attachment 83803 [details] [diff] [review]
patch v2

Since the patch already exist in my local tree, so I post this patch for saito.
Attachment #83302 - Attachment is obsolete: true
(Assignee)

Comment 23

16 years ago
OK, I applied the patch and the test-assertion in FindFont() didn't fire 
anymore. However, when this time I try to select the text, I am hitting an 
assertion in nsTextFrame:

        NS_ASSERTION(i<= mContentLength, "offset we got from binary search is 
messed up");

[top of the stack trace]
nsDebug::Assertion(const char * 0x03014ce4, const char * 0x03014cd0, const char 
* 0x03014c8c, int 3531) line 274 + 13 bytes
nsTextFrame::GetPosition(nsTextFrame * const 0x036be944, nsIPresContext * 
0x03337108, const nsPoint & {...}, nsIContent * * 0x0012f47c, int & 2, int & 2) 
line 3531 + 40 bytes
nsTextFrame::GetContentAndOffsetsFromPoint(nsTextFrame * const 0x036be944, 
nsIPresContext * 0x03337108, const nsPoint & {...}, nsIContent * * 0x0012f47c, 
int & 2, int & 2, int & 0) line 3563 + 35 bytes
nsSelection::HandleDrag(nsSelection * const 0x036e4510, nsIPresContext * 
0x03337108, nsIFrame * 0x036be944, nsPoint & {...}) line 2651 + 56 bytes
nsFrame::HandleDrag(nsFrame * const 0x036be944, nsIPresContext * 0x03337108, 
nsGUIEvent * 0x0012f8cc, nsEventStatus * 0x0012f6d8) line 1432
nsFrame::HandleEvent(nsFrame * const 0x036be944, nsIPresContext * 0x03337108, 
nsGUIEvent * 0x0012f8cc, nsEventStatus * 0x0012f6d8) line 715 + 27 bytes
PresShell::HandleEventInternal(nsEvent * 0x0012f8cc, nsIView * 0x0347a8a0, 
unsigned int 1, nsEventStatus * 0x0012f6d8) line 6130 + 38 bytes
PresShell::HandleEvent(PresShell * const 0x03682c24, nsIView * 0x0347a8a0, 
nsGUIEvent * 0x0012f8cc, nsEventStatus * 0x0012f6d8, int 1, int & 1) line 6038 + 
25 bytes

Comment 24

16 years ago
Please let me know.
Two problems have that there are many characters displayed rather than the
original string.
The kSZLIG is 0x00DF and it is converted to "SS".

1, When "SS" is selected, the first 'S' reverses.
   Should "SS" reverse?
2, Although it cannot paste now, but if it was able to do,
   is the string pasted "the code of kSZLIG" or "SS"?

Comment 25

16 years ago
What you see should be what you got. In your case, we should paste SS instead of
0xdf. 

Comment 26

16 years ago
Created attachment 84735 [details] [diff] [review]
patch v3

Although it may be hard to accept, I am pleased if you can evaluate.
The following problems remain.

1, Only one of the two characters of "SS" will be able to select.
2,
(Assignee)

Comment 27

16 years ago
This patch is indeed hard to swallow (I appreciate your digging though. This is 
a tough bug in a tough a area).

=============
The change in the serializer isn't a good one because if we pursue the same 
logic, a capitalized text would have to be serialized as capitalized. This would 
make the whole serialization process to be dependent on CSS. It isn't something 
to do.

=============
Similarly, the CSS-related dependency isn't a good thing to add in 
nsTextFragment.

=============
The change in the selection code looks also troublesome because the
back-end of the selection is DOM-based (using the range spec that is independent 
of the style). For example the selection can say that the first character is 
logically selected, and it should be up to the associated nsTextFrame to 
graphically render that character as a selected 'SS' (or whatever).

         rv = frameSelection->LookUpSelection(content, mContentOffset, 
-                              mContentLength , &details, PR_FALSE);
+                              mContentLength + addedLength , &details, 
PR_FALSE);

=============
   *aTextLen = textLength;
+
+  if (aAddedLen)
+    *aAddedLen = addedWordLen;
+  // Get the text fragment
+  nsCOMPtr<nsITextContent> tc = do_QueryInterface(mContent);
+  const nsTextFragment* frag = nsnull;
+  if (tc) {
+    tc->GetText(&frag);
+    ((nsTextFragment*) frag)->SetAddedLength(addedWordLen);
+  }
+

I suggest you try to re-work the entire patch with the mindset of retaining 
mContentLength (which reflects the exact portion of the DOMText associated to 
the nsTextFrame) and using aTextLen that includes the addedWordLen, i.e.:

   *aTextLen = textLength + addedWordLen;

and from there on, see how things go.

=============
Having 'SS' to paste as the single 0xDF (coming from the original DOM) when 
selected is acceptable IMO.

Comment 28

16 years ago
Created attachment 84886 [details] [diff] [review]
patch v4

A few was rewritten based on your advice.
Isn't the change to the following files accepted too?

content/shared/public/nsTextFragment.h
content/shared/src/nsTextFragment.cpp
content/base/src/nsXMLContentSerializer.h
content/base/src/nsXMLContentSerializer.cpp

Comment 29

15 years ago
smontagu:
Wanna take this bug ?

Comment 30

14 years ago
*** Bug 185569 has been marked as a duplicate of this bug. ***

Comment 31

14 years ago
Updating summary to be more findable.
Summary: German character &szlig; - buggy capitalization → German character &szlig; - buggy capitalization (text-transform: uppercase or capitalize)

Comment 32

13 years ago
If there is no solution for the problem, i would ask to leave the "ß" (&szlig;)
un-transformed. This is way more readable for germans than cutting off the last
letter of the line (in addition this is how other browsers are handling the
&szlig;, so germans are "used" of it).

Comment 33

13 years ago
Comment from Austria, may be nitpicking: the correct capitalization of &szlig;
is "SZ" (the "sharp s" is a ligature for sz, as the entity name suggests),
although "SS" is commonly used.
In the old days of the typewriter, &szlig; was always typed as sz an hence
capitalized as SZ.
Perhaps the SS/SZ is more a cultural issue: the recent spelling reform replaced
 many occurences of ß (&szlig;) by a double-s (ss).

I agree with #32 , better not have the ß capitalized at all rather than have it
eating innocent letters ;-), even if it looks kinda ugly.

Comment 34

13 years ago
shanjian is no longer working on mozilla for 2 years and these bugs are still
here. Mark them won't fix. If you want to reopen it, find a good owner first. 
Status: ASSIGNED → RESOLVED
Last Resolved: 13 years ago
Resolution: --- → WONTFIX
(Assignee)

Updated

13 years ago
Status: RESOLVED → REOPENED
Resolution: WONTFIX → ---
(Assignee)

Comment 35

13 years ago
reassigning into the Layout: Font & Text bucket.
Assignee: shanjian → nobody
Status: REOPENED → NEW
Component: Internationalization → Layout: Fonts and Text
QA Contact: amyy → layout.fonts-and-text

Comment 36

13 years ago
*** Bug 286923 has been marked as a duplicate of this bug. ***

Comment 37

13 years ago
Created attachment 178728 [details] [diff] [review]
test patch
Attachment #83803 - Attachment is obsolete: true
Attachment #84735 - Attachment is obsolete: true
Attachment #84886 - Attachment is obsolete: true

Comment 38

13 years ago
Created attachment 178729 [details]
testcase for patch

Comment 39

13 years ago
Created attachment 178731 [details]
screen shot for patch

I defined a new class "nsAutoInfoBuffer". This new class is used in order to
perform conversion with the position of a text&#12288;and the index of
contents.

Comment 40

13 years ago
Created attachment 179051 [details] [diff] [review]
patch
Attachment #178728 - Attachment is obsolete: true

Updated

13 years ago
Attachment #179051 - Flags: review?(rbs)

Comment 41

13 years ago
I posted a test patch (attachment 179351 [details] [diff] [review]) by extending this patch.

Comment 42

13 years ago
(In reply to comment #41)
> I posted a test patch (attachment 179351 [details] [diff] [review] [edit]) by extending this patch.

I posted a test patch (attachment 179351 [details] [diff] [review]) to Bug 164700.

Comment 43

13 years ago
*** Bug 288932 has been marked as a duplicate of this bug. ***
(Assignee)

Comment 44

13 years ago
Comment on attachment 179051 [details] [diff] [review]
patch

This patch is too complex. Thanks for your digging and persistence. I am going
to attach the right fix so that we can lay this problem to rest.
Attachment #179051 - Flags: review?(rbs) → review-
(Assignee)

Comment 45

13 years ago
Created attachment 179689 [details] [diff] [review]
proposed fix

1. nsTextTransformer::GetNextWord()

[note: 
prevBufferPos = last position of the cursor. 
mBufferPos = where the cursor has moved to (and where we might continue next
time)]

So, when the szlig is about to expand into SS somewhere in between, one has to
open-up from the _end_ of the buffer (mBufferPos), not half-way in |wordlen|.
Otherwise, we potentially overwrite things, leading to garbage and the
assertion that I mentionned in comment 0 and comment 14.

2. nsTextFrame::PrepareUnicodeText()

A CVS archeology (bonsai) showed that that bit of code was added by kipp for
::first-letter. Hence, it might as well be in a relevant |if| so as not to chop
the unrelated 'SS'.
Assignee: nobody → rbs
Attachment #179051 - Attachment is obsolete: true
Status: NEW → ASSIGNED
Attachment #179689 - Flags: superreview?(roc)
Attachment #179689 - Flags: review?(roc)
(Assignee)

Comment 46

13 years ago
FYI, here's is kipp's checkin I alluded to:
http://bonsai.mozilla.org/cvsview2.cgi?diff_mode=context&whitespace_mode=show&root=/cvsroot&subdir=mozilla/layout/generic&command=DIFF_FRAMESET&file=nsTextFrame.cpp&rev2=1.34&rev1=1.33

Comment 47

13 years ago
rbs, the gap generated with the selection or copy/paste of the displaied texts
containing szlig(SS) can not be fixed by your changes.
(Assignee)

Comment 48

13 years ago
Which particular gap are you referring to? Care to apply the patch and try it
out? I don't get a gap when selecting and doing a copy-paste. All I get is the
single original (uncapitalized) &szlig; (not the double SS). That seems fine to
me because the selection gives the orignal unstyled text in other contexts.

Comment 49

13 years ago
I applied attachment 179689 [details] [diff] [review] and resulted as follows.

With |SSXYZ| displayed at the end of attachment 178729 [details], |YZ| cannot be selected.
A selection of only |X| selects |XYZ|. Furthermore, |z| will be copied if it
copies/pastes.
Target Milestone: mozilla1.2alpha → M1

Updated

13 years ago
Target Milestone: M1 → mozilla1.8alpha2
(Assignee)

Comment 50

13 years ago
Created attachment 179848 [details] [diff] [review]
updated patch to fix the selection

Updated patch to address saito's comment about the selection (saito, care to
check that it satisfies your concerns?).

The patch updates the mapping indices between the content and the transformed
buffer. The &szlig; had to be mapped to 'SS'. This requires to recover the
position of &szlig; in the original content. I was therefore forced to
introduce a helper nsTextTransformer::GetContentCharAt(). With this fix, 'SS'
is nicely treated as a single unit -- you can't select in between. And so,
ambiguities are avoided.
(Assignee)

Updated

13 years ago
Attachment #179689 - Attachment is obsolete: true
Attachment #179848 - Flags: superreview?(roc)
Attachment #179848 - Flags: review?(roc)
(Assignee)

Updated

13 years ago
Attachment #179689 - Flags: superreview?(roc)
Attachment #179689 - Flags: review?(roc)

Comment 51

13 years ago
My tests for selection, copy/paste and string search were done successfully. 
I think that the following modification is useful for optimization.

+          while (--i >= 0) {
+            *indexp++ = strInx++;
+            if (textTransform == NS_STYLE_TEXT_TRANSFORM_UPPERCASE ||
+                textTransform == NS_STYLE_TEXT_TRANSFORM_CAPITALIZE) {
+              if (*tp == PRUnichar('S') &&
+                  aTX.GetContentCharAt(mContentOffset +
+                    indexp - aIndexBuffer->mBuffer - 1) == kSZLIG) {
+                ++strInx;
+                ++tp;
+              }
+            }
+            ++tp;
Comment on attachment 179848 [details] [diff] [review]
updated patch to fix the selection

I agree with Hideo... in fact I'd put "if (*tp == PRUnichar('S')" on the
outside of the conditional tests.
Attachment #179848 - Flags: superreview?(roc)
Attachment #179848 - Flags: superreview+
Attachment #179848 - Flags: review?(roc)
Attachment #179848 - Flags: review+

Comment 53

13 years ago
I think that |src| points outside of the current stored buffer as follows. If
|*(src+1) = *src| is done, two chars goes out from |src|.

.....|src-1||src||src+1|...
... used---><-- unused

+              PRUnichar* src = result +  mBufferPos-prevBufferPos;
               while(src>result)
               {
                  *(src+1) = *src;
                   src--;
               }
(Assignee)

Comment 54

13 years ago
Good catch. I have now changed |*(src+1) = *src| to |*(src-1) = *src| in my
tree. While at it, I checked |ReplaceGermanSzligToSS| and it didn't seem to have
that problem because its src is init'ed to really point on the last char.

On the optimization side, I have now changed to:

+          PRUnichar* tp = bp;
+          PRBool caseChanged = 
+            textTransform == NS_STYLE_TEXT_TRANSFORM_UPPERCASE ||
+            textTransform == NS_STYLE_TEXT_TRANSFORM_CAPITALIZE;
           while (--i >= 0) {
             *indexp++ = strInx++;
+            // Point any capitalized German &szlig; to 'SS'
+            if (caseChanged && *tp == PRUnichar('S') &&
+                aTX.GetContentCharAt(mContentOffset +
+                  indexp - aIndexBuffer->mBuffer - 1) == kSZLIG) {
+              ++strInx;
+              ++tp;
+            }
+            ++tp;
           }

--------------
As the tree is frozen right now, I was not considering seeking approval to check
the patch in. If someone feels this bug is important to them, feel free to ask
for approval. I don't anticipate any regression, tough, szlig can't get any
worse than it is. I will just be waiting for the tree to open for regular checkins.

Comment 55

13 years ago
> I have now changed |*(src+1) = *src| to |*(src-1) = *src| in my tree.

Is that your type miss? I check by way of precaution.
|*(src+1) = *src| should be changed to |*src = *(src-1)|.
(Assignee)

Comment 56

13 years ago
That was a typo in my comment indeed. The real thing in my tree is:

-              PRUnichar* src = result +  wordLen;
+              PRUnichar* src = result +  mBufferPos-prevBufferPos;
               while(src>result) 
               {
-                  *(src+1) = *src;
-                  src--;
+                *src = *(src-1);
+                src--;
               }
 
(Assignee)

Comment 57

13 years ago
Comment on attachment 179848 [details] [diff] [review]
updated patch to fix the selection

Asking approval for 1.8b2 to save myself from CVS conflicts as nsTextFrame is
changed frequently and there is still a long way to go before 1.8b3 and etc.

The patch is low-risk and solves a long-standing issue regarding the
capitalization of the German szlig character.
Attachment #179848 - Flags: approval1.8b2?

Comment 58

13 years ago
Comment on attachment 179848 [details] [diff] [review]
updated patch to fix the selection

a=asa
Attachment #179848 - Flags: approval1.8b2? → approval1.8b2+
(Assignee)

Comment 59

13 years ago
Checked in.
Status: ASSIGNED → RESOLVED
Last Resolved: 13 years ago13 years ago
Resolution: --- → FIXED

Comment 60

13 years ago
*** Bug 294025 has been marked as a duplicate of this bug. ***

Comment 61

13 years ago
*** Bug 294481 has been marked as a duplicate of this bug. ***

Comment 62

12 years ago
*** Bug 304304 has been marked as a duplicate of this bug. ***
*** Bug 313970 has been marked as a duplicate of this bug. ***
You need to log in before you can comment on or make changes to this bug.