Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Side by Side Diff: WebCore/platform/text/BidiResolver.h

Issue 2843028: Merge 61921 - <rdar://problem/8000667> Certain text is repeated before and af... (Closed) Base URL: svn://chrome-svn/chrome/branches/WebKit/375/
Patch Set: Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « LayoutTests/fast/text/bidi-explicit-embedding-past-end-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2003, 2004, 2006, 2007, 2008 Apple Inc. All right reserved. 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008 Apple Inc. All right reserved.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 // ### implement rule L1 799 // ### implement rule L1
800 break; 800 break;
801 case WhiteSpaceNeutral: 801 case WhiteSpaceNeutral:
802 break; 802 break;
803 case OtherNeutral: 803 case OtherNeutral:
804 break; 804 break;
805 default: 805 default:
806 break; 806 break;
807 } 807 }
808 808
809 if (pastEnd) { 809 if (pastEnd && eor == current) {
810 if (eor == current) { 810 if (!reachedEndOfLine) {
811 if (!reachedEndOfLine) { 811 eor = endOfLine;
812 eor = endOfLine; 812 switch (m_status.eor) {
813 switch (m_status.eor) { 813 case LeftToRight:
814 case LeftToRight: 814 case RightToLeft:
815 case RightToLeft: 815 case ArabicNumber:
816 case ArabicNumber: 816 m_direction = m_status.eor;
817 m_direction = m_status.eor; 817 break;
818 break; 818 case EuropeanNumber:
819 case EuropeanNumber: 819 m_direction = m_status.lastStrong == LeftToRight ? LeftT oRight : EuropeanNumber;
820 m_direction = m_status.lastStrong == LeftToRight ? L eftToRight : EuropeanNumber; 820 break;
821 break; 821 default:
822 default: 822 ASSERT(false);
823 ASSERT(false);
824 }
825 appendRun();
826 } 823 }
827 current = end; 824 appendRun();
828 m_status = stateAtEnd.m_status;
829 sor = stateAtEnd.sor;
830 eor = stateAtEnd.eor;
831 last = stateAtEnd.last;
832 reachedEndOfLine = stateAtEnd.reachedEndOfLine;
833 lastBeforeET = stateAtEnd.lastBeforeET;
834 emptyRun = stateAtEnd.emptyRun;
835 m_direction = OtherNeutral;
836 break;
837 } 825 }
826 current = end;
827 m_status = stateAtEnd.m_status;
828 sor = stateAtEnd.sor;
829 eor = stateAtEnd.eor;
830 last = stateAtEnd.last;
831 reachedEndOfLine = stateAtEnd.reachedEndOfLine;
832 lastBeforeET = stateAtEnd.lastBeforeET;
833 emptyRun = stateAtEnd.emptyRun;
834 m_direction = OtherNeutral;
835 break;
838 } 836 }
839 837
840 // set m_status.last as needed. 838 // set m_status.last as needed.
841 switch (dirCurrent) { 839 switch (dirCurrent) {
842 case EuropeanNumberTerminator: 840 case EuropeanNumberTerminator:
843 if (m_status.last != EuropeanNumber) 841 if (m_status.last != EuropeanNumber)
844 m_status.last = EuropeanNumberTerminator; 842 m_status.last = EuropeanNumberTerminator;
845 break; 843 break;
846 case EuropeanNumberSeparator: 844 case EuropeanNumberSeparator:
847 case CommonNumberSeparator: 845 case CommonNumberSeparator:
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 if (emptyRun && !(dirCurrent == RightToLeftEmbedding 878 if (emptyRun && !(dirCurrent == RightToLeftEmbedding
881 || dirCurrent == LeftToRightEmbedding 879 || dirCurrent == LeftToRightEmbedding
882 || dirCurrent == RightToLeftOverride 880 || dirCurrent == RightToLeftOverride
883 || dirCurrent == LeftToRightOverride 881 || dirCurrent == LeftToRightOverride
884 || dirCurrent == PopDirectionalFormat)) { 882 || dirCurrent == PopDirectionalFormat)) {
885 sor = current; 883 sor = current;
886 emptyRun = false; 884 emptyRun = false;
887 } 885 }
888 886
889 increment(); 887 increment();
890 if (!m_currentExplicitEmbeddingSequence.isEmpty()) 888 if (!m_currentExplicitEmbeddingSequence.isEmpty()) {
891 commitExplicitEmbedding(); 889 commitExplicitEmbedding();
890 if (pastEnd) {
891 current = end;
892 m_status = stateAtEnd.m_status;
893 sor = stateAtEnd.sor;
894 eor = stateAtEnd.eor;
895 last = stateAtEnd.last;
896 reachedEndOfLine = stateAtEnd.reachedEndOfLine;
897 lastBeforeET = stateAtEnd.lastBeforeET;
898 emptyRun = stateAtEnd.emptyRun;
899 m_direction = OtherNeutral;
900 break;
901 }
902 }
892 903
893 if (emptyRun && (dirCurrent == RightToLeftEmbedding 904 if (emptyRun && (dirCurrent == RightToLeftEmbedding
894 || dirCurrent == LeftToRightEmbedding 905 || dirCurrent == LeftToRightEmbedding
895 || dirCurrent == RightToLeftOverride 906 || dirCurrent == RightToLeftOverride
896 || dirCurrent == LeftToRightOverride 907 || dirCurrent == LeftToRightOverride
897 || dirCurrent == PopDirectionalFormat)) { 908 || dirCurrent == PopDirectionalFormat)) {
898 // exclude the embedding char itself from the new run so that ATSUI will never see it 909 // exclude the embedding char itself from the new run so that ATSUI will never see it
899 eor = Iterator(); 910 eor = Iterator();
900 last = current; 911 last = current;
901 sor = current; 912 sor = current;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 } 973 }
963 levelHigh--; 974 levelHigh--;
964 } 975 }
965 } 976 }
966 endOfLine = Iterator(); 977 endOfLine = Iterator();
967 } 978 }
968 979
969 } // namespace WebCore 980 } // namespace WebCore
970 981
971 #endif // BidiResolver_h 982 #endif // BidiResolver_h
OLDNEW
« no previous file with comments | « LayoutTests/fast/text/bidi-explicit-embedding-past-end-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698