Thread Syntaxhighliting in Tk Text Widget?: (Wie) Geht das? (11 answers)
Opened by jemand at 2004-12-18 23:33

Strat
 2004-12-21 10:10
#42700 #42700
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja, das geht irgendwie.... muss ich schnell nachschauen...

wenn Tk installiert ist, ist auch ein programm namens widget(.bat) installiert; wenn man das ausfuehrt, bekommt man ein paar Beispiele zu Tk.... da gibt es z.B. unte rText -> Hypertext (tag bindinges) eine Demo dazu. Habe mal Teile des Codes rauskopiert:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    my $t = $TOP->Scrolled(qw/Text -setgrid true -width 60 -height 24
-scrollbars e -wrap word/, -font => $FONT);
$t->pack(qw/-expand yes -fill both/);

# Set up display styles

my(@bold, @normal, $tag);
if ($TOP->depth > 1) {
@bold = (-background => '#43ce80', qw/-relief raised -borderwidth 1/);
@normal = (-background => undef, qw/-relief flat/);
} else {
@bold = (qw/-foreground white -background black/);
@normal = (-foreground => undef, -background => undef);
}

$t->insert('0.0', "The same tag mechanism that controls display styles in text widgets can also be used to associate Perl commands with regions of text, so that mouse or keyboard actions on the text cause particular Perl commands to be invoked. For example, in the text below the descriptions of the canvas demonstrations have been tagged. When you move the mouse over a demo description the description lights up, and when you press button 1 over a description then that particular demonstration is invoked.\n\n");
$t->insert('end','1. Samples of all the different types of items that can be created in canvas widgets.', 'd1');
$t->insert('end', "\n\n");
$t->insert('end', '2. A simple two-dimensional plot that allows you to adjust the positions of the data points.', 'd2');
$t->insert('end', "\n\n");
$t->insert('end', '3. Anchoring and justification modes for text items.', 'd3');
$t->insert('end', "\n\n");
$t->insert('end', '4. An editor for arrow-head shapes for line items.', 'd4');
$t->insert('end', "\n\n");
$t->insert('end', '5. A ruler with facilities for editing tab stops.', 'd5');
$t->insert('end', "\n\n");
$t->insert('end', '6. A grid that demonstrates how canvases can be scrolled.', 'd6');

foreach $tag (qw(d1 d2 d3 d4 d5 d6)) {
$t->tag('bind', $tag, '<Any-Enter>' =>
sub {shift->tag('configure', $tag, @bold)}
);
$t->tag('bind', $tag, '<Any-Leave>' =>
sub {shift->tag('configure', $tag, @normal)}
);
}
$t->tag(qw/bind d1 <1>/ => sub {&items('items')});
$t->tag(qw/bind d2 <1>/ => sub {&plot('plot')});
$t->tag(qw/bind d3 <1>/ => sub {&ctext('ctext')});
$t->tag(qw/bind d4 <1>/ => sub {&arrows('arrows')});
$t->tag(qw/bind d5 <1>/ => sub {&ruler('ruler')});
$t->tag(qw/bind d6 <1>/ => sub {&cscroll('cscroll')});

$t->mark(qw/set insert 0.0/);

Code (perl): (dl )
    $t->tag(qw/bind d1 <1>/ => sub {&items('items')});

bindet die linke Maustaste (<1>) an den Tag d1, und wenn jemand links darauf klickt, wird die Subroutine &items('items') ausgefuehrt; mir gefaellt aber die folgende schreibweise besser:
Code (perl): (dl )
$t->tag(bind => d1 => '<1>' => [ \&items, 'items' ]);

(jetzt hoffe ich nur, dass meine Schreibweise auch funktioniert ;-)\n\n

<!--EDIT|Strat|1103616867-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread Syntaxhighliting in Tk Text Widget?: (Wie) Geht das?