Hex Artifact Content

Not logged in

Artifact 4947f4ab7f00d23b04c2dc9af78fffd7d555bb44:


0000: 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 66 78  #include "stdafx
0010: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 69  .h"..#include "i
0020: 70 5f 76 69 65 77 2e 68 22 0d 0a 75 73 69 6e 67  p_view.h"..using
0030: 20 6e 61 6d 65 73 70 61 63 65 20 65 64 69 74 77   namespace editw
0040: 69 6e 67 3b 0d 0a 75 73 69 6e 67 20 6e 61 6d 65  ing;..using name
0050: 73 70 61 63 65 20 65 64 69 74 77 69 6e 67 3a 3a  space editwing::
0060: 76 69 65 77 3b 0d 0a 75 73 69 6e 67 20 64 6f 63  view;..using doc
0070: 3a 3a 49 6e 73 65 72 74 3b 0d 0a 75 73 69 6e 67  ::Insert;..using
0080: 20 64 6f 63 3a 3a 44 65 6c 65 74 65 3b 0d 0a 75   doc::Delete;..u
0090: 73 69 6e 67 20 64 6f 63 3a 3a 52 65 70 6c 61 63  sing doc::Replac
00a0: 65 3b 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d  e;........//====
00b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00f0: 3d 3d 3d 3d 3d 0d 0a 2f 2f 2d 2d 2d 2d 20 69 70  =====..//---- ip
0100: 5f 63 75 72 73 6f 72 2e 63 70 70 20 83 4a 81 5b  _cursor.cpp .J.[
0110: 83 5c 83 8b 83 52 83 93 83 67 83 8d 81 5b 83 8b  .\...R...g...[..
0120: 0d 0a 2f 2f 0d 0a 2f 2f 09 09 83 4a 83 8c 83 62  ..//..//...J...b
0130: 83 67 82 f0 95 5c 8e a6 82 b5 82 bd 82 e8 49 4d  .g...\........IM
0140: 45 82 c9 93 4b 93 96 82 c9 91 ce 89 9e 82 b5 82  E...K...........
0150: bd 82 e8 90 46 81 58 81 42 0d 0a 2f 2f 09 09 82  ....F.X.B..//...
0160: c6 82 b1 82 eb 82 c5 8b 5e 96 e2 82 c8 82 cc 82  ........^.......
0170: be 82 aa 20 43 61 72 65 74 20 82 c1 82 c4 81 75  ... Caret .....u
0180: 83 4a 83 8c 83 62 83 67 81 76 82 c6 0d 0a 2f 2f  .J...b.g.v....//
0190: 09 09 93 c7 82 de 82 cc 82 a9 81 75 83 4c 83 83  ...........u.L..
01a0: 83 8c 83 62 83 67 81 76 82 c6 93 c7 82 de 82 cc  ...b.g.v........
01b0: 82 a9 81 48 0d 0a 2f 2f 0d 0a 2f 2f 2d 2d 2d 2d  ...H..//..//----
01c0: 20 69 70 5f 74 65 78 74 2e 63 70 70 20 20 20 95   ip_text.cpp   .
01d0: b6 8e 9a 97 f1 91 80 8d ec 81 45 91 bc 0d 0a 2f  ..........E..../
01e0: 2f 2d 2d 2d 2d 20 69 70 5f 70 61 72 73 65 2e 63  /---- ip_parse.c
01f0: 70 70 20 20 83 4c 81 5b 83 8f 81 5b 83 68 89 f0  pp  .L.[...[.h..
0200: 90 cd 0d 0a 2f 2f 2d 2d 2d 2d 20 69 70 5f 77 72  ....//---- ip_wr
0210: 61 70 2e 63 70 70 20 20 20 90 dc 82 e8 95 d4 82  ap.cpp   .......
0220: b5 0d 0a 2f 2f 2d 2d 2d 2d 20 69 70 5f 73 63 72  ...//---- ip_scr
0230: 6f 6c 6c 2e 63 70 70 20 83 58 83 4e 83 8d 81 5b  oll.cpp .X.N...[
0240: 83 8b 0d 0a 2f 2f 2d 2d 2d 2d 20 69 70 5f 64 72  ....//---- ip_dr
0250: 61 77 2e 63 70 70 20 20 20 95 60 89 e6 81 45 91  aw.cpp   .`...E.
0260: bc 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ...//===========
0270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0290: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
02a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a  ==============..
02b0: 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d  ......//--------
02c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0300: 2d 0d 0a 2f 2f 20 43 61 72 65 74 90 a7 8c e4 97  -..// Caret.....
0310: 70 83 89 83 62 83 70 81 5b 0d 0a 2f 2f 2d 2d 2d  p...b.p.[..//---
0320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0360: 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 63 6c 61 73 73 20  ------....class 
0370: 65 64 69 74 77 69 6e 67 3a 3a 76 69 65 77 3a 3a  editwing::view::
0380: 43 61 72 65 74 20 3a 20 70 75 62 6c 69 63 20 4f  Caret : public O
0390: 62 6a 65 63 74 0d 0a 7b 0d 0a 70 75 62 6c 69 63  bject..{..public
03a0: 3a 0d 0a 0d 0a 09 43 61 72 65 74 28 20 48 57 4e  :.....Caret( HWN
03b0: 44 20 77 6e 64 20 29 0d 0a 09 09 3a 20 68 77 6e  D wnd )....: hwn
03c0: 64 5f 28 20 77 6e 64 20 29 2c 20 63 72 65 61 74  d_( wnd ), creat
03d0: 65 64 5f 28 20 66 61 6c 73 65 20 29 20 7b 7d 0d  ed_( false ) {}.
03e0: 0a 0d 0a 09 7e 43 61 72 65 74 28 29 0d 0a 09 09  ....~Caret()....
03f0: 7b 20 44 65 73 74 72 6f 79 28 29 3b 20 7d 0d 0a  { Destroy(); }..
0400: 0d 0a 09 76 6f 69 64 20 53 68 6f 77 28 29 0d 0a  ...void Show()..
0410: 09 09 7b 20 69 66 28 20 63 72 65 61 74 65 64 5f  ..{ if( created_
0420: 20 29 20 3a 3a 53 68 6f 77 43 61 72 65 74 28 20   ) ::ShowCaret( 
0430: 68 77 6e 64 5f 20 29 3b 20 7d 0d 0a 0d 0a 09 76  hwnd_ ); }.....v
0440: 6f 69 64 20 48 69 64 65 28 29 0d 0a 09 09 7b 20  oid Hide()....{ 
0450: 69 66 28 20 63 72 65 61 74 65 64 5f 20 29 20 3a  if( created_ ) :
0460: 3a 48 69 64 65 43 61 72 65 74 28 20 68 77 6e 64  :HideCaret( hwnd
0470: 5f 20 29 3b 20 7d 0d 0a 0d 0a 09 76 6f 69 64 20  _ ); }.....void 
0480: 44 65 73 74 72 6f 79 28 29 0d 0a 09 09 7b 20 69  Destroy()....{ i
0490: 66 28 20 63 72 65 61 74 65 64 5f 20 29 20 3a 3a  f( created_ ) ::
04a0: 44 65 73 74 72 6f 79 43 61 72 65 74 28 29 2c 20  DestroyCaret(), 
04b0: 63 72 65 61 74 65 64 5f 3d 66 61 6c 73 65 3b 20  created_=false; 
04c0: 7d 0d 0a 0d 0a 09 76 6f 69 64 20 53 65 74 50 6f  }.....void SetPo
04d0: 73 28 20 69 6e 74 20 78 2c 20 69 6e 74 20 79 20  s( int x, int y 
04e0: 29 0d 0a 09 09 7b 20 69 66 28 20 63 72 65 61 74  )....{ if( creat
04f0: 65 64 5f 20 29 20 3a 3a 53 65 74 43 61 72 65 74  ed_ ) ::SetCaret
0500: 50 6f 73 28 78 2c 79 29 2c 20 69 6d 65 28 29 2e  Pos(x,y), ime().
0510: 53 65 74 50 6f 73 28 68 77 6e 64 5f 2c 78 2c 79  SetPos(hwnd_,x,y
0520: 29 3b 20 7d 0d 0a 0d 0a 09 76 6f 69 64 20 43 72  ); }.....void Cr
0530: 65 61 74 65 28 20 69 6e 74 20 48 2c 20 69 6e 74  eate( int H, int
0540: 20 57 2c 20 63 6f 6e 73 74 20 4c 4f 47 46 4f 4e   W, const LOGFON
0550: 54 26 20 6c 66 20 29 0d 0a 09 09 7b 0d 0a 09 09  T& lf )....{....
0560: 09 69 66 28 20 63 72 65 61 74 65 64 5f 20 29 0d  .if( created_ ).
0570: 0a 09 09 09 09 3a 3a 44 65 73 74 72 6f 79 43 61  .....::DestroyCa
0580: 72 65 74 28 29 3b 0d 0a 09 09 09 63 72 65 61 74  ret();.....creat
0590: 65 64 5f 20 3d 20 74 72 75 65 3b 0d 0a 09 09 09  ed_ = true;.....
05a0: 3a 3a 43 72 65 61 74 65 43 61 72 65 74 28 20 68  ::CreateCaret( h
05b0: 77 6e 64 5f 2c 20 4e 55 4c 4c 2c 20 57 2c 20 48  wnd_, NULL, W, H
05c0: 20 29 3b 0d 0a 09 09 09 69 6d 65 28 29 2e 53 65   );.....ime().Se
05d0: 74 46 6f 6e 74 28 20 68 77 6e 64 5f 2c 20 6c 66  tFont( hwnd_, lf
05e0: 20 29 3b 0d 0a 09 09 09 53 68 6f 77 28 29 3b 0d   );.....Show();.
05f0: 0a 09 09 7d 0d 0a 0d 0a 09 62 6f 6f 6c 20 69 73  ...}.....bool is
0600: 41 6c 69 76 65 28 29 0d 0a 09 09 7b 20 72 65 74  Alive()....{ ret
0610: 75 72 6e 20 63 72 65 61 74 65 64 5f 3b 20 7d 0d  urn created_; }.
0620: 0a 0d 0a 09 48 57 4e 44 20 68 77 6e 64 28 29 0d  ....HWND hwnd().
0630: 0a 09 09 7b 20 72 65 74 75 72 6e 20 68 77 6e 64  ...{ return hwnd
0640: 5f 3b 20 7d 0d 0a 0d 0a 70 72 69 76 61 74 65 3a  _; }....private:
0650: 0d 0a 0d 0a 09 63 6f 6e 73 74 20 48 57 4e 44 20  .....const HWND 
0660: 68 77 6e 64 5f 3b 0d 0a 09 62 6f 6f 6c 20 20 20  hwnd_;...bool   
0670: 20 63 72 65 61 74 65 64 5f 3b 0d 0a 7d 3b 0d 0a   created_;..};..
0680: 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d  ......//--------
0690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06d0: 2d 0d 0a 2f 2f 20 83 4a 81 5b 83 5c 83 8b 8f 89  -..// .J.[.\....
06e0: 8a fa 89 bb 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d  ......//--------
06f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0730: 2d 0d 0a 0d 0a 43 75 72 73 6f 72 3a 3a 43 75 72  -....Cursor::Cur
0740: 73 6f 72 28 20 48 57 4e 44 20 77 6e 64 2c 20 56  sor( HWND wnd, V
0750: 69 65 77 49 6d 70 6c 26 20 76 77 2c 20 64 6f 63  iewImpl& vw, doc
0760: 3a 3a 44 6f 63 49 6d 70 6c 26 20 64 63 20 29 0d  ::DocImpl& dc ).
0770: 0a 09 3a 20 76 69 65 77 5f 20 20 20 28 20 76 77  ..: view_   ( vw
0780: 20 29 0d 0a 09 2c 20 64 6f 63 5f 20 20 20 20 28   )..., doc_    (
0790: 20 64 63 20 29 0d 0a 09 2c 20 70 45 76 48 61 6e   dc )..., pEvHan
07a0: 5f 20 28 20 26 64 65 66 61 75 6c 74 48 61 6e 64  _ ( &defaultHand
07b0: 6c 65 72 5f 20 29 0d 0a 09 2c 20 63 61 72 65 74  ler_ )..., caret
07c0: 5f 20 20 28 20 6e 65 77 20 43 61 72 65 74 28 77  _  ( new Caret(w
07d0: 6e 64 29 20 29 0d 0a 09 2c 20 62 49 6e 73 5f 20  nd) )..., bIns_ 
07e0: 20 20 28 20 74 72 75 65 20 29 0d 0a 09 2c 20 62    ( true )..., b
07f0: 52 4f 5f 20 20 20 20 28 20 66 61 6c 73 65 20 29  RO_    ( false )
0800: 0d 0a 09 2c 20 74 69 6d 65 72 49 44 5f 28 20 30  ..., timerID_( 0
0810: 20 29 0d 0a 09 2c 20 6c 69 6e 65 53 65 6c 65 63   )..., lineSelec
0820: 74 4d 6f 64 65 5f 28 20 66 61 6c 73 65 20 29 0d  tMode_( false ).
0830: 0a 7b 0d 0a 09 2f 2f 20 82 c4 82 ab 82 c6 81 5b  .{...// .......[
0840: 82 c9 8f ee 95 f1 8f 89 8a fa 89 bb 0d 0a 09 3a  ...............:
0850: 3a 53 79 73 74 65 6d 50 61 72 61 6d 65 74 65 72  :SystemParameter
0860: 73 49 6e 66 6f 28 20 53 50 49 5f 47 45 54 4b 45  sInfo( SPI_GETKE
0870: 59 42 4f 41 52 44 53 50 45 45 44 2c 20 30 2c 20  YBOARDSPEED, 0, 
0880: 26 6b 65 79 52 65 70 54 69 6d 65 5f 2c 20 30 20  &keyRepTime_, 0 
0890: 29 3b 0d 0a 09 63 75 72 5f 2e 74 6c 20 3d 20 63  );...cur_.tl = c
08a0: 75 72 5f 2e 61 64 20 3d 20 63 75 72 5f 2e 76 6c  ur_.ad = cur_.vl
08b0: 20 3d 20 63 75 72 5f 2e 72 6c 20 3d 20 30 3b 0d   = cur_.rl = 0;.
08c0: 0a 09 63 75 72 5f 2e 76 78 20 3d 20 63 75 72 5f  ..cur_.vx = cur_
08d0: 2e 72 78 20 3d 20 30 3b 20 73 65 6c 5f 20 3d 20  .rx = 0; sel_ = 
08e0: 63 75 72 5f 3b 0d 0a 7d 0d 0a 0d 0a 43 75 72 73  cur_;..}....Curs
08f0: 6f 72 3a 3a 7e 43 75 72 73 6f 72 28 29 0d 0a 7b  or::~Cursor()..{
0900: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73  ..}....void Curs
0910: 6f 72 3a 3a 41 64 64 48 61 6e 64 6c 65 72 28 20  or::AddHandler( 
0920: 43 75 72 45 76 48 61 6e 64 6c 65 72 2a 20 65 76  CurEvHandler* ev
0930: 20 29 0d 0a 7b 0d 0a 09 70 45 76 48 61 6e 5f 20   )..{...pEvHan_ 
0940: 3d 20 65 76 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64  = ev;..}....void
0950: 20 43 75 72 73 6f 72 3a 3a 44 65 6c 48 61 6e 64   Cursor::DelHand
0960: 6c 65 72 28 20 43 75 72 45 76 48 61 6e 64 6c 65  ler( CurEvHandle
0970: 72 2a 20 65 76 20 29 0d 0a 7b 0d 0a 09 69 66 28  r* ev )..{...if(
0980: 20 65 76 20 3d 3d 20 70 45 76 48 61 6e 5f 20 29   ev == pEvHan_ )
0990: 0d 0a 09 09 70 45 76 48 61 6e 5f 20 3d 20 26 64  ....pEvHan_ = &d
09a0: 65 66 61 75 6c 74 48 61 6e 64 6c 65 72 5f 3b 0d  efaultHandler_;.
09b0: 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d  .}........//----
09c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a00: 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 83 77 83 8b 83 70  -----..// .w...p
0a10: 81 5b 8a d6 90 94 8c 51 0d 0a 2f 2f 2d 2d 2d 2d  .[.....Q..//----
0a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a60: 2d 2d 2d 2d 2d 0d 0a 0d 0a 76 6f 69 64 20 43 75  -----....void Cu
0a70: 72 73 6f 72 3a 3a 55 70 64 61 74 65 43 61 72 65  rsor::UpdateCare
0a80: 74 50 6f 73 28 29 0d 0a 7b 0d 0a 09 2f 2f 20 83  tPos()..{...// .
0a90: 81 83 93 83 6f 95 cf 90 94 82 cc 92 6c 82 f0 8c  ....o.......l...
0aa0: b3 82 c9 81 41 8e c0 8d db 82 c9 43 61 72 65 74  ....A......Caret
0ab0: 82 f0 93 ae 82 a9 82 b7 8f 88 97 9d 0d 0a 09 69  ...............i
0ac0: 6e 74 20 78 2c 20 79 3b 0d 0a 09 76 69 65 77 5f  nt x, y;...view_
0ad0: 2e 47 65 74 4f 72 69 67 69 6e 28 20 26 78 2c 20  .GetOrigin( &x, 
0ae0: 26 79 20 29 3b 0d 0a 09 78 20 2b 3d 20 63 75 72  &y );...x += cur
0af0: 5f 2e 76 78 3b 0d 0a 09 79 20 2b 3d 20 63 75 72  _.vx;...y += cur
0b00: 5f 2e 76 6c 20 2a 20 76 69 65 77 5f 2e 66 6e 74  _.vl * view_.fnt
0b10: 28 29 2e 48 28 29 3b 0d 0a 0d 0a 09 2f 2f 20 8d  ().H();.....// .
0b20: 73 94 d4 8d 86 83 5d 81 5b 83 93 82 c9 43 61 72  s.....].[....Car
0b30: 65 74 82 aa 82 a0 82 c1 82 c4 82 e0 8d a2 82 e9  et..............
0b40: 82 cc 82 c5 8d b6 82 c9 92 c7 82 a2 82 e2 82 e9  ................
0b50: 0d 0a 09 69 66 28 20 30 3c 78 20 26 26 20 78 3c  ...if( 0<x && x<
0b60: 76 69 65 77 5f 2e 6c 65 66 74 28 29 20 29 0d 0a  view_.left() )..
0b70: 09 09 78 20 3d 20 2d 76 69 65 77 5f 2e 6c 65 66  ..x = -view_.lef
0b80: 74 28 29 3b 0d 0a 0d 0a 09 2f 2f 20 83 5a 83 62  t();.....// .Z.b
0b90: 83 67 0d 0a 09 63 61 72 65 74 5f 2d 3e 53 65 74  .g...caret_->Set
0ba0: 50 6f 73 28 20 78 2c 20 79 20 29 3b 0d 0a 09 70  Pos( x, y );...p
0bb0: 45 76 48 61 6e 5f 2d 3e 6f 6e 5f 6d 6f 76 65 28  EvHan_->on_move(
0bc0: 20 63 75 72 5f 2c 20 73 65 6c 5f 20 29 3b 0d 0a   cur_, sel_ );..
0bd0: 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72  }....void Cursor
0be0: 3a 3a 52 65 64 72 61 77 28 20 63 6f 6e 73 74 20  ::Redraw( const 
0bf0: 56 50 6f 73 26 20 73 2c 20 63 6f 6e 73 74 20 56  VPos& s, const V
0c00: 50 6f 73 26 20 65 20 29 0d 0a 7b 0d 0a 09 69 6e  Pos& e )..{...in
0c10: 74 20 78 2c 20 79 3b 20 2f 2f 20 8c b4 93 5f 0d  t x, y; // ..._.
0c20: 0a 09 76 69 65 77 5f 2e 47 65 74 4f 72 69 67 69  ..view_.GetOrigi
0c30: 6e 28 20 26 78 2c 20 26 79 20 29 3b 0d 0a 0d 0a  n( &x, &y );....
0c40: 09 50 4f 49 4e 54 20 73 70 20 3d 20 7b 78 2b 73  .POINT sp = {x+s
0c50: 2e 76 78 2c 20 79 2b 73 2e 76 6c 2a 76 69 65 77  .vx, y+s.vl*view
0c60: 5f 2e 66 6e 74 28 29 2e 48 28 29 7d 3b 0d 0a 09  _.fnt().H()};...
0c70: 50 4f 49 4e 54 20 65 70 20 3d 20 7b 78 2b 65 2e  POINT ep = {x+e.
0c80: 76 78 2c 20 79 2b 65 2e 76 6c 2a 76 69 65 77 5f  vx, y+e.vl*view_
0c90: 2e 66 6e 74 28 29 2e 48 28 29 7d 3b 0d 0a 09 69  .fnt().H()};...i
0ca0: 66 28 20 73 20 3e 20 65 20 29 20 2f 2f 20 53 77  f( s > e ) // Sw
0cb0: 61 70 0d 0a 09 09 73 70 2e 78 5e 3d 65 70 2e 78  ap....sp.x^=ep.x
0cc0: 2c 20 65 70 2e 78 5e 3d 73 70 2e 78 2c 20 73 70  , ep.x^=sp.x, sp
0cd0: 2e 78 5e 3d 65 70 2e 78 2c 0d 0a 09 09 73 70 2e  .x^=ep.x,....sp.
0ce0: 79 5e 3d 65 70 2e 79 2c 20 65 70 2e 79 5e 3d 73  y^=ep.y, ep.y^=s
0cf0: 70 2e 79 2c 20 73 70 2e 79 5e 3d 65 70 2e 79 3b  p.y, sp.y^=ep.y;
0d00: 0d 0a 09 65 70 2e 78 2b 3d 32 3b 0d 0a 0d 0a 09  ...ep.x+=2;.....
0d10: 2f 2f 20 8e e8 94 b2 82 ab 31 36 62 69 74 83 60  // ......16bit.`
0d20: 83 46 83 62 83 4e 93 fc 82 e8 81 63 0d 0a 09 63  .F.b.N.....c...c
0d30: 6f 6e 73 74 20 6c 6f 6e 67 20 4c 46 54 20 3d 20  onst long LFT = 
0d40: 76 69 65 77 5f 2e 6c 65 66 74 28 29 3b 0d 0a 09  view_.left();...
0d50: 63 6f 6e 73 74 20 6c 6f 6e 67 20 52 48 54 20 3d  const long RHT =
0d60: 20 76 69 65 77 5f 2e 72 69 67 68 74 28 29 3b 0d   view_.right();.
0d70: 0a 09 63 6f 6e 73 74 20 6c 6f 6e 67 20 54 4f 50  ..const long TOP
0d80: 20 3d 20 30 3b 0d 0a 09 63 6f 6e 73 74 20 69 6e   = 0;...const in
0d90: 74 20 20 42 54 4d 20 3d 20 76 69 65 77 5f 2e 62  t  BTM = view_.b
0da0: 6f 74 74 6f 6d 28 29 3b 0d 0a 0d 0a 09 69 66 28  ottom();.....if(
0db0: 20 73 70 2e 79 20 3d 3d 20 65 70 2e 79 20 29 0d   sp.y == ep.y ).
0dc0: 0a 09 7b 0d 0a 09 09 52 45 43 54 20 72 63 20 3d  ..{....RECT rc =
0dd0: 20 7b 20 4d 61 78 28 4c 46 54 2c 73 70 2e 78 29   { Max(LFT,sp.x)
0de0: 2c 20 73 70 2e 79 2c 20 4d 69 6e 28 52 48 54 2c  , sp.y, Min(RHT,
0df0: 65 70 2e 78 29 2c 20 73 70 2e 79 2b 76 69 65 77  ep.x), sp.y+view
0e00: 5f 2e 66 6e 74 28 29 2e 48 28 29 20 7d 3b 0d 0a  _.fnt().H() };..
0e10: 09 09 3a 3a 49 6e 76 61 6c 69 64 61 74 65 52 65  ..::InvalidateRe
0e20: 63 74 28 20 63 61 72 65 74 5f 2d 3e 68 77 6e 64  ct( caret_->hwnd
0e30: 28 29 2c 20 26 72 63 2c 20 46 41 4c 53 45 20 29  (), &rc, FALSE )
0e40: 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 7b  ;...}...else...{
0e50: 0d 0a 09 09 52 45 43 54 20 72 63 20 3d 20 7b 20  ....RECT rc = { 
0e60: 4d 61 78 28 4c 46 54 2c 73 70 2e 78 29 2c 20 4d  Max(LFT,sp.x), M
0e70: 61 78 28 54 4f 50 2c 73 70 2e 79 29 2c 20 52 48  ax(TOP,sp.y), RH
0e80: 54 2c 20 4d 69 6e 3c 69 6e 74 3e 28 42 54 4d 2c  T, Min<int>(BTM,
0e90: 73 70 2e 79 2b 76 69 65 77 5f 2e 66 6e 74 28 29  sp.y+view_.fnt()
0ea0: 2e 48 28 29 29 20 7d 3b 0d 0a 09 09 3a 3a 49 6e  .H()) };....::In
0eb0: 76 61 6c 69 64 61 74 65 52 65 63 74 28 20 63 61  validateRect( ca
0ec0: 72 65 74 5f 2d 3e 68 77 6e 64 28 29 2c 20 26 72  ret_->hwnd(), &r
0ed0: 63 2c 20 46 41 4c 53 45 20 29 3b 0d 0a 09 09 52  c, FALSE );....R
0ee0: 45 43 54 20 72 65 20 3d 20 7b 20 4c 46 54 2c 20  ECT re = { LFT, 
0ef0: 4d 61 78 28 54 4f 50 2c 65 70 2e 79 29 2c 20 4d  Max(TOP,ep.y), M
0f00: 69 6e 28 52 48 54 2c 65 70 2e 78 29 2c 20 4d 69  in(RHT,ep.x), Mi
0f10: 6e 3c 69 6e 74 3e 28 42 54 4d 2c 65 70 2e 79 2b  n<int>(BTM,ep.y+
0f20: 76 69 65 77 5f 2e 66 6e 74 28 29 2e 48 28 29 29  view_.fnt().H())
0f30: 20 7d 3b 0d 0a 09 09 3a 3a 49 6e 76 61 6c 69 64   };....::Invalid
0f40: 61 74 65 52 65 63 74 28 20 63 61 72 65 74 5f 2d  ateRect( caret_-
0f50: 3e 68 77 6e 64 28 29 2c 20 26 72 65 2c 20 46 41  >hwnd(), &re, FA
0f60: 4c 53 45 20 29 3b 0d 0a 09 09 52 45 43 54 20 72  LSE );....RECT r
0f70: 64 20 3d 20 7b 20 4c 46 54 2c 20 4d 61 78 28 54  d = { LFT, Max(T
0f80: 4f 50 2c 72 63 2e 62 6f 74 74 6f 6d 29 2c 20 52  OP,rc.bottom), R
0f90: 48 54 2c 20 4d 69 6e 3c 69 6e 74 3e 28 28 6c 6f  HT, Min<int>((lo
0fa0: 6e 67 29 42 54 4d 2c 72 65 2e 74 6f 70 29 20 7d  ng)BTM,re.top) }
0fb0: 3b 0d 0a 09 09 3a 3a 49 6e 76 61 6c 69 64 61 74  ;....::Invalidat
0fc0: 65 52 65 63 74 28 20 63 61 72 65 74 5f 2d 3e 68  eRect( caret_->h
0fd0: 77 6e 64 28 29 2c 20 26 72 64 2c 20 46 41 4c 53  wnd(), &rd, FALS
0fe0: 45 20 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 62  E );...}..}....b
0ff0: 6f 6f 6c 20 43 75 72 73 6f 72 3a 3a 67 65 74 43  ool Cursor::getC
1000: 75 72 50 6f 73 28 20 63 6f 6e 73 74 20 56 50 6f  urPos( const VPo
1010: 73 2a 2a 20 73 74 61 72 74 2c 20 63 6f 6e 73 74  s** start, const
1020: 20 56 50 6f 73 2a 2a 20 65 6e 64 20 29 20 63 6f   VPos** end ) co
1030: 6e 73 74 0d 0a 7b 0d 0a 09 2a 73 74 61 72 74 20  nst..{...*start 
1040: 3d 20 2a 65 6e 64 20 3d 20 26 63 75 72 5f 3b 0d  = *end = &cur_;.
1050: 0a 09 69 66 28 20 63 75 72 5f 3d 3d 73 65 6c 5f  ..if( cur_==sel_
1060: 20 29 2f 2f 7c 7c 20 21 63 61 72 65 74 5f 2d 3e   )//|| !caret_->
1070: 69 73 41 6c 69 76 65 28 29 20 29 0d 0a 09 09 72  isAlive() )....r
1080: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09 69  eturn false;...i
1090: 66 28 20 63 75 72 5f 20 3c 20 73 65 6c 5f 20 29  f( cur_ < sel_ )
10a0: 0d 0a 09 09 2a 65 6e 64 20 3d 20 26 73 65 6c 5f  ....*end = &sel_
10b0: 3b 0d 0a 09 65 6c 73 65 0d 0a 09 09 2a 73 74 61  ;...else....*sta
10c0: 72 74 20 3d 20 26 73 65 6c 5f 3b 0d 0a 09 72 65  rt = &sel_;...re
10d0: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d  turn true;..}...
10e0: 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d  .......//-------
10f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1130: 2d 2d 0d 0a 2f 2f 20 56 69 65 77 82 a9 82 e7 82  --..// View.....
1140: cc 8e 77 97 df 82 f0 8f 88 97 9d 0d 0a 2f 2f 2d  ..w..........//-
1150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1190: 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 76 6f 69 64  --------....void
11a0: 20 43 75 72 73 6f 72 3a 3a 6f 6e 5f 73 65 74 66   Cursor::on_setf
11b0: 6f 63 75 73 28 29 0d 0a 7b 0d 0a 09 63 61 72 65  ocus()..{...care
11c0: 74 5f 2d 3e 43 72 65 61 74 65 28 20 76 69 65 77  t_->Create( view
11d0: 5f 2e 66 6e 74 28 29 2e 48 28 29 2c 0d 0a 09 09  _.fnt().H(),....
11e0: 28 62 49 6e 73 5f 20 3f 20 32 20 3a 20 76 69 65  (bIns_ ? 2 : vie
11f0: 77 5f 2e 66 6e 74 28 29 2e 57 28 29 29 2c 20 76  w_.fnt().W()), v
1200: 69 65 77 5f 2e 66 6e 74 28 29 2e 4c 6f 67 46 6f  iew_.fnt().LogFo
1210: 6e 74 28 29 20 29 3b 0d 0a 09 55 70 64 61 74 65  nt() );...Update
1220: 43 61 72 65 74 50 6f 73 28 29 3b 0d 0a 7d 0d 0a  CaretPos();..}..
1230: 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a 6f  ..void Cursor::o
1240: 6e 5f 6b 69 6c 6c 66 6f 63 75 73 28 29 0d 0a 7b  n_killfocus()..{
1250: 0d 0a 09 63 61 72 65 74 5f 2d 3e 44 65 73 74 72  ...caret_->Destr
1260: 6f 79 28 29 3b 0d 0a 09 52 65 64 72 61 77 28 20  oy();...Redraw( 
1270: 63 75 72 5f 2c 20 73 65 6c 5f 20 29 3b 0d 0a 7d  cur_, sel_ );..}
1280: 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a  ....void Cursor:
1290: 3a 6f 6e 5f 73 63 72 6f 6c 6c 5f 62 65 67 69 6e  :on_scroll_begin
12a0: 28 29 0d 0a 7b 0d 0a 09 63 61 72 65 74 5f 2d 3e  ()..{...caret_->
12b0: 48 69 64 65 28 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f  Hide();..}....vo
12c0: 69 64 20 43 75 72 73 6f 72 3a 3a 6f 6e 5f 73 63  id Cursor::on_sc
12d0: 72 6f 6c 6c 5f 65 6e 64 28 29 0d 0a 7b 0d 0a 09  roll_end()..{...
12e0: 55 70 64 61 74 65 43 61 72 65 74 50 6f 73 28 29  UpdateCaretPos()
12f0: 3b 0d 0a 09 63 61 72 65 74 5f 2d 3e 53 68 6f 77  ;...caret_->Show
1300: 28 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43  ();..}....void C
1310: 75 72 73 6f 72 3a 3a 52 65 73 65 74 50 6f 73 28  ursor::ResetPos(
1320: 29 0d 0a 7b 0d 0a 09 2f 2f 20 90 dd 92 e8 95 cf  )..{...// ......
1330: 8d 58 82 c8 82 c7 82 c9 91 ce 89 9e 0d 0a 09 76  .X.............v
1340: 69 65 77 5f 2e 43 6f 6e 76 44 50 6f 73 54 6f 56  iew_.ConvDPosToV
1350: 50 6f 73 28 20 63 75 72 5f 2c 20 26 63 75 72 5f  Pos( cur_, &cur_
1360: 20 29 3b 0d 0a 09 76 69 65 77 5f 2e 43 6f 6e 76   );...view_.Conv
1370: 44 50 6f 73 54 6f 56 50 6f 73 28 20 73 65 6c 5f  DPosToVPos( sel_
1380: 2c 20 26 73 65 6c 5f 20 29 3b 0d 0a 09 55 70 64  , &sel_ );...Upd
1390: 61 74 65 43 61 72 65 74 50 6f 73 28 29 3b 0d 0a  ateCaretPos();..
13a0: 09 69 66 28 20 63 61 72 65 74 5f 2d 3e 69 73 41  .if( caret_->isA
13b0: 6c 69 76 65 28 29 20 29 0d 0a 09 09 76 69 65 77  live() )....view
13c0: 5f 2e 53 63 72 6f 6c 6c 54 6f 28 20 63 75 72 5f  _.ScrollTo( cur_
13d0: 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43   );..}....void C
13e0: 75 72 73 6f 72 3a 3a 6f 6e 5f 74 65 78 74 5f 75  ursor::on_text_u
13f0: 70 64 61 74 65 0d 0a 09 28 20 63 6f 6e 73 74 20  pdate...( const 
1400: 44 50 6f 73 26 20 73 2c 20 63 6f 6e 73 74 20 44  DPos& s, const D
1410: 50 6f 73 26 20 65 2c 20 63 6f 6e 73 74 20 44 50  Pos& e, const DP
1420: 6f 73 26 20 65 32 2c 20 62 6f 6f 6c 20 6d 43 75  os& e2, bool mCu
1430: 72 20 29 0d 0a 7b 0d 0a 09 56 50 6f 73 2a 20 73  r )..{...VPos* s
1440: 65 61 72 63 68 5f 62 61 73 65 20 20 3d 20 4e 55  earch_base  = NU
1450: 4c 4c 3b 0d 0a 0d 0a 09 69 66 28 20 6d 43 75 72  LL;.....if( mCur
1460: 20 26 26 20 73 3d 3d 63 75 72 5f 20 26 26 20 65   && s==cur_ && e
1470: 3d 3d 73 65 6c 5f 20 29 0d 0a 09 7b 0d 0a 09 09  ==sel_ )...{....
1480: 73 65 61 72 63 68 5f 62 61 73 65 20 3d 20 26 63  search_base = &c
1490: 75 72 5f 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 20  ur_;...}...else 
14a0: 69 66 28 20 6d 43 75 72 20 26 26 20 73 3d 3d 73  if( mCur && s==s
14b0: 65 6c 5f 20 26 26 20 65 3d 3d 63 75 72 5f 20 29  el_ && e==cur_ )
14c0: 0d 0a 09 7b 0d 0a 09 09 73 65 61 72 63 68 5f 62  ...{....search_b
14d0: 61 73 65 20 3d 20 26 73 65 6c 5f 3b 0d 0a 09 7d  ase = &sel_;...}
14e0: 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09 09 52  ...else...{....R
14f0: 65 64 72 61 77 28 20 63 75 72 5f 2c 20 73 65 6c  edraw( cur_, sel
1500: 5f 20 29 3b 0d 0a 09 09 69 66 28 20 6d 43 75 72  _ );....if( mCur
1510: 20 26 26 20 63 61 72 65 74 5f 2d 3e 69 73 41 6c   && caret_->isAl
1520: 69 76 65 28 29 20 29 0d 0a 09 09 7b 0d 0a 09 09  ive() )....{....
1530: 09 69 66 28 20 63 75 72 5f 20 3c 3d 20 73 20 29  .if( cur_ <= s )
1540: 0d 0a 09 09 09 09 73 65 61 72 63 68 5f 62 61 73  ......search_bas
1550: 65 20 3d 20 26 63 75 72 5f 3b 0d 0a 09 09 7d 0d  e = &cur_;....}.
1560: 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09  ...else....{....
1570: 09 69 66 28 20 73 20 3c 20 63 75 72 5f 20 29 0d  .if( s < cur_ ).
1580: 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 20 63  ....{......if( c
1590: 75 72 5f 20 3c 3d 20 65 20 29 0d 0a 09 09 09 09  ur_ <= e )......
15a0: 09 63 75 72 5f 20 3d 20 65 32 3b 0d 0a 09 09 09  .cur_ = e2;.....
15b0: 09 65 6c 73 65 20 69 66 28 20 63 75 72 5f 2e 74  .else if( cur_.t
15c0: 6c 20 3d 3d 20 65 2e 74 6c 20 29 0d 0a 09 09 09  l == e.tl ).....
15d0: 09 09 63 75 72 5f 2e 74 6c 3d 65 32 2e 74 6c 2c  ..cur_.tl=e2.tl,
15e0: 20 63 75 72 5f 2e 61 64 3d 65 32 2e 61 64 2b 63   cur_.ad=e2.ad+c
15f0: 75 72 5f 2e 61 64 2d 65 2e 61 64 3b 0d 0a 09 09  ur_.ad-e.ad;....
1600: 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 63 75 72  ..else.......cur
1610: 5f 2e 74 6c 3d 65 32 2e 74 6c 2d 65 2e 74 6c 3b  _.tl=e2.tl-e.tl;
1620: 0d 0a 09 09 09 09 76 69 65 77 5f 2e 43 6f 6e 76  ......view_.Conv
1630: 44 50 6f 73 54 6f 56 50 6f 73 28 20 63 75 72 5f  DPosToVPos( cur_
1640: 2c 20 26 63 75 72 5f 20 29 3b 0d 0a 09 09 09 7d  , &cur_ );.....}
1650: 0d 0a 09 09 09 69 66 28 20 73 20 3c 20 73 65 6c  .....if( s < sel
1660: 5f 20 29 0d 0a 09 09 09 09 73 65 6c 5f 20 3d 20  _ )......sel_ = 
1670: 63 75 72 5f 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a  cur_;....}...}..
1680: 0d 0a 09 69 66 28 20 6d 43 75 72 20 29 0d 0a 09  ...if( mCur )...
1690: 7b 0d 0a 09 09 76 69 65 77 5f 2e 43 6f 6e 76 44  {....view_.ConvD
16a0: 50 6f 73 54 6f 56 50 6f 73 28 20 65 32 2c 20 26  PosToVPos( e2, &
16b0: 63 75 72 5f 2c 20 73 65 61 72 63 68 5f 62 61 73  cur_, search_bas
16c0: 65 20 29 3b 0d 0a 09 09 73 65 6c 5f 20 3d 20 63  e );....sel_ = c
16d0: 75 72 5f 3b 0d 0a 09 09 69 66 28 20 63 61 72 65  ur_;....if( care
16e0: 74 5f 2d 3e 69 73 41 6c 69 76 65 28 29 20 29 0d  t_->isAlive() ).
16f0: 0a 09 09 09 76 69 65 77 5f 2e 53 63 72 6f 6c 6c  ....view_.Scroll
1700: 54 6f 28 20 63 75 72 5f 20 29 3b 0d 0a 09 7d 0d  To( cur_ );...}.
1710: 0a 09 55 70 64 61 74 65 43 61 72 65 74 50 6f 73  ..UpdateCaretPos
1720: 28 29 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f  ();..}........//
1730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 83 4c  ---------..// .L
1780: 81 5b 93 fc 97 cd 82 d6 82 cc 91 ce 89 9e 0d 0a  .[..............
1790: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  //--------------
17a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 76  -----------....v
17e0: 6f 69 64 20 43 75 72 45 76 48 61 6e 64 6c 65 72  oid CurEvHandler
17f0: 3a 3a 6f 6e 5f 63 68 61 72 28 20 43 75 72 73 6f  ::on_char( Curso
1800: 72 26 20 63 75 72 2c 20 75 6e 69 63 6f 64 65 20  r& cur, unicode 
1810: 77 63 68 20 29 0d 0a 7b 0d 0a 09 63 75 72 2e 49  wch )..{...cur.I
1820: 6e 70 75 74 43 68 61 72 28 20 77 63 68 20 29 3b  nputChar( wch );
1830: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 45  ..}....void CurE
1840: 76 48 61 6e 64 6c 65 72 3a 3a 6f 6e 5f 69 6d 65  vHandler::on_ime
1850: 28 20 43 75 72 73 6f 72 26 20 63 75 72 2c 20 75  ( Cursor& cur, u
1860: 6e 69 63 6f 64 65 2a 20 73 74 72 2c 20 75 6c 6f  nicode* str, ulo
1870: 6e 67 20 6c 65 6e 20 29 0d 0a 7b 0d 0a 09 63 75  ng len )..{...cu
1880: 72 2e 49 6e 70 75 74 28 20 73 74 72 2c 20 6c 65  r.Input( str, le
1890: 6e 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20  n );..}....void 
18a0: 43 75 72 45 76 48 61 6e 64 6c 65 72 3a 3a 6f 6e  CurEvHandler::on
18b0: 5f 6b 65 79 28 20 43 75 72 73 6f 72 26 20 63 75  _key( Cursor& cu
18c0: 72 2c 20 69 6e 74 20 76 6b 2c 20 62 6f 6f 6c 20  r, int vk, bool 
18d0: 73 66 74 2c 20 62 6f 6f 6c 20 63 74 6c 20 29 0d  sft, bool ctl ).
18e0: 0a 7b 0d 0a 09 73 77 69 74 63 68 28 20 76 6b 20  .{...switch( vk 
18f0: 29 0d 0a 09 7b 0d 0a 09 63 61 73 65 20 56 4b 5f  )...{...case VK_
1900: 48 4f 4d 45 3a 09 63 75 72 2e 48 6f 6d 65 28 20  HOME:.cur.Home( 
1910: 63 74 6c 2c 20 73 66 74 20 29 3b 09 62 72 65 61  ctl, sft );.brea
1920: 6b 3b 0d 0a 09 63 61 73 65 20 56 4b 5f 45 4e 44  k;...case VK_END
1930: 3a 09 63 75 72 2e 45 6e 64 28 20 63 74 6c 2c 20  :.cur.End( ctl, 
1940: 73 66 74 20 29 3b 09 62 72 65 61 6b 3b 0d 0a 09  sft );.break;...
1950: 63 61 73 65 20 56 4b 5f 52 49 47 48 54 3a 09 63  case VK_RIGHT:.c
1960: 75 72 2e 52 69 67 68 74 28 20 63 74 6c 2c 20 73  ur.Right( ctl, s
1970: 66 74 20 29 3b 09 62 72 65 61 6b 3b 0d 0a 09 63  ft );.break;...c
1980: 61 73 65 20 56 4b 5f 4c 45 46 54 3a 09 63 75 72  ase VK_LEFT:.cur
1990: 2e 4c 65 66 74 28 20 63 74 6c 2c 20 73 66 74 20  .Left( ctl, sft 
19a0: 29 3b 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65  );.break;...case
19b0: 20 56 4b 5f 55 50 3a 09 09 63 75 72 2e 55 70 28   VK_UP:..cur.Up(
19c0: 20 63 74 6c 2c 20 73 66 74 20 29 3b 09 09 62 72   ctl, sft );..br
19d0: 65 61 6b 3b 0d 0a 09 63 61 73 65 20 56 4b 5f 44  eak;...case VK_D
19e0: 4f 57 4e 3a 09 63 75 72 2e 44 6f 77 6e 28 20 63  OWN:.cur.Down( c
19f0: 74 6c 2c 20 73 66 74 20 29 3b 09 62 72 65 61 6b  tl, sft );.break
1a00: 3b 0d 0a 09 63 61 73 65 20 56 4b 5f 50 52 49 4f  ;...case VK_PRIO
1a10: 52 3a 09 63 75 72 2e 50 61 67 65 55 70 28 20 73  R:.cur.PageUp( s
1a20: 66 74 20 29 3b 09 09 62 72 65 61 6b 3b 0d 0a 09  ft );..break;...
1a30: 63 61 73 65 20 56 4b 5f 4e 45 58 54 3a 09 63 75  case VK_NEXT:.cu
1a40: 72 2e 50 61 67 65 44 6f 77 6e 28 20 73 66 74 20  r.PageDown( sft 
1a50: 29 3b 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65  );.break;...case
1a60: 20 56 4b 5f 44 45 4c 45 54 45 3a 09 63 75 72 2e   VK_DELETE:.cur.
1a70: 44 65 6c 28 29 3b 09 09 09 09 62 72 65 61 6b 3b  Del();....break;
1a80: 0d 0a 09 63 61 73 65 20 56 4b 5f 42 41 43 4b 3a  ...case VK_BACK:
1a90: 09 63 75 72 2e 44 65 6c 42 61 63 6b 28 29 3b 09  .cur.DelBack();.
1aa0: 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20  ..break;...case 
1ab0: 56 4b 5f 49 4e 53 45 52 54 3a 20 63 75 72 2e 53  VK_INSERT: cur.S
1ac0: 65 74 49 6e 73 4d 6f 64 65 28 21 63 75 72 2e 69  etInsMode(!cur.i
1ad0: 73 49 6e 73 4d 6f 64 65 28 29 29 3b 20 62 72 65  sInsMode()); bre
1ae0: 61 6b 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f  ak;...}..}....vo
1af0: 69 64 20 43 75 72 73 6f 72 3a 3a 6f 6e 5f 63 68  id Cursor::on_ch
1b00: 61 72 28 20 54 43 48 41 52 20 63 68 20 29 0d 0a  ar( TCHAR ch )..
1b10: 7b 0d 0a 09 69 66 28 20 21 62 52 4f 5f 20 26 26  {...if( !bRO_ &&
1b20: 20 63 68 21 3d 30 78 37 66 0d 0a 09 20 26 26 20   ch!=0x7f... && 
1b30: 28 28 75 6e 73 69 67 6e 65 64 29 63 68 3e 3d 30  ((unsigned)ch>=0
1b40: 78 32 30 20 7c 7c 20 63 68 3d 3d 54 45 58 54 28  x20 || ch==TEXT(
1b50: 27 5c 72 27 29 20 7c 7c 20 63 68 3d 3d 54 45 58  '\r') || ch==TEX
1b60: 54 28 27 5c 74 27 29 29 20 29 0d 0a 09 7b 0d 0a  T('\t')) )...{..
1b70: 09 23 69 66 64 65 66 20 5f 55 4e 49 43 4f 44 45  .#ifdef _UNICODE
1b80: 0d 0a 09 09 70 45 76 48 61 6e 5f 2d 3e 6f 6e 5f  ....pEvHan_->on_
1b90: 63 68 61 72 28 20 2a 74 68 69 73 2c 20 63 68 20  char( *this, ch 
1ba0: 29 3b 0d 0a 09 23 65 6c 73 65 0d 0a 09 09 75 6e  );...#else....un
1bb0: 69 63 6f 64 65 20 77 63 20 3d 20 63 68 3b 0d 0a  icode wc = ch;..
1bc0: 09 09 69 66 28 20 63 68 20 26 20 30 78 38 30 20  ..if( ch & 0x80 
1bd0: 29 20 2f 2f 20 94 f1 41 53 43 49 49 95 b6 8e 9a  ) // ..ASCII....
1be0: 82 c9 82 cd 83 67 83 8a 83 72 83 41 83 8b 82 c5  .....g...r.A....
1bf0: 82 c8 82 a2 95 cf 8a b7 82 aa 95 4b 97 76 0d 0a  ...........K.v..
1c00: 09 09 09 3a 3a 4d 75 6c 74 69 42 79 74 65 54 6f  ...::MultiByteTo
1c10: 57 69 64 65 43 68 61 72 28 20 43 50 5f 41 43 50  WideChar( CP_ACP
1c20: 2c 20 4d 42 5f 43 4f 4d 50 4f 53 49 54 45 2c 20  , MB_COMPOSITE, 
1c30: 26 63 68 2c 20 31 2c 20 26 77 63 2c 20 31 20 29  &ch, 1, &wc, 1 )
1c40: 3b 0d 0a 09 09 70 45 76 48 61 6e 5f 2d 3e 6f 6e  ;....pEvHan_->on
1c50: 5f 63 68 61 72 28 20 2a 74 68 69 73 2c 20 77 63  _char( *this, wc
1c60: 20 29 3b 0d 0a 09 23 65 6e 64 69 66 0d 0a 09 7d   );...#endif...}
1c70: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73  ..}....void Curs
1c80: 6f 72 3a 3a 6f 6e 5f 69 6d 65 5f 63 6f 6d 70 6f  or::on_ime_compo
1c90: 73 69 74 69 6f 6e 28 20 4c 50 41 52 41 4d 20 6c  sition( LPARAM l
1ca0: 70 20 29 0d 0a 7b 0d 0a 09 76 69 65 77 5f 2e 53  p )..{...view_.S
1cb0: 63 72 6f 6c 6c 54 6f 28 20 63 75 72 5f 20 29 3b  crollTo( cur_ );
1cc0: 0d 0a 09 69 66 28 20 21 62 52 4f 5f 20 26 26 20  ...if( !bRO_ && 
1cd0: 28 6c 70 26 47 43 53 5f 52 45 53 55 4c 54 53 54  (lp&GCS_RESULTST
1ce0: 52 29 20 29 0d 0a 09 7b 0d 0a 09 09 75 6e 69 63  R) )...{....unic
1cf0: 6f 64 65 2a 20 73 74 72 3b 0d 0a 09 09 75 6c 6f  ode* str;....ulo
1d00: 6e 67 20 20 20 20 6c 65 6e 3b 0d 0a 09 09 69 6d  ng    len;....im
1d10: 65 28 29 2e 47 65 74 53 74 72 69 6e 67 28 20 63  e().GetString( c
1d20: 61 72 65 74 5f 2d 3e 68 77 6e 64 28 29 2c 20 26  aret_->hwnd(), &
1d30: 73 74 72 2c 20 26 6c 65 6e 20 29 3b 0d 0a 09 09  str, &len );....
1d40: 69 66 28 20 73 74 72 20 29 0d 0a 09 09 7b 0d 0a  if( str )....{..
1d50: 09 09 09 70 45 76 48 61 6e 5f 2d 3e 6f 6e 5f 69  ...pEvHan_->on_i
1d60: 6d 65 28 20 2a 74 68 69 73 2c 20 73 74 72 2c 20  me( *this, str, 
1d70: 6c 65 6e 20 29 3b 0d 0a 09 09 09 64 65 6c 65 74  len );.....delet
1d80: 65 20 5b 5d 20 73 74 72 3b 0d 0a 09 09 7d 0d 0a  e [] str;....}..
1d90: 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75  .}..}....void Cu
1da0: 72 73 6f 72 3a 3a 6f 6e 5f 6b 65 79 64 6f 77 6e  rsor::on_keydown
1db0: 28 20 69 6e 74 20 76 6b 2c 20 4c 50 41 52 41 4d  ( int vk, LPARAM
1dc0: 20 66 6c 61 67 20 29 0d 0a 7b 0d 0a 09 62 6f 6f   flag )..{...boo
1dd0: 6c 20 73 66 74 20 3d 20 28 3a 3a 47 65 74 4b 65  l sft = (::GetKe
1de0: 79 53 74 61 74 65 28 56 4b 5f 53 48 49 46 54 29  yState(VK_SHIFT)
1df0: 3e 3e 31 35 29 21 3d 30 3b 0d 0a 09 62 6f 6f 6c  >>15)!=0;...bool
1e00: 20 63 74 6c 20 3d 20 28 3a 3a 47 65 74 4b 65 79   ctl = (::GetKey
1e10: 53 74 61 74 65 28 56 4b 5f 43 4f 4e 54 52 4f 4c  State(VK_CONTROL
1e20: 29 3e 3e 31 35 29 21 3d 30 3b 0d 0a 09 70 45 76  )>>15)!=0;...pEv
1e30: 48 61 6e 5f 2d 3e 6f 6e 5f 6b 65 79 28 20 2a 74  Han_->on_key( *t
1e40: 68 69 73 2c 20 76 6b 2c 20 73 66 74 2c 20 63 74  his, vk, sft, ct
1e50: 6c 20 29 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f  l );..}......../
1e60: 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /---------------
1e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 83  ----------..// .
1eb0: 82 81 5b 83 68 90 d8 91 d6 0d 0a 2f 2f 2d 2d 2d  ..[.h......//---
1ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f00: 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 76 6f 69 64 20 43  ------....void C
1f10: 75 72 73 6f 72 3a 3a 53 65 74 49 6e 73 4d 6f 64  ursor::SetInsMod
1f20: 65 28 20 62 6f 6f 6c 20 62 49 6e 73 20 29 0d 0a  e( bool bIns )..
1f30: 7b 0d 0a 09 62 49 6e 73 5f 20 3d 20 62 49 6e 73  {...bIns_ = bIns
1f40: 3b 0d 0a 09 6f 6e 5f 73 65 74 66 6f 63 75 73 28  ;...on_setfocus(
1f50: 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75  );..}....void Cu
1f60: 72 73 6f 72 3a 3a 53 65 74 52 4f 4d 6f 64 65 28  rsor::SetROMode(
1f70: 20 62 6f 6f 6c 20 62 52 4f 20 29 0d 0a 7b 0d 0a   bool bRO )..{..
1f80: 09 62 52 4f 5f 20 3d 20 62 52 4f 3b 0d 0a 7d 0d  .bRO_ = bRO;..}.
1f90: 0a 0d 0a 0d 0a 09 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d  ........//------
1fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1fe0: 2d 2d 2d 0d 0a 2f 2f 20 95 b6 8e 9a 93 fc 97 cd  ---..// ........
1ff0: 81 45 8d ed 8f 9c 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d  .E......//------
2000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2040: 2d 2d 2d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73  ---....void Curs
2050: 6f 72 3a 3a 49 6e 70 75 74 43 68 61 72 28 20 75  or::InputChar( u
2060: 6e 69 63 6f 64 65 20 63 68 20 29 0d 0a 7b 0d 0a  nicode ch )..{..
2070: 09 2f 2f 20 81 75 8f e3 8f 91 83 82 81 5b 83 68  .// .u.......[.h
2080: 20 81 95 20 91 49 91 f0 8f f3 91 d4 82 c5 82 c8   .. .I..........
2090: 82 a2 20 81 95 20 8d 73 96 96 82 c5 82 c8 82 a2  .. .. .s........
20a0: 81 76 82 c8 82 e7 89 45 88 ea 95 b6 8e 9a 91 49  .v.....E.......I
20b0: 91 f0 0d 0a 09 69 66 28 20 21 62 49 6e 73 5f 20  .....if( !bIns_ 
20c0: 26 26 20 63 75 72 5f 3d 3d 73 65 6c 5f 20 26 26  && cur_==sel_ &&
20d0: 20 64 6f 63 5f 2e 6c 65 6e 28 63 75 72 5f 2e 74   doc_.len(cur_.t
20e0: 6c 29 21 3d 63 75 72 5f 2e 61 64 20 29 0d 0a 09  l)!=cur_.ad )...
20f0: 09 52 69 67 68 74 28 20 66 61 6c 73 65 2c 20 74  .Right( false, t
2100: 72 75 65 20 29 3b 0d 0a 0d 0a 09 2f 2f 20 93 fc  rue );.....// ..
2110: 97 cd 0d 0a 09 49 6e 70 75 74 28 20 26 63 68 2c  .....Input( &ch,
2120: 20 31 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64   1 );..}....void
2130: 20 43 75 72 73 6f 72 3a 3a 49 6e 70 75 74 28 20   Cursor::Input( 
2140: 63 6f 6e 73 74 20 75 6e 69 63 6f 64 65 2a 20 73  const unicode* s
2150: 74 72 2c 20 75 6c 6f 6e 67 20 6c 65 6e 20 29 0d  tr, ulong len ).
2160: 0a 7b 0d 0a 09 69 66 28 20 63 75 72 5f 3d 3d 73  .{...if( cur_==s
2170: 65 6c 5f 20 29 0d 0a 09 09 64 6f 63 5f 2e 45 78  el_ )....doc_.Ex
2180: 65 63 75 74 65 28 20 49 6e 73 65 72 74 28 20 63  ecute( Insert( c
2190: 75 72 5f 2c 20 73 74 72 2c 20 6c 65 6e 20 29 20  ur_, str, len ) 
21a0: 29 3b 0d 0a 09 65 6c 73 65 0d 0a 09 09 64 6f 63  );...else....doc
21b0: 5f 2e 45 78 65 63 75 74 65 28 20 52 65 70 6c 61  _.Execute( Repla
21c0: 63 65 28 20 63 75 72 5f 2c 20 73 65 6c 5f 2c 20  ce( cur_, sel_, 
21d0: 73 74 72 2c 20 6c 65 6e 20 29 20 29 3b 0d 0a 7d  str, len ) );..}
21e0: 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a  ....void Cursor:
21f0: 3a 49 6e 70 75 74 28 20 63 6f 6e 73 74 20 63 68  :Input( const ch
2200: 61 72 2a 20 73 74 72 2c 20 75 6c 6f 6e 67 20 6c  ar* str, ulong l
2210: 65 6e 20 29 0d 0a 7b 0d 0a 09 75 6e 69 63 6f 64  en )..{...unicod
2220: 65 2a 20 75 73 74 72 20 3d 20 6e 65 77 20 75 6e  e* ustr = new un
2230: 69 63 6f 64 65 5b 20 6c 65 6e 2a 34 20 5d 3b 0d  icode[ len*4 ];.
2240: 0a 09 6c 65 6e 20 3d 20 3a 3a 4d 75 6c 74 69 42  ..len = ::MultiB
2250: 79 74 65 54 6f 57 69 64 65 43 68 61 72 28 20 43  yteToWideChar( C
2260: 50 5f 41 43 50 2c 20 30 2c 20 73 74 72 2c 20 6c  P_ACP, 0, str, l
2270: 65 6e 2c 20 75 73 74 72 2c 20 6c 65 6e 2a 34 20  en, ustr, len*4 
2280: 29 3b 0d 0a 09 49 6e 70 75 74 28 20 75 73 74 72  );...Input( ustr
2290: 2c 20 6c 65 6e 20 29 3b 0d 0a 09 64 65 6c 65 74  , len );...delet
22a0: 65 20 5b 5d 20 75 73 74 72 3b 0d 0a 7d 0d 0a 0d  e [] ustr;..}...
22b0: 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a 44 65  .void Cursor::De
22c0: 6c 42 61 63 6b 28 29 0d 0a 7b 0d 0a 09 2f 2f 20  lBack()..{...// 
22d0: 91 49 91 f0 8f f3 91 d4 82 c8 82 e7 20 42 61 63  .I.......... Bac
22e0: 6b 53 70 61 63 65 20 3d 3d 20 44 65 6c 65 74 65  kSpace == Delete
22f0: 0d 0a 09 2f 2f 20 82 c5 82 c8 82 af 82 ea 82 ce  ...// ..........
2300: 81 41 20 42 61 63 6b 53 70 61 63 65 20 3d 3d 20  .A BackSpace == 
2310: 4c 65 66 74 20 2b 20 44 65 6c 65 74 65 20 28 8e  Left + Delete (.
2320: e8 94 b2 82 ab 0d 0a 09 69 66 28 20 63 75 72 5f  ........if( cur_
2330: 20 3d 3d 20 73 65 6c 5f 20 29 0d 0a 09 7b 0d 0a   == sel_ )...{..
2340: 09 09 69 66 28 20 63 75 72 5f 2e 74 6c 3d 3d 30  ..if( cur_.tl==0
2350: 20 26 26 20 63 75 72 5f 2e 61 64 3d 3d 30 20 29   && cur_.ad==0 )
2360: 0d 0a 09 09 09 72 65 74 75 72 6e 3b 0d 0a 09 09  .....return;....
2370: 4c 65 66 74 28 20 66 61 6c 73 65 2c 20 66 61 6c  Left( false, fal
2380: 73 65 20 29 3b 0d 0a 09 7d 0d 0a 09 44 65 6c 28  se );...}...Del(
2390: 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75  );..}....void Cu
23a0: 72 73 6f 72 3a 3a 44 65 6c 28 29 0d 0a 7b 0d 0a  rsor::Del()..{..
23b0: 09 2f 2f 20 91 49 91 f0 8f f3 91 d4 82 c8 82 e7  .// .I..........
23c0: 20 63 75 72 5f 20 81 60 20 73 65 6c 5f 20 82 f0   cur_ .` sel_ ..
23d0: 8d ed 8f 9c 0d 0a 09 2f 2f 20 82 c5 82 c8 82 af  .......// ......
23e0: 82 ea 82 ce 81 41 20 63 75 72 5f 20 81 60 20 72  .....A cur_ .` r
23f0: 69 67 68 74 4f 66 28 63 75 72 5f 29 20 82 f0 8d  ightOf(cur_) ...
2400: ed 8f 9c 0d 0a 09 44 50 6f 73 20 64 70 20 3d 20  ......DPos dp = 
2410: 28 63 75 72 5f 3d 3d 73 65 6c 5f 20 3f 20 64 6f  (cur_==sel_ ? do
2420: 63 5f 2e 72 69 67 68 74 4f 66 28 63 75 72 5f 29  c_.rightOf(cur_)
2430: 20 3a 20 28 44 50 6f 73 29 73 65 6c 5f 20 29 3b   : (DPos)sel_ );
2440: 0d 0a 09 69 66 28 20 63 75 72 5f 20 21 3d 20 64  ...if( cur_ != d
2450: 70 20 29 0d 0a 09 09 64 6f 63 5f 2e 45 78 65 63  p )....doc_.Exec
2460: 75 74 65 28 20 44 65 6c 65 74 65 28 20 63 75 72  ute( Delete( cur
2470: 5f 2c 20 64 70 20 29 20 29 3b 0d 0a 7d 0d 0a 0d  _, dp ) );..}...
2480: 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d  .....//---------
2490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24d0: 0d 0a 2f 2f 20 83 65 83 4c 83 58 83 67 8e e6 93  ..// .e.L.X.g...
24e0: be 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ...//-----------
24f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a  --------------..
2530: 0d 0a 6b 69 3a 3a 61 61 72 72 3c 75 6e 69 63 6f  ..ki::aarr<unico
2540: 64 65 3e 20 43 75 72 73 6f 72 3a 3a 67 65 74 53  de> Cursor::getS
2550: 65 6c 65 63 74 65 64 53 74 72 28 29 20 63 6f 6e  electedStr() con
2560: 73 74 0d 0a 7b 0d 0a 09 44 50 6f 73 20 64 6d 3d  st..{...DPos dm=
2570: 63 75 72 5f 2c 20 64 4d 3d 73 65 6c 5f 3b 0d 0a  cur_, dM=sel_;..
2580: 09 69 66 28 20 63 75 72 5f 20 3e 20 73 65 6c 5f  .if( cur_ > sel_
2590: 20 29 0d 0a 09 09 64 6d 3d 73 65 6c 5f 2c 20 64   )....dm=sel_, d
25a0: 4d 3d 63 75 72 5f 3b 0d 0a 0d 0a 09 2f 2f 20 83  M=cur_;.....// .
25b0: 65 83 4c 83 58 83 67 8e e6 93 be 0d 0a 09 69 6e  e.L.X.g.......in
25c0: 74 20 6c 65 6e 20 3d 20 64 6f 63 5f 2e 67 65 74  t len = doc_.get
25d0: 52 61 6e 67 65 4c 65 6e 67 74 68 28 20 64 6d 2c  RangeLength( dm,
25e0: 20 64 4d 20 29 3b 0d 0a 09 6b 69 3a 3a 61 61 72   dM );...ki::aar
25f0: 72 3c 75 6e 69 63 6f 64 65 3e 20 75 62 28 20 6e  r<unicode> ub( n
2600: 65 77 20 75 6e 69 63 6f 64 65 5b 6c 65 6e 2b 31  ew unicode[len+1
2610: 5d 20 29 3b 0d 0a 09 64 6f 63 5f 2e 67 65 74 54  ] );...doc_.getT
2620: 65 78 74 28 20 75 62 2e 67 65 74 28 29 2c 20 64  ext( ub.get(), d
2630: 6d 2c 20 64 4d 20 29 3b 0d 0a 09 72 65 74 75 72  m, dM );...retur
2640: 6e 20 75 62 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f 2d 2d  n ub;..}....//--
2650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2690: 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 83 4e 83 8a  -------..// .N..
26a0: 83 62 83 76 83 7b 81 5b 83 68 8f 88 97 9d 0d 0a  .b.v.{.[.h......
26b0: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  //--------------
26c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 76  -----------....v
2700: 6f 69 64 20 43 75 72 73 6f 72 3a 3a 43 75 74 28  oid Cursor::Cut(
2710: 29 0d 0a 7b 0d 0a 09 69 66 28 20 63 75 72 5f 20  )..{...if( cur_ 
2720: 21 3d 20 73 65 6c 5f 20 29 0d 0a 09 7b 0d 0a 09  != sel_ )...{...
2730: 09 2f 2f 20 83 52 83 73 81 5b 82 b5 82 c4 8d ed  .// .R.s.[......
2740: 8f 9c 0d 0a 09 09 43 6f 70 79 28 29 3b 0d 0a 09  ......Copy();...
2750: 09 44 65 6c 28 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a  .Del();...}..}..
2760: 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a 43  ..void Cursor::C
2770: 6f 70 79 28 29 0d 0a 7b 0d 0a 09 43 6c 69 70 62  opy()..{...Clipb
2780: 6f 61 72 64 20 63 6c 70 28 20 63 61 72 65 74 5f  oard clp( caret_
2790: 2d 3e 68 77 6e 64 28 29 2c 20 66 61 6c 73 65 20  ->hwnd(), false 
27a0: 29 3b 0d 0a 09 69 66 28 20 63 75 72 5f 3d 3d 73  );...if( cur_==s
27b0: 65 6c 5f 20 7c 7c 20 21 63 6c 70 2e 69 73 4f 70  el_ || !clp.isOp
27c0: 65 6e 65 64 28 29 20 29 0d 0a 09 09 72 65 74 75  ened() )....retu
27d0: 72 6e 3b 0d 0a 0d 0a 09 44 50 6f 73 20 64 6d 3d  rn;.....DPos dm=
27e0: 63 75 72 5f 2c 20 64 4d 3d 73 65 6c 5f 3b 0d 0a  cur_, dM=sel_;..
27f0: 09 69 66 28 20 63 75 72 5f 20 3e 20 73 65 6c 5f  .if( cur_ > sel_
2800: 20 29 0d 0a 09 09 64 6d 3d 73 65 6c 5f 2c 20 64   )....dm=sel_, d
2810: 4d 3d 63 75 72 5f 3b 0d 0a 0d 0a 09 48 47 4c 4f  M=cur_;.....HGLO
2820: 42 41 4c 20 20 68 3b 0d 0a 09 75 6e 69 63 6f 64  BAL  h;...unicod
2830: 65 2a 20 70 3b 0d 0a 09 69 6e 74 20 20 20 20 6c  e* p;...int    l
2840: 65 6e 20 3d 20 64 6f 63 5f 2e 67 65 74 52 61 6e  en = doc_.getRan
2850: 67 65 4c 65 6e 67 74 68 28 20 64 6d 2c 20 64 4d  geLength( dm, dM
2860: 20 29 3b 0d 0a 0d 0a 09 69 66 28 20 61 70 70 28   );.....if( app(
2870: 29 2e 69 73 4e 54 28 29 20 29 0d 0a 09 7b 0d 0a  ).isNT() )...{..
2880: 09 09 2f 2f 20 4e 54 8c 6e 82 c8 82 e7 82 bb 82  ..// NT.n.......
2890: cc 82 dc 82 dc 83 5f 83 43 83 8c 83 4e 83 67 82  ......_.C...N.g.
28a0: c9 0d 0a 09 09 68 20 3d 20 3a 3a 47 6c 6f 62 61  .....h = ::Globa
28b0: 6c 41 6c 6c 6f 63 28 20 47 4d 45 4d 5f 4d 4f 56  lAlloc( GMEM_MOV
28c0: 45 41 42 4c 45 2c 20 28 6c 65 6e 2b 31 29 2a 32  EABLE, (len+1)*2
28d0: 20 29 3b 0d 0a 09 09 64 6f 63 5f 2e 67 65 74 54   );....doc_.getT
28e0: 65 78 74 28 20 73 74 61 74 69 63 5f 63 61 73 74  ext( static_cast
28f0: 3c 75 6e 69 63 6f 64 65 2a 3e 28 3a 3a 47 6c 6f  <unicode*>(::Glo
2900: 62 61 6c 4c 6f 63 6b 28 68 29 29 2c 20 64 6d 2c  balLock(h)), dm,
2910: 20 64 4d 20 29 3b 0d 0a 09 09 3a 3a 47 6c 6f 62   dM );....::Glob
2920: 61 6c 55 6e 6c 6f 63 6b 28 20 68 20 29 3b 0d 0a  alUnlock( h );..
2930: 09 09 63 6c 70 2e 53 65 74 44 61 74 61 28 20 43  ..clp.SetData( C
2940: 46 5f 55 4e 49 43 4f 44 45 54 45 58 54 2c 20 68  F_UNICODETEXT, h
2950: 20 29 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a   );...}...else..
2960: 09 7b 0d 0a 09 09 2f 2f 20 39 78 8c 6e 82 c8 82  .{....// 9x.n...
2970: e7 95 cf 8a b7 82 aa 95 4b 97 76 0d 0a 09 09 68  ........K.v....h
2980: 20 3d 20 3a 3a 47 6c 6f 62 61 6c 41 6c 6c 6f 63   = ::GlobalAlloc
2990: 28 20 47 4d 45 4d 5f 4d 4f 56 45 41 42 4c 45 2c  ( GMEM_MOVEABLE,
29a0: 20 28 6c 65 6e 2b 31 29 2a 33 20 29 3b 0d 0a 09   (len+1)*3 );...
29b0: 09 70 20 3d 20 6e 65 77 20 75 6e 69 63 6f 64 65  .p = new unicode
29c0: 5b 6c 65 6e 2b 31 5d 3b 0d 0a 09 09 64 6f 63 5f  [len+1];....doc_
29d0: 2e 67 65 74 54 65 78 74 28 20 70 2c 20 64 6d 2c  .getText( p, dm,
29e0: 20 64 4d 20 29 3b 0d 0a 09 09 3a 3a 57 69 64 65   dM );....::Wide
29f0: 43 68 61 72 54 6f 4d 75 6c 74 69 42 79 74 65 28  CharToMultiByte(
2a00: 20 43 50 5f 41 43 50 2c 20 30 2c 20 70 2c 20 2d   CP_ACP, 0, p, -
2a10: 31 2c 0d 0a 09 09 09 73 74 61 74 69 63 5f 63 61  1,.....static_ca
2a20: 73 74 3c 63 68 61 72 2a 3e 28 3a 3a 47 6c 6f 62  st<char*>(::Glob
2a30: 61 6c 4c 6f 63 6b 28 68 29 29 2c 20 28 6c 65 6e  alLock(h)), (len
2a40: 2b 31 29 2a 33 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  +1)*3, NULL, NUL
2a50: 4c 20 29 3b 0d 0a 09 09 3a 3a 47 6c 6f 62 61 6c  L );....::Global
2a60: 55 6e 6c 6f 63 6b 28 20 68 20 29 3b 0d 0a 09 09  Unlock( h );....
2a70: 63 6c 70 2e 53 65 74 44 61 74 61 28 20 43 46 5f  clp.SetData( CF_
2a80: 54 45 58 54 2c 20 68 20 29 3b 0d 0a 09 09 64 65  TEXT, h );....de
2a90: 6c 65 74 65 20 5b 5d 20 70 3b 0d 0a 09 7d 0d 0a  lete [] p;...}..
2aa0: 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72  }....void Cursor
2ab0: 3a 3a 50 61 73 74 65 28 29 0d 0a 7b 0d 0a 09 43  ::Paste()..{...C
2ac0: 6c 69 70 62 6f 61 72 64 20 63 6c 70 28 20 63 61  lipboard clp( ca
2ad0: 72 65 74 5f 2d 3e 68 77 6e 64 28 29 2c 20 74 72  ret_->hwnd(), tr
2ae0: 75 65 20 29 3b 0d 0a 09 69 66 28 20 63 6c 70 2e  ue );...if( clp.
2af0: 69 73 4f 70 65 6e 65 64 28 29 20 29 0d 0a 09 7b  isOpened() )...{
2b00: 0d 0a 09 09 43 6c 69 70 62 6f 61 72 64 3a 3a 54  ....Clipboard::T
2b10: 65 78 74 20 74 78 74 20 3d 20 63 6c 70 2e 47 65  ext txt = clp.Ge
2b20: 74 55 6e 69 63 6f 64 65 54 65 78 74 28 29 3b 0d  tUnicodeText();.
2b30: 0a 09 09 69 66 28 20 74 78 74 2e 64 61 74 61 28  ...if( txt.data(
2b40: 29 20 21 3d 20 4e 55 4c 4c 20 29 0d 0a 09 09 09  ) != NULL ).....
2b50: 64 6f 63 5f 2e 45 78 65 63 75 74 65 28 0d 0a 09  doc_.Execute(...
2b60: 09 09 09 52 65 70 6c 61 63 65 28 20 63 75 72 5f  ...Replace( cur_
2b70: 2c 20 73 65 6c 5f 2c 20 74 78 74 2e 64 61 74 61  , sel_, txt.data
2b80: 28 29 2c 20 6d 79 5f 6c 73 74 72 6c 65 6e 57 28  (), my_lstrlenW(
2b90: 74 78 74 2e 64 61 74 61 28 29 29 20 29 0d 0a 09  txt.data()) )...
2ba0: 09 09 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 0d  ..);...}..}.....
2bb0: 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ...//-----------
2bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a  --------------..
2c00: 2f 2f 20 83 4a 81 5b 83 5c 83 8b 88 da 93 ae 0d  // .J.[.\.......
2c10: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .//-------------
2c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a  ------------....
2c60: 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a 4d 6f 76  void Cursor::Mov
2c70: 65 43 75 72 28 20 63 6f 6e 73 74 20 44 50 6f 73  eCur( const DPos
2c80: 26 20 64 70 2c 20 62 6f 6f 6c 20 73 65 6c 65 63  & dp, bool selec
2c90: 74 20 29 0d 0a 7b 0d 0a 09 56 50 6f 73 20 76 70  t )..{...VPos vp
2ca0: 3b 0d 0a 09 76 69 65 77 5f 2e 43 6f 6e 76 44 50  ;...view_.ConvDP
2cb0: 6f 73 54 6f 56 50 6f 73 28 20 64 70 2c 20 26 76  osToVPos( dp, &v
2cc0: 70 20 29 3b 0d 0a 09 4d 6f 76 65 54 6f 28 20 76  p );...MoveTo( v
2cd0: 70 2c 20 73 65 6c 65 63 74 20 29 3b 0d 0a 7d 0d  p, select );..}.
2ce0: 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a  ...void Cursor::
2cf0: 4d 6f 76 65 54 6f 28 20 63 6f 6e 73 74 20 56 50  MoveTo( const VP
2d00: 6f 73 26 20 76 70 2c 20 62 6f 6f 6c 20 73 65 6c  os& vp, bool sel
2d10: 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 73 65 6c 20   )..{...if( sel 
2d20: 29 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 91 49 91 f0  )...{....// .I..
2d30: 8f f3 91 d4 82 aa 95 cf 82 ed 82 e9 94 cd 88 cd  ................
2d40: 82 f0 8d c4 95 60 89 e6 0d 0a 09 09 52 65 64 72  .....`......Redr
2d50: 61 77 28 20 76 70 2c 20 63 75 72 5f 20 29 3b 0d  aw( vp, cur_ );.
2d60: 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a  ..}...else...{..
2d70: 09 09 2f 2f 20 91 49 91 f0 89 f0 8f 9c 82 b3 82  ..// .I.........
2d80: ea 82 e9 94 cd 88 cd 82 f0 8d c4 95 60 89 e6 0d  ............`...
2d90: 0a 09 09 69 66 28 20 63 75 72 5f 20 21 3d 20 73  ...if( cur_ != s
2da0: 65 6c 5f 20 29 0d 0a 09 09 09 52 65 64 72 61 77  el_ ).....Redraw
2db0: 28 20 63 75 72 5f 2c 20 73 65 6c 5f 20 29 3b 0d  ( cur_, sel_ );.
2dc0: 0a 09 09 73 65 6c 5f 20 3d 20 76 70 3b 0d 0a 09  ...sel_ = vp;...
2dd0: 7d 0d 0a 09 63 75 72 5f 20 3d 20 76 70 3b 0d 0a  }...cur_ = vp;..
2de0: 09 55 70 64 61 74 65 43 61 72 65 74 50 6f 73 28  .UpdateCaretPos(
2df0: 29 3b 0d 0a 09 76 69 65 77 5f 2e 53 63 72 6f 6c  );...view_.Scrol
2e00: 6c 54 6f 28 20 63 75 72 5f 20 29 3b 0d 0a 7d 0d  lTo( cur_ );..}.
2e10: 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a  ...void Cursor::
2e20: 48 6f 6d 65 28 20 62 6f 6f 6c 20 77 69 64 65 2c  Home( bool wide,
2e30: 20 62 6f 6f 6c 20 73 65 6c 65 63 74 20 29 0d 0a   bool select )..
2e40: 7b 0d 0a 09 56 50 6f 73 20 6e 70 3b 0d 0a 09 6e  {...VPos np;...n
2e50: 70 2e 61 64 20 3d 20 6e 70 2e 76 78 20 3d 20 6e  p.ad = np.vx = n
2e60: 70 2e 72 78 20 3d 20 6e 70 2e 72 6c 20 3d 20 30  p.rx = np.rl = 0
2e70: 3b 0d 0a 09 69 66 28 20 77 69 64 65 20 29 20 2f  ;...if( wide ) /
2e80: 2f 20 95 b6 8f 91 82 cc 93 aa 82 d6 0d 0a 09 09  / ..............
2e90: 6e 70 2e 74 6c 20 3d 20 6e 70 2e 76 6c 20 3d 20  np.tl = np.vl = 
2ea0: 30 3b 0d 0a 09 65 6c 73 65 20 2f 2f 20 8d 73 82  0;...else // .s.
2eb0: cc 93 aa 82 d6 0d 0a 09 7b 0d 0a 09 09 2f 2f 20  ........{....// 
2ec0: 31 2e 30 37 2e 34 20 2d 2d 3e 20 31 2e 30 38 20  1.07.4 --> 1.08 
2ed0: 3a 3a 20 56 69 72 74 75 61 6c 20 48 6f 6d 65 0d  :: Virtual Home.
2ee0: 0a 09 09 2f 2f 20 6e 70 2e 74 6c 20 3d 20 63 75  ...// np.tl = cu
2ef0: 72 5f 2e 74 6c 2c 20 6e 70 2e 76 6c 20 3d 20 63  r_.tl, np.vl = c
2f00: 75 72 5f 2e 76 6c 2d 63 75 72 5f 2e 72 6c 3b 0d  ur_.vl-cur_.rl;.
2f10: 0a 0d 0a 09 09 69 66 28 20 63 75 72 5f 2e 72 6c  .....if( cur_.rl
2f20: 20 3d 3d 20 30 20 29 0d 0a 09 09 09 6e 70 2e 74   == 0 ).....np.t
2f30: 6c 20 3d 20 63 75 72 5f 2e 74 6c 2c 20 6e 70 2e  l = cur_.tl, np.
2f40: 76 6c 20 3d 20 63 75 72 5f 2e 76 6c 2d 63 75 72  vl = cur_.vl-cur
2f50: 5f 2e 72 6c 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09  _.rl;....else...
2f60: 09 09 76 69 65 77 5f 2e 43 6f 6e 76 44 50 6f 73  ..view_.ConvDPos
2f70: 54 6f 56 50 6f 73 28 20 64 6f 63 5f 2e 72 69 67  ToVPos( doc_.rig
2f80: 68 74 4f 66 28 44 50 6f 73 28 63 75 72 5f 2e 74  htOf(DPos(cur_.t
2f90: 6c 2c 20 76 69 65 77 5f 2e 72 6c 65 6e 64 28 63  l, view_.rlend(c
2fa0: 75 72 5f 2e 74 6c 2c 63 75 72 5f 2e 72 6c 2d 31  ur_.tl,cur_.rl-1
2fb0: 29 29 29 2c 20 26 6e 70 2c 20 26 63 75 72 5f 20  ))), &np, &cur_ 
2fc0: 29 3b 0d 0a 09 7d 0d 0a 09 4d 6f 76 65 54 6f 28  );...}...MoveTo(
2fd0: 20 6e 70 2c 20 73 65 6c 65 63 74 20 29 3b 0d 0a   np, select );..
2fe0: 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72  }....void Cursor
2ff0: 3a 3a 45 6e 64 28 20 62 6f 6f 6c 20 77 69 64 65  ::End( bool wide
3000: 2c 20 62 6f 6f 6c 20 73 65 6c 65 63 74 20 29 0d  , bool select ).
3010: 0a 7b 0d 0a 09 56 50 6f 73 20 6e 70 3b 0d 0a 09  .{...VPos np;...
3020: 69 66 28 20 77 69 64 65 20 29 20 2f 2f 20 95 b6  if( wide ) // ..
3030: 8f 91 82 cc 96 96 94 f6 82 d6 0d 0a 09 7b 0d 0a  .............{..
3040: 09 09 6e 70 2e 74 6c 20 3d 20 64 6f 63 5f 2e 74  ..np.tl = doc_.t
3050: 6c 6e 28 29 2d 31 3b 0d 0a 09 09 6e 70 2e 76 6c  ln()-1;....np.vl
3060: 20 3d 20 76 69 65 77 5f 2e 76 6c 6e 28 29 2d 31   = view_.vln()-1
3070: 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 20 2f 2f 20  ;...}...else // 
3080: 8d 73 82 cc 96 96 94 f6 82 d6 0d 0a 09 7b 0d 0a  .s...........{..
3090: 09 09 2f 2f 20 31 2e 30 37 2e 34 20 2d 2d 3e 20  ..// 1.07.4 --> 
30a0: 31 2e 30 38 20 3a 3a 20 56 69 72 74 75 61 6c 20  1.08 :: Virtual 
30b0: 45 6e 64 0d 0a 09 09 2f 2f 20 6e 70 2e 74 6c 20  End....// np.tl 
30c0: 3d 20 63 75 72 5f 2e 74 6c 3b 0d 0a 09 09 2f 2f  = cur_.tl;....//
30d0: 20 6e 70 2e 76 6c 20 3d 20 63 75 72 5f 2e 76 6c   np.vl = cur_.vl
30e0: 20 2b 20 76 69 65 77 5f 2e 72 6c 6e 28 6e 70 2e   + view_.rln(np.
30f0: 74 6c 29 20 2d 20 31 20 2d 20 63 75 72 5f 2e 72  tl) - 1 - cur_.r
3100: 6c 3b 0d 0a 0d 0a 09 09 76 69 65 77 5f 2e 43 6f  l;......view_.Co
3110: 6e 76 44 50 6f 73 54 6f 56 50 6f 73 28 20 44 50  nvDPosToVPos( DP
3120: 6f 73 28 63 75 72 5f 2e 74 6c 2c 20 76 69 65 77  os(cur_.tl, view
3130: 5f 2e 72 6c 65 6e 64 28 63 75 72 5f 2e 74 6c 2c  _.rlend(cur_.tl,
3140: 63 75 72 5f 2e 72 6c 29 29 2c 20 26 6e 70 2c 20  cur_.rl)), &np, 
3150: 26 63 75 72 5f 20 29 3b 0d 0a 09 09 4d 6f 76 65  &cur_ );....Move
3160: 54 6f 28 20 6e 70 2c 20 73 65 6c 65 63 74 20 29  To( np, select )
3170: 3b 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 7d  ;....return;...}
3180: 0d 0a 09 6e 70 2e 61 64 20 3d 20 64 6f 63 5f 2e  ...np.ad = doc_.
3190: 6c 65 6e 28 6e 70 2e 74 6c 29 3b 0d 0a 09 6e 70  len(np.tl);...np
31a0: 2e 72 6c 20 3d 20 76 69 65 77 5f 2e 72 6c 6e 28  .rl = view_.rln(
31b0: 6e 70 2e 74 6c 29 2d 31 3b 0d 0a 09 6e 70 2e 72  np.tl)-1;...np.r
31c0: 78 20 3d 20 6e 70 2e 76 78 20 3d 20 76 69 65 77  x = np.vx = view
31d0: 5f 2e 47 65 74 4c 61 73 74 57 69 64 74 68 28 20  _.GetLastWidth( 
31e0: 6e 70 2e 74 6c 20 29 3b 0d 0a 0d 0a 09 4d 6f 76  np.tl );.....Mov
31f0: 65 54 6f 28 20 6e 70 2c 20 73 65 6c 65 63 74 20  eTo( np, select 
3200: 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75  );..}....void Cu
3210: 72 73 6f 72 3a 3a 55 64 28 20 69 6e 74 20 64 79  rsor::Ud( int dy
3220: 2c 20 62 6f 6f 6c 20 73 65 6c 65 63 74 20 29 0d  , bool select ).
3230: 0a 7b 0d 0a 09 2f 2f 20 82 cd 82 dd 8f 6f 82 b7  .{...// .....o..
3240: 8f ea 8d 87 82 cd 81 41 90 e6 93 aa 8d 73 2f 8f  .......A.....s/.
3250: 49 92 5b 8d 73 82 c5 8e 7e 82 dc 82 e9 82 e6 82  I.[.s...~.......
3260: a4 82 c9 90 a7 8c c0 0d 0a 09 56 50 6f 73 20 6e  ..........VPos n
3270: 70 20 3d 20 63 75 72 5f 3b 0d 0a 09 69 66 28 20  p = cur_;...if( 
3280: 28 73 69 67 6e 65 64 29 6e 70 2e 76 6c 20 2b 20  (signed)np.vl + 
3290: 64 79 20 3c 20 30 20 29 0d 0a 09 09 64 79 20 3d  dy < 0 )....dy =
32a0: 20 2d 28 73 69 67 6e 65 64 29 6e 70 2e 76 6c 3b   -(signed)np.vl;
32b0: 0d 0a 09 65 6c 73 65 20 69 66 28 20 6e 70 2e 76  ...else if( np.v
32c0: 6c 20 2b 20 64 79 20 3e 3d 20 76 69 65 77 5f 2e  l + dy >= view_.
32d0: 76 6c 6e 28 29 20 29 0d 0a 09 09 64 79 20 3d 20  vln() )....dy = 
32e0: 76 69 65 77 5f 2e 76 6c 6e 28 29 2d 6e 70 2e 76  view_.vln()-np.v
32f0: 6c 2d 31 3b 0d 0a 0d 0a 09 6e 70 2e 76 6c 20 2b  l-1;.....np.vl +
3300: 3d 20 64 79 3b 0d 0a 09 6e 70 2e 72 6c 20 2b 3d  = dy;...np.rl +=
3310: 20 64 79 3b 0d 0a 09 69 66 28 20 64 79 3c 30 20   dy;...if( dy<0 
3320: 29 20 2f 2f 20 8f e3 82 d6 96 df 82 e9 8f ea 8d  ) // ...........
3330: 87 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 83 57 83 83  ....{....// .W..
3340: 83 93 83 76 90 e6 98 5f 97 9d 8d 73 82 cc 8d 73  ...v..._...s...s
3350: 93 aa 82 d6 44 61 73 68 21 0d 0a 09 09 77 68 69  ....Dash!....whi
3360: 6c 65 28 20 28 73 69 67 6e 65 64 29 6e 70 2e 72  le( (signed)np.r
3370: 6c 20 3c 20 30 20 29 0d 0a 09 09 09 6e 70 2e 72  l < 0 ).....np.r
3380: 6c 20 2b 3d 20 76 69 65 77 5f 2e 72 6c 6e 28 2d  l += view_.rln(-
3390: 2d 6e 70 2e 74 6c 29 3b 0d 0a 09 7d 0d 0a 09 65  -np.tl);...}...e
33a0: 6c 73 65 20 69 66 28 20 64 79 3e 30 20 29 20 2f  lse if( dy>0 ) /
33b0: 2f 20 89 ba 82 d6 90 69 82 de 8f ea 8d 87 0d 0a  / .....i........
33c0: 09 7b 0d 0a 09 09 2f 2f 20 83 57 83 83 83 93 83  .{....// .W.....
33d0: 76 90 e6 98 5f 97 9d 8d 73 82 cc 8d 73 93 aa 82  v..._...s...s...
33e0: d6 44 61 73 68 21 0d 0a 09 09 77 68 69 6c 65 28  .Dash!....while(
33f0: 20 28 73 69 67 6e 65 64 29 6e 70 2e 72 6c 20 3e   (signed)np.rl >
3400: 20 30 20 29 0d 0a 09 09 09 6e 70 2e 72 6c 20 2d   0 ).....np.rl -
3410: 3d 20 76 69 65 77 5f 2e 72 6c 6e 28 6e 70 2e 74  = view_.rln(np.t
3420: 6c 2b 2b 29 3b 0d 0a 09 09 69 66 28 20 28 73 69  l++);....if( (si
3430: 67 6e 65 64 29 6e 70 2e 72 6c 20 3c 20 30 20 29  gned)np.rl < 0 )
3440: 0d 0a 09 09 09 6e 70 2e 72 6c 20 2b 3d 20 76 69  .....np.rl += vi
3450: 65 77 5f 2e 72 6c 6e 28 2d 2d 6e 70 2e 74 6c 29  ew_.rln(--np.tl)
3460: 3b 20 2f 2f 8d 73 82 ab 89 df 82 ac 8f 43 90 b3  ; //.s.......C..
3470: 81 60 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20 78 8d  .`...}.....// x.
3480: c0 95 57 8c 88 92 e8 82 c9 82 a9 82 a9 82 e9 0d  ..W.............
3490: 0a 09 63 6f 6e 73 74 20 75 6e 69 63 6f 64 65 2a  ..const unicode*
34a0: 20 73 74 72 20 3d 20 64 6f 63 5f 2e 74 6c 28 6e   str = doc_.tl(n
34b0: 70 2e 74 6c 29 3b 0d 0a 0d 0a 09 2f 2f 20 89 45  p.tl);.....// .E
34c0: 8a f1 82 b9 82 c9 82 c8 82 c1 82 c4 82 e9 81 42  ...............B
34d0: 95 73 8e a9 91 52 81 48 0d 0a 09 6e 70 2e 61 64  .s...R.H...np.ad
34e0: 20 3d 20 28 6e 70 2e 72 6c 3d 3d 30 20 3f 20 30   = (np.rl==0 ? 0
34f0: 20 3a 20 76 69 65 77 5f 2e 72 6c 65 6e 64 28 6e   : view_.rlend(n
3500: 70 2e 74 6c 2c 6e 70 2e 72 6c 2d 31 29 2b 31 29  p.tl,np.rl-1)+1)
3510: 3b 0d 0a 09 6e 70 2e 76 78 20 3d 20 28 6e 70 2e  ;...np.vx = (np.
3520: 72 6c 3d 3d 30 20 3f 20 30 20 3a 20 76 69 65 77  rl==0 ? 0 : view
3530: 5f 2e 66 6e 74 28 29 2e 57 28 26 73 74 72 5b 6e  _.fnt().W(&str[n
3540: 70 2e 61 64 2d 31 5d 29 29 3b 0d 0a 09 77 68 69  p.ad-1]));...whi
3550: 6c 65 28 20 6e 70 2e 76 78 20 3c 20 6e 70 2e 72  le( np.vx < np.r
3560: 78 20 26 26 20 6e 70 2e 61 64 20 3c 20 76 69 65  x && np.ad < vie
3570: 77 5f 2e 72 6c 65 6e 64 28 6e 70 2e 74 6c 2c 6e  w_.rlend(np.tl,n
3580: 70 2e 72 6c 29 20 29 0d 0a 09 7b 0d 0a 09 09 2f  p.rl) )...{..../
3590: 2f 20 8d b6 8a f1 82 b9 82 c9 82 b5 82 c4 82 dd  / ..............
35a0: 82 bd 81 42 0d 0a 09 09 75 6c 6f 6e 67 20 6e 65  ...B....ulong ne
35b0: 77 76 78 3b 0d 0a 09 09 69 66 28 20 73 74 72 5b  wvx;....if( str[
35c0: 6e 70 2e 61 64 5d 20 3d 3d 20 4c 27 5c 74 27 20  np.ad] == L'\t' 
35d0: 29 0d 0a 09 09 09 6e 65 77 76 78 20 3d 20 76 69  ).....newvx = vi
35e0: 65 77 5f 2e 66 6e 74 28 29 2e 6e 65 78 74 54 61  ew_.fnt().nextTa
35f0: 62 28 6e 70 2e 76 78 29 3b 0d 0a 09 09 65 6c 73  b(np.vx);....els
3600: 65 0d 0a 09 09 09 6e 65 77 76 78 20 3d 20 6e 70  e.....newvx = np
3610: 2e 76 78 20 2b 20 76 69 65 77 5f 2e 66 6e 74 28  .vx + view_.fnt(
3620: 29 2e 57 28 26 73 74 72 5b 6e 70 2e 61 64 5d 29  ).W(&str[np.ad])
3630: 3b 0d 0a 09 09 69 66 28 20 6e 65 77 76 78 20 3e  ;....if( newvx >
3640: 20 75 6c 6f 6e 67 28 6e 70 2e 72 78 29 20 29 0d   ulong(np.rx) ).
3650: 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 6e 70  ....break;....np
3660: 2e 76 78 20 3d 20 6e 65 77 76 78 3b 0d 0a 09 09  .vx = newvx;....
3670: 2b 2b 6e 70 2e 61 64 3b 0d 0a 09 7d 0d 0a 0d 0a  ++np.ad;...}....
3680: 09 4d 6f 76 65 54 6f 28 20 6e 70 2c 20 73 65 6c  .MoveTo( np, sel
3690: 65 63 74 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69  ect );..}....voi
36a0: 64 20 43 75 72 73 6f 72 3a 3a 55 70 28 20 62 6f  d Cursor::Up( bo
36b0: 6f 6c 20 77 69 64 65 2c 20 62 6f 6f 6c 20 73 65  ol wide, bool se
36c0: 6c 65 63 74 20 29 0d 0a 7b 0d 0a 09 55 64 28 20  lect )..{...Ud( 
36d0: 77 69 64 65 3f 2d 33 3a 2d 31 2c 20 73 65 6c 65  wide?-3:-1, sele
36e0: 63 74 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64  ct );..}....void
36f0: 20 43 75 72 73 6f 72 3a 3a 44 6f 77 6e 28 20 62   Cursor::Down( b
3700: 6f 6f 6c 20 77 69 64 65 2c 20 62 6f 6f 6c 20 73  ool wide, bool s
3710: 65 6c 65 63 74 20 29 0d 0a 7b 0d 0a 09 55 64 28  elect )..{...Ud(
3720: 20 77 69 64 65 3f 33 3a 31 2c 20 73 65 6c 65 63   wide?3:1, selec
3730: 74 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20  t );..}....void 
3740: 43 75 72 73 6f 72 3a 3a 50 61 67 65 55 70 28 20  Cursor::PageUp( 
3750: 62 6f 6f 6c 20 73 65 6c 65 63 74 20 29 0d 0a 7b  bool select )..{
3760: 0d 0a 09 55 64 28 20 2d 76 69 65 77 5f 2e 63 79  ...Ud( -view_.cy
3770: 28 29 2f 76 69 65 77 5f 2e 66 6e 74 28 29 2e 48  ()/view_.fnt().H
3780: 28 29 2c 20 73 65 6c 65 63 74 20 29 3b 0d 0a 7d  (), select );..}
3790: 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a  ....void Cursor:
37a0: 3a 50 61 67 65 44 6f 77 6e 28 20 62 6f 6f 6c 20  :PageDown( bool 
37b0: 73 65 6c 65 63 74 20 29 0d 0a 7b 0d 0a 09 55 64  select )..{...Ud
37c0: 28 20 76 69 65 77 5f 2e 63 79 28 29 2f 76 69 65  ( view_.cy()/vie
37d0: 77 5f 2e 66 6e 74 28 29 2e 48 28 29 2c 20 73 65  w_.fnt().H(), se
37e0: 6c 65 63 74 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f  lect );..}....vo
37f0: 69 64 20 43 75 72 73 6f 72 3a 3a 4c 65 66 74 28  id Cursor::Left(
3800: 20 62 6f 6f 6c 20 77 69 64 65 2c 20 62 6f 6f 6c   bool wide, bool
3810: 20 73 65 6c 65 63 74 20 29 0d 0a 7b 0d 0a 09 56   select )..{...V
3820: 50 6f 73 20 6e 70 3b 0d 0a 09 69 66 28 20 63 75  Pos np;...if( cu
3830: 72 5f 21 3d 73 65 6c 5f 20 26 26 20 21 73 65 6c  r_!=sel_ && !sel
3840: 65 63 74 20 29 0d 0a 09 09 6e 70 20 3d 20 4d 69  ect )....np = Mi
3850: 6e 28 20 63 75 72 5f 2c 20 73 65 6c 5f 20 29 2c  n( cur_, sel_ ),
3860: 20 6e 70 2e 72 78 20 3d 20 6e 70 2e 76 78 3b 0d   np.rx = np.vx;.
3870: 0a 09 65 6c 73 65 0d 0a 09 09 76 69 65 77 5f 2e  ..else....view_.
3880: 43 6f 6e 76 44 50 6f 73 54 6f 56 50 6f 73 28 20  ConvDPosToVPos( 
3890: 64 6f 63 5f 2e 6c 65 66 74 4f 66 28 63 75 72 5f  doc_.leftOf(cur_
38a0: 2c 77 69 64 65 29 2c 20 26 6e 70 2c 20 26 63 75  ,wide), &np, &cu
38b0: 72 5f 20 29 3b 0d 0a 09 4d 6f 76 65 54 6f 28 20  r_ );...MoveTo( 
38c0: 6e 70 2c 20 73 65 6c 65 63 74 20 29 3b 0d 0a 7d  np, select );..}
38d0: 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a  ....void Cursor:
38e0: 3a 52 69 67 68 74 28 20 62 6f 6f 6c 20 77 69 64  :Right( bool wid
38f0: 65 2c 20 62 6f 6f 6c 20 73 65 6c 65 63 74 20 29  e, bool select )
3900: 0d 0a 7b 0d 0a 09 56 50 6f 73 20 6e 70 3b 0d 0a  ..{...VPos np;..
3910: 09 69 66 28 20 63 75 72 5f 21 3d 73 65 6c 5f 20  .if( cur_!=sel_ 
3920: 26 26 20 21 73 65 6c 65 63 74 20 29 0d 0a 09 09  && !select )....
3930: 6e 70 20 3d 20 4d 61 78 28 20 63 75 72 5f 2c 20  np = Max( cur_, 
3940: 73 65 6c 5f 20 29 2c 20 6e 70 2e 72 78 20 3d 20  sel_ ), np.rx = 
3950: 6e 70 2e 76 78 3b 0d 0a 09 65 6c 73 65 0d 0a 09  np.vx;...else...
3960: 09 76 69 65 77 5f 2e 43 6f 6e 76 44 50 6f 73 54  .view_.ConvDPosT
3970: 6f 56 50 6f 73 28 20 64 6f 63 5f 2e 72 69 67 68  oVPos( doc_.righ
3980: 74 4f 66 28 63 75 72 5f 2c 77 69 64 65 29 2c 20  tOf(cur_,wide), 
3990: 26 6e 70 2c 20 26 63 75 72 5f 20 29 3b 0d 0a 09  &np, &cur_ );...
39a0: 4d 6f 76 65 54 6f 28 20 6e 70 2c 20 73 65 6c 65  MoveTo( np, sele
39b0: 63 74 20 29 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a  ct );..}........
39c0: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  //--------------
39d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
39e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
39f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20  -----------..// 
3a10: 83 7d 83 45 83 58 93 fc 97 cd 82 d6 82 cc 91 ce  .}.E.X..........
3a20: 89 9e 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ....//----------
3a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d  ---------------.
3a70: 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72 3a 3a  ...void Cursor::
3a80: 6f 6e 5f 6c 62 75 74 74 6f 6e 5f 64 62 6c 28 20  on_lbutton_dbl( 
3a90: 73 68 6f 72 74 20 78 2c 20 73 68 6f 72 74 20 79  short x, short y
3aa0: 20 29 0d 0a 7b 0d 0a 09 2f 2f 20 8d 73 94 d4 8d   )..{...// .s...
3ab0: 86 83 5d 81 5b 83 93 82 cc 8f ea 8d 87 82 cd 93  ..].[...........
3ac0: c1 82 c9 89 bd 82 e0 82 b5 82 c8 82 a2 0d 0a 09  ................
3ad0: 69 66 28 20 76 69 65 77 5f 2e 6c 6e 61 28 29 2d  if( view_.lna()-
3ae0: 76 69 65 77 5f 2e 66 6e 74 28 29 2e 46 28 29 20  view_.fnt().F() 
3af0: 3c 20 78 20 29 0d 0a 09 09 2f 2f 20 8d 73 96 96  < x )....// .s..
3b00: 82 cc 8f ea 8d 87 82 e0 93 c1 82 c9 89 bd 82 e0  ................
3b10: 82 b5 82 c8 82 a2 0d 0a 09 09 69 66 28 20 63 75  ..........if( cu
3b20: 72 5f 2e 61 64 20 21 3d 20 64 6f 63 5f 2e 6c 65  r_.ad != doc_.le
3b30: 6e 28 63 75 72 5f 2e 74 6c 29 20 29 0d 0a 09 09  n(cur_.tl) )....
3b40: 7b 0d 0a 09 09 09 56 50 6f 73 20 6e 70 3b 0d 0a  {.....VPos np;..
3b50: 09 09 09 76 69 65 77 5f 2e 43 6f 6e 76 44 50 6f  ...view_.ConvDPo
3b60: 73 54 6f 56 50 6f 73 28 20 64 6f 63 5f 2e 77 6f  sToVPos( doc_.wo
3b70: 72 64 53 74 61 72 74 4f 66 28 63 75 72 5f 29 2c  rdStartOf(cur_),
3b80: 20 26 6e 70 2c 20 26 63 75 72 5f 20 29 3b 0d 0a   &np, &cur_ );..
3b90: 09 09 09 4d 6f 76 65 54 6f 28 20 6e 70 2c 20 66  ...MoveTo( np, f
3ba0: 61 6c 73 65 20 29 3b 0d 0a 09 09 09 52 69 67 68  alse );.....Righ
3bb0: 74 28 20 74 72 75 65 2c 20 74 72 75 65 20 29 3b  t( true, true );
3bc0: 0d 0a 09 09 7d 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c  ....}..}....bool
3bd0: 20 43 75 72 73 6f 72 3a 3a 6f 6e 5f 63 6f 6e 74   Cursor::on_cont
3be0: 65 78 74 6d 65 6e 75 28 20 73 68 6f 72 74 20 78  extmenu( short x
3bf0: 2c 20 73 68 6f 72 74 20 79 20 29 0d 0a 7b 0d 0a  , short y )..{..
3c00: 09 2f 2f 20 4e 6f 74 20 54 72 61 63 6b 65 64 0d  .// Not Tracked.
3c10: 0a 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ..return false;.
3c20: 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f  .}....void Curso
3c30: 72 3a 3a 6f 6e 5f 6c 62 75 74 74 6f 6e 5f 64 6f  r::on_lbutton_do
3c40: 77 6e 28 20 73 68 6f 72 74 20 78 2c 20 73 68 6f  wn( short x, sho
3c50: 72 74 20 79 2c 20 62 6f 6f 6c 20 73 68 69 66 74  rt y, bool shift
3c60: 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 21 73 68 69   )..{...if( !shi
3c70: 66 74 20 29 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 82  ft )...{....// .
3c80: b1 82 ea 82 dc 82 c5 82 cc 91 49 91 f0 94 cd 88  ..........I.....
3c90: cd 82 f0 83 4e 83 8a 83 41 0d 0a 09 09 52 65 64  ....N...A....Red
3ca0: 72 61 77 28 20 63 75 72 5f 2c 20 73 65 6c 5f 20  raw( cur_, sel_ 
3cb0: 29 3b 0d 0a 0d 0a 09 09 2f 2f 20 8d 73 94 d4 8d  );......// .s...
3cc0: 86 83 5d 81 5b 83 93 82 cc 83 4e 83 8a 83 62 83  ..].[.....N...b.
3cd0: 4e 82 be 82 c1 82 bd 82 e7 81 41 8d 73 91 49 91  N.........A.s.I.
3ce0: f0 83 82 81 5b 83 68 82 c9 0d 0a 09 09 6c 69 6e  ....[.h......lin
3cf0: 65 53 65 6c 65 63 74 4d 6f 64 65 5f 20 3d 20 28  eSelectMode_ = (
3d00: 20 78 20 3c 20 76 69 65 77 5f 2e 6c 6e 61 28 29   x < view_.lna()
3d10: 2d 76 69 65 77 5f 2e 66 6e 74 28 29 2e 46 28 29  -view_.fnt().F()
3d20: 20 29 3b 0d 0a 0d 0a 09 09 2f 2f 20 91 49 91 f0   );......// .I..
3d30: 8a 4a 8e 6e 88 ca 92 75 82 f0 92 b2 90 ae 0d 0a  .J.n...u........
3d40: 09 09 76 69 65 77 5f 2e 47 65 74 56 50 6f 73 28  ..view_.GetVPos(
3d50: 20 78 2c 20 79 2c 20 26 73 65 6c 5f 20 29 3b 0d   x, y, &sel_ );.
3d60: 0a 09 09 69 66 28 20 6c 69 6e 65 53 65 6c 65 63  ...if( lineSelec
3d70: 74 4d 6f 64 65 5f 20 29 0d 0a 09 09 09 76 69 65  tMode_ ).....vie
3d80: 77 5f 2e 43 6f 6e 76 44 50 6f 73 54 6f 56 50 6f  w_.ConvDPosToVPo
3d90: 73 28 20 44 50 6f 73 28 73 65 6c 5f 2e 74 6c 2c  s( DPos(sel_.tl,
3da0: 30 29 2c 20 26 73 65 6c 5f 2c 20 26 73 65 6c 5f  0), &sel_, &sel_
3db0: 20 29 3b 0d 0a 09 09 63 75 72 5f 20 3d 20 73 65   );....cur_ = se
3dc0: 6c 5f 3b 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20 88  l_;...}.....// .
3dd0: da 93 ae 81 49 0d 0a 09 4d 6f 76 65 42 79 4d 6f  ....I...MoveByMo
3de0: 75 73 65 28 20 64 72 61 67 58 5f 3d 78 2c 20 64  use( dragX_=x, d
3df0: 72 61 67 59 5f 3d 79 20 29 3b 0d 0a 0d 0a 09 2f  ragY_=y );...../
3e00: 2f 20 83 7d 83 45 83 58 88 ca 92 75 82 cc 92 c7  / .}.E.X...u....
3e10: 90 d5 8a 4a 8e 6e 0d 0a 09 74 69 6d 65 72 49 44  ...J.n...timerID
3e20: 5f 20 3d 20 3a 3a 53 65 74 54 69 6d 65 72 28 20  _ = ::SetTimer( 
3e30: 63 61 72 65 74 5f 2d 3e 68 77 6e 64 28 29 2c 20  caret_->hwnd(), 
3e40: 31 37 38 31 31 36 2c 20 6b 65 79 52 65 70 54 69  178116, keyRepTi
3e50: 6d 65 5f 2c 20 4e 55 4c 4c 20 29 3b 0d 0a 09 3a  me_, NULL );...:
3e60: 3a 53 65 74 43 61 70 74 75 72 65 28 20 63 61 72  :SetCapture( car
3e70: 65 74 5f 2d 3e 68 77 6e 64 28 29 20 29 3b 0d 0a  et_->hwnd() );..
3e80: 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72  }....void Cursor
3e90: 3a 3a 6f 6e 5f 6c 62 75 74 74 6f 6e 5f 75 70 28  ::on_lbutton_up(
3ea0: 20 73 68 6f 72 74 20 78 2c 20 73 68 6f 72 74 20   short x, short 
3eb0: 79 20 29 0d 0a 7b 0d 0a 09 2f 2f 20 92 c7 90 d5  y )..{...// ....
3ec0: 89 f0 8f 9c 0d 0a 09 69 66 28 20 74 69 6d 65 72  .......if( timer
3ed0: 49 44 5f 20 21 3d 20 30 20 29 0d 0a 09 7b 0d 0a  ID_ != 0 )...{..
3ee0: 09 09 3a 3a 52 65 6c 65 61 73 65 43 61 70 74 75  ..::ReleaseCaptu
3ef0: 72 65 28 29 3b 0d 0a 09 09 3a 3a 4b 69 6c 6c 54  re();....::KillT
3f00: 69 6d 65 72 28 20 63 61 72 65 74 5f 2d 3e 68 77  imer( caret_->hw
3f10: 6e 64 28 29 2c 20 74 69 6d 65 72 49 44 5f 20 29  nd(), timerID_ )
3f20: 3b 0d 0a 09 09 74 69 6d 65 72 49 44 5f 20 3d 20  ;....timerID_ = 
3f30: 30 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69  0;...}..}....voi
3f40: 64 20 43 75 72 73 6f 72 3a 3a 6f 6e 5f 6d 6f 75  d Cursor::on_mou
3f50: 73 65 5f 6d 6f 76 65 28 20 73 68 6f 72 74 20 78  se_move( short x
3f60: 2c 20 73 68 6f 72 74 20 79 20 29 0d 0a 7b 0d 0a  , short y )..{..
3f70: 09 69 66 28 20 74 69 6d 65 72 49 44 5f 20 21 3d  .if( timerID_ !=
3f80: 20 30 20 29 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 56   0 )...{....// V
3f90: 69 65 77 93 e0 95 94 82 c8 82 e7 4d 6f 75 73 65  iew........Mouse
3fa0: 4d 6f 76 65 82 c9 94 bd 89 9e 0d 0a 09 09 50 4f  Move..........PO
3fb0: 49 4e 54 20 70 74 20 3d 20 7b 20 64 72 61 67 58  INT pt = { dragX
3fc0: 5f 3d 78 2c 20 64 72 61 67 59 5f 3d 79 20 7d 3b  _=x, dragY_=y };
3fd0: 0d 0a 09 09 69 66 28 20 50 74 49 6e 52 65 63 74  ....if( PtInRect
3fe0: 28 20 26 76 69 65 77 5f 2e 7a 6f 6e 65 28 29 2c  ( &view_.zone(),
3ff0: 20 70 74 20 29 20 29 0d 0a 09 09 09 4d 6f 76 65   pt ) ).....Move
4000: 42 79 4d 6f 75 73 65 28 20 64 72 61 67 58 5f 2c  ByMouse( dragX_,
4010: 20 64 72 61 67 59 5f 20 29 3b 0d 0a 09 7d 0d 0a   dragY_ );...}..
4020: 7d 0d 0a 0d 0a 76 6f 69 64 20 43 75 72 73 6f 72  }....void Cursor
4030: 3a 3a 6f 6e 5f 74 69 6d 65 72 28 29 0d 0a 7b 0d  ::on_timer()..{.
4040: 0a 09 2f 2f 20 56 69 65 77 8a 4f 95 94 82 c8 82  ..// View.O.....
4050: e7 54 69 6d 65 72 82 c9 94 bd 89 9e 0d 0a 09 50  .Timer.........P
4060: 4f 49 4e 54 20 70 74 20 3d 20 7b 20 64 72 61 67  OINT pt = { drag
4070: 58 5f 2c 20 64 72 61 67 59 5f 20 7d 3b 0d 0a 09  X_, dragY_ };...
4080: 69 66 28 20 21 50 74 49 6e 52 65 63 74 28 20 26  if( !PtInRect( &
4090: 76 69 65 77 5f 2e 7a 6f 6e 65 28 29 2c 20 70 74  view_.zone(), pt
40a0: 20 29 20 29 0d 0a 09 09 4d 6f 76 65 42 79 4d 6f   ) )....MoveByMo
40b0: 75 73 65 28 20 64 72 61 67 58 5f 2c 20 64 72 61  use( dragX_, dra
40c0: 67 59 5f 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69  gY_ );..}....voi
40d0: 64 20 43 75 72 73 6f 72 3a 3a 4d 6f 76 65 42 79  d Cursor::MoveBy
40e0: 4d 6f 75 73 65 28 20 69 6e 74 20 78 2c 20 69 6e  Mouse( int x, in
40f0: 74 20 79 20 29 0d 0a 7b 0d 0a 09 56 50 6f 73 20  t y )..{...VPos 
4100: 76 70 3b 0d 0a 09 76 69 65 77 5f 2e 47 65 74 56  vp;...view_.GetV
4110: 50 6f 73 28 20 78 2c 20 79 2c 20 26 76 70 2c 20  Pos( x, y, &vp, 
4120: 6c 69 6e 65 53 65 6c 65 63 74 4d 6f 64 65 5f 20  lineSelectMode_ 
4130: 29 3b 0d 0a 09 4d 6f 76 65 54 6f 28 20 76 70 2c  );...MoveTo( vp,
4140: 20 74 72 75 65 20 29 3b 0d 0a 7d 0d 0a 0d 0a 2f   true );..}..../
4150: 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /---------------
4160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 8d  ----------..// .
41a0: c4 95 cf 8a b7 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d  .......//-------
41b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
41c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
41d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
41e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
41f0: 2d 2d 0d 0a 0d 0a 69 6e 74 20 43 75 72 73 6f 72  --....int Cursor
4200: 3a 3a 6f 6e 5f 69 6d 65 5f 72 65 63 6f 6e 76 65  ::on_ime_reconve
4210: 72 74 73 74 72 69 6e 67 28 20 52 45 43 4f 4e 56  rtstring( RECONV
4220: 45 52 54 53 54 52 49 4e 47 2a 20 72 73 20 29 0d  ERTSTRING* rs ).
4230: 0a 7b 0d 0a 09 69 66 28 20 21 20 69 73 53 65 6c  .{...if( ! isSel
4240: 65 63 74 65 64 28 29 20 7c 7c 20 63 75 72 5f 2e  ected() || cur_.
4250: 74 6c 20 21 3d 20 73 65 6c 5f 2e 74 6c 20 29 0d  tl != sel_.tl ).
4260: 0a 09 09 72 65 74 75 72 6e 20 30 3b 0d 0a 0d 0a  ...return 0;....
4270: 23 69 66 64 65 66 20 5f 55 4e 49 43 4f 44 45 0d  #ifdef _UNICODE.
4280: 0a 09 61 61 72 72 3c 75 6e 69 63 6f 64 65 3e 20  ..aarr<unicode> 
4290: 73 74 72 20 3d 20 67 65 74 53 65 6c 65 63 74 65  str = getSelecte
42a0: 64 53 74 72 28 29 3b 0d 0a 23 65 6c 73 65 0d 0a  dStr();..#else..
42b0: 09 61 61 72 72 3c 63 68 61 72 3e 20 73 74 72 3b  .aarr<char> str;
42c0: 0d 0a 09 7b 0d 0a 09 09 61 61 72 72 3c 75 6e 69  ...{....aarr<uni
42d0: 63 6f 64 65 3e 20 75 62 20 3d 20 67 65 74 53 65  code> ub = getSe
42e0: 6c 65 63 74 65 64 53 74 72 28 29 3b 0d 0a 09 09  lectedStr();....
42f0: 75 6c 6f 6e 67 20 6c 65 6e 3b 0d 0a 09 09 66 6f  ulong len;....fo
4300: 72 28 6c 65 6e 3d 30 3b 20 75 62 5b 6c 65 6e 5d  r(len=0; ub[len]
4310: 3b 20 2b 2b 6c 65 6e 29 3b 0d 0a 09 09 6b 69 3a  ; ++len);....ki:
4320: 3a 61 61 72 72 3c 63 68 61 72 3e 20 6e 77 28 20  :aarr<char> nw( 
4330: 6e 65 77 20 54 43 48 41 52 5b 28 6c 65 6e 2b 31  new TCHAR[(len+1
4340: 29 2a 33 5d 20 29 3b 0d 0a 09 09 73 74 72 20 3d  )*3] );....str =
4350: 20 6e 77 3b 0d 0a 09 09 3a 3a 57 69 64 65 43 68   nw;....::WideCh
4360: 61 72 54 6f 4d 75 6c 74 69 42 79 74 65 28 20 43  arToMultiByte( C
4370: 50 5f 41 43 50 2c 20 30 2c 20 75 62 2e 67 65 74  P_ACP, 0, ub.get
4380: 28 29 2c 20 2d 31 2c 0d 0a 09 09 09 73 74 72 2e  (), -1,.....str.
4390: 67 65 74 28 29 2c 20 28 6c 65 6e 2b 31 29 2a 33  get(), (len+1)*3
43a0: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 20 29 3b 0d  , NULL, NULL );.
43b0: 0a 09 7d 0d 0a 23 65 6e 64 69 66 0d 0a 09 63 6f  ..}..#endif...co
43c0: 6e 73 74 20 75 6c 6f 6e 67 20 6c 65 6e 20 3d 20  nst ulong len = 
43d0: 3a 3a 6c 73 74 72 6c 65 6e 28 73 74 72 2e 67 65  ::lstrlen(str.ge
43e0: 74 28 29 29 3b 0d 0a 09 69 66 28 20 72 73 20 21  t());...if( rs !
43f0: 3d 20 4e 55 4c 4c 20 29 0d 0a 09 7b 0d 0a 09 09  = NULL )...{....
4400: 72 73 2d 3e 64 77 53 69 7a 65 20 20 20 20 20 20  rs->dwSize      
4410: 20 20 20 20 20 20 3d 20 73 69 7a 65 6f 66 28 52        = sizeof(R
4420: 45 43 4f 4e 56 45 52 54 53 54 52 49 4e 47 29 20  ECONVERTSTRING) 
4430: 2b 20 28 6c 65 6e 2b 31 29 2a 73 69 7a 65 6f 66  + (len+1)*sizeof
4440: 28 54 43 48 41 52 29 3b 0d 0a 09 09 72 73 2d 3e  (TCHAR);....rs->
4450: 64 77 56 65 72 73 69 6f 6e 20 20 20 20 20 20 20  dwVersion       
4460: 20 20 3d 20 30 3b 0d 0a 09 09 72 73 2d 3e 64 77    = 0;....rs->dw
4470: 53 74 72 4f 66 66 73 65 74 20 20 20 20 20 20 20  StrOffset       
4480: 3d 20 73 69 7a 65 6f 66 28 52 45 43 4f 4e 56 45  = sizeof(RECONVE
4490: 52 54 53 54 52 49 4e 47 29 3b 0d 0a 09 09 72 73  RTSTRING);....rs
44a0: 2d 3e 64 77 53 74 72 4c 65 6e 20 20 20 20 20 20  ->dwStrLen      
44b0: 20 20 20 20 3d 20 6c 65 6e 3b 0d 0a 09 09 72 73      = len;....rs
44c0: 2d 3e 64 77 43 6f 6d 70 53 74 72 4f 66 66 73 65  ->dwCompStrOffse
44d0: 74 20 20 20 3d 20 30 3b 0d 0a 09 09 72 73 2d 3e  t   = 0;....rs->
44e0: 64 77 43 6f 6d 70 53 74 72 4c 65 6e 20 20 20 20  dwCompStrLen    
44f0: 20 20 3d 20 6c 65 6e 3b 0d 0a 09 09 72 73 2d 3e    = len;....rs->
4500: 64 77 54 61 72 67 65 74 53 74 72 4f 66 66 73 65  dwTargetStrOffse
4510: 74 20 3d 20 30 3b 0d 0a 09 09 72 73 2d 3e 64 77  t = 0;....rs->dw
4520: 54 61 72 67 65 74 53 74 72 4c 65 6e 20 20 20 20  TargetStrLen    
4530: 3d 20 6c 65 6e 3b 0d 0a 09 09 6d 65 6d 6d 6f 76  = len;....memmov
4540: 65 28 20 28 28 63 68 61 72 2a 29 72 73 29 2b 72  e( ((char*)rs)+r
4550: 73 2d 3e 64 77 53 74 72 4f 66 66 73 65 74 2c 20  s->dwStrOffset, 
4560: 73 74 72 2e 67 65 74 28 29 2c 20 28 6c 65 6e 2b  str.get(), (len+
4570: 31 29 2a 73 69 7a 65 6f 66 28 54 43 48 41 52 29  1)*sizeof(TCHAR)
4580: 20 29 3b 0d 0a 0d 0a 09 09 69 66 28 20 73 65 6c   );......if( sel
4590: 5f 20 3c 20 63 75 72 5f 20 29 0d 0a 09 09 7b 0d  _ < cur_ )....{.
45a0: 0a 09 09 09 44 50 6f 73 20 70 73 65 6c 5f 20 3d  ....DPos psel_ =
45b0: 20 73 65 6c 5f 3b 0d 0a 09 09 09 4d 6f 76 65 43   sel_;.....MoveC
45c0: 75 72 28 20 63 75 72 5f 2c 20 66 61 6c 73 65 20  ur( cur_, false 
45d0: 29 3b 0d 0a 09 09 09 4d 6f 76 65 43 75 72 28 20  );.....MoveCur( 
45e0: 70 73 65 6c 5f 2c 20 74 72 75 65 20 29 3b 0d 0a  psel_, true );..
45f0: 09 09 7d 0d 0a 09 7d 0d 0a 09 72 65 74 75 72 6e  ..}...}...return
4600: 20 73 69 7a 65 6f 66 28 52 45 43 4f 4e 56 45 52   sizeof(RECONVER
4610: 54 53 54 52 49 4e 47 29 20 2b 20 28 6c 65 6e 2b  TSTRING) + (len+
4620: 31 29 2a 73 69 7a 65 6f 66 28 54 43 48 41 52 29  1)*sizeof(TCHAR)
4630: 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 75 72  ;..}....bool Cur
4640: 73 6f 72 3a 3a 6f 6e 5f 69 6d 65 5f 63 6f 6e 66  sor::on_ime_conf
4650: 69 72 6d 72 65 63 6f 6e 76 65 72 74 73 74 72 69  irmreconvertstri
4660: 6e 67 28 20 52 45 43 4f 4e 56 45 52 54 53 54 52  ng( RECONVERTSTR
4670: 49 4e 47 2a 20 72 73 20 29 0d 0a 7b 0d 0a 09 72  ING* rs )..{...r
4680: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 7d 0d  eturn false;..}.
4690: 0a 0d 0a                                         ...