< prev index next >

src/java.desktop/share/classes/javax/swing/text/DefaultEditorKit.java

Print this page

        

*** 32,41 **** --- 32,43 ---- import java.text.*; import javax.swing.Action; import javax.swing.KeyStroke; import javax.swing.SwingConstants; import javax.swing.UIManager; + import static sun.font.CharToGlyphMapper.isVariationSelector; + import static sun.font.CharToGlyphMapper.isBaseChar; /** * This is the set of things needed by a text component * to be a reasonably functioning editor for some <em>type</em> * of text document. This implementation provides a default
*** 1068,1077 **** --- 1070,1094 ---- if (c0 >= '\uD800' && c0 <= '\uDBFF' && c1 >= '\uDC00' && c1 <= '\uDFFF') { delChars = 2; } + + // For Variation Selector + if ((dot > 2 && isVariationSelector(c0, c1)) || + (isVariationSelector(c1))) { + String targetChars = doc.getText(0, dot); + int pre = targetChars.codePointBefore( + dot - delChars); + if (isBaseChar(pre)) { + if (pre >= 0x10000) { + delChars += 2; + } else { + delChars += 1; + } + } + } } doc.remove(dot - delChars, delChars); beep = false; }
*** 1116,1129 **** --- 1133,1167 ---- if (dot < doc.getLength() - 1) { String dotChars = doc.getText(dot, 2); char c0 = dotChars.charAt(0); char c1 = dotChars.charAt(1); + int baseChar = (int)c0; if (c0 >= '\uD800' && c0 <= '\uDBFF' && c1 >= '\uDC00' && c1 <= '\uDFFF') { delChars = 2; + baseChar = (c0 - 0xD800) * 0x400 + c1 - 0xDC00 + + 0x10000; + } + + // For Variation Selector + if (isBaseChar(baseChar) && + dot < doc.getLength() - delChars) { + String nextChar = doc.getText(dot+delChars, 1); + char c2 = nextChar.charAt(0); + if (isVariationSelector(c2)) { + delChars += 1; + } else if (dot < doc.getLength() + - delChars - 1) { + nextChar = doc.getText( + dot + delChars + 1, 1); + char c3 = nextChar.charAt(0); + if (isVariationSelector(c2,c3)) { + delChars += 2; + } + } } } doc.remove(dot, delChars); beep = false;
< prev index next >