123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- typedef struct TkText TkText;
- typedef struct TkTitem TkTitem;
- typedef struct TkTline TkTline;
- typedef struct TkTindex TkTindex;
- typedef struct TkTmarkinfo TkTmarkinfo;
- typedef struct TkTtaginfo TkTtaginfo;
- typedef struct TkTwind TkTwind;
- enum
- {
- /* text item types */
- TkTascii, /* contiguous string of ascii chars, all with same tags */
- TkTrune, /* printable utf (one printing position) */
- TkTtab,
- TkTnewline, /* line field contains pointer to containing line */
- TkTcontline, /* end of non-newline line; line field as with TkTnewline */
- TkTwin,
- TkTmark,
- TkTbyitem = 0, /* adjustment units */
- TkTbyitemback,
- TkTbytline,
- TkTbytlineback,
- TkTbychar,
- TkTbycharback,
- TkTbycharstart,
- TkTbyline,
- TkTbylineback,
- TkTbylinestart,
- TkTbylineend,
- TkTbywordstart,
- TkTbywordend,
- TkTbywrapstart,
- TkTbywrapend,
- TkTselid = 0, /* id of sel tag */
- TkTmaxtag = 32,
- Textwidth = 40, /* default width, in chars */
- Textheight = 10, /* default height, in chars */
- TkTfirst = (1<<0), /* first line in buffer, or after a TkTlast */
- TkTlast = (1<<1), /* TkTnewline at end of line */
- TkTdrawn = (1<<2), /* screen cache copy is ok */
- TkTdlocked = (1<<3), /* display already locked */
- TkTjustfoc = (1<<4), /* got focus on last B1 press */
- TkTnodrag = (1<<5), /* ignore B1 drag until B1 up */
- TkTunset = (1<<31), /* marks int tag options "unspecified" */
- TkTborderwidth = 0,
- TkTjustify,
- TkTlmargin1,
- TkTlmargin2,
- TkTlmargin3,
- TkTrmargin,
- TkTspacing1,
- TkTspacing2,
- TkTspacing3,
- TkToffset,
- TkTunderline,
- TkToverstrike,
- TkTrelief,
- TkTwrap,
- TkTlineheight,
- TkTnumopts
- };
- struct TkTline
- {
- Point orig; /* where to put first item of line */
- int width;
- int height;
- int ascent;
- int flags;
- TkTitem* items;
- TkTline* next;
- TkTline* prev;
- };
- struct TkText
- {
- TkTline start; /* fake before-the-first line */
- TkTline end; /* fake after-the-last line */
- Tk* tagshare;
- TkTtabstop* tabs;
- TkTtaginfo* tags;
- TkTmarkinfo* marks;
- char* xscroll;
- char* yscroll;
- uchar selunit; /* select adjustment unit */
- uchar tflag; /* various text-specific flags */
- int nlines; /* number of nl items in widget */
- TkTitem* selfirst; /* first item marked with sel tag */
- TkTitem* sellast; /* item after last marked with sel tag */
- Point deltatv; /* vector from text-space to view-space */
- Point deltaiv; /* vector from image-space to view-space */
- Point current; /* last known mouse pos */
- Point track; /* for use when B1 or B2 is down */
- int nexttag; /* next usable tag index */
- TkTitem* mouse; /* mouse focus */
- int inswidth; /* width of insertion cursor */
- int sborderwidth;
- int opts[TkTnumopts];
- int propagate;
- int scrolltop[2];
- int scrollbot[2];
- Image* image;
- uchar cur_flag; /* text cursor to be shown up? */
- Rectangle cur_rec; /* last text cursor rectangle */
- };
- struct TkTwind
- {
- Tk* sub; /* Subwindow of canvas */
- Tk* focus; /* Current Mouse focus */
- int width; /* current internal width */
- int height; /* current internal height */
- int owned; /* true if window is destroyed on item deletion */
- int align; /* how to align within line */
- char* create; /* creation script */
- int padx; /* extra space on each side */
- int pady; /* extra space on top and bot */
- int ascent; /* distance from top of widget to baseline */
- int stretch; /* true if need to stretch height */
- };
- struct TkTitem
- {
- uchar kind; /* e.g. TkTascii, etc */
- uchar tagextra;
- short width;
- TkTitem *next;
- union {
- char* string;
- TkTwind* win;
- TkTmarkinfo* mark;
- TkTline* line;
- } u;
- ulong tags[1];
- /* TkTitem length extends tagextra ulongs beyond */
- };
- struct TkTmarkinfo
- {
- char* name;
- int gravity;
- TkTitem* cur;
- TkTmarkinfo* next;
- };
- struct TkTtaginfo
- {
- int id;
- char* name;
- TkEnv* env;
- TkTtabstop* tabs;
- TkTtaginfo* next;
- TkAction* binds; /* Binding of current events */
- int opts[TkTnumopts];
- };
- struct TkTindex
- {
- TkTitem* item;
- TkTline* line;
- int pos; /* index within multichar item */
- };
- extern TkCmdtab tkttagcmd[];
- extern TkCmdtab tktmarkcmd[];
- extern TkCmdtab tktwincmd[];
- extern void tkfreetext(Tk*);
- extern char* tktaddmarkinfo(TkText*, char*, TkTmarkinfo**);
- extern char* tktaddtaginfo(Tk*, char*, TkTtaginfo**);
- extern int tktadjustind(TkText*, int, TkTindex*);
- extern int tktanytags(TkTitem*);
- extern Rectangle tktbbox(Tk*, TkTindex*);
- extern void tktdirty(Tk*);
- extern int tktdispwidth(Tk*, TkTtabstop *tabs, TkTitem*, Font*, int, int, int);
- extern void tktendind(TkText*, TkTindex*);
- extern char* tktextcursor(Tk*, char*, char **);
- extern Tk* tktextevent(Tk*, int, void*);
- extern Tk* tktinwindow(Tk*, Point*);
- extern char* tktextselection(Tk*, char*, char**);
- extern void tktextsize(Tk*, int);
- extern TkTmarkinfo* tktfindmark(TkTmarkinfo*, char*);
- extern int tktfindsubitem(Tk*, TkTindex*);
- extern TkTtaginfo* tktfindtag(TkTtaginfo*, char*);
- extern char* tktfixgeom(Tk*, TkTline*, TkTline*, int);
- extern void tktfreeitems(TkText*, TkTitem*, int);
- extern void tktfreelines(TkText*, TkTline*, int);
- extern void tktfreemarks(TkTmarkinfo*);
- extern void tktfreetabs(TkTtabstop*);
- extern void tktfreetags(TkTtaginfo*);
- extern int tktindcompare(TkText*, TkTindex*, int, TkTindex*);
- extern int tktindbefore(TkTindex*, TkTindex*);
- extern int tktindrune(TkTindex*);
- extern char* tktinsert(Tk*, TkTindex*, char*, TkTitem*);
- extern int tktisbreak(int);
- extern void tktitemind(TkTitem*, TkTindex*);
- extern char* tktiteminsert(TkText*, TkTindex*, TkTitem*);
- extern TkTline* tktitemline(TkTitem*);
- extern char* tktindparse(Tk*, char**, TkTindex*);
- extern TkTitem* tktlastitem(TkTitem*);
- extern int tktlinenum(TkText*, TkTindex*);
- extern int tktlinepos(TkText*, TkTindex*);
- extern int tktmarkind(Tk*, char*, TkTindex*);
- extern char* tktmarkmove(Tk*, TkTmarkinfo*, TkTindex*);
- extern char* tktmarkparse(Tk*, char**, TkTmarkinfo**);
- extern int tktmaxwid(TkTline*);
- extern char* tktnewitem(int, int, TkTitem**);
- extern char* tktnewline(int, TkTitem*, TkTline*, TkTline*, TkTline**);
- extern int tktposcount(TkTitem*);
- extern TkTline* tktprevwrapline(Tk*, TkTline*);
- extern void tktremitem(TkText*, TkTindex*);
- extern int tktsametags(TkTitem*, TkTitem*);
- extern char* tktsplititem(TkTindex*);
- extern void tktstartind(TkText*, TkTindex*);
- extern char* tkttagchange(Tk*, int, TkTindex*, TkTindex*, int);
- extern int tkttagbit(TkTitem*, int, int);
- extern void tkttagcomb(TkTitem*, TkTitem*, int);
- extern int tkttagind(Tk*, char*, int, TkTindex*);
- extern char* tkttagname(TkText*, int);
- extern int tkttagnrange(TkText*, int, TkTindex*, TkTindex*, TkTindex*, TkTindex*);
- extern void tkttagopts(Tk*, TkTitem*, int*, TkEnv*, TkTtabstop **, int);
- extern char* tkttagparse(Tk*, char**, TkTtaginfo**);
- extern int tkttagset(TkTitem*, int);
- extern int tktxyind(Tk*, int, int, TkTindex*);
- extern void tktxtforgetsub(Tk*, Tk*);
|