- METHOD: void insertText: id text
- [
- self window :> window
- window [
- text CF>string window user-input
- ] when
- ] ;
-
- METHOD: char hasMarkedText [ 0 ] ;
-
- METHOD: NSRange markedRange [ 0 0 <NSRange> ] ;
-
- METHOD: NSRange selectedRange [ 0 0 <NSRange> ] ;
-
- METHOD: void setMarkedText: id text selectedRange: NSRange range [ ] ;
-
- METHOD: void unmarkText [ ] ;
-
- METHOD: id validAttributesForMarkedText [ NSArray -> array ] ;
-
- METHOD: id attributedSubstringFromRange: NSRange range [ f ] ;
-
+ METHOD: void insertText: id text replacementRange: NSRange replacementRange [
+ self window :> window
+ window [
+ "" clone :> str!
+ text NSString -> class -> isKindOfClass: 0 = not [
+ text CF>string str!
+ ] [
+ text -> string CF>string str!
+ ] if
+ window world-focus :> gadget
+ gadget support-input-methods? [
+ gadget preedit? [
+ gadget [ remove-preedit-text ] [ remove-preedit-info ] bi
+ ] when
+ str gadget user-input* drop
+ f gadget preedit-selection-mode?<<
+ ] [
+ str window user-input
+ ] if
+ ] when
+ ] ;
+
+ METHOD: char hasMarkedText [
+ self window :> window
+ window [
+ window world-focus :> gadget
+ gadget preedit? [ 1 ] [ 0 ] if
+ ] [ 0 ] if
+ ] ;
+
+ METHOD: NSRange markedRange [
+ self window :> window
+ window [
+ window world-focus :> gadget
+ gadget preedit? [
+ gadget [ preedit-start>> second ] [ preedit-end>> second ] bi >= [
+ NSNotFound 0
+ ] [
+ gadget preedit-start>> first gadget editor-line :> str
+ str gadget preedit-start>> second >utf16-index dup ! location
+ str gadget preedit-end>> second >utf16-index swap - ! length
+ ] if
+ ] [ NSNotFound 0 ] if
+ ] [ NSNotFound 0 ] if
+ <NSRange>
+ ] ;
+
+ METHOD: NSRange selectedRange [
+ self window :> window
+ window [
+ window world-focus :> gadget
+ gadget support-input-methods? [
+ gadget preedit? [
+ gadget preedit-start>> first gadget editor-line :> str
+ str
+ gadget
+ [ preedit-selected-start>> second ]
+ [ preedit-start>> second ] bi - >utf16-index ! location
+ str gadget preedit-selected-end>> second >utf16-index
+ str gadget preedit-selected-start>> second >utf16-index - ! length
+ ] [ gadget earlier-caret/mark second 0 ] if
+ ] [ 0 0 ] if
+ ] [ 0 0 ] if
+ <NSRange>
+ ] ;
+
+ METHOD: void setMarkedText: id text selectedRange: NSRange selectedRange
+ replacementRange: NSRange replacementRange [
+ self window :> window
+ { } clone :> underlines!
+ window [
+ window world-focus :> gadget
+ "" clone :> str!
+ text NSString -> class -> isKindOfClass: 0 = not [
+ text CF>string str!
+ ] [
+ text -> string CF>string str!
+ gadget support-input-methods? [
+ gadget text selectedRange make-preedit-underlines underlines!
+ ] when
+ ] if
+ gadget support-input-methods? [
+ gadget str selectedRange update-marked-text
+ underlines gadget preedit-underlines<<
+ ] when
+ ] when
+ ] ;
+
+ METHOD: void unmarkText [
+ self window :> window
+ window [
+ window world-focus :> gadget
+ gadget support-input-methods? [
+ gadget preedit? [
+ gadget {
+ [ preedit-start>> second ]
+ [ preedit-end>> second ]
+ [ preedit-start>> first ] [ editor-line ]
+ } cleave subseq
+ gadget [ remove-preedit-text ] [ remove-preedit-info ] bi
+ gadget user-input* drop
+ ] when
+ f gadget preedit-selection-mode?<<
+ ] when
+ ] when
+ ] ;
+
+ METHOD: id validAttributesForMarkedText [
+ NSArray "NSMarkedClauseSegment" <NSString> -> arrayWithObject:
+ ] ;
+
+ METHOD: id attributedSubstringForProposedRange: NSRange range
+ actualRange: id actualRange [ f ] ;
+