4 moveto(File *f, Range r)
6 Posn p1 = r.p1, p2 = r.p2;
12 outTsl(Hmoveto, f->tag, f->dot.r.p1);
21 if(f->dot.r.p1==f->tdot.p1 && f->dot.r.p2==f->tdot.p2)
23 outTsll(Hsetdot, f->tag, f->dot.r.p1, f->dot.r.p2);
30 outTS(Hsetpat, &lastpat);
37 lookorigin(File *f, Posn p0, Posn ls)
46 for(nl=nc=c=0; c!=-1 && nl<ls && nc<ls*CHARSHIFT; nc++)
47 if((c=filereadc(f, --p)) == '\n'){
60 outTsl(Horigin, f->tag, p0);
67 * Hard to get absolutely right. Use what we know about ASCII
68 * and assume anything above the Latin control characters is
69 * potentially an alphanumeric.
73 if(0x7F<=c && c<=0xA0)
75 if(utfrune("!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~", c))
81 clickmatch(File *f, int cl, int cr, int dir, Posn *p)
90 c = filereadc(f, (*p)++);
94 c = filereadc(f, --(*p));
102 return cl=='\n' && nest==1;
106 strrune(Rune *s, Rune c)
123 doubleclick(File *f, Posn p1)
131 f->dot.r.p1 = f->dot.r.p2 = p1;
132 for(i=0; left[i]; i++){
140 c = filereadc(f, p - 1);
142 if(clickmatch(f, c, r[strrune(l, c)-l], 1, &p)){
144 f->dot.r.p2 = p-(c!='\n');
148 /* try right match */
155 if(clickmatch(f, c, l[strrune(r, c)-r], -1, &p)){
157 if(c!='\n' || p!=0 || filereadc(f, 0)=='\n')
159 f->dot.r.p2 = p1+(p1<f->nc && c=='\n');
164 /* try filling out word to right */
166 while(p < f->nc && alnum(filereadc(f, p++)))
168 /* try filling out word to left */
170 while(--p >= 0 && alnum(filereadc(f, p)))