textw.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. typedef struct TkText TkText;
  2. typedef struct TkTitem TkTitem;
  3. typedef struct TkTline TkTline;
  4. typedef struct TkTindex TkTindex;
  5. typedef struct TkTmarkinfo TkTmarkinfo;
  6. typedef struct TkTtaginfo TkTtaginfo;
  7. typedef struct TkTwind TkTwind;
  8. enum
  9. {
  10. /* text item types */
  11. TkTascii, /* contiguous string of ascii chars, all with same tags */
  12. TkTrune, /* printable utf (one printing position) */
  13. TkTtab,
  14. TkTnewline, /* line field contains pointer to containing line */
  15. TkTcontline, /* end of non-newline line; line field as with TkTnewline */
  16. TkTwin,
  17. TkTmark,
  18. TkTbyitem = 0, /* adjustment units */
  19. TkTbyitemback,
  20. TkTbytline,
  21. TkTbytlineback,
  22. TkTbychar,
  23. TkTbycharback,
  24. TkTbycharstart,
  25. TkTbyline,
  26. TkTbylineback,
  27. TkTbylinestart,
  28. TkTbylineend,
  29. TkTbywordstart,
  30. TkTbywordend,
  31. TkTbywrapstart,
  32. TkTbywrapend,
  33. TkTselid = 0, /* id of sel tag */
  34. TkTmaxtag = 32,
  35. Textwidth = 40, /* default width, in chars */
  36. Textheight = 10, /* default height, in chars */
  37. TkTfirst = (1<<0), /* first line in buffer, or after a TkTlast */
  38. TkTlast = (1<<1), /* TkTnewline at end of line */
  39. TkTdrawn = (1<<2), /* screen cache copy is ok */
  40. TkTdlocked = (1<<3), /* display already locked */
  41. TkTjustfoc = (1<<4), /* got focus on last B1 press */
  42. TkTnodrag = (1<<5), /* ignore B1 drag until B1 up */
  43. TkTunset = (1<<31), /* marks int tag options "unspecified" */
  44. TkTborderwidth = 0,
  45. TkTjustify,
  46. TkTlmargin1,
  47. TkTlmargin2,
  48. TkTlmargin3,
  49. TkTrmargin,
  50. TkTspacing1,
  51. TkTspacing2,
  52. TkTspacing3,
  53. TkToffset,
  54. TkTunderline,
  55. TkToverstrike,
  56. TkTrelief,
  57. TkTwrap,
  58. TkTlineheight,
  59. TkTnumopts
  60. };
  61. struct TkTline
  62. {
  63. Point orig; /* where to put first item of line */
  64. int width;
  65. int height;
  66. int ascent;
  67. int flags;
  68. TkTitem* items;
  69. TkTline* next;
  70. TkTline* prev;
  71. };
  72. struct TkText
  73. {
  74. TkTline start; /* fake before-the-first line */
  75. TkTline end; /* fake after-the-last line */
  76. Tk* tagshare;
  77. TkTtabstop* tabs;
  78. TkTtaginfo* tags;
  79. TkTmarkinfo* marks;
  80. char* xscroll;
  81. char* yscroll;
  82. uchar selunit; /* select adjustment unit */
  83. uchar tflag; /* various text-specific flags */
  84. int nlines; /* number of nl items in widget */
  85. TkTitem* selfirst; /* first item marked with sel tag */
  86. TkTitem* sellast; /* item after last marked with sel tag */
  87. Point deltatv; /* vector from text-space to view-space */
  88. Point deltaiv; /* vector from image-space to view-space */
  89. Point current; /* last known mouse pos */
  90. Point track; /* for use when B1 or B2 is down */
  91. int nexttag; /* next usable tag index */
  92. TkTitem* mouse; /* mouse focus */
  93. int inswidth; /* width of insertion cursor */
  94. int sborderwidth;
  95. int opts[TkTnumopts];
  96. int propagate;
  97. int scrolltop[2];
  98. int scrollbot[2];
  99. Image* image;
  100. uchar cur_flag; /* text cursor to be shown up? */
  101. Rectangle cur_rec; /* last text cursor rectangle */
  102. };
  103. struct TkTwind
  104. {
  105. Tk* sub; /* Subwindow of canvas */
  106. Tk* focus; /* Current Mouse focus */
  107. int width; /* current internal width */
  108. int height; /* current internal height */
  109. int owned; /* true if window is destroyed on item deletion */
  110. int align; /* how to align within line */
  111. char* create; /* creation script */
  112. int padx; /* extra space on each side */
  113. int pady; /* extra space on top and bot */
  114. int ascent; /* distance from top of widget to baseline */
  115. int stretch; /* true if need to stretch height */
  116. };
  117. struct TkTitem
  118. {
  119. uchar kind; /* e.g. TkTascii, etc */
  120. uchar tagextra;
  121. short width;
  122. TkTitem *next;
  123. union {
  124. char* string;
  125. TkTwind* win;
  126. TkTmarkinfo* mark;
  127. TkTline* line;
  128. } u;
  129. ulong tags[1];
  130. /* TkTitem length extends tagextra ulongs beyond */
  131. };
  132. struct TkTmarkinfo
  133. {
  134. char* name;
  135. int gravity;
  136. TkTitem* cur;
  137. TkTmarkinfo* next;
  138. };
  139. struct TkTtaginfo
  140. {
  141. int id;
  142. char* name;
  143. TkEnv* env;
  144. TkTtabstop* tabs;
  145. TkTtaginfo* next;
  146. TkAction* binds; /* Binding of current events */
  147. int opts[TkTnumopts];
  148. };
  149. struct TkTindex
  150. {
  151. TkTitem* item;
  152. TkTline* line;
  153. int pos; /* index within multichar item */
  154. };
  155. extern TkCmdtab tkttagcmd[];
  156. extern TkCmdtab tktmarkcmd[];
  157. extern TkCmdtab tktwincmd[];
  158. extern void tkfreetext(Tk*);
  159. extern char* tktaddmarkinfo(TkText*, char*, TkTmarkinfo**);
  160. extern char* tktaddtaginfo(Tk*, char*, TkTtaginfo**);
  161. extern int tktadjustind(TkText*, int, TkTindex*);
  162. extern int tktanytags(TkTitem*);
  163. extern Rectangle tktbbox(Tk*, TkTindex*);
  164. extern void tktdirty(Tk*);
  165. extern int tktdispwidth(Tk*, TkTtabstop *tabs, TkTitem*, Font*, int, int, int);
  166. extern void tktendind(TkText*, TkTindex*);
  167. extern char* tktextcursor(Tk*, char*, char **);
  168. extern Tk* tktextevent(Tk*, int, void*);
  169. extern Tk* tktinwindow(Tk*, Point*);
  170. extern char* tktextselection(Tk*, char*, char**);
  171. extern void tktextsize(Tk*, int);
  172. extern TkTmarkinfo* tktfindmark(TkTmarkinfo*, char*);
  173. extern int tktfindsubitem(Tk*, TkTindex*);
  174. extern TkTtaginfo* tktfindtag(TkTtaginfo*, char*);
  175. extern char* tktfixgeom(Tk*, TkTline*, TkTline*, int);
  176. extern void tktfreeitems(TkText*, TkTitem*, int);
  177. extern void tktfreelines(TkText*, TkTline*, int);
  178. extern void tktfreemarks(TkTmarkinfo*);
  179. extern void tktfreetabs(TkTtabstop*);
  180. extern void tktfreetags(TkTtaginfo*);
  181. extern int tktindcompare(TkText*, TkTindex*, int, TkTindex*);
  182. extern int tktindbefore(TkTindex*, TkTindex*);
  183. extern int tktindrune(TkTindex*);
  184. extern char* tktinsert(Tk*, TkTindex*, char*, TkTitem*);
  185. extern int tktisbreak(int);
  186. extern void tktitemind(TkTitem*, TkTindex*);
  187. extern char* tktiteminsert(TkText*, TkTindex*, TkTitem*);
  188. extern TkTline* tktitemline(TkTitem*);
  189. extern char* tktindparse(Tk*, char**, TkTindex*);
  190. extern TkTitem* tktlastitem(TkTitem*);
  191. extern int tktlinenum(TkText*, TkTindex*);
  192. extern int tktlinepos(TkText*, TkTindex*);
  193. extern int tktmarkind(Tk*, char*, TkTindex*);
  194. extern char* tktmarkmove(Tk*, TkTmarkinfo*, TkTindex*);
  195. extern char* tktmarkparse(Tk*, char**, TkTmarkinfo**);
  196. extern int tktmaxwid(TkTline*);
  197. extern char* tktnewitem(int, int, TkTitem**);
  198. extern char* tktnewline(int, TkTitem*, TkTline*, TkTline*, TkTline**);
  199. extern int tktposcount(TkTitem*);
  200. extern TkTline* tktprevwrapline(Tk*, TkTline*);
  201. extern void tktremitem(TkText*, TkTindex*);
  202. extern int tktsametags(TkTitem*, TkTitem*);
  203. extern char* tktsplititem(TkTindex*);
  204. extern void tktstartind(TkText*, TkTindex*);
  205. extern char* tkttagchange(Tk*, int, TkTindex*, TkTindex*, int);
  206. extern int tkttagbit(TkTitem*, int, int);
  207. extern void tkttagcomb(TkTitem*, TkTitem*, int);
  208. extern int tkttagind(Tk*, char*, int, TkTindex*);
  209. extern char* tkttagname(TkText*, int);
  210. extern int tkttagnrange(TkText*, int, TkTindex*, TkTindex*, TkTindex*, TkTindex*);
  211. extern void tkttagopts(Tk*, TkTitem*, int*, TkEnv*, TkTtabstop **, int);
  212. extern char* tkttagparse(Tk*, char**, TkTtaginfo**);
  213. extern int tkttagset(TkTitem*, int);
  214. extern int tktxyind(Tk*, int, int, TkTindex*);
  215. extern void tktxtforgetsub(Tk*, Tk*);