Hex Artifact Content

Artifact ca4a688d14daae43d629df012b740eccfda9938d:


0000: 2f 2a 20 0a 20 2a 20 74 6b 54 65 78 74 4d 61 72  /* . * tkTextMar
0010: 6b 2e 63 20 28 43 54 6b 29 20 2d 2d 0a 20 2a 0a  k.c (CTk) --. *.
0020: 20 2a 09 54 68 69 73 20 66 69 6c 65 20 63 6f 6e   *.This file con
0030: 74 61 69 6e 73 20 74 68 65 20 70 72 6f 63 65 64  tains the proced
0040: 75 72 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ure that impleme
0050: 6e 74 20 6d 61 72 6b 73 20 66 6f 72 0a 20 2a 09  nt marks for. *.
0060: 74 65 78 74 20 77 69 64 67 65 74 73 2e 0a 20 2a  text widgets.. *
0070: 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63  . * Copyright (c
0080: 29 20 31 39 39 34 20 54 68 65 20 52 65 67 65 6e  ) 1994 The Regen
0090: 74 73 20 6f 66 20 74 68 65 20 55 6e 69 76 65 72  ts of the Univer
00a0: 73 69 74 79 20 6f 66 20 43 61 6c 69 66 6f 72 6e  sity of Californ
00b0: 69 61 2e 0a 20 2a 20 43 6f 70 79 72 69 67 68 74  ia.. * Copyright
00c0: 20 28 63 29 20 31 39 39 34 2d 31 39 39 35 20 53   (c) 1994-1995 S
00d0: 75 6e 20 4d 69 63 72 6f 73 79 73 74 65 6d 73 2c  un Microsystems,
00e0: 20 49 6e 63 2e 0a 20 2a 20 43 6f 70 79 72 69 67   Inc.. * Copyrig
00f0: 68 74 20 28 63 29 20 31 39 39 35 20 4d 61 72 74  ht (c) 1995 Mart
0100: 69 6e 20 41 6e 64 72 65 77 73 0a 20 2a 0a 20 2a  in Andrews. *. *
0110: 20 53 65 65 20 74 68 65 20 66 69 6c 65 20 22 6c   See the file "l
0120: 69 63 65 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f  icense.terms" fo
0130: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e  r information on
0140: 20 75 73 61 67 65 20 61 6e 64 20 72 65 64 69 73   usage and redis
0150: 74 72 69 62 75 74 69 6f 6e 0a 20 2a 20 6f 66 20  tribution. * of 
0160: 74 68 69 73 20 66 69 6c 65 2c 20 61 6e 64 20 66  this file, and f
0170: 6f 72 20 61 20 44 49 53 43 4c 41 49 4d 45 52 20  or a DISCLAIMER 
0180: 4f 46 20 41 4c 4c 20 57 41 52 52 41 4e 54 49 45  OF ALL WARRANTIE
0190: 53 2e 0a 20 2a 0a 20 2a 20 40 28 23 29 20 24 49  S.. *. * @(#) $I
01a0: 64 3a 20 63 74 6b 2e 73 68 61 72 2c 76 20 31 2e  d: ctk.shar,v 1.
01b0: 35 30 20 31 39 39 36 2f 30 31 2f 31 35 20 31 34  50 1996/01/15 14
01c0: 3a 34 37 3a 31 36 20 61 6e 64 72 65 77 6d 20 45  :47:16 andrewm E
01d0: 78 70 20 61 6e 64 72 65 77 6d 20 24 0a 20 2a 2f  xp andrewm $. */
01e0: 0a 0a 0a 23 69 6e 63 6c 75 64 65 20 22 74 6b 49  ...#include "tkI
01f0: 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  nt.h".#include "
0200: 74 6b 54 65 78 74 2e 68 22 0a 23 69 6e 63 6c 75  tkText.h".#inclu
0210: 64 65 20 22 74 6b 50 6f 72 74 2e 68 22 0a 0a 2f  de "tkPort.h"../
0220: 2a 0a 20 2a 20 4d 61 63 72 6f 20 74 68 61 74 20  *. * Macro that 
0230: 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 73  determines the s
0240: 69 7a 65 20 6f 66 20 61 20 6d 61 72 6b 20 73 65  ize of a mark se
0250: 67 6d 65 6e 74 3a 0a 20 2a 2f 0a 0a 23 64 65 66  gment:. */..#def
0260: 69 6e 65 20 4d 53 45 47 5f 53 49 5a 45 20 28 28  ine MSEG_SIZE ((
0270: 75 6e 73 69 67 6e 65 64 29 20 28 54 6b 5f 4f 66  unsigned) (Tk_Of
0280: 66 73 65 74 28 54 6b 54 65 78 74 53 65 67 6d 65  fset(TkTextSegme
0290: 6e 74 2c 20 62 6f 64 79 29 20 5c 0a 09 2b 20 73  nt, body) \..+ s
02a0: 69 7a 65 6f 66 28 54 6b 54 65 78 74 4d 61 72 6b  izeof(TkTextMark
02b0: 29 29 29 0a 0a 2f 2a 0a 20 2a 20 46 6f 72 77 61  )))../*. * Forwa
02c0: 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 66 6f  rd references fo
02d0: 72 20 70 72 6f 63 65 64 75 72 65 73 20 64 65 66  r procedures def
02e0: 69 6e 65 64 20 69 6e 20 74 68 69 73 20 66 69 6c  ined in this fil
02f0: 65 3a 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76  e:. */..static v
0300: 6f 69 64 09 09 49 6e 73 65 72 74 55 6e 64 69 73  oid..InsertUndis
0310: 70 6c 61 79 50 72 6f 63 20 5f 41 4e 53 49 5f 41  playProc _ANSI_A
0320: 52 47 53 5f 28 28 54 6b 54 65 78 74 20 2a 74 65  RGS_((TkText *te
0330: 78 74 50 74 72 2c 0a 09 09 09 20 20 20 20 54 6b  xtPtr,....    Tk
0340: 54 65 78 74 44 69 73 70 43 68 75 6e 6b 20 2a 63  TextDispChunk *c
0350: 68 75 6e 6b 50 74 72 29 29 3b 0a 73 74 61 74 69  hunkPtr));.stati
0360: 63 20 69 6e 74 09 09 4d 61 72 6b 44 65 6c 65 74  c int..MarkDelet
0370: 65 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53  eProc _ANSI_ARGS
0380: 5f 28 28 54 6b 54 65 78 74 53 65 67 6d 65 6e 74  _((TkTextSegment
0390: 20 2a 73 65 67 50 74 72 2c 0a 09 09 09 20 20 20   *segPtr,....   
03a0: 20 54 6b 54 65 78 74 4c 69 6e 65 20 2a 6c 69 6e   TkTextLine *lin
03b0: 65 50 74 72 2c 20 69 6e 74 20 74 72 65 65 47 6f  ePtr, int treeGo
03c0: 6e 65 29 29 3b 0a 73 74 61 74 69 63 20 54 6b 54  ne));.static TkT
03d0: 65 78 74 53 65 67 6d 65 6e 74 20 2a 09 4d 61 72  extSegment *.Mar
03e0: 6b 43 6c 65 61 6e 75 70 50 72 6f 63 20 5f 41 4e  kCleanupProc _AN
03f0: 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65 78 74  SI_ARGS_((TkText
0400: 53 65 67 6d 65 6e 74 20 2a 73 65 67 50 74 72 2c  Segment *segPtr,
0410: 0a 09 09 09 20 20 20 20 54 6b 54 65 78 74 4c 69  ....    TkTextLi
0420: 6e 65 20 2a 6c 69 6e 65 50 74 72 29 29 3b 0a 73  ne *linePtr));.s
0430: 74 61 74 69 63 20 76 6f 69 64 09 09 4d 61 72 6b  tatic void..Mark
0440: 43 68 65 63 6b 50 72 6f 63 20 5f 41 4e 53 49 5f  CheckProc _ANSI_
0450: 41 52 47 53 5f 28 28 54 6b 54 65 78 74 53 65 67  ARGS_((TkTextSeg
0460: 6d 65 6e 74 20 2a 73 65 67 50 74 72 2c 0a 09 09  ment *segPtr,...
0470: 09 20 20 20 20 54 6b 54 65 78 74 4c 69 6e 65 20  .    TkTextLine 
0480: 2a 6c 69 6e 65 50 74 72 29 29 3b 0a 73 74 61 74  *linePtr));.stat
0490: 69 63 20 69 6e 74 09 09 4d 61 72 6b 4c 61 79 6f  ic int..MarkLayo
04a0: 75 74 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47  utProc _ANSI_ARG
04b0: 53 5f 28 28 54 6b 54 65 78 74 20 2a 74 65 78 74  S_((TkText *text
04c0: 50 74 72 2c 0a 09 09 09 20 20 20 20 54 6b 54 65  Ptr,....    TkTe
04d0: 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78 50 74  xtIndex *indexPt
04e0: 72 2c 20 54 6b 54 65 78 74 53 65 67 6d 65 6e 74  r, TkTextSegment
04f0: 20 2a 73 65 67 50 74 72 2c 0a 09 09 09 20 20 20   *segPtr,....   
0500: 20 69 6e 74 20 6f 66 66 73 65 74 2c 20 69 6e 74   int offset, int
0510: 20 6d 61 78 58 2c 20 69 6e 74 20 6d 61 78 43 68   maxX, int maxCh
0520: 61 72 73 2c 0a 09 09 09 20 20 20 20 69 6e 74 20  ars,....    int 
0530: 6e 6f 43 68 61 72 73 59 65 74 2c 20 54 6b 5f 55  noCharsYet, Tk_U
0540: 69 64 20 77 72 61 70 4d 6f 64 65 2c 0a 09 09 09  id wrapMode,....
0550: 20 20 20 20 54 6b 54 65 78 74 44 69 73 70 43 68      TkTextDispCh
0560: 75 6e 6b 20 2a 63 68 75 6e 6b 50 74 72 29 29 3b  unk *chunkPtr));
0570: 0a 73 74 61 74 69 63 20 76 6f 69 64 09 09 49 6e  .static void..In
0580: 73 65 72 74 44 69 73 70 6c 61 79 50 72 6f 63 20  sertDisplayProc 
0590: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 0a 09 09  _ANSI_ARGS_((...
05a0: 09 20 20 20 20 54 6b 54 65 78 74 44 69 73 70 43  .    TkTextDispC
05b0: 68 75 6e 6b 20 2a 63 68 75 6e 6b 50 74 72 2c 20  hunk *chunkPtr, 
05c0: 69 6e 74 20 78 2c 20 69 6e 74 20 79 2c 0a 09 09  int x, int y,...
05d0: 09 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77 20 77  .    Tk_Window w
05e0: 69 6e 29 29 3b 0a 0a 2f 2a 0a 20 2a 20 54 68 65  in));../*. * The
05f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
0600: 74 75 72 65 73 20 64 65 63 6c 61 72 65 20 74 68  tures declare th
0610: 65 20 22 6d 61 72 6b 22 20 73 65 67 6d 65 6e 74  e "mark" segment
0620: 20 74 79 70 65 73 2e 0a 20 2a 20 54 68 65 72 65   types.. * There
0630: 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 74 77   are actually tw
0640: 6f 20 74 79 70 65 73 20 66 6f 72 20 6d 61 72 6b  o types for mark
0650: 73 2c 20 6f 6e 65 20 77 69 74 68 20 6c 65 66 74  s, one with left
0660: 20 67 72 61 76 69 74 79 0a 20 2a 20 61 6e 64 20   gravity. * and 
0670: 6f 6e 65 20 77 69 74 68 20 72 69 67 68 74 20 67  one with right g
0680: 72 61 76 69 74 79 2e 20 20 54 68 65 79 20 61 72  ravity.  They ar
0690: 65 20 69 64 65 6e 74 69 63 61 6c 20 65 78 63 65  e identical exce
06a0: 70 74 20 66 6f 72 0a 20 2a 20 74 68 65 69 72 20  pt for. * their 
06b0: 67 72 61 76 69 74 79 20 70 72 6f 70 65 72 74 79  gravity property
06c0: 2e 0a 20 2a 2f 0a 0a 54 6b 5f 53 65 67 54 79 70  .. */..Tk_SegTyp
06d0: 65 20 74 6b 54 65 78 74 52 69 67 68 74 4d 61 72  e tkTextRightMar
06e0: 6b 54 79 70 65 20 3d 20 7b 0a 20 20 20 20 22 6d  kType = {.    "m
06f0: 61 72 6b 22 2c 09 09 09 09 09 2f 2a 20 6e 61 6d  ark",...../* nam
0700: 65 20 2a 2f 0a 20 20 20 20 30 2c 09 09 09 09 09  e */.    0,.....
0710: 09 2f 2a 20 6c 65 66 74 47 72 61 76 69 74 79 20  ./* leftGravity 
0720: 2a 2f 0a 20 20 20 20 28 54 6b 5f 53 65 67 53 70  */.    (Tk_SegSp
0730: 6c 69 74 50 72 6f 63 20 2a 29 20 4e 55 4c 4c 2c  litProc *) NULL,
0740: 09 09 09 2f 2a 20 73 70 6c 69 74 50 72 6f 63 20  .../* splitProc 
0750: 2a 2f 0a 20 20 20 20 4d 61 72 6b 44 65 6c 65 74  */.    MarkDelet
0760: 65 50 72 6f 63 2c 09 09 09 09 2f 2a 20 64 65 6c  eProc,..../* del
0770: 65 74 65 50 72 6f 63 20 2a 2f 0a 20 20 20 20 4d  eteProc */.    M
0780: 61 72 6b 43 6c 65 61 6e 75 70 50 72 6f 63 2c 09  arkCleanupProc,.
0790: 09 09 09 2f 2a 20 63 6c 65 61 6e 75 70 50 72 6f  .../* cleanupPro
07a0: 63 20 2a 2f 0a 20 20 20 20 28 54 6b 5f 53 65 67  c */.    (Tk_Seg
07b0: 4c 69 6e 65 43 68 61 6e 67 65 50 72 6f 63 20 2a  LineChangeProc *
07c0: 29 20 4e 55 4c 4c 2c 09 09 2f 2a 20 6c 69 6e 65  ) NULL,../* line
07d0: 43 68 61 6e 67 65 50 72 6f 63 20 2a 2f 0a 20 20  ChangeProc */.  
07e0: 20 20 4d 61 72 6b 4c 61 79 6f 75 74 50 72 6f 63    MarkLayoutProc
07f0: 2c 09 09 09 09 2f 2a 20 6c 61 79 6f 75 74 50 72  ,..../* layoutPr
0800: 6f 63 20 2a 2f 0a 20 20 20 20 4d 61 72 6b 43 68  oc */.    MarkCh
0810: 65 63 6b 50 72 6f 63 09 09 09 09 2f 2a 20 63 68  eckProc..../* ch
0820: 65 63 6b 50 72 6f 63 20 2a 2f 0a 7d 3b 0a 0a 54  eckProc */.};..T
0830: 6b 5f 53 65 67 54 79 70 65 20 74 6b 54 65 78 74  k_SegType tkText
0840: 4c 65 66 74 4d 61 72 6b 54 79 70 65 20 3d 20 7b  LeftMarkType = {
0850: 0a 20 20 20 20 22 6d 61 72 6b 22 2c 09 09 09 09  .    "mark",....
0860: 09 2f 2a 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20  ./* name */.    
0870: 31 2c 09 09 09 09 09 09 2f 2a 20 6c 65 66 74 47  1,....../* leftG
0880: 72 61 76 69 74 79 20 2a 2f 0a 20 20 20 20 28 54  ravity */.    (T
0890: 6b 5f 53 65 67 53 70 6c 69 74 50 72 6f 63 20 2a  k_SegSplitProc *
08a0: 29 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 73 70 6c  ) NULL,.../* spl
08b0: 69 74 50 72 6f 63 20 2a 2f 0a 20 20 20 20 4d 61  itProc */.    Ma
08c0: 72 6b 44 65 6c 65 74 65 50 72 6f 63 2c 09 09 09  rkDeleteProc,...
08d0: 09 2f 2a 20 64 65 6c 65 74 65 50 72 6f 63 20 2a  ./* deleteProc *
08e0: 2f 0a 20 20 20 20 4d 61 72 6b 43 6c 65 61 6e 75  /.    MarkCleanu
08f0: 70 50 72 6f 63 2c 09 09 09 09 2f 2a 20 63 6c 65  pProc,..../* cle
0900: 61 6e 75 70 50 72 6f 63 20 2a 2f 0a 20 20 20 20  anupProc */.    
0910: 28 54 6b 5f 53 65 67 4c 69 6e 65 43 68 61 6e 67  (Tk_SegLineChang
0920: 65 50 72 6f 63 20 2a 29 20 4e 55 4c 4c 2c 09 09  eProc *) NULL,..
0930: 2f 2a 20 6c 69 6e 65 43 68 61 6e 67 65 50 72 6f  /* lineChangePro
0940: 63 20 2a 2f 0a 20 20 20 20 4d 61 72 6b 4c 61 79  c */.    MarkLay
0950: 6f 75 74 50 72 6f 63 2c 09 09 09 09 2f 2a 20 6c  outProc,..../* l
0960: 61 79 6f 75 74 50 72 6f 63 20 2a 2f 0a 20 20 20  ayoutProc */.   
0970: 20 4d 61 72 6b 43 68 65 63 6b 50 72 6f 63 09 09   MarkCheckProc..
0980: 09 09 2f 2a 20 63 68 65 63 6b 50 72 6f 63 20 2a  ../* checkProc *
0990: 2f 0a 7d 3b 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d  /.};.../*. *----
09a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 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 0a 20 2a 0a 20 2a  ----------. *. *
09e0: 20 54 6b 54 65 78 74 4d 61 72 6b 43 6d 64 20 2d   TkTextMarkCmd -
09f0: 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f  -. *. *.This pro
0a00: 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f 6b 65  cedure is invoke
0a10: 64 20 74 6f 20 70 72 6f 63 65 73 73 20 74 68 65  d to process the
0a20: 20 22 6d 61 72 6b 22 20 6f 70 74 69 6f 6e 73 20   "mark" options 
0a30: 6f 66 0a 20 2a 09 74 68 65 20 77 69 64 67 65 74  of. *.the widget
0a40: 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 74 65 78   command for tex
0a50: 74 20 77 69 64 67 65 74 73 2e 20 53 65 65 20 74  t widgets. See t
0a60: 68 65 20 75 73 65 72 20 64 6f 63 75 6d 65 6e 74  he user document
0a70: 61 74 69 6f 6e 0a 20 2a 09 66 6f 72 20 64 65 74  ation. *.for det
0a80: 61 69 6c 73 20 6f 6e 20 77 68 61 74 20 69 74 20  ails on what it 
0a90: 64 6f 65 73 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  does.. *. * Resu
0aa0: 6c 74 73 3a 0a 20 2a 09 41 20 73 74 61 6e 64 61  lts:. *.A standa
0ab0: 72 64 20 54 63 6c 20 72 65 73 75 6c 74 2e 0a 20  rd Tcl result.. 
0ac0: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
0ad0: 73 3a 0a 20 2a 09 53 65 65 20 74 68 65 20 75 73  s:. *.See the us
0ae0: 65 72 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  er documentation
0af0: 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  .. *. *---------
0b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b30: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 69 6e 74 0a 54  -----. */..int.T
0b40: 6b 54 65 78 74 4d 61 72 6b 43 6d 64 28 74 65 78  kTextMarkCmd(tex
0b50: 74 50 74 72 2c 20 69 6e 74 65 72 70 2c 20 61 72  tPtr, interp, ar
0b60: 67 63 2c 20 61 72 67 76 29 0a 20 20 20 20 72 65  gc, argv).    re
0b70: 67 69 73 74 65 72 20 54 6b 54 65 78 74 20 2a 74  gister TkText *t
0b80: 65 78 74 50 74 72 3b 09 2f 2a 20 49 6e 66 6f 72  extPtr;./* Infor
0b90: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 65 78  mation about tex
0ba0: 74 20 77 69 64 67 65 74 2e 20 2a 2f 0a 20 20 20  t widget. */.   
0bb0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
0bc0: 65 72 70 3b 09 09 2f 2a 20 43 75 72 72 65 6e 74  erp;../* Current
0bd0: 20 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a 2f   interpreter. */
0be0: 0a 20 20 20 20 69 6e 74 20 61 72 67 63 3b 09 09  .    int argc;..
0bf0: 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72  ./* Number of ar
0c00: 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 20  guments. */.    
0c10: 63 68 61 72 20 2a 2a 61 72 67 76 3b 09 09 2f 2a  char **argv;../*
0c20: 20 41 72 67 75 6d 65 6e 74 20 73 74 72 69 6e 67   Argument string
0c30: 73 2e 20 20 53 6f 6d 65 6f 6e 65 20 65 6c 73 65  s.  Someone else
0c40: 20 68 61 73 20 61 6c 72 65 61 64 79 0a 09 09 09   has already....
0c50: 09 20 2a 20 70 61 72 73 65 64 20 74 68 69 73 20  . * parsed this 
0c60: 63 6f 6d 6d 61 6e 64 20 65 6e 6f 75 67 68 20 74  command enough t
0c70: 6f 20 6b 6e 6f 77 20 74 68 61 74 0a 09 09 09 09  o know that.....
0c80: 20 2a 20 61 72 67 76 5b 31 5d 20 69 73 20 22 6d   * argv[1] is "m
0c90: 61 72 6b 22 2e 20 2a 2f 0a 7b 0a 20 20 20 20 69  ark". */.{.    i
0ca0: 6e 74 20 63 2c 20 69 3b 0a 20 20 20 20 73 69 7a  nt c, i;.    siz
0cb0: 65 5f 74 20 6c 65 6e 67 74 68 3b 0a 20 20 20 20  e_t length;.    
0cc0: 54 63 6c 5f 48 61 73 68 45 6e 74 72 79 20 2a 68  Tcl_HashEntry *h
0cd0: 50 74 72 3b 0a 20 20 20 20 54 6b 54 65 78 74 53  Ptr;.    TkTextS
0ce0: 65 67 6d 65 6e 74 20 2a 6d 61 72 6b 50 74 72 3b  egment *markPtr;
0cf0: 0a 20 20 20 20 54 63 6c 5f 48 61 73 68 53 65 61  .    Tcl_HashSea
0d00: 72 63 68 20 73 65 61 72 63 68 3b 0a 20 20 20 20  rch search;.    
0d10: 54 6b 54 65 78 74 49 6e 64 65 78 20 69 6e 64 65  TkTextIndex inde
0d20: 78 3b 0a 20 20 20 20 54 6b 5f 53 65 67 54 79 70  x;.    Tk_SegTyp
0d30: 65 20 2a 6e 65 77 54 79 70 65 50 74 72 3b 0a 0a  e *newTypePtr;..
0d40: 20 20 20 20 69 66 20 28 61 72 67 63 20 3c 20 33      if (argc < 3
0d50: 29 20 7b 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52  ) {..Tcl_AppendR
0d60: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
0d70: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
0d80: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 61 72  uld be \"",...ar
0d90: 67 76 5b 30 5d 2c 20 22 20 6d 61 72 6b 20 6f 70  gv[0], " mark op
0da0: 74 69 6f 6e 20 3f 61 72 67 20 61 72 67 20 2e 2e  tion ?arg arg ..
0db0: 2e 3f 5c 22 22 2c 20 28 63 68 61 72 20 2a 29 20  .?\"", (char *) 
0dc0: 4e 55 4c 4c 29 3b 0a 09 72 65 74 75 72 6e 20 54  NULL);..return T
0dd0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  CL_ERROR;.    }.
0de0: 20 20 20 20 63 20 3d 20 61 72 67 76 5b 32 5d 5b      c = argv[2][
0df0: 30 5d 3b 0a 20 20 20 20 6c 65 6e 67 74 68 20 3d  0];.    length =
0e00: 20 73 74 72 6c 65 6e 28 61 72 67 76 5b 32 5d 29   strlen(argv[2])
0e10: 3b 0a 20 20 20 20 69 66 20 28 28 63 20 3d 3d 20  ;.    if ((c == 
0e20: 27 67 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70  'g') && (strncmp
0e30: 28 61 72 67 76 5b 32 5d 2c 20 22 67 72 61 76 69  (argv[2], "gravi
0e40: 74 79 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20  ty", length) == 
0e50: 30 29 29 20 7b 0a 09 69 66 20 28 61 72 67 63 20  0)) {..if (argc 
0e60: 3e 20 35 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f  > 5) {..    Tcl_
0e70: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
0e80: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
0e90: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
0ea0: 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b 30 5d  ",...    argv[0]
0eb0: 2c 20 22 20 6d 61 72 6b 20 67 72 61 76 69 74 79  , " mark gravity
0ec0: 20 6d 61 72 6b 4e 61 6d 65 20 3f 67 72 61 76 69   markName ?gravi
0ed0: 74 79 3f 22 2c 0a 09 09 20 20 20 20 28 63 68 61  ty?",...    (cha
0ee0: 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20  r *) NULL);..   
0ef0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
0f00: 52 3b 0a 09 7d 0a 09 68 50 74 72 20 3d 20 54 63  R;..}..hPtr = Tc
0f10: 6c 5f 46 69 6e 64 48 61 73 68 45 6e 74 72 79 28  l_FindHashEntry(
0f20: 26 74 65 78 74 50 74 72 2d 3e 6d 61 72 6b 54 61  &textPtr->markTa
0f30: 62 6c 65 2c 20 61 72 67 76 5b 33 5d 29 3b 0a 09  ble, argv[3]);..
0f40: 69 66 20 28 68 50 74 72 20 3d 3d 20 4e 55 4c 4c  if (hPtr == NULL
0f50: 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70  ) {..    Tcl_App
0f60: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
0f70: 2c 20 22 74 68 65 72 65 20 69 73 20 6e 6f 20 6d  , "there is no m
0f80: 61 72 6b 20 6e 61 6d 65 64 20 5c 22 22 2c 0a 09  ark named \"",..
0f90: 09 20 20 20 20 61 72 67 76 5b 33 5d 2c 20 22 5c  .    argv[3], "\
0fa0: 22 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c  "", (char *) NUL
0fb0: 4c 29 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20  L);..    return 
0fc0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09 6d  TCL_ERROR;..}..m
0fd0: 61 72 6b 50 74 72 20 3d 20 28 54 6b 54 65 78 74  arkPtr = (TkText
0fe0: 53 65 67 6d 65 6e 74 20 2a 29 20 54 63 6c 5f 47  Segment *) Tcl_G
0ff0: 65 74 48 61 73 68 56 61 6c 75 65 28 68 50 74 72  etHashValue(hPtr
1000: 29 3b 0a 09 69 66 20 28 61 72 67 63 20 3d 3d 20  );..if (argc == 
1010: 34 29 20 7b 0a 09 20 20 20 20 69 66 20 28 6d 61  4) {..    if (ma
1020: 72 6b 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d  rkPtr->typePtr =
1030: 3d 20 26 74 6b 54 65 78 74 52 69 67 68 74 4d 61  = &tkTextRightMa
1040: 72 6b 54 79 70 65 29 20 7b 0a 09 09 54 63 6c 5f  rkType) {...Tcl_
1050: 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
1060: 2c 22 72 69 67 68 74 22 2c 54 43 4c 5f 53 54 41  ,"right",TCL_STA
1070: 54 49 43 29 3b 0a 09 20 20 20 20 7d 20 65 6c 73  TIC);..    } els
1080: 65 20 7b 0a 09 09 54 63 6c 5f 53 65 74 52 65 73  e {...Tcl_SetRes
1090: 75 6c 74 28 69 6e 74 65 72 70 2c 22 6c 65 66 74  ult(interp,"left
10a0: 22 2c 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 09  ",TCL_STATIC);..
10b0: 20 20 20 20 7d 0a 09 20 20 20 20 72 65 74 75 72      }..    retur
10c0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 09 7d 0a 09 6c 65  n TCL_OK;..}..le
10d0: 6e 67 74 68 20 3d 20 73 74 72 6c 65 6e 28 61 72  ngth = strlen(ar
10e0: 67 76 5b 34 5d 29 3b 0a 09 63 20 3d 20 61 72 67  gv[4]);..c = arg
10f0: 76 5b 34 5d 5b 30 5d 3b 0a 09 69 66 20 28 28 63  v[4][0];..if ((c
1100: 20 3d 3d 20 27 6c 27 29 20 26 26 20 28 73 74 72   == 'l') && (str
1110: 6e 63 6d 70 28 61 72 67 76 5b 34 5d 2c 20 22 6c  ncmp(argv[4], "l
1120: 65 66 74 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d  eft", length) ==
1130: 20 30 29 29 20 7b 0a 09 20 20 20 20 6e 65 77 54   0)) {..    newT
1140: 79 70 65 50 74 72 20 3d 20 26 74 6b 54 65 78 74  ypePtr = &tkText
1150: 4c 65 66 74 4d 61 72 6b 54 79 70 65 3b 0a 09 7d  LeftMarkType;..}
1160: 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20   else if ((c == 
1170: 27 72 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70  'r') && (strncmp
1180: 28 61 72 67 76 5b 34 5d 2c 20 22 72 69 67 68 74  (argv[4], "right
1190: 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29  ", length) == 0)
11a0: 29 20 7b 0a 09 20 20 20 20 6e 65 77 54 79 70 65  ) {..    newType
11b0: 50 74 72 20 3d 20 26 74 6b 54 65 78 74 52 69 67  Ptr = &tkTextRig
11c0: 68 74 4d 61 72 6b 54 79 70 65 3b 0a 09 7d 20 65  htMarkType;..} e
11d0: 6c 73 65 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41  lse {..    Tcl_A
11e0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
11f0: 72 70 2c 20 22 62 61 64 20 6d 61 72 6b 20 67 72  rp, "bad mark gr
1200: 61 76 69 74 79 20 5c 22 22 2c 0a 09 09 20 20 20  avity \"",...   
1210: 20 61 72 67 76 5b 34 5d 2c 20 22 5c 22 3a 20 6d   argv[4], "\": m
1220: 75 73 74 20 62 65 20 6c 65 66 74 20 6f 72 20 72  ust be left or r
1230: 69 67 68 74 22 2c 20 28 63 68 61 72 20 2a 29 20  ight", (char *) 
1240: 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 72 65 74 75  NULL);..    retu
1250: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d  rn TCL_ERROR;..}
1260: 0a 09 54 6b 54 65 78 74 4d 61 72 6b 53 65 67 54  ..TkTextMarkSegT
1270: 6f 49 6e 64 65 78 28 74 65 78 74 50 74 72 2c 20  oIndex(textPtr, 
1280: 6d 61 72 6b 50 74 72 2c 20 26 69 6e 64 65 78 29  markPtr, &index)
1290: 3b 0a 09 54 6b 42 54 72 65 65 55 6e 6c 69 6e 6b  ;..TkBTreeUnlink
12a0: 53 65 67 6d 65 6e 74 28 74 65 78 74 50 74 72 2d  Segment(textPtr-
12b0: 3e 74 72 65 65 2c 20 6d 61 72 6b 50 74 72 2c 0a  >tree, markPtr,.
12c0: 09 09 6d 61 72 6b 50 74 72 2d 3e 62 6f 64 79 2e  ..markPtr->body.
12d0: 6d 61 72 6b 2e 6c 69 6e 65 50 74 72 29 3b 0a 09  mark.linePtr);..
12e0: 6d 61 72 6b 50 74 72 2d 3e 74 79 70 65 50 74 72  markPtr->typePtr
12f0: 20 3d 20 6e 65 77 54 79 70 65 50 74 72 3b 0a 09   = newTypePtr;..
1300: 54 6b 42 54 72 65 65 4c 69 6e 6b 53 65 67 6d 65  TkBTreeLinkSegme
1310: 6e 74 28 6d 61 72 6b 50 74 72 2c 20 26 69 6e 64  nt(markPtr, &ind
1320: 65 78 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20  ex);.    } else 
1330: 69 66 20 28 28 63 20 3d 3d 20 27 6e 27 29 20 26  if ((c == 'n') &
1340: 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b  & (strncmp(argv[
1350: 32 5d 2c 20 22 6e 61 6d 65 73 22 2c 20 6c 65 6e  2], "names", len
1360: 67 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a 09 69  gth) == 0)) {..i
1370: 66 20 28 61 72 67 63 20 21 3d 20 33 29 20 7b 0a  f (argc != 3) {.
1380: 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
1390: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
13a0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
13b0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 20 20  uld be \"",...  
13c0: 20 20 61 72 67 76 5b 30 5d 2c 20 22 20 6d 61 72    argv[0], " mar
13d0: 6b 20 6e 61 6d 65 73 5c 22 22 2c 20 28 63 68 61  k names\"", (cha
13e0: 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20  r *) NULL);..   
13f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1400: 52 3b 0a 09 7d 0a 09 66 6f 72 20 28 68 50 74 72  R;..}..for (hPtr
1410: 20 3d 20 54 63 6c 5f 46 69 72 73 74 48 61 73 68   = Tcl_FirstHash
1420: 45 6e 74 72 79 28 26 74 65 78 74 50 74 72 2d 3e  Entry(&textPtr->
1430: 6d 61 72 6b 54 61 62 6c 65 2c 20 26 73 65 61 72  markTable, &sear
1440: 63 68 29 3b 0a 09 09 68 50 74 72 20 21 3d 20 4e  ch);...hPtr != N
1450: 55 4c 4c 3b 20 68 50 74 72 20 3d 20 54 63 6c 5f  ULL; hPtr = Tcl_
1460: 4e 65 78 74 48 61 73 68 45 6e 74 72 79 28 26 73  NextHashEntry(&s
1470: 65 61 72 63 68 29 29 20 7b 0a 09 20 20 20 20 54  earch)) {..    T
1480: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
1490: 28 69 6e 74 65 72 70 2c 0a 09 09 20 20 20 20 54  (interp,...    T
14a0: 63 6c 5f 47 65 74 48 61 73 68 4b 65 79 28 26 74  cl_GetHashKey(&t
14b0: 65 78 74 50 74 72 2d 3e 6d 61 72 6b 54 61 62 6c  extPtr->markTabl
14c0: 65 2c 20 68 50 74 72 29 29 3b 0a 09 7d 0a 20 20  e, hPtr));..}.  
14d0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20    } else if ((c 
14e0: 3d 3d 20 27 73 27 29 20 26 26 20 28 73 74 72 6e  == 's') && (strn
14f0: 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 73 65  cmp(argv[2], "se
1500: 74 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30  t", length) == 0
1510: 29 29 20 7b 0a 09 69 66 20 28 61 72 67 63 20 21  )) {..if (argc !
1520: 3d 20 35 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f  = 5) {..    Tcl_
1530: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
1540: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
1550: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
1560: 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b 30 5d  ",...    argv[0]
1570: 2c 20 22 20 6d 61 72 6b 20 73 65 74 20 6d 61 72  , " mark set mar
1580: 6b 4e 61 6d 65 20 69 6e 64 65 78 5c 22 22 2c 20  kName index\"", 
1590: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a  (char *) NULL);.
15a0: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
15b0: 45 52 52 4f 52 3b 0a 09 7d 0a 09 69 66 20 28 54  ERROR;..}..if (T
15c0: 6b 54 65 78 74 47 65 74 49 6e 64 65 78 28 69 6e  kTextGetIndex(in
15d0: 74 65 72 70 2c 20 74 65 78 74 50 74 72 2c 20 61  terp, textPtr, a
15e0: 72 67 76 5b 34 5d 2c 20 26 69 6e 64 65 78 29 20  rgv[4], &index) 
15f0: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 20 20  != TCL_OK) {..  
1600: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1610: 4f 52 3b 0a 09 7d 0a 09 54 6b 54 65 78 74 53 65  OR;..}..TkTextSe
1620: 74 4d 61 72 6b 28 74 65 78 74 50 74 72 2c 20 61  tMark(textPtr, a
1630: 72 67 76 5b 33 5d 2c 20 26 69 6e 64 65 78 29 3b  rgv[3], &index);
1640: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
1650: 28 63 20 3d 3d 20 27 75 27 29 20 26 26 20 28 73  (c == 'u') && (s
1660: 74 72 6e 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  trncmp(argv[2], 
1670: 22 75 6e 73 65 74 22 2c 20 6c 65 6e 67 74 68 29  "unset", length)
1680: 20 3d 3d 20 30 29 29 20 7b 0a 09 66 6f 72 20 28   == 0)) {..for (
1690: 69 20 3d 20 33 3b 20 69 20 3c 20 61 72 67 63 3b  i = 3; i < argc;
16a0: 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 68 50 74   i++) {..    hPt
16b0: 72 20 3d 20 54 63 6c 5f 46 69 6e 64 48 61 73 68  r = Tcl_FindHash
16c0: 45 6e 74 72 79 28 26 74 65 78 74 50 74 72 2d 3e  Entry(&textPtr->
16d0: 6d 61 72 6b 54 61 62 6c 65 2c 20 61 72 67 76 5b  markTable, argv[
16e0: 69 5d 29 3b 0a 09 20 20 20 20 69 66 20 28 68 50  i]);..    if (hP
16f0: 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09  tr != NULL) {...
1700: 6d 61 72 6b 50 74 72 20 3d 20 28 54 6b 54 65 78  markPtr = (TkTex
1710: 74 53 65 67 6d 65 6e 74 20 2a 29 20 54 63 6c 5f  tSegment *) Tcl_
1720: 47 65 74 48 61 73 68 56 61 6c 75 65 28 68 50 74  GetHashValue(hPt
1730: 72 29 3b 0a 09 09 69 66 20 28 28 6d 61 72 6b 50  r);...if ((markP
1740: 74 72 20 3d 3d 20 74 65 78 74 50 74 72 2d 3e 69  tr == textPtr->i
1750: 6e 73 65 72 74 4d 61 72 6b 50 74 72 29 29 20 7b  nsertMarkPtr)) {
1760: 0a 09 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b  ...    continue;
1770: 0a 09 09 7d 0a 09 09 54 6b 42 54 72 65 65 55 6e  ...}...TkBTreeUn
1780: 6c 69 6e 6b 53 65 67 6d 65 6e 74 28 74 65 78 74  linkSegment(text
1790: 50 74 72 2d 3e 74 72 65 65 2c 20 6d 61 72 6b 50  Ptr->tree, markP
17a0: 74 72 2c 0a 09 09 09 6d 61 72 6b 50 74 72 2d 3e  tr,....markPtr->
17b0: 62 6f 64 79 2e 6d 61 72 6b 2e 6c 69 6e 65 50 74  body.mark.linePt
17c0: 72 29 3b 0a 09 09 54 63 6c 5f 44 65 6c 65 74 65  r);...Tcl_Delete
17d0: 48 61 73 68 45 6e 74 72 79 28 68 50 74 72 29 3b  HashEntry(hPtr);
17e0: 0a 09 09 63 6b 66 72 65 65 28 28 63 68 61 72 20  ...ckfree((char 
17f0: 2a 29 20 6d 61 72 6b 50 74 72 29 3b 0a 09 20 20  *) markPtr);..  
1800: 20 20 7d 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73    }..}.    } els
1810: 65 20 7b 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52  e {..Tcl_AppendR
1820: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 62  esult(interp, "b
1830: 61 64 20 6d 61 72 6b 20 6f 70 74 69 6f 6e 20 5c  ad mark option \
1840: 22 22 2c 20 61 72 67 76 5b 32 5d 2c 0a 09 09 22  "", argv[2],..."
1850: 5c 22 3a 20 20 6d 75 73 74 20 62 65 20 67 72 61  \":  must be gra
1860: 76 69 74 79 2c 20 6e 61 6d 65 73 2c 20 73 65 74  vity, names, set
1870: 2c 20 6f 72 20 75 6e 73 65 74 22 2c 0a 09 09 28  , or unset",...(
1880: 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09  char *) NULL);..
1890: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
18a0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
18b0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0c 0a 2f  rn TCL_OK;.}.../
18c0: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
18d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
1910: 20 54 6b 54 65 78 74 53 65 74 4d 61 72 6b 20 2d   TkTextSetMark -
1920: 2d 0a 20 2a 0a 20 2a 09 53 65 74 20 61 20 6d 61  -. *. *.Set a ma
1930: 72 6b 20 74 6f 20 61 20 70 61 72 74 69 63 75 6c  rk to a particul
1940: 61 72 20 70 6f 73 69 74 69 6f 6e 2c 20 63 72 65  ar position, cre
1950: 61 74 69 6e 67 20 61 20 6e 65 77 20 6d 61 72 6b  ating a new mark
1960: 20 69 66 0a 20 2a 09 6f 6e 65 20 64 6f 65 73 6e   if. *.one doesn
1970: 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
1980: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
1990: 0a 20 2a 09 54 68 65 20 72 65 74 75 72 6e 20 76  . *.The return v
19a0: 61 6c 75 65 20 69 73 20 61 20 70 6f 69 6e 74 65  alue is a pointe
19b0: 72 20 74 6f 20 74 68 65 20 6d 61 72 6b 20 74 68  r to the mark th
19c0: 61 74 20 77 61 73 20 6a 75 73 74 20 73 65 74 2e  at was just set.
19d0: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65  . *. * Side effe
19e0: 63 74 73 3a 0a 20 2a 09 41 20 6e 65 77 20 6d 61  cts:. *.A new ma
19f0: 72 6b 20 69 73 20 63 72 65 61 74 65 64 2c 20 6f  rk is created, o
1a00: 72 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6d 61  r an existing ma
1a10: 72 6b 20 69 73 20 6d 6f 76 65 64 2e 0a 20 2a 0a  rk is moved.. *.
1a20: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
1a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a60: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 54 6b  --------. */..Tk
1a70: 54 65 78 74 53 65 67 6d 65 6e 74 20 2a 0a 54 6b  TextSegment *.Tk
1a80: 54 65 78 74 53 65 74 4d 61 72 6b 28 74 65 78 74  TextSetMark(text
1a90: 50 74 72 2c 20 6e 61 6d 65 2c 20 69 6e 64 65 78  Ptr, name, index
1aa0: 50 74 72 29 0a 20 20 20 20 54 6b 54 65 78 74 20  Ptr).    TkText 
1ab0: 2a 74 65 78 74 50 74 72 3b 09 09 2f 2a 20 54 65  *textPtr;../* Te
1ac0: 78 74 20 77 69 64 67 65 74 20 69 6e 20 77 68 69  xt widget in whi
1ad0: 63 68 20 74 6f 20 63 72 65 61 74 65 20 6d 61 72  ch to create mar
1ae0: 6b 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  k. */.    char *
1af0: 6e 61 6d 65 3b 09 09 09 2f 2a 20 4e 61 6d 65 20  name;.../* Name 
1b00: 6f 66 20 6d 61 72 6b 20 74 6f 20 73 65 74 2e 20  of mark to set. 
1b10: 2a 2f 0a 20 20 20 20 54 6b 54 65 78 74 49 6e 64  */.    TkTextInd
1b20: 65 78 20 2a 69 6e 64 65 78 50 74 72 3b 09 2f 2a  ex *indexPtr;./*
1b30: 20 57 68 65 72 65 20 74 6f 20 73 65 74 20 6d 61   Where to set ma
1b40: 72 6b 2e 20 2a 2f 0a 7b 0a 20 20 20 20 54 63 6c  rk. */.{.    Tcl
1b50: 5f 48 61 73 68 45 6e 74 72 79 20 2a 68 50 74 72  _HashEntry *hPtr
1b60: 3b 0a 20 20 20 20 54 6b 54 65 78 74 53 65 67 6d  ;.    TkTextSegm
1b70: 65 6e 74 20 2a 6d 61 72 6b 50 74 72 3b 0a 20 20  ent *markPtr;.  
1b80: 20 20 54 6b 54 65 78 74 49 6e 64 65 78 20 69 6e    TkTextIndex in
1b90: 73 65 72 74 49 6e 64 65 78 3b 0a 20 20 20 20 69  sertIndex;.    i
1ba0: 6e 74 20 6e 65 77 3b 0a 0a 20 20 20 20 68 50 74  nt new;..    hPt
1bb0: 72 20 3d 20 54 63 6c 5f 43 72 65 61 74 65 48 61  r = Tcl_CreateHa
1bc0: 73 68 45 6e 74 72 79 28 26 74 65 78 74 50 74 72  shEntry(&textPtr
1bd0: 2d 3e 6d 61 72 6b 54 61 62 6c 65 2c 20 6e 61 6d  ->markTable, nam
1be0: 65 2c 20 26 6e 65 77 29 3b 0a 20 20 20 20 6d 61  e, &new);.    ma
1bf0: 72 6b 50 74 72 20 3d 20 28 54 6b 54 65 78 74 53  rkPtr = (TkTextS
1c00: 65 67 6d 65 6e 74 20 2a 29 20 54 63 6c 5f 47 65  egment *) Tcl_Ge
1c10: 74 48 61 73 68 56 61 6c 75 65 28 68 50 74 72 29  tHashValue(hPtr)
1c20: 3b 0a 20 20 20 20 69 66 20 28 21 6e 65 77 29 20  ;.    if (!new) 
1c30: 7b 0a 09 2f 2a 0a 09 20 2a 20 49 66 20 74 68 69  {../*.. * If thi
1c40: 73 20 69 73 20 74 68 65 20 69 6e 73 65 72 74 69  s is the inserti
1c50: 6f 6e 20 70 6f 69 6e 74 20 74 68 61 74 27 73 20  on point that's 
1c60: 62 65 69 6e 67 20 6d 6f 76 65 64 2c 20 62 65 20  being moved, be 
1c70: 73 75 72 65 0a 09 20 2a 20 74 6f 20 66 6f 72 63  sure.. * to forc
1c80: 65 20 61 20 64 69 73 70 6c 61 79 20 75 70 64 61  e a display upda
1c90: 74 65 20 61 74 20 74 68 65 20 6f 6c 64 20 70 6f  te at the old po
1ca0: 73 69 74 69 6f 6e 2e 20 20 41 6c 73 6f 2c 20 64  sition.  Also, d
1cb0: 6f 6e 27 74 0a 09 20 2a 20 6c 65 74 20 74 68 65  on't.. * let the
1cc0: 20 69 6e 73 65 72 74 69 6f 6e 20 63 75 72 73 6f   insertion curso
1cd0: 72 20 62 65 20 61 66 74 65 72 20 74 68 65 20 66  r be after the f
1ce0: 69 6e 61 6c 20 6e 65 77 6c 69 6e 65 20 6f 66 20  inal newline of 
1cf0: 74 68 65 0a 09 20 2a 20 66 69 6c 65 2e 0a 09 20  the.. * file... 
1d00: 2a 2f 0a 0a 09 69 66 20 28 6d 61 72 6b 50 74 72  */...if (markPtr
1d10: 20 3d 3d 20 74 65 78 74 50 74 72 2d 3e 69 6e 73   == textPtr->ins
1d20: 65 72 74 4d 61 72 6b 50 74 72 29 20 7b 0a 09 20  ertMarkPtr) {.. 
1d30: 20 20 20 54 6b 54 65 78 74 49 6e 64 65 78 20 69     TkTextIndex i
1d40: 6e 64 65 78 2c 20 69 6e 64 65 78 32 3b 0a 09 20  ndex, index2;.. 
1d50: 20 20 20 54 6b 54 65 78 74 4d 61 72 6b 53 65 67     TkTextMarkSeg
1d60: 54 6f 49 6e 64 65 78 28 74 65 78 74 50 74 72 2c  ToIndex(textPtr,
1d70: 20 74 65 78 74 50 74 72 2d 3e 69 6e 73 65 72 74   textPtr->insert
1d80: 4d 61 72 6b 50 74 72 2c 20 26 69 6e 64 65 78 29  MarkPtr, &index)
1d90: 3b 0a 09 20 20 20 20 54 6b 54 65 78 74 49 6e 64  ;..    TkTextInd
1da0: 65 78 46 6f 72 77 43 68 61 72 73 28 26 69 6e 64  exForwChars(&ind
1db0: 65 78 2c 20 31 2c 20 26 69 6e 64 65 78 32 29 3b  ex, 1, &index2);
1dc0: 0a 09 20 20 20 20 54 6b 54 65 78 74 43 68 61 6e  ..    TkTextChan
1dd0: 67 65 64 28 74 65 78 74 50 74 72 2c 20 26 69 6e  ged(textPtr, &in
1de0: 64 65 78 2c 20 26 69 6e 64 65 78 32 29 3b 0a 09  dex, &index2);..
1df0: 20 20 20 20 69 66 20 28 54 6b 42 54 72 65 65 4c      if (TkBTreeL
1e00: 69 6e 65 49 6e 64 65 78 28 69 6e 64 65 78 50 74  ineIndex(indexPt
1e10: 72 2d 3e 6c 69 6e 65 50 74 72 29 0a 09 09 20 20  r->linePtr)...  
1e20: 20 20 3d 3d 20 54 6b 42 54 72 65 65 4e 75 6d 4c    == TkBTreeNumL
1e30: 69 6e 65 73 28 74 65 78 74 50 74 72 2d 3e 74 72  ines(textPtr->tr
1e40: 65 65 29 29 20 20 7b 0a 09 09 54 6b 54 65 78 74  ee))  {...TkText
1e50: 49 6e 64 65 78 42 61 63 6b 43 68 61 72 73 28 69  IndexBackChars(i
1e60: 6e 64 65 78 50 74 72 2c 20 31 2c 20 26 69 6e 73  ndexPtr, 1, &ins
1e70: 65 72 74 49 6e 64 65 78 29 3b 0a 09 09 69 6e 64  ertIndex);...ind
1e80: 65 78 50 74 72 20 3d 20 26 69 6e 73 65 72 74 49  exPtr = &insertI
1e90: 6e 64 65 78 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a  ndex;..    }..}.
1ea0: 09 54 6b 42 54 72 65 65 55 6e 6c 69 6e 6b 53 65  .TkBTreeUnlinkSe
1eb0: 67 6d 65 6e 74 28 74 65 78 74 50 74 72 2d 3e 74  gment(textPtr->t
1ec0: 72 65 65 2c 20 6d 61 72 6b 50 74 72 2c 0a 09 09  ree, markPtr,...
1ed0: 6d 61 72 6b 50 74 72 2d 3e 62 6f 64 79 2e 6d 61  markPtr->body.ma
1ee0: 72 6b 2e 6c 69 6e 65 50 74 72 29 3b 0a 20 20 20  rk.linePtr);.   
1ef0: 20 7d 20 65 6c 73 65 20 7b 0a 09 6d 61 72 6b 50   } else {..markP
1f00: 74 72 20 3d 20 28 54 6b 54 65 78 74 53 65 67 6d  tr = (TkTextSegm
1f10: 65 6e 74 20 2a 29 20 63 6b 61 6c 6c 6f 63 28 4d  ent *) ckalloc(M
1f20: 53 45 47 5f 53 49 5a 45 29 3b 0a 09 6d 61 72 6b  SEG_SIZE);..mark
1f30: 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 20 26  Ptr->typePtr = &
1f40: 74 6b 54 65 78 74 52 69 67 68 74 4d 61 72 6b 54  tkTextRightMarkT
1f50: 79 70 65 3b 0a 09 6d 61 72 6b 50 74 72 2d 3e 73  ype;..markPtr->s
1f60: 69 7a 65 20 3d 20 30 3b 0a 09 6d 61 72 6b 50 74  ize = 0;..markPt
1f70: 72 2d 3e 62 6f 64 79 2e 6d 61 72 6b 2e 74 65 78  r->body.mark.tex
1f80: 74 50 74 72 20 3d 20 74 65 78 74 50 74 72 3b 0a  tPtr = textPtr;.
1f90: 09 6d 61 72 6b 50 74 72 2d 3e 62 6f 64 79 2e 6d  .markPtr->body.m
1fa0: 61 72 6b 2e 6c 69 6e 65 50 74 72 20 3d 20 69 6e  ark.linePtr = in
1fb0: 64 65 78 50 74 72 2d 3e 6c 69 6e 65 50 74 72 3b  dexPtr->linePtr;
1fc0: 0a 09 6d 61 72 6b 50 74 72 2d 3e 62 6f 64 79 2e  ..markPtr->body.
1fd0: 6d 61 72 6b 2e 68 50 74 72 20 3d 20 68 50 74 72  mark.hPtr = hPtr
1fe0: 3b 0a 09 54 63 6c 5f 53 65 74 48 61 73 68 56 61  ;..Tcl_SetHashVa
1ff0: 6c 75 65 28 68 50 74 72 2c 20 6d 61 72 6b 50 74  lue(hPtr, markPt
2000: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 6b  r);.    }.    Tk
2010: 42 54 72 65 65 4c 69 6e 6b 53 65 67 6d 65 6e 74  BTreeLinkSegment
2020: 28 6d 61 72 6b 50 74 72 2c 20 69 6e 64 65 78 50  (markPtr, indexP
2030: 74 72 29 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20  tr);..    /*.   
2040: 20 20 2a 20 49 66 20 74 68 65 20 6d 61 72 6b 20    * If the mark 
2050: 69 73 20 74 68 65 20 69 6e 73 65 72 74 69 6f 6e  is the insertion
2060: 20 63 75 72 73 6f 72 2c 20 74 68 65 6e 20 75 70   cursor, then up
2070: 64 61 74 65 20 74 68 65 20 73 63 72 65 65 6e 20  date the screen 
2080: 61 74 20 74 68 65 0a 20 20 20 20 20 2a 20 6d 61  at the.     * ma
2090: 72 6b 27 73 20 6e 65 77 20 6c 6f 63 61 74 69 6f  rk's new locatio
20a0: 6e 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20  n..     */..    
20b0: 69 66 20 28 6d 61 72 6b 50 74 72 20 3d 3d 20 74  if (markPtr == t
20c0: 65 78 74 50 74 72 2d 3e 69 6e 73 65 72 74 4d 61  extPtr->insertMa
20d0: 72 6b 50 74 72 29 20 7b 0a 09 54 6b 54 65 78 74  rkPtr) {..TkText
20e0: 49 6e 64 65 78 20 69 6e 64 65 78 32 3b 0a 0a 09  Index index2;...
20f0: 54 6b 54 65 78 74 49 6e 64 65 78 46 6f 72 77 43  TkTextIndexForwC
2100: 68 61 72 73 28 69 6e 64 65 78 50 74 72 2c 20 31  hars(indexPtr, 1
2110: 2c 20 26 69 6e 64 65 78 32 29 3b 0a 09 54 6b 54  , &index2);..TkT
2120: 65 78 74 43 68 61 6e 67 65 64 28 74 65 78 74 50  extChanged(textP
2130: 74 72 2c 20 69 6e 64 65 78 50 74 72 2c 20 26 69  tr, indexPtr, &i
2140: 6e 64 65 78 32 29 3b 0a 20 20 20 20 7d 0a 20 20  ndex2);.    }.  
2150: 20 20 72 65 74 75 72 6e 20 6d 61 72 6b 50 74 72    return markPtr
2160: 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  ;.}.../*. *-----
2170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20  ---------. *. * 
21b0: 54 6b 54 65 78 74 4d 61 72 6b 53 65 67 54 6f 49  TkTextMarkSegToI
21c0: 6e 64 65 78 20 2d 2d 0a 20 2a 0a 20 2a 09 47 69  ndex --. *. *.Gi
21d0: 76 65 6e 20 61 20 73 65 67 6d 65 6e 74 20 74 68  ven a segment th
21e0: 61 74 20 69 73 20 61 20 6d 61 72 6b 2c 20 63 72  at is a mark, cr
21f0: 65 61 74 65 20 61 6e 20 69 6e 64 65 78 20 74 68  eate an index th
2200: 61 74 0a 20 2a 09 72 65 66 65 72 73 20 74 6f 20  at. *.refers to 
2210: 74 68 65 20 6e 65 78 74 20 74 65 78 74 20 63 68  the next text ch
2220: 61 72 61 63 74 65 72 20 28 6f 72 20 6f 74 68 65  aracter (or othe
2230: 72 20 74 65 78 74 20 73 65 67 6d 65 6e 74 0a 20  r text segment. 
2240: 2a 09 77 69 74 68 20 6e 6f 6e 2d 7a 65 72 6f 20  *.with non-zero 
2250: 73 69 7a 65 29 20 61 66 74 65 72 20 74 68 65 20  size) after the 
2260: 6d 61 72 6b 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  mark.. *. * Resu
2270: 6c 74 73 3a 0a 20 2a 09 2a 49 6e 64 65 78 50 74  lts:. *.*IndexPt
2280: 72 20 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 77  r is filled in w
2290: 69 74 68 20 69 6e 64 65 78 20 69 6e 66 6f 72 6d  ith index inform
22a0: 61 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 20 53 69 64  ation.. *. * Sid
22b0: 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f  e effects:. *.No
22c0: 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  ne.. *. *-------
22d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2300: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f 69  -------. */..voi
2310: 64 0a 54 6b 54 65 78 74 4d 61 72 6b 53 65 67 54  d.TkTextMarkSegT
2320: 6f 49 6e 64 65 78 28 74 65 78 74 50 74 72 2c 20  oIndex(textPtr, 
2330: 6d 61 72 6b 50 74 72 2c 20 69 6e 64 65 78 50 74  markPtr, indexPt
2340: 72 29 0a 20 20 20 20 54 6b 54 65 78 74 20 2a 74  r).    TkText *t
2350: 65 78 74 50 74 72 3b 09 09 2f 2a 20 54 65 78 74  extPtr;../* Text
2360: 20 77 69 64 67 65 74 20 63 6f 6e 74 61 69 6e 69   widget containi
2370: 6e 67 20 6d 61 72 6b 2e 20 2a 2f 0a 20 20 20 20  ng mark. */.    
2380: 54 6b 54 65 78 74 53 65 67 6d 65 6e 74 20 2a 6d  TkTextSegment *m
2390: 61 72 6b 50 74 72 3b 09 2f 2a 20 4d 61 72 6b 20  arkPtr;./* Mark 
23a0: 73 65 67 6d 65 6e 74 2e 20 2a 2f 0a 20 20 20 20  segment. */.    
23b0: 54 6b 54 65 78 74 49 6e 64 65 78 20 2a 69 6e 64  TkTextIndex *ind
23c0: 65 78 50 74 72 3b 09 2f 2a 20 49 6e 64 65 78 20  exPtr;./* Index 
23d0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 65 74 73  information gets
23e0: 20 73 74 6f 72 65 64 20 68 65 72 65 2e 20 20 2a   stored here.  *
23f0: 2f 0a 7b 0a 20 20 20 20 54 6b 54 65 78 74 53 65  /.{.    TkTextSe
2400: 67 6d 65 6e 74 20 2a 73 65 67 50 74 72 3b 0a 0a  gment *segPtr;..
2410: 20 20 20 20 69 6e 64 65 78 50 74 72 2d 3e 74 72      indexPtr->tr
2420: 65 65 20 3d 20 74 65 78 74 50 74 72 2d 3e 74 72  ee = textPtr->tr
2430: 65 65 3b 0a 20 20 20 20 69 6e 64 65 78 50 74 72  ee;.    indexPtr
2440: 2d 3e 6c 69 6e 65 50 74 72 20 3d 20 6d 61 72 6b  ->linePtr = mark
2450: 50 74 72 2d 3e 62 6f 64 79 2e 6d 61 72 6b 2e 6c  Ptr->body.mark.l
2460: 69 6e 65 50 74 72 3b 0a 20 20 20 20 69 6e 64 65  inePtr;.    inde
2470: 78 50 74 72 2d 3e 63 68 61 72 49 6e 64 65 78 20  xPtr->charIndex 
2480: 3d 20 30 3b 0a 20 20 20 20 66 6f 72 20 28 73 65  = 0;.    for (se
2490: 67 50 74 72 20 3d 20 69 6e 64 65 78 50 74 72 2d  gPtr = indexPtr-
24a0: 3e 6c 69 6e 65 50 74 72 2d 3e 73 65 67 50 74 72  >linePtr->segPtr
24b0: 3b 20 73 65 67 50 74 72 20 21 3d 20 6d 61 72 6b  ; segPtr != mark
24c0: 50 74 72 3b 0a 09 20 20 20 20 73 65 67 50 74 72  Ptr;..    segPtr
24d0: 20 3d 20 73 65 67 50 74 72 2d 3e 6e 65 78 74 50   = segPtr->nextP
24e0: 74 72 29 20 7b 0a 09 69 6e 64 65 78 50 74 72 2d  tr) {..indexPtr-
24f0: 3e 63 68 61 72 49 6e 64 65 78 20 2b 3d 20 73 65  >charIndex += se
2500: 67 50 74 72 2d 3e 73 69 7a 65 3b 0a 20 20 20 20  gPtr->size;.    
2510: 7d 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  }.}.../*. *-----
2520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20  ---------. *. * 
2560: 54 6b 54 65 78 74 4d 61 72 6b 4e 61 6d 65 54 6f  TkTextMarkNameTo
2570: 49 6e 64 65 78 20 2d 2d 0a 20 2a 0a 20 2a 09 47  Index --. *. *.G
2580: 69 76 65 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  iven the name of
2590: 20 61 20 6d 61 72 6b 2c 20 72 65 74 75 72 6e 20   a mark, return 
25a0: 61 6e 20 69 6e 64 65 78 20 63 6f 72 72 65 73 70  an index corresp
25b0: 6f 6e 64 69 6e 67 0a 20 2a 09 74 6f 20 74 68 65  onding. *.to the
25c0: 20 6d 61 72 6b 20 6e 61 6d 65 2e 0a 20 2a 0a 20   mark name.. *. 
25d0: 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 54 68  * Results:. *.Th
25e0: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69  e return value i
25f0: 73 20 54 43 4c 5f 4f 4b 20 69 66 20 22 6e 61 6d  s TCL_OK if "nam
2600: 65 22 20 65 78 69 73 74 73 20 61 73 20 61 20 6d  e" exists as a m
2610: 61 72 6b 20 69 6e 0a 20 2a 09 74 68 65 20 74 65  ark in. *.the te
2620: 78 74 20 77 69 64 67 65 74 2e 20 20 49 6e 20 74  xt widget.  In t
2630: 68 69 73 20 63 61 73 65 20 2a 69 6e 64 65 78 50  his case *indexP
2640: 74 72 20 69 73 20 66 69 6c 6c 65 64 20 69 6e 20  tr is filled in 
2650: 77 69 74 68 0a 20 2a 09 74 68 65 20 6e 65 78 74  with. *.the next
2660: 20 73 65 67 6d 65 6e 74 20 77 68 6f 73 65 20 61   segment whose a
2670: 66 74 65 72 20 74 68 65 20 6d 61 72 6b 20 77 68  fter the mark wh
2680: 6f 73 65 20 73 69 7a 65 20 69 73 0a 20 2a 09 6e  ose size is. *.n
2690: 6f 6e 2d 7a 65 72 6f 2e 20 20 54 43 4c 5f 45 52  on-zero.  TCL_ER
26a0: 52 4f 52 20 69 73 20 72 65 74 75 72 6e 65 64 20  ROR is returned 
26b0: 69 66 20 74 68 65 20 6d 61 72 6b 20 64 6f 65 73  if the mark does
26c0: 6e 27 74 20 65 78 69 73 74 0a 20 2a 09 69 6e 20  n't exist. *.in 
26d0: 74 68 65 20 74 65 78 74 20 77 69 64 67 65 74 2e  the text widget.
26e0: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65  . *. * Side effe
26f0: 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a  cts:. *.None.. *
2700: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
2710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2740: 2d 0a 20 2a 2f 0a 0a 69 6e 74 0a 54 6b 54 65 78  -. */..int.TkTex
2750: 74 4d 61 72 6b 4e 61 6d 65 54 6f 49 6e 64 65 78  tMarkNameToIndex
2760: 28 74 65 78 74 50 74 72 2c 20 6e 61 6d 65 2c 20  (textPtr, name, 
2770: 69 6e 64 65 78 50 74 72 29 0a 20 20 20 20 54 6b  indexPtr).    Tk
2780: 54 65 78 74 20 2a 74 65 78 74 50 74 72 3b 09 09  Text *textPtr;..
2790: 2f 2a 20 54 65 78 74 20 77 69 64 67 65 74 20 63  /* Text widget c
27a0: 6f 6e 74 61 69 6e 69 6e 67 20 6d 61 72 6b 2e 20  ontaining mark. 
27b0: 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 6e 61 6d  */.    char *nam
27c0: 65 3b 09 09 09 2f 2a 20 4e 61 6d 65 20 6f 66 20  e;.../* Name of 
27d0: 6d 61 72 6b 2e 20 2a 2f 0a 20 20 20 20 54 6b 54  mark. */.    TkT
27e0: 65 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78 50  extIndex *indexP
27f0: 74 72 3b 09 2f 2a 20 49 6e 64 65 78 20 69 6e 66  tr;./* Index inf
2800: 6f 72 6d 61 74 69 6f 6e 20 67 65 74 73 20 73 74  ormation gets st
2810: 6f 72 65 64 20 68 65 72 65 2e 20 2a 2f 0a 7b 0a  ored here. */.{.
2820: 20 20 20 20 54 63 6c 5f 48 61 73 68 45 6e 74 72      Tcl_HashEntr
2830: 79 20 2a 68 50 74 72 3b 0a 0a 20 20 20 20 68 50  y *hPtr;..    hP
2840: 74 72 20 3d 20 54 63 6c 5f 46 69 6e 64 48 61 73  tr = Tcl_FindHas
2850: 68 45 6e 74 72 79 28 26 74 65 78 74 50 74 72 2d  hEntry(&textPtr-
2860: 3e 6d 61 72 6b 54 61 62 6c 65 2c 20 6e 61 6d 65  >markTable, name
2870: 29 3b 0a 20 20 20 20 69 66 20 28 68 50 74 72 20  );.    if (hPtr 
2880: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 65 74 75  == NULL) {..retu
2890: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
28a0: 20 20 7d 0a 20 20 20 20 54 6b 54 65 78 74 4d 61    }.    TkTextMa
28b0: 72 6b 53 65 67 54 6f 49 6e 64 65 78 28 74 65 78  rkSegToIndex(tex
28c0: 74 50 74 72 2c 20 28 54 6b 54 65 78 74 53 65 67  tPtr, (TkTextSeg
28d0: 6d 65 6e 74 20 2a 29 20 54 63 6c 5f 47 65 74 48  ment *) Tcl_GetH
28e0: 61 73 68 56 61 6c 75 65 28 68 50 74 72 29 2c 0a  ashValue(hPtr),.
28f0: 09 20 20 20 20 69 6e 64 65 78 50 74 72 29 3b 0a  .    indexPtr);.
2900: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f      return TCL_O
2910: 4b 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d  K;.}.../*. *----
2920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a  ----------. *. *
2960: 20 4d 61 72 6b 44 65 6c 65 74 65 50 72 6f 63 20   MarkDeleteProc 
2970: 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72  --. *. *.This pr
2980: 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f 6b  ocedure is invok
2990: 65 64 20 62 79 20 74 68 65 20 74 65 78 74 20 42  ed by the text B
29a0: 2d 74 72 65 65 20 63 6f 64 65 20 77 68 65 6e 65  -tree code whene
29b0: 76 65 72 0a 20 2a 09 61 20 6d 61 72 6b 20 6c 69  ver. *.a mark li
29c0: 65 73 20 69 6e 20 61 20 72 61 6e 67 65 20 6f 66  es in a range of
29d0: 20 63 68 61 72 61 63 74 65 72 73 20 62 65 69 6e   characters bein
29e0: 67 20 64 65 6c 65 74 65 64 2e 0a 20 2a 0a 20 2a  g deleted.. *. *
29f0: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 52 65 74   Results:. *.Ret
2a00: 75 72 6e 73 20 31 20 74 6f 20 69 6e 64 69 63 61  urns 1 to indica
2a10: 74 65 20 74 68 61 74 20 64 65 6c 65 74 69 6f 6e  te that deletion
2a20: 20 68 61 73 20 62 65 65 6e 20 72 65 6a 65 63 74   has been reject
2a30: 65 64 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65  ed.. *. * Side e
2a40: 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 20  ffects:. *.None 
2a50: 28 65 76 65 6e 20 69 66 20 74 68 65 20 77 68 6f  (even if the who
2a60: 6c 65 20 74 72 65 65 20 69 73 20 62 65 69 6e 67  le tree is being
2a70: 20 64 65 6c 65 74 65 64 20 77 65 20 64 6f 6e 27   deleted we don'
2a80: 74 0a 20 2a 09 66 72 65 65 20 75 70 20 74 68 65  t. *.free up the
2a90: 20 6d 61 72 6b 3b 20 20 69 74 20 77 69 6c 6c 20   mark;  it will 
2aa0: 62 65 20 64 6f 6e 65 20 65 6c 73 65 77 68 65 72  be done elsewher
2ab0: 65 29 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  e).. *. *-------
2ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2af0: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 09 2f 2a  -------. */.../*
2b00: 20 41 52 47 53 55 53 45 44 20 2a 2f 0a 73 74 61   ARGSUSED */.sta
2b10: 74 69 63 20 69 6e 74 0a 4d 61 72 6b 44 65 6c 65  tic int.MarkDele
2b20: 74 65 50 72 6f 63 28 73 65 67 50 74 72 2c 20 6c  teProc(segPtr, l
2b30: 69 6e 65 50 74 72 2c 20 74 72 65 65 47 6f 6e 65  inePtr, treeGone
2b40: 29 0a 20 20 20 20 54 6b 54 65 78 74 53 65 67 6d  ).    TkTextSegm
2b50: 65 6e 74 20 2a 73 65 67 50 74 72 3b 09 09 2f 2a  ent *segPtr;../*
2b60: 20 53 65 67 6d 65 6e 74 20 62 65 69 6e 67 20 64   Segment being d
2b70: 65 6c 65 74 65 64 2e 20 2a 2f 0a 20 20 20 20 54  eleted. */.    T
2b80: 6b 54 65 78 74 4c 69 6e 65 20 2a 6c 69 6e 65 50  kTextLine *lineP
2b90: 74 72 3b 09 09 2f 2a 20 4c 69 6e 65 20 63 6f 6e  tr;../* Line con
2ba0: 74 61 69 6e 69 6e 67 20 73 65 67 6d 65 6e 74 2e  taining segment.
2bb0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 74 72 65 65   */.    int tree
2bc0: 47 6f 6e 65 3b 09 09 09 2f 2a 20 4e 6f 6e 2d 7a  Gone;.../* Non-z
2bd0: 65 72 6f 20 6d 65 61 6e 73 20 74 68 65 20 65 6e  ero means the en
2be0: 74 69 72 65 20 74 72 65 65 20 69 73 0a 09 09 09  tire tree is....
2bf0: 09 09 20 2a 20 62 65 69 6e 67 20 64 65 6c 65 74  .. * being delet
2c00: 65 64 2c 20 73 6f 20 65 76 65 72 79 74 68 69 6e  ed, so everythin
2c10: 67 20 6d 75 73 74 0a 09 09 09 09 09 20 2a 20 67  g must...... * g
2c20: 65 74 20 63 6c 65 61 6e 65 64 20 75 70 2e 20 2a  et cleaned up. *
2c30: 2f 0a 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31  /.{.    return 1
2c40: 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d  ;.}.../*. *-----
2c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20  ---------. *. * 
2c90: 4d 61 72 6b 43 6c 65 61 6e 75 70 50 72 6f 63 20  MarkCleanupProc 
2ca0: 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72  --. *. *.This pr
2cb0: 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76 6f 6b  ocedure is invok
2cc0: 65 64 20 62 79 20 74 68 65 20 42 2d 74 72 65 65  ed by the B-tree
2cd0: 20 63 6f 64 65 20 77 68 65 6e 65 76 65 72 20 61   code whenever a
2ce0: 0a 20 2a 09 6d 61 72 6b 20 73 65 67 6d 65 6e 74  . *.mark segment
2cf0: 20 69 73 20 6d 6f 76 65 64 20 66 72 6f 6d 20 6f   is moved from o
2d00: 6e 65 20 6c 69 6e 65 20 74 6f 20 61 6e 6f 74 68  ne line to anoth
2d10: 65 72 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74  er.. *. * Result
2d20: 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20  s:. *.None.. *. 
2d30: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
2d40: 20 2a 09 54 68 65 20 6c 69 6e 65 50 74 72 20 66   *.The linePtr f
2d50: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 65 67 6d  ield of the segm
2d60: 65 6e 74 20 67 65 74 73 20 75 70 64 61 74 65 64  ent gets updated
2d70: 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  .. *. *---------
2d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2db0: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74 69  -----. */..stati
2dc0: 63 20 54 6b 54 65 78 74 53 65 67 6d 65 6e 74 20  c TkTextSegment 
2dd0: 2a 0a 4d 61 72 6b 43 6c 65 61 6e 75 70 50 72 6f  *.MarkCleanupPro
2de0: 63 28 6d 61 72 6b 50 74 72 2c 20 6c 69 6e 65 50  c(markPtr, lineP
2df0: 74 72 29 0a 20 20 20 20 54 6b 54 65 78 74 53 65  tr).    TkTextSe
2e00: 67 6d 65 6e 74 20 2a 6d 61 72 6b 50 74 72 3b 09  gment *markPtr;.
2e10: 09 2f 2a 20 4d 61 72 6b 20 73 65 67 6d 65 6e 74  ./* Mark segment
2e20: 20 74 68 61 74 27 73 20 62 65 69 6e 67 20 6d 6f   that's being mo
2e30: 76 65 64 2e 20 2a 2f 0a 20 20 20 20 54 6b 54 65  ved. */.    TkTe
2e40: 78 74 4c 69 6e 65 20 2a 6c 69 6e 65 50 74 72 3b  xtLine *linePtr;
2e50: 09 09 2f 2a 20 4c 69 6e 65 20 74 68 61 74 20 6e  ../* Line that n
2e60: 6f 77 20 63 6f 6e 74 61 69 6e 73 20 73 65 67 6d  ow contains segm
2e70: 65 6e 74 2e 20 2a 2f 0a 7b 0a 20 20 20 20 6d 61  ent. */.{.    ma
2e80: 72 6b 50 74 72 2d 3e 62 6f 64 79 2e 6d 61 72 6b  rkPtr->body.mark
2e90: 2e 6c 69 6e 65 50 74 72 20 3d 20 6c 69 6e 65 50  .linePtr = lineP
2ea0: 74 72 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 6d  tr;.    return m
2eb0: 61 72 6b 50 74 72 3b 0a 7d 0a 0c 0a 2f 2a 0a 20  arkPtr;.}.../*. 
2ec0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
2ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
2f00: 20 2a 0a 20 2a 20 4d 61 72 6b 4c 61 79 6f 75 74   *. * MarkLayout
2f10: 50 72 6f 63 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68  Proc --. *. *.Th
2f20: 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  is procedure is 
2f30: 74 68 65 20 22 6c 61 79 6f 75 74 50 72 6f 63 22  the "layoutProc"
2f40: 20 66 6f 72 20 6d 61 72 6b 20 73 65 67 6d 65 6e   for mark segmen
2f50: 74 73 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74  ts.. *. * Result
2f60: 73 3a 0a 20 2a 09 49 66 20 74 68 65 20 6d 61 72  s:. *.If the mar
2f70: 6b 20 69 73 6e 27 74 20 74 68 65 20 69 6e 73 65  k isn't the inse
2f80: 72 74 69 6f 6e 20 63 75 72 73 6f 72 20 74 68 65  rtion cursor the
2f90: 6e 20 74 68 65 20 72 65 74 75 72 6e 0a 20 2a 09  n the return. *.
2fa0: 76 61 6c 75 65 20 69 73 20 2d 31 20 74 6f 20 69  value is -1 to i
2fb0: 6e 64 69 63 61 74 65 20 74 68 61 74 20 74 68 69  ndicate that thi
2fc0: 73 20 73 65 67 6d 65 6e 74 20 73 68 6f 75 6c 64  s segment should
2fd0: 6e 27 74 20 62 65 0a 20 2a 09 64 69 73 70 6c 61  n't be. *.displa
2fe0: 79 65 64 2e 20 20 49 66 20 74 68 65 20 6d 61 72  yed.  If the mar
2ff0: 6b 20 69 73 20 74 68 65 20 69 6e 73 65 72 74 69  k is the inserti
3000: 6f 6e 20 63 68 61 72 61 63 74 65 72 20 74 68 65  on character the
3010: 6e 0a 20 2a 09 31 20 69 73 20 72 65 74 75 72 6e  n. *.1 is return
3020: 65 64 20 61 6e 64 20 74 68 65 20 63 68 75 6e 6b  ed and the chunk
3030: 50 74 72 20 73 74 72 75 63 74 75 72 65 20 69 73  Ptr structure is
3040: 20 66 69 6c 6c 65 64 20 69 6e 2e 0a 20 2a 0a 20   filled in.. *. 
3050: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
3060: 20 2a 09 4e 6f 6e 65 2c 20 65 78 63 65 70 74 20   *.None, except 
3070: 66 6f 72 20 66 69 6c 6c 69 6e 67 20 69 6e 20 63  for filling in c
3080: 68 75 6e 6b 50 74 72 2e 0a 20 2a 0a 20 2a 2d 2d  hunkPtr.. *. *--
3090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f  ------------. */
30d0: 0a 0a 09 2f 2a 41 52 47 53 55 53 45 44 2a 2f 0a  .../*ARGSUSED*/.
30e0: 73 74 61 74 69 63 20 69 6e 74 0a 4d 61 72 6b 4c  static int.MarkL
30f0: 61 79 6f 75 74 50 72 6f 63 28 74 65 78 74 50 74  ayoutProc(textPt
3100: 72 2c 20 69 6e 64 65 78 50 74 72 2c 20 73 65 67  r, indexPtr, seg
3110: 50 74 72 2c 20 6f 66 66 73 65 74 2c 20 6d 61 78  Ptr, offset, max
3120: 58 2c 20 6d 61 78 43 68 61 72 73 2c 0a 09 6e 6f  X, maxChars,..no
3130: 43 68 61 72 73 59 65 74 2c 20 77 72 61 70 4d 6f  CharsYet, wrapMo
3140: 64 65 2c 20 63 68 75 6e 6b 50 74 72 29 0a 20 20  de, chunkPtr).  
3150: 20 20 54 6b 54 65 78 74 20 2a 74 65 78 74 50 74    TkText *textPt
3160: 72 3b 09 09 2f 2a 20 54 65 78 74 20 77 69 64 67  r;../* Text widg
3170: 65 74 20 62 65 69 6e 67 20 6c 61 79 65 64 20 6f  et being layed o
3180: 75 74 2e 20 2a 2f 0a 20 20 20 20 54 6b 54 65 78  ut. */.    TkTex
3190: 74 49 6e 64 65 78 20 2a 69 6e 64 65 78 50 74 72  tIndex *indexPtr
31a0: 3b 09 2f 2a 20 49 64 65 6e 74 69 66 69 65 73 20  ;./* Identifies 
31b0: 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20  first character 
31c0: 69 6e 20 63 68 75 6e 6b 2e 20 2a 2f 0a 20 20 20  in chunk. */.   
31d0: 20 54 6b 54 65 78 74 53 65 67 6d 65 6e 74 20 2a   TkTextSegment *
31e0: 73 65 67 50 74 72 3b 09 2f 2a 20 53 65 67 6d 65  segPtr;./* Segme
31f0: 6e 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  nt corresponding
3200: 20 74 6f 20 69 6e 64 65 78 50 74 72 2e 20 2a 2f   to indexPtr. */
3210: 0a 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 3b  .    int offset;
3220: 09 09 09 2f 2a 20 4f 66 66 73 65 74 20 77 69 74  .../* Offset wit
3230: 68 69 6e 20 73 65 67 50 74 72 20 63 6f 72 72 65  hin segPtr corre
3240: 73 70 6f 6e 64 69 6e 67 20 74 6f 0a 09 09 09 09  sponding to.....
3250: 20 2a 20 69 6e 64 65 78 50 74 72 20 28 61 6c 77   * indexPtr (alw
3260: 61 79 73 20 30 29 2e 20 2a 2f 0a 20 20 20 20 69  ays 0). */.    i
3270: 6e 74 20 6d 61 78 58 3b 09 09 09 2f 2a 20 43 68  nt maxX;.../* Ch
3280: 75 6e 6b 20 6d 75 73 74 20 6e 6f 74 20 6f 63 63  unk must not occ
3290: 75 70 79 20 70 69 78 65 6c 73 20 61 74 20 74 68  upy pixels at th
32a0: 69 73 0a 09 09 09 09 20 2a 20 70 6f 73 69 74 69  is..... * positi
32b0: 6f 6e 20 6f 72 20 68 69 67 68 65 72 2e 20 2a 2f  on or higher. */
32c0: 0a 20 20 20 20 69 6e 74 20 6d 61 78 43 68 61 72  .    int maxChar
32d0: 73 3b 09 09 2f 2a 20 43 68 75 6e 6b 20 6d 75 73  s;../* Chunk mus
32e0: 74 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 6d 6f  t not include mo
32f0: 72 65 20 74 68 61 6e 20 74 68 69 73 0a 09 09 09  re than this....
3300: 09 20 2a 20 6d 61 6e 79 20 63 68 61 72 61 63 74  . * many charact
3310: 65 72 73 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ers. */.    int 
3320: 6e 6f 43 68 61 72 73 59 65 74 3b 09 09 2f 2a 20  noCharsYet;../* 
3330: 4e 6f 6e 2d 7a 65 72 6f 20 6d 65 61 6e 73 20 6e  Non-zero means n
3340: 6f 20 63 68 61 72 61 63 74 65 72 73 20 68 61 76  o characters hav
3350: 65 20 62 65 65 6e 0a 09 09 09 09 20 2a 20 61 73  e been..... * as
3360: 73 69 67 6e 65 64 20 74 6f 20 74 68 69 73 20 6c  signed to this l
3370: 69 6e 65 20 79 65 74 2e 20 2a 2f 0a 20 20 20 20  ine yet. */.    
3380: 54 6b 5f 55 69 64 20 77 72 61 70 4d 6f 64 65 3b  Tk_Uid wrapMode;
3390: 09 09 2f 2a 20 4e 6f 74 20 75 73 65 64 2e 20 2a  ../* Not used. *
33a0: 2f 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 54  /.    register T
33b0: 6b 54 65 78 74 44 69 73 70 43 68 75 6e 6b 20 2a  kTextDispChunk *
33c0: 63 68 75 6e 6b 50 74 72 3b 0a 09 09 09 09 2f 2a  chunkPtr;...../*
33d0: 20 53 74 72 75 63 74 75 72 65 20 74 6f 20 66 69   Structure to fi
33e0: 6c 6c 20 69 6e 20 77 69 74 68 20 69 6e 66 6f 72  ll in with infor
33f0: 6d 61 74 69 6f 6e 0a 09 09 09 09 20 2a 20 61 62  mation..... * ab
3400: 6f 75 74 20 74 68 69 73 20 63 68 75 6e 6b 2e 20  out this chunk. 
3410: 20 54 68 65 20 78 20 66 69 65 6c 64 20 68 61 73   The x field has
3420: 20 61 6c 72 65 61 64 79 0a 09 09 09 09 20 2a 20   already..... * 
3430: 62 65 65 6e 20 73 65 74 20 62 79 20 74 68 65 20  been set by the 
3440: 63 61 6c 6c 65 72 2e 20 2a 2f 0a 7b 0a 20 20 20  caller. */.{.   
3450: 20 69 66 20 28 73 65 67 50 74 72 20 21 3d 20 74   if (segPtr != t
3460: 65 78 74 50 74 72 2d 3e 69 6e 73 65 72 74 4d 61  extPtr->insertMa
3470: 72 6b 50 74 72 29 20 7b 0a 09 72 65 74 75 72 6e  rkPtr) {..return
3480: 20 2d 31 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   -1;.    }..    
3490: 63 68 75 6e 6b 50 74 72 2d 3e 64 69 73 70 6c 61  chunkPtr->displa
34a0: 79 50 72 6f 63 20 3d 20 49 6e 73 65 72 74 44 69  yProc = InsertDi
34b0: 73 70 6c 61 79 50 72 6f 63 3b 0a 20 20 20 20 63  splayProc;.    c
34c0: 68 75 6e 6b 50 74 72 2d 3e 75 6e 64 69 73 70 6c  hunkPtr->undispl
34d0: 61 79 50 72 6f 63 20 3d 20 49 6e 73 65 72 74 55  ayProc = InsertU
34e0: 6e 64 69 73 70 6c 61 79 50 72 6f 63 3b 0a 20 20  ndisplayProc;.  
34f0: 20 20 63 68 75 6e 6b 50 74 72 2d 3e 6d 65 61 73    chunkPtr->meas
3500: 75 72 65 50 72 6f 63 20 3d 20 28 54 6b 5f 43 68  ureProc = (Tk_Ch
3510: 75 6e 6b 4d 65 61 73 75 72 65 50 72 6f 63 20 2a  unkMeasureProc *
3520: 29 20 4e 55 4c 4c 3b 0a 20 20 20 20 63 68 75 6e  ) NULL;.    chun
3530: 6b 50 74 72 2d 3e 62 62 6f 78 50 72 6f 63 20 3d  kPtr->bboxProc =
3540: 20 28 54 6b 5f 43 68 75 6e 6b 42 62 6f 78 50 72   (Tk_ChunkBboxPr
3550: 6f 63 20 2a 29 20 4e 55 4c 4c 3b 0a 20 20 20 20  oc *) NULL;.    
3560: 63 68 75 6e 6b 50 74 72 2d 3e 6e 75 6d 43 68 61  chunkPtr->numCha
3570: 72 73 20 3d 20 30 3b 0a 20 20 20 20 63 68 75 6e  rs = 0;.    chun
3580: 6b 50 74 72 2d 3e 6d 69 6e 48 65 69 67 68 74 20  kPtr->minHeight 
3590: 3d 20 30 3b 0a 20 20 20 20 63 68 75 6e 6b 50 74  = 0;.    chunkPt
35a0: 72 2d 3e 77 69 64 74 68 20 3d 20 30 3b 0a 0a 20  r->width = 0;.. 
35b0: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 4e 6f 74     /*.     * Not
35c0: 65 3a 20 63 61 6e 27 74 20 62 72 65 61 6b 20 61  e: can't break a
35d0: 20 6c 69 6e 65 20 61 66 74 65 72 20 74 68 65 20   line after the 
35e0: 69 6e 73 65 72 74 69 6f 6e 20 63 75 72 73 6f 72  insertion cursor
35f0: 3a 20 20 74 68 69 73 0a 20 20 20 20 20 2a 20 70  :  this.     * p
3600: 72 65 76 65 6e 74 73 20 74 68 65 20 69 6e 73 65  revents the inse
3610: 72 74 69 6f 6e 20 63 75 72 73 6f 72 20 66 72 6f  rtion cursor fro
3620: 6d 20 62 65 69 6e 67 20 73 74 72 61 6e 64 65 64  m being stranded
3630: 20 61 74 20 74 68 65 20 65 6e 64 0a 20 20 20 20   at the end.    
3640: 20 2a 20 6f 66 20 61 20 6c 69 6e 65 2e 0a 20 20   * of a line..  
3650: 20 20 20 2a 2f 0a 0a 20 20 20 20 63 68 75 6e 6b     */..    chunk
3660: 50 74 72 2d 3e 62 72 65 61 6b 49 6e 64 65 78 20  Ptr->breakIndex 
3670: 3d 20 2d 31 3b 0a 20 20 20 20 63 68 75 6e 6b 50  = -1;.    chunkP
3680: 74 72 2d 3e 63 6c 69 65 6e 74 44 61 74 61 20 3d  tr->clientData =
3690: 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20 74 65   (ClientData) te
36a0: 78 74 50 74 72 3b 0a 20 20 20 20 72 65 74 75 72  xtPtr;.    retur
36b0: 6e 20 31 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d  n 1;.}.../*. *--
36c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
36d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
36e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
36f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a  ------------. *.
3700: 20 2a 20 49 6e 73 65 72 74 44 69 73 70 6c 61 79   * InsertDisplay
3710: 50 72 6f 63 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68  Proc --. *. *.Th
3720: 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  is procedure is 
3730: 63 61 6c 6c 65 64 20 74 6f 20 64 69 73 70 6c 61  called to displa
3740: 79 20 74 68 65 20 69 6e 73 65 72 74 69 6f 6e 0a  y the insertion.
3750: 20 2a 09 63 75 72 73 6f 72 2e 0a 20 2a 0a 20 2a   *.cursor.. *. *
3760: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e   Results:. *.Non
3770: 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66  e.. *. * Side ef
3780: 66 65 63 74 73 3a 0a 20 2a 09 47 72 61 70 68 69  fects:. *.Graphi
3790: 63 73 20 61 72 65 20 64 72 61 77 6e 2e 0a 20 2a  cs are drawn.. *
37a0: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  . *-------------
37b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
37c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
37d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
37e0: 2d 0a 20 2a 2f 0a 0a 09 2f 2a 20 41 52 47 53 55  -. */.../* ARGSU
37f0: 53 45 44 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f  SED */.static vo
3800: 69 64 0a 49 6e 73 65 72 74 44 69 73 70 6c 61 79  id.InsertDisplay
3810: 50 72 6f 63 28 63 68 75 6e 6b 50 74 72 2c 20 78  Proc(chunkPtr, x
3820: 2c 20 79 2c 20 77 69 6e 29 0a 20 20 20 20 54 6b  , y, win).    Tk
3830: 54 65 78 74 44 69 73 70 43 68 75 6e 6b 20 2a 63  TextDispChunk *c
3840: 68 75 6e 6b 50 74 72 3b 09 09 2f 2a 20 43 68 75  hunkPtr;../* Chu
3850: 6e 6b 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  nk that is to be
3860: 20 64 72 61 77 6e 2e 20 2a 2f 0a 20 20 20 20 69   drawn. */.    i
3870: 6e 74 20 78 3b 09 09 09 09 2f 2a 20 58 2d 70 6f  nt x;..../* X-po
3880: 73 69 74 69 6f 6e 20 69 6e 20 64 73 74 20 61 74  sition in dst at
3890: 20 77 68 69 63 68 20 74 6f 0a 09 09 09 09 09 20   which to...... 
38a0: 2a 20 64 72 61 77 20 74 68 69 73 20 63 68 75 6e  * draw this chun
38b0: 6b 20 28 6d 61 79 20 64 69 66 66 65 72 20 66 72  k (may differ fr
38c0: 6f 6d 0a 09 09 09 09 09 20 2a 20 74 68 65 20 78  om...... * the x
38d0: 2d 70 6f 73 69 74 69 6f 6e 20 69 6e 20 74 68 65  -position in the
38e0: 20 63 68 75 6e 6b 20 62 65 63 61 75 73 65 0a 09   chunk because..
38f0: 09 09 09 09 20 2a 20 6f 66 20 73 63 72 6f 6c 6c  .... * of scroll
3900: 69 6e 67 29 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  ing). */.    int
3910: 20 79 3b 09 09 09 09 2f 2a 20 59 2d 70 6f 73 69   y;..../* Y-posi
3920: 74 69 6f 6e 20 61 74 20 77 68 69 63 68 20 74 6f  tion at which to
3930: 20 64 72 61 77 20 74 68 69 73 0a 09 09 09 09 09   draw this......
3940: 20 2a 20 63 68 75 6e 6b 20 69 6e 20 64 73 74 20   * chunk in dst 
3950: 28 78 2d 70 6f 73 69 74 69 6f 6e 20 69 73 20 69  (x-position is i
3960: 6e 0a 09 09 09 09 09 20 2a 20 74 68 65 20 63 68  n...... * the ch
3970: 75 6e 6b 20 69 74 73 65 6c 66 29 2e 20 2a 2f 0a  unk itself). */.
3980: 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77 20 77 69      Tk_Window wi
3990: 6e 3b 09 09 09 2f 2a 20 57 69 6e 64 6f 77 20 69  n;.../* Window i
39a0: 6e 20 77 68 69 63 68 20 74 6f 20 64 72 61 77 20  n which to draw 
39b0: 63 68 75 6e 6b 2e 20 2a 2f 0a 7b 0a 20 20 20 20  chunk. */.{.    
39c0: 54 6b 54 65 78 74 20 2a 74 65 78 74 50 74 72 20  TkText *textPtr 
39d0: 3d 20 28 54 6b 54 65 78 74 20 2a 29 20 63 68 75  = (TkText *) chu
39e0: 6e 6b 50 74 72 2d 3e 63 6c 69 65 6e 74 44 61 74  nkPtr->clientDat
39f0: 61 3b 0a 20 20 20 20 69 66 20 28 74 65 78 74 50  a;.    if (textP
3a00: 74 72 2d 3e 66 6c 61 67 73 20 26 20 47 4f 54 5f  tr->flags & GOT_
3a10: 46 4f 43 55 53 29 20 7b 0a 20 20 20 20 09 43 74  FOCUS) {.    .Ct
3a20: 6b 5f 53 65 74 43 75 72 73 6f 72 28 77 69 6e 2c  k_SetCursor(win,
3a30: 20 78 2c 20 79 29 3b 0a 20 20 20 20 7d 0a 7d 0a   x, y);.    }.}.
3a40: 0c 0a 2f 2a 0a 20 2a 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 2d  ----------------
3a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a80: 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 49 6e 73 65  -----. *. * Inse
3a90: 72 74 55 6e 64 69 73 70 6c 61 79 50 72 6f 63 20  rtUndisplayProc 
3aa0: 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72  --. *. *.This pr
3ab0: 6f 63 65 64 75 72 65 20 69 73 20 63 61 6c 6c 65  ocedure is calle
3ac0: 64 20 77 68 65 6e 20 74 68 65 20 69 6e 73 65 72  d when the inser
3ad0: 74 69 6f 6e 20 63 75 72 73 6f 72 20 69 73 20 6e  tion cursor is n
3ae0: 6f 0a 20 2a 09 6c 6f 6e 67 65 72 20 61 74 20 61  o. *.longer at a
3af0: 20 76 69 73 69 62 6c 65 20 70 6f 69 6e 74 20 6f   visible point o
3b00: 6e 20 74 68 65 20 64 69 73 70 6c 61 79 2e 20 20  n the display.  
3b10: 49 74 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 0a  It does nothing.
3b20: 20 2a 09 72 69 67 68 74 20 6e 6f 77 2e 0a 20 2a   *.right now.. *
3b30: 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09  . * Results:. *.
3b40: 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 20 53 69 64 65  None.. *. * Side
3b50: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e   effects:. *.Non
3b60: 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  e.. *. *--------
3b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3ba0: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 09 2f 2a 20  ------. */.../* 
3bb0: 41 52 47 53 55 53 45 44 20 2a 2f 0a 73 74 61 74  ARGSUSED */.stat
3bc0: 69 63 20 76 6f 69 64 0a 49 6e 73 65 72 74 55 6e  ic void.InsertUn
3bd0: 64 69 73 70 6c 61 79 50 72 6f 63 28 74 65 78 74  displayProc(text
3be0: 50 74 72 2c 20 63 68 75 6e 6b 50 74 72 29 0a 20  Ptr, chunkPtr). 
3bf0: 20 20 20 54 6b 54 65 78 74 20 2a 74 65 78 74 50     TkText *textP
3c00: 74 72 3b 09 09 09 2f 2a 20 4f 76 65 72 61 6c 6c  tr;.../* Overall
3c10: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
3c20: 75 74 20 74 65 78 74 0a 09 09 09 09 09 20 2a 20  ut text...... * 
3c30: 77 69 64 67 65 74 2e 20 2a 2f 0a 20 20 20 20 54  widget. */.    T
3c40: 6b 54 65 78 74 44 69 73 70 43 68 75 6e 6b 20 2a  kTextDispChunk *
3c50: 63 68 75 6e 6b 50 74 72 3b 09 09 2f 2a 20 43 68  chunkPtr;../* Ch
3c60: 75 6e 6b 20 74 68 61 74 20 69 73 20 61 62 6f 75  unk that is abou
3c70: 74 20 74 6f 20 62 65 20 66 72 65 65 64 2e 20 2a  t to be freed. *
3c80: 2f 0a 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a  /.{.    return;.
3c90: 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d  }.../*. *-------
3ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3cd0: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 4d 61  -------. *. * Ma
3ce0: 72 6b 43 68 65 63 6b 50 72 6f 63 20 2d 2d 0a 20  rkCheckProc --. 
3cf0: 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64  *. *.This proced
3d00: 75 72 65 20 69 73 20 69 6e 76 6f 6b 65 64 20 62  ure is invoked b
3d10: 79 20 74 68 65 20 42 2d 74 72 65 65 20 63 6f 64  y the B-tree cod
3d20: 65 20 74 6f 20 70 65 72 66 6f 72 6d 0a 20 2a 09  e to perform. *.
3d30: 63 6f 6e 73 69 73 74 65 6e 63 79 20 63 68 65 63  consistency chec
3d40: 6b 73 20 6f 6e 20 6d 61 72 6b 20 73 65 67 6d 65  ks on mark segme
3d50: 6e 74 73 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c  nts.. *. * Resul
3d60: 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a  ts:. *.None.. *.
3d70: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
3d80: 0a 20 2a 09 54 68 65 20 70 72 6f 63 65 64 75 72  . *.The procedur
3d90: 65 20 70 61 6e 69 63 73 20 69 66 20 69 74 20 64  e panics if it d
3da0: 65 74 65 63 74 73 20 61 6e 79 74 68 69 6e 67 20  etects anything 
3db0: 77 72 6f 6e 67 20 77 69 74 68 0a 20 2a 09 74 68  wrong with. *.th
3dc0: 65 20 6d 61 72 6b 2e 0a 20 2a 0a 20 2a 2d 2d 2d  e mark.. *. *---
3dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a  -----------. */.
3e10: 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 4d 61 72  .static void.Mar
3e20: 6b 43 68 65 63 6b 50 72 6f 63 28 6d 61 72 6b 50  kCheckProc(markP
3e30: 74 72 2c 20 6c 69 6e 65 50 74 72 29 0a 20 20 20  tr, linePtr).   
3e40: 20 54 6b 54 65 78 74 53 65 67 6d 65 6e 74 20 2a   TkTextSegment *
3e50: 6d 61 72 6b 50 74 72 3b 09 09 2f 2a 20 53 65 67  markPtr;../* Seg
3e60: 6d 65 6e 74 20 74 6f 20 63 68 65 63 6b 2e 20 2a  ment to check. *
3e70: 2f 0a 20 20 20 20 54 6b 54 65 78 74 4c 69 6e 65  /.    TkTextLine
3e80: 20 2a 6c 69 6e 65 50 74 72 3b 09 09 2f 2a 20 4c   *linePtr;../* L
3e90: 69 6e 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 73  ine containing s
3ea0: 65 67 6d 65 6e 74 2e 20 2a 2f 0a 7b 0a 20 20 20  egment. */.{.   
3eb0: 20 54 63 6c 5f 48 61 73 68 53 65 61 72 63 68 20   Tcl_HashSearch 
3ec0: 73 65 61 72 63 68 3b 0a 20 20 20 20 54 63 6c 5f  search;.    Tcl_
3ed0: 48 61 73 68 45 6e 74 72 79 20 2a 68 50 74 72 3b  HashEntry *hPtr;
3ee0: 0a 0a 20 20 20 20 69 66 20 28 6d 61 72 6b 50 74  ..    if (markPt
3ef0: 72 2d 3e 62 6f 64 79 2e 6d 61 72 6b 2e 6c 69 6e  r->body.mark.lin
3f00: 65 50 74 72 20 21 3d 20 6c 69 6e 65 50 74 72 29  ePtr != linePtr)
3f10: 20 7b 0a 09 70 61 6e 69 63 28 22 4d 61 72 6b 43   {..panic("MarkC
3f20: 68 65 63 6b 50 72 6f 63 3a 20 6d 61 72 6b 50 74  heckProc: markPt
3f30: 72 2d 3e 62 6f 64 79 2e 6d 61 72 6b 2e 6c 69 6e  r->body.mark.lin
3f40: 65 50 74 72 20 62 6f 67 75 73 22 29 3b 0a 20 20  ePtr bogus");.  
3f50: 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20    }..    /*.    
3f60: 20 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61   * Make sure tha
3f70: 74 20 74 68 65 20 6d 61 72 6b 20 69 73 20 73 74  t the mark is st
3f80: 69 6c 6c 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ill present in t
3f90: 68 65 20 74 65 78 74 27 73 20 6d 61 72 6b 0a 20  he text's mark. 
3fa0: 20 20 20 20 2a 20 68 61 73 68 20 74 61 62 6c 65      * hash table
3fb0: 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 66  ..     */..    f
3fc0: 6f 72 20 28 68 50 74 72 20 3d 20 54 63 6c 5f 46  or (hPtr = Tcl_F
3fd0: 69 72 73 74 48 61 73 68 45 6e 74 72 79 28 26 6d  irstHashEntry(&m
3fe0: 61 72 6b 50 74 72 2d 3e 62 6f 64 79 2e 6d 61 72  arkPtr->body.mar
3ff0: 6b 2e 74 65 78 74 50 74 72 2d 3e 6d 61 72 6b 54  k.textPtr->markT
4000: 61 62 6c 65 2c 0a 09 20 20 20 20 26 73 65 61 72  able,..    &sear
4010: 63 68 29 3b 20 68 50 74 72 20 21 3d 20 6d 61 72  ch); hPtr != mar
4020: 6b 50 74 72 2d 3e 62 6f 64 79 2e 6d 61 72 6b 2e  kPtr->body.mark.
4030: 68 50 74 72 3b 0a 09 20 20 20 20 68 50 74 72 20  hPtr;..    hPtr 
4040: 3d 20 54 63 6c 5f 4e 65 78 74 48 61 73 68 45 6e  = Tcl_NextHashEn
4050: 74 72 79 28 26 73 65 61 72 63 68 29 29 20 7b 0a  try(&search)) {.
4060: 09 69 66 20 28 68 50 74 72 20 3d 3d 20 4e 55 4c  .if (hPtr == NUL
4070: 4c 29 20 7b 0a 09 20 20 20 20 70 61 6e 69 63 28  L) {..    panic(
4080: 22 4d 61 72 6b 43 68 65 63 6b 50 72 6f 63 20 63  "MarkCheckProc c
4090: 6f 75 6c 64 6e 27 74 20 66 69 6e 64 20 68 61 73  ouldn't find has
40a0: 68 20 74 61 62 6c 65 20 65 6e 74 72 79 20 66 6f  h table entry fo
40b0: 72 20 6d 61 72 6b 22 29 3b 0a 09 7d 0a 20 20 20  r mark");..}.   
40c0: 20 7d 0a 7d 0a                                    }.}.