You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/10/26 00:17:14 UTC
svn commit: r1634256 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/TextPosition.java
Author: jahewson
Date: Sat Oct 25 22:17:13 2014
New Revision: 1634256
URL: http://svn.apache.org/r1634256
Log:
PDFBOX-2409: Unicode combining characters must always follow their base character, even in RTL presentation order
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/TextPosition.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/TextPosition.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/TextPosition.java?rev=1634256&r1=1634255&r2=1634256&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/TextPosition.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/TextPosition.java Sat Oct 25 22:17:13 2014
@@ -602,34 +602,18 @@ public final class TextPosition
*/
private void insertDiacritic(int i, TextPosition diacritic)
{
- // we add the diacritic to the right or left of the character depending on the direction
- // of the character. Note that this is only required because the text is currently stored in
- // presentation order and not in logical order
- int dir = Character.getDirectionality(unicode.charAt(i));
StringBuilder sb = new StringBuilder();
-
sb.append(unicode.substring(0, i));
float[] widths2 = new float[widths.length + 1];
System.arraycopy(widths, 0, widths2, 0, i);
- if (dir == Character.DIRECTIONALITY_RIGHT_TO_LEFT ||
- dir == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC ||
- dir == Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING ||
- dir == Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE)
- {
- sb.append(combineDiacritic(diacritic.getUnicode()));
- widths2[i] = 0;
- sb.append(unicode.charAt(i));
- widths2[i + 1] = widths[i];
- }
- else
- {
- sb.append(unicode.charAt(i));
- widths2[i] = widths[i];
- sb.append(combineDiacritic(diacritic.getUnicode()));
- widths2[i + 1] = 0;
- }
+ // Unicode combining diacritics always go after the base character, regardless of whether
+ // the string is in presentation order or logical order
+ sb.append(unicode.charAt(i));
+ widths2[i] = widths[i];
+ sb.append(combineDiacritic(diacritic.getUnicode()));
+ widths2[i + 1] = 0;
// get the rest of the string
sb.append(unicode.substring(i + 1, unicode.length()));
@@ -670,7 +654,7 @@ public final class TextPosition
String text = this.getUnicode();
if (text.length() != 1)
{
- return false;
+ return false;
}
int type = Character.getType(text.charAt(0));
return type == Character.NON_SPACING_MARK ||