Hex Artifact Content

Artifact 915b145c14397518faa947f755a8548b3e2c4785:


0000: 2f 2a 0a 20 2a 20 74 6b 54 65 78 74 2e 68 20 28  /*. * tkText.h (
0010: 43 54 6b 2e 68 29 20 2d 2d 0a 20 2a 0a 20 2a 09  CTk.h) --. *. *.
0020: 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 68 61  Declarations sha
0030: 72 65 64 20 61 6d 6f 6e 67 20 74 68 65 20 66 69  red among the fi
0040: 6c 65 73 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  les that impleme
0050: 6e 74 20 74 65 78 74 0a 20 2a 09 77 69 64 67 65  nt text. *.widge
0060: 74 73 2e 0a 20 2a 0a 20 2a 20 43 6f 70 79 72 69  ts.. *. * Copyri
0070: 67 68 74 20 28 63 29 20 31 39 39 32 2d 31 39 39  ght (c) 1992-199
0080: 34 20 54 68 65 20 52 65 67 65 6e 74 73 20 6f 66  4 The Regents of
0090: 20 74 68 65 20 55 6e 69 76 65 72 73 69 74 79 20   the University 
00a0: 6f 66 20 43 61 6c 69 66 6f 72 6e 69 61 2e 0a 20  of California.. 
00b0: 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20  * Copyright (c) 
00c0: 31 39 39 34 2d 31 39 39 35 20 53 75 6e 20 4d 69  1994-1995 Sun Mi
00d0: 63 72 6f 73 79 73 74 65 6d 73 2c 20 49 6e 63 2e  crosystems, Inc.
00e0: 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63  . * Copyright (c
00f0: 29 20 31 39 39 34 2d 31 39 39 35 20 43 6c 65 76  ) 1994-1995 Clev
0100: 65 6c 61 6e 64 20 43 6c 69 6e 69 63 20 46 6f 75  eland Clinic Fou
0110: 6e 64 61 74 69 6f 6e 0a 20 2a 0a 20 2a 20 53 65  ndation. *. * Se
0120: 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65  e the file "lice
0130: 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69  nse.terms" for i
0140: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73  nformation on us
0150: 61 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69  age and redistri
0160: 62 75 74 69 6f 6e 0a 20 2a 20 6f 66 20 74 68 69  bution. * of thi
0170: 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20  s file, and for 
0180: 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20  a DISCLAIMER OF 
0190: 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a  ALL WARRANTIES..
01a0: 20 2a 0a 20 2a 20 40 28 23 29 20 24 49 64 3a 20   *. * @(#) $Id: 
01b0: 63 74 6b 2e 73 68 61 72 2c 76 20 31 2e 35 30 20  ctk.shar,v 1.50 
01c0: 31 39 39 36 2f 30 31 2f 31 35 20 31 34 3a 34 37  1996/01/15 14:47
01d0: 3a 31 36 20 61 6e 64 72 65 77 6d 20 45 78 70 20  :16 andrewm Exp 
01e0: 61 6e 64 72 65 77 6d 20 24 0a 20 2a 2f 0a 0a 23  andrewm $. */..#
01f0: 69 66 6e 64 65 66 20 5f 54 4b 54 45 58 54 0a 23  ifndef _TKTEXT.#
0200: 64 65 66 69 6e 65 20 5f 54 4b 54 45 58 54 0a 0a  define _TKTEXT..
0210: 23 69 66 6e 64 65 66 20 5f 54 4b 0a 23 69 6e 63  #ifndef _TK.#inc
0220: 6c 75 64 65 20 22 74 6b 2e 68 22 0a 23 65 6e 64  lude "tk.h".#end
0230: 69 66 0a 0a 2f 2a 0a 20 2a 20 4f 70 61 71 75 65  if../*. * Opaque
0240: 20 74 79 70 65 73 20 66 6f 72 20 73 74 72 75 63   types for struc
0250: 74 75 72 65 73 20 77 68 6f 73 65 20 67 75 74 73  tures whose guts
0260: 20 61 72 65 20 6f 6e 6c 79 20 6e 65 65 64 65 64   are only needed
0270: 20 62 79 20 61 20 73 69 6e 67 6c 65 0a 20 2a 20   by a single. * 
0280: 66 69 6c 65 3a 0a 20 2a 2f 0a 0a 74 79 70 65 64  file:. */..typed
0290: 65 66 20 73 74 72 75 63 74 20 54 6b 54 65 78 74  ef struct TkText
02a0: 42 54 72 65 65 20 2a 54 6b 54 65 78 74 42 54 72  BTree *TkTextBTr
02b0: 65 65 3b 0a 0a 2f 2a 0a 20 2a 20 54 68 65 20 64  ee;../*. * The d
02c0: 61 74 61 20 73 74 72 75 63 74 75 72 65 20 62 65  ata structure be
02d0: 6c 6f 77 20 64 65 66 69 6e 65 73 20 61 20 73 69  low defines a si
02e0: 6e 67 6c 65 20 6c 69 6e 65 20 6f 66 20 74 65 78  ngle line of tex
02f0: 74 20 28 66 72 6f 6d 20 6e 65 77 6c 69 6e 65 0a  t (from newline.
0300: 20 2a 20 74 6f 20 6e 65 77 6c 69 6e 65 2c 20 6e   * to newline, n
0310: 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 77  ot necessarily w
0320: 68 61 74 20 61 70 70 65 61 72 73 20 6f 6e 20 6f  hat appears on o
0330: 6e 65 20 6c 69 6e 65 20 6f 66 20 74 68 65 20 73  ne line of the s
0340: 63 72 65 65 6e 29 2e 0a 20 2a 2f 0a 0a 74 79 70  creen).. */..typ
0350: 65 64 65 66 20 73 74 72 75 63 74 20 54 6b 54 65  edef struct TkTe
0360: 78 74 4c 69 6e 65 20 7b 0a 20 20 20 20 73 74 72  xtLine {.    str
0370: 75 63 74 20 4e 6f 64 65 20 2a 70 61 72 65 6e 74  uct Node *parent
0380: 50 74 72 3b 09 09 2f 2a 20 50 6f 69 6e 74 65 72  Ptr;../* Pointer
0390: 20 74 6f 20 70 61 72 65 6e 74 20 6e 6f 64 65 20   to parent node 
03a0: 63 6f 6e 74 61 69 6e 69 6e 67 0a 09 09 09 09 09  containing......
03b0: 20 2a 20 6c 69 6e 65 2e 20 2a 2f 0a 20 20 20 20   * line. */.    
03c0: 73 74 72 75 63 74 20 54 6b 54 65 78 74 4c 69 6e  struct TkTextLin
03d0: 65 20 2a 6e 65 78 74 50 74 72 3b 09 09 2f 2a 20  e *nextPtr;../* 
03e0: 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c  Next in linked l
03f0: 69 73 74 20 6f 66 20 6c 69 6e 65 73 20 77 69 74  ist of lines wit
0400: 68 0a 09 09 09 09 09 20 2a 20 73 61 6d 65 20 70  h...... * same p
0410: 61 72 65 6e 74 20 6e 6f 64 65 20 69 6e 20 42 2d  arent node in B-
0420: 74 72 65 65 2e 20 20 4e 55 4c 4c 0a 09 09 09 09  tree.  NULL.....
0430: 09 20 2a 20 6d 65 61 6e 73 20 65 6e 64 20 6f 66  . * means end of
0440: 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 73 74   list. */.    st
0450: 72 75 63 74 20 54 6b 54 65 78 74 53 65 67 6d 65  ruct TkTextSegme
0460: 6e 74 20 2a 73 65 67 50 74 72 3b 09 2f 2a 20 46  nt *segPtr;./* F
0470: 69 72 73 74 20 69 6e 20 6f 72 64 65 72 65 64 20  irst in ordered 
0480: 6c 69 73 74 20 6f 66 20 73 65 67 6d 65 6e 74 73  list of segments
0490: 0a 09 09 09 09 09 20 2a 20 74 68 61 74 20 6d 61  ...... * that ma
04a0: 6b 65 20 75 70 20 74 68 65 20 6c 69 6e 65 2e 20  ke up the line. 
04b0: 2a 2f 0a 7d 20 54 6b 54 65 78 74 4c 69 6e 65 3b  */.} TkTextLine;
04c0: 0a 0a 2f 2a 0a 20 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  ../*. * --------
04d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
0510: 20 2a 20 53 65 67 6d 65 6e 74 73 3a 20 65 61 63   * Segments: eac
0520: 68 20 6c 69 6e 65 20 69 73 20 64 69 76 69 64 65  h line is divide
0530: 64 20 69 6e 74 6f 20 6f 6e 65 20 6f 72 20 6d 6f  d into one or mo
0540: 72 65 20 73 65 67 6d 65 6e 74 73 2c 20 77 68 65  re segments, whe
0550: 72 65 20 65 61 63 68 0a 20 2a 20 73 65 67 6d 65  re each. * segme
0560: 6e 74 20 69 73 20 6f 6e 65 20 6f 66 20 73 65 76  nt is one of sev
0570: 65 72 61 6c 20 74 68 69 6e 67 73 2c 20 73 75 63  eral things, suc
0580: 68 20 61 73 20 61 20 67 72 6f 75 70 20 6f 66 20  h as a group of 
0590: 63 68 61 72 61 63 74 65 72 73 2c 20 61 0a 20 2a  characters, a. *
05a0: 20 74 61 67 20 74 6f 67 67 6c 65 2c 20 61 20 6d   tag toggle, a m
05b0: 61 72 6b 2c 20 6f 72 20 61 6e 20 65 6d 62 65 64  ark, or an embed
05c0: 64 65 64 20 77 69 64 67 65 74 2e 20 20 45 61 63  ded widget.  Eac
05d0: 68 20 73 65 67 6d 65 6e 74 20 73 74 61 72 74 73  h segment starts
05e0: 20 77 69 74 68 0a 20 2a 20 61 20 73 74 61 6e 64   with. * a stand
05f0: 61 72 64 20 68 65 61 64 65 72 20 66 6f 6c 6c 6f  ard header follo
0600: 77 65 64 20 62 79 20 61 20 62 6f 64 79 20 74 68  wed by a body th
0610: 61 74 20 76 61 72 69 65 73 20 66 72 6f 6d 20 74  at varies from t
0620: 79 70 65 20 74 6f 20 74 79 70 65 2e 0a 20 2a 20  ype to type.. * 
0630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0670: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 2f 2a 0a  -------. */../*.
0680: 20 2a 20 54 68 65 20 64 61 74 61 20 73 74 72 75   * The data stru
0690: 63 74 75 72 65 20 62 65 6c 6f 77 20 64 65 66 69  cture below defi
06a0: 6e 65 73 20 74 68 65 20 62 6f 64 79 20 6f 66 20  nes the body of 
06b0: 61 20 73 65 67 6d 65 6e 74 20 74 68 61 74 20 72  a segment that r
06c0: 65 70 72 65 73 65 6e 74 73 0a 20 2a 20 61 20 74  epresents. * a t
06d0: 61 67 20 74 6f 67 67 6c 65 2e 20 20 54 68 65 72  ag toggle.  Ther
06e0: 65 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 73  e is one of thes
06f0: 65 20 73 74 72 75 63 74 75 72 65 73 20 61 74 20  e structures at 
0700: 62 6f 74 68 20 74 68 65 20 62 65 67 69 6e 6e 69  both the beginni
0710: 6e 67 0a 20 2a 20 61 6e 64 20 65 6e 64 20 6f 66  ng. * and end of
0720: 20 65 61 63 68 20 74 61 67 67 65 64 20 72 61 6e   each tagged ran
0730: 67 65 2e 0a 20 2a 2f 0a 0a 74 79 70 65 64 65 66  ge.. */..typedef
0740: 20 73 74 72 75 63 74 20 54 6b 54 65 78 74 54 6f   struct TkTextTo
0750: 67 67 6c 65 20 7b 0a 20 20 20 20 73 74 72 75 63  ggle {.    struc
0760: 74 20 54 6b 54 65 78 74 54 61 67 20 2a 74 61 67  t TkTextTag *tag
0770: 50 74 72 3b 09 09 2f 2a 20 54 61 67 20 74 68 61  Ptr;../* Tag tha
0780: 74 20 73 74 61 72 74 73 20 6f 72 20 65 6e 64 73  t starts or ends
0790: 20 68 65 72 65 2e 20 2a 2f 0a 20 20 20 20 69 6e   here. */.    in
07a0: 74 20 69 6e 4e 6f 64 65 43 6f 75 6e 74 73 3b 09  t inNodeCounts;.
07b0: 09 09 2f 2a 20 31 20 6d 65 61 6e 73 20 74 68 69  ../* 1 means thi
07c0: 73 20 74 6f 67 67 6c 65 20 68 61 73 20 62 65 65  s toggle has bee
07d0: 6e 0a 09 09 09 09 09 20 2a 20 61 63 63 6f 75 6e  n...... * accoun
07e0: 74 65 64 20 66 6f 72 20 69 6e 20 6e 6f 64 65 20  ted for in node 
07f0: 74 6f 67 67 6c 65 0a 09 09 09 09 09 20 2a 20 63  toggle...... * c
0800: 6f 75 6e 74 73 3b 20 30 20 6d 65 61 6e 73 20 69  ounts; 0 means i
0810: 74 20 68 61 73 6e 27 74 2c 20 79 65 74 2e 20 2a  t hasn't, yet. *
0820: 2f 0a 7d 20 54 6b 54 65 78 74 54 6f 67 67 6c 65  /.} TkTextToggle
0830: 3b 0a 0a 2f 2a 0a 20 2a 20 54 68 65 20 64 61 74  ;../*. * The dat
0840: 61 20 73 74 72 75 63 74 75 72 65 20 62 65 6c 6f  a structure belo
0850: 77 20 64 65 66 69 6e 65 73 20 6c 69 6e 65 20 73  w defines line s
0860: 65 67 6d 65 6e 74 73 20 74 68 61 74 20 72 65 70  egments that rep
0870: 72 65 73 65 6e 74 0a 20 2a 20 6d 61 72 6b 73 2e  resent. * marks.
0880: 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20 6f    There is one o
0890: 66 20 74 68 65 73 65 20 66 6f 72 20 65 61 63 68  f these for each
08a0: 20 6d 61 72 6b 20 69 6e 20 74 68 65 20 74 65 78   mark in the tex
08b0: 74 2e 0a 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20  t.. */..typedef 
08c0: 73 74 72 75 63 74 20 54 6b 54 65 78 74 4d 61 72  struct TkTextMar
08d0: 6b 20 7b 0a 20 20 20 20 73 74 72 75 63 74 20 54  k {.    struct T
08e0: 6b 54 65 78 74 20 2a 74 65 78 74 50 74 72 3b 09  kText *textPtr;.
08f0: 09 2f 2a 20 4f 76 65 72 61 6c 6c 20 69 6e 66 6f  ./* Overall info
0900: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 65  rmation about te
0910: 78 74 0a 09 09 09 09 09 20 2a 20 77 69 64 67 65  xt...... * widge
0920: 74 2e 20 2a 2f 0a 20 20 20 20 54 6b 54 65 78 74  t. */.    TkText
0930: 4c 69 6e 65 20 2a 6c 69 6e 65 50 74 72 3b 09 09  Line *linePtr;..
0940: 2f 2a 20 4c 69 6e 65 20 73 74 72 75 63 74 75 72  /* Line structur
0950: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
0960: 74 68 65 0a 09 09 09 09 09 20 2a 20 73 65 67 6d  the...... * segm
0970: 65 6e 74 2e 20 2a 2f 0a 20 20 20 20 54 63 6c 5f  ent. */.    Tcl_
0980: 48 61 73 68 45 6e 74 72 79 20 2a 68 50 74 72 3b  HashEntry *hPtr;
0990: 09 09 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  ../* Pointer to 
09a0: 68 61 73 68 20 74 61 62 6c 65 20 65 6e 74 72 79  hash table entry
09b0: 20 66 6f 72 20 6d 61 72 6b 0a 09 09 09 09 09 20   for mark...... 
09c0: 2a 20 28 69 6e 20 74 65 78 74 50 74 72 2d 3e 6d  * (in textPtr->m
09d0: 61 72 6b 54 61 62 6c 65 29 2e 20 2a 2f 0a 7d 20  arkTable). */.} 
09e0: 54 6b 54 65 78 74 4d 61 72 6b 3b 0a 0a 2f 2a 0a  TkTextMark;../*.
09f0: 20 2a 20 41 20 73 74 72 75 63 74 75 72 65 20 6f   * A structure o
0a00: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
0a10: 74 79 70 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  type holds infor
0a20: 6d 61 74 69 6f 6e 20 66 6f 72 20 65 61 63 68 20  mation for each 
0a30: 77 69 6e 64 6f 77 0a 20 2a 20 65 6d 62 65 64 64  window. * embedd
0a40: 65 64 20 69 6e 20 61 20 74 65 78 74 20 77 69 64  ed in a text wid
0a50: 67 65 74 2e 20 20 54 68 69 73 20 69 6e 66 6f 72  get.  This infor
0a60: 6d 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  mation is only u
0a70: 73 65 64 20 62 79 20 74 68 65 0a 20 2a 20 66 69  sed by the. * fi
0a80: 6c 65 20 74 6b 54 65 78 74 57 69 6e 64 2e 63 0a  le tkTextWind.c.
0a90: 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20 73 74 72   */..typedef str
0aa0: 75 63 74 20 54 6b 54 65 78 74 45 6d 62 57 69 6e  uct TkTextEmbWin
0ab0: 64 6f 77 20 7b 0a 20 20 20 20 73 74 72 75 63 74  dow {.    struct
0ac0: 20 54 6b 54 65 78 74 20 2a 74 65 78 74 50 74 72   TkText *textPtr
0ad0: 3b 09 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;../* Informatio
0ae0: 6e 20 61 62 6f 75 74 20 74 68 65 20 6f 76 65 72  n about the over
0af0: 61 6c 6c 20 74 65 78 74 0a 09 09 09 09 09 20 2a  all text...... *
0b00: 20 77 69 64 67 65 74 2e 20 2a 2f 0a 20 20 20 20   widget. */.    
0b10: 54 6b 54 65 78 74 4c 69 6e 65 20 2a 6c 69 6e 65  TkTextLine *line
0b20: 50 74 72 3b 09 09 2f 2a 20 4c 69 6e 65 20 73 74  Ptr;../* Line st
0b30: 72 75 63 74 75 72 65 20 74 68 61 74 20 63 6f 6e  ructure that con
0b40: 74 61 69 6e 73 20 74 68 69 73 0a 09 09 09 09 09  tains this......
0b50: 20 2a 20 77 69 6e 64 6f 77 2e 20 2a 2f 0a 20 20   * window. */.  
0b60: 20 20 54 6b 5f 57 69 6e 64 6f 77 20 74 6b 77 69    Tk_Window tkwi
0b70: 6e 3b 09 09 09 2f 2a 20 57 69 6e 64 6f 77 20 66  n;.../* Window f
0b80: 6f 72 20 74 68 69 73 20 73 65 67 6d 65 6e 74 2e  or this segment.
0b90: 20 20 4e 55 4c 4c 0a 09 09 09 09 09 20 2a 20 6d    NULL...... * m
0ba0: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 77 69  eans that the wi
0bb0: 6e 64 6f 77 20 68 61 73 6e 27 74 0a 09 09 09 09  ndow hasn't.....
0bc0: 09 20 2a 20 62 65 65 6e 20 63 72 65 61 74 65 64  . * been created
0bd0: 20 79 65 74 2e 20 2a 2f 0a 20 20 20 20 63 68 61   yet. */.    cha
0be0: 72 20 2a 63 72 65 61 74 65 3b 09 09 09 2f 2a 20  r *create;.../* 
0bf0: 53 63 72 69 70 74 20 74 6f 20 63 72 65 61 74 65  Script to create
0c00: 20 77 69 6e 64 6f 77 20 6f 6e 2d 64 65 6d 61 6e   window on-deman
0c10: 64 2e 0a 09 09 09 09 09 20 2a 20 4e 55 4c 4c 20  d....... * NULL 
0c20: 6d 65 61 6e 73 20 6e 6f 20 73 75 63 68 20 73 63  means no such sc
0c30: 72 69 70 74 2e 0a 09 09 09 09 09 20 2a 20 4d 61  ript....... * Ma
0c40: 6c 6c 6f 63 2d 65 64 2e 20 2a 2f 0a 20 20 20 20  lloc-ed. */.    
0c50: 69 6e 74 20 61 6c 69 67 6e 3b 09 09 09 09 2f 2a  int align;..../*
0c60: 20 48 6f 77 20 74 6f 20 61 6c 69 67 6e 20 77 69   How to align wi
0c70: 6e 64 6f 77 20 69 6e 20 76 65 72 74 69 63 61 6c  ndow in vertical
0c80: 0a 09 09 09 09 09 20 2a 20 73 70 61 63 65 2e 20  ...... * space. 
0c90: 20 53 65 65 20 64 65 66 69 6e 69 74 69 6f 6e 73   See definitions
0ca0: 20 69 6e 0a 09 09 09 09 09 20 2a 20 74 6b 54 65   in...... * tkTe
0cb0: 78 74 57 69 6e 64 2e 63 2e 20 2a 2f 0a 20 20 20  xtWind.c. */.   
0cc0: 20 69 6e 74 20 70 61 64 58 2c 20 70 61 64 59 3b   int padX, padY;
0cd0: 09 09 09 2f 2a 20 50 61 64 64 69 6e 67 20 74 6f  .../* Padding to
0ce0: 20 6c 65 61 76 65 20 61 72 6f 75 6e 64 20 65 61   leave around ea
0cf0: 63 68 20 73 69 64 65 0a 09 09 09 09 09 20 2a 20  ch side...... * 
0d00: 6f 66 20 77 69 6e 64 6f 77 2c 20 69 6e 20 70 69  of window, in pi
0d10: 78 65 6c 73 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  xels. */.    int
0d20: 20 73 74 72 65 74 63 68 3b 09 09 09 2f 2a 20 53   stretch;.../* S
0d30: 68 6f 75 6c 64 20 77 69 6e 64 6f 77 20 73 74 72  hould window str
0d40: 65 74 63 68 20 74 6f 20 66 69 6c 6c 0a 09 09 09  etch to fill....
0d50: 09 09 20 2a 20 76 65 72 74 69 63 61 6c 20 73 70  .. * vertical sp
0d60: 61 63 65 20 6f 66 20 6c 69 6e 65 20 28 65 78 63  ace of line (exc
0d70: 65 70 74 20 66 6f 72 0a 09 09 09 09 09 20 2a 20  ept for...... * 
0d80: 70 61 64 79 29 3f 20 20 30 20 6f 72 20 31 2e 20  pady)?  0 or 1. 
0d90: 2a 2f 0a 20 20 20 20 69 6e 74 20 63 68 75 6e 6b  */.    int chunk
0da0: 43 6f 75 6e 74 3b 09 09 09 2f 2a 20 4e 75 6d 62  Count;.../* Numb
0db0: 65 72 20 6f 66 20 64 69 73 70 6c 61 79 20 63 68  er of display ch
0dc0: 75 6e 6b 73 20 74 68 61 74 0a 09 09 09 09 09 20  unks that...... 
0dd0: 2a 20 72 65 66 65 72 20 74 6f 20 74 68 69 73 20  * refer to this 
0de0: 77 69 6e 64 6f 77 2e 20 2a 2f 0a 20 20 20 20 69  window. */.    i
0df0: 6e 74 20 64 69 73 70 6c 61 79 65 64 3b 09 09 09  nt displayed;...
0e00: 2f 2a 20 4e 6f 6e 2d 7a 65 72 6f 20 6d 65 61 6e  /* Non-zero mean
0e10: 73 20 74 68 61 74 20 74 68 65 20 77 69 6e 64 6f  s that the windo
0e20: 77 0a 09 09 09 09 09 20 2a 20 68 61 73 20 62 65  w...... * has be
0e30: 65 6e 20 64 69 73 70 6c 61 79 65 64 20 6f 6e 20  en displayed on 
0e40: 74 68 65 20 73 63 72 65 65 6e 0a 09 09 09 09 09  the screen......
0e50: 20 2a 20 72 65 63 65 6e 74 6c 79 2e 20 2a 2f 0a   * recently. */.
0e60: 7d 20 54 6b 54 65 78 74 45 6d 62 57 69 6e 64 6f  } TkTextEmbWindo
0e70: 77 3b 0a 0a 2f 2a 0a 20 2a 20 54 68 65 20 64 61  w;../*. * The da
0e80: 74 61 20 73 74 72 75 63 74 75 72 65 20 62 65 6c  ta structure bel
0e90: 6f 77 20 64 65 66 69 6e 65 73 20 6c 69 6e 65 20  ow defines line 
0ea0: 73 65 67 6d 65 6e 74 73 2e 0a 20 2a 2f 0a 0a 74  segments.. */..t
0eb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6b  ypedef struct Tk
0ec0: 54 65 78 74 53 65 67 6d 65 6e 74 20 7b 0a 20 20  TextSegment {.  
0ed0: 20 20 73 74 72 75 63 74 20 54 6b 5f 53 65 67 54    struct Tk_SegT
0ee0: 79 70 65 20 2a 74 79 70 65 50 74 72 3b 09 09 2f  ype *typePtr;../
0ef0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 72 65 63  * Pointer to rec
0f00: 6f 72 64 20 64 65 73 63 72 69 62 69 6e 67 0a 09  ord describing..
0f10: 09 09 09 09 20 2a 20 73 65 67 6d 65 6e 74 27 73  .... * segment's
0f20: 20 74 79 70 65 2e 20 2a 2f 0a 20 20 20 20 73 74   type. */.    st
0f30: 72 75 63 74 20 54 6b 54 65 78 74 53 65 67 6d 65  ruct TkTextSegme
0f40: 6e 74 20 2a 6e 65 78 74 50 74 72 3b 09 2f 2a 20  nt *nextPtr;./* 
0f50: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
0f60: 73 65 67 6d 65 6e 74 73 20 66 6f 72 20 74 68 69  segments for thi
0f70: 73 0a 09 09 09 09 09 20 2a 20 6c 69 6e 65 2c 20  s...... * line, 
0f80: 6f 72 20 4e 55 4c 4c 20 66 6f 72 20 65 6e 64 20  or NULL for end 
0f90: 6f 66 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20  of list. */.    
0fa0: 69 6e 74 20 73 69 7a 65 3b 09 09 09 09 2f 2a 20  int size;..../* 
0fb0: 53 69 7a 65 20 6f 66 20 74 68 69 73 20 73 65 67  Size of this seg
0fc0: 6d 65 6e 74 20 28 23 20 6f 66 20 62 79 74 65 73  ment (# of bytes
0fd0: 0a 09 09 09 09 09 20 2a 20 6f 66 20 69 6e 64 65  ...... * of inde
0fe0: 78 20 73 70 61 63 65 20 69 74 20 6f 63 63 75 70  x space it occup
0ff0: 69 65 73 29 2e 20 2a 2f 0a 20 20 20 20 75 6e 69  ies). */.    uni
1000: 6f 6e 20 7b 0a 09 63 68 61 72 20 63 68 61 72 73  on {..char chars
1010: 5b 34 5d 3b 09 09 09 2f 2a 20 43 68 61 72 61 63  [4];.../* Charac
1020: 74 65 72 73 20 74 68 61 74 20 6d 61 6b 65 20 75  ters that make u
1030: 70 20 63 68 61 72 61 63 74 65 72 0a 09 09 09 09  p character.....
1040: 09 20 2a 20 69 6e 66 6f 2e 20 20 41 63 74 75 61  . * info.  Actua
1050: 6c 20 6c 65 6e 67 74 68 20 76 61 72 69 65 73 20  l length varies 
1060: 74 6f 0a 09 09 09 09 09 20 2a 20 68 6f 6c 64 20  to...... * hold 
1070: 61 73 20 6d 61 6e 79 20 63 68 61 72 61 63 74 65  as many characte
1080: 72 73 20 61 73 20 6e 65 65 64 65 64 2e 2a 2f 0a  rs as needed.*/.
1090: 09 54 6b 54 65 78 74 54 6f 67 67 6c 65 20 74 6f  .TkTextToggle to
10a0: 67 67 6c 65 3b 09 09 2f 2a 20 49 6e 66 6f 72 6d  ggle;../* Inform
10b0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 61 67 20  ation about tag 
10c0: 74 6f 67 67 6c 65 2e 20 2a 2f 0a 09 54 6b 54 65  toggle. */..TkTe
10d0: 78 74 4d 61 72 6b 20 6d 61 72 6b 3b 09 09 2f 2a  xtMark mark;../*
10e0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
10f0: 75 74 20 6d 61 72 6b 2e 20 2a 2f 0a 09 54 6b 54  ut mark. */..TkT
1100: 65 78 74 45 6d 62 57 69 6e 64 6f 77 20 65 77 3b  extEmbWindow ew;
1110: 09 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e  ../* Information
1120: 20 61 62 6f 75 74 20 65 6d 62 65 64 64 65 64 0a   about embedded.
1130: 09 09 09 09 09 20 2a 20 77 69 6e 64 6f 77 2e 20  ..... * window. 
1140: 2a 2f 0a 20 20 20 20 7d 20 62 6f 64 79 3b 0a 7d  */.    } body;.}
1150: 20 54 6b 54 65 78 74 53 65 67 6d 65 6e 74 3b 0a   TkTextSegment;.
1160: 0a 2f 2a 0a 20 2a 20 44 61 74 61 20 73 74 72 75  ./*. * Data stru
1170: 63 74 75 72 65 73 20 6f 66 20 74 68 65 20 74 79  ctures of the ty
1180: 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  pe defined below
1190: 20 61 72 65 20 75 73 65 64 20 64 75 72 69 6e 67   are used during
11a0: 20 74 68 65 0a 20 2a 20 65 78 65 63 75 74 69 6f   the. * executio
11b0: 6e 20 6f 66 20 54 63 6c 20 63 6f 6d 6d 61 6e 64  n of Tcl command
11c0: 73 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 20  s to keep track 
11d0: 6f 66 20 76 61 72 69 6f 75 73 20 69 6e 74 65 72  of various inter
11e0: 65 73 74 69 6e 67 0a 20 2a 20 70 6c 61 63 65 73  esting. * places
11f0: 20 69 6e 20 61 20 74 65 78 74 2e 20 20 41 6e 20   in a text.  An 
1200: 69 6e 64 65 78 20 69 73 20 6f 6e 6c 79 20 76 61  index is only va
1210: 6c 69 64 20 75 70 20 75 6e 74 69 6c 20 74 68 65  lid up until the
1220: 20 6e 65 78 74 0a 20 2a 20 6d 6f 64 69 66 69 63   next. * modific
1230: 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 63 68 61  ation to the cha
1240: 72 61 63 74 65 72 20 73 74 72 75 63 74 75 72 65  racter structure
1250: 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 73   of the b-tree s
1260: 6f 20 74 68 65 79 0a 20 2a 20 63 61 6e 27 74 20  o they. * can't 
1270: 62 65 20 72 65 74 61 69 6e 65 64 20 61 63 72 6f  be retained acro
1280: 73 73 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 73 2e  ss Tcl commands.
1290: 20 20 48 6f 77 65 76 65 72 2c 20 6d 6f 64 73 20    However, mods 
12a0: 74 6f 20 6d 61 72 6b 73 0a 20 2a 20 6f 72 20 74  to marks. * or t
12b0: 61 67 73 20 64 6f 6e 27 74 20 69 6e 76 61 6c 69  ags don't invali
12c0: 64 61 74 65 20 69 6e 64 69 63 65 73 2e 0a 20 2a  date indices.. *
12d0: 2f 0a 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  /..typedef struc
12e0: 74 20 54 6b 54 65 78 74 49 6e 64 65 78 20 7b 0a  t TkTextIndex {.
12f0: 20 20 20 20 54 6b 54 65 78 74 42 54 72 65 65 20      TkTextBTree 
1300: 74 72 65 65 3b 09 09 09 2f 2a 20 54 72 65 65 20  tree;.../* Tree 
1310: 63 6f 6e 74 61 69 6e 69 6e 67 20 64 65 73 69 72  containing desir
1320: 65 64 20 70 6f 73 69 74 69 6f 6e 2e 20 2a 2f 0a  ed position. */.
1330: 20 20 20 20 54 6b 54 65 78 74 4c 69 6e 65 20 2a      TkTextLine *
1340: 6c 69 6e 65 50 74 72 3b 09 09 2f 2a 20 50 6f 69  linePtr;../* Poi
1350: 6e 74 65 72 20 74 6f 20 6c 69 6e 65 20 63 6f 6e  nter to line con
1360: 74 61 69 6e 69 6e 67 20 70 6f 73 69 74 69 6f 6e  taining position
1370: 0a 09 09 09 09 09 20 2a 20 6f 66 20 69 6e 74 65  ...... * of inte
1380: 72 65 73 74 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  rest. */.    int
1390: 20 63 68 61 72 49 6e 64 65 78 3b 09 09 09 2f 2a   charIndex;.../*
13a0: 20 49 6e 64 65 78 20 77 69 74 68 69 6e 20 6c 69   Index within li
13b0: 6e 65 20 6f 66 20 64 65 73 69 72 65 64 0a 09 09  ne of desired...
13c0: 09 09 09 20 2a 20 63 68 61 72 61 63 74 65 72 20  ... * character 
13d0: 28 30 20 6d 65 61 6e 73 20 66 69 72 73 74 20 6f  (0 means first o
13e0: 6e 65 29 2e 20 2a 2f 0a 7d 20 54 6b 54 65 78 74  ne). */.} TkText
13f0: 49 6e 64 65 78 3b 0a 0a 2f 2a 0a 20 2a 20 54 79  Index;../*. * Ty
1400: 70 65 73 20 66 6f 72 20 70 72 6f 63 65 64 75 72  pes for procedur
1410: 65 20 70 6f 69 6e 74 65 72 73 20 73 74 6f 72 65  e pointers store
1420: 64 20 69 6e 20 54 6b 54 65 78 74 44 69 73 70 43  d in TkTextDispC
1430: 68 75 6e 6b 20 73 74 72 75 74 75 72 65 73 3a 0a  hunk strutures:.
1440: 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20 73 74 72   */..typedef str
1450: 75 63 74 20 54 6b 54 65 78 74 44 69 73 70 43 68  uct TkTextDispCh
1460: 75 6e 6b 20 54 6b 54 65 78 74 44 69 73 70 43 68  unk TkTextDispCh
1470: 75 6e 6b 3b 0a 0a 74 79 70 65 64 65 66 20 76 6f  unk;..typedef vo
1480: 69 64 20 09 09 54 6b 5f 43 68 75 6e 6b 44 69 73  id ..Tk_ChunkDis
1490: 70 6c 61 79 50 72 6f 63 20 5f 41 4e 53 49 5f 41  playProc _ANSI_A
14a0: 52 47 53 5f 28 28 0a 09 09 09 20 20 20 20 54 6b  RGS_((....    Tk
14b0: 54 65 78 74 44 69 73 70 43 68 75 6e 6b 20 2a 63  TextDispChunk *c
14c0: 68 75 6e 6b 50 74 72 2c 20 69 6e 74 20 78 2c 20  hunkPtr, int x, 
14d0: 69 6e 74 20 79 2c 0a 09 09 09 20 20 20 20 54 6b  int y,....    Tk
14e0: 5f 57 69 6e 64 6f 77 20 77 69 6e 29 29 3b 0a 74  _Window win));.t
14f0: 79 70 65 64 65 66 20 76 6f 69 64 09 09 54 6b 5f  ypedef void..Tk_
1500: 43 68 75 6e 6b 55 6e 64 69 73 70 6c 61 79 50 72  ChunkUndisplayPr
1510: 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28  oc _ANSI_ARGS_((
1520: 0a 09 09 09 20 20 20 20 73 74 72 75 63 74 20 54  ....    struct T
1530: 6b 54 65 78 74 20 2a 74 65 78 74 50 74 72 2c 0a  kText *textPtr,.
1540: 09 09 09 20 20 20 20 54 6b 54 65 78 74 44 69 73  ...    TkTextDis
1550: 70 43 68 75 6e 6b 20 2a 63 68 75 6e 6b 50 74 72  pChunk *chunkPtr
1560: 29 29 3b 0a 74 79 70 65 64 65 66 20 69 6e 74 09  ));.typedef int.
1570: 09 54 6b 5f 43 68 75 6e 6b 4d 65 61 73 75 72 65  .Tk_ChunkMeasure
1580: 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f  Proc _ANSI_ARGS_
1590: 28 28 0a 09 09 09 20 20 20 20 54 6b 54 65 78 74  ((....    TkText
15a0: 44 69 73 70 43 68 75 6e 6b 20 2a 63 68 75 6e 6b  DispChunk *chunk
15b0: 50 74 72 2c 20 69 6e 74 20 78 29 29 3b 0a 74 79  Ptr, int x));.ty
15c0: 70 65 64 65 66 20 76 6f 69 64 09 09 54 6b 5f 43  pedef void..Tk_C
15d0: 68 75 6e 6b 42 62 6f 78 50 72 6f 63 20 5f 41 4e  hunkBboxProc _AN
15e0: 53 49 5f 41 52 47 53 5f 28 28 0a 09 09 09 20 20  SI_ARGS_((....  
15f0: 20 20 54 6b 54 65 78 74 44 69 73 70 43 68 75 6e    TkTextDispChun
1600: 6b 20 2a 63 68 75 6e 6b 50 74 72 2c 20 69 6e 74  k *chunkPtr, int
1610: 20 69 6e 64 65 78 2c 20 69 6e 74 20 79 2c 0a 09   index, int y,..
1620: 09 09 20 20 20 20 69 6e 74 20 2a 78 50 74 72 2c  ..    int *xPtr,
1630: 20 69 6e 74 20 2a 79 50 74 72 2c 0a 09 09 09 20   int *yPtr,.... 
1640: 20 20 20 69 6e 74 20 2a 77 69 64 74 68 50 74 72     int *widthPtr
1650: 2c 20 69 6e 74 20 2a 68 65 69 67 68 74 50 74 72  , int *heightPtr
1660: 29 29 3b 0a 0a 2f 2a 0a 20 2a 20 54 68 65 20 73  ));../*. * The s
1670: 74 72 75 63 74 75 72 65 20 62 65 6c 6f 77 20 72  tructure below r
1680: 65 70 72 65 73 65 6e 74 73 20 61 20 63 68 75 6e  epresents a chun
1690: 6b 20 6f 66 20 73 74 75 66 66 20 74 68 61 74 20  k of stuff that 
16a0: 69 73 20 64 69 73 70 6c 61 79 65 64 0a 20 2a 20  is displayed. * 
16b0: 74 6f 67 65 74 68 65 72 20 6f 6e 20 74 68 65 20  together on the 
16c0: 73 63 72 65 65 6e 2e 20 20 54 68 69 73 20 73 74  screen.  This st
16d0: 72 75 63 74 75 72 65 20 69 73 20 61 6c 6c 6f 63  ructure is alloc
16e0: 61 74 65 64 20 61 6e 64 20 66 72 65 65 64 20 62  ated and freed b
16f0: 79 0a 20 2a 20 67 65 6e 65 72 69 63 20 64 69 73  y. * generic dis
1700: 70 6c 61 79 20 63 6f 64 65 20 62 75 74 20 6d 6f  play code but mo
1710: 73 74 20 6f 66 20 69 74 73 20 66 69 65 6c 64 73  st of its fields
1720: 20 61 72 65 20 66 69 6c 6c 65 64 20 69 6e 20 62   are filled in b
1730: 79 0a 20 2a 20 73 65 67 6d 65 6e 74 2d 74 79 70  y. * segment-typ
1740: 65 2d 73 70 65 63 69 66 69 63 20 63 6f 64 65 2e  e-specific code.
1750: 0a 20 2a 2f 0a 0a 73 74 72 75 63 74 20 54 6b 54  . */..struct TkT
1760: 65 78 74 44 69 73 70 43 68 75 6e 6b 20 7b 0a 20  extDispChunk {. 
1770: 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 54 68 65     /*.     * The
1780: 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61 72   fields below ar
1790: 65 20 73 65 74 20 62 79 20 74 68 65 20 74 79 70  e set by the typ
17a0: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 63 6f  e-independent co
17b0: 64 65 20 62 65 66 6f 72 65 0a 20 20 20 20 20 2a  de before.     *
17c0: 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 73 65 67   calling the seg
17d0: 6d 65 6e 74 2d 74 79 70 65 2d 73 70 65 63 69 66  ment-type-specif
17e0: 69 63 20 6c 61 79 6f 75 74 50 72 6f 63 2e 20 20  ic layoutProc.  
17f0: 54 68 65 79 20 73 68 6f 75 6c 64 20 6e 6f 74 0a  They should not.
1800: 20 20 20 20 20 2a 20 62 65 20 6d 6f 64 69 66 69       * be modifi
1810: 65 64 20 62 79 20 73 65 67 6d 65 6e 74 2d 74 79  ed by segment-ty
1820: 70 65 2d 73 70 65 63 69 66 69 63 20 63 6f 64 65  pe-specific code
1830: 2e 0a 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 69  ..     */..    i
1840: 6e 74 20 78 3b 09 09 09 09 2f 2a 20 58 20 70 6f  nt x;..../* X po
1850: 73 69 74 69 6f 6e 20 6f 66 20 63 68 75 6e 6b 2c  sition of chunk,
1860: 20 69 6e 20 70 69 78 65 6c 73 2e 0a 09 09 09 09   in pixels......
1870: 09 20 2a 20 54 68 69 73 20 70 6f 73 69 74 69 6f  . * This positio
1880: 6e 20 69 73 20 6d 65 61 73 75 72 65 64 20 66 72  n is measured fr
1890: 6f 6d 20 74 68 65 0a 09 09 09 09 09 20 2a 20 6c  om the...... * l
18a0: 65 66 74 20 65 64 67 65 20 6f 66 20 74 68 65 20  eft edge of the 
18b0: 6c 6f 67 69 63 61 6c 20 6c 69 6e 65 2c 0a 09 09  logical line,...
18c0: 09 09 09 20 2a 20 6e 6f 74 20 66 72 6f 6d 20 74  ... * not from t
18d0: 68 65 20 6c 65 66 74 20 65 64 67 65 20 6f 66 20  he left edge of 
18e0: 74 68 65 0a 09 09 09 09 09 20 2a 20 77 69 6e 64  the...... * wind
18f0: 6f 77 20 28 69 2e 65 2e 20 69 74 20 64 6f 65 73  ow (i.e. it does
1900: 6e 27 74 20 63 68 61 6e 67 65 0a 09 09 09 09 09  n't change......
1910: 20 2a 20 75 6e 64 65 72 20 68 6f 72 69 7a 6f 6e   * under horizon
1920: 74 61 6c 20 73 63 72 6f 6c 6c 69 6e 67 29 2e 20  tal scrolling). 
1930: 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 54 6b  */.    struct Tk
1940: 54 65 78 74 44 69 73 70 43 68 75 6e 6b 20 2a 6e  TextDispChunk *n
1950: 65 78 74 50 74 72 3b 09 2f 2a 20 4e 65 78 74 20  extPtr;./* Next 
1960: 63 68 75 6e 6b 20 69 6e 20 74 68 65 20 64 69 73  chunk in the dis
1970: 70 6c 61 79 20 6c 69 6e 65 0a 09 09 09 09 09 20  play line...... 
1980: 2a 20 6f 72 20 4e 55 4c 4c 20 66 6f 72 20 74 68  * or NULL for th
1990: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 69 73  e end of the lis
19a0: 74 2e 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  t. */.    struct
19b0: 20 53 74 79 6c 65 20 2a 73 74 79 6c 65 50 74 72   Style *stylePtr
19c0: 3b 09 09 2f 2a 20 44 69 73 70 6c 61 79 20 69 6e  ;../* Display in
19d0: 66 6f 72 6d 61 74 69 6f 6e 2c 20 6b 6e 6f 77 6e  formation, known
19e0: 20 6f 6e 6c 79 0a 09 09 09 09 09 20 2a 20 74 6f   only...... * to
19f0: 20 74 6b 54 65 78 74 44 69 73 70 2e 63 2e 20 2a   tkTextDisp.c. *
1a00: 2f 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a  /..    /*.     *
1a10: 20 54 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   The fields belo
1a20: 77 20 61 72 65 20 73 65 74 20 62 79 20 74 68 65  w are set by the
1a30: 20 6c 61 79 6f 75 74 50 72 6f 63 20 74 68 61 74   layoutProc that
1a40: 20 63 72 65 61 74 65 73 20 74 68 65 0a 20 20 20   creates the.   
1a50: 20 20 2a 20 63 68 75 6e 6b 2e 0a 20 20 20 20 20    * chunk..     
1a60: 2a 2f 0a 0a 20 20 20 20 54 6b 5f 43 68 75 6e 6b  */..    Tk_Chunk
1a70: 44 69 73 70 6c 61 79 50 72 6f 63 20 2a 64 69 73  DisplayProc *dis
1a80: 70 6c 61 79 50 72 6f 63 3b 09 2f 2a 20 50 72 6f  playProc;./* Pro
1a90: 63 65 64 75 72 65 20 74 6f 20 69 6e 76 6f 6b 65  cedure to invoke
1aa0: 20 74 6f 20 64 72 61 77 20 74 68 69 73 0a 09 09   to draw this...
1ab0: 09 09 09 20 2a 20 63 68 75 6e 6b 20 6f 6e 20 74  ... * chunk on t
1ac0: 68 65 20 64 69 73 70 6c 61 79 20 6f 72 20 61 6e  he display or an
1ad0: 0a 09 09 09 09 09 20 2a 20 6f 66 66 2d 73 63 72  ...... * off-scr
1ae0: 65 65 6e 20 70 69 78 6d 61 70 2e 20 2a 2f 0a 20  een pixmap. */. 
1af0: 20 20 20 54 6b 5f 43 68 75 6e 6b 55 6e 64 69 73     Tk_ChunkUndis
1b00: 70 6c 61 79 50 72 6f 63 20 2a 75 6e 64 69 73 70  playProc *undisp
1b10: 6c 61 79 50 72 6f 63 3b 0a 09 09 09 09 09 2f 2a  layProc;....../*
1b20: 20 50 72 6f 63 65 64 75 72 65 20 74 6f 20 69 6e   Procedure to in
1b30: 76 6f 6b 65 20 77 68 65 6e 20 73 65 67 6d 65 6e  voke when segmen
1b40: 74 0a 09 09 09 09 09 20 2a 20 63 65 61 73 65 73  t...... * ceases
1b50: 20 74 6f 20 62 65 20 64 69 73 70 6c 61 79 65 64   to be displayed
1b60: 20 6f 6e 20 73 63 72 65 65 6e 0a 09 09 09 09 09   on screen......
1b70: 20 2a 20 61 6e 79 6d 6f 72 65 2e 20 2a 2f 0a 20   * anymore. */. 
1b80: 20 20 20 54 6b 5f 43 68 75 6e 6b 4d 65 61 73 75     Tk_ChunkMeasu
1b90: 72 65 50 72 6f 63 20 2a 6d 65 61 73 75 72 65 50  reProc *measureP
1ba0: 72 6f 63 3b 09 2f 2a 20 50 72 6f 63 65 64 75 72  roc;./* Procedur
1bb0: 65 20 74 6f 20 66 69 6e 64 20 63 68 61 72 61 63  e to find charac
1bc0: 74 65 72 20 75 6e 64 65 72 0a 09 09 09 09 09 20  ter under...... 
1bd0: 2a 20 61 20 67 69 76 65 6e 20 78 2d 6c 6f 63 61  * a given x-loca
1be0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 54 6b 5f  tion. */.    Tk_
1bf0: 43 68 75 6e 6b 42 62 6f 78 50 72 6f 63 20 2a 62  ChunkBboxProc *b
1c00: 62 6f 78 50 72 6f 63 3b 09 09 2f 2a 20 50 72 6f  boxProc;../* Pro
1c10: 63 65 64 75 72 65 20 74 6f 20 66 69 6e 64 20 62  cedure to find b
1c20: 6f 75 6e 64 69 6e 67 20 62 6f 78 0a 09 09 09 09  ounding box.....
1c30: 09 20 2a 20 6f 66 20 63 68 61 72 61 63 74 65 72  . * of character
1c40: 20 69 6e 20 63 68 75 6e 6b 2e 20 2a 2f 0a 20 20   in chunk. */.  
1c50: 20 20 69 6e 74 20 6e 75 6d 43 68 61 72 73 3b 09    int numChars;.
1c60: 09 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63  ../* Number of c
1c70: 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 77  haracters that w
1c80: 69 6c 6c 20 62 65 0a 09 09 09 09 09 20 2a 20 64  ill be...... * d
1c90: 69 73 70 6c 61 79 65 64 20 69 6e 20 74 68 65 20  isplayed in the 
1ca0: 63 68 75 6e 6b 2e 20 2a 2f 0a 20 20 20 20 69 6e  chunk. */.    in
1cb0: 74 20 6d 69 6e 48 65 69 67 68 74 3b 09 09 09 2f  t minHeight;.../
1cc0: 2a 20 4d 69 6e 69 6d 75 6d 20 74 6f 74 61 6c 20  * Minimum total 
1cd0: 6c 69 6e 65 20 68 65 69 67 68 74 20 6e 65 65 64  line height need
1ce0: 65 64 0a 09 09 09 09 09 20 2a 20 62 79 20 74 68  ed...... * by th
1cf0: 69 73 20 63 68 75 6e 6b 2e 20 2a 2f 0a 20 20 20  is chunk. */.   
1d00: 20 69 6e 74 20 77 69 64 74 68 3b 09 09 09 09 2f   int width;..../
1d10: 2a 20 57 69 64 74 68 20 6f 66 20 74 68 69 73 20  * Width of this 
1d20: 63 68 75 6e 6b 2c 20 69 6e 20 70 69 78 65 6c 73  chunk, in pixels
1d30: 2e 0a 09 09 09 09 09 20 2a 20 49 6e 69 74 69 61  ....... * Initia
1d40: 6c 6c 79 20 73 65 74 20 62 79 20 63 68 75 6e 6b  lly set by chunk
1d50: 2d 73 70 65 63 69 66 69 63 0a 09 09 09 09 09 20  -specific...... 
1d60: 2a 20 63 6f 64 65 2c 20 62 75 74 20 6d 61 79 20  * code, but may 
1d70: 62 65 20 69 6e 63 72 65 61 73 65 64 20 74 6f 0a  be increased to.
1d80: 09 09 09 09 09 20 2a 20 69 6e 63 6c 75 64 65 20  ..... * include 
1d90: 74 61 62 20 6f 72 20 65 78 74 72 61 20 73 70 61  tab or extra spa
1da0: 63 65 20 61 74 20 65 6e 64 0a 09 09 09 09 09 20  ce at end...... 
1db0: 2a 20 6f 66 20 6c 69 6e 65 2e 20 2a 2f 0a 20 20  * of line. */.  
1dc0: 20 20 69 6e 74 20 62 72 65 61 6b 49 6e 64 65 78    int breakIndex
1dd0: 3b 09 09 09 2f 2a 20 49 6e 64 65 78 20 77 69 74  ;.../* Index wit
1de0: 68 69 6e 20 63 68 75 6e 6b 20 6f 66 20 6c 61 73  hin chunk of las
1df0: 74 0a 09 09 09 09 09 20 2a 20 61 63 63 65 70 74  t...... * accept
1e00: 61 62 6c 65 20 70 6f 73 69 74 69 6f 6e 20 66 6f  able position fo
1e10: 72 20 61 20 6c 69 6e 65 0a 09 09 09 09 09 20 2a  r a line...... *
1e20: 20 28 62 72 65 61 6b 20 6a 75 73 74 20 62 65 66   (break just bef
1e30: 6f 72 65 20 74 68 69 73 20 63 68 61 72 61 63 74  ore this charact
1e40: 65 72 29 2e 0a 09 09 09 09 09 20 2a 20 3c 3d 20  er)....... * <= 
1e50: 30 20 6d 65 61 6e 73 20 64 6f 6e 27 74 20 62 72  0 means don't br
1e60: 65 61 6b 20 64 75 72 69 6e 67 20 6f 72 0a 09 09  eak during or...
1e70: 09 09 09 20 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ... * immediatel
1e80: 79 20 61 66 74 65 72 20 74 68 69 73 20 63 68 75  y after this chu
1e90: 6e 6b 2e 20 2a 2f 0a 20 20 20 20 43 6c 69 65 6e  nk. */.    Clien
1ea0: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
1eb0: 3b 09 09 2f 2a 20 41 64 64 69 74 69 6f 6e 61 6c  ;../* Additional
1ec0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
1ed0: 20 75 73 65 0a 09 09 09 09 09 20 2a 20 6f 66 20   use...... * of 
1ee0: 64 69 73 70 6c 61 79 50 72 6f 63 20 61 6e 64 20  displayProc and 
1ef0: 75 6e 64 69 73 70 6c 61 79 50 72 6f 63 2e 20 2a  undisplayProc. *
1f00: 2f 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20 4f 6e 65 20  /.};../*. * One 
1f10: 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20 6f  data structure o
1f20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1f30: 74 79 70 65 20 69 73 20 75 73 65 64 20 66 6f 72  type is used for
1f40: 20 65 61 63 68 20 74 61 67 20 69 6e 20 61 0a 20   each tag in a. 
1f50: 2a 20 74 65 78 74 20 77 69 64 67 65 74 2e 20 20  * text widget.  
1f60: 54 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  These structures
1f70: 20 61 72 65 20 6b 65 70 74 20 69 6e 20 74 65 78   are kept in tex
1f80: 74 50 74 72 2d 3e 74 61 67 54 61 62 6c 65 20 61  tPtr->tagTable a
1f90: 6e 64 0a 20 2a 20 72 65 66 65 72 72 65 64 20 74  nd. * referred t
1fa0: 6f 20 69 6e 20 6f 74 68 65 72 20 73 74 72 75 63  o in other struc
1fb0: 74 75 72 65 73 2e 0a 20 2a 2f 0a 0a 74 79 70 65  tures.. */..type
1fc0: 64 65 66 20 73 74 72 75 63 74 20 54 6b 54 65 78  def struct TkTex
1fd0: 74 54 61 67 20 7b 0a 20 20 20 20 63 68 61 72 20  tTag {.    char 
1fe0: 2a 6e 61 6d 65 3b 09 09 09 2f 2a 20 4e 61 6d 65  *name;.../* Name
1ff0: 20 6f 66 20 74 68 69 73 20 74 61 67 2e 20 20 54   of this tag.  T
2000: 68 69 73 20 66 69 65 6c 64 20 69 73 20 61 63 74  his field is act
2010: 75 61 6c 6c 79 0a 09 09 09 09 20 2a 20 61 20 70  ually..... * a p
2020: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6b 65  ointer to the ke
2030: 79 20 66 72 6f 6d 20 74 68 65 20 65 6e 74 72 79  y from the entry
2040: 20 69 6e 0a 09 09 09 09 20 2a 20 74 65 78 74 50   in..... * textP
2050: 74 72 2d 3e 74 61 67 54 61 62 6c 65 2c 20 73 6f  tr->tagTable, so
2060: 20 69 74 20 6e 65 65 64 6e 27 74 20 62 65 20 66   it needn't be f
2070: 72 65 65 64 0a 09 09 09 09 20 2a 20 65 78 70 6c  reed..... * expl
2080: 69 63 69 74 6c 79 2e 20 2a 2f 0a 20 20 20 20 69  icitly. */.    i
2090: 6e 74 20 70 72 69 6f 72 69 74 79 3b 09 09 2f 2a  nt priority;../*
20a0: 20 50 72 69 6f 72 69 74 79 20 6f 66 20 74 68 69   Priority of thi
20b0: 73 20 74 61 67 20 77 69 74 68 69 6e 20 77 69 64  s tag within wid
20c0: 67 65 74 2e 20 20 30 0a 09 09 09 09 20 2a 20 6d  get.  0..... * m
20d0: 65 61 6e 73 20 6c 6f 77 65 73 74 20 70 72 69 6f  eans lowest prio
20e0: 72 69 74 79 2e 20 20 45 78 61 63 74 6c 79 20 6f  rity.  Exactly o
20f0: 6e 65 20 74 61 67 0a 09 09 09 09 20 2a 20 68 61  ne tag..... * ha
2100: 73 20 65 61 63 68 20 69 6e 74 65 67 65 72 20 76  s each integer v
2110: 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61  alue between 0 a
2120: 6e 64 0a 09 09 09 09 20 2a 20 6e 75 6d 54 61 67  nd..... * numTag
2130: 73 2d 31 2e 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a  s-1. */..    /*.
2140: 20 20 20 20 20 2a 20 49 6e 66 6f 72 6d 61 74 69       * Informati
2150: 6f 6e 20 66 6f 72 20 64 69 73 70 6c 61 79 69 6e  on for displayin
2160: 67 20 74 65 78 74 20 77 69 74 68 20 74 68 69 73  g text with this
2170: 20 74 61 67 2e 20 20 54 68 65 20 69 6e 66 6f 72   tag.  The infor
2180: 6d 61 74 69 6f 6e 0a 20 20 20 20 20 2a 20 62 65  mation.     * be
2190: 6c 6f 77 73 20 61 63 74 73 20 61 73 20 61 6e 20  lows acts as an 
21a0: 6f 76 65 72 72 69 64 65 20 6f 6e 20 69 6e 66 6f  override on info
21b0: 72 6d 61 74 69 6f 6e 20 73 70 65 63 69 66 69 65  rmation specifie
21c0: 64 20 62 79 20 6c 6f 77 65 72 2d 70 72 69 6f 72  d by lower-prior
21d0: 69 74 79 0a 20 20 20 20 20 2a 20 74 61 67 73 2e  ity.     * tags.
21e0: 20 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 69 73    If no value is
21f0: 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
2200: 20 74 68 65 20 6e 65 78 74 2d 6c 6f 77 65 72 2d   the next-lower-
2210: 70 72 69 6f 72 69 74 79 20 74 61 67 0a 20 20 20  priority tag.   
2220: 20 20 2a 20 6f 6e 20 74 68 65 20 74 65 78 74 20    * on the text 
2230: 64 65 74 65 72 6d 69 6e 73 20 74 68 65 20 76 61  determins the va
2240: 6c 75 65 2e 20 20 54 68 65 20 74 65 78 74 20 77  lue.  The text w
2250: 69 64 67 65 74 20 69 74 73 65 6c 66 20 70 72 6f  idget itself pro
2260: 76 69 64 65 73 0a 20 20 20 20 20 2a 20 64 65 66  vides.     * def
2270: 61 75 6c 74 73 20 69 66 20 6e 6f 20 74 61 67 20  aults if no tag 
2280: 73 70 65 63 69 66 69 65 73 20 61 6e 20 6f 76 65  specifies an ove
2290: 72 72 69 64 65 2e 0a 20 20 20 20 20 2a 2f 0a 0a  rride..     */..
22a0: 20 20 20 20 63 68 61 72 20 2a 6a 75 73 74 69 66      char *justif
22b0: 79 53 74 72 69 6e 67 3b 09 2f 2a 20 2d 6a 75 73  yString;./* -jus
22c0: 74 69 66 79 20 6f 70 74 69 6f 6e 20 73 74 72 69  tify option stri
22d0: 6e 67 20 28 6d 61 6c 6c 6f 63 2d 65 64 29 2e 0a  ng (malloc-ed)..
22e0: 09 09 09 09 20 2a 20 4e 55 4c 4c 20 6d 65 61 6e  .... * NULL mean
22f0: 73 20 6f 70 74 69 6f 6e 20 6e 6f 74 20 73 70 65  s option not spe
2300: 63 69 66 69 65 64 2e 20 2a 2f 0a 20 20 20 20 54  cified. */.    T
2310: 6b 5f 4a 75 73 74 69 66 79 20 6a 75 73 74 69 66  k_Justify justif
2320: 79 3b 09 09 2f 2a 20 48 6f 77 20 74 6f 20 6a 75  y;../* How to ju
2330: 73 74 69 66 79 20 74 65 78 74 3a 20 54 4b 5f 4a  stify text: TK_J
2340: 55 53 54 49 46 59 5f 4c 45 46 54 2c 0a 09 09 09  USTIFY_LEFT,....
2350: 09 20 2a 20 54 4b 5f 4a 55 53 54 49 46 59 5f 52  . * TK_JUSTIFY_R
2360: 49 47 48 54 2c 20 6f 72 20 54 4b 5f 4a 55 53 54  IGHT, or TK_JUST
2370: 49 46 59 5f 43 45 4e 54 45 52 2e 0a 09 09 09 09  IFY_CENTER......
2380: 20 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66   * Only valid if
2390: 20 6a 75 73 74 69 66 79 53 74 72 69 6e 67 20 69   justifyString i
23a0: 73 20 6e 6f 6e 2d 4e 55 4c 4c 2e 20 2a 2f 0a 20  s non-NULL. */. 
23b0: 20 20 20 63 68 61 72 20 2a 6c 4d 61 72 67 69 6e     char *lMargin
23c0: 31 53 74 72 69 6e 67 3b 09 2f 2a 20 2d 6c 6d 61  1String;./* -lma
23d0: 72 67 69 6e 31 20 6f 70 74 69 6f 6e 20 73 74 72  rgin1 option str
23e0: 69 6e 67 20 28 6d 61 6c 6c 6f 63 2d 65 64 29 2e  ing (malloc-ed).
23f0: 0a 09 09 09 09 20 2a 20 4e 55 4c 4c 20 6d 65 61  ..... * NULL mea
2400: 6e 73 20 6f 70 74 69 6f 6e 20 6e 6f 74 20 73 70  ns option not sp
2410: 65 63 69 66 69 65 64 2e 20 2a 2f 0a 20 20 20 20  ecified. */.    
2420: 69 6e 74 20 6c 4d 61 72 67 69 6e 31 3b 09 09 2f  int lMargin1;../
2430: 2a 20 4c 65 66 74 20 6d 61 72 67 69 6e 20 66 6f  * Left margin fo
2440: 72 20 66 69 72 73 74 20 64 69 73 70 6c 61 79 20  r first display 
2450: 6c 69 6e 65 20 6f 66 0a 09 09 09 09 20 2a 20 65  line of..... * e
2460: 61 63 68 20 74 65 78 74 20 6c 69 6e 65 2c 20 69  ach text line, i
2470: 6e 20 70 69 78 65 6c 73 2e 20 20 4f 6e 6c 79 20  n pixels.  Only 
2480: 76 61 6c 69 64 0a 09 09 09 09 20 2a 20 69 66 20  valid..... * if 
2490: 6c 4d 61 72 67 69 6e 31 53 74 72 69 6e 67 20 69  lMargin1String i
24a0: 73 20 6e 6f 6e 2d 4e 55 4c 4c 2e 20 2a 2f 0a 20  s non-NULL. */. 
24b0: 20 20 20 63 68 61 72 20 2a 6c 4d 61 72 67 69 6e     char *lMargin
24c0: 32 53 74 72 69 6e 67 3b 09 2f 2a 20 2d 6c 6d 61  2String;./* -lma
24d0: 72 67 69 6e 32 20 6f 70 74 69 6f 6e 20 73 74 72  rgin2 option str
24e0: 69 6e 67 20 28 6d 61 6c 6c 6f 63 2d 65 64 29 2e  ing (malloc-ed).
24f0: 0a 09 09 09 09 20 2a 20 4e 55 4c 4c 20 6d 65 61  ..... * NULL mea
2500: 6e 73 20 6f 70 74 69 6f 6e 20 6e 6f 74 20 73 70  ns option not sp
2510: 65 63 69 66 69 65 64 2e 20 2a 2f 0a 20 20 20 20  ecified. */.    
2520: 69 6e 74 20 6c 4d 61 72 67 69 6e 32 3b 09 09 2f  int lMargin2;../
2530: 2a 20 4c 65 66 74 20 6d 61 72 67 69 6e 20 66 6f  * Left margin fo
2540: 72 20 73 65 63 6f 6e 64 20 61 6e 64 20 6c 61 74  r second and lat
2550: 65 72 20 64 69 73 70 6c 61 79 0a 09 09 09 09 20  er display..... 
2560: 2a 20 6c 69 6e 65 73 20 6f 66 20 65 61 63 68 20  * lines of each 
2570: 74 65 78 74 20 6c 69 6e 65 2c 20 69 6e 20 70 69  text line, in pi
2580: 78 65 6c 73 2e 20 20 4f 6e 6c 79 0a 09 09 09 09  xels.  Only.....
2590: 20 2a 20 76 61 6c 69 64 20 69 66 20 6c 4d 61 72   * valid if lMar
25a0: 67 69 6e 32 53 74 72 69 6e 67 20 69 73 20 6e 6f  gin2String is no
25b0: 6e 2d 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 63  n-NULL. */.    c
25c0: 68 61 72 20 2a 6f 66 66 73 65 74 53 74 72 69 6e  har *offsetStrin
25d0: 67 3b 09 09 2f 2a 20 2d 6f 66 66 73 65 74 20 6f  g;../* -offset o
25e0: 70 74 69 6f 6e 20 73 74 72 69 6e 67 20 28 6d 61  ption string (ma
25f0: 6c 6c 6f 63 2d 65 64 29 2e 0a 09 09 09 09 20 2a  lloc-ed)...... *
2600: 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6f 70 74 69   NULL means opti
2610: 6f 6e 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  on not specified
2620: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6f 66 66  . */.    int off
2630: 73 65 74 3b 09 09 09 2f 2a 20 56 65 72 74 69 63  set;.../* Vertic
2640: 61 6c 20 6f 66 66 73 65 74 20 6f 66 20 74 65 78  al offset of tex
2650: 74 27 73 20 62 61 73 65 6c 69 6e 65 20 66 72 6f  t's baseline fro
2660: 6d 0a 09 09 09 09 20 2a 20 62 61 73 65 6c 69 6e  m..... * baselin
2670: 65 20 6f 66 20 6c 69 6e 65 2e 20 20 55 73 65 64  e of line.  Used
2680: 20 66 6f 72 20 73 75 70 65 72 73 63 72 69 70 74   for superscript
2690: 73 0a 09 09 09 09 20 2a 20 61 6e 64 20 73 75 62  s..... * and sub
26a0: 73 63 72 69 70 74 73 2e 20 20 4f 6e 6c 79 20 76  scripts.  Only v
26b0: 61 6c 69 64 20 69 66 0a 09 09 09 09 20 2a 20 6f  alid if..... * o
26c0: 66 66 73 65 74 53 74 72 69 6e 67 20 69 73 20 6e  ffsetString is n
26d0: 6f 6e 2d 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20  on-NULL. */.    
26e0: 63 68 61 72 20 2a 72 4d 61 72 67 69 6e 53 74 72  char *rMarginStr
26f0: 69 6e 67 3b 09 2f 2a 20 2d 72 6d 61 72 67 69 6e  ing;./* -rmargin
2700: 20 6f 70 74 69 6f 6e 20 73 74 72 69 6e 67 20 28   option string (
2710: 6d 61 6c 6c 6f 63 2d 65 64 29 2e 0a 09 09 09 09  malloc-ed)......
2720: 20 2a 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6f 70   * NULL means op
2730: 74 69 6f 6e 20 6e 6f 74 20 73 70 65 63 69 66 69  tion not specifi
2740: 65 64 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ed. */.    int r
2750: 4d 61 72 67 69 6e 3b 09 09 2f 2a 20 52 69 67 68  Margin;../* Righ
2760: 74 20 6d 61 72 67 69 6e 20 66 6f 72 20 74 65 78  t margin for tex
2770: 74 2c 20 69 6e 20 70 69 78 65 6c 73 2e 20 20 4f  t, in pixels.  O
2780: 6e 6c 79 0a 09 09 09 09 20 2a 20 76 61 6c 69 64  nly..... * valid
2790: 20 69 66 20 72 4d 61 72 67 69 6e 53 74 72 69 6e   if rMarginStrin
27a0: 67 20 69 73 20 6e 6f 6e 2d 4e 55 4c 4c 2e 20 2a  g is non-NULL. *
27b0: 2f 0a 20 20 20 20 63 68 61 72 20 2a 73 70 61 63  /.    char *spac
27c0: 69 6e 67 31 53 74 72 69 6e 67 3b 09 2f 2a 20 2d  ing1String;./* -
27d0: 73 70 61 63 69 6e 67 31 20 6f 70 74 69 6f 6e 20  spacing1 option 
27e0: 73 74 72 69 6e 67 20 28 6d 61 6c 6c 6f 63 2d 65  string (malloc-e
27f0: 64 29 2e 0a 09 09 09 09 20 2a 20 4e 55 4c 4c 20  d)...... * NULL 
2800: 6d 65 61 6e 73 20 6f 70 74 69 6f 6e 20 6e 6f 74  means option not
2810: 20 73 70 65 63 69 66 69 65 64 2e 20 2a 2f 0a 20   specified. */. 
2820: 20 20 20 69 6e 74 20 73 70 61 63 69 6e 67 31 3b     int spacing1;
2830: 09 09 2f 2a 20 45 78 74 72 61 20 73 70 61 63 69  ../* Extra spaci
2840: 6e 67 20 61 62 6f 76 65 20 66 69 72 73 74 20 64  ng above first d
2850: 69 73 70 6c 61 79 0a 09 09 09 09 20 2a 20 6c 69  isplay..... * li
2860: 6e 65 20 66 6f 72 20 74 65 78 74 20 6c 69 6e 65  ne for text line
2870: 2e 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66  .  Only valid if
2880: 0a 09 09 09 09 20 2a 20 73 70 61 63 69 6e 67 31  ..... * spacing1
2890: 53 74 72 69 6e 67 20 69 73 20 6e 6f 6e 2d 4e 55  String is non-NU
28a0: 4c 4c 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  LL. */.    char 
28b0: 2a 73 70 61 63 69 6e 67 32 53 74 72 69 6e 67 3b  *spacing2String;
28c0: 09 2f 2a 20 2d 73 70 61 63 69 6e 67 32 20 6f 70  ./* -spacing2 op
28d0: 74 69 6f 6e 20 73 74 72 69 6e 67 20 28 6d 61 6c  tion string (mal
28e0: 6c 6f 63 2d 65 64 29 2e 0a 09 09 09 09 20 2a 20  loc-ed)...... * 
28f0: 4e 55 4c 4c 20 6d 65 61 6e 73 20 6f 70 74 69 6f  NULL means optio
2900: 6e 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 2e  n not specified.
2910: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 73 70 61 63   */.    int spac
2920: 69 6e 67 32 3b 09 09 2f 2a 20 45 78 74 72 61 20  ing2;../* Extra 
2930: 73 70 61 63 69 6e 67 20 62 65 74 77 65 65 6e 20  spacing between 
2940: 64 69 73 70 6c 61 79 0a 09 09 09 09 20 2a 20 6c  display..... * l
2950: 69 6e 65 73 20 66 6f 72 20 74 68 65 20 73 61 6d  ines for the sam
2960: 65 20 74 65 78 74 20 6c 69 6e 65 2e 20 20 4f 6e  e text line.  On
2970: 6c 79 20 76 61 6c 69 64 0a 09 09 09 09 20 2a 20  ly valid..... * 
2980: 69 66 20 73 70 61 63 69 6e 67 32 53 74 72 69 6e  if spacing2Strin
2990: 67 20 69 73 20 6e 6f 6e 2d 4e 55 4c 4c 2e 20 2a  g is non-NULL. *
29a0: 2f 0a 20 20 20 20 63 68 61 72 20 2a 73 70 61 63  /.    char *spac
29b0: 69 6e 67 33 53 74 72 69 6e 67 3b 09 2f 2a 20 2d  ing3String;./* -
29c0: 73 70 61 63 69 6e 67 32 20 6f 70 74 69 6f 6e 20  spacing2 option 
29d0: 73 74 72 69 6e 67 20 28 6d 61 6c 6c 6f 63 2d 65  string (malloc-e
29e0: 64 29 2e 0a 09 09 09 09 20 2a 20 4e 55 4c 4c 20  d)...... * NULL 
29f0: 6d 65 61 6e 73 20 6f 70 74 69 6f 6e 20 6e 6f 74  means option not
2a00: 20 73 70 65 63 69 66 69 65 64 2e 20 2a 2f 0a 20   specified. */. 
2a10: 20 20 20 69 6e 74 20 73 70 61 63 69 6e 67 33 3b     int spacing3;
2a20: 09 09 2f 2a 20 45 78 74 72 61 20 73 70 61 63 69  ../* Extra spaci
2a30: 6e 67 20 62 65 6c 6f 77 20 6c 61 73 74 20 64 69  ng below last di
2a40: 73 70 6c 61 79 0a 09 09 09 09 20 2a 20 6c 69 6e  splay..... * lin
2a50: 65 20 66 6f 72 20 74 65 78 74 20 6c 69 6e 65 2e  e for text line.
2a60: 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 0a    Only valid if.
2a70: 09 09 09 09 20 2a 20 73 70 61 63 69 6e 67 33 53  .... * spacing3S
2a80: 74 72 69 6e 67 20 69 73 20 6e 6f 6e 2d 4e 55 4c  tring is non-NUL
2a90: 4c 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  L. */.    char *
2aa0: 74 61 62 53 74 72 69 6e 67 3b 09 09 2f 2a 20 2d  tabString;../* -
2ab0: 74 61 62 73 20 6f 70 74 69 6f 6e 20 73 74 72 69  tabs option stri
2ac0: 6e 67 20 28 6d 61 6c 6c 6f 63 2d 65 64 29 2e 0a  ng (malloc-ed)..
2ad0: 09 09 09 09 20 2a 20 4e 55 4c 4c 20 6d 65 61 6e  .... * NULL mean
2ae0: 73 20 6f 70 74 69 6f 6e 20 6e 6f 74 20 73 70 65  s option not spe
2af0: 63 69 66 69 65 64 2e 20 2a 2f 0a 20 20 20 20 73  cified. */.    s
2b00: 74 72 75 63 74 20 54 6b 54 65 78 74 54 61 62 41  truct TkTextTabA
2b10: 72 72 61 79 20 2a 74 61 62 41 72 72 61 79 50 74  rray *tabArrayPt
2b20: 72 3b 0a 09 09 09 09 2f 2a 20 49 6e 66 6f 20 61  r;...../* Info a
2b30: 62 6f 75 74 20 74 61 62 73 20 66 6f 72 20 74 61  bout tabs for ta
2b40: 67 20 28 6d 61 6c 6c 6f 63 2d 65 64 29 0a 09 09  g (malloc-ed)...
2b50: 09 09 20 2a 20 6f 72 20 4e 55 4c 4c 2e 20 20 43  .. * or NULL.  C
2b60: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 61  orresponds to ta
2b70: 62 53 74 72 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  bString. */.    
2b80: 63 68 61 72 20 2a 75 6e 64 65 72 6c 69 6e 65 53  char *underlineS
2b90: 74 72 69 6e 67 3b 09 2f 2a 20 2d 75 6e 64 65 72  tring;./* -under
2ba0: 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 73 74 72 69  line option stri
2bb0: 6e 67 20 28 6d 61 6c 6c 6f 63 2d 65 64 29 2e 0a  ng (malloc-ed)..
2bc0: 09 09 09 09 20 2a 20 4e 55 4c 4c 20 6d 65 61 6e  .... * NULL mean
2bd0: 73 20 6f 70 74 69 6f 6e 20 6e 6f 74 20 73 70 65  s option not spe
2be0: 63 69 66 69 65 64 2e 20 2a 2f 0a 20 20 20 20 69  cified. */.    i
2bf0: 6e 74 20 75 6e 64 65 72 6c 69 6e 65 3b 09 09 2f  nt underline;../
2c00: 2a 20 4e 6f 6e 2d 7a 65 72 6f 20 6d 65 61 6e 73  * Non-zero means
2c10: 20 64 72 61 77 20 75 6e 64 65 72 6c 69 6e 65 20   draw underline 
2c20: 75 6e 64 65 72 6e 65 61 74 68 0a 09 09 09 09 20  underneath..... 
2c30: 2a 20 74 65 78 74 2e 20 20 4f 6e 6c 79 20 76 61  * text.  Only va
2c40: 6c 69 64 20 69 66 20 75 6e 64 65 72 6c 69 6e 65  lid if underline
2c50: 53 74 72 69 6e 67 20 69 73 0a 09 09 09 09 20 2a  String is..... *
2c60: 20 6e 6f 6e 2d 4e 55 4c 4c 2e 20 2a 2f 0a 20 20   non-NULL. */.  
2c70: 20 20 54 6b 5f 55 69 64 20 77 72 61 70 4d 6f 64    Tk_Uid wrapMod
2c80: 65 3b 09 09 2f 2a 20 48 6f 77 20 74 6f 20 68 61  e;../* How to ha
2c90: 6e 64 6c 65 20 77 72 61 70 2d 61 72 6f 75 6e 64  ndle wrap-around
2ca0: 20 66 6f 72 20 74 68 69 73 20 74 61 67 2e 0a 09   for this tag...
2cb0: 09 09 09 20 2a 20 4d 75 73 74 20 62 65 20 74 6b  ... * Must be tk
2cc0: 54 65 78 74 43 68 61 72 55 69 64 2c 20 74 6b 54  TextCharUid, tkT
2cd0: 65 78 74 4e 6f 6e 65 55 69 64 2c 0a 09 09 09 09  extNoneUid,.....
2ce0: 20 2a 20 74 6b 54 65 78 74 57 6f 72 64 55 69 64   * tkTextWordUid
2cf0: 2c 20 6f 72 20 4e 55 4c 4c 20 74 6f 20 75 73 65  , or NULL to use
2d00: 20 77 72 61 70 4d 6f 64 65 0a 09 09 09 09 20 2a   wrapMode..... *
2d10: 20 66 6f 72 20 77 68 6f 6c 65 20 77 69 64 67 65   for whole widge
2d20: 74 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 66  t. */.    int af
2d30: 66 65 63 74 73 44 69 73 70 6c 61 79 3b 09 09 2f  fectsDisplay;../
2d40: 2a 20 4e 6f 6e 2d 7a 65 72 6f 20 6d 65 61 6e 73  * Non-zero means
2d50: 20 74 68 61 74 20 74 68 69 73 20 74 61 67 20 61   that this tag a
2d60: 66 66 65 63 74 73 20 74 68 65 0a 09 09 09 09 20  ffects the..... 
2d70: 2a 20 77 61 79 20 69 6e 66 6f 72 6d 61 74 69 6f  * way informatio
2d80: 6e 20 69 73 20 64 69 73 70 6c 61 79 65 64 20 6f  n is displayed o
2d90: 6e 20 74 68 65 20 73 63 72 65 65 6e 0a 09 09 09  n the screen....
2da0: 09 20 2a 20 28 73 6f 20 6e 65 65 64 20 74 6f 20  . * (so need to 
2db0: 72 65 64 69 73 70 6c 61 79 20 69 66 20 74 61 67  redisplay if tag
2dc0: 20 63 68 61 6e 67 65 73 29 2e 20 2a 2f 0a 7d 20   changes). */.} 
2dd0: 54 6b 54 65 78 74 54 61 67 3b 0a 0a 23 64 65 66  TkTextTag;..#def
2de0: 69 6e 65 20 54 4b 5f 54 41 47 5f 41 46 46 45 43  ine TK_TAG_AFFEC
2df0: 54 53 5f 44 49 53 50 4c 41 59 09 30 78 31 0a 23  TS_DISPLAY.0x1.#
2e00: 64 65 66 69 6e 65 20 54 4b 5f 54 41 47 5f 55 4e  define TK_TAG_UN
2e10: 44 45 52 4c 49 4e 45 09 30 78 32 0a 23 64 65 66  DERLINE.0x2.#def
2e20: 69 6e 65 20 54 4b 5f 54 41 47 5f 4a 55 53 54 49  ine TK_TAG_JUSTI
2e30: 46 59 09 09 30 78 34 0a 23 64 65 66 69 6e 65 20  FY..0x4.#define 
2e40: 54 4b 5f 54 41 47 5f 4f 46 46 53 45 54 09 09 30  TK_TAG_OFFSET..0
2e50: 78 31 30 0a 0a 2f 2a 0a 20 2a 20 54 68 65 20 64  x10../*. * The d
2e60: 61 74 61 20 73 74 72 75 63 74 75 72 65 20 62 65  ata structure be
2e70: 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
2e80: 73 65 61 72 63 68 69 6e 67 20 61 20 42 2d 74 72  searching a B-tr
2e90: 65 65 20 66 6f 72 20 74 72 61 6e 73 69 74 69 6f  ee for transitio
2ea0: 6e 73 0a 20 2a 20 6f 6e 20 61 20 73 69 6e 67 6c  ns. * on a singl
2eb0: 65 20 74 61 67 20 28 6f 72 20 66 6f 72 20 61 6c  e tag (or for al
2ec0: 6c 20 74 61 67 20 74 72 61 6e 73 69 74 69 6f 6e  l tag transition
2ed0: 73 29 2e 20 20 4e 6f 20 63 6f 64 65 20 6f 75 74  s).  No code out
2ee0: 73 69 64 65 20 6f 66 0a 20 2a 20 74 6b 54 65 78  side of. * tkTex
2ef0: 74 42 54 72 65 65 2e 63 20 73 68 6f 75 6c 64 20  tBTree.c should 
2f00: 65 76 65 72 20 6d 6f 64 69 66 79 20 61 6e 79 20  ever modify any 
2f10: 6f 66 20 74 68 65 20 66 69 65 6c 64 73 20 69 6e  of the fields in
2f20: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
2f30: 73 2c 0a 20 2a 20 62 75 74 20 69 74 27 73 20 4f  s,. * but it's O
2f40: 4b 20 74 6f 20 75 73 65 20 74 68 65 6d 20 66 6f  K to use them fo
2f50: 72 20 72 65 61 64 2d 6f 6e 6c 79 20 69 6e 66 6f  r read-only info
2f60: 72 6d 61 74 69 6f 6e 2e 0a 20 2a 2f 0a 0a 74 79  rmation.. */..ty
2f70: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6b 54  pedef struct TkT
2f80: 65 78 74 53 65 61 72 63 68 20 7b 0a 20 20 20 20  extSearch {.    
2f90: 54 6b 54 65 78 74 49 6e 64 65 78 20 63 75 72 49  TkTextIndex curI
2fa0: 6e 64 65 78 3b 09 09 2f 2a 20 50 6f 73 69 74 69  ndex;../* Positi
2fb0: 6f 6e 20 6f 66 20 6c 61 73 74 20 74 61 67 20 74  on of last tag t
2fc0: 72 61 6e 73 69 74 69 6f 6e 0a 09 09 09 09 09 20  ransition...... 
2fd0: 2a 20 72 65 74 75 72 6e 65 64 20 62 79 20 54 6b  * returned by Tk
2fe0: 42 54 72 65 65 4e 65 78 74 54 61 67 2c 20 6f 72  BTreeNextTag, or
2ff0: 0a 09 09 09 09 09 20 2a 20 69 6e 64 65 78 20 6f  ...... * index o
3000: 66 20 73 74 61 72 74 20 6f 66 20 73 65 67 6d 65  f start of segme
3010: 6e 74 0a 09 09 09 09 09 20 2a 20 63 6f 6e 74 61  nt...... * conta
3020: 69 6e 69 6e 67 20 73 74 61 72 74 69 6e 67 20 70  ining starting p
3030: 6f 73 69 74 69 6f 6e 20 66 6f 72 0a 09 09 09 09  osition for.....
3040: 09 20 2a 20 73 65 61 72 63 68 20 69 66 20 54 6b  . * search if Tk
3050: 42 54 72 65 65 4e 65 78 74 54 61 67 20 68 61 73  BTreeNextTag has
3060: 6e 27 74 0a 09 09 09 09 09 20 2a 20 62 65 65 6e  n't...... * been
3070: 20 63 61 6c 6c 65 64 20 79 65 74 2c 20 6f 72 20   called yet, or 
3080: 73 61 6d 65 20 61 73 0a 09 09 09 09 09 20 2a 20  same as...... * 
3090: 73 74 6f 70 49 6e 64 65 78 20 69 66 20 73 65 61  stopIndex if sea
30a0: 72 63 68 20 69 73 20 6f 76 65 72 2e 20 2a 2f 0a  rch is over. */.
30b0: 20 20 20 20 54 6b 54 65 78 74 53 65 67 6d 65 6e      TkTextSegmen
30c0: 74 20 2a 73 65 67 50 74 72 3b 09 09 2f 2a 20 41  t *segPtr;../* A
30d0: 63 74 75 61 6c 20 74 61 67 20 73 65 67 6d 65 6e  ctual tag segmen
30e0: 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 6c 61  t returned by la
30f0: 73 74 0a 09 09 09 09 09 20 2a 20 63 61 6c 6c 20  st...... * call 
3100: 74 6f 20 54 6b 42 54 72 65 65 4e 65 78 74 54 61  to TkBTreeNextTa
3110: 67 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 0a 09 09  g, or NULL if...
3120: 09 09 09 20 2a 20 54 6b 42 54 72 65 65 4e 65 78  ... * TkBTreeNex
3130: 74 54 61 67 20 68 61 73 6e 27 74 20 72 65 74 75  tTag hasn't retu
3140: 72 6e 65 64 0a 09 09 09 09 09 20 2a 20 61 6e 79  rned...... * any
3150: 74 68 69 6e 67 20 79 65 74 2e 20 2a 2f 0a 20 20  thing yet. */.  
3160: 20 20 54 6b 54 65 78 74 53 65 67 6d 65 6e 74 20    TkTextSegment 
3170: 2a 6e 65 78 74 50 74 72 3b 09 09 2f 2a 20 57 68  *nextPtr;../* Wh
3180: 65 72 65 20 74 6f 20 72 65 73 75 6d 65 20 73 65  ere to resume se
3190: 61 72 63 68 20 69 6e 20 6e 65 78 74 0a 09 09 09  arch in next....
31a0: 09 09 20 2a 20 63 61 6c 6c 20 74 6f 20 54 6b 42  .. * call to TkB
31b0: 54 72 65 65 4e 65 78 74 54 61 67 2e 20 2a 2f 0a  TreeNextTag. */.
31c0: 20 20 20 20 54 6b 54 65 78 74 53 65 67 6d 65 6e      TkTextSegmen
31d0: 74 20 2a 6c 61 73 74 50 74 72 3b 09 09 2f 2a 20  t *lastPtr;../* 
31e0: 53 74 6f 70 20 73 65 61 72 63 68 20 62 65 66 6f  Stop search befo
31f0: 72 65 20 6a 75 73 74 20 62 65 66 6f 72 65 0a 09  re just before..
3200: 09 09 09 09 20 2a 20 63 6f 6e 73 69 64 65 72 69  .... * consideri
3210: 6e 67 20 74 68 69 73 20 73 65 67 6d 65 6e 74 2e  ng this segment.
3220: 20 2a 2f 0a 20 20 20 20 54 6b 54 65 78 74 54 61   */.    TkTextTa
3230: 67 20 2a 74 61 67 50 74 72 3b 09 09 09 2f 2a 20  g *tagPtr;.../* 
3240: 54 61 67 20 74 6f 20 73 65 61 72 63 68 20 66 6f  Tag to search fo
3250: 72 20 28 6f 72 20 74 61 67 20 66 6f 75 6e 64 2c  r (or tag found,
3260: 20 69 66 0a 09 09 09 09 09 20 2a 20 61 6c 6c 54   if...... * allT
3270: 61 67 73 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 29  ags is non-zero)
3280: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 69 6e  . */.    int lin
3290: 65 73 4c 65 66 74 3b 09 09 09 2f 2a 20 4c 69 6e  esLeft;.../* Lin
32a0: 65 73 20 6c 65 66 74 20 74 6f 20 73 65 61 72 63  es left to searc
32b0: 68 20 28 69 6e 63 6c 75 64 69 6e 67 0a 09 09 09  h (including....
32c0: 09 09 20 2a 20 63 75 72 49 6e 64 65 78 20 61 6e  .. * curIndex an
32d0: 64 20 73 74 6f 70 49 6e 64 65 78 29 2e 20 20 57  d stopIndex).  W
32e0: 68 65 6e 0a 09 09 09 09 09 20 2a 20 74 68 69 73  hen...... * this
32f0: 20 62 65 63 6f 6d 65 73 20 3c 3d 20 30 20 74 68   becomes <= 0 th
3300: 65 20 73 65 61 72 63 68 20 69 73 0a 09 09 09 09  e search is.....
3310: 09 20 2a 20 6f 76 65 72 2e 20 2a 2f 0a 20 20 20  . * over. */.   
3320: 20 69 6e 74 20 61 6c 6c 54 61 67 73 3b 09 09 09   int allTags;...
3330: 2f 2a 20 4e 6f 6e 2d 7a 65 72 6f 20 6d 65 61 6e  /* Non-zero mean
3340: 73 20 69 67 6e 6f 72 65 20 74 61 67 20 63 68 65  s ignore tag che
3350: 63 6b 3a 0a 09 09 09 09 09 20 2a 20 73 65 61 72  ck:...... * sear
3360: 63 68 20 66 6f 72 20 74 72 61 6e 73 69 74 69 6f  ch for transitio
3370: 6e 73 20 6f 6e 20 61 6c 6c 0a 09 09 09 09 09 20  ns on all...... 
3380: 2a 20 74 61 67 73 2e 20 2a 2f 0a 7d 20 54 6b 54  * tags. */.} TkT
3390: 65 78 74 53 65 61 72 63 68 3b 0a 0a 2f 2a 0a 20  extSearch;../*. 
33a0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
33b0: 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20 64  data structure d
33c0: 65 73 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c  escribes a singl
33d0: 65 20 74 61 62 20 73 74 6f 70 2e 0a 20 2a 2f 0a  e tab stop.. */.
33e0: 0a 74 79 70 65 64 65 66 20 65 6e 75 6d 20 7b 4c  .typedef enum {L
33f0: 45 46 54 2c 20 52 49 47 48 54 2c 20 43 45 4e 54  EFT, RIGHT, CENT
3400: 45 52 2c 20 4e 55 4d 45 52 49 43 7d 20 54 6b 54  ER, NUMERIC} TkT
3410: 65 78 74 54 61 62 41 6c 69 67 6e 3b 0a 0a 74 79  extTabAlign;..ty
3420: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6b 54  pedef struct TkT
3430: 65 78 74 54 61 62 20 7b 0a 20 20 20 20 69 6e 74  extTab {.    int
3440: 20 6c 6f 63 61 74 69 6f 6e 3b 09 09 09 2f 2a 20   location;.../* 
3450: 4f 66 66 73 65 74 20 69 6e 20 70 69 78 65 6c 73  Offset in pixels
3460: 20 6f 66 20 74 68 69 73 20 74 61 62 20 73 74 6f   of this tab sto
3470: 70 0a 09 09 09 09 09 20 2a 20 66 72 6f 6d 20 74  p...... * from t
3480: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 20 28  he left margin (
3490: 6c 6d 61 72 67 69 6e 32 29 20 6f 66 0a 09 09 09  lmargin2) of....
34a0: 09 09 20 2a 20 74 68 65 20 74 65 78 74 2e 20 2a  .. * the text. *
34b0: 2f 0a 20 20 20 20 54 6b 54 65 78 74 54 61 62 41  /.    TkTextTabA
34c0: 6c 69 67 6e 20 61 6c 69 67 6e 6d 65 6e 74 3b 09  lign alignment;.
34d0: 09 2f 2a 20 57 68 65 72 65 20 74 68 65 20 74 61  ./* Where the ta
34e0: 62 20 73 74 6f 70 20 61 70 70 65 61 72 73 20 72  b stop appears r
34f0: 65 6c 61 74 69 76 65 0a 09 09 09 09 09 20 2a 20  elative...... * 
3500: 74 6f 20 74 68 65 20 74 65 78 74 2e 20 2a 2f 0a  to the text. */.
3510: 7d 20 54 6b 54 65 78 74 54 61 62 3b 0a 0a 74 79  } TkTextTab;..ty
3520: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6b 54  pedef struct TkT
3530: 65 78 74 54 61 62 41 72 72 61 79 20 7b 0a 20 20  extTabArray {.  
3540: 20 20 69 6e 74 20 6e 75 6d 54 61 62 73 3b 09 09    int numTabs;..
3550: 09 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61  ./* Number of ta
3560: 62 20 73 74 6f 70 73 2e 20 2a 2f 0a 20 20 20 20  b stops. */.    
3570: 54 6b 54 65 78 74 54 61 62 20 74 61 62 73 5b 31  TkTextTab tabs[1
3580: 5d 3b 09 09 09 2f 2a 20 41 72 72 61 79 20 6f 66  ];.../* Array of
3590: 20 74 61 62 73 2e 20 20 54 68 65 20 61 63 74 75   tabs.  The actu
35a0: 61 6c 20 73 69 7a 65 0a 09 09 09 09 09 20 2a 20  al size...... * 
35b0: 77 69 6c 6c 20 62 65 20 6e 75 6d 54 61 62 73 2e  will be numTabs.
35c0: 20 20 54 48 49 53 20 46 49 45 4c 44 20 4d 55 53    THIS FIELD MUS
35d0: 54 0a 09 09 09 09 09 20 2a 20 42 45 20 54 48 45  T...... * BE THE
35e0: 20 4c 41 53 54 20 49 4e 20 54 48 45 20 53 54 52   LAST IN THE STR
35f0: 55 43 54 55 52 45 2e 20 2a 2f 0a 7d 20 54 6b 54  UCTURE. */.} TkT
3600: 65 78 74 54 61 62 41 72 72 61 79 3b 0a 0a 2f 2a  extTabArray;../*
3610: 0a 20 2a 20 41 20 64 61 74 61 20 73 74 72 75 63  . * A data struc
3620: 74 75 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ture of the foll
3630: 6f 77 69 6e 67 20 74 79 70 65 20 69 73 20 6b 65  owing type is ke
3640: 70 74 20 66 6f 72 20 65 61 63 68 20 74 65 78 74  pt for each text
3650: 20 77 69 64 67 65 74 20 74 68 61 74 0a 20 2a 20   widget that. * 
3660: 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 74 73  currently exists
3670: 20 66 6f 72 20 74 68 69 73 20 70 72 6f 63 65 73   for this proces
3680: 73 3a 0a 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20  s:. */..typedef 
3690: 73 74 72 75 63 74 20 54 6b 54 65 78 74 20 7b 0a  struct TkText {.
36a0: 20 20 20 20 54 6b 5f 57 69 6e 64 6f 77 20 74 6b      Tk_Window tk
36b0: 77 69 6e 3b 09 09 2f 2a 20 57 69 6e 64 6f 77 20  win;../* Window 
36c0: 74 68 61 74 20 65 6d 62 6f 64 69 65 73 20 74 68  that embodies th
36d0: 65 20 74 65 78 74 2e 20 20 4e 55 4c 4c 0a 09 09  e text.  NULL...
36e0: 09 09 20 2a 20 6d 65 61 6e 73 20 74 68 61 74 20  .. * means that 
36f0: 74 68 65 20 77 69 6e 64 6f 77 20 68 61 73 20 62  the window has b
3700: 65 65 6e 20 64 65 73 74 72 6f 79 65 64 0a 09 09  een destroyed...
3710: 09 09 20 2a 20 62 75 74 20 74 68 65 20 64 61 74  .. * but the dat
3720: 61 20 73 74 72 75 63 74 75 72 65 73 20 68 61 76  a structures hav
3730: 65 6e 27 74 20 79 65 74 20 62 65 65 6e 0a 09 09  en't yet been...
3740: 09 09 20 2a 20 63 6c 65 61 6e 65 64 20 75 70 2e  .. * cleaned up.
3750: 2a 2f 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72  */.    Tcl_Inter
3760: 70 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 49  p *interp;../* I
3770: 6e 74 65 72 70 72 65 74 65 72 20 61 73 73 6f 63  nterpreter assoc
3780: 69 61 74 65 64 20 77 69 74 68 20 77 69 64 67 65  iated with widge
3790: 74 2e 20 20 55 73 65 64 0a 09 09 09 09 20 2a 20  t.  Used..... * 
37a0: 74 6f 20 64 65 6c 65 74 65 20 77 69 64 67 65 74  to delete widget
37b0: 20 63 6f 6d 6d 61 6e 64 2e 20 20 2a 2f 0a 20 20   command.  */.  
37c0: 20 20 54 63 6c 5f 43 6f 6d 6d 61 6e 64 20 77 69    Tcl_Command wi
37d0: 64 67 65 74 43 6d 64 3b 09 2f 2a 20 54 6f 6b 65  dgetCmd;./* Toke
37e0: 6e 20 66 6f 72 20 74 65 78 74 27 73 20 77 69 64  n for text's wid
37f0: 67 65 74 20 63 6f 6d 6d 61 6e 64 2e 20 2a 2f 0a  get command. */.
3800: 20 20 20 20 54 6b 54 65 78 74 42 54 72 65 65 20      TkTextBTree 
3810: 74 72 65 65 3b 09 09 2f 2a 20 42 2d 74 72 65 65  tree;../* B-tree
3820: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
3830: 6f 66 20 74 65 78 74 20 61 6e 64 20 74 61 67 73  of text and tags
3840: 20 66 6f 72 0a 09 09 09 09 20 2a 20 77 69 64 67   for..... * widg
3850: 65 74 2e 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 48  et. */.    Tcl_H
3860: 61 73 68 54 61 62 6c 65 20 74 61 67 54 61 62 6c  ashTable tagTabl
3870: 65 3b 09 2f 2a 20 48 61 73 68 20 74 61 62 6c 65  e;./* Hash table
3880: 20 74 68 61 74 20 6d 61 70 73 20 66 72 6f 6d 20   that maps from 
3890: 74 61 67 20 6e 61 6d 65 73 20 74 6f 0a 09 09 09  tag names to....
38a0: 09 20 2a 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  . * pointers to 
38b0: 54 6b 54 65 78 74 54 61 67 20 73 74 72 75 63 74  TkTextTag struct
38c0: 75 72 65 73 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  ures. */.    int
38d0: 20 6e 75 6d 54 61 67 73 3b 09 09 2f 2a 20 4e 75   numTags;../* Nu
38e0: 6d 62 65 72 20 6f 66 20 74 61 67 73 20 63 75 72  mber of tags cur
38f0: 72 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 20 66  rently defined f
3900: 6f 72 0a 09 09 09 09 20 2a 20 77 69 64 67 65 74  or..... * widget
3910: 3b 20 20 6e 65 65 64 65 64 20 74 6f 20 6b 65 65  ;  needed to kee
3920: 70 20 74 72 61 63 6b 20 6f 66 0a 09 09 09 09 20  p track of..... 
3930: 2a 20 70 72 69 6f 72 69 74 69 65 73 2e 20 2a 2f  * priorities. */
3940: 0a 20 20 20 20 54 63 6c 5f 48 61 73 68 54 61 62  .    Tcl_HashTab
3950: 6c 65 20 6d 61 72 6b 54 61 62 6c 65 3b 09 2f 2a  le markTable;./*
3960: 20 48 61 73 68 20 74 61 62 6c 65 20 74 68 61 74   Hash table that
3970: 20 6d 61 70 73 20 66 72 6f 6d 20 6d 61 72 6b 20   maps from mark 
3980: 6e 61 6d 65 73 20 74 6f 0a 09 09 09 09 20 2a 20  names to..... * 
3990: 70 6f 69 6e 74 65 72 73 20 74 6f 20 6d 61 72 6b  pointers to mark
39a0: 20 73 65 67 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20   segments. */.  
39b0: 20 20 54 63 6c 5f 48 61 73 68 54 61 62 6c 65 20    Tcl_HashTable 
39c0: 77 69 6e 64 6f 77 54 61 62 6c 65 3b 09 2f 2a 20  windowTable;./* 
39d0: 48 61 73 68 20 74 61 62 6c 65 20 74 68 61 74 20  Hash table that 
39e0: 6d 61 70 73 20 66 72 6f 6d 20 77 69 6e 64 6f 77  maps from window
39f0: 20 6e 61 6d 65 73 0a 09 09 09 09 20 2a 20 74 6f   names..... * to
3a00: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 77 69 6e   pointers to win
3a10: 64 6f 77 20 73 65 67 6d 65 6e 74 73 2e 20 20 49  dow segments.  I
3a20: 66 20 61 0a 09 09 09 09 20 2a 20 77 69 6e 64 6f  f a..... * windo
3a30: 77 20 73 65 67 6d 65 6e 74 20 64 6f 65 73 6e 27  w segment doesn'
3a40: 74 20 79 65 74 20 68 61 76 65 20 61 6e 0a 09 09  t yet have an...
3a50: 09 09 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20  .. * associated 
3a60: 77 69 6e 64 6f 77 2c 20 74 68 65 72 65 20 69 73  window, there is
3a70: 20 6e 6f 20 65 6e 74 72 79 20 66 6f 72 0a 09 09   no entry for...
3a80: 09 09 20 2a 20 69 74 20 68 65 72 65 2e 20 2a 2f  .. * it here. */
3a90: 0a 20 20 20 20 54 6b 5f 55 69 64 20 73 74 61 74  .    Tk_Uid stat
3aa0: 65 3b 09 09 2f 2a 20 4e 6f 72 6d 61 6c 20 6f 72  e;../* Normal or
3ab0: 20 64 69 73 61 62 6c 65 64 2e 20 20 54 65 78 74   disabled.  Text
3ac0: 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 0a 09 09   is read-only...
3ad0: 09 09 20 2a 20 77 68 65 6e 20 64 69 73 61 62 6c  .. * when disabl
3ae0: 65 64 2e 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a 20  ed. */..    /*. 
3af0: 20 20 20 20 2a 20 44 65 66 61 75 6c 74 20 69 6e      * Default in
3b00: 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 64 69  formation for di
3b10: 73 70 6c 61 79 69 6e 67 20 28 6d 61 79 20 62 65  splaying (may be
3b20: 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74   overridden by t
3b30: 61 67 73 0a 20 20 20 20 20 2a 20 61 70 70 6c 69  ags.     * appli
3b40: 65 64 20 74 6f 20 72 61 6e 67 65 73 20 6f 66 20  ed to ranges of 
3b50: 63 68 61 72 61 63 74 65 72 73 29 2e 0a 20 20 20  characters)..   
3b60: 20 20 2a 2f 0a 0a 20 20 20 20 69 6e 74 20 62 6f    */..    int bo
3b70: 72 64 65 72 57 69 64 74 68 3b 09 09 2f 2a 20 57  rderWidth;../* W
3b80: 69 64 74 68 20 6f 66 20 33 2d 44 20 62 6f 72 64  idth of 3-D bord
3b90: 65 72 20 74 6f 20 64 72 61 77 20 61 72 6f 75 6e  er to draw aroun
3ba0: 64 20 65 6e 74 69 72 65 0a 09 09 09 09 20 2a 20  d entire..... * 
3bb0: 77 69 64 67 65 74 2e 20 2a 2f 0a 20 20 20 20 69  widget. */.    i
3bc0: 6e 74 20 70 61 64 58 2c 20 70 61 64 59 3b 09 09  nt padX, padY;..
3bd0: 2f 2a 20 50 61 64 64 69 6e 67 20 62 65 74 77 65  /* Padding betwe
3be0: 65 6e 20 74 65 78 74 20 61 6e 64 20 77 69 6e 64  en text and wind
3bf0: 6f 77 20 62 6f 72 64 65 72 2e 20 2a 2f 0a 20 20  ow border. */.  
3c00: 20 20 69 6e 74 20 73 70 61 63 69 6e 67 31 3b 09    int spacing1;.
3c10: 09 2f 2a 20 44 65 66 61 75 6c 74 20 65 78 74 72  ./* Default extr
3c20: 61 20 73 70 61 63 69 6e 67 20 61 62 6f 76 65 20  a spacing above 
3c30: 66 69 72 73 74 20 64 69 73 70 6c 61 79 0a 09 09  first display...
3c40: 09 09 20 2a 20 6c 69 6e 65 20 66 6f 72 20 65 61  .. * line for ea
3c50: 63 68 20 74 65 78 74 20 6c 69 6e 65 2e 20 2a 2f  ch text line. */
3c60: 0a 20 20 20 20 69 6e 74 20 73 70 61 63 69 6e 67  .    int spacing
3c70: 32 3b 09 09 2f 2a 20 44 65 66 61 75 6c 74 20 65  2;../* Default e
3c80: 78 74 72 61 20 73 70 61 63 69 6e 67 20 62 65 74  xtra spacing bet
3c90: 77 65 65 6e 20 64 69 73 70 6c 61 79 20 6c 69 6e  ween display lin
3ca0: 65 73 0a 09 09 09 09 20 2a 20 66 6f 72 20 74 68  es..... * for th
3cb0: 65 20 73 61 6d 65 20 74 65 78 74 20 6c 69 6e 65  e same text line
3cc0: 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 73 70 61  . */.    int spa
3cd0: 63 69 6e 67 33 3b 09 09 2f 2a 20 44 65 66 61 75  cing3;../* Defau
3ce0: 6c 74 20 65 78 74 72 61 20 73 70 61 63 69 6e 67  lt extra spacing
3cf0: 20 62 65 6c 6f 77 20 6c 61 73 74 20 64 69 73 70   below last disp
3d00: 6c 61 79 0a 09 09 09 09 20 2a 20 6c 69 6e 65 20  lay..... * line 
3d10: 66 6f 72 20 65 61 63 68 20 74 65 78 74 20 6c 69  for each text li
3d20: 6e 65 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ne. */.    char 
3d30: 2a 74 61 62 4f 70 74 69 6f 6e 53 74 72 69 6e 67  *tabOptionString
3d40: 3b 09 2f 2a 20 56 61 6c 75 65 20 6f 66 20 2d 74  ;./* Value of -t
3d50: 61 62 73 20 6f 70 74 69 6f 6e 20 73 74 72 69 6e  abs option strin
3d60: 67 20 28 6d 61 6c 6c 6f 63 27 65 64 29 2e 20 2a  g (malloc'ed). *
3d70: 2f 0a 20 20 20 20 54 6b 54 65 78 74 54 61 62 41  /.    TkTextTabA
3d80: 72 72 61 79 20 2a 74 61 62 41 72 72 61 79 50 74  rray *tabArrayPt
3d90: 72 3b 0a 09 09 09 09 2f 2a 20 49 6e 66 6f 72 6d  r;...../* Inform
3da0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 61 62 20  ation about tab 
3db0: 73 74 6f 70 73 20 28 6d 61 6c 6c 6f 63 27 65 64  stops (malloc'ed
3dc0: 29 2e 0a 09 09 09 09 20 2a 20 4e 55 4c 4c 20 6d  )...... * NULL m
3dd0: 65 61 6e 73 20 70 65 72 66 6f 72 6d 20 64 65 66  eans perform def
3de0: 61 75 6c 74 20 74 61 62 62 69 6e 67 0a 09 09 09  ault tabbing....
3df0: 09 20 2a 20 62 65 68 61 76 69 6f 72 2e 20 2a 2f  . * behavior. */
3e00: 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20  ..    /*.     * 
3e10: 41 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  Additional infor
3e20: 6d 61 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20  mation used for 
3e30: 64 69 73 70 6c 61 79 69 6e 67 3a 0a 20 20 20 20  displaying:.    
3e40: 20 2a 2f 0a 0a 20 20 20 20 54 6b 5f 55 69 64 20   */..    Tk_Uid 
3e50: 77 72 61 70 4d 6f 64 65 3b 09 09 2f 2a 20 48 6f  wrapMode;../* Ho
3e60: 77 20 74 6f 20 68 61 6e 64 6c 65 20 77 72 61 70  w to handle wrap
3e70: 2d 61 72 6f 75 6e 64 2e 20 20 4d 75 73 74 20 62  -around.  Must b
3e80: 65 0a 09 09 09 09 20 2a 20 74 6b 54 65 78 74 43  e..... * tkTextC
3e90: 68 61 72 55 69 64 2c 20 74 6b 54 65 78 74 4e 6f  harUid, tkTextNo
3ea0: 6e 65 55 69 64 2c 20 6f 72 0a 09 09 09 09 20 2a  neUid, or..... *
3eb0: 20 74 6b 54 65 78 74 57 6f 72 64 55 69 64 2e 20   tkTextWordUid. 
3ec0: 2a 2f 0a 20 20 20 20 69 6e 74 20 77 69 64 74 68  */.    int width
3ed0: 2c 20 68 65 69 67 68 74 3b 09 09 2f 2a 20 44 65  , height;../* De
3ee0: 73 69 72 65 64 20 64 69 6d 65 6e 73 69 6f 6e 73  sired dimensions
3ef0: 20 66 6f 72 20 77 69 6e 64 6f 77 2c 20 6d 65 61   for window, mea
3f00: 73 75 72 65 64 0a 09 09 09 09 20 2a 20 69 6e 20  sured..... * in 
3f10: 63 68 61 72 61 63 74 65 72 73 2e 20 2a 2f 0a 20  characters. */. 
3f20: 20 20 20 69 6e 74 20 70 72 65 76 57 69 64 74 68     int prevWidth
3f30: 2c 20 70 72 65 76 48 65 69 67 68 74 3b 09 2f 2a  , prevHeight;./*
3f40: 20 4c 61 73 74 20 6b 6e 6f 77 6e 20 64 69 6d 65   Last known dime
3f50: 6e 73 69 6f 6e 73 20 6f 66 20 77 69 6e 64 6f 77  nsions of window
3f60: 3b 20 20 75 73 65 64 20 74 6f 0a 09 09 09 09 20  ;  used to..... 
3f70: 2a 20 64 65 74 65 63 74 20 63 68 61 6e 67 65 73  * detect changes
3f80: 20 69 6e 20 73 69 7a 65 2e 20 2a 2f 0a 20 20 20   in size. */.   
3f90: 20 54 6b 54 65 78 74 49 6e 64 65 78 20 74 6f 70   TkTextIndex top
3fa0: 49 6e 64 65 78 3b 09 2f 2a 20 49 64 65 6e 74 69  Index;./* Identi
3fb0: 66 69 65 73 20 66 69 72 73 74 20 63 68 61 72 61  fies first chara
3fc0: 63 74 65 72 20 69 6e 20 74 6f 70 20 64 69 73 70  cter in top disp
3fd0: 6c 61 79 0a 09 09 09 09 20 2a 20 6c 69 6e 65 20  lay..... * line 
3fe0: 6f 66 20 77 69 6e 64 6f 77 2e 20 2a 2f 0a 20 20  of window. */.  
3ff0: 20 20 73 74 72 75 63 74 20 44 49 6e 66 6f 20 2a    struct DInfo *
4000: 64 49 6e 66 6f 50 74 72 3b 09 2f 2a 20 49 6e 66  dInfoPtr;./* Inf
4010: 6f 72 6d 61 74 69 6f 6e 20 6d 61 69 6e 74 61 69  ormation maintai
4020: 6e 65 64 20 62 79 20 74 6b 54 65 78 74 44 69 73  ned by tkTextDis
4030: 70 2e 63 2e 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a  p.c. */..    /*.
4040: 20 20 20 20 20 2a 20 49 6e 66 6f 72 6d 61 74 69       * Informati
4050: 6f 6e 20 72 65 6c 61 74 65 64 20 74 6f 20 73 65  on related to se
4060: 6c 65 63 74 69 6f 6e 2e 0a 20 20 20 20 20 2a 2f  lection..     */
4070: 0a 0a 20 20 20 20 54 6b 54 65 78 74 54 61 67 20  ..    TkTextTag 
4080: 2a 73 65 6c 54 61 67 50 74 72 3b 09 2f 2a 20 50  *selTagPtr;./* P
4090: 6f 69 6e 74 65 72 20 74 6f 20 22 73 65 6c 22 20  ointer to "sel" 
40a0: 74 61 67 2e 20 20 55 73 65 64 20 74 6f 20 74 65  tag.  Used to te
40b0: 6c 6c 20 77 68 65 6e 0a 09 09 09 09 20 2a 20 61  ll when..... * a
40c0: 20 6e 65 77 20 73 65 6c 65 63 74 69 6f 6e 20 68   new selection h
40d0: 61 73 20 62 65 65 6e 20 6d 61 64 65 2e 20 2a 2f  as been made. */
40e0: 0a 20 20 20 20 54 6b 54 65 78 74 49 6e 64 65 78  .    TkTextIndex
40f0: 20 73 65 6c 49 6e 64 65 78 3b 09 2f 2a 20 55 73   selIndex;./* Us
4100: 65 64 20 64 75 72 69 6e 67 20 6d 75 6c 74 69 2d  ed during multi-
4110: 70 61 73 73 20 73 65 6c 65 63 74 69 6f 6e 20 72  pass selection r
4120: 65 74 72 69 65 76 61 6c 73 2e 0a 09 09 09 09 20  etrievals...... 
4130: 2a 20 54 68 69 73 20 69 6e 64 65 78 20 69 64 65  * This index ide
4140: 6e 74 69 66 69 65 73 20 74 68 65 20 6e 65 78 74  ntifies the next
4150: 20 63 68 61 72 61 63 74 65 72 0a 09 09 09 09 20   character..... 
4160: 2a 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64  * to be returned
4170: 20 66 72 6f 6d 20 74 68 65 20 73 65 6c 65 63 74   from the select
4180: 69 6f 6e 2e 20 2a 2f 0a 0a 20 20 20 20 2f 2a 0a  ion. */..    /*.
4190: 20 20 20 20 20 2a 20 49 6e 66 6f 72 6d 61 74 69       * Informati
41a0: 6f 6e 20 72 65 6c 61 74 65 64 20 74 6f 20 69 6e  on related to in
41b0: 73 65 72 74 69 6f 6e 20 63 75 72 73 6f 72 3a 0a  sertion cursor:.
41c0: 20 20 20 20 20 2a 2f 0a 0a 20 20 20 20 54 6b 54       */..    TkT
41d0: 65 78 74 53 65 67 6d 65 6e 74 20 2a 69 6e 73 65  extSegment *inse
41e0: 72 74 4d 61 72 6b 50 74 72 3b 0a 09 09 09 09 2f  rtMarkPtr;...../
41f0: 2a 20 50 6f 69 6e 74 73 20 74 6f 20 73 65 67 6d  * Points to segm
4200: 65 6e 74 20 66 6f 72 20 22 69 6e 73 65 72 74 22  ent for "insert"
4210: 20 6d 61 72 6b 2e 20 2a 2f 0a 0a 20 20 20 20 2f   mark. */..    /
4220: 2a 0a 20 20 20 20 20 2a 20 4d 69 73 63 65 6c 6c  *.     * Miscell
4230: 61 6e 65 6f 75 73 20 61 64 64 69 74 69 6f 6e 61  aneous additiona
4240: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 20  l information:. 
4250: 20 20 20 20 2a 2f 0a 0a 20 20 20 20 63 68 61 72      */..    char
4260: 20 2a 74 61 6b 65 46 6f 63 75 73 3b 09 09 2f 2a   *takeFocus;../*
4270: 20 56 61 6c 75 65 20 6f 66 20 2d 74 61 6b 65 46   Value of -takeF
4280: 6f 63 75 73 20 6f 70 74 69 6f 6e 3b 20 20 6e 6f  ocus option;  no
4290: 74 20 75 73 65 64 20 69 6e 0a 09 09 09 09 20 2a  t used in..... *
42a0: 20 74 68 65 20 43 20 63 6f 64 65 2c 20 62 75 74   the C code, but
42b0: 20 75 73 65 64 20 62 79 20 6b 65 79 62 6f 61 72   used by keyboar
42c0: 64 20 74 72 61 76 65 72 73 61 6c 0a 09 09 09 09  d traversal.....
42d0: 20 2a 20 73 63 72 69 70 74 73 2e 20 20 4d 61 6c   * scripts.  Mal
42e0: 6c 6f 63 27 65 64 2c 20 62 75 74 20 6d 61 79 20  loc'ed, but may 
42f0: 62 65 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20  be NULL. */.    
4300: 63 68 61 72 20 2a 78 53 63 72 6f 6c 6c 43 6d 64  char *xScrollCmd
4310: 3b 09 09 2f 2a 20 50 72 65 66 69 78 20 6f 66 20  ;../* Prefix of 
4320: 63 6f 6d 6d 61 6e 64 20 74 6f 20 69 73 73 75 65  command to issue
4330: 20 74 6f 20 75 70 64 61 74 65 0a 09 09 09 09 20   to update..... 
4340: 2a 20 68 6f 72 69 7a 6f 6e 74 61 6c 20 73 63 72  * horizontal scr
4350: 6f 6c 6c 62 61 72 20 77 68 65 6e 20 76 69 65 77  ollbar when view
4360: 20 63 68 61 6e 67 65 73 2e 20 2a 2f 0a 20 20 20   changes. */.   
4370: 20 63 68 61 72 20 2a 79 53 63 72 6f 6c 6c 43 6d   char *yScrollCm
4380: 64 3b 09 09 2f 2a 20 50 72 65 66 69 78 20 6f 66  d;../* Prefix of
4390: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 69 73 73 75   command to issu
43a0: 65 20 74 6f 20 75 70 64 61 74 65 0a 09 09 09 09  e to update.....
43b0: 20 2a 20 76 65 72 74 69 63 61 6c 20 73 63 72 6f   * vertical scro
43c0: 6c 6c 62 61 72 20 77 68 65 6e 20 76 69 65 77 20  llbar when view 
43d0: 63 68 61 6e 67 65 73 2e 20 2a 2f 0a 20 20 20 20  changes. */.    
43e0: 69 6e 74 20 66 6c 61 67 73 3b 09 09 09 2f 2a 20  int flags;.../* 
43f0: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c  Miscellaneous fl
4400: 61 67 73 3b 20 20 73 65 65 20 62 65 6c 6f 77 20  ags;  see below 
4410: 66 6f 72 0a 09 09 09 09 20 2a 20 64 65 66 69 6e  for..... * defin
4420: 69 74 69 6f 6e 73 2e 20 2a 2f 0a 7d 20 54 6b 54  itions. */.} TkT
4430: 65 78 74 3b 0a 0a 2f 2a 0a 20 2a 20 46 6c 61 67  ext;../*. * Flag
4440: 20 76 61 6c 75 65 73 20 66 6f 72 20 54 6b 54 65   values for TkTe
4450: 78 74 20 72 65 63 6f 72 64 73 3a 0a 20 2a 0a 20  xt records:. *. 
4460: 2a 20 47 4f 54 5f 46 4f 43 55 53 3a 09 09 09 4e  * GOT_FOCUS:...N
4470: 6f 6e 2d 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68  on-zero means th
4480: 69 73 20 77 69 6e 64 6f 77 20 68 61 73 20 74 68  is window has th
4490: 65 20 69 6e 70 75 74 0a 20 2a 09 09 09 09 66 6f  e input. *....fo
44a0: 63 75 73 2e 0a 20 2a 20 55 50 44 41 54 45 5f 53  cus.. * UPDATE_S
44b0: 43 52 4f 4c 4c 42 41 52 53 3a 09 09 4e 6f 6e 2d  CROLLBARS:..Non-
44c0: 7a 65 72 6f 20 6d 65 61 6e 73 20 73 63 72 6f 6c  zero means scrol
44d0: 6c 62 61 72 28 73 29 20 73 68 6f 75 6c 64 20 62  lbar(s) should b
44e0: 65 20 75 70 64 61 74 65 64 0a 20 2a 09 09 09 09  e updated. *....
44f0: 64 75 72 69 6e 67 20 6e 65 78 74 20 72 65 64 69  during next redi
4500: 73 70 6c 61 79 20 6f 70 65 72 61 74 69 6f 6e 2e  splay operation.
4510: 0a 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 47 4f  . */..#define GO
4520: 54 5f 46 4f 43 55 53 09 09 34 0a 23 64 65 66 69  T_FOCUS..4.#defi
4530: 6e 65 20 55 50 44 41 54 45 5f 53 43 52 4f 4c 4c  ne UPDATE_SCROLL
4540: 42 41 52 53 09 30 78 31 30 0a 23 64 65 66 69 6e  BARS.0x10.#defin
4550: 65 20 4e 45 45 44 5f 52 45 50 49 43 4b 09 09 30  e NEED_REPICK..0
4560: 78 32 30 0a 0a 2f 2a 0a 20 2a 20 52 65 63 6f 72  x20../*. * Recor
4570: 64 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ds of the follow
4580: 69 6e 67 20 74 79 70 65 20 64 65 66 69 6e 65 20  ing type define 
4590: 73 65 67 6d 65 6e 74 20 74 79 70 65 73 20 69 6e  segment types in
45a0: 20 74 65 72 6d 73 20 6f 66 0a 20 2a 20 61 20 63   terms of. * a c
45b0: 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 20 70 72 6f  ollection of pro
45c0: 63 65 64 75 72 65 73 20 74 68 61 74 20 6d 61 79  cedures that may
45d0: 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 6d 61   be called to ma
45e0: 6e 69 70 75 6c 61 74 65 0a 20 2a 20 73 65 67 6d  nipulate. * segm
45f0: 65 6e 74 73 20 6f 66 20 74 68 61 74 20 74 79 70  ents of that typ
4600: 65 2e 0a 20 2a 2f 0a 0a 74 79 70 65 64 65 66 20  e.. */..typedef 
4610: 54 6b 54 65 78 74 53 65 67 6d 65 6e 74 20 2a 09  TkTextSegment *.
4620: 54 6b 5f 53 65 67 53 70 6c 69 74 50 72 6f 63 20  Tk_SegSplitProc 
4630: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 0a 09 09  _ANSI_ARGS_((...
4640: 09 20 20 20 20 73 74 72 75 63 74 20 54 6b 54 65  .    struct TkTe
4650: 78 74 53 65 67 6d 65 6e 74 20 2a 73 65 67 50 74  xtSegment *segPt
4660: 72 2c 20 69 6e 74 20 69 6e 64 65 78 29 29 3b 0a  r, int index));.
4670: 74 79 70 65 64 65 66 20 69 6e 74 09 09 54 6b 5f  typedef int..Tk_
4680: 53 65 67 44 65 6c 65 74 65 50 72 6f 63 20 5f 41  SegDeleteProc _A
4690: 4e 53 49 5f 41 52 47 53 5f 28 28 0a 09 09 09 20  NSI_ARGS_((.... 
46a0: 20 20 20 73 74 72 75 63 74 20 54 6b 54 65 78 74     struct TkText
46b0: 53 65 67 6d 65 6e 74 20 2a 73 65 67 50 74 72 2c  Segment *segPtr,
46c0: 0a 09 09 09 20 20 20 20 54 6b 54 65 78 74 4c 69  ....    TkTextLi
46d0: 6e 65 20 2a 6c 69 6e 65 50 74 72 2c 20 69 6e 74  ne *linePtr, int
46e0: 20 74 72 65 65 47 6f 6e 65 29 29 3b 0a 74 79 70   treeGone));.typ
46f0: 65 64 65 66 20 54 6b 54 65 78 74 53 65 67 6d 65  edef TkTextSegme
4700: 6e 74 20 2a 09 54 6b 5f 53 65 67 43 6c 65 61 6e  nt *.Tk_SegClean
4710: 75 70 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47  upProc _ANSI_ARG
4720: 53 5f 28 28 0a 09 09 09 20 20 20 20 73 74 72 75  S_((....    stru
4730: 63 74 20 54 6b 54 65 78 74 53 65 67 6d 65 6e 74  ct TkTextSegment
4740: 20 2a 73 65 67 50 74 72 2c 20 54 6b 54 65 78 74   *segPtr, TkText
4750: 4c 69 6e 65 20 2a 6c 69 6e 65 50 74 72 29 29 3b  Line *linePtr));
4760: 0a 74 79 70 65 64 65 66 20 76 6f 69 64 09 09 54  .typedef void..T
4770: 6b 5f 53 65 67 4c 69 6e 65 43 68 61 6e 67 65 50  k_SegLineChangeP
4780: 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  roc _ANSI_ARGS_(
4790: 28 0a 09 09 09 20 20 20 20 73 74 72 75 63 74 20  (....    struct 
47a0: 54 6b 54 65 78 74 53 65 67 6d 65 6e 74 20 2a 73  TkTextSegment *s
47b0: 65 67 50 74 72 2c 20 54 6b 54 65 78 74 4c 69 6e  egPtr, TkTextLin
47c0: 65 20 2a 6c 69 6e 65 50 74 72 29 29 3b 0a 74 79  e *linePtr));.ty
47d0: 70 65 64 65 66 20 69 6e 74 09 09 54 6b 5f 53 65  pedef int..Tk_Se
47e0: 67 4c 61 79 6f 75 74 50 72 6f 63 20 5f 41 4e 53  gLayoutProc _ANS
47f0: 49 5f 41 52 47 53 5f 28 28 73 74 72 75 63 74 20  I_ARGS_((struct 
4800: 54 6b 54 65 78 74 20 2a 74 65 78 74 50 74 72 2c  TkText *textPtr,
4810: 0a 09 09 09 20 20 20 20 73 74 72 75 63 74 20 54  ....    struct T
4820: 6b 54 65 78 74 49 6e 64 65 78 20 2a 69 6e 64 65  kTextIndex *inde
4830: 78 50 74 72 2c 20 54 6b 54 65 78 74 53 65 67 6d  xPtr, TkTextSegm
4840: 65 6e 74 20 2a 73 65 67 50 74 72 2c 0a 09 09 09  ent *segPtr,....
4850: 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 20      int offset, 
4860: 69 6e 74 20 6d 61 78 58 2c 20 69 6e 74 20 6d 61  int maxX, int ma
4870: 78 43 68 61 72 73 2c 0a 09 09 09 20 20 20 20 69  xChars,....    i
4880: 6e 74 20 6e 6f 43 68 61 72 73 59 65 74 2c 20 54  nt noCharsYet, T
4890: 6b 5f 55 69 64 20 77 72 61 70 4d 6f 64 65 2c 0a  k_Uid wrapMode,.
48a0: 09 09 09 20 20 20 20 73 74 72 75 63 74 20 54 6b  ...    struct Tk
48b0: 54 65 78 74 44 69 73 70 43 68 75 6e 6b 20 2a 63  TextDispChunk *c
48c0: 68 75 6e 6b 50 74 72 29 29 3b 0a 74 79 70 65 64  hunkPtr));.typed
48d0: 65 66 20 76 6f 69 64 09 09 54 6b 5f 53 65 67 43  ef void..Tk_SegC
48e0: 68 65 63 6b 50 72 6f 63 20 5f 41 4e 53 49 5f 41  heckProc _ANSI_A
48f0: 52 47 53 5f 28 28 54 6b 54 65 78 74 53 65 67 6d  RGS_((TkTextSegm
4900: 65 6e 74 20 2a 73 65 67 50 74 72 2c 0a 09 09 09  ent *segPtr,....
4910: 20 20 20 20 54 6b 54 65 78 74 4c 69 6e 65 20 2a      TkTextLine *
4920: 6c 69 6e 65 50 74 72 29 29 3b 0a 0a 74 79 70 65  linePtr));..type
4930: 64 65 66 20 73 74 72 75 63 74 20 54 6b 5f 53 65  def struct Tk_Se
4940: 67 54 79 70 65 20 7b 0a 20 20 20 20 63 68 61 72  gType {.    char
4950: 20 2a 6e 61 6d 65 3b 09 09 09 09 2f 2a 20 4e 61   *name;..../* Na
4960: 6d 65 20 6f 66 20 74 68 69 73 20 6b 69 6e 64 20  me of this kind 
4970: 6f 66 20 73 65 67 6d 65 6e 74 2e 20 2a 2f 0a 20  of segment. */. 
4980: 20 20 20 69 6e 74 20 6c 65 66 74 47 72 61 76 69     int leftGravi
4990: 74 79 3b 09 09 09 2f 2a 20 49 66 20 61 20 73 65  ty;.../* If a se
49a0: 67 6d 65 6e 74 20 68 61 73 20 7a 65 72 6f 20 73  gment has zero s
49b0: 69 7a 65 20 28 65 2e 67 2e 20 61 0a 09 09 09 09  ize (e.g. a.....
49c0: 09 20 2a 20 6d 61 72 6b 20 6f 72 20 74 61 67 20  . * mark or tag 
49d0: 74 6f 67 67 6c 65 29 2c 20 64 6f 65 73 20 69 74  toggle), does it
49e0: 0a 09 09 09 09 09 20 2a 20 61 74 74 61 63 68 20  ...... * attach 
49f0: 74 6f 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  to character to 
4a00: 69 74 73 20 6c 65 66 74 0a 09 09 09 09 09 20 2a  its left...... *
4a10: 20 6f 72 20 72 69 67 68 74 3f 20 20 31 20 6d 65   or right?  1 me
4a20: 61 6e 73 20 6c 65 66 74 2c 20 30 20 6d 65 61 6e  ans left, 0 mean
4a30: 73 0a 09 09 09 09 09 20 2a 20 72 69 67 68 74 2e  s...... * right.
4a40: 20 2a 2f 0a 20 20 20 20 54 6b 5f 53 65 67 53 70   */.    Tk_SegSp
4a50: 6c 69 74 50 72 6f 63 20 2a 73 70 6c 69 74 50 72  litProc *splitPr
4a60: 6f 63 3b 09 09 2f 2a 20 50 72 6f 63 65 64 75 72  oc;../* Procedur
4a70: 65 20 74 6f 20 73 70 6c 69 74 20 6c 61 72 67 65  e to split large
4a80: 20 73 65 67 6d 65 6e 74 0a 09 09 09 09 09 20 2a   segment...... *
4a90: 20 69 6e 74 6f 20 74 77 6f 20 73 6d 61 6c 6c 65   into two smalle
4aa0: 72 20 6f 6e 65 73 2e 20 2a 2f 0a 20 20 20 20 54  r ones. */.    T
4ab0: 6b 5f 53 65 67 44 65 6c 65 74 65 50 72 6f 63 20  k_SegDeleteProc 
4ac0: 2a 64 65 6c 65 74 65 50 72 6f 63 3b 09 2f 2a 20  *deleteProc;./* 
4ad0: 50 72 6f 63 65 64 75 72 65 20 74 6f 20 63 61 6c  Procedure to cal
4ae0: 6c 20 74 6f 20 64 65 6c 65 74 65 0a 09 09 09 09  l to delete.....
4af0: 09 20 2a 20 73 65 67 6d 65 6e 74 2e 20 2a 2f 0a  . * segment. */.
4b00: 20 20 20 20 54 6b 5f 53 65 67 43 6c 65 61 6e 75      Tk_SegCleanu
4b10: 70 50 72 6f 63 20 2a 63 6c 65 61 6e 75 70 50 72  pProc *cleanupPr
4b20: 6f 63 3b 09 2f 2a 20 41 66 74 65 72 20 61 6e 79  oc;./* After any
4b30: 20 63 68 61 6e 67 65 20 74 6f 20 61 20 6c 69 6e   change to a lin
4b40: 65 2c 20 74 68 69 73 0a 09 09 09 09 09 20 2a 20  e, this...... * 
4b50: 70 72 6f 63 65 64 75 72 65 20 69 73 20 69 6e 76  procedure is inv
4b60: 6f 6b 65 64 20 66 6f 72 20 61 6c 6c 0a 09 09 09  oked for all....
4b70: 09 09 20 2a 20 73 65 67 6d 65 6e 74 73 20 6c 65  .. * segments le
4b80: 66 74 20 69 6e 20 74 68 65 20 6c 69 6e 65 20 74  ft in the line t
4b90: 6f 0a 09 09 09 09 09 20 2a 20 70 65 72 66 6f 72  o...... * perfor
4ba0: 6d 20 61 6e 79 20 63 6c 65 61 6e 75 70 20 74 68  m any cleanup th
4bb0: 65 79 20 77 69 73 68 0a 09 09 09 09 09 20 2a 20  ey wish...... * 
4bc0: 28 65 2e 67 2e 20 6a 6f 69 6e 69 6e 67 20 6e 65  (e.g. joining ne
4bd0: 69 67 68 62 6f 72 69 6e 67 0a 09 09 09 09 09 20  ighboring...... 
4be0: 2a 20 73 65 67 6d 65 6e 74 73 29 2e 20 2a 2f 0a  * segments). */.
4bf0: 20 20 20 20 54 6b 5f 53 65 67 4c 69 6e 65 43 68      Tk_SegLineCh
4c00: 61 6e 67 65 50 72 6f 63 20 2a 6c 69 6e 65 43 68  angeProc *lineCh
4c10: 61 6e 67 65 50 72 6f 63 3b 0a 09 09 09 09 09 2f  angeProc;....../
4c20: 2a 20 49 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61  * Invoked when a
4c30: 20 73 65 67 6d 65 6e 74 20 69 73 20 61 62 6f 75   segment is abou
4c40: 74 0a 09 09 09 09 09 20 2a 20 74 6f 20 62 65 20  t...... * to be 
4c50: 6d 6f 76 65 64 20 66 72 6f 6d 20 69 74 73 20 63  moved from its c
4c60: 75 72 72 65 6e 74 20 6c 69 6e 65 0a 09 09 09 09  urrent line.....
4c70: 09 20 2a 20 74 6f 20 61 6e 20 65 61 72 6c 69 65  . * to an earlie
4c80: 72 20 6c 69 6e 65 20 62 65 63 61 75 73 65 20 6f  r line because o
4c90: 66 0a 09 09 09 09 09 20 2a 20 61 20 64 65 6c 65  f...... * a dele
4ca0: 74 69 6f 6e 2e 20 20 54 68 65 20 6c 69 6e 65 50  tion.  The lineP
4cb0: 74 72 20 69 73 20 74 68 61 74 0a 09 09 09 09 09  tr is that......
4cc0: 20 2a 20 66 6f 72 20 74 68 65 20 73 65 67 6d 65   * for the segme
4cd0: 6e 74 27 73 20 6f 6c 64 20 6c 69 6e 65 2e 0a 09  nt's old line...
4ce0: 09 09 09 09 20 2a 20 43 6c 65 61 6e 75 70 50 72  .... * CleanupPr
4cf0: 6f 63 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  oc will be invok
4d00: 65 64 20 61 66 74 65 72 0a 09 09 09 09 09 20 2a  ed after...... *
4d10: 20 74 68 65 20 64 65 6c 65 74 69 6f 6e 20 69 73   the deletion is
4d20: 20 66 69 6e 69 73 68 65 64 2e 20 2a 2f 0a 20 20   finished. */.  
4d30: 20 20 54 6b 5f 53 65 67 4c 61 79 6f 75 74 50 72    Tk_SegLayoutPr
4d40: 6f 63 20 2a 6c 61 79 6f 75 74 50 72 6f 63 3b 09  oc *layoutProc;.
4d50: 2f 2a 20 52 65 74 75 72 6e 73 20 73 69 7a 65 20  /* Returns size 
4d60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 68 65 6e  information when
4d70: 0a 09 09 09 09 09 20 2a 20 66 69 67 75 72 69 6e  ...... * figurin
4d80: 67 20 6f 75 74 20 77 68 61 74 20 74 6f 20 64 69  g out what to di
4d90: 73 70 6c 61 79 20 69 6e 0a 09 09 09 09 09 20 2a  splay in...... *
4da0: 20 77 69 6e 64 6f 77 2e 20 2a 2f 0a 20 20 20 20   window. */.    
4db0: 54 6b 5f 53 65 67 43 68 65 63 6b 50 72 6f 63 20  Tk_SegCheckProc 
4dc0: 2a 63 68 65 63 6b 50 72 6f 63 3b 09 09 2f 2a 20  *checkProc;../* 
4dd0: 43 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 63 6f  Called during co
4de0: 6e 73 69 73 74 65 6e 63 79 20 63 68 65 63 6b 73  nsistency checks
4df0: 0a 09 09 09 09 09 20 2a 20 74 6f 20 63 68 65 63  ...... * to chec
4e00: 6b 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 69  k internal consi
4e10: 73 74 65 6e 63 79 20 6f 66 0a 09 09 09 09 09 20  stency of...... 
4e20: 2a 20 73 65 67 6d 65 6e 74 2e 20 2a 2f 0a 7d 20  * segment. */.} 
4e30: 54 6b 5f 53 65 67 54 79 70 65 3b 0a 0a 2f 2a 0a  Tk_SegType;../*.
4e40: 20 2a 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20   * The constant 
4e50: 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 74 6f  below is used to
4e60: 20 73 70 65 63 69 66 79 20 61 20 6c 69 6e 65 20   specify a line 
4e70: 77 68 65 6e 20 77 68 61 74 20 69 73 20 72 65 61  when what is rea
4e80: 6c 6c 79 0a 20 2a 20 77 61 6e 74 65 64 20 69 73  lly. * wanted is
4e90: 20 74 68 65 20 65 6e 74 69 72 65 20 74 65 78 74   the entire text
4ea0: 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 73 74  .  For now, just
4eb0: 20 75 73 65 20 61 20 76 65 72 79 20 62 69 67 20   use a very big 
4ec0: 6e 75 6d 62 65 72 2e 0a 20 2a 2f 0a 0a 23 64 65  number.. */..#de
4ed0: 66 69 6e 65 20 54 4b 5f 45 4e 44 5f 4f 46 5f 54  fine TK_END_OF_T
4ee0: 45 58 54 20 31 30 30 30 30 30 30 0a 0a 2f 2a 0a  EXT 1000000../*.
4ef0: 20 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67   * The following
4f00: 20 64 65 66 69 6e 69 74 69 6f 6e 20 73 70 65 63   definition spec
4f10: 69 66 69 65 73 20 74 68 65 20 6d 61 78 69 6d 75  ifies the maximu
4f20: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  m number of char
4f30: 61 63 74 65 72 73 0a 20 2a 20 6e 65 65 64 65 64  acters. * needed
4f40: 20 69 6e 20 61 20 73 74 72 69 6e 67 20 74 6f 20   in a string to 
4f50: 68 6f 6c 64 20 61 20 70 6f 73 69 74 69 6f 6e 20  hold a position 
4f60: 73 70 65 63 69 66 69 65 72 2e 0a 20 2a 2f 0a 0a  specifier.. */..
4f70: 23 64 65 66 69 6e 65 20 54 4b 5f 50 4f 53 5f 43  #define TK_POS_C
4f80: 48 41 52 53 20 33 30 0a 0a 2f 2a 0a 20 2a 20 44  HARS 30../*. * D
4f90: 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
4fa0: 76 61 72 69 61 62 6c 65 73 20 73 68 61 72 65 64  variables shared
4fb0: 20 61 6d 6f 6e 67 20 74 68 65 20 74 65 78 74 2d   among the text-
4fc0: 72 65 6c 61 74 65 64 20 66 69 6c 65 73 3a 0a 20  related files:. 
4fd0: 2a 2f 0a 0a 65 78 74 65 72 6e 20 69 6e 74 09 09  */..extern int..
4fe0: 74 6b 42 54 72 65 65 44 65 62 75 67 3b 0a 65 78  tkBTreeDebug;.ex
4ff0: 74 65 72 6e 20 69 6e 74 09 09 74 6b 54 65 78 74  tern int..tkText
5000: 44 65 62 75 67 3b 0a 65 78 74 65 72 6e 20 54 6b  Debug;.extern Tk
5010: 5f 53 65 67 54 79 70 65 09 74 6b 54 65 78 74 43  _SegType.tkTextC
5020: 68 61 72 54 79 70 65 3b 0a 65 78 74 65 72 6e 20  harType;.extern 
5030: 54 6b 5f 55 69 64 09 09 74 6b 54 65 78 74 43 68  Tk_Uid..tkTextCh
5040: 61 72 55 69 64 3b 0a 65 78 74 65 72 6e 20 54 6b  arUid;.extern Tk
5050: 5f 55 69 64 09 09 74 6b 54 65 78 74 44 69 73 61  _Uid..tkTextDisa
5060: 62 6c 65 64 55 69 64 3b 0a 65 78 74 65 72 6e 20  bledUid;.extern 
5070: 54 6b 5f 53 65 67 54 79 70 65 09 74 6b 54 65 78  Tk_SegType.tkTex
5080: 74 4c 65 66 74 4d 61 72 6b 54 79 70 65 3b 0a 65  tLeftMarkType;.e
5090: 78 74 65 72 6e 20 54 6b 5f 55 69 64 09 09 74 6b  xtern Tk_Uid..tk
50a0: 54 65 78 74 4e 6f 6e 65 55 69 64 3b 0a 65 78 74  TextNoneUid;.ext
50b0: 65 72 6e 20 54 6b 5f 55 69 64 20 09 09 74 6b 54  ern Tk_Uid ..tkT
50c0: 65 78 74 4e 6f 72 6d 61 6c 55 69 64 3b 0a 65 78  extNormalUid;.ex
50d0: 74 65 72 6e 20 54 6b 5f 53 65 67 54 79 70 65 09  tern Tk_SegType.
50e0: 74 6b 54 65 78 74 52 69 67 68 74 4d 61 72 6b 54  tkTextRightMarkT
50f0: 79 70 65 3b 0a 65 78 74 65 72 6e 20 54 6b 5f 53  ype;.extern Tk_S
5100: 65 67 54 79 70 65 09 74 6b 54 65 78 74 54 6f 67  egType.tkTextTog
5110: 67 6c 65 4f 6e 54 79 70 65 3b 0a 65 78 74 65 72  gleOnType;.exter
5120: 6e 20 54 6b 5f 53 65 67 54 79 70 65 09 74 6b 54  n Tk_SegType.tkT
5130: 65 78 74 54 6f 67 67 6c 65 4f 66 66 54 79 70 65  extToggleOffType
5140: 3b 0a 65 78 74 65 72 6e 20 54 6b 5f 55 69 64 09  ;.extern Tk_Uid.
5150: 09 74 6b 54 65 78 74 57 6f 72 64 55 69 64 3b 0a  .tkTextWordUid;.
5160: 0a 2f 2a 0a 20 2a 20 44 65 63 6c 61 72 61 74 69  ./*. * Declarati
5170: 6f 6e 73 20 66 6f 72 20 70 72 6f 63 65 64 75 72  ons for procedur
5180: 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  es that are used
5190: 20 62 79 20 74 68 65 20 74 65 78 74 2d 72 65 6c   by the text-rel
51a0: 61 74 65 64 20 66 69 6c 65 73 0a 20 2a 20 62 75  ated files. * bu
51b0: 74 20 73 68 6f 75 6c 64 6e 27 74 20 62 65 20 75  t shouldn't be u
51c0: 73 65 64 20 61 6e 79 77 68 65 72 65 20 65 6c 73  sed anywhere els
51d0: 65 20 69 6e 20 54 6b 20 28 6f 72 20 62 79 20 54  e in Tk (or by T
51e0: 6b 20 63 6c 69 65 6e 74 73 29 3a 0a 20 2a 2f 0a  k clients):. */.
51f0: 0a 65 78 74 65 72 6e 20 69 6e 74 09 09 54 6b 42  .extern int..TkB
5200: 54 72 65 65 43 68 61 72 54 61 67 67 65 64 20 5f  TreeCharTagged _
5210: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65  ANSI_ARGS_((TkTe
5220: 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78 50 74  xtIndex *indexPt
5230: 72 2c 0a 09 09 09 20 20 20 20 54 6b 54 65 78 74  r,....    TkText
5240: 54 61 67 20 2a 74 61 67 50 74 72 29 29 3b 0a 65  Tag *tagPtr));.e
5250: 78 74 65 72 6e 20 76 6f 69 64 09 09 54 6b 42 54  xtern void..TkBT
5260: 72 65 65 43 68 65 63 6b 20 5f 41 4e 53 49 5f 41  reeCheck _ANSI_A
5270: 52 47 53 5f 28 28 54 6b 54 65 78 74 42 54 72 65  RGS_((TkTextBTre
5280: 65 20 74 72 65 65 29 29 3b 0a 65 78 74 65 72 6e  e tree));.extern
5290: 20 69 6e 74 09 09 54 6b 42 54 72 65 65 43 68 61   int..TkBTreeCha
52a0: 72 73 49 6e 4c 69 6e 65 20 5f 41 4e 53 49 5f 41  rsInLine _ANSI_A
52b0: 52 47 53 5f 28 28 54 6b 54 65 78 74 4c 69 6e 65  RGS_((TkTextLine
52c0: 20 2a 6c 69 6e 65 50 74 72 29 29 3b 0a 65 78 74   *linePtr));.ext
52d0: 65 72 6e 20 54 6b 54 65 78 74 42 54 72 65 65 09  ern TkTextBTree.
52e0: 54 6b 42 54 72 65 65 43 72 65 61 74 65 20 5f 41  TkBTreeCreate _A
52f0: 4e 53 49 5f 41 52 47 53 5f 28 28 76 6f 69 64 29  NSI_ARGS_((void)
5300: 29 3b 0a 65 78 74 65 72 6e 20 76 6f 69 64 09 09  );.extern void..
5310: 54 6b 42 54 72 65 65 44 65 73 74 72 6f 79 20 5f  TkBTreeDestroy _
5320: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65  ANSI_ARGS_((TkTe
5330: 78 74 42 54 72 65 65 20 74 72 65 65 29 29 3b 0a  xtBTree tree));.
5340: 65 78 74 65 72 6e 20 76 6f 69 64 09 09 54 6b 42  extern void..TkB
5350: 54 72 65 65 44 65 6c 65 74 65 43 68 61 72 73 20  TreeDeleteChars 
5360: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 54  _ANSI_ARGS_((TkT
5370: 65 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78 31  extIndex *index1
5380: 50 74 72 2c 0a 09 09 09 20 20 20 20 54 6b 54 65  Ptr,....    TkTe
5390: 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78 32 50  xtIndex *index2P
53a0: 74 72 29 29 3b 0a 65 78 74 65 72 6e 20 54 6b 54  tr));.extern TkT
53b0: 65 78 74 4c 69 6e 65 20 2a 09 54 6b 42 54 72 65  extLine *.TkBTre
53c0: 65 46 69 6e 64 4c 69 6e 65 20 5f 41 4e 53 49 5f  eFindLine _ANSI_
53d0: 41 52 47 53 5f 28 28 54 6b 54 65 78 74 42 54 72  ARGS_((TkTextBTr
53e0: 65 65 20 74 72 65 65 2c 0a 09 09 09 20 20 20 20  ee tree,....    
53f0: 69 6e 74 20 6c 69 6e 65 29 29 3b 0a 65 78 74 65  int line));.exte
5400: 72 6e 20 54 6b 54 65 78 74 54 61 67 20 2a 2a 09  rn TkTextTag **.
5410: 54 6b 42 54 72 65 65 47 65 74 54 61 67 73 20 5f  TkBTreeGetTags _
5420: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65  ANSI_ARGS_((TkTe
5430: 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78 50 74  xtIndex *indexPt
5440: 72 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 2a 6e  r,....    int *n
5450: 75 6d 54 61 67 73 50 74 72 29 29 3b 0a 65 78 74  umTagsPtr));.ext
5460: 65 72 6e 20 76 6f 69 64 09 09 54 6b 42 54 72 65  ern void..TkBTre
5470: 65 49 6e 73 65 72 74 43 68 61 72 73 20 5f 41 4e  eInsertChars _AN
5480: 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65 78 74  SI_ARGS_((TkText
5490: 49 6e 64 65 78 20 2a 69 6e 64 65 78 50 74 72 2c  Index *indexPtr,
54a0: 0a 09 09 09 20 20 20 20 63 68 61 72 20 2a 73 74  ....    char *st
54b0: 72 69 6e 67 29 29 3b 0a 65 78 74 65 72 6e 20 69  ring));.extern i
54c0: 6e 74 09 09 54 6b 42 54 72 65 65 4c 69 6e 65 49  nt..TkBTreeLineI
54d0: 6e 64 65 78 20 5f 41 4e 53 49 5f 41 52 47 53 5f  ndex _ANSI_ARGS_
54e0: 28 28 54 6b 54 65 78 74 4c 69 6e 65 20 2a 6c 69  ((TkTextLine *li
54f0: 6e 65 50 74 72 29 29 3b 0a 65 78 74 65 72 6e 20  nePtr));.extern 
5500: 76 6f 69 64 09 09 54 6b 42 54 72 65 65 4c 69 6e  void..TkBTreeLin
5510: 6b 53 65 67 6d 65 6e 74 20 5f 41 4e 53 49 5f 41  kSegment _ANSI_A
5520: 52 47 53 5f 28 28 54 6b 54 65 78 74 53 65 67 6d  RGS_((TkTextSegm
5530: 65 6e 74 20 2a 73 65 67 50 74 72 2c 0a 09 09 09  ent *segPtr,....
5540: 20 20 20 20 54 6b 54 65 78 74 49 6e 64 65 78 20      TkTextIndex 
5550: 2a 69 6e 64 65 78 50 74 72 29 29 3b 0a 65 78 74  *indexPtr));.ext
5560: 65 72 6e 20 54 6b 54 65 78 74 4c 69 6e 65 20 2a  ern TkTextLine *
5570: 09 54 6b 42 54 72 65 65 4e 65 78 74 4c 69 6e 65  .TkBTreeNextLine
5580: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b   _ANSI_ARGS_((Tk
5590: 54 65 78 74 4c 69 6e 65 20 2a 6c 69 6e 65 50 74  TextLine *linePt
55a0: 72 29 29 3b 0a 65 78 74 65 72 6e 20 69 6e 74 09  r));.extern int.
55b0: 09 54 6b 42 54 72 65 65 4e 65 78 74 54 61 67 20  .TkBTreeNextTag 
55c0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 54  _ANSI_ARGS_((TkT
55d0: 65 78 74 53 65 61 72 63 68 20 2a 73 65 61 72 63  extSearch *searc
55e0: 68 50 74 72 29 29 3b 0a 65 78 74 65 72 6e 20 69  hPtr));.extern i
55f0: 6e 74 09 09 54 6b 42 54 72 65 65 4e 75 6d 4c 69  nt..TkBTreeNumLi
5600: 6e 65 73 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  nes _ANSI_ARGS_(
5610: 28 54 6b 54 65 78 74 42 54 72 65 65 20 74 72 65  (TkTextBTree tre
5620: 65 29 29 3b 0a 65 78 74 65 72 6e 20 76 6f 69 64  e));.extern void
5630: 09 09 54 6b 42 54 72 65 65 53 74 61 72 74 53 65  ..TkBTreeStartSe
5640: 61 72 63 68 20 5f 41 4e 53 49 5f 41 52 47 53 5f  arch _ANSI_ARGS_
5650: 28 28 54 6b 54 65 78 74 49 6e 64 65 78 20 2a 69  ((TkTextIndex *i
5660: 6e 64 65 78 31 50 74 72 2c 0a 09 09 09 20 20 20  ndex1Ptr,....   
5670: 20 54 6b 54 65 78 74 49 6e 64 65 78 20 2a 69 6e   TkTextIndex *in
5680: 64 65 78 32 50 74 72 2c 20 54 6b 54 65 78 74 54  dex2Ptr, TkTextT
5690: 61 67 20 2a 74 61 67 50 74 72 2c 0a 09 09 09 20  ag *tagPtr,.... 
56a0: 20 20 20 54 6b 54 65 78 74 53 65 61 72 63 68 20     TkTextSearch 
56b0: 2a 73 65 61 72 63 68 50 74 72 29 29 3b 0a 65 78  *searchPtr));.ex
56c0: 74 65 72 6e 20 76 6f 69 64 09 09 54 6b 42 54 72  tern void..TkBTr
56d0: 65 65 54 61 67 20 5f 41 4e 53 49 5f 41 52 47 53  eeTag _ANSI_ARGS
56e0: 5f 28 28 54 6b 54 65 78 74 49 6e 64 65 78 20 2a  _((TkTextIndex *
56f0: 69 6e 64 65 78 31 50 74 72 2c 0a 09 09 09 20 20  index1Ptr,....  
5700: 20 20 54 6b 54 65 78 74 49 6e 64 65 78 20 2a 69    TkTextIndex *i
5710: 6e 64 65 78 32 50 74 72 2c 20 54 6b 54 65 78 74  ndex2Ptr, TkText
5720: 54 61 67 20 2a 74 61 67 50 74 72 2c 0a 09 09 09  Tag *tagPtr,....
5730: 20 20 20 20 69 6e 74 20 61 64 64 29 29 3b 0a 65      int add));.e
5740: 78 74 65 72 6e 20 76 6f 69 64 09 09 54 6b 42 54  xtern void..TkBT
5750: 72 65 65 55 6e 6c 69 6e 6b 53 65 67 6d 65 6e 74  reeUnlinkSegment
5760: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b   _ANSI_ARGS_((Tk
5770: 54 65 78 74 42 54 72 65 65 20 74 72 65 65 2c 0a  TextBTree tree,.
5780: 09 09 09 20 20 20 20 54 6b 54 65 78 74 53 65 67  ...    TkTextSeg
5790: 6d 65 6e 74 20 2a 73 65 67 50 74 72 2c 20 54 6b  ment *segPtr, Tk
57a0: 54 65 78 74 4c 69 6e 65 20 2a 6c 69 6e 65 50 74  TextLine *linePt
57b0: 72 29 29 3b 0a 65 78 74 65 72 6e 20 76 6f 69 64  r));.extern void
57c0: 09 09 54 6b 54 65 78 74 43 68 61 6e 67 65 64 20  ..TkTextChanged 
57d0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 54  _ANSI_ARGS_((TkT
57e0: 65 78 74 20 2a 74 65 78 74 50 74 72 2c 0a 09 09  ext *textPtr,...
57f0: 09 20 20 20 20 54 6b 54 65 78 74 49 6e 64 65 78  .    TkTextIndex
5800: 20 2a 69 6e 64 65 78 31 50 74 72 2c 20 54 6b 54   *index1Ptr, TkT
5810: 65 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78 32  extIndex *index2
5820: 50 74 72 29 29 3b 0a 65 78 74 65 72 6e 20 69 6e  Ptr));.extern in
5830: 74 09 09 54 6b 54 65 78 74 43 68 61 72 42 62 6f  t..TkTextCharBbo
5840: 78 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54  x _ANSI_ARGS_((T
5850: 6b 54 65 78 74 20 2a 74 65 78 74 50 74 72 2c 0a  kText *textPtr,.
5860: 09 09 09 20 20 20 20 54 6b 54 65 78 74 49 6e 64  ...    TkTextInd
5870: 65 78 20 2a 69 6e 64 65 78 50 74 72 2c 20 69 6e  ex *indexPtr, in
5880: 74 20 2a 78 50 74 72 2c 20 69 6e 74 20 2a 79 50  t *xPtr, int *yP
5890: 74 72 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 2a  tr,....    int *
58a0: 77 69 64 74 68 50 74 72 2c 20 69 6e 74 20 2a 68  widthPtr, int *h
58b0: 65 69 67 68 74 50 74 72 29 29 3b 0a 65 78 74 65  eightPtr));.exte
58c0: 72 6e 20 69 6e 74 09 09 54 6b 54 65 78 74 43 68  rn int..TkTextCh
58d0: 61 72 4c 61 79 6f 75 74 50 72 6f 63 20 5f 41 4e  arLayoutProc _AN
58e0: 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65 78 74  SI_ARGS_((TkText
58f0: 20 2a 74 65 78 74 50 74 72 2c 0a 09 09 09 20 20   *textPtr,....  
5900: 20 20 54 6b 54 65 78 74 49 6e 64 65 78 20 2a 69    TkTextIndex *i
5910: 6e 64 65 78 50 74 72 2c 20 54 6b 54 65 78 74 53  ndexPtr, TkTextS
5920: 65 67 6d 65 6e 74 20 2a 73 65 67 50 74 72 2c 0a  egment *segPtr,.
5930: 09 09 09 20 20 20 20 69 6e 74 20 6f 66 66 73 65  ...    int offse
5940: 74 2c 20 69 6e 74 20 6d 61 78 58 2c 20 69 6e 74  t, int maxX, int
5950: 20 6d 61 78 43 68 61 72 73 2c 20 69 6e 74 20 6e   maxChars, int n
5960: 6f 42 72 65 61 6b 59 65 74 2c 0a 09 09 09 20 20  oBreakYet,....  
5970: 20 20 54 6b 5f 55 69 64 20 77 72 61 70 4d 6f 64    Tk_Uid wrapMod
5980: 65 2c 20 54 6b 54 65 78 74 44 69 73 70 43 68 75  e, TkTextDispChu
5990: 6e 6b 20 2a 63 68 75 6e 6b 50 74 72 29 29 3b 0a  nk *chunkPtr));.
59a0: 65 78 74 65 72 6e 20 76 6f 69 64 09 09 54 6b 54  extern void..TkT
59b0: 65 78 74 43 72 65 61 74 65 44 49 6e 66 6f 20 5f  extCreateDInfo _
59c0: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65  ANSI_ARGS_((TkTe
59d0: 78 74 20 2a 74 65 78 74 50 74 72 29 29 3b 0a 65  xt *textPtr));.e
59e0: 78 74 65 72 6e 20 69 6e 74 09 09 54 6b 54 65 78  xtern int..TkTex
59f0: 74 44 4c 69 6e 65 49 6e 66 6f 20 5f 41 4e 53 49  tDLineInfo _ANSI
5a00: 5f 41 52 47 53 5f 28 28 54 6b 54 65 78 74 20 2a  _ARGS_((TkText *
5a10: 74 65 78 74 50 74 72 2c 0a 09 09 09 20 20 20 20  textPtr,....    
5a20: 54 6b 54 65 78 74 49 6e 64 65 78 20 2a 69 6e 64  TkTextIndex *ind
5a30: 65 78 50 74 72 2c 20 69 6e 74 20 2a 78 50 74 72  exPtr, int *xPtr
5a40: 2c 20 69 6e 74 20 2a 79 50 74 72 2c 0a 09 09 09  , int *yPtr,....
5a50: 20 20 20 20 69 6e 74 20 2a 77 69 64 74 68 50 74      int *widthPt
5a60: 72 2c 20 69 6e 74 20 2a 68 65 69 67 68 74 50 74  r, int *heightPt
5a70: 72 2c 20 69 6e 74 20 2a 62 61 73 65 50 74 72 29  r, int *basePtr)
5a80: 29 3b 0a 65 78 74 65 72 6e 20 54 6b 54 65 78 74  );.extern TkText
5a90: 54 61 67 20 2a 09 54 6b 54 65 78 74 43 72 65 61  Tag *.TkTextCrea
5aa0: 74 65 54 61 67 20 5f 41 4e 53 49 5f 41 52 47 53  teTag _ANSI_ARGS
5ab0: 5f 28 28 54 6b 54 65 78 74 20 2a 74 65 78 74 50  _((TkText *textP
5ac0: 74 72 2c 0a 09 09 09 20 20 20 20 63 68 61 72 20  tr,....    char 
5ad0: 2a 74 61 67 4e 61 6d 65 29 29 3b 0a 65 78 74 65  *tagName));.exte
5ae0: 72 6e 20 76 6f 69 64 09 09 54 6b 54 65 78 74 46  rn void..TkTextF
5af0: 72 65 65 44 49 6e 66 6f 20 5f 41 4e 53 49 5f 41  reeDInfo _ANSI_A
5b00: 52 47 53 5f 28 28 54 6b 54 65 78 74 20 2a 74 65  RGS_((TkText *te
5b10: 78 74 50 74 72 29 29 3b 0a 65 78 74 65 72 6e 20  xtPtr));.extern 
5b20: 76 6f 69 64 09 09 54 6b 54 65 78 74 46 72 65 65  void..TkTextFree
5b30: 54 61 67 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  Tag _ANSI_ARGS_(
5b40: 28 54 6b 54 65 78 74 20 2a 74 65 78 74 50 74 72  (TkText *textPtr
5b50: 2c 0a 09 09 09 20 20 20 20 54 6b 54 65 78 74 54  ,....    TkTextT
5b60: 61 67 20 2a 74 61 67 50 74 72 29 29 3b 0a 65 78  ag *tagPtr));.ex
5b70: 74 65 72 6e 20 69 6e 74 09 09 54 6b 54 65 78 74  tern int..TkText
5b80: 47 65 74 49 6e 64 65 78 20 5f 41 4e 53 49 5f 41  GetIndex _ANSI_A
5b90: 52 47 53 5f 28 28 54 63 6c 5f 49 6e 74 65 72 70  RGS_((Tcl_Interp
5ba0: 20 2a 69 6e 74 65 72 70 2c 0a 09 09 09 20 20 20   *interp,....   
5bb0: 20 54 6b 54 65 78 74 20 2a 74 65 78 74 50 74 72   TkText *textPtr
5bc0: 2c 20 63 68 61 72 20 2a 73 74 72 69 6e 67 2c 0a  , char *string,.
5bd0: 09 09 09 20 20 20 20 54 6b 54 65 78 74 49 6e 64  ...    TkTextInd
5be0: 65 78 20 2a 69 6e 64 65 78 50 74 72 29 29 3b 0a  ex *indexPtr));.
5bf0: 65 78 74 65 72 6e 20 54 6b 54 65 78 74 54 61 62  extern TkTextTab
5c00: 41 72 72 61 79 20 2a 09 54 6b 54 65 78 74 47 65  Array *.TkTextGe
5c10: 74 54 61 62 73 20 5f 41 4e 53 49 5f 41 52 47 53  tTabs _ANSI_ARGS
5c20: 5f 28 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  _((Tcl_Interp *i
5c30: 6e 74 65 72 70 2c 0a 09 09 09 20 20 20 20 54 6b  nterp,....    Tk
5c40: 5f 57 69 6e 64 6f 77 20 74 6b 77 69 6e 2c 20 63  _Window tkwin, c
5c50: 68 61 72 20 2a 73 74 72 69 6e 67 29 29 3b 0a 65  har *string));.e
5c60: 78 74 65 72 6e 20 76 6f 69 64 09 09 54 6b 54 65  xtern void..TkTe
5c70: 78 74 49 6e 64 65 78 42 61 63 6b 43 68 61 72 73  xtIndexBackChars
5c80: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b   _ANSI_ARGS_((Tk
5c90: 54 65 78 74 49 6e 64 65 78 20 2a 73 72 63 50 74  TextIndex *srcPt
5ca0: 72 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 63 6f  r,....    int co
5cb0: 75 6e 74 2c 20 54 6b 54 65 78 74 49 6e 64 65 78  unt, TkTextIndex
5cc0: 20 2a 64 73 74 50 74 72 29 29 3b 0a 65 78 74 65   *dstPtr));.exte
5cd0: 72 6e 20 69 6e 74 09 09 54 6b 54 65 78 74 49 6e  rn int..TkTextIn
5ce0: 64 65 78 43 6d 70 20 5f 41 4e 53 49 5f 41 52 47  dexCmp _ANSI_ARG
5cf0: 53 5f 28 28 54 6b 54 65 78 74 49 6e 64 65 78 20  S_((TkTextIndex 
5d00: 2a 69 6e 64 65 78 31 50 74 72 2c 0a 09 09 09 20  *index1Ptr,.... 
5d10: 20 20 20 54 6b 54 65 78 74 49 6e 64 65 78 20 2a     TkTextIndex *
5d20: 69 6e 64 65 78 32 50 74 72 29 29 3b 0a 65 78 74  index2Ptr));.ext
5d30: 65 72 6e 20 76 6f 69 64 09 09 54 6b 54 65 78 74  ern void..TkText
5d40: 49 6e 64 65 78 46 6f 72 77 43 68 61 72 73 20 5f  IndexForwChars _
5d50: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65  ANSI_ARGS_((TkTe
5d60: 78 74 49 6e 64 65 78 20 2a 73 72 63 50 74 72 2c  xtIndex *srcPtr,
5d70: 0a 09 09 09 20 20 20 20 69 6e 74 20 63 6f 75 6e  ....    int coun
5d80: 74 2c 20 54 6b 54 65 78 74 49 6e 64 65 78 20 2a  t, TkTextIndex *
5d90: 64 73 74 50 74 72 29 29 3b 0a 65 78 74 65 72 6e  dstPtr));.extern
5da0: 20 54 6b 54 65 78 74 53 65 67 6d 65 6e 74 20 2a   TkTextSegment *
5db0: 09 54 6b 54 65 78 74 49 6e 64 65 78 54 6f 53 65  .TkTextIndexToSe
5dc0: 67 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54  g _ANSI_ARGS_((T
5dd0: 6b 54 65 78 74 49 6e 64 65 78 20 2a 69 6e 64 65  kTextIndex *inde
5de0: 78 50 74 72 2c 0a 09 09 09 20 20 20 20 69 6e 74  xPtr,....    int
5df0: 20 2a 6f 66 66 73 65 74 50 74 72 29 29 3b 0a 65   *offsetPtr));.e
5e00: 78 74 65 72 6e 20 76 6f 69 64 09 09 54 6b 54 65  xtern void..TkTe
5e10: 78 74 4c 6f 73 74 53 65 6c 65 63 74 69 6f 6e 20  xtLostSelection 
5e20: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 0a 09 09  _ANSI_ARGS_((...
5e30: 09 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20  .    ClientData 
5e40: 63 6c 69 65 6e 74 44 61 74 61 29 29 3b 0a 65 78  clientData));.ex
5e50: 74 65 72 6e 20 54 6b 54 65 78 74 49 6e 64 65 78  tern TkTextIndex
5e60: 20 2a 09 54 6b 54 65 78 74 4d 61 6b 65 49 6e 64   *.TkTextMakeInd
5e70: 65 78 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28  ex _ANSI_ARGS_((
5e80: 54 6b 54 65 78 74 42 54 72 65 65 20 74 72 65 65  TkTextBTree tree
5e90: 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 6c 69 6e  ,....    int lin
5ea0: 65 49 6e 64 65 78 2c 20 69 6e 74 20 63 68 61 72  eIndex, int char
5eb0: 49 6e 64 65 78 2c 0a 09 09 09 20 20 20 20 54 6b  Index,....    Tk
5ec0: 54 65 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78  TextIndex *index
5ed0: 50 74 72 29 29 3b 0a 65 78 74 65 72 6e 20 69 6e  Ptr));.extern in
5ee0: 74 09 09 54 6b 54 65 78 74 4d 61 72 6b 43 6d 64  t..TkTextMarkCmd
5ef0: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b   _ANSI_ARGS_((Tk
5f00: 54 65 78 74 20 2a 74 65 78 74 50 74 72 2c 0a 09  Text *textPtr,..
5f10: 09 09 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  ..    Tcl_Interp
5f20: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 61 72   *interp, int ar
5f30: 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 29  gc, char **argv)
5f40: 29 3b 0a 65 78 74 65 72 6e 20 69 6e 74 09 09 54  );.extern int..T
5f50: 6b 54 65 78 74 4d 61 72 6b 4e 61 6d 65 54 6f 49  kTextMarkNameToI
5f60: 6e 64 65 78 20 5f 41 4e 53 49 5f 41 52 47 53 5f  ndex _ANSI_ARGS_
5f70: 28 28 54 6b 54 65 78 74 20 2a 74 65 78 74 50 74  ((TkText *textPt
5f80: 72 2c 0a 09 09 09 20 20 20 20 63 68 61 72 20 2a  r,....    char *
5f90: 6e 61 6d 65 2c 20 54 6b 54 65 78 74 49 6e 64 65  name, TkTextInde
5fa0: 78 20 2a 69 6e 64 65 78 50 74 72 29 29 3b 0a 65  x *indexPtr));.e
5fb0: 78 74 65 72 6e 20 76 6f 69 64 09 09 54 6b 54 65  xtern void..TkTe
5fc0: 78 74 4d 61 72 6b 53 65 67 54 6f 49 6e 64 65 78  xtMarkSegToIndex
5fd0: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b   _ANSI_ARGS_((Tk
5fe0: 54 65 78 74 20 2a 74 65 78 74 50 74 72 2c 0a 09  Text *textPtr,..
5ff0: 09 09 20 20 20 20 54 6b 54 65 78 74 53 65 67 6d  ..    TkTextSegm
6000: 65 6e 74 20 2a 6d 61 72 6b 50 74 72 2c 20 54 6b  ent *markPtr, Tk
6010: 54 65 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78  TextIndex *index
6020: 50 74 72 29 29 3b 0a 65 78 74 65 72 6e 20 76 6f  Ptr));.extern vo
6030: 69 64 09 09 54 6b 54 65 78 74 45 76 65 6e 74 75  id..TkTextEventu
6040: 61 6c 6c 79 52 65 70 69 63 6b 20 5f 41 4e 53 49  allyRepick _ANSI
6050: 5f 41 52 47 53 5f 28 28 54 6b 54 65 78 74 20 2a  _ARGS_((TkText *
6060: 74 65 78 74 50 74 72 29 29 3b 0a 65 78 74 65 72  textPtr));.exter
6070: 6e 20 76 6f 69 64 09 09 54 6b 54 65 78 74 50 69  n void..TkTextPi
6080: 63 6b 43 75 72 72 65 6e 74 20 5f 41 4e 53 49 5f  ckCurrent _ANSI_
6090: 41 52 47 53 5f 28 28 54 6b 54 65 78 74 20 2a 74  ARGS_((TkText *t
60a0: 65 78 74 50 74 72 2c 0a 09 09 09 20 20 20 20 58  extPtr,....    X
60b0: 45 76 65 6e 74 20 2a 65 76 65 6e 74 50 74 72 29  Event *eventPtr)
60c0: 29 3b 0a 65 78 74 65 72 6e 20 76 6f 69 64 09 09  );.extern void..
60d0: 54 6b 54 65 78 74 50 69 78 65 6c 49 6e 64 65 78  TkTextPixelIndex
60e0: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b   _ANSI_ARGS_((Tk
60f0: 54 65 78 74 20 2a 74 65 78 74 50 74 72 2c 0a 09  Text *textPtr,..
6100: 09 09 20 20 20 20 69 6e 74 20 78 2c 20 69 6e 74  ..    int x, int
6110: 20 79 2c 20 54 6b 54 65 78 74 49 6e 64 65 78 20   y, TkTextIndex 
6120: 2a 69 6e 64 65 78 50 74 72 29 29 3b 0a 65 78 74  *indexPtr));.ext
6130: 65 72 6e 20 76 6f 69 64 09 09 54 6b 54 65 78 74  ern void..TkText
6140: 50 72 69 6e 74 49 6e 64 65 78 20 5f 41 4e 53 49  PrintIndex _ANSI
6150: 5f 41 52 47 53 5f 28 28 54 6b 54 65 78 74 49 6e  _ARGS_((TkTextIn
6160: 64 65 78 20 2a 69 6e 64 65 78 50 74 72 2c 0a 09  dex *indexPtr,..
6170: 09 09 20 20 20 20 63 68 61 72 20 2a 73 74 72 69  ..    char *stri
6180: 6e 67 29 29 3b 0a 65 78 74 65 72 6e 20 76 6f 69  ng));.extern voi
6190: 64 09 09 54 6b 54 65 78 74 52 65 64 72 61 77 52  d..TkTextRedrawR
61a0: 65 67 69 6f 6e 20 5f 41 4e 53 49 5f 41 52 47 53  egion _ANSI_ARGS
61b0: 5f 28 28 54 6b 54 65 78 74 20 2a 74 65 78 74 50  _((TkText *textP
61c0: 74 72 2c 0a 09 09 09 20 20 20 20 69 6e 74 20 78  tr,....    int x
61d0: 2c 20 69 6e 74 20 79 2c 20 69 6e 74 20 77 69 64  , int y, int wid
61e0: 74 68 2c 20 69 6e 74 20 68 65 69 67 68 74 29 29  th, int height))
61f0: 3b 0a 65 78 74 65 72 6e 20 76 6f 69 64 09 09 54  ;.extern void..T
6200: 6b 54 65 78 74 52 65 64 72 61 77 54 61 67 20 5f  kTextRedrawTag _
6210: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65  ANSI_ARGS_((TkTe
6220: 78 74 20 2a 74 65 78 74 50 74 72 2c 0a 09 09 09  xt *textPtr,....
6230: 20 20 20 20 54 6b 54 65 78 74 49 6e 64 65 78 20      TkTextIndex 
6240: 2a 69 6e 64 65 78 31 50 74 72 2c 20 54 6b 54 65  *index1Ptr, TkTe
6250: 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78 32 50  xtIndex *index2P
6260: 74 72 2c 0a 09 09 09 20 20 20 20 54 6b 54 65 78  tr,....    TkTex
6270: 74 54 61 67 20 2a 74 61 67 50 74 72 2c 20 69 6e  tTag *tagPtr, in
6280: 74 20 77 69 74 68 54 61 67 29 29 3b 0a 65 78 74  t withTag));.ext
6290: 65 72 6e 20 76 6f 69 64 09 09 54 6b 54 65 78 74  ern void..TkText
62a0: 52 65 6c 61 79 6f 75 74 57 69 6e 64 6f 77 20 5f  RelayoutWindow _
62b0: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65  ANSI_ARGS_((TkTe
62c0: 78 74 20 2a 74 65 78 74 50 74 72 29 29 3b 0a 65  xt *textPtr));.e
62d0: 78 74 65 72 6e 20 69 6e 74 09 09 54 6b 54 65 78  xtern int..TkTex
62e0: 74 53 63 61 6e 43 6d 64 20 5f 41 4e 53 49 5f 41  tScanCmd _ANSI_A
62f0: 52 47 53 5f 28 28 54 6b 54 65 78 74 20 2a 74 65  RGS_((TkText *te
6300: 78 74 50 74 72 2c 0a 09 09 09 20 20 20 20 54 63  xtPtr,....    Tc
6310: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
6320: 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  , int argc, char
6330: 20 2a 2a 61 72 67 76 29 29 3b 0a 65 78 74 65 72   **argv));.exter
6340: 6e 20 69 6e 74 09 09 54 6b 54 65 78 74 53 65 65  n int..TkTextSee
6350: 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  Cmd _ANSI_ARGS_(
6360: 28 54 6b 54 65 78 74 20 2a 74 65 78 74 50 74 72  (TkText *textPtr
6370: 2c 0a 09 09 09 20 20 20 20 54 63 6c 5f 49 6e 74  ,....    Tcl_Int
6380: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74  erp *interp, int
6390: 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72   argc, char **ar
63a0: 67 76 29 29 3b 0a 65 78 74 65 72 6e 20 69 6e 74  gv));.extern int
63b0: 09 09 54 6b 54 65 78 74 53 65 67 54 6f 4f 66 66  ..TkTextSegToOff
63c0: 73 65 74 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28  set _ANSI_ARGS_(
63d0: 28 54 6b 54 65 78 74 53 65 67 6d 65 6e 74 20 2a  (TkTextSegment *
63e0: 73 65 67 50 74 72 2c 0a 09 09 09 20 20 20 20 54  segPtr,....    T
63f0: 6b 54 65 78 74 4c 69 6e 65 20 2a 6c 69 6e 65 50  kTextLine *lineP
6400: 74 72 29 29 3b 0a 65 78 74 65 72 6e 20 54 6b 54  tr));.extern TkT
6410: 65 78 74 53 65 67 6d 65 6e 74 20 2a 09 54 6b 54  extSegment *.TkT
6420: 65 78 74 53 65 74 4d 61 72 6b 20 5f 41 4e 53 49  extSetMark _ANSI
6430: 5f 41 52 47 53 5f 28 28 54 6b 54 65 78 74 20 2a  _ARGS_((TkText *
6440: 74 65 78 74 50 74 72 2c 20 63 68 61 72 20 2a 6e  textPtr, char *n
6450: 61 6d 65 2c 0a 09 09 09 20 20 20 20 54 6b 54 65  ame,....    TkTe
6460: 78 74 49 6e 64 65 78 20 2a 69 6e 64 65 78 50 74  xtIndex *indexPt
6470: 72 29 29 3b 0a 65 78 74 65 72 6e 20 76 6f 69 64  r));.extern void
6480: 09 09 54 6b 54 65 78 74 53 65 74 59 56 69 65 77  ..TkTextSetYView
6490: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 6b   _ANSI_ARGS_((Tk
64a0: 54 65 78 74 20 2a 74 65 78 74 50 74 72 2c 0a 09  Text *textPtr,..
64b0: 09 09 20 20 20 20 54 6b 54 65 78 74 49 6e 64 65  ..    TkTextInde
64c0: 78 20 2a 69 6e 64 65 78 50 74 72 2c 20 69 6e 74  x *indexPtr, int
64d0: 20 70 69 63 6b 50 6c 61 63 65 29 29 3b 0a 65 78   pickPlace));.ex
64e0: 74 65 72 6e 20 69 6e 74 09 09 54 6b 54 65 78 74  tern int..TkText
64f0: 54 61 67 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47  TagCmd _ANSI_ARG
6500: 53 5f 28 28 54 6b 54 65 78 74 20 2a 74 65 78 74  S_((TkText *text
6510: 50 74 72 2c 0a 09 09 09 20 20 20 20 54 63 6c 5f  Ptr,....    Tcl_
6520: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
6530: 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a  int argc, char *
6540: 2a 61 72 67 76 29 29 3b 0a 65 78 74 65 72 6e 20  *argv));.extern 
6550: 69 6e 74 09 09 54 6b 54 65 78 74 57 69 6e 64 6f  int..TkTextWindo
6560: 77 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47 53 5f  wCmd _ANSI_ARGS_
6570: 28 28 54 6b 54 65 78 74 20 2a 74 65 78 74 50 74  ((TkText *textPt
6580: 72 2c 0a 09 09 09 20 20 20 20 54 63 6c 5f 49 6e  r,....    Tcl_In
6590: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e  terp *interp, in
65a0: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
65b0: 72 67 76 29 29 3b 0a 65 78 74 65 72 6e 20 69 6e  rgv));.extern in
65c0: 74 09 09 54 6b 54 65 78 74 57 69 6e 64 6f 77 49  t..TkTextWindowI
65d0: 6e 64 65 78 20 5f 41 4e 53 49 5f 41 52 47 53 5f  ndex _ANSI_ARGS_
65e0: 28 28 54 6b 54 65 78 74 20 2a 74 65 78 74 50 74  ((TkText *textPt
65f0: 72 2c 0a 09 09 09 20 20 20 20 63 68 61 72 20 2a  r,....    char *
6600: 6e 61 6d 65 2c 20 54 6b 54 65 78 74 49 6e 64 65  name, TkTextInde
6610: 78 20 2a 69 6e 64 65 78 50 74 72 29 29 3b 0a 65  x *indexPtr));.e
6620: 78 74 65 72 6e 20 69 6e 74 09 09 54 6b 54 65 78  xtern int..TkTex
6630: 74 58 76 69 65 77 43 6d 64 20 5f 41 4e 53 49 5f  tXviewCmd _ANSI_
6640: 41 52 47 53 5f 28 28 54 6b 54 65 78 74 20 2a 74  ARGS_((TkText *t
6650: 65 78 74 50 74 72 2c 0a 09 09 09 20 20 20 20 54  extPtr,....    T
6660: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
6670: 70 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61  p, int argc, cha
6680: 72 20 2a 2a 61 72 67 76 29 29 3b 0a 65 78 74 65  r **argv));.exte
6690: 72 6e 20 69 6e 74 09 09 54 6b 54 65 78 74 59 76  rn int..TkTextYv
66a0: 69 65 77 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47  iewCmd _ANSI_ARG
66b0: 53 5f 28 28 54 6b 54 65 78 74 20 2a 74 65 78 74  S_((TkText *text
66c0: 50 74 72 2c 0a 09 09 09 20 20 20 20 54 63 6c 5f  Ptr,....    Tcl_
66d0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
66e0: 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a  int argc, char *
66f0: 2a 61 72 67 76 29 29 3b 0a 0a 23 65 6e 64 69 66  *argv));..#endif
6700: 20 2f 2a 20 5f 54 4b 54 45 58 54 20 2a 2f 0a      /* _TKTEXT */.