Hex Artifact Content

Artifact 9c5014293254310aaed9a29e5e8e7a97924ad974:


0000: 2f 2a 20 0a 20 2a 20 74 6b 54 65 78 74 54 61 67  /* . * tkTextTag
0010: 2e 63 20 28 43 54 6b 29 20 2d 2d 0a 20 2a 0a 20  .c (CTk) --. *. 
0020: 2a 09 54 68 69 73 20 6d 6f 64 75 6c 65 20 69 6d  *.This module im
0030: 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 22 74 61  plements the "ta
0040: 67 22 20 73 75 62 63 6f 6d 6d 61 6e 64 20 6f 66  g" subcommand of
0050: 20 74 68 65 20 77 69 64 67 65 74 20 63 6f 6d 6d   the widget comm
0060: 61 6e 64 0a 20 2a 09 66 6f 72 20 74 65 78 74 20  and. *.for text 
0070: 77 69 64 67 65 74 73 2c 20 70 6c 75 73 20 6d 6f  widgets, plus mo
0080: 73 74 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  st of the other 
0090: 68 69 67 68 2d 6c 65 76 65 6c 20 66 75 6e 63 74  high-level funct
00a0: 69 6f 6e 73 0a 20 2a 09 72 65 6c 61 74 65 64 20  ions. *.related 
00b0: 74 6f 20 74 61 67 73 2e 0a 20 2a 0a 20 2a 20 43  to tags.. *. * C
00c0: 6f 70 79 72 69 67 68 74 20 28 63 29 20 31 39 39  opyright (c) 199
00d0: 32 2d 31 39 39 34 20 54 68 65 20 52 65 67 65 6e  2-1994 The Regen
00e0: 74 73 20 6f 66 20 74 68 65 20 55 6e 69 76 65 72  ts of the Univer
00f0: 73 69 74 79 20 6f 66 20 43 61 6c 69 66 6f 72 6e  sity of Californ
0100: 69 61 2e 0a 20 2a 20 43 6f 70 79 72 69 67 68 74  ia.. * Copyright
0110: 20 28 63 29 20 31 39 39 34 2d 31 39 39 35 20 53   (c) 1994-1995 S
0120: 75 6e 20 4d 69 63 72 6f 73 79 73 74 65 6d 73 2c  un Microsystems,
0130: 20 49 6e 63 2e 0a 20 2a 20 43 6f 70 79 72 69 67   Inc.. * Copyrig
0140: 68 74 20 28 63 29 20 31 39 39 35 20 43 6c 65 76  ht (c) 1995 Clev
0150: 65 6c 61 6e 64 20 43 6c 69 6e 69 63 20 46 6f 75  eland Clinic Fou
0160: 6e 64 61 74 69 6f 6e 0a 20 2a 0a 20 2a 20 53 65  ndation. *. * Se
0170: 65 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65  e the file "lice
0180: 6e 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69  nse.terms" for i
0190: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73  nformation on us
01a0: 61 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69  age and redistri
01b0: 62 75 74 69 6f 6e 0a 20 2a 20 6f 66 20 74 68 69  bution. * of thi
01c0: 73 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20  s file, and for 
01d0: 61 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20  a DISCLAIMER OF 
01e0: 41 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0a  ALL WARRANTIES..
01f0: 20 2a 0a 20 2a 20 40 28 23 29 20 24 49 64 3a 20   *. * @(#) $Id: 
0200: 63 74 6b 2e 73 68 61 72 2c 76 20 31 2e 35 30 20  ctk.shar,v 1.50 
0210: 31 39 39 36 2f 30 31 2f 31 35 20 31 34 3a 34 37  1996/01/15 14:47
0220: 3a 31 36 20 61 6e 64 72 65 77 6d 20 45 78 70 20  :16 andrewm Exp 
0230: 61 6e 64 72 65 77 6d 20 24 0a 20 2a 2f 0a 0a 23  andrewm $. */..#
0240: 69 6e 63 6c 75 64 65 20 22 64 65 66 61 75 6c 74  include "default
0250: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 74 6b  .h".#include "tk
0260: 50 6f 72 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65  Port.h".#include
0270: 20 22 74 6b 2e 68 22 0a 23 69 6e 63 6c 75 64 65   "tk.h".#include
0280: 20 22 74 6b 54 65 78 74 2e 68 22 0a 0a 2f 2a 0a   "tkText.h"../*.
0290: 20 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75   * Information u
02a0: 73 65 64 20 66 6f 72 20 70 61 72 73 69 6e 67 20  sed for parsing 
02b0: 74 61 67 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  tag configuratio
02c0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 20  n information:. 
02d0: 2a 2f 0a 0a 73 74 61 74 69 63 20 54 6b 5f 43 6f  */..static Tk_Co
02e0: 6e 66 69 67 53 70 65 63 20 74 61 67 43 6f 6e 66  nfigSpec tagConf
02f0: 69 67 53 70 65 63 73 5b 5d 20 3d 20 7b 0a 20 20  igSpecs[] = {.  
0300: 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53 54 52    {TK_CONFIG_STR
0310: 49 4e 47 2c 20 22 2d 6a 75 73 74 69 66 79 22 2c  ING, "-justify",
0320: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20   (char *) NULL, 
0330: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 0a 09  (char *) NULL,..
0340: 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20 54  (char *) NULL, T
0350: 6b 5f 4f 66 66 73 65 74 28 54 6b 54 65 78 74 54  k_Offset(TkTextT
0360: 61 67 2c 20 6a 75 73 74 69 66 79 53 74 72 69 6e  ag, justifyStrin
0370: 67 29 2c 20 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55  g), TK_CONFIG_NU
0380: 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f  LL_OK},.    {TK_
0390: 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20 22  CONFIG_STRING, "
03a0: 2d 6c 6d 61 72 67 69 6e 31 22 2c 20 28 63 68 61  -lmargin1", (cha
03b0: 72 20 2a 29 20 4e 55 4c 4c 2c 20 28 63 68 61 72  r *) NULL, (char
03c0: 20 2a 29 20 4e 55 4c 4c 2c 0a 09 28 63 68 61 72   *) NULL,..(char
03d0: 20 2a 29 20 4e 55 4c 4c 2c 20 54 6b 5f 4f 66 66   *) NULL, Tk_Off
03e0: 73 65 74 28 54 6b 54 65 78 74 54 61 67 2c 20 6c  set(TkTextTag, l
03f0: 4d 61 72 67 69 6e 31 53 74 72 69 6e 67 29 2c 20  Margin1String), 
0400: 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55 4c 4c 5f 4f  TK_CONFIG_NULL_O
0410: 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46  K},.    {TK_CONF
0420: 49 47 5f 53 54 52 49 4e 47 2c 20 22 2d 6c 6d 61  IG_STRING, "-lma
0430: 72 67 69 6e 32 22 2c 20 28 63 68 61 72 20 2a 29  rgin2", (char *)
0440: 20 4e 55 4c 4c 2c 20 28 63 68 61 72 20 2a 29 20   NULL, (char *) 
0450: 4e 55 4c 4c 2c 0a 09 28 63 68 61 72 20 2a 29 20  NULL,..(char *) 
0460: 4e 55 4c 4c 2c 20 54 6b 5f 4f 66 66 73 65 74 28  NULL, Tk_Offset(
0470: 54 6b 54 65 78 74 54 61 67 2c 20 6c 4d 61 72 67  TkTextTag, lMarg
0480: 69 6e 32 53 74 72 69 6e 67 29 2c 20 54 4b 5f 43  in2String), TK_C
0490: 4f 4e 46 49 47 5f 4e 55 4c 4c 5f 4f 4b 7d 2c 0a  ONFIG_NULL_OK},.
04a0: 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53      {TK_CONFIG_S
04b0: 54 52 49 4e 47 2c 20 22 2d 6f 66 66 73 65 74 22  TRING, "-offset"
04c0: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c  , (char *) NULL,
04d0: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 0a   (char *) NULL,.
04e0: 09 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20  .(char *) NULL, 
04f0: 54 6b 5f 4f 66 66 73 65 74 28 54 6b 54 65 78 74  Tk_Offset(TkText
0500: 54 61 67 2c 20 6f 66 66 73 65 74 53 74 72 69 6e  Tag, offsetStrin
0510: 67 29 2c 20 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55  g), TK_CONFIG_NU
0520: 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f  LL_OK},.    {TK_
0530: 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20 22  CONFIG_STRING, "
0540: 2d 72 6d 61 72 67 69 6e 22 2c 20 28 63 68 61 72  -rmargin", (char
0550: 20 2a 29 20 4e 55 4c 4c 2c 20 28 63 68 61 72 20   *) NULL, (char 
0560: 2a 29 20 4e 55 4c 4c 2c 0a 09 28 63 68 61 72 20  *) NULL,..(char 
0570: 2a 29 20 4e 55 4c 4c 2c 20 54 6b 5f 4f 66 66 73  *) NULL, Tk_Offs
0580: 65 74 28 54 6b 54 65 78 74 54 61 67 2c 20 72 4d  et(TkTextTag, rM
0590: 61 72 67 69 6e 53 74 72 69 6e 67 29 2c 20 54 4b  arginString), TK
05a0: 5f 43 4f 4e 46 49 47 5f 4e 55 4c 4c 5f 4f 4b 7d  _CONFIG_NULL_OK}
05b0: 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f 4e 46 49 47  ,.    {TK_CONFIG
05c0: 5f 53 54 52 49 4e 47 2c 20 22 2d 73 70 61 63 69  _STRING, "-spaci
05d0: 6e 67 31 22 2c 20 28 63 68 61 72 20 2a 29 20 4e  ng1", (char *) N
05e0: 55 4c 4c 2c 20 28 63 68 61 72 20 2a 29 20 4e 55  ULL, (char *) NU
05f0: 4c 4c 2c 0a 09 28 63 68 61 72 20 2a 29 20 4e 55  LL,..(char *) NU
0600: 4c 4c 2c 20 54 6b 5f 4f 66 66 73 65 74 28 54 6b  LL, Tk_Offset(Tk
0610: 54 65 78 74 54 61 67 2c 20 73 70 61 63 69 6e 67  TextTag, spacing
0620: 31 53 74 72 69 6e 67 29 2c 20 54 4b 5f 43 4f 4e  1String), TK_CON
0630: 46 49 47 5f 4e 55 4c 4c 5f 4f 4b 7d 2c 0a 20 20  FIG_NULL_OK},.  
0640: 20 20 7b 54 4b 5f 43 4f 4e 46 49 47 5f 53 54 52    {TK_CONFIG_STR
0650: 49 4e 47 2c 20 22 2d 73 70 61 63 69 6e 67 32 22  ING, "-spacing2"
0660: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c  , (char *) NULL,
0670: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 0a   (char *) NULL,.
0680: 09 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20  .(char *) NULL, 
0690: 54 6b 5f 4f 66 66 73 65 74 28 54 6b 54 65 78 74  Tk_Offset(TkText
06a0: 54 61 67 2c 20 73 70 61 63 69 6e 67 32 53 74 72  Tag, spacing2Str
06b0: 69 6e 67 29 2c 20 54 4b 5f 43 4f 4e 46 49 47 5f  ing), TK_CONFIG_
06c0: 4e 55 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54  NULL_OK},.    {T
06d0: 4b 5f 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c  K_CONFIG_STRING,
06e0: 20 22 2d 73 70 61 63 69 6e 67 33 22 2c 20 28 63   "-spacing3", (c
06f0: 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20 28 63 68  har *) NULL, (ch
0700: 61 72 20 2a 29 20 4e 55 4c 4c 2c 0a 09 28 63 68  ar *) NULL,..(ch
0710: 61 72 20 2a 29 20 4e 55 4c 4c 2c 20 54 6b 5f 4f  ar *) NULL, Tk_O
0720: 66 66 73 65 74 28 54 6b 54 65 78 74 54 61 67 2c  ffset(TkTextTag,
0730: 20 73 70 61 63 69 6e 67 33 53 74 72 69 6e 67 29   spacing3String)
0740: 2c 20 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55 4c 4c  , TK_CONFIG_NULL
0750: 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f 43 4f  _OK},.    {TK_CO
0760: 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20 22 2d 74  NFIG_STRING, "-t
0770: 61 62 73 22 2c 20 28 63 68 61 72 20 2a 29 20 4e  abs", (char *) N
0780: 55 4c 4c 2c 20 28 63 68 61 72 20 2a 29 20 4e 55  ULL, (char *) NU
0790: 4c 4c 2c 0a 09 28 63 68 61 72 20 2a 29 20 4e 55  LL,..(char *) NU
07a0: 4c 4c 2c 20 54 6b 5f 4f 66 66 73 65 74 28 54 6b  LL, Tk_Offset(Tk
07b0: 54 65 78 74 54 61 67 2c 20 74 61 62 53 74 72 69  TextTag, tabStri
07c0: 6e 67 29 2c 20 54 4b 5f 43 4f 4e 46 49 47 5f 4e  ng), TK_CONFIG_N
07d0: 55 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b  ULL_OK},.    {TK
07e0: 5f 43 4f 4e 46 49 47 5f 53 54 52 49 4e 47 2c 20  _CONFIG_STRING, 
07f0: 22 2d 75 6e 64 65 72 6c 69 6e 65 22 2c 20 28 63  "-underline", (c
0800: 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20 28 63 68  har *) NULL, (ch
0810: 61 72 20 2a 29 20 4e 55 4c 4c 2c 0a 09 28 63 68  ar *) NULL,..(ch
0820: 61 72 20 2a 29 20 4e 55 4c 4c 2c 20 54 6b 5f 4f  ar *) NULL, Tk_O
0830: 66 66 73 65 74 28 54 6b 54 65 78 74 54 61 67 2c  ffset(TkTextTag,
0840: 20 75 6e 64 65 72 6c 69 6e 65 53 74 72 69 6e 67   underlineString
0850: 29 2c 0a 09 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55  ),..TK_CONFIG_NU
0860: 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f  LL_OK},.    {TK_
0870: 43 4f 4e 46 49 47 5f 55 49 44 2c 20 22 2d 77 72  CONFIG_UID, "-wr
0880: 61 70 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55  ap", (char *) NU
0890: 4c 4c 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c  LL, (char *) NUL
08a0: 4c 2c 0a 09 28 63 68 61 72 20 2a 29 20 4e 55 4c  L,..(char *) NUL
08b0: 4c 2c 20 54 6b 5f 4f 66 66 73 65 74 28 54 6b 54  L, Tk_Offset(TkT
08c0: 65 78 74 54 61 67 2c 20 77 72 61 70 4d 6f 64 65  extTag, wrapMode
08d0: 29 2c 0a 09 54 4b 5f 43 4f 4e 46 49 47 5f 4e 55  ),..TK_CONFIG_NU
08e0: 4c 4c 5f 4f 4b 7d 2c 0a 20 20 20 20 7b 54 4b 5f  LL_OK},.    {TK_
08f0: 43 4f 4e 46 49 47 5f 45 4e 44 2c 20 28 63 68 61  CONFIG_END, (cha
0900: 72 20 2a 29 20 4e 55 4c 4c 2c 20 28 63 68 61 72  r *) NULL, (char
0910: 20 2a 29 20 4e 55 4c 4c 2c 20 28 63 68 61 72 20   *) NULL, (char 
0920: 2a 29 20 4e 55 4c 4c 2c 0a 09 28 63 68 61 72 20  *) NULL,..(char 
0930: 2a 29 20 4e 55 4c 4c 2c 20 30 2c 20 30 7d 0a 7d  *) NULL, 0, 0}.}
0940: 3b 0a 0a 2f 2a 0a 20 2a 20 46 6f 72 77 61 72 64  ;../*. * Forward
0950: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f   declarations fo
0960: 72 20 70 72 6f 63 65 64 75 72 65 73 20 64 65 66  r procedures def
0970: 69 6e 65 64 20 6c 61 74 65 72 20 69 6e 20 74 68  ined later in th
0980: 69 73 20 66 69 6c 65 3a 0a 20 2a 2f 0a 0a 73 74  is file:. */..st
0990: 61 74 69 63 20 76 6f 69 64 09 09 43 68 61 6e 67  atic void..Chang
09a0: 65 54 61 67 50 72 69 6f 72 69 74 79 20 5f 41 4e  eTagPriority _AN
09b0: 53 49 5f 41 52 47 53 5f 28 28 54 6b 54 65 78 74  SI_ARGS_((TkText
09c0: 20 2a 74 65 78 74 50 74 72 2c 0a 09 09 09 20 20   *textPtr,....  
09d0: 20 20 54 6b 54 65 78 74 54 61 67 20 2a 74 61 67    TkTextTag *tag
09e0: 50 74 72 2c 20 69 6e 74 20 70 72 69 6f 29 29 3b  Ptr, int prio));
09f0: 0a 73 74 61 74 69 63 20 54 6b 54 65 78 74 54 61  .static TkTextTa
0a00: 67 20 2a 09 46 69 6e 64 54 61 67 20 5f 41 4e 53  g *.FindTag _ANS
0a10: 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 49 6e 74  I_ARGS_((Tcl_Int
0a20: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 09 09 09  erp *interp,....
0a30: 20 20 20 20 54 6b 54 65 78 74 20 2a 74 65 78 74      TkText *text
0a40: 50 74 72 2c 20 63 68 61 72 20 2a 74 61 67 4e 61  Ptr, char *tagNa
0a50: 6d 65 29 29 3b 0a 73 74 61 74 69 63 20 76 6f 69  me));.static voi
0a60: 64 09 09 53 6f 72 74 54 61 67 73 20 5f 41 4e 53  d..SortTags _ANS
0a70: 49 5f 41 52 47 53 5f 28 28 69 6e 74 20 6e 75 6d  I_ARGS_((int num
0a80: 54 61 67 73 2c 0a 09 09 09 20 20 20 20 54 6b 54  Tags,....    TkT
0a90: 65 78 74 54 61 67 20 2a 2a 74 61 67 41 72 72 61  extTag **tagArra
0aa0: 79 50 74 72 29 29 3b 0a 73 74 61 74 69 63 20 69  yPtr));.static i
0ab0: 6e 74 09 09 54 61 67 53 6f 72 74 50 72 6f 63 20  nt..TagSortProc 
0ac0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 4f 4e  _ANSI_ARGS_((CON
0ad0: 53 54 20 56 4f 49 44 20 2a 66 69 72 73 74 2c 0a  ST VOID *first,.
0ae0: 09 09 09 20 20 20 20 43 4f 4e 53 54 20 56 4f 49  ...    CONST VOI
0af0: 44 20 2a 73 65 63 6f 6e 64 29 29 3b 0a 0c 0a 2f  D *second));.../
0b00: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *. *------------
0b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b40: 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 54 65 78 74 54  --. *. * TkTextT
0b50: 61 67 43 6d 64 20 2d 2d 0a 20 2a 0a 20 2a 09 54  agCmd --. *. *.T
0b60: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73  his procedure is
0b70: 20 69 6e 76 6f 6b 65 64 20 74 6f 20 70 72 6f 63   invoked to proc
0b80: 65 73 73 20 74 68 65 20 22 74 61 67 22 20 6f 70  ess the "tag" op
0b90: 74 69 6f 6e 73 20 6f 66 0a 20 2a 09 74 68 65 20  tions of. *.the 
0ba0: 77 69 64 67 65 74 20 63 6f 6d 6d 61 6e 64 20 66  widget command f
0bb0: 6f 72 20 74 65 78 74 20 77 69 64 67 65 74 73 2e  or text widgets.
0bc0: 20 53 65 65 20 74 68 65 20 75 73 65 72 20 64 6f   See the user do
0bd0: 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 20 2a 09 66  cumentation. *.f
0be0: 6f 72 20 64 65 74 61 69 6c 73 20 6f 6e 20 77 68  or details on wh
0bf0: 61 74 20 69 74 20 64 6f 65 73 2e 0a 20 2a 0a 20  at it does.. *. 
0c00: 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20  * Results:. *.A 
0c10: 73 74 61 6e 64 61 72 64 20 54 63 6c 20 72 65 73  standard Tcl res
0c20: 75 6c 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20  ult.. *. * Side 
0c30: 65 66 66 65 63 74 73 3a 0a 20 2a 09 53 65 65 20  effects:. *.See 
0c40: 74 68 65 20 75 73 65 72 20 64 6f 63 75 6d 65 6e  the user documen
0c50: 74 61 74 69 6f 6e 2e 0a 20 2a 0a 20 2a 2d 2d 2d  tation.. *. *---
0c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a  -----------. */.
0ca0: 0a 69 6e 74 0a 54 6b 54 65 78 74 54 61 67 43 6d  .int.TkTextTagCm
0cb0: 64 28 74 65 78 74 50 74 72 2c 20 69 6e 74 65 72  d(textPtr, inter
0cc0: 70 2c 20 61 72 67 63 2c 20 61 72 67 76 29 0a 20  p, argc, argv). 
0cd0: 20 20 20 72 65 67 69 73 74 65 72 20 54 6b 54 65     register TkTe
0ce0: 78 74 20 2a 74 65 78 74 50 74 72 3b 09 2f 2a 20  xt *textPtr;./* 
0cf0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
0d00: 74 20 74 65 78 74 20 77 69 64 67 65 74 2e 20 2a  t text widget. *
0d10: 2f 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  /.    Tcl_Interp
0d20: 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 43 75   *interp;../* Cu
0d30: 72 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65  rrent interprete
0d40: 72 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 72  r. */.    int ar
0d50: 67 63 3b 09 09 09 2f 2a 20 4e 75 6d 62 65 72 20  gc;.../* Number 
0d60: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f  of arguments. */
0d70: 0a 20 20 20 20 63 68 61 72 20 2a 2a 61 72 67 76  .    char **argv
0d80: 3b 09 09 2f 2a 20 41 72 67 75 6d 65 6e 74 20 73  ;../* Argument s
0d90: 74 72 69 6e 67 73 2e 20 20 53 6f 6d 65 6f 6e 65  trings.  Someone
0da0: 20 65 6c 73 65 20 68 61 73 20 61 6c 72 65 61 64   else has alread
0db0: 79 0a 09 09 09 09 20 2a 20 70 61 72 73 65 64 20  y..... * parsed 
0dc0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 65 6e 6f  this command eno
0dd0: 75 67 68 20 74 6f 20 6b 6e 6f 77 20 74 68 61 74  ugh to know that
0de0: 0a 09 09 09 09 20 2a 20 61 72 67 76 5b 31 5d 20  ..... * argv[1] 
0df0: 69 73 20 22 74 61 67 22 2e 20 2a 2f 0a 7b 0a 20  is "tag". */.{. 
0e00: 20 20 20 69 6e 74 20 63 2c 20 69 2c 20 61 64 64     int c, i, add
0e10: 54 61 67 3b 0a 20 20 20 20 73 69 7a 65 5f 74 20  Tag;.    size_t 
0e20: 6c 65 6e 67 74 68 3b 0a 20 20 20 20 63 68 61 72  length;.    char
0e30: 20 2a 66 75 6c 6c 4f 70 74 69 6f 6e 3b 0a 20 20   *fullOption;.  
0e40: 20 20 72 65 67 69 73 74 65 72 20 54 6b 54 65 78    register TkTex
0e50: 74 54 61 67 20 2a 74 61 67 50 74 72 3b 0a 20 20  tTag *tagPtr;.  
0e60: 20 20 54 6b 54 65 78 74 49 6e 64 65 78 20 66 69    TkTextIndex fi
0e70: 72 73 74 2c 20 6c 61 73 74 2c 20 69 6e 64 65 78  rst, last, index
0e80: 31 2c 20 69 6e 64 65 78 32 3b 0a 0a 20 20 20 20  1, index2;..    
0e90: 69 66 20 28 61 72 67 63 20 3c 20 33 29 20 7b 0a  if (argc < 3) {.
0ea0: 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c  .Tcl_AppendResul
0eb0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
0ec0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
0ed0: 62 65 20 5c 22 22 2c 0a 09 09 61 72 67 76 5b 30  be \"",...argv[0
0ee0: 5d 2c 20 22 20 74 61 67 20 6f 70 74 69 6f 6e 20  ], " tag option 
0ef0: 3f 61 72 67 20 61 72 67 20 2e 2e 2e 3f 5c 22 22  ?arg arg ...?\""
0f00: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29  , (char *) NULL)
0f10: 3b 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  ;..return TCL_ER
0f20: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  ROR;.    }.    c
0f30: 20 3d 20 61 72 67 76 5b 32 5d 5b 30 5d 3b 0a 20   = argv[2][0];. 
0f40: 20 20 20 6c 65 6e 67 74 68 20 3d 20 73 74 72 6c     length = strl
0f50: 65 6e 28 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20  en(argv[2]);.   
0f60: 20 69 66 20 28 28 63 20 3d 3d 20 27 61 27 29 20   if ((c == 'a') 
0f70: 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76  && (strncmp(argv
0f80: 5b 32 5d 2c 20 22 61 64 64 22 2c 20 6c 65 6e 67  [2], "add", leng
0f90: 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a 09 66 75  th) == 0)) {..fu
0fa0: 6c 6c 4f 70 74 69 6f 6e 20 3d 20 22 61 64 64 22  llOption = "add"
0fb0: 3b 0a 09 61 64 64 54 61 67 20 3d 20 31 3b 0a 0a  ;..addTag = 1;..
0fc0: 09 61 64 64 41 6e 64 52 65 6d 6f 76 65 3a 0a 09  .addAndRemove:..
0fd0: 69 66 20 28 61 72 67 63 20 3c 20 35 29 20 7b 0a  if (argc < 5) {.
0fe0: 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
0ff0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
1000: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
1010: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 20 20  uld be \"",...  
1020: 20 20 61 72 67 76 5b 30 5d 2c 20 22 20 74 61 67    argv[0], " tag
1030: 20 22 2c 20 66 75 6c 6c 4f 70 74 69 6f 6e 2c 0a   ", fullOption,.
1040: 09 09 20 20 20 20 22 20 74 61 67 4e 61 6d 65 20  ..    " tagName 
1050: 69 6e 64 65 78 31 20 3f 69 6e 64 65 78 32 20 69  index1 ?index2 i
1060: 6e 64 65 78 31 20 69 6e 64 65 78 32 20 2e 2e 2e  ndex1 index2 ...
1070: 3f 5c 22 22 2c 0a 09 09 20 20 20 20 28 63 68 61  ?\"",...    (cha
1080: 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20  r *) NULL);..   
1090: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10a0: 52 3b 0a 09 7d 0a 09 74 61 67 50 74 72 20 3d 20  R;..}..tagPtr = 
10b0: 54 6b 54 65 78 74 43 72 65 61 74 65 54 61 67 28  TkTextCreateTag(
10c0: 74 65 78 74 50 74 72 2c 20 61 72 67 76 5b 33 5d  textPtr, argv[3]
10d0: 29 3b 0a 09 66 6f 72 20 28 69 20 3d 20 34 3b 20  );..for (i = 4; 
10e0: 69 20 3c 20 61 72 67 63 3b 20 69 20 2b 3d 20 32  i < argc; i += 2
10f0: 29 20 7b 0a 09 20 20 20 20 69 66 20 28 54 6b 54  ) {..    if (TkT
1100: 65 78 74 47 65 74 49 6e 64 65 78 28 69 6e 74 65  extGetIndex(inte
1110: 72 70 2c 20 74 65 78 74 50 74 72 2c 20 61 72 67  rp, textPtr, arg
1120: 76 5b 69 5d 2c 20 26 69 6e 64 65 78 31 29 20 21  v[i], &index1) !
1130: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 72 65  = TCL_OK) {...re
1140: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1150: 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28  .    }..    if (
1160: 61 72 67 63 20 3e 20 28 69 2b 31 29 29 20 7b 0a  argc > (i+1)) {.
1170: 09 09 69 66 20 28 54 6b 54 65 78 74 47 65 74 49  ..if (TkTextGetI
1180: 6e 64 65 78 28 69 6e 74 65 72 70 2c 20 74 65 78  ndex(interp, tex
1190: 74 50 74 72 2c 20 61 72 67 76 5b 69 2b 31 5d 2c  tPtr, argv[i+1],
11a0: 20 26 69 6e 64 65 78 32 29 0a 09 09 09 21 3d 20   &index2)....!= 
11b0: 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 20 20 20 20  TCL_OK) {...    
11c0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
11d0: 3b 0a 09 09 7d 0a 09 09 69 66 20 28 54 6b 54 65  ;...}...if (TkTe
11e0: 78 74 49 6e 64 65 78 43 6d 70 28 26 69 6e 64 65  xtIndexCmp(&inde
11f0: 78 31 2c 20 26 69 6e 64 65 78 32 29 20 3e 3d 20  x1, &index2) >= 
1200: 30 29 20 7b 0a 09 09 20 20 20 20 72 65 74 75 72  0) {...    retur
1210: 6e 20 54 43 4c 5f 4f 4b 3b 0a 09 09 7d 0a 09 20  n TCL_OK;...}.. 
1220: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 69 6e     } else {...in
1230: 64 65 78 32 20 3d 20 69 6e 64 65 78 31 3b 0a 09  dex2 = index1;..
1240: 09 54 6b 54 65 78 74 49 6e 64 65 78 46 6f 72 77  .TkTextIndexForw
1250: 43 68 61 72 73 28 26 69 6e 64 65 78 32 2c 20 31  Chars(&index2, 1
1260: 2c 20 26 69 6e 64 65 78 32 29 3b 0a 09 20 20 20  , &index2);..   
1270: 20 7d 0a 20 20 20 20 0a 09 20 20 20 20 69 66 20   }.    ..    if 
1280: 28 74 61 67 50 74 72 2d 3e 61 66 66 65 63 74 73  (tagPtr->affects
1290: 44 69 73 70 6c 61 79 29 20 7b 0a 09 09 54 6b 54  Display) {...TkT
12a0: 65 78 74 52 65 64 72 61 77 54 61 67 28 74 65 78  extRedrawTag(tex
12b0: 74 50 74 72 2c 20 26 69 6e 64 65 78 31 2c 20 26  tPtr, &index1, &
12c0: 69 6e 64 65 78 32 2c 20 74 61 67 50 74 72 2c 20  index2, tagPtr, 
12d0: 21 61 64 64 54 61 67 29 3b 0a 09 20 20 20 20 7d  !addTag);..    }
12e0: 0a 09 20 20 20 20 54 6b 42 54 72 65 65 54 61 67  ..    TkBTreeTag
12f0: 28 26 69 6e 64 65 78 31 2c 20 26 69 6e 64 65 78  (&index1, &index
1300: 32 2c 20 74 61 67 50 74 72 2c 20 61 64 64 54 61  2, tagPtr, addTa
1310: 67 29 3b 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73  g);..}.    } els
1320: 65 20 69 66 20 28 28 63 20 3d 3d 20 27 62 27 29  e if ((c == 'b')
1330: 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67   && (strncmp(arg
1340: 76 5b 32 5d 2c 20 22 62 69 6e 64 22 2c 20 6c 65  v[2], "bind", le
1350: 6e 67 74 68 29 20 3d 3d 20 30 29 29 20 7b 0a 20  ngth) == 0)) {. 
1360: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 74         return Ct
1370: 6b 5f 55 6e 73 75 70 70 6f 72 74 65 64 28 69 6e  k_Unsupported(in
1380: 74 65 72 70 2c 20 22 74 65 78 74 57 69 64 67 65  terp, "textWidge
1390: 74 20 62 69 6e 64 22 29 3b 0a 20 20 20 20 7d 20  t bind");.    } 
13a0: 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27  else if ((c == '
13b0: 63 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28  c') && (strncmp(
13c0: 61 72 67 76 5b 32 5d 2c 20 22 63 67 65 74 22 2c  argv[2], "cget",
13d0: 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a 09   length) == 0)..
13e0: 20 20 20 20 26 26 20 28 6c 65 6e 67 74 68 20 3e      && (length >
13f0: 3d 20 32 29 29 20 7b 0a 09 69 66 20 28 61 72 67  = 2)) {..if (arg
1400: 63 20 21 3d 20 35 29 20 7b 0a 09 20 20 20 20 54  c != 5) {..    T
1410: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1420: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1430: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1440: 20 5c 22 22 2c 0a 09 09 20 20 20 20 61 72 67 76   \"",...    argv
1450: 5b 30 5d 2c 20 22 20 74 61 67 20 63 67 65 74 20  [0], " tag cget 
1460: 74 61 67 4e 61 6d 65 20 6f 70 74 69 6f 6e 5c 22  tagName option\"
1470: 22 2c 0a 09 09 20 20 20 20 28 63 68 61 72 20 2a  ",...    (char *
1480: 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 72 65  ) NULL);..    re
1490: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14a0: 09 7d 0a 09 74 61 67 50 74 72 20 3d 20 46 69 6e  .}..tagPtr = Fin
14b0: 64 54 61 67 28 69 6e 74 65 72 70 2c 20 74 65 78  dTag(interp, tex
14c0: 74 50 74 72 2c 20 61 72 67 76 5b 33 5d 29 3b 0a  tPtr, argv[3]);.
14d0: 09 69 66 20 28 74 61 67 50 74 72 20 3d 3d 20 4e  .if (tagPtr == N
14e0: 55 4c 4c 29 20 7b 0a 09 20 20 20 20 72 65 74 75  ULL) {..    retu
14f0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d  rn TCL_ERROR;..}
1500: 0a 09 72 65 74 75 72 6e 20 54 6b 5f 43 6f 6e 66  ..return Tk_Conf
1510: 69 67 75 72 65 56 61 6c 75 65 28 69 6e 74 65 72  igureValue(inter
1520: 70 2c 20 74 65 78 74 50 74 72 2d 3e 74 6b 77 69  p, textPtr->tkwi
1530: 6e 2c 20 74 61 67 43 6f 6e 66 69 67 53 70 65 63  n, tagConfigSpec
1540: 73 2c 0a 09 09 28 63 68 61 72 20 2a 29 20 74 61  s,...(char *) ta
1550: 67 50 74 72 2c 20 61 72 67 76 5b 34 5d 2c 20 30  gPtr, argv[4], 0
1560: 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66  );.    } else if
1570: 20 28 28 63 20 3d 3d 20 27 63 27 29 20 26 26 20   ((c == 'c') && 
1580: 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b 32 5d  (strncmp(argv[2]
1590: 2c 20 22 63 6f 6e 66 69 67 75 72 65 22 2c 20 6c  , "configure", l
15a0: 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a 09 20 20  ength) == 0)..  
15b0: 20 20 26 26 20 28 6c 65 6e 67 74 68 20 3e 3d 20    && (length >= 
15c0: 32 29 29 20 7b 0a 09 69 66 20 28 61 72 67 63 20  2)) {..if (argc 
15d0: 3c 20 34 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f  < 4) {..    Tcl_
15e0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
15f0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
1600: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
1610: 22 2c 0a 09 09 20 20 20 20 61 72 67 76 5b 30 5d  ",...    argv[0]
1620: 2c 20 22 20 74 61 67 20 63 6f 6e 66 69 67 75 72  , " tag configur
1630: 65 20 74 61 67 4e 61 6d 65 20 3f 6f 70 74 69 6f  e tagName ?optio
1640: 6e 3f 20 3f 76 61 6c 75 65 3f 20 22 2c 0a 09 09  n? ?value? ",...
1650: 20 20 20 20 22 3f 6f 70 74 69 6f 6e 20 76 61 6c      "?option val
1660: 75 65 20 2e 2e 2e 3f 5c 22 22 2c 20 28 63 68 61  ue ...?\"", (cha
1670: 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20  r *) NULL);..   
1680: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1690: 52 3b 0a 09 7d 0a 09 74 61 67 50 74 72 20 3d 20  R;..}..tagPtr = 
16a0: 54 6b 54 65 78 74 43 72 65 61 74 65 54 61 67 28  TkTextCreateTag(
16b0: 74 65 78 74 50 74 72 2c 20 61 72 67 76 5b 33 5d  textPtr, argv[3]
16c0: 29 3b 0a 09 69 66 20 28 61 72 67 63 20 3d 3d 20  );..if (argc == 
16d0: 34 29 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e  4) {..    return
16e0: 20 54 6b 5f 43 6f 6e 66 69 67 75 72 65 49 6e 66   Tk_ConfigureInf
16f0: 6f 28 69 6e 74 65 72 70 2c 20 74 65 78 74 50 74  o(interp, textPt
1700: 72 2d 3e 74 6b 77 69 6e 2c 20 74 61 67 43 6f 6e  r->tkwin, tagCon
1710: 66 69 67 53 70 65 63 73 2c 0a 09 09 20 20 20 20  figSpecs,...    
1720: 28 63 68 61 72 20 2a 29 20 74 61 67 50 74 72 2c  (char *) tagPtr,
1730: 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 2c 20   (char *) NULL, 
1740: 30 29 3b 0a 09 7d 20 65 6c 73 65 20 69 66 20 28  0);..} else if (
1750: 61 72 67 63 20 3d 3d 20 35 29 20 7b 0a 09 20 20  argc == 5) {..  
1760: 20 20 72 65 74 75 72 6e 20 54 6b 5f 43 6f 6e 66    return Tk_Conf
1770: 69 67 75 72 65 49 6e 66 6f 28 69 6e 74 65 72 70  igureInfo(interp
1780: 2c 20 74 65 78 74 50 74 72 2d 3e 74 6b 77 69 6e  , textPtr->tkwin
1790: 2c 20 74 61 67 43 6f 6e 66 69 67 53 70 65 63 73  , tagConfigSpecs
17a0: 2c 0a 09 09 20 20 20 20 28 63 68 61 72 20 2a 29  ,...    (char *)
17b0: 20 74 61 67 50 74 72 2c 20 61 72 67 76 5b 34 5d   tagPtr, argv[4]
17c0: 2c 20 30 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a  , 0);..} else {.
17d0: 09 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 3b  .    int result;
17e0: 0a 0a 09 20 20 20 20 72 65 73 75 6c 74 20 3d 20  ...    result = 
17f0: 54 6b 5f 43 6f 6e 66 69 67 75 72 65 57 69 64 67  Tk_ConfigureWidg
1800: 65 74 28 69 6e 74 65 72 70 2c 20 74 65 78 74 50  et(interp, textP
1810: 74 72 2d 3e 74 6b 77 69 6e 2c 20 74 61 67 43 6f  tr->tkwin, tagCo
1820: 6e 66 69 67 53 70 65 63 73 2c 0a 09 09 20 20 20  nfigSpecs,...   
1830: 20 61 72 67 63 2d 34 2c 20 61 72 67 76 2b 34 2c   argc-4, argv+4,
1840: 20 28 63 68 61 72 20 2a 29 20 74 61 67 50 74 72   (char *) tagPtr
1850: 2c 20 30 29 3b 0a 09 20 20 20 20 2f 2a 0a 09 20  , 0);..    /*.. 
1860: 20 20 20 20 2a 20 53 6f 6d 65 20 6f 66 20 74 68      * Some of th
1870: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
1880: 6f 70 74 69 6f 6e 73 2c 20 6c 69 6b 65 20 2d 75  options, like -u
1890: 6e 64 65 72 6c 69 6e 65 0a 09 20 20 20 20 20 2a  nderline..     *
18a0: 20 61 6e 64 20 2d 6a 75 73 74 69 66 79 2c 20 72   and -justify, r
18b0: 65 71 75 69 72 65 20 61 64 64 69 74 69 6f 6e 61  equire additiona
18c0: 6c 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 28 74  l translation (t
18d0: 68 69 73 20 69 73 0a 09 20 20 20 20 20 2a 20 6e  his is..     * n
18e0: 65 65 64 65 64 20 62 65 63 61 75 73 65 20 77 65  eeded because we
18f0: 20 6e 65 65 64 20 74 6f 20 64 69 73 74 69 6e 67   need to disting
1900: 75 69 73 68 20 61 20 70 61 72 74 69 63 75 6c 61  uish a particula
1910: 72 20 76 61 6c 75 65 0a 09 20 20 20 20 20 2a 20  r value..     * 
1920: 6f 66 20 61 6e 20 6f 70 74 69 6f 6e 20 66 72 6f  of an option fro
1930: 6d 20 22 75 6e 73 70 65 63 69 66 69 65 64 22 29  m "unspecified")
1940: 2e 0a 09 20 20 20 20 20 2a 2f 0a 0a 09 20 20 20  ...     */...   
1950: 20 69 66 20 28 74 61 67 50 74 72 2d 3e 6a 75 73   if (tagPtr->jus
1960: 74 69 66 79 53 74 72 69 6e 67 20 21 3d 20 4e 55  tifyString != NU
1970: 4c 4c 29 20 7b 0a 09 09 69 66 20 28 54 6b 5f 47  LL) {...if (Tk_G
1980: 65 74 4a 75 73 74 69 66 79 28 69 6e 74 65 72 70  etJustify(interp
1990: 2c 20 74 61 67 50 74 72 2d 3e 6a 75 73 74 69 66  , tagPtr->justif
19a0: 79 53 74 72 69 6e 67 2c 0a 09 09 09 26 74 61 67  yString,....&tag
19b0: 50 74 72 2d 3e 6a 75 73 74 69 66 79 29 20 21 3d  Ptr->justify) !=
19c0: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 20 20 20   TCL_OK) {...   
19d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
19e0: 52 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20  R;...}..    }.. 
19f0: 20 20 20 69 66 20 28 74 61 67 50 74 72 2d 3e 6c     if (tagPtr->l
1a00: 4d 61 72 67 69 6e 31 53 74 72 69 6e 67 20 21 3d  Margin1String !=
1a10: 20 4e 55 4c 4c 29 20 7b 0a 09 09 69 66 20 28 54   NULL) {...if (T
1a20: 6b 5f 47 65 74 50 69 78 65 6c 73 28 69 6e 74 65  k_GetPixels(inte
1a30: 72 70 2c 20 74 65 78 74 50 74 72 2d 3e 74 6b 77  rp, textPtr->tkw
1a40: 69 6e 2c 0a 09 09 09 74 61 67 50 74 72 2d 3e 6c  in,....tagPtr->l
1a50: 4d 61 72 67 69 6e 31 53 74 72 69 6e 67 2c 20 26  Margin1String, &
1a60: 74 61 67 50 74 72 2d 3e 6c 4d 61 72 67 69 6e 31  tagPtr->lMargin1
1a70: 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09  ) != TCL_OK) {..
1a80: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1a90: 45 52 52 4f 52 3b 0a 09 09 7d 0a 09 20 20 20 20  ERROR;...}..    
1aa0: 7d 0a 09 20 20 20 20 69 66 20 28 74 61 67 50 74  }..    if (tagPt
1ab0: 72 2d 3e 6c 4d 61 72 67 69 6e 32 53 74 72 69 6e  r->lMargin2Strin
1ac0: 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 69  g != NULL) {...i
1ad0: 66 20 28 54 6b 5f 47 65 74 50 69 78 65 6c 73 28  f (Tk_GetPixels(
1ae0: 69 6e 74 65 72 70 2c 20 74 65 78 74 50 74 72 2d  interp, textPtr-
1af0: 3e 74 6b 77 69 6e 2c 0a 09 09 09 74 61 67 50 74  >tkwin,....tagPt
1b00: 72 2d 3e 6c 4d 61 72 67 69 6e 32 53 74 72 69 6e  r->lMargin2Strin
1b10: 67 2c 20 26 74 61 67 50 74 72 2d 3e 6c 4d 61 72  g, &tagPtr->lMar
1b20: 67 69 6e 32 29 20 21 3d 20 54 43 4c 5f 4f 4b 29  gin2) != TCL_OK)
1b30: 20 7b 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20   {...    return 
1b40: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 09 7d 0a 09  TCL_ERROR;...}..
1b50: 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28 74      }..    if (t
1b60: 61 67 50 74 72 2d 3e 6f 66 66 73 65 74 53 74 72  agPtr->offsetStr
1b70: 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ing != NULL) {..
1b80: 09 69 66 20 28 54 6b 5f 47 65 74 50 69 78 65 6c  .if (Tk_GetPixel
1b90: 73 28 69 6e 74 65 72 70 2c 20 74 65 78 74 50 74  s(interp, textPt
1ba0: 72 2d 3e 74 6b 77 69 6e 2c 20 74 61 67 50 74 72  r->tkwin, tagPtr
1bb0: 2d 3e 6f 66 66 73 65 74 53 74 72 69 6e 67 2c 0a  ->offsetString,.
1bc0: 09 09 09 26 74 61 67 50 74 72 2d 3e 6f 66 66 73  ...&tagPtr->offs
1bd0: 65 74 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  et) != TCL_OK) {
1be0: 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20 54 43  ...    return TC
1bf0: 4c 5f 45 52 52 4f 52 3b 0a 09 09 7d 0a 09 20 20  L_ERROR;...}..  
1c00: 20 20 7d 0a 09 20 20 20 20 69 66 20 28 74 61 67    }..    if (tag
1c10: 50 74 72 2d 3e 72 4d 61 72 67 69 6e 53 74 72 69  Ptr->rMarginStri
1c20: 6e 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09  ng != NULL) {...
1c30: 69 66 20 28 54 6b 5f 47 65 74 50 69 78 65 6c 73  if (Tk_GetPixels
1c40: 28 69 6e 74 65 72 70 2c 20 74 65 78 74 50 74 72  (interp, textPtr
1c50: 2d 3e 74 6b 77 69 6e 2c 0a 09 09 09 74 61 67 50  ->tkwin,....tagP
1c60: 74 72 2d 3e 72 4d 61 72 67 69 6e 53 74 72 69 6e  tr->rMarginStrin
1c70: 67 2c 20 26 74 61 67 50 74 72 2d 3e 72 4d 61 72  g, &tagPtr->rMar
1c80: 67 69 6e 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20  gin) != TCL_OK) 
1c90: 7b 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20 54  {...    return T
1ca0: 43 4c 5f 45 52 52 4f 52 3b 0a 09 09 7d 0a 09 20  CL_ERROR;...}.. 
1cb0: 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28 74 61     }..    if (ta
1cc0: 67 50 74 72 2d 3e 73 70 61 63 69 6e 67 31 53 74  gPtr->spacing1St
1cd0: 72 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a  ring != NULL) {.
1ce0: 09 09 69 66 20 28 54 6b 5f 47 65 74 50 69 78 65  ..if (Tk_GetPixe
1cf0: 6c 73 28 69 6e 74 65 72 70 2c 20 74 65 78 74 50  ls(interp, textP
1d00: 74 72 2d 3e 74 6b 77 69 6e 2c 0a 09 09 09 74 61  tr->tkwin,....ta
1d10: 67 50 74 72 2d 3e 73 70 61 63 69 6e 67 31 53 74  gPtr->spacing1St
1d20: 72 69 6e 67 2c 20 26 74 61 67 50 74 72 2d 3e 73  ring, &tagPtr->s
1d30: 70 61 63 69 6e 67 31 29 20 21 3d 20 54 43 4c 5f  pacing1) != TCL_
1d40: 4f 4b 29 20 7b 0a 09 09 20 20 20 20 72 65 74 75  OK) {...    retu
1d50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 09  rn TCL_ERROR;...
1d60: 7d 0a 09 09 69 66 20 28 74 61 67 50 74 72 2d 3e  }...if (tagPtr->
1d70: 73 70 61 63 69 6e 67 31 20 3c 20 30 29 20 7b 0a  spacing1 < 0) {.
1d80: 09 09 20 20 20 20 74 61 67 50 74 72 2d 3e 73 70  ..    tagPtr->sp
1d90: 61 63 69 6e 67 31 20 3d 20 30 3b 0a 09 09 7d 0a  acing1 = 0;...}.
1da0: 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28  .    }..    if (
1db0: 74 61 67 50 74 72 2d 3e 73 70 61 63 69 6e 67 32  tagPtr->spacing2
1dc0: 53 74 72 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 20  String != NULL) 
1dd0: 7b 0a 09 09 69 66 20 28 54 6b 5f 47 65 74 50 69  {...if (Tk_GetPi
1de0: 78 65 6c 73 28 69 6e 74 65 72 70 2c 20 74 65 78  xels(interp, tex
1df0: 74 50 74 72 2d 3e 74 6b 77 69 6e 2c 0a 09 09 09  tPtr->tkwin,....
1e00: 74 61 67 50 74 72 2d 3e 73 70 61 63 69 6e 67 32  tagPtr->spacing2
1e10: 53 74 72 69 6e 67 2c 20 26 74 61 67 50 74 72 2d  String, &tagPtr-
1e20: 3e 73 70 61 63 69 6e 67 32 29 20 21 3d 20 54 43  >spacing2) != TC
1e30: 4c 5f 4f 4b 29 20 7b 0a 09 09 20 20 20 20 72 65  L_OK) {...    re
1e40: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1e50: 09 09 7d 0a 09 09 69 66 20 28 74 61 67 50 74 72  ..}...if (tagPtr
1e60: 2d 3e 73 70 61 63 69 6e 67 32 20 3c 20 30 29 20  ->spacing2 < 0) 
1e70: 7b 0a 09 09 20 20 20 20 74 61 67 50 74 72 2d 3e  {...    tagPtr->
1e80: 73 70 61 63 69 6e 67 32 20 3d 20 30 3b 0a 09 09  spacing2 = 0;...
1e90: 7d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66  }..    }..    if
1ea0: 20 28 74 61 67 50 74 72 2d 3e 73 70 61 63 69 6e   (tagPtr->spacin
1eb0: 67 33 53 74 72 69 6e 67 20 21 3d 20 4e 55 4c 4c  g3String != NULL
1ec0: 29 20 7b 0a 09 09 69 66 20 28 54 6b 5f 47 65 74  ) {...if (Tk_Get
1ed0: 50 69 78 65 6c 73 28 69 6e 74 65 72 70 2c 20 74  Pixels(interp, t
1ee0: 65 78 74 50 74 72 2d 3e 74 6b 77 69 6e 2c 0a 09  extPtr->tkwin,..
1ef0: 09 09 74 61 67 50 74 72 2d 3e 73 70 61 63 69 6e  ..tagPtr->spacin
1f00: 67 33 53 74 72 69 6e 67 2c 20 26 74 61 67 50 74  g3String, &tagPt
1f10: 72 2d 3e 73 70 61 63 69 6e 67 33 29 20 21 3d 20  r->spacing3) != 
1f20: 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 20 20 20 20  TCL_OK) {...    
1f30: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1f40: 3b 0a 09 09 7d 0a 09 09 69 66 20 28 74 61 67 50  ;...}...if (tagP
1f50: 74 72 2d 3e 73 70 61 63 69 6e 67 33 20 3c 20 30  tr->spacing3 < 0
1f60: 29 20 7b 0a 09 09 20 20 20 20 74 61 67 50 74 72  ) {...    tagPtr
1f70: 2d 3e 73 70 61 63 69 6e 67 33 20 3d 20 30 3b 0a  ->spacing3 = 0;.
1f80: 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  ..}..    }..    
1f90: 69 66 20 28 74 61 67 50 74 72 2d 3e 74 61 62 41  if (tagPtr->tabA
1fa0: 72 72 61 79 50 74 72 20 21 3d 20 4e 55 4c 4c 29  rrayPtr != NULL)
1fb0: 20 7b 0a 09 09 63 6b 66 72 65 65 28 28 63 68 61   {...ckfree((cha
1fc0: 72 20 2a 29 20 74 61 67 50 74 72 2d 3e 74 61 62  r *) tagPtr->tab
1fd0: 41 72 72 61 79 50 74 72 29 3b 0a 09 09 74 61 67  ArrayPtr);...tag
1fe0: 50 74 72 2d 3e 74 61 62 41 72 72 61 79 50 74 72  Ptr->tabArrayPtr
1ff0: 20 3d 20 4e 55 4c 4c 3b 0a 09 20 20 20 20 7d 0a   = NULL;..    }.
2000: 09 20 20 20 20 69 66 20 28 74 61 67 50 74 72 2d  .    if (tagPtr-
2010: 3e 74 61 62 53 74 72 69 6e 67 20 21 3d 20 4e 55  >tabString != NU
2020: 4c 4c 29 20 7b 0a 09 20 20 20 20 09 74 61 67 50  LL) {..    .tagP
2030: 74 72 2d 3e 74 61 62 41 72 72 61 79 50 74 72 20  tr->tabArrayPtr 
2040: 3d 20 54 6b 54 65 78 74 47 65 74 54 61 62 73 28  = TkTextGetTabs(
2050: 69 6e 74 65 72 70 2c 20 74 65 78 74 50 74 72 2d  interp, textPtr-
2060: 3e 74 6b 77 69 6e 2c 0a 09 20 20 20 20 09 09 74  >tkwin,..    ..t
2070: 61 67 50 74 72 2d 3e 74 61 62 53 74 72 69 6e 67  agPtr->tabString
2080: 29 3b 0a 09 09 69 66 20 28 74 61 67 50 74 72 2d  );...if (tagPtr-
2090: 3e 74 61 62 41 72 72 61 79 50 74 72 20 3d 3d 20  >tabArrayPtr == 
20a0: 4e 55 4c 4c 29 20 7b 0a 09 09 20 20 20 20 72 65  NULL) {...    re
20b0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
20c0: 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  ..}..    }..    
20d0: 69 66 20 28 74 61 67 50 74 72 2d 3e 75 6e 64 65  if (tagPtr->unde
20e0: 72 6c 69 6e 65 53 74 72 69 6e 67 20 21 3d 20 4e  rlineString != N
20f0: 55 4c 4c 29 20 7b 0a 09 09 69 66 20 28 54 63 6c  ULL) {...if (Tcl
2100: 5f 47 65 74 42 6f 6f 6c 65 61 6e 28 69 6e 74 65  _GetBoolean(inte
2110: 72 70 2c 20 74 61 67 50 74 72 2d 3e 75 6e 64 65  rp, tagPtr->unde
2120: 72 6c 69 6e 65 53 74 72 69 6e 67 2c 0a 09 09 09  rlineString,....
2130: 26 74 61 67 50 74 72 2d 3e 75 6e 64 65 72 6c 69  &tagPtr->underli
2140: 6e 65 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ne) != TCL_OK) {
2150: 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20 54 43  ...    return TC
2160: 4c 5f 45 52 52 4f 52 3b 0a 09 09 7d 0a 09 20 20  L_ERROR;...}..  
2170: 20 20 7d 0a 09 20 20 20 20 69 66 20 28 28 74 61    }..    if ((ta
2180: 67 50 74 72 2d 3e 77 72 61 70 4d 6f 64 65 20 21  gPtr->wrapMode !
2190: 3d 20 4e 55 4c 4c 29 0a 09 09 20 20 20 20 26 26  = NULL)...    &&
21a0: 20 28 74 61 67 50 74 72 2d 3e 77 72 61 70 4d 6f   (tagPtr->wrapMo
21b0: 64 65 20 21 3d 20 74 6b 54 65 78 74 43 68 61 72  de != tkTextChar
21c0: 55 69 64 29 0a 09 09 20 20 20 20 26 26 20 28 74  Uid)...    && (t
21d0: 61 67 50 74 72 2d 3e 77 72 61 70 4d 6f 64 65 20  agPtr->wrapMode 
21e0: 21 3d 20 74 6b 54 65 78 74 4e 6f 6e 65 55 69 64  != tkTextNoneUid
21f0: 29 0a 09 09 20 20 20 20 26 26 20 28 74 61 67 50  )...    && (tagP
2200: 74 72 2d 3e 77 72 61 70 4d 6f 64 65 20 21 3d 20  tr->wrapMode != 
2210: 74 6b 54 65 78 74 57 6f 72 64 55 69 64 29 29 20  tkTextWordUid)) 
2220: 7b 0a 09 09 54 63 6c 5f 41 70 70 65 6e 64 52 65  {...Tcl_AppendRe
2230: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 62 61  sult(interp, "ba
2240: 64 20 77 72 61 70 20 6d 6f 64 65 20 5c 22 22 2c  d wrap mode \"",
2250: 20 74 61 67 50 74 72 2d 3e 77 72 61 70 4d 6f 64   tagPtr->wrapMod
2260: 65 2c 0a 09 09 09 22 5c 22 3a 20 20 6d 75 73 74  e,...."\":  must
2270: 20 62 65 20 63 68 61 72 2c 20 6e 6f 6e 65 2c 20   be char, none, 
2280: 6f 72 20 77 6f 72 64 22 2c 20 28 63 68 61 72 20  or word", (char 
2290: 2a 29 20 4e 55 4c 4c 29 3b 0a 09 09 74 61 67 50  *) NULL);...tagP
22a0: 74 72 2d 3e 77 72 61 70 4d 6f 64 65 20 3d 20 4e  tr->wrapMode = N
22b0: 55 4c 4c 3b 0a 09 09 72 65 74 75 72 6e 20 54 43  ULL;...return TC
22c0: 4c 5f 45 52 52 4f 52 3b 0a 09 20 20 20 20 7d 0a  L_ERROR;..    }.
22d0: 0a 09 20 20 20 20 74 61 67 50 74 72 2d 3e 61 66  ..    tagPtr->af
22e0: 66 65 63 74 73 44 69 73 70 6c 61 79 20 3d 20 30  fectsDisplay = 0
22f0: 3b 0a 09 20 20 20 20 69 66 20 28 28 74 61 67 50  ;..    if ((tagP
2300: 74 72 2d 3e 6a 75 73 74 69 66 79 53 74 72 69 6e  tr->justifyStrin
2310: 67 20 21 3d 20 4e 55 4c 4c 29 0a 09 09 20 20 20  g != NULL)...   
2320: 20 7c 7c 20 28 74 61 67 50 74 72 2d 3e 6c 4d 61   || (tagPtr->lMa
2330: 72 67 69 6e 31 53 74 72 69 6e 67 20 21 3d 20 4e  rgin1String != N
2340: 55 4c 4c 29 0a 09 09 20 20 20 20 7c 7c 20 28 74  ULL)...    || (t
2350: 61 67 50 74 72 2d 3e 6c 4d 61 72 67 69 6e 32 53  agPtr->lMargin2S
2360: 74 72 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 0a 09  tring != NULL)..
2370: 09 20 20 20 20 7c 7c 20 28 74 61 67 50 74 72 2d  .    || (tagPtr-
2380: 3e 6f 66 66 73 65 74 53 74 72 69 6e 67 20 21 3d  >offsetString !=
2390: 20 4e 55 4c 4c 29 0a 09 09 20 20 20 20 7c 7c 20   NULL)...    || 
23a0: 28 74 61 67 50 74 72 2d 3e 72 4d 61 72 67 69 6e  (tagPtr->rMargin
23b0: 53 74 72 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 0a  String != NULL).
23c0: 09 09 20 20 20 20 7c 7c 20 28 74 61 67 50 74 72  ..    || (tagPtr
23d0: 2d 3e 73 70 61 63 69 6e 67 31 53 74 72 69 6e 67  ->spacing1String
23e0: 20 21 3d 20 4e 55 4c 4c 29 0a 09 09 20 20 20 20   != NULL)...    
23f0: 7c 7c 20 28 74 61 67 50 74 72 2d 3e 73 70 61 63  || (tagPtr->spac
2400: 69 6e 67 32 53 74 72 69 6e 67 20 21 3d 20 4e 55  ing2String != NU
2410: 4c 4c 29 0a 09 09 20 20 20 20 7c 7c 20 28 74 61  LL)...    || (ta
2420: 67 50 74 72 2d 3e 73 70 61 63 69 6e 67 33 53 74  gPtr->spacing3St
2430: 72 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 0a 09 09  ring != NULL)...
2440: 20 20 20 20 7c 7c 20 28 74 61 67 50 74 72 2d 3e      || (tagPtr->
2450: 74 61 62 53 74 72 69 6e 67 20 21 3d 20 4e 55 4c  tabString != NUL
2460: 4c 29 0a 09 09 20 20 20 20 7c 7c 20 28 74 61 67  L)...    || (tag
2470: 50 74 72 2d 3e 75 6e 64 65 72 6c 69 6e 65 53 74  Ptr->underlineSt
2480: 72 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 0a 09 09  ring != NULL)...
2490: 20 20 20 20 7c 7c 20 28 74 61 67 50 74 72 2d 3e      || (tagPtr->
24a0: 77 72 61 70 4d 6f 64 65 20 21 3d 20 4e 55 4c 4c  wrapMode != NULL
24b0: 29 29 20 7b 0a 09 09 74 61 67 50 74 72 2d 3e 61  )) {...tagPtr->a
24c0: 66 66 65 63 74 73 44 69 73 70 6c 61 79 20 3d 20  ffectsDisplay = 
24d0: 31 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 54  1;..    }..    T
24e0: 6b 54 65 78 74 52 65 64 72 61 77 54 61 67 28 74  kTextRedrawTag(t
24f0: 65 78 74 50 74 72 2c 20 28 54 6b 54 65 78 74 49  extPtr, (TkTextI
2500: 6e 64 65 78 20 2a 29 20 4e 55 4c 4c 2c 0a 09 09  ndex *) NULL,...
2510: 20 20 20 20 28 54 6b 54 65 78 74 49 6e 64 65 78      (TkTextIndex
2520: 20 2a 29 20 4e 55 4c 4c 2c 20 74 61 67 50 74 72   *) NULL, tagPtr
2530: 2c 20 31 29 3b 0a 09 20 20 20 20 72 65 74 75 72  , 1);..    retur
2540: 6e 20 72 65 73 75 6c 74 3b 0a 09 7d 0a 20 20 20  n result;..}.   
2550: 20 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d   } else if ((c =
2560: 3d 20 27 64 27 29 20 26 26 20 28 73 74 72 6e 63  = 'd') && (strnc
2570: 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 64 65 6c  mp(argv[2], "del
2580: 65 74 65 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d  ete", length) ==
2590: 20 30 29 29 20 7b 0a 09 54 63 6c 5f 48 61 73 68   0)) {..Tcl_Hash
25a0: 45 6e 74 72 79 20 2a 68 50 74 72 3b 0a 0a 09 69  Entry *hPtr;...i
25b0: 66 20 28 61 72 67 63 20 3c 20 34 29 20 7b 0a 09  f (argc < 4) {..
25c0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
25d0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
25e0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
25f0: 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 20 20 20  ld be \"",...   
2600: 20 61 72 67 76 5b 30 5d 2c 20 22 20 74 61 67 20   argv[0], " tag 
2610: 64 65 6c 65 74 65 20 74 61 67 4e 61 6d 65 20 74  delete tagName t
2620: 61 67 4e 61 6d 65 20 2e 2e 2e 5c 22 22 2c 0a 09  agName ...\"",..
2630: 09 20 20 20 20 28 63 68 61 72 20 2a 29 20 4e 55  .    (char *) NU
2640: 4c 4c 29 3b 0a 09 20 20 20 20 72 65 74 75 72 6e  LL);..    return
2650: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09   TCL_ERROR;..}..
2660: 66 6f 72 20 28 69 20 3d 20 33 3b 20 69 20 3c 20  for (i = 3; i < 
2670: 61 72 67 63 3b 20 69 2b 2b 29 20 7b 0a 09 20 20  argc; i++) {..  
2680: 20 20 68 50 74 72 20 3d 20 54 63 6c 5f 46 69 6e    hPtr = Tcl_Fin
2690: 64 48 61 73 68 45 6e 74 72 79 28 26 74 65 78 74  dHashEntry(&text
26a0: 50 74 72 2d 3e 74 61 67 54 61 62 6c 65 2c 20 61  Ptr->tagTable, a
26b0: 72 67 76 5b 69 5d 29 3b 0a 09 20 20 20 20 69 66  rgv[i]);..    if
26c0: 20 28 68 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20   (hPtr == NULL) 
26d0: 7b 0a 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 20  {...continue;.. 
26e0: 20 20 20 7d 0a 09 20 20 20 20 74 61 67 50 74 72     }..    tagPtr
26f0: 20 3d 20 28 54 6b 54 65 78 74 54 61 67 20 2a 29   = (TkTextTag *)
2700: 20 54 63 6c 5f 47 65 74 48 61 73 68 56 61 6c 75   Tcl_GetHashValu
2710: 65 28 68 50 74 72 29 3b 0a 09 20 20 20 20 69 66  e(hPtr);..    if
2720: 20 28 74 61 67 50 74 72 20 3d 3d 20 74 65 78 74   (tagPtr == text
2730: 50 74 72 2d 3e 73 65 6c 54 61 67 50 74 72 29 20  Ptr->selTagPtr) 
2740: 7b 0a 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 20  {...continue;.. 
2750: 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28 74 61     }..    if (ta
2760: 67 50 74 72 2d 3e 61 66 66 65 63 74 73 44 69 73  gPtr->affectsDis
2770: 70 6c 61 79 29 20 7b 0a 09 09 54 6b 54 65 78 74  play) {...TkText
2780: 52 65 64 72 61 77 54 61 67 28 74 65 78 74 50 74  RedrawTag(textPt
2790: 72 2c 20 28 54 6b 54 65 78 74 49 6e 64 65 78 20  r, (TkTextIndex 
27a0: 2a 29 20 4e 55 4c 4c 2c 0a 09 09 09 28 54 6b 54  *) NULL,....(TkT
27b0: 65 78 74 49 6e 64 65 78 20 2a 29 20 4e 55 4c 4c  extIndex *) NULL
27c0: 2c 20 74 61 67 50 74 72 2c 20 31 29 3b 0a 09 20  , tagPtr, 1);.. 
27d0: 20 20 20 7d 0a 09 20 20 20 20 54 6b 42 54 72 65     }..    TkBTre
27e0: 65 54 61 67 28 54 6b 54 65 78 74 4d 61 6b 65 49  eTag(TkTextMakeI
27f0: 6e 64 65 78 28 74 65 78 74 50 74 72 2d 3e 74 72  ndex(textPtr->tr
2800: 65 65 2c 20 30 2c 20 30 2c 20 26 66 69 72 73 74  ee, 0, 0, &first
2810: 29 2c 0a 09 09 20 20 20 20 54 6b 54 65 78 74 4d  ),...    TkTextM
2820: 61 6b 65 49 6e 64 65 78 28 74 65 78 74 50 74 72  akeIndex(textPtr
2830: 2d 3e 74 72 65 65 2c 0a 09 09 09 20 20 20 20 54  ->tree,....    T
2840: 6b 42 54 72 65 65 4e 75 6d 4c 69 6e 65 73 28 74  kBTreeNumLines(t
2850: 65 78 74 50 74 72 2d 3e 74 72 65 65 29 2c 20 30  extPtr->tree), 0
2860: 2c 20 26 6c 61 73 74 29 2c 0a 09 09 20 20 20 20  , &last),...    
2870: 74 61 67 50 74 72 2c 20 30 29 3b 0a 09 20 20 20  tagPtr, 0);..   
2880: 20 54 63 6c 5f 44 65 6c 65 74 65 48 61 73 68 45   Tcl_DeleteHashE
2890: 6e 74 72 79 28 68 50 74 72 29 3b 0a 09 0a 09 20  ntry(hPtr);.... 
28a0: 20 20 20 2f 2a 0a 09 20 20 20 20 20 2a 20 55 70     /*..     * Up
28b0: 64 61 74 65 20 74 68 65 20 74 61 67 20 70 72 69  date the tag pri
28c0: 6f 72 69 74 69 65 73 20 74 6f 20 72 65 66 6c 65  orities to refle
28d0: 63 74 20 74 68 65 20 64 65 6c 65 74 69 6f 6e 20  ct the deletion 
28e0: 6f 66 20 74 68 69 73 20 74 61 67 2e 0a 09 20 20  of this tag...  
28f0: 20 20 20 2a 2f 0a 0a 09 20 20 20 20 43 68 61 6e     */...    Chan
2900: 67 65 54 61 67 50 72 69 6f 72 69 74 79 28 74 65  geTagPriority(te
2910: 78 74 50 74 72 2c 20 74 61 67 50 74 72 2c 20 74  xtPtr, tagPtr, t
2920: 65 78 74 50 74 72 2d 3e 6e 75 6d 54 61 67 73 2d  extPtr->numTags-
2930: 31 29 3b 0a 09 20 20 20 20 74 65 78 74 50 74 72  1);..    textPtr
2940: 2d 3e 6e 75 6d 54 61 67 73 20 2d 3d 20 31 3b 0a  ->numTags -= 1;.
2950: 09 20 20 20 20 54 6b 54 65 78 74 46 72 65 65 54  .    TkTextFreeT
2960: 61 67 28 74 65 78 74 50 74 72 2c 20 74 61 67 50  ag(textPtr, tagP
2970: 74 72 29 3b 0a 09 7d 0a 20 20 20 20 7d 20 65 6c  tr);..}.    } el
2980: 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27 6c 27  se if ((c == 'l'
2990: 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72  ) && (strncmp(ar
29a0: 67 76 5b 32 5d 2c 20 22 6c 6f 77 65 72 22 2c 20  gv[2], "lower", 
29b0: 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 29 20 7b  length) == 0)) {
29c0: 0a 09 54 6b 54 65 78 74 54 61 67 20 2a 74 61 67  ..TkTextTag *tag
29d0: 50 74 72 32 3b 0a 09 69 6e 74 20 70 72 69 6f 3b  Ptr2;..int prio;
29e0: 0a 0a 09 69 66 20 28 28 61 72 67 63 20 21 3d 20  ...if ((argc != 
29f0: 34 29 20 26 26 20 28 61 72 67 63 20 21 3d 20 35  4) && (argc != 5
2a00: 29 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70  )) {..    Tcl_Ap
2a10: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
2a20: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
2a30: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
2a40: 0a 09 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20  ...    argv[0], 
2a50: 22 20 74 61 67 20 6c 6f 77 65 72 20 74 61 67 4e  " tag lower tagN
2a60: 61 6d 65 20 3f 62 65 6c 6f 77 54 68 69 73 3f 5c  ame ?belowThis?\
2a70: 22 22 2c 0a 09 09 20 20 20 20 28 63 68 61 72 20  "",...    (char 
2a80: 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 72  *) NULL);..    r
2a90: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
2aa0: 0a 09 7d 0a 09 74 61 67 50 74 72 20 3d 20 46 69  ..}..tagPtr = Fi
2ab0: 6e 64 54 61 67 28 69 6e 74 65 72 70 2c 20 74 65  ndTag(interp, te
2ac0: 78 74 50 74 72 2c 20 61 72 67 76 5b 33 5d 29 3b  xtPtr, argv[3]);
2ad0: 0a 09 69 66 20 28 74 61 67 50 74 72 20 3d 3d 20  ..if (tagPtr == 
2ae0: 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 72 65 74  NULL) {..    ret
2af0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 09  urn TCL_ERROR;..
2b00: 7d 0a 09 69 66 20 28 61 72 67 63 20 3d 3d 20 35  }..if (argc == 5
2b10: 29 20 7b 0a 09 20 20 20 20 74 61 67 50 74 72 32  ) {..    tagPtr2
2b20: 20 3d 20 46 69 6e 64 54 61 67 28 69 6e 74 65 72   = FindTag(inter
2b30: 70 2c 20 74 65 78 74 50 74 72 2c 20 61 72 67 76  p, textPtr, argv
2b40: 5b 34 5d 29 3b 0a 09 20 20 20 20 69 66 20 28 74  [4]);..    if (t
2b50: 61 67 50 74 72 32 20 3d 3d 20 4e 55 4c 4c 29 20  agPtr2 == NULL) 
2b60: 7b 0a 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45  {...return TCL_E
2b70: 52 52 4f 52 3b 0a 09 20 20 20 20 7d 0a 09 20 20  RROR;..    }..  
2b80: 20 20 69 66 20 28 74 61 67 50 74 72 2d 3e 70 72    if (tagPtr->pr
2b90: 69 6f 72 69 74 79 20 3c 20 74 61 67 50 74 72 32  iority < tagPtr2
2ba0: 2d 3e 70 72 69 6f 72 69 74 79 29 20 7b 0a 09 09  ->priority) {...
2bb0: 70 72 69 6f 20 3d 20 74 61 67 50 74 72 32 2d 3e  prio = tagPtr2->
2bc0: 70 72 69 6f 72 69 74 79 20 2d 20 31 3b 0a 09 20  priority - 1;.. 
2bd0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 70 72     } else {...pr
2be0: 69 6f 20 3d 20 74 61 67 50 74 72 32 2d 3e 70 72  io = tagPtr2->pr
2bf0: 69 6f 72 69 74 79 3b 0a 09 20 20 20 20 7d 0a 09  iority;..    }..
2c00: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 70 72  } else {..    pr
2c10: 69 6f 20 3d 20 30 3b 0a 09 7d 0a 09 43 68 61 6e  io = 0;..}..Chan
2c20: 67 65 54 61 67 50 72 69 6f 72 69 74 79 28 74 65  geTagPriority(te
2c30: 78 74 50 74 72 2c 20 74 61 67 50 74 72 2c 20 70  xtPtr, tagPtr, p
2c40: 72 69 6f 29 3b 0a 09 54 6b 54 65 78 74 52 65 64  rio);..TkTextRed
2c50: 72 61 77 54 61 67 28 74 65 78 74 50 74 72 2c 20  rawTag(textPtr, 
2c60: 28 54 6b 54 65 78 74 49 6e 64 65 78 20 2a 29 20  (TkTextIndex *) 
2c70: 4e 55 4c 4c 2c 20 28 54 6b 54 65 78 74 49 6e 64  NULL, (TkTextInd
2c80: 65 78 20 2a 29 20 4e 55 4c 4c 2c 0a 09 09 74 61  ex *) NULL,...ta
2c90: 67 50 74 72 2c 20 31 29 3b 0a 20 20 20 20 7d 20  gPtr, 1);.    } 
2ca0: 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20 27  else if ((c == '
2cb0: 6e 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70 28  n') && (strncmp(
2cc0: 61 72 67 76 5b 32 5d 2c 20 22 6e 61 6d 65 73 22  argv[2], "names"
2cd0: 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a  , length) == 0).
2ce0: 09 20 20 20 20 26 26 20 28 6c 65 6e 67 74 68 20  .    && (length 
2cf0: 3e 3d 20 32 29 29 20 7b 0a 09 54 6b 54 65 78 74  >= 2)) {..TkText
2d00: 54 61 67 20 2a 2a 61 72 72 61 79 50 74 72 3b 0a  Tag **arrayPtr;.
2d10: 09 69 6e 74 20 61 72 72 61 79 53 69 7a 65 3b 0a  .int arraySize;.
2d20: 0a 09 69 66 20 28 28 61 72 67 63 20 21 3d 20 33  ..if ((argc != 3
2d30: 29 20 26 26 20 28 61 72 67 63 20 21 3d 20 34 29  ) && (argc != 4)
2d40: 29 20 7b 0a 09 20 20 20 20 54 63 6c 5f 41 70 70  ) {..    Tcl_App
2d50: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
2d60: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
2d70: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
2d80: 09 09 20 20 20 20 61 72 67 76 5b 30 5d 2c 20 22  ..    argv[0], "
2d90: 20 74 61 67 20 6e 61 6d 65 73 20 3f 69 6e 64 65   tag names ?inde
2da0: 78 3f 5c 22 22 2c 0a 09 09 20 20 20 20 28 63 68  x?\"",...    (ch
2db0: 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20  ar *) NULL);..  
2dc0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
2dd0: 4f 52 3b 0a 09 7d 0a 09 69 66 20 28 61 72 67 63  OR;..}..if (argc
2de0: 20 3d 3d 20 33 29 20 7b 0a 09 20 20 20 20 54 63   == 3) {..    Tc
2df0: 6c 5f 48 61 73 68 53 65 61 72 63 68 20 73 65 61  l_HashSearch sea
2e00: 72 63 68 3b 0a 09 20 20 20 20 54 63 6c 5f 48 61  rch;..    Tcl_Ha
2e10: 73 68 45 6e 74 72 79 20 2a 68 50 74 72 3b 0a 0a  shEntry *hPtr;..
2e20: 09 20 20 20 20 61 72 72 61 79 50 74 72 20 3d 20  .    arrayPtr = 
2e30: 28 54 6b 54 65 78 74 54 61 67 20 2a 2a 29 20 63  (TkTextTag **) c
2e40: 6b 61 6c 6c 6f 63 28 28 75 6e 73 69 67 6e 65 64  kalloc((unsigned
2e50: 29 0a 09 09 20 20 20 20 28 74 65 78 74 50 74 72  )...    (textPtr
2e60: 2d 3e 6e 75 6d 54 61 67 73 20 2a 20 73 69 7a 65  ->numTags * size
2e70: 6f 66 28 54 6b 54 65 78 74 54 61 67 20 2a 29 29  of(TkTextTag *))
2e80: 29 3b 0a 09 20 20 20 20 66 6f 72 20 28 69 20 3d  );..    for (i =
2e90: 20 30 2c 20 68 50 74 72 20 3d 20 54 63 6c 5f 46   0, hPtr = Tcl_F
2ea0: 69 72 73 74 48 61 73 68 45 6e 74 72 79 28 26 74  irstHashEntry(&t
2eb0: 65 78 74 50 74 72 2d 3e 74 61 67 54 61 62 6c 65  extPtr->tagTable
2ec0: 2c 20 26 73 65 61 72 63 68 29 3b 0a 09 09 20 20  , &search);...  
2ed0: 20 20 68 50 74 72 20 21 3d 20 4e 55 4c 4c 3b 20    hPtr != NULL; 
2ee0: 69 2b 2b 2c 20 68 50 74 72 20 3d 20 54 63 6c 5f  i++, hPtr = Tcl_
2ef0: 4e 65 78 74 48 61 73 68 45 6e 74 72 79 28 26 73  NextHashEntry(&s
2f00: 65 61 72 63 68 29 29 20 7b 0a 09 09 61 72 72 61  earch)) {...arra
2f10: 79 50 74 72 5b 69 5d 20 3d 20 28 54 6b 54 65 78  yPtr[i] = (TkTex
2f20: 74 54 61 67 20 2a 29 20 54 63 6c 5f 47 65 74 48  tTag *) Tcl_GetH
2f30: 61 73 68 56 61 6c 75 65 28 68 50 74 72 29 3b 0a  ashValue(hPtr);.
2f40: 09 20 20 20 20 7d 0a 09 20 20 20 20 61 72 72 61  .    }..    arra
2f50: 79 53 69 7a 65 20 3d 20 74 65 78 74 50 74 72 2d  ySize = textPtr-
2f60: 3e 6e 75 6d 54 61 67 73 3b 0a 09 7d 20 65 6c 73  >numTags;..} els
2f70: 65 20 7b 0a 09 20 20 20 20 69 66 20 28 54 6b 54  e {..    if (TkT
2f80: 65 78 74 47 65 74 49 6e 64 65 78 28 69 6e 74 65  extGetIndex(inte
2f90: 72 70 2c 20 74 65 78 74 50 74 72 2c 20 61 72 67  rp, textPtr, arg
2fa0: 76 5b 33 5d 2c 20 26 69 6e 64 65 78 31 29 0a 09  v[3], &index1)..
2fb0: 09 20 20 20 20 21 3d 20 54 43 4c 5f 4f 4b 29 20  .    != TCL_OK) 
2fc0: 7b 0a 09 09 72 65 74 75 72 6e 20 54 43 4c 5f 45  {...return TCL_E
2fd0: 52 52 4f 52 3b 0a 09 20 20 20 20 7d 0a 09 20 20  RROR;..    }..  
2fe0: 20 20 61 72 72 61 79 50 74 72 20 3d 20 54 6b 42    arrayPtr = TkB
2ff0: 54 72 65 65 47 65 74 54 61 67 73 28 26 69 6e 64  TreeGetTags(&ind
3000: 65 78 31 2c 20 26 61 72 72 61 79 53 69 7a 65 29  ex1, &arraySize)
3010: 3b 0a 09 20 20 20 20 69 66 20 28 61 72 72 61 79  ;..    if (array
3020: 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  Ptr == NULL) {..
3030: 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a  .return TCL_OK;.
3040: 09 20 20 20 20 7d 0a 09 7d 0a 09 53 6f 72 74 54  .    }..}..SortT
3050: 61 67 73 28 61 72 72 61 79 53 69 7a 65 2c 20 61  ags(arraySize, a
3060: 72 72 61 79 50 74 72 29 3b 0a 09 66 6f 72 20 28  rrayPtr);..for (
3070: 69 20 3d 20 30 3b 20 69 20 3c 20 61 72 72 61 79  i = 0; i < array
3080: 53 69 7a 65 3b 20 69 2b 2b 29 20 7b 0a 09 20 20  Size; i++) {..  
3090: 20 20 74 61 67 50 74 72 20 3d 20 61 72 72 61 79    tagPtr = array
30a0: 50 74 72 5b 69 5d 3b 0a 09 20 20 20 20 54 63 6c  Ptr[i];..    Tcl
30b0: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
30c0: 6e 74 65 72 70 2c 20 74 61 67 50 74 72 2d 3e 6e  nterp, tagPtr->n
30d0: 61 6d 65 29 3b 0a 09 7d 0a 09 63 6b 66 72 65 65  ame);..}..ckfree
30e0: 28 28 63 68 61 72 20 2a 29 20 61 72 72 61 79 50  ((char *) arrayP
30f0: 74 72 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20  tr);.    } else 
3100: 69 66 20 28 28 63 20 3d 3d 20 27 6e 27 29 20 26  if ((c == 'n') &
3110: 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76 5b  & (strncmp(argv[
3120: 32 5d 2c 20 22 6e 65 78 74 72 61 6e 67 65 22 2c  2], "nextrange",
3130: 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a 09   length) == 0)..
3140: 20 20 20 20 26 26 20 28 6c 65 6e 67 74 68 20 3e      && (length >
3150: 3d 20 32 29 29 20 7b 0a 09 54 6b 54 65 78 74 53  = 2)) {..TkTextS
3160: 65 61 72 63 68 20 74 53 65 61 72 63 68 3b 0a 09  earch tSearch;..
3170: 63 68 61 72 20 70 6f 73 69 74 69 6f 6e 5b 54 4b  char position[TK
3180: 5f 50 4f 53 5f 43 48 41 52 53 5d 3b 0a 0a 09 69  _POS_CHARS];...i
3190: 66 20 28 28 61 72 67 63 20 21 3d 20 35 29 20 26  f ((argc != 5) &
31a0: 26 20 28 61 72 67 63 20 21 3d 20 36 29 29 20 7b  & (argc != 6)) {
31b0: 0a 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ..    Tcl_Append
31c0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
31d0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
31e0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 20  ould be \"",... 
31f0: 20 20 20 61 72 67 76 5b 30 5d 2c 20 22 20 74 61     argv[0], " ta
3200: 67 20 6e 65 78 74 72 61 6e 67 65 20 74 61 67 4e  g nextrange tagN
3210: 61 6d 65 20 69 6e 64 65 78 31 20 3f 69 6e 64 65  ame index1 ?inde
3220: 78 32 3f 5c 22 22 2c 0a 09 09 20 20 20 20 28 63  x2?\"",...    (c
3230: 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20  har *) NULL);.. 
3240: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
3250: 52 4f 52 3b 0a 09 7d 0a 09 74 61 67 50 74 72 20  ROR;..}..tagPtr 
3260: 3d 20 46 69 6e 64 54 61 67 28 28 54 63 6c 5f 49  = FindTag((Tcl_I
3270: 6e 74 65 72 70 20 2a 29 20 4e 55 4c 4c 2c 20 74  nterp *) NULL, t
3280: 65 78 74 50 74 72 2c 20 61 72 67 76 5b 33 5d 29  extPtr, argv[3])
3290: 3b 0a 09 69 66 20 28 74 61 67 50 74 72 20 3d 3d  ;..if (tagPtr ==
32a0: 20 4e 55 4c 4c 29 20 7b 0a 09 20 20 20 20 72 65   NULL) {..    re
32b0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 09 7d 0a  turn TCL_OK;..}.
32c0: 09 69 66 20 28 54 6b 54 65 78 74 47 65 74 49 6e  .if (TkTextGetIn
32d0: 64 65 78 28 69 6e 74 65 72 70 2c 20 74 65 78 74  dex(interp, text
32e0: 50 74 72 2c 20 61 72 67 76 5b 34 5d 2c 20 26 69  Ptr, argv[4], &i
32f0: 6e 64 65 78 31 29 20 21 3d 20 54 43 4c 5f 4f 4b  ndex1) != TCL_OK
3300: 29 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20  ) {..    return 
3310: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09 54  TCL_ERROR;..}..T
3320: 6b 54 65 78 74 4d 61 6b 65 49 6e 64 65 78 28 74  kTextMakeIndex(t
3330: 65 78 74 50 74 72 2d 3e 74 72 65 65 2c 20 54 6b  extPtr->tree, Tk
3340: 42 54 72 65 65 4e 75 6d 4c 69 6e 65 73 28 74 65  BTreeNumLines(te
3350: 78 74 50 74 72 2d 3e 74 72 65 65 29 2c 0a 09 09  xtPtr->tree),...
3360: 30 2c 20 26 6c 61 73 74 29 3b 0a 09 69 66 20 28  0, &last);..if (
3370: 61 72 67 63 20 3d 3d 20 35 29 20 7b 0a 09 20 20  argc == 5) {..  
3380: 20 20 69 6e 64 65 78 32 20 3d 20 6c 61 73 74 3b    index2 = last;
3390: 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 54 6b 54  ..} else if (TkT
33a0: 65 78 74 47 65 74 49 6e 64 65 78 28 69 6e 74 65  extGetIndex(inte
33b0: 72 70 2c 20 74 65 78 74 50 74 72 2c 20 61 72 67  rp, textPtr, arg
33c0: 76 5b 35 5d 2c 20 26 69 6e 64 65 78 32 29 0a 09  v[5], &index2)..
33d0: 09 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 20  .!= TCL_OK) {.. 
33e0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
33f0: 52 4f 52 3b 0a 09 7d 0a 0a 09 2f 2a 0a 09 20 2a  ROR;..}.../*.. *
3400: 20 54 68 65 20 73 65 61 72 63 68 20 62 65 6c 6f   The search belo
3410: 77 20 69 73 20 61 20 62 69 74 20 74 72 69 63 6b  w is a bit trick
3420: 79 2e 20 20 52 61 74 68 65 72 20 74 68 61 6e 20  y.  Rather than 
3430: 75 73 65 20 74 68 65 20 42 2d 74 72 65 65 0a 09  use the B-tree..
3440: 20 2a 20 66 61 63 69 6c 69 74 69 65 73 20 74 6f   * facilities to
3450: 20 73 74 6f 70 20 74 68 65 20 73 65 61 72 63 68   stop the search
3460: 20 61 74 20 69 6e 64 65 78 32 2c 20 6c 65 74 20   at index2, let 
3470: 69 74 20 73 65 61 72 63 68 20 75 70 0a 09 20 2a  it search up.. *
3480: 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f   until the end o
3490: 66 20 74 68 65 20 66 69 6c 65 20 62 75 74 20 63  f the file but c
34a0: 68 65 63 6b 20 66 6f 72 20 61 20 70 6f 73 69 74  heck for a posit
34b0: 69 6f 6e 20 70 61 73 74 20 69 6e 64 65 78 32 0a  ion past index2.
34c0: 09 20 2a 20 6f 75 72 73 65 6c 76 65 73 2e 20 20  . * ourselves.  
34d0: 54 68 65 20 72 65 61 73 6f 6e 20 66 6f 72 20 64  The reason for d
34e0: 6f 69 6e 67 20 69 74 20 74 68 69 73 20 77 61 79  oing it this way
34f0: 20 69 73 20 74 68 61 74 20 77 65 20 6f 6e 6c 79   is that we only
3500: 0a 09 20 2a 20 63 61 72 65 20 77 68 65 74 68 65  .. * care whethe
3510: 72 20 74 68 65 20 2a 73 74 61 72 74 2a 20 6f 66  r the *start* of
3520: 20 74 68 65 20 72 61 6e 67 65 20 69 73 20 62 65   the range is be
3530: 66 6f 72 65 20 69 6e 64 65 78 32 3b 20 20 6f 6e  fore index2;  on
3540: 63 65 0a 09 20 2a 20 77 65 20 66 69 6e 64 20 74  ce.. * we find t
3550: 68 65 20 73 74 61 72 74 2c 20 77 65 20 64 6f 6e  he start, we don
3560: 27 74 20 77 61 6e 74 20 54 6b 42 54 72 65 65 4e  't want TkBTreeN
3570: 65 78 74 54 61 67 20 74 6f 20 61 62 6f 72 74 20  extTag to abort 
3580: 74 68 65 0a 09 20 2a 20 73 65 61 72 63 68 20 62  the.. * search b
3590: 65 63 61 75 73 65 20 74 68 65 20 65 6e 64 20 6f  ecause the end o
35a0: 66 20 74 68 65 20 72 61 6e 67 65 20 69 73 20 61  f the range is a
35b0: 66 74 65 72 20 69 6e 64 65 78 32 2e 0a 09 20 2a  fter index2... *
35c0: 2f 0a 0a 09 54 6b 42 54 72 65 65 53 74 61 72 74  /...TkBTreeStart
35d0: 53 65 61 72 63 68 28 26 69 6e 64 65 78 31 2c 20  Search(&index1, 
35e0: 26 6c 61 73 74 2c 20 74 61 67 50 74 72 2c 20 26  &last, tagPtr, &
35f0: 74 53 65 61 72 63 68 29 3b 0a 09 69 66 20 28 54  tSearch);..if (T
3600: 6b 42 54 72 65 65 43 68 61 72 54 61 67 67 65 64  kBTreeCharTagged
3610: 28 26 69 6e 64 65 78 31 2c 20 74 61 67 50 74 72  (&index1, tagPtr
3620: 29 29 20 7b 0a 09 20 20 20 20 54 6b 54 65 78 74  )) {..    TkText
3630: 53 65 67 6d 65 6e 74 20 2a 73 65 67 50 74 72 3b  Segment *segPtr;
3640: 0a 09 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74  ..    int offset
3650: 3b 0a 0a 09 20 20 20 20 2f 2a 0a 09 20 20 20 20  ;...    /*..    
3660: 20 2a 20 54 68 65 20 66 69 72 73 74 20 63 68 61   * The first cha
3670: 72 61 63 74 65 72 20 69 73 20 74 61 67 67 65 64  racter is tagged
3680: 2e 20 20 53 65 65 20 69 66 20 74 68 65 72 65 20  .  See if there 
3690: 69 73 20 61 6e 0a 09 20 20 20 20 20 2a 20 6f 6e  is an..     * on
36a0: 2d 74 6f 67 67 6c 65 20 6a 75 73 74 20 62 65 66  -toggle just bef
36b0: 6f 72 65 20 74 68 65 20 63 68 61 72 61 63 74 65  ore the characte
36c0: 72 2e 20 20 49 66 20 6e 6f 74 2c 20 74 68 65 6e  r.  If not, then
36d0: 0a 09 20 20 20 20 20 2a 20 73 6b 69 70 20 74 6f  ..     * skip to
36e0: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 69 73   the end of this
36f0: 20 74 61 67 67 65 64 20 72 61 6e 67 65 2e 0a 09   tagged range...
3700: 20 20 20 20 20 2a 2f 0a 0a 09 20 20 20 20 66 6f       */...    fo
3710: 72 20 28 73 65 67 50 74 72 20 3d 20 69 6e 64 65  r (segPtr = inde
3720: 78 31 2e 6c 69 6e 65 50 74 72 2d 3e 73 65 67 50  x1.linePtr->segP
3730: 74 72 2c 20 6f 66 66 73 65 74 20 3d 20 69 6e 64  tr, offset = ind
3740: 65 78 31 2e 63 68 61 72 49 6e 64 65 78 3b 20 0a  ex1.charIndex; .
3750: 09 09 20 20 20 20 6f 66 66 73 65 74 20 3e 3d 20  ..    offset >= 
3760: 30 3b 0a 09 09 20 20 20 20 6f 66 66 73 65 74 20  0;...    offset 
3770: 2d 3d 20 73 65 67 50 74 72 2d 3e 73 69 7a 65 2c  -= segPtr->size,
3780: 20 73 65 67 50 74 72 20 3d 20 73 65 67 50 74 72   segPtr = segPtr
3790: 2d 3e 6e 65 78 74 50 74 72 29 20 7b 0a 09 09 69  ->nextPtr) {...i
37a0: 66 20 28 28 6f 66 66 73 65 74 20 3d 3d 20 30 29  f ((offset == 0)
37b0: 20 26 26 20 28 73 65 67 50 74 72 2d 3e 74 79 70   && (segPtr->typ
37c0: 65 50 74 72 20 3d 3d 20 26 74 6b 54 65 78 74 54  ePtr == &tkTextT
37d0: 6f 67 67 6c 65 4f 6e 54 79 70 65 29 0a 09 09 09  oggleOnType)....
37e0: 26 26 20 28 73 65 67 50 74 72 2d 3e 62 6f 64 79  && (segPtr->body
37f0: 2e 74 6f 67 67 6c 65 2e 74 61 67 50 74 72 20 3d  .toggle.tagPtr =
3800: 3d 20 74 61 67 50 74 72 29 29 20 7b 0a 09 09 20  = tagPtr)) {... 
3810: 20 20 20 67 6f 74 6f 20 67 6f 74 53 74 61 72 74     goto gotStart
3820: 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 20  ;...}..    }..  
3830: 20 20 69 66 20 28 21 54 6b 42 54 72 65 65 4e 65    if (!TkBTreeNe
3840: 78 74 54 61 67 28 26 74 53 65 61 72 63 68 29 29  xtTag(&tSearch))
3850: 20 7b 0a 09 09 20 72 65 74 75 72 6e 20 54 43 4c   {... return TCL
3860: 5f 4f 4b 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a  _OK;..    }..}..
3870: 09 2f 2a 0a 09 20 2a 20 46 69 6e 64 20 74 68 65  ./*.. * Find the
3880: 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 74 61   start of the ta
3890: 67 67 65 64 20 72 61 6e 67 65 2e 0a 09 20 2a 2f  gged range... */
38a0: 0a 0a 09 69 66 20 28 21 54 6b 42 54 72 65 65 4e  ...if (!TkBTreeN
38b0: 65 78 74 54 61 67 28 26 74 53 65 61 72 63 68 29  extTag(&tSearch)
38c0: 29 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20  ) {..    return 
38d0: 54 43 4c 5f 4f 4b 3b 0a 09 7d 0a 09 67 6f 74 53  TCL_OK;..}..gotS
38e0: 74 61 72 74 3a 0a 09 69 66 20 28 54 6b 54 65 78  tart:..if (TkTex
38f0: 74 49 6e 64 65 78 43 6d 70 28 26 74 53 65 61 72  tIndexCmp(&tSear
3900: 63 68 2e 63 75 72 49 6e 64 65 78 2c 20 26 69 6e  ch.curIndex, &in
3910: 64 65 78 32 29 20 3e 3d 20 30 29 20 7b 0a 09 20  dex2) >= 0) {.. 
3920: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b     return TCL_OK
3930: 3b 0a 09 7d 0a 09 54 6b 54 65 78 74 50 72 69 6e  ;..}..TkTextPrin
3940: 74 49 6e 64 65 78 28 26 74 53 65 61 72 63 68 2e  tIndex(&tSearch.
3950: 63 75 72 49 6e 64 65 78 2c 20 70 6f 73 69 74 69  curIndex, positi
3960: 6f 6e 29 3b 0a 09 54 63 6c 5f 41 70 70 65 6e 64  on);..Tcl_Append
3970: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
3980: 70 6f 73 69 74 69 6f 6e 29 3b 0a 09 54 6b 42 54  position);..TkBT
3990: 72 65 65 4e 65 78 74 54 61 67 28 26 74 53 65 61  reeNextTag(&tSea
39a0: 72 63 68 29 3b 0a 09 54 6b 54 65 78 74 50 72 69  rch);..TkTextPri
39b0: 6e 74 49 6e 64 65 78 28 26 74 53 65 61 72 63 68  ntIndex(&tSearch
39c0: 2e 63 75 72 49 6e 64 65 78 2c 20 70 6f 73 69 74  .curIndex, posit
39d0: 69 6f 6e 29 3b 0a 09 54 63 6c 5f 41 70 70 65 6e  ion);..Tcl_Appen
39e0: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
39f0: 20 70 6f 73 69 74 69 6f 6e 29 3b 0a 20 20 20 20   position);.    
3a00: 7d 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d  } else if ((c ==
3a10: 20 27 72 27 29 20 26 26 20 28 73 74 72 6e 63 6d   'r') && (strncm
3a20: 70 28 61 72 67 76 5b 32 5d 2c 20 22 72 61 69 73  p(argv[2], "rais
3a30: 65 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30  e", length) == 0
3a40: 29 0a 09 20 20 20 20 26 26 20 28 6c 65 6e 67 74  )..    && (lengt
3a50: 68 20 3e 3d 20 33 29 29 20 7b 0a 09 54 6b 54 65  h >= 3)) {..TkTe
3a60: 78 74 54 61 67 20 2a 74 61 67 50 74 72 32 3b 0a  xtTag *tagPtr2;.
3a70: 09 69 6e 74 20 70 72 69 6f 3b 0a 0a 09 69 66 20  .int prio;...if 
3a80: 28 28 61 72 67 63 20 21 3d 20 34 29 20 26 26 20  ((argc != 4) && 
3a90: 28 61 72 67 63 20 21 3d 20 35 29 29 20 7b 0a 09  (argc != 5)) {..
3aa0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
3ab0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
3ac0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
3ad0: 6c 64 20 62 65 20 5c 22 22 2c 0a 09 09 20 20 20  ld be \"",...   
3ae0: 20 61 72 67 76 5b 30 5d 2c 20 22 20 74 61 67 20   argv[0], " tag 
3af0: 72 61 69 73 65 20 74 61 67 4e 61 6d 65 20 3f 61  raise tagName ?a
3b00: 62 6f 76 65 54 68 69 73 3f 5c 22 22 2c 0a 09 09  boveThis?\"",...
3b10: 20 20 20 20 28 63 68 61 72 20 2a 29 20 4e 55 4c      (char *) NUL
3b20: 4c 29 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20  L);..    return 
3b30: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09 74  TCL_ERROR;..}..t
3b40: 61 67 50 74 72 20 3d 20 46 69 6e 64 54 61 67 28  agPtr = FindTag(
3b50: 69 6e 74 65 72 70 2c 20 74 65 78 74 50 74 72 2c  interp, textPtr,
3b60: 20 61 72 67 76 5b 33 5d 29 3b 0a 09 69 66 20 28   argv[3]);..if (
3b70: 74 61 67 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20  tagPtr == NULL) 
3b80: 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 43  {..    return TC
3b90: 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09 69 66 20  L_ERROR;..}..if 
3ba0: 28 61 72 67 63 20 3d 3d 20 35 29 20 7b 0a 09 20  (argc == 5) {.. 
3bb0: 20 20 20 74 61 67 50 74 72 32 20 3d 20 46 69 6e     tagPtr2 = Fin
3bc0: 64 54 61 67 28 69 6e 74 65 72 70 2c 20 74 65 78  dTag(interp, tex
3bd0: 74 50 74 72 2c 20 61 72 67 76 5b 34 5d 29 3b 0a  tPtr, argv[4]);.
3be0: 09 20 20 20 20 69 66 20 28 74 61 67 50 74 72 32  .    if (tagPtr2
3bf0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 72 65   == NULL) {...re
3c00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
3c10: 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28  .    }..    if (
3c20: 74 61 67 50 74 72 2d 3e 70 72 69 6f 72 69 74 79  tagPtr->priority
3c30: 20 3c 3d 20 74 61 67 50 74 72 32 2d 3e 70 72 69   <= tagPtr2->pri
3c40: 6f 72 69 74 79 29 20 7b 0a 09 09 70 72 69 6f 20  ority) {...prio 
3c50: 3d 20 74 61 67 50 74 72 32 2d 3e 70 72 69 6f 72  = tagPtr2->prior
3c60: 69 74 79 3b 0a 09 20 20 20 20 7d 20 65 6c 73 65  ity;..    } else
3c70: 20 7b 0a 09 09 70 72 69 6f 20 3d 20 74 61 67 50   {...prio = tagP
3c80: 74 72 32 2d 3e 70 72 69 6f 72 69 74 79 20 2b 20  tr2->priority + 
3c90: 31 3b 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c 73  1;..    }..} els
3ca0: 65 20 7b 0a 09 20 20 20 20 70 72 69 6f 20 3d 20  e {..    prio = 
3cb0: 74 65 78 74 50 74 72 2d 3e 6e 75 6d 54 61 67 73  textPtr->numTags
3cc0: 2d 31 3b 0a 09 7d 0a 09 43 68 61 6e 67 65 54 61  -1;..}..ChangeTa
3cd0: 67 50 72 69 6f 72 69 74 79 28 74 65 78 74 50 74  gPriority(textPt
3ce0: 72 2c 20 74 61 67 50 74 72 2c 20 70 72 69 6f 29  r, tagPtr, prio)
3cf0: 3b 0a 09 54 6b 54 65 78 74 52 65 64 72 61 77 54  ;..TkTextRedrawT
3d00: 61 67 28 74 65 78 74 50 74 72 2c 20 28 54 6b 54  ag(textPtr, (TkT
3d10: 65 78 74 49 6e 64 65 78 20 2a 29 20 4e 55 4c 4c  extIndex *) NULL
3d20: 2c 20 28 54 6b 54 65 78 74 49 6e 64 65 78 20 2a  , (TkTextIndex *
3d30: 29 20 4e 55 4c 4c 2c 0a 09 09 74 61 67 50 74 72  ) NULL,...tagPtr
3d40: 2c 20 31 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65  , 1);.    } else
3d50: 20 69 66 20 28 28 63 20 3d 3d 20 27 72 27 29 20   if ((c == 'r') 
3d60: 26 26 20 28 73 74 72 6e 63 6d 70 28 61 72 67 76  && (strncmp(argv
3d70: 5b 32 5d 2c 20 22 72 61 6e 67 65 73 22 2c 20 6c  [2], "ranges", l
3d80: 65 6e 67 74 68 29 20 3d 3d 20 30 29 0a 09 20 20  ength) == 0)..  
3d90: 20 20 26 26 20 28 6c 65 6e 67 74 68 20 3e 3d 20    && (length >= 
3da0: 33 29 29 20 7b 0a 09 54 6b 54 65 78 74 53 65 61  3)) {..TkTextSea
3db0: 72 63 68 20 74 53 65 61 72 63 68 3b 0a 09 63 68  rch tSearch;..ch
3dc0: 61 72 20 70 6f 73 69 74 69 6f 6e 5b 54 4b 5f 50  ar position[TK_P
3dd0: 4f 53 5f 43 48 41 52 53 5d 3b 0a 0a 09 69 66 20  OS_CHARS];...if 
3de0: 28 61 72 67 63 20 21 3d 20 34 29 20 7b 0a 09 20  (argc != 4) {.. 
3df0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
3e00: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
3e10: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
3e20: 64 20 62 65 20 5c 22 22 2c 0a 09 09 20 20 20 20  d be \"",...    
3e30: 61 72 67 76 5b 30 5d 2c 20 22 20 74 61 67 20 72  argv[0], " tag r
3e40: 61 6e 67 65 73 20 74 61 67 4e 61 6d 65 5c 22 22  anges tagName\""
3e50: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29  , (char *) NULL)
3e60: 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 43  ;..    return TC
3e70: 4c 5f 45 52 52 4f 52 3b 0a 09 7d 0a 09 74 61 67  L_ERROR;..}..tag
3e80: 50 74 72 20 3d 20 46 69 6e 64 54 61 67 28 28 54  Ptr = FindTag((T
3e90: 63 6c 5f 49 6e 74 65 72 70 20 2a 29 20 4e 55 4c  cl_Interp *) NUL
3ea0: 4c 2c 20 74 65 78 74 50 74 72 2c 20 61 72 67 76  L, textPtr, argv
3eb0: 5b 33 5d 29 3b 0a 09 69 66 20 28 74 61 67 50 74  [3]);..if (tagPt
3ec0: 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 20 20  r == NULL) {..  
3ed0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
3ee0: 0a 09 7d 0a 09 54 6b 54 65 78 74 4d 61 6b 65 49  ..}..TkTextMakeI
3ef0: 6e 64 65 78 28 74 65 78 74 50 74 72 2d 3e 74 72  ndex(textPtr->tr
3f00: 65 65 2c 20 30 2c 20 30 2c 20 26 66 69 72 73 74  ee, 0, 0, &first
3f10: 29 3b 0a 09 54 6b 54 65 78 74 4d 61 6b 65 49 6e  );..TkTextMakeIn
3f20: 64 65 78 28 74 65 78 74 50 74 72 2d 3e 74 72 65  dex(textPtr->tre
3f30: 65 2c 20 54 6b 42 54 72 65 65 4e 75 6d 4c 69 6e  e, TkBTreeNumLin
3f40: 65 73 28 74 65 78 74 50 74 72 2d 3e 74 72 65 65  es(textPtr->tree
3f50: 29 2c 0a 09 09 30 2c 20 26 6c 61 73 74 29 3b 0a  ),...0, &last);.
3f60: 09 54 6b 42 54 72 65 65 53 74 61 72 74 53 65 61  .TkBTreeStartSea
3f70: 72 63 68 28 26 66 69 72 73 74 2c 20 26 6c 61 73  rch(&first, &las
3f80: 74 2c 20 74 61 67 50 74 72 2c 20 26 74 53 65 61  t, tagPtr, &tSea
3f90: 72 63 68 29 3b 0a 09 69 66 20 28 54 6b 42 54 72  rch);..if (TkBTr
3fa0: 65 65 43 68 61 72 54 61 67 67 65 64 28 26 66 69  eeCharTagged(&fi
3fb0: 72 73 74 2c 20 74 61 67 50 74 72 29 29 20 7b 0a  rst, tagPtr)) {.
3fc0: 09 20 20 20 20 54 6b 54 65 78 74 50 72 69 6e 74  .    TkTextPrint
3fd0: 49 6e 64 65 78 28 26 66 69 72 73 74 2c 20 70 6f  Index(&first, po
3fe0: 73 69 74 69 6f 6e 29 3b 0a 09 20 20 20 20 54 63  sition);..    Tc
3ff0: 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  l_AppendElement(
4000: 69 6e 74 65 72 70 2c 20 70 6f 73 69 74 69 6f 6e  interp, position
4010: 29 3b 0a 09 7d 0a 09 77 68 69 6c 65 20 28 54 6b  );..}..while (Tk
4020: 42 54 72 65 65 4e 65 78 74 54 61 67 28 26 74 53  BTreeNextTag(&tS
4030: 65 61 72 63 68 29 29 20 7b 0a 09 20 20 20 20 54  earch)) {..    T
4040: 6b 54 65 78 74 50 72 69 6e 74 49 6e 64 65 78 28  kTextPrintIndex(
4050: 26 74 53 65 61 72 63 68 2e 63 75 72 49 6e 64 65  &tSearch.curInde
4060: 78 2c 20 70 6f 73 69 74 69 6f 6e 29 3b 0a 09 20  x, position);.. 
4070: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65     Tcl_AppendEle
4080: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 6f 73  ment(interp, pos
4090: 69 74 69 6f 6e 29 3b 0a 09 7d 0a 20 20 20 20 7d  ition);..}.    }
40a0: 20 65 6c 73 65 20 69 66 20 28 28 63 20 3d 3d 20   else if ((c == 
40b0: 27 72 27 29 20 26 26 20 28 73 74 72 6e 63 6d 70  'r') && (strncmp
40c0: 28 61 72 67 76 5b 32 5d 2c 20 22 72 65 6d 6f 76  (argv[2], "remov
40d0: 65 22 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30  e", length) == 0
40e0: 29 0a 09 20 20 20 20 26 26 20 28 6c 65 6e 67 74  )..    && (lengt
40f0: 68 20 3e 3d 20 32 29 29 20 7b 0a 09 66 75 6c 6c  h >= 2)) {..full
4100: 4f 70 74 69 6f 6e 20 3d 20 22 72 65 6d 6f 76 65  Option = "remove
4110: 22 3b 0a 09 61 64 64 54 61 67 20 3d 20 30 3b 0a  ";..addTag = 0;.
4120: 09 67 6f 74 6f 20 61 64 64 41 6e 64 52 65 6d 6f  .goto addAndRemo
4130: 76 65 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  ve;.    } else {
4140: 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75  ..Tcl_AppendResu
4150: 6c 74 28 69 6e 74 65 72 70 2c 20 22 62 61 64 20  lt(interp, "bad 
4160: 74 61 67 20 6f 70 74 69 6f 6e 20 5c 22 22 2c 20  tag option \"", 
4170: 61 72 67 76 5b 32 5d 2c 0a 09 09 22 5c 22 3a 20  argv[2],..."\": 
4180: 20 6d 75 73 74 20 62 65 20 61 64 64 2c 20 62 69   must be add, bi
4190: 6e 64 2c 20 63 67 65 74 2c 20 63 6f 6e 66 69 67  nd, cget, config
41a0: 75 72 65 2c 20 64 65 6c 65 74 65 2c 20 6c 6f 77  ure, delete, low
41b0: 65 72 2c 20 22 2c 0a 09 09 22 6e 61 6d 65 73 2c  er, ",..."names,
41c0: 20 6e 65 78 74 72 61 6e 67 65 2c 20 72 61 69 73   nextrange, rais
41d0: 65 2c 20 72 61 6e 67 65 73 2c 20 6f 72 20 72 65  e, ranges, or re
41e0: 6d 6f 76 65 22 2c 0a 09 09 28 63 68 61 72 20 2a  move",...(char *
41f0: 29 20 4e 55 4c 4c 29 3b 0a 09 72 65 74 75 72 6e  ) NULL);..return
4200: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
4210: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  }.    return TCL
4220: 5f 4f 4b 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d  _OK;.}.../*. *--
4230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4270: 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 54 65 78  ----. *. * TkTex
4280: 74 43 72 65 61 74 65 54 61 67 20 2d 2d 0a 20 2a  tCreateTag --. *
4290: 0a 20 2a 09 46 69 6e 64 20 74 68 65 20 72 65 63  . *.Find the rec
42a0: 6f 72 64 20 64 65 73 63 72 69 62 69 6e 67 20 61  ord describing a
42b0: 20 74 61 67 20 77 69 74 68 69 6e 20 61 20 67 69   tag within a gi
42c0: 76 65 6e 20 74 65 78 74 20 77 69 64 67 65 74 2c  ven text widget,
42d0: 0a 20 2a 09 63 72 65 61 74 69 6e 67 20 61 20 6e  . *.creating a n
42e0: 65 77 20 72 65 63 6f 72 64 20 69 66 20 6f 6e 65  ew record if one
42f0: 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79   doesn't already
4300: 20 65 78 69 73 74 2e 0a 20 2a 0a 20 2a 20 52 65   exist.. *. * Re
4310: 73 75 6c 74 73 3a 0a 20 2a 09 54 68 65 20 72 65  sults:. *.The re
4320: 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 61 20  turn value is a 
4330: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 54  pointer to the T
4340: 6b 54 65 78 74 54 61 67 20 72 65 63 6f 72 64 20  kTextTag record 
4350: 66 6f 72 20 74 61 67 4e 61 6d 65 2e 0a 20 2a 0a  for tagName.. *.
4360: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a   * Side effects:
4370: 0a 20 2a 09 41 20 6e 65 77 20 74 61 67 20 72 65  . *.A new tag re
4380: 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
4390: 69 66 20 74 68 65 72 65 20 69 73 6e 27 74 20 6f  if there isn't o
43a0: 6e 65 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e  ne already defin
43b0: 65 64 0a 20 2a 09 66 6f 72 20 74 61 67 4e 61 6d  ed. *.for tagNam
43c0: 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  e.. *. *--------
43d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
4410: 2a 2f 0a 0a 54 6b 54 65 78 74 54 61 67 20 2a 0a  */..TkTextTag *.
4420: 54 6b 54 65 78 74 43 72 65 61 74 65 54 61 67 28  TkTextCreateTag(
4430: 74 65 78 74 50 74 72 2c 20 74 61 67 4e 61 6d 65  textPtr, tagName
4440: 29 0a 20 20 20 20 54 6b 54 65 78 74 20 2a 74 65  ).    TkText *te
4450: 78 74 50 74 72 3b 09 09 2f 2a 20 57 69 64 67 65  xtPtr;../* Widge
4460: 74 20 69 6e 20 77 68 69 63 68 20 74 61 67 20 69  t in which tag i
4470: 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 2a 2f  s being used. */
4480: 0a 20 20 20 20 63 68 61 72 20 2a 74 61 67 4e 61  .    char *tagNa
4490: 6d 65 3b 09 09 2f 2a 20 4e 61 6d 65 20 6f 66 20  me;../* Name of 
44a0: 64 65 73 69 72 65 64 20 74 61 67 2e 20 2a 2f 0a  desired tag. */.
44b0: 7b 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 54  {.    register T
44c0: 6b 54 65 78 74 54 61 67 20 2a 74 61 67 50 74 72  kTextTag *tagPtr
44d0: 3b 0a 20 20 20 20 54 63 6c 5f 48 61 73 68 45 6e  ;.    Tcl_HashEn
44e0: 74 72 79 20 2a 68 50 74 72 3b 0a 20 20 20 20 69  try *hPtr;.    i
44f0: 6e 74 20 6e 65 77 3b 0a 0a 20 20 20 20 68 50 74  nt new;..    hPt
4500: 72 20 3d 20 54 63 6c 5f 43 72 65 61 74 65 48 61  r = Tcl_CreateHa
4510: 73 68 45 6e 74 72 79 28 26 74 65 78 74 50 74 72  shEntry(&textPtr
4520: 2d 3e 74 61 67 54 61 62 6c 65 2c 20 74 61 67 4e  ->tagTable, tagN
4530: 61 6d 65 2c 20 26 6e 65 77 29 3b 0a 20 20 20 20  ame, &new);.    
4540: 69 66 20 28 21 6e 65 77 29 20 7b 0a 09 72 65 74  if (!new) {..ret
4550: 75 72 6e 20 28 54 6b 54 65 78 74 54 61 67 20 2a  urn (TkTextTag *
4560: 29 20 54 63 6c 5f 47 65 74 48 61 73 68 56 61 6c  ) Tcl_GetHashVal
4570: 75 65 28 68 50 74 72 29 3b 0a 20 20 20 20 7d 0a  ue(hPtr);.    }.
4580: 0a 20 20 20 20 2f 2a 0a 20 20 20 20 20 2a 20 4e  .    /*.     * N
4590: 6f 20 65 78 69 73 74 69 6e 67 20 65 6e 74 72 79  o existing entry
45a0: 2e 20 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  .  Create a new 
45b0: 6f 6e 65 2c 20 69 6e 69 74 69 61 6c 69 7a 65 20  one, initialize 
45c0: 69 74 2c 20 61 6e 64 20 61 64 64 20 61 0a 20 20  it, and add a.  
45d0: 20 20 20 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20     * pointer to 
45e0: 69 74 20 74 6f 20 74 68 65 20 68 61 73 68 20 74  it to the hash t
45f0: 61 62 6c 65 20 65 6e 74 72 79 2e 0a 20 20 20 20  able entry..    
4600: 20 2a 2f 0a 0a 20 20 20 20 74 61 67 50 74 72 20   */..    tagPtr 
4610: 3d 20 28 54 6b 54 65 78 74 54 61 67 20 2a 29 20  = (TkTextTag *) 
4620: 63 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 54  ckalloc(sizeof(T
4630: 6b 54 65 78 74 54 61 67 29 29 3b 0a 20 20 20 20  kTextTag));.    
4640: 74 61 67 50 74 72 2d 3e 6e 61 6d 65 20 3d 20 54  tagPtr->name = T
4650: 63 6c 5f 47 65 74 48 61 73 68 4b 65 79 28 26 74  cl_GetHashKey(&t
4660: 65 78 74 50 74 72 2d 3e 74 61 67 54 61 62 6c 65  extPtr->tagTable
4670: 2c 20 68 50 74 72 29 3b 0a 20 20 20 20 74 61 67  , hPtr);.    tag
4680: 50 74 72 2d 3e 70 72 69 6f 72 69 74 79 20 3d 20  Ptr->priority = 
4690: 74 65 78 74 50 74 72 2d 3e 6e 75 6d 54 61 67 73  textPtr->numTags
46a0: 3b 0a 20 20 20 20 74 61 67 50 74 72 2d 3e 6a 75  ;.    tagPtr->ju
46b0: 73 74 69 66 79 53 74 72 69 6e 67 20 3d 20 4e 55  stifyString = NU
46c0: 4c 4c 3b 0a 20 20 20 20 74 61 67 50 74 72 2d 3e  LL;.    tagPtr->
46d0: 6a 75 73 74 69 66 79 20 3d 20 54 4b 5f 4a 55 53  justify = TK_JUS
46e0: 54 49 46 59 5f 4c 45 46 54 3b 0a 20 20 20 20 74  TIFY_LEFT;.    t
46f0: 61 67 50 74 72 2d 3e 6c 4d 61 72 67 69 6e 31 53  agPtr->lMargin1S
4700: 74 72 69 6e 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20  tring = NULL;.  
4710: 20 20 74 61 67 50 74 72 2d 3e 6c 4d 61 72 67 69    tagPtr->lMargi
4720: 6e 31 20 3d 20 30 3b 0a 20 20 20 20 74 61 67 50  n1 = 0;.    tagP
4730: 74 72 2d 3e 6c 4d 61 72 67 69 6e 32 53 74 72 69  tr->lMargin2Stri
4740: 6e 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 74  ng = NULL;.    t
4750: 61 67 50 74 72 2d 3e 6c 4d 61 72 67 69 6e 32 20  agPtr->lMargin2 
4760: 3d 20 30 3b 0a 20 20 20 20 74 61 67 50 74 72 2d  = 0;.    tagPtr-
4770: 3e 6f 66 66 73 65 74 53 74 72 69 6e 67 20 3d 20  >offsetString = 
4780: 4e 55 4c 4c 3b 0a 20 20 20 20 74 61 67 50 74 72  NULL;.    tagPtr
4790: 2d 3e 6f 66 66 73 65 74 20 3d 20 30 3b 0a 20 20  ->offset = 0;.  
47a0: 20 20 74 61 67 50 74 72 2d 3e 72 4d 61 72 67 69    tagPtr->rMargi
47b0: 6e 53 74 72 69 6e 67 20 3d 20 4e 55 4c 4c 3b 0a  nString = NULL;.
47c0: 20 20 20 20 74 61 67 50 74 72 2d 3e 72 4d 61 72      tagPtr->rMar
47d0: 67 69 6e 20 3d 20 30 3b 0a 20 20 20 20 74 61 67  gin = 0;.    tag
47e0: 50 74 72 2d 3e 73 70 61 63 69 6e 67 31 53 74 72  Ptr->spacing1Str
47f0: 69 6e 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  ing = NULL;.    
4800: 74 61 67 50 74 72 2d 3e 73 70 61 63 69 6e 67 31  tagPtr->spacing1
4810: 20 3d 20 30 3b 0a 20 20 20 20 74 61 67 50 74 72   = 0;.    tagPtr
4820: 2d 3e 73 70 61 63 69 6e 67 32 53 74 72 69 6e 67  ->spacing2String
4830: 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 74 61 67   = NULL;.    tag
4840: 50 74 72 2d 3e 73 70 61 63 69 6e 67 32 20 3d 20  Ptr->spacing2 = 
4850: 30 3b 0a 20 20 20 20 74 61 67 50 74 72 2d 3e 73  0;.    tagPtr->s
4860: 70 61 63 69 6e 67 33 53 74 72 69 6e 67 20 3d 20  pacing3String = 
4870: 4e 55 4c 4c 3b 0a 20 20 20 20 74 61 67 50 74 72  NULL;.    tagPtr
4880: 2d 3e 73 70 61 63 69 6e 67 33 20 3d 20 30 3b 0a  ->spacing3 = 0;.
4890: 20 20 20 20 74 61 67 50 74 72 2d 3e 74 61 62 53      tagPtr->tabS
48a0: 74 72 69 6e 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20  tring = NULL;.  
48b0: 20 20 74 61 67 50 74 72 2d 3e 74 61 62 41 72 72    tagPtr->tabArr
48c0: 61 79 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20  ayPtr = NULL;.  
48d0: 20 20 74 61 67 50 74 72 2d 3e 75 6e 64 65 72 6c    tagPtr->underl
48e0: 69 6e 65 53 74 72 69 6e 67 20 3d 20 4e 55 4c 4c  ineString = NULL
48f0: 3b 0a 20 20 20 20 74 61 67 50 74 72 2d 3e 75 6e  ;.    tagPtr->un
4900: 64 65 72 6c 69 6e 65 20 3d 20 30 3b 0a 20 20 20  derline = 0;.   
4910: 20 74 61 67 50 74 72 2d 3e 77 72 61 70 4d 6f 64   tagPtr->wrapMod
4920: 65 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 74 61  e = NULL;.    ta
4930: 67 50 74 72 2d 3e 61 66 66 65 63 74 73 44 69 73  gPtr->affectsDis
4940: 70 6c 61 79 20 3d 20 30 3b 0a 20 20 20 20 74 65  play = 0;.    te
4950: 78 74 50 74 72 2d 3e 6e 75 6d 54 61 67 73 2b 2b  xtPtr->numTags++
4960: 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 48 61 73  ;.    Tcl_SetHas
4970: 68 56 61 6c 75 65 28 68 50 74 72 2c 20 74 61 67  hValue(hPtr, tag
4980: 50 74 72 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  Ptr);.    return
4990: 20 74 61 67 50 74 72 3b 0a 7d 0a 0c 0a 2f 2a 0a   tagPtr;.}.../*.
49a0: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
49b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49e0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 46  --------. *. * F
49f0: 69 6e 64 54 61 67 20 2d 2d 0a 20 2a 0a 20 2a 09  indTag --. *. *.
4a00: 53 65 65 20 69 66 20 74 61 67 20 69 73 20 64 65  See if tag is de
4a10: 66 69 6e 65 64 20 66 6f 72 20 61 20 67 69 76 65  fined for a give
4a20: 6e 20 77 69 64 67 65 74 2e 0a 20 2a 0a 20 2a 20  n widget.. *. * 
4a30: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 49 66 20 74  Results:. *.If t
4a40: 61 67 4e 61 6d 65 20 69 73 20 64 65 66 69 6e 65  agName is define
4a50: 64 20 69 6e 20 74 65 78 74 50 74 72 2c 20 61 20  d in textPtr, a 
4a60: 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 73 20 54  pointer to its T
4a70: 6b 54 65 78 74 54 61 67 0a 20 2a 09 73 74 72 75  kTextTag. *.stru
4a80: 63 74 75 72 65 20 69 73 20 72 65 74 75 72 6e 65  cture is returne
4a90: 64 2e 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55  d.  Otherwise NU
4aa0: 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 61  LL is returned a
4ab0: 6e 64 20 61 6e 0a 20 2a 09 65 72 72 6f 72 20 6d  nd an. *.error m
4ac0: 65 73 73 61 67 65 20 69 73 20 72 65 63 6f 72 64  essage is record
4ad0: 65 64 20 69 6e 20 69 6e 74 65 72 70 2d 3e 72 65  ed in interp->re
4ae0: 73 75 6c 74 20 75 6e 6c 65 73 73 20 69 6e 74 65  sult unless inte
4af0: 72 70 0a 20 2a 09 69 73 20 4e 55 4c 4c 2e 0a 20  rp. *.is NULL.. 
4b00: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
4b10: 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20  s:. *.None.. *. 
4b20: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
4b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b60: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61  -------. */..sta
4b70: 74 69 63 20 54 6b 54 65 78 74 54 61 67 20 2a 0a  tic TkTextTag *.
4b80: 46 69 6e 64 54 61 67 28 69 6e 74 65 72 70 2c 20  FindTag(interp, 
4b90: 74 65 78 74 50 74 72 2c 20 74 61 67 4e 61 6d 65  textPtr, tagName
4ba0: 29 0a 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70  ).    Tcl_Interp
4bb0: 20 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 49 6e   *interp;../* In
4bc0: 74 65 72 70 72 65 74 65 72 20 74 6f 20 75 73 65  terpreter to use
4bd0: 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
4be0: 67 65 3b 0a 09 09 09 09 20 2a 20 69 66 20 4e 55  ge;..... * if NU
4bf0: 4c 4c 2c 20 74 68 65 6e 20 64 6f 6e 27 74 20 72  LL, then don't r
4c00: 65 63 6f 72 64 20 61 6e 20 65 72 72 6f 72 0a 09  ecord an error..
4c10: 09 09 09 20 2a 20 6d 65 73 73 61 67 65 2e 20 2a  ... * message. *
4c20: 2f 0a 20 20 20 20 54 6b 54 65 78 74 20 2a 74 65  /.    TkText *te
4c30: 78 74 50 74 72 3b 09 09 2f 2a 20 57 69 64 67 65  xtPtr;../* Widge
4c40: 74 20 69 6e 20 77 68 69 63 68 20 74 61 67 20 69  t in which tag i
4c50: 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 2a 2f  s being used. */
4c60: 0a 20 20 20 20 63 68 61 72 20 2a 74 61 67 4e 61  .    char *tagNa
4c70: 6d 65 3b 09 09 2f 2a 20 4e 61 6d 65 20 6f 66 20  me;../* Name of 
4c80: 64 65 73 69 72 65 64 20 74 61 67 2e 20 2a 2f 0a  desired tag. */.
4c90: 7b 0a 20 20 20 20 54 63 6c 5f 48 61 73 68 45 6e  {.    Tcl_HashEn
4ca0: 74 72 79 20 2a 68 50 74 72 3b 0a 0a 20 20 20 20  try *hPtr;..    
4cb0: 68 50 74 72 20 3d 20 54 63 6c 5f 46 69 6e 64 48  hPtr = Tcl_FindH
4cc0: 61 73 68 45 6e 74 72 79 28 26 74 65 78 74 50 74  ashEntry(&textPt
4cd0: 72 2d 3e 74 61 67 54 61 62 6c 65 2c 20 74 61 67  r->tagTable, tag
4ce0: 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66 20 28 68  Name);.    if (h
4cf0: 50 74 72 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  Ptr != NULL) {..
4d00: 72 65 74 75 72 6e 20 28 54 6b 54 65 78 74 54 61  return (TkTextTa
4d10: 67 20 2a 29 20 54 63 6c 5f 47 65 74 48 61 73 68  g *) Tcl_GetHash
4d20: 56 61 6c 75 65 28 68 50 74 72 29 3b 0a 20 20 20  Value(hPtr);.   
4d30: 20 7d 0a 20 20 20 20 69 66 20 28 69 6e 74 65 72   }.    if (inter
4d40: 70 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 54 63  p != NULL) {..Tc
4d50: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
4d60: 6e 74 65 72 70 2c 20 22 74 61 67 20 5c 22 22 2c  nterp, "tag \"",
4d70: 20 74 61 67 4e 61 6d 65 2c 0a 09 09 22 5c 22 20   tagName,..."\" 
4d80: 69 73 6e 27 74 20 64 65 66 69 6e 65 64 20 69 6e  isn't defined in
4d90: 20 74 65 78 74 20 77 69 64 67 65 74 22 2c 20 28   text widget", (
4da0: 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20  char *) NULL);. 
4db0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
4dc0: 4e 55 4c 4c 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d  NULL;.}.../*. *-
4dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4e10: 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 54 6b 54 65  -----. *. * TkTe
4e20: 78 74 46 72 65 65 54 61 67 20 2d 2d 0a 20 2a 0a  xtFreeTag --. *.
4e30: 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75 72   *.This procedur
4e40: 65 20 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e  e is called when
4e50: 20 61 20 74 61 67 20 69 73 20 64 65 6c 65 74 65   a tag is delete
4e60: 64 20 74 6f 20 66 72 65 65 20 75 70 20 74 68 65  d to free up the
4e70: 0a 20 2a 09 6d 65 6d 6f 72 79 20 61 6e 64 20 6f  . *.memory and o
4e80: 74 68 65 72 20 72 65 73 6f 75 72 63 65 73 20 61  ther resources a
4e90: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
4ea0: 68 65 20 74 61 67 2e 0a 20 2a 0a 20 2a 20 52 65  he tag.. *. * Re
4eb0: 73 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a  sults:. *.None..
4ec0: 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63   *. * Side effec
4ed0: 74 73 3a 0a 20 2a 09 4d 65 6d 6f 72 79 20 61 6e  ts:. *.Memory an
4ee0: 64 20 6f 74 68 65 72 20 72 65 73 6f 75 72 63 65  d other resource
4ef0: 73 20 61 72 65 20 66 72 65 65 64 2e 0a 20 2a 0a  s are freed.. *.
4f00: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   *--------------
4f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4f40: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 76 6f  --------. */..vo
4f50: 69 64 0a 54 6b 54 65 78 74 46 72 65 65 54 61 67  id.TkTextFreeTag
4f60: 28 74 65 78 74 50 74 72 2c 20 74 61 67 50 74 72  (textPtr, tagPtr
4f70: 29 0a 20 20 20 20 54 6b 54 65 78 74 20 2a 74 65  ).    TkText *te
4f80: 78 74 50 74 72 3b 09 09 09 2f 2a 20 49 6e 66 6f  xtPtr;.../* Info
4f90: 20 61 62 6f 75 74 20 6f 76 65 72 61 6c 6c 20 77   about overall w
4fa0: 69 64 67 65 74 2e 20 2a 2f 0a 20 20 20 20 72 65  idget. */.    re
4fb0: 67 69 73 74 65 72 20 54 6b 54 65 78 74 54 61 67  gister TkTextTag
4fc0: 20 2a 74 61 67 50 74 72 3b 09 09 2f 2a 20 54 61   *tagPtr;../* Ta
4fd0: 67 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e  g being deleted.
4fe0: 20 2a 2f 0a 7b 0a 20 20 20 20 69 66 20 28 74 61   */.{.    if (ta
4ff0: 67 50 74 72 2d 3e 6a 75 73 74 69 66 79 53 74 72  gPtr->justifyStr
5000: 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ing != NULL) {..
5010: 63 6b 66 72 65 65 28 74 61 67 50 74 72 2d 3e 6a  ckfree(tagPtr->j
5020: 75 73 74 69 66 79 53 74 72 69 6e 67 29 3b 0a 20  ustifyString);. 
5030: 20 20 20 7d 0a 20 20 20 20 69 66 20 28 74 61 67     }.    if (tag
5040: 50 74 72 2d 3e 6c 4d 61 72 67 69 6e 31 53 74 72  Ptr->lMargin1Str
5050: 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ing != NULL) {..
5060: 63 6b 66 72 65 65 28 74 61 67 50 74 72 2d 3e 6c  ckfree(tagPtr->l
5070: 4d 61 72 67 69 6e 31 53 74 72 69 6e 67 29 3b 0a  Margin1String);.
5080: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 74 61      }.    if (ta
5090: 67 50 74 72 2d 3e 6c 4d 61 72 67 69 6e 32 53 74  gPtr->lMargin2St
50a0: 72 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a  ring != NULL) {.
50b0: 09 63 6b 66 72 65 65 28 74 61 67 50 74 72 2d 3e  .ckfree(tagPtr->
50c0: 6c 4d 61 72 67 69 6e 32 53 74 72 69 6e 67 29 3b  lMargin2String);
50d0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 74  .    }.    if (t
50e0: 61 67 50 74 72 2d 3e 6f 66 66 73 65 74 53 74 72  agPtr->offsetStr
50f0: 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ing != NULL) {..
5100: 63 6b 66 72 65 65 28 74 61 67 50 74 72 2d 3e 6f  ckfree(tagPtr->o
5110: 66 66 73 65 74 53 74 72 69 6e 67 29 3b 0a 20 20  ffsetString);.  
5120: 20 20 7d 0a 20 20 20 20 69 66 20 28 74 61 67 50    }.    if (tagP
5130: 74 72 2d 3e 72 4d 61 72 67 69 6e 53 74 72 69 6e  tr->rMarginStrin
5140: 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 63 6b  g != NULL) {..ck
5150: 66 72 65 65 28 74 61 67 50 74 72 2d 3e 72 4d 61  free(tagPtr->rMa
5160: 72 67 69 6e 53 74 72 69 6e 67 29 3b 0a 20 20 20  rginString);.   
5170: 20 7d 0a 20 20 20 20 69 66 20 28 74 61 67 50 74   }.    if (tagPt
5180: 72 2d 3e 73 70 61 63 69 6e 67 31 53 74 72 69 6e  r->spacing1Strin
5190: 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 63 6b  g != NULL) {..ck
51a0: 66 72 65 65 28 74 61 67 50 74 72 2d 3e 73 70 61  free(tagPtr->spa
51b0: 63 69 6e 67 31 53 74 72 69 6e 67 29 3b 0a 20 20  cing1String);.  
51c0: 20 20 7d 0a 20 20 20 20 69 66 20 28 74 61 67 50    }.    if (tagP
51d0: 74 72 2d 3e 73 70 61 63 69 6e 67 32 53 74 72 69  tr->spacing2Stri
51e0: 6e 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 63  ng != NULL) {..c
51f0: 6b 66 72 65 65 28 74 61 67 50 74 72 2d 3e 73 70  kfree(tagPtr->sp
5200: 61 63 69 6e 67 32 53 74 72 69 6e 67 29 3b 0a 20  acing2String);. 
5210: 20 20 20 7d 0a 20 20 20 20 69 66 20 28 74 61 67     }.    if (tag
5220: 50 74 72 2d 3e 73 70 61 63 69 6e 67 33 53 74 72  Ptr->spacing3Str
5230: 69 6e 67 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ing != NULL) {..
5240: 63 6b 66 72 65 65 28 74 61 67 50 74 72 2d 3e 73  ckfree(tagPtr->s
5250: 70 61 63 69 6e 67 33 53 74 72 69 6e 67 29 3b 0a  pacing3String);.
5260: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 74 61      }.    if (ta
5270: 67 50 74 72 2d 3e 74 61 62 53 74 72 69 6e 67 20  gPtr->tabString 
5280: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 63 6b 66 72  != NULL) {..ckfr
5290: 65 65 28 74 61 67 50 74 72 2d 3e 74 61 62 53 74  ee(tagPtr->tabSt
52a0: 72 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ring);.    }.   
52b0: 20 69 66 20 28 74 61 67 50 74 72 2d 3e 74 61 62   if (tagPtr->tab
52c0: 41 72 72 61 79 50 74 72 20 21 3d 20 4e 55 4c 4c  ArrayPtr != NULL
52d0: 29 20 7b 0a 09 63 6b 66 72 65 65 28 28 63 68 61  ) {..ckfree((cha
52e0: 72 20 2a 29 20 74 61 67 50 74 72 2d 3e 74 61 62  r *) tagPtr->tab
52f0: 41 72 72 61 79 50 74 72 29 3b 0a 20 20 20 20 7d  ArrayPtr);.    }
5300: 0a 20 20 20 20 69 66 20 28 74 61 67 50 74 72 2d  .    if (tagPtr-
5310: 3e 75 6e 64 65 72 6c 69 6e 65 53 74 72 69 6e 67  >underlineString
5320: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 63 6b 66   != NULL) {..ckf
5330: 72 65 65 28 74 61 67 50 74 72 2d 3e 75 6e 64 65  ree(tagPtr->unde
5340: 72 6c 69 6e 65 53 74 72 69 6e 67 29 3b 0a 20 20  rlineString);.  
5350: 20 20 7d 0a 20 20 20 20 63 6b 66 72 65 65 28 28    }.    ckfree((
5360: 63 68 61 72 20 2a 29 20 74 61 67 50 74 72 29 3b  char *) tagPtr);
5370: 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  .}.../*. *------
5380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
53a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
53b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
53c0: 0a 20 2a 0a 20 2a 20 53 6f 72 74 54 61 67 73 20  . *. * SortTags 
53d0: 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72  --. *. *.This pr
53e0: 6f 63 65 64 75 72 65 20 73 6f 72 74 73 20 61 6e  ocedure sorts an
53f0: 20 61 72 72 61 79 20 6f 66 20 74 61 67 20 70 6f   array of tag po
5400: 69 6e 74 65 72 73 20 69 6e 20 69 6e 63 72 65 61  inters in increa
5410: 73 69 6e 67 0a 20 2a 09 6f 72 64 65 72 20 6f 66  sing. *.order of
5420: 20 70 72 69 6f 72 69 74 79 2c 20 6f 70 74 69 6d   priority, optim
5430: 69 7a 69 6e 67 20 66 6f 72 20 74 68 65 20 63 6f  izing for the co
5440: 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20  mmon case where 
5450: 74 68 65 0a 20 2a 09 61 72 72 61 79 20 69 73 20  the. *.array is 
5460: 73 6d 61 6c 6c 2e 0a 20 2a 0a 20 2a 20 52 65 73  small.. *. * Res
5470: 75 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20  ults:. *.None.. 
5480: 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  *. * Side effect
5490: 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20  s:. *.None.. *. 
54a0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
54b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
54c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
54d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
54e0: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61  -------. */..sta
54f0: 74 69 63 20 76 6f 69 64 0a 53 6f 72 74 54 61 67  tic void.SortTag
5500: 73 28 6e 75 6d 54 61 67 73 2c 20 74 61 67 41 72  s(numTags, tagAr
5510: 72 61 79 50 74 72 29 0a 20 20 20 20 69 6e 74 20  rayPtr).    int 
5520: 6e 75 6d 54 61 67 73 3b 09 09 2f 2a 20 4e 75 6d  numTags;../* Num
5530: 62 65 72 20 6f 66 20 74 61 67 20 70 6f 69 6e 74  ber of tag point
5540: 65 72 73 20 61 74 20 2a 74 61 67 41 72 72 61 79  ers at *tagArray
5550: 50 74 72 2e 20 2a 2f 0a 20 20 20 20 54 6b 54 65  Ptr. */.    TkTe
5560: 78 74 54 61 67 20 2a 2a 74 61 67 41 72 72 61 79  xtTag **tagArray
5570: 50 74 72 3b 09 2f 2a 20 50 6f 69 6e 74 65 72 20  Ptr;./* Pointer 
5580: 74 6f 20 61 72 72 61 79 20 6f 66 20 70 6f 69 6e  to array of poin
5590: 74 65 72 73 2e 20 2a 2f 0a 7b 0a 20 20 20 20 69  ters. */.{.    i
55a0: 6e 74 20 69 2c 20 6a 2c 20 70 72 69 6f 3b 0a 20  nt i, j, prio;. 
55b0: 20 20 20 72 65 67 69 73 74 65 72 20 54 6b 54 65     register TkTe
55c0: 78 74 54 61 67 20 2a 2a 74 61 67 50 74 72 50 74  xtTag **tagPtrPt
55d0: 72 3b 0a 20 20 20 20 54 6b 54 65 78 74 54 61 67  r;.    TkTextTag
55e0: 20 2a 2a 6d 61 78 50 74 72 50 74 72 2c 20 2a 74   **maxPtrPtr, *t
55f0: 6d 70 3b 0a 0a 20 20 20 20 69 66 20 28 6e 75 6d  mp;..    if (num
5600: 54 61 67 73 20 3c 20 32 29 20 7b 0a 09 72 65 74  Tags < 2) {..ret
5610: 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  urn;.    }.    i
5620: 66 20 28 6e 75 6d 54 61 67 73 20 3c 20 32 30 29  f (numTags < 20)
5630: 20 7b 0a 09 66 6f 72 20 28 69 20 3d 20 6e 75 6d   {..for (i = num
5640: 54 61 67 73 2d 31 3b 20 69 20 3e 20 30 3b 20 69  Tags-1; i > 0; i
5650: 2d 2d 2c 20 74 61 67 41 72 72 61 79 50 74 72 2b  --, tagArrayPtr+
5660: 2b 29 20 7b 0a 09 20 20 20 20 6d 61 78 50 74 72  +) {..    maxPtr
5670: 50 74 72 20 3d 20 74 61 67 50 74 72 50 74 72 20  Ptr = tagPtrPtr 
5680: 3d 20 74 61 67 41 72 72 61 79 50 74 72 3b 0a 09  = tagArrayPtr;..
5690: 20 20 20 20 70 72 69 6f 20 3d 20 74 61 67 50 74      prio = tagPt
56a0: 72 50 74 72 5b 30 5d 2d 3e 70 72 69 6f 72 69 74  rPtr[0]->priorit
56b0: 79 3b 0a 09 20 20 20 20 66 6f 72 20 28 6a 20 3d  y;..    for (j =
56c0: 20 69 2c 20 74 61 67 50 74 72 50 74 72 2b 2b 3b   i, tagPtrPtr++;
56d0: 20 6a 20 3e 20 30 3b 20 6a 2d 2d 2c 20 74 61 67   j > 0; j--, tag
56e0: 50 74 72 50 74 72 2b 2b 29 20 7b 0a 09 09 69 66  PtrPtr++) {...if
56f0: 20 28 74 61 67 50 74 72 50 74 72 5b 30 5d 2d 3e   (tagPtrPtr[0]->
5700: 70 72 69 6f 72 69 74 79 20 3c 20 70 72 69 6f 29  priority < prio)
5710: 20 7b 0a 09 09 20 20 20 20 70 72 69 6f 20 3d 20   {...    prio = 
5720: 74 61 67 50 74 72 50 74 72 5b 30 5d 2d 3e 70 72  tagPtrPtr[0]->pr
5730: 69 6f 72 69 74 79 3b 0a 09 09 20 20 20 20 6d 61  iority;...    ma
5740: 78 50 74 72 50 74 72 20 3d 20 74 61 67 50 74 72  xPtrPtr = tagPtr
5750: 50 74 72 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a  Ptr;...}..    }.
5760: 09 20 20 20 20 74 6d 70 20 3d 20 2a 6d 61 78 50  .    tmp = *maxP
5770: 74 72 50 74 72 3b 0a 09 20 20 20 20 2a 6d 61 78  trPtr;..    *max
5780: 50 74 72 50 74 72 20 3d 20 2a 74 61 67 41 72 72  PtrPtr = *tagArr
5790: 61 79 50 74 72 3b 0a 09 20 20 20 20 2a 74 61 67  ayPtr;..    *tag
57a0: 41 72 72 61 79 50 74 72 20 3d 20 74 6d 70 3b 0a  ArrayPtr = tmp;.
57b0: 09 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  .}.    } else {.
57c0: 09 71 73 6f 72 74 28 28 56 4f 49 44 20 2a 29 20  .qsort((VOID *) 
57d0: 74 61 67 41 72 72 61 79 50 74 72 2c 20 28 75 6e  tagArrayPtr, (un
57e0: 73 69 67 6e 65 64 29 20 6e 75 6d 54 61 67 73 2c  signed) numTags,
57f0: 20 73 69 7a 65 6f 66 20 28 54 6b 54 65 78 74 54   sizeof (TkTextT
5800: 61 67 20 2a 29 2c 0a 09 09 20 20 20 20 54 61 67  ag *),...    Tag
5810: 53 6f 72 74 50 72 6f 63 29 3b 0a 20 20 20 20 7d  SortProc);.    }
5820: 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  .}.../*. *------
5830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5870: 0a 20 2a 0a 20 2a 20 54 61 67 53 6f 72 74 50 72  . *. * TagSortPr
5880: 6f 63 20 2d 2d 0a 20 2a 0a 20 2a 09 54 68 69 73  oc --. *. *.This
5890: 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 63 61   procedure is ca
58a0: 6c 6c 65 64 20 62 79 20 71 73 6f 72 74 20 77 68  lled by qsort wh
58b0: 65 6e 20 73 6f 72 74 69 6e 67 20 61 6e 20 61 72  en sorting an ar
58c0: 72 61 79 20 6f 66 0a 20 2a 09 74 61 67 73 20 69  ray of. *.tags i
58d0: 6e 20 70 72 69 6f 72 69 74 79 20 6f 72 64 65 72  n priority order
58e0: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a  .. *. * Results:
58f0: 0a 20 2a 09 54 68 65 20 72 65 74 75 72 6e 20 76  . *.The return v
5900: 61 6c 75 65 20 69 73 20 2d 31 20 69 66 20 74 68  alue is -1 if th
5910: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
5920: 20 73 68 6f 75 6c 64 20 62 65 20 62 65 66 6f 72   should be befor
5930: 65 0a 20 2a 09 74 68 65 20 73 65 63 6f 6e 64 20  e. *.the second 
5940: 65 6c 65 6d 65 6e 74 20 28 69 2e 65 2e 20 69 74  element (i.e. it
5950: 20 68 61 73 20 6c 6f 77 65 72 20 70 72 69 6f 72   has lower prior
5960: 69 74 79 29 2c 20 30 20 69 66 20 69 74 27 73 0a  ity), 0 if it's.
5970: 20 2a 09 65 71 75 69 76 61 6c 65 6e 74 20 28 74   *.equivalent (t
5980: 68 69 73 20 73 68 6f 75 6c 64 20 6e 65 76 65 72  his should never
5990: 20 68 61 70 70 65 6e 21 29 2c 20 61 6e 64 20 31   happen!), and 1
59a0: 20 69 66 20 69 74 20 73 68 6f 75 6c 64 20 62 65   if it should be
59b0: 0a 20 2a 09 61 66 74 65 72 20 74 68 65 20 73 65  . *.after the se
59c0: 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 2a  cond element.. *
59d0: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
59e0: 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a  :. *.None.. *. *
59f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a30: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 0a 73 74 61 74  ------. */..stat
5a40: 69 63 20 69 6e 74 0a 54 61 67 53 6f 72 74 50 72  ic int.TagSortPr
5a50: 6f 63 28 66 69 72 73 74 2c 20 73 65 63 6f 6e 64  oc(first, second
5a60: 29 0a 20 20 20 20 43 4f 4e 53 54 20 56 4f 49 44  ).    CONST VOID
5a70: 20 2a 66 69 72 73 74 2c 20 2a 73 65 63 6f 6e 64   *first, *second
5a80: 3b 09 09 2f 2a 20 45 6c 65 6d 65 6e 74 73 20 74  ;../* Elements t
5a90: 6f 20 62 65 20 63 6f 6d 70 61 72 65 64 2e 20 2a  o be compared. *
5aa0: 2f 0a 7b 0a 20 20 20 20 54 6b 54 65 78 74 54 61  /.{.    TkTextTa
5ab0: 67 20 2a 74 61 67 50 74 72 31 2c 20 2a 74 61 67  g *tagPtr1, *tag
5ac0: 50 74 72 32 3b 0a 0a 20 20 20 20 74 61 67 50 74  Ptr2;..    tagPt
5ad0: 72 31 20 3d 20 2a 20 28 54 6b 54 65 78 74 54 61  r1 = * (TkTextTa
5ae0: 67 20 2a 2a 29 20 66 69 72 73 74 3b 0a 20 20 20  g **) first;.   
5af0: 20 74 61 67 50 74 72 32 20 3d 20 2a 20 28 54 6b   tagPtr2 = * (Tk
5b00: 54 65 78 74 54 61 67 20 2a 2a 29 20 73 65 63 6f  TextTag **) seco
5b10: 6e 64 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 74  nd;.    return t
5b20: 61 67 50 74 72 31 2d 3e 70 72 69 6f 72 69 74 79  agPtr1->priority
5b30: 20 2d 20 74 61 67 50 74 72 32 2d 3e 70 72 69 6f   - tagPtr2->prio
5b40: 72 69 74 79 3b 0a 7d 0a 0c 0a 2f 2a 0a 20 2a 2d  rity;.}.../*. *-
5b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b90: 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 43 68 61 6e  -----. *. * Chan
5ba0: 67 65 54 61 67 50 72 69 6f 72 69 74 79 20 2d 2d  geTagPriority --
5bb0: 0a 20 2a 0a 20 2a 09 54 68 69 73 20 70 72 6f 63  . *. *.This proc
5bc0: 65 64 75 72 65 20 63 68 61 6e 67 65 73 20 74 68  edure changes th
5bd0: 65 20 70 72 69 6f 72 69 74 79 20 6f 66 20 61 20  e priority of a 
5be0: 74 61 67 20 62 79 20 6d 6f 64 69 66 79 69 6e 67  tag by modifying
5bf0: 0a 20 2a 09 69 74 73 20 70 72 69 6f 72 69 74 79  . *.its priority
5c00: 20 61 6e 64 20 74 68 65 20 70 72 69 6f 72 69 74   and the priorit
5c10: 69 65 73 20 6f 66 20 6f 74 68 65 72 20 74 61 67  ies of other tag
5c20: 73 20 74 68 61 74 20 61 72 65 20 61 66 66 65 63  s that are affec
5c30: 74 65 64 0a 20 2a 09 62 79 20 74 68 65 20 63 68  ted. *.by the ch
5c40: 61 6e 67 65 2e 0a 20 2a 0a 20 2a 20 52 65 73 75  ange.. *. * Resu
5c50: 6c 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a  lts:. *.None.. *
5c60: 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73  . * Side effects
5c70: 3a 0a 20 2a 09 50 72 69 6f 72 69 74 69 65 73 20  :. *.Priorities 
5c80: 6d 61 79 20 62 65 20 63 68 61 6e 67 65 64 20 66  may be changed f
5c90: 6f 72 20 73 6f 6d 65 20 6f 72 20 61 6c 6c 20 6f  or some or all o
5ca0: 66 20 74 68 65 20 74 61 67 73 20 69 6e 0a 20 2a  f the tags in. *
5cb0: 09 74 65 78 74 50 74 72 2e 20 20 54 68 65 20 74  .textPtr.  The t
5cc0: 61 67 73 20 77 69 6c 6c 20 62 65 20 61 72 72 61  ags will be arra
5cd0: 6e 67 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  nged so that the
5ce0: 72 65 20 69 73 20 65 78 61 63 74 6c 79 0a 20 2a  re is exactly. *
5cf0: 09 6f 6e 65 20 74 61 67 20 61 74 20 65 61 63 68  .one tag at each
5d00: 20 70 72 69 6f 72 69 74 79 20 6c 65 76 65 6c 20   priority level 
5d10: 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 74 65  between 0 and te
5d20: 78 74 50 74 72 2d 3e 6e 75 6d 54 61 67 73 2d 31  xtPtr->numTags-1
5d30: 2c 0a 20 2a 09 77 69 74 68 20 74 61 67 50 74 72  ,. *.with tagPtr
5d40: 20 61 74 20 70 72 69 6f 72 69 74 79 20 22 70 72   at priority "pr
5d50: 69 6f 22 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d  io".. *. *------
5d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5da0: 0a 20 2a 2f 0a 0a 73 74 61 74 69 63 20 76 6f 69  . */..static voi
5db0: 64 0a 43 68 61 6e 67 65 54 61 67 50 72 69 6f 72  d.ChangeTagPrior
5dc0: 69 74 79 28 74 65 78 74 50 74 72 2c 20 74 61 67  ity(textPtr, tag
5dd0: 50 74 72 2c 20 70 72 69 6f 29 0a 20 20 20 20 54  Ptr, prio).    T
5de0: 6b 54 65 78 74 20 2a 74 65 78 74 50 74 72 3b 09  kText *textPtr;.
5df0: 09 09 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e  ../* Information
5e00: 20 61 62 6f 75 74 20 74 65 78 74 20 77 69 64 67   about text widg
5e10: 65 74 2e 20 2a 2f 0a 20 20 20 20 54 6b 54 65 78  et. */.    TkTex
5e20: 74 54 61 67 20 2a 74 61 67 50 74 72 3b 09 09 09  tTag *tagPtr;...
5e30: 2f 2a 20 54 61 67 20 77 68 6f 73 65 20 70 72 69  /* Tag whose pri
5e40: 6f 72 69 74 79 20 69 73 20 74 6f 20 62 65 0a 09  ority is to be..
5e50: 09 09 09 09 20 2a 20 63 68 61 6e 67 65 64 2e 20  .... * changed. 
5e60: 2a 2f 0a 20 20 20 20 69 6e 74 20 70 72 69 6f 3b  */.    int prio;
5e70: 09 09 09 09 2f 2a 20 4e 65 77 20 70 72 69 6f 72  ..../* New prior
5e80: 69 74 79 20 66 6f 72 20 74 61 67 2e 20 2a 2f 0a  ity for tag. */.
5e90: 7b 0a 20 20 20 20 69 6e 74 20 6c 6f 77 2c 20 68  {.    int low, h
5ea0: 69 67 68 2c 20 64 65 6c 74 61 3b 0a 20 20 20 20  igh, delta;.    
5eb0: 72 65 67 69 73 74 65 72 20 54 6b 54 65 78 74 54  register TkTextT
5ec0: 61 67 20 2a 74 61 67 50 74 72 32 3b 0a 20 20 20  ag *tagPtr2;.   
5ed0: 20 54 63 6c 5f 48 61 73 68 45 6e 74 72 79 20 2a   Tcl_HashEntry *
5ee0: 68 50 74 72 3b 0a 20 20 20 20 54 63 6c 5f 48 61  hPtr;.    Tcl_Ha
5ef0: 73 68 53 65 61 72 63 68 20 73 65 61 72 63 68 3b  shSearch search;
5f00: 0a 0a 20 20 20 20 69 66 20 28 70 72 69 6f 20 3c  ..    if (prio <
5f10: 20 30 29 20 7b 0a 09 70 72 69 6f 20 3d 20 30 3b   0) {..prio = 0;
5f20: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 70  .    }.    if (p
5f30: 72 69 6f 20 3e 3d 20 74 65 78 74 50 74 72 2d 3e  rio >= textPtr->
5f40: 6e 75 6d 54 61 67 73 29 20 7b 0a 09 70 72 69 6f  numTags) {..prio
5f50: 20 3d 20 74 65 78 74 50 74 72 2d 3e 6e 75 6d 54   = textPtr->numT
5f60: 61 67 73 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  ags-1;.    }.   
5f70: 20 69 66 20 28 70 72 69 6f 20 3d 3d 20 74 61 67   if (prio == tag
5f80: 50 74 72 2d 3e 70 72 69 6f 72 69 74 79 29 20 7b  Ptr->priority) {
5f90: 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 20  ..return;.    } 
5fa0: 65 6c 73 65 20 69 66 20 28 70 72 69 6f 20 3c 20  else if (prio < 
5fb0: 74 61 67 50 74 72 2d 3e 70 72 69 6f 72 69 74 79  tagPtr->priority
5fc0: 29 20 7b 0a 09 6c 6f 77 20 3d 20 70 72 69 6f 3b  ) {..low = prio;
5fd0: 0a 09 68 69 67 68 20 3d 20 74 61 67 50 74 72 2d  ..high = tagPtr-
5fe0: 3e 70 72 69 6f 72 69 74 79 2d 31 3b 0a 09 64 65  >priority-1;..de
5ff0: 6c 74 61 20 3d 20 31 3b 0a 20 20 20 20 7d 20 65  lta = 1;.    } e
6000: 6c 73 65 20 7b 0a 09 6c 6f 77 20 3d 20 74 61 67  lse {..low = tag
6010: 50 74 72 2d 3e 70 72 69 6f 72 69 74 79 2b 31 3b  Ptr->priority+1;
6020: 0a 09 68 69 67 68 20 3d 20 70 72 69 6f 3b 0a 09  ..high = prio;..
6030: 64 65 6c 74 61 20 3d 20 2d 31 3b 0a 20 20 20 20  delta = -1;.    
6040: 7d 0a 20 20 20 20 66 6f 72 20 28 68 50 74 72 20  }.    for (hPtr 
6050: 3d 20 54 63 6c 5f 46 69 72 73 74 48 61 73 68 45  = Tcl_FirstHashE
6060: 6e 74 72 79 28 26 74 65 78 74 50 74 72 2d 3e 74  ntry(&textPtr->t
6070: 61 67 54 61 62 6c 65 2c 20 26 73 65 61 72 63 68  agTable, &search
6080: 29 3b 0a 09 20 20 20 20 68 50 74 72 20 21 3d 20  );..    hPtr != 
6090: 4e 55 4c 4c 3b 20 68 50 74 72 20 3d 20 54 63 6c  NULL; hPtr = Tcl
60a0: 5f 4e 65 78 74 48 61 73 68 45 6e 74 72 79 28 26  _NextHashEntry(&
60b0: 73 65 61 72 63 68 29 29 20 7b 0a 09 74 61 67 50  search)) {..tagP
60c0: 74 72 32 20 3d 20 28 54 6b 54 65 78 74 54 61 67  tr2 = (TkTextTag
60d0: 20 2a 29 20 54 63 6c 5f 47 65 74 48 61 73 68 56   *) Tcl_GetHashV
60e0: 61 6c 75 65 28 68 50 74 72 29 3b 0a 09 69 66 20  alue(hPtr);..if 
60f0: 28 28 74 61 67 50 74 72 32 2d 3e 70 72 69 6f 72  ((tagPtr2->prior
6100: 69 74 79 20 3e 3d 20 6c 6f 77 29 20 26 26 20 28  ity >= low) && (
6110: 74 61 67 50 74 72 32 2d 3e 70 72 69 6f 72 69 74  tagPtr2->priorit
6120: 79 20 3c 3d 20 68 69 67 68 29 29 20 7b 0a 09 20  y <= high)) {.. 
6130: 20 20 20 74 61 67 50 74 72 32 2d 3e 70 72 69 6f     tagPtr2->prio
6140: 72 69 74 79 20 2b 3d 20 64 65 6c 74 61 3b 0a 09  rity += delta;..
6150: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 74 61 67 50  }.    }.    tagP
6160: 74 72 2d 3e 70 72 69 6f 72 69 74 79 20 3d 20 70  tr->priority = p
6170: 72 69 6f 3b 0a 7d 0a                             rio;.}.