<AWT Dev> [9] Review request for 8132503: [macosx] Chinese full stop symbol cannot be entered with Pinyin IM on OS X

Alexander Zuev alexander.zuev at oracle.com
Thu Oct 29 23:39:39 UTC 2015


Anton,

   this version looks fine to me.

/Alex

On 29/10/15 19:08, Anton Litvinov wrote:
> Hello Alexander,
>
> The second version of the fix, which addresses your suggestion 
> concerning introduction of a separate method checking, if the 
> "unichar" belongs to certain Unicode blocks, was created. For this 
> purpose the method "-(BOOL) isCodePointInUnicodeBlockNeedingIMEvent: 
> (unichar) codePoint;" was introduced. Could you please review the 
> second version of the fix.
>
> Webrev: http://cr.openjdk.java.net/~alitvinov/8132503/jdk9/webrev.01
>
> Thank you,
> Anton
>
> On 10/29/2015 3:09 PM, Anton Litvinov wrote:
>> Hello Alexander,
>>
>> Thank you for review of this fix. Responses to your questions are 
>> following.
>>
>> 1) I also was not able to find any methods available in 
>> "java.lang.Character", "java.lang.Character.UnicodeBlock", 
>> "java.lang.Character.Subset" classes or API in Cocoa which would 
>> allow to get minimal and maximal code point for the given Unicode 
>> block. I do not think that resuming work on RFE JDK-7057645 created 
>> in 2011 will help to resolve this particular bug, because it will not 
>> be possible to introduce a new API in JDK 8, for which this bug was 
>> originally filed.
>>
>> 2) Yes, I think that "aString" can have more than 1 Unicode 
>> character, since it is described as "The text to insert" in the 
>> documentation of the method "(void)insertText:(id)aString 
>> replacementRange:(NSRange)" 
>> (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSTextInputClient_Protocol/#//apple_ref/occ/intfm/NSTextInputClient/insertText:replacementRange:)
>>
>> And, if "aString" contains more than 1 Unicode character, this case 
>> was already taken into account by "(utf16Length > 2)" check.
>>
>> "AWTView.m" without this fix:
>> 893     if ([self hasMarkedText] || !fProcessingKeystroke || 
>> (utf16Length > 2)) {
>>
>> "AWTView.m" with this fix:
>> 894     if (utf16Length > 2) {
>> 895         aStringIsComplex = YES;
>>
>> 3) Concerning creation of a separate function for checking, if 
>> "unichar" belongs to certain Unicode blocks. Did you mean addition of 
>> the possible function which would just check, if "unichar" is in any 
>> of the Unicode blocks hard coded in the function? Or did you mean the 
>> function which would just check, if "unichar" belongs to 1 Unicode 
>> block, whose identifier is transferred to the function, for example, 
>> as some "enum" value?
>>
>> Thank you,
>> Anton
>>
>> On 10/28/2015 5:21 PM, Alexander Scherbatiy wrote:
>>> On 10/27/2015 1:18 PM, Anton Litvinov wrote:
>>>> Hello,
>>>>
>>>> Could you please review the following fix for the bug.
>>>>
>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8132503
>>>> Webrev: http://cr.openjdk.java.net/~alitvinov/8132503/jdk9/webrev.00
>>>>
>>>> The bug consists in the fact that after the fix for JDK-8068283, 
>>>> when IDEOGRAPHIC FULL STOP character "。" is entered from a 
>>>> keyboard using Pinyin IM, "java.awt.event.InputMethodEvent" is not 
>>>> generated and FULL STOP character "." is entered in 
>>>> "javax.swing.JTextArea" component.
>>>>
>>>> The solution adds the additional check to "if" condition, which was 
>>>> edited by the fix for JDK-8068283,
>>>>
>>>> "if ([self hasMarkedText] || !fProcessingKeystroke || (utf16Length 
>>>> > 2)) {"
>>>>
>>>> in the method "- (void) insertText:(id) replacementRange:(NSRange)" 
>>>> from the file 
>>>> "jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m". 
>>>> This additional check defines, whether the analyzed code point 
>>>> belongs to Unicode code points range "U+3000 – U+303F" ("CJK 
>>>> Symbols and Punctuation"), which contains "。" character and, if it 
>>>> is so, generates "InputMethodEvent".
>>>>
>>>    It was interested for me does Cocoa or Java allow to get a 
>>> minimal and maximal character for the given Unicode Block.
>>>    I was not able to find how to do it in Cocoa.
>>>    Java has an open RFE JDK-7057645 Add methods to 
>>> Character.UnicodeBlock (returning first & last codepoints, the list 
>>> of blocks).
>>>    May be the current issue can be one more valid use case for the RFE.
>>>
>>>    I have just few comments:
>>>     - aString is treated as NSString. Can it have more than one 
>>> Unicode character?
>>>     - It could be better to move the check that a unichar belongs to 
>>> a separate function that can be easily extended later for new 
>>> Unicode Blocks.
>>>
>>>   Thanks,
>>>   Alexandr.
>>>
>>>> It was verified in a local environment that the regression test 
>>>> from the fix for JDK-8068283 does not fail with this fix also.
>>>>
>>>> Thank you,
>>>> Anton
>>>
>>
>



More information about the awt-dev mailing list