Umlaute in Perl/Tk text-Widget

Umlaute in Perl/Tk text-Widget

am 27.05.2007 12:52:16 von bsterix

Ich verwende in meinem programm ein Text-Objekt. Wenn ich darin Text
ohne Umlaute schreibe und editiere klappt alles ganz gut.

Wenn ich umlaute Schreibe (und nicht darin herumeditiere) klappt auch
noch alles. Aber sobald ich einen text mit Umlauten bearbeite (z.B.
mal etwas löschen, o.ä.) dann bricht das große Chaos aus. Irgendwie
scheint die Cursorpositionsberechnung und Anzeige der zeichen nicht
zusammenzupassen, sonald Umlaute drin sind.

Ich hab AvctiveStatePerl 5.8.8 mit TK 804.026

Was kann man dagegen machen?

Viele grüße
jens

Re: Umlaute in Perl/Tk text-Widget

am 28.05.2007 16:25:34 von Robert Berghaus

Hallo Jens

bsterix@gmail.com schrieb:
> Ich verwende in meinem programm ein Text-Objekt. Wenn ich darin Text
> ohne Umlaute schreibe und editiere klappt alles ganz gut.
>=20
> Wenn ich umlaute Schreibe (und nicht darin herumeditiere) klappt auch
> noch alles. Aber sobald ich einen text mit Umlauten bearbeite (z.B.
> mal etwas löschen, o.ä.) dann bricht das große Chaos aus. Irgendw=
ie
> scheint die Cursorpositionsberechnung und Anzeige der zeichen nicht
> zusammenzupassen, sonald Umlaute drin sind.
>=20
> Ich hab AvctiveStatePerl 5.8.8 mit TK 804.026
>=20
> Was kann man dagegen machen?
>=20

Ich habe das bisher nur mit Entry benutzt, und da funktioniert es=20
bei mir. Verhält sich Entry bei Dir richtig?

--=20
Schönen Gruß aus dem Bergischen Land
Robert

Re: Umlaute in Perl/Tk text-Widget

am 28.05.2007 18:02:00 von bsterix

Hallo Robert,
> Ich habe das bisher nur mit Entry benutzt, und da funktioniert es
> bei mir. Verhält sich Entry bei Dir richtig?
Bei Entry sieht alles OK aus. Ich hab hier mal ein kleines
Codebeispiel:

#! /usr/bin/perl -w
use strict;
use Tk;

my $mw =3D MainWindow->new;

my $txt =3D $mw -> Text(-width=3D>60, -height=3D>10) -> pack();
my $entr =3D $mw -> Entry(-width=3D>60) -> pack();

MainLoop;

wenn ich z.B. im "text"

test öäüabc

eintippe, verhält sich der Cursor recht seltsam (er steht nicht am
Ende, bzw wo er hingehört)

der gleiche text im "Entry" passt. Irgendwie schenen mir die Umlaute
in die Berechnung der Cursorposition nicht einzugehen.

Re: Umlaute in Perl/Tk text-Widget

am 28.05.2007 18:39:07 von KWittrock

"Robert Berghaus" schrieb im Newsbeitrag
news:c1.2bm.35QhWf$LSt@TPA31p-os2.robe-edv.lokal...
> Hallo Jens
>
> bsterix@gmail.com schrieb:
>> Ich verwende in meinem programm ein Text-Objekt. Wenn ich darin Text
>> ohne Umlaute schreibe und editiere klappt alles ganz gut.
>>
>> Wenn ich umlaute Schreibe (und nicht darin herumeditiere) klappt auch
>> noch alles. Aber sobald ich einen text mit Umlauten bearbeite (z.B.
>> mal etwas löschen, o.ä.) dann bricht das große Chaos aus. Irgendwie
>> scheint die Cursorpositionsberechnung und Anzeige der zeichen nicht
>> zusammenzupassen, sonald Umlaute drin sind.
>>
>> Ich hab AvctiveStatePerl 5.8.8 mit TK 804.026
>>
>> Was kann man dagegen machen?
>>
>
> Ich habe das bisher nur mit Entry benutzt, und da funktioniert es bei mir.
> Verhält sich Entry bei Dir richtig?

Hallo Jens,

bei mir verhält sich das Textwidget beim Editieren (auch Löschen von Text
mit Umlauten) richtig. Aufgefallen ist mir nur das Verhalten beim
Doppelklick. Nach hinten wird bis einschließlich zum nächsten Umlaut
markiert, nach vorn so weit, dass hinter dem vorigen Umlaut noch drei
"normale" Buchstaben unmarkiert bleiben. Ist man näher am vorigen Umlaut, so
wird erst ab der Cursorpos. markiert. Schreib doch mal für ein einfaches
Beispiel genauer, was wann schiefgeht.

Mein Perl ist schon recht betagt, Version ActiveState v5.8.4 mit Tk 804.027.

Gruß

Klaus

Re: Umlaute in Perl/Tk text-Widget

am 28.05.2007 18:50:25 von KWittrock

schrieb im Newsbeitrag
news:1180368120.400475.306910@o5g2000hsb.googlegroups.com...

>
> wenn ich z.B. im "text"
>
> test öäüabc
>
> eintippe, verhält sich der Cursor recht seltsam (er steht nicht am
> Ende, bzw wo er hingehört)
>
> der gleiche text im "Entry" passt. Irgendwie schenen mir die Umlaute
> in die Berechnung der Cursorposition nicht einzugehen.
>
Bei mir ist die Cursorposition ok.

Gruß

Klaus

Re: Umlaute in Perl/Tk text-Widget

am 28.05.2007 18:56:42 von bsterix

>
> Bei mir ist die Cursorposition ok.
>
Welche Perl bzw. TK-version hast du?

Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
installiert zu haben.

Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
und einmal 804.026 in "site" welches mir der ppm als "update zum
anderen" verkaufen wollte.

Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.

Re: Umlaute in Perl/Tk text-Widget

am 28.05.2007 19:02:45 von bsterix

> Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
> installiert zu haben.
>
> Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
> und einmal 804.026 in "site" welches mir der ppm als "update zum
> anderen" verkaufen wollte.
>
> Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.

Nachdem ich nun versuchsweise das 804.026 wieder deinstalliert habe,
sieht wieder alles normal aus.
Mein ppm zeigt mir aber bei folgendes an (der mit GUI)

Package name: Tk
Area: perl
Installed: 804.027-r6
Available: 804.026

Sollten bei Available eigentlich nicht eher "Updates" stehen, als
ältere Versionen?? Jetzt funktioniert auch mein tk::JPEG . Hat die 027-
r6 da evtl. eine eigene dabei???

Re: Umlaute in Perl/Tk text-Widget

am 29.05.2007 10:52:25 von Robert Berghaus

Robert Berghaus schrieb:
> Hallo Jens
>=20
> bsterix@gmail.com schrieb:
>> Ich verwende in meinem programm ein Text-Objekt. Wenn ich darin Text
>> ohne Umlaute schreibe und editiere klappt alles ganz gut.
>>
>> Wenn ich umlaute Schreibe (und nicht darin herumeditiere) klappt auch
>> noch alles. Aber sobald ich einen text mit Umlauten bearbeite (z.B.
>> mal etwas löschen, o.ä.) dann bricht das große Chaos aus. Irgend=
wie
>> scheint die Cursorpositionsberechnung und Anzeige der zeichen nicht
>> zusammenzupassen, sonald Umlaute drin sind.
>>
>> Ich hab AvctiveStatePerl 5.8.8 mit TK 804.026
>>
>> Was kann man dagegen machen?
>>
>=20
> Ich habe das bisher nur mit Entry benutzt, und da funktioniert es bei=20
> mir. Verhält sich Entry bei Dir richtig?
>=20

Entry und Widget verhalten sich hier unterschiedlich. Der=20
Cursorsteuerung nach zu urteilen scheint das Textwidget bei=20
Umlauten auf Unifont umzustellen (2 Bytes pro Zeichen).
Vielleicht liegt da ja der Lösungsansatz.

--=20
Schönen Gruß aus dem Bergischen Land
Robert

Re: Umlaute in Perl/Tk text-Widget

am 29.05.2007 19:08:46 von KWittrock

schrieb im Newsbeitrag
news:1180371765.006440.54530@p77g2000hsh.googlegroups.com...
>> Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
>> installiert zu haben.
>>
>> Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
>> und einmal 804.026 in "site" welches mir der ppm als "update zum
>> anderen" verkaufen wollte.
>>
>> Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.
>
> Nachdem ich nun versuchsweise das 804.026 wieder deinstalliert habe,
> sieht wieder alles normal aus.
> Mein ppm zeigt mir aber bei folgendes an (der mit GUI)
>
> Package name: Tk
> Area: perl
> Installed: 804.027-r6
> Available: 804.026
>
> Sollten bei Available eigentlich nicht eher "Updates" stehen, als
> ältere Versionen?? Jetzt funktioniert auch mein tk::JPEG . Hat die 027-
> r6 da evtl. eine eigene dabei???
>

Das verstehe ich nicht. Tk gehört doch zum Perl-Core. Wieso kann man das
separat updaten? Bei mir liegt Tk unter Perl\site\lib. Tk::JPEG ist auch
dabei.

Gruß

Klaus

Re: Umlaute in Perl/Tk text-Widget

am 29.05.2007 20:43:17 von Slaven Rezic

bsterix@gmail.com writes:

> > Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
> > installiert zu haben.
> >
> > Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
> > und einmal 804.026 in "site" welches mir der ppm als "update zum
> > anderen" verkaufen wollte.
> >
> > Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.
>
> Nachdem ich nun versuchsweise das 804.026 wieder deinstalliert habe,
> sieht wieder alles normal aus.
> Mein ppm zeigt mir aber bei folgendes an (der mit GUI)
>
> Package name: Tk
> Area: perl
> Installed: 804.027-r6
> Available: 804.026
>
> Sollten bei Available eigentlich nicht eher "Updates" stehen, als
> ältere Versionen?? Jetzt funktioniert auch mein tk::JPEG . Hat die 027-
> r6 da evtl. eine eigene dabei???

Ja. Tk::JPEG ist seit Tk804 gebündelt, zumindest im Standard-Tk.
ActiveState hat ja die Freiheit, Sachen in den Distributionen zu
ändern.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

tknotes - A knotes clone, written in Perl/Tk.
http://ptktools.sourceforge.net/#tknotes

Re: Umlaute in Perl/Tk text-Widget

am 29.05.2007 20:43:49 von Slaven Rezic

"K. Wittrock" writes:

> schrieb im Newsbeitrag
> news:1180371765.006440.54530@p77g2000hsh.googlegroups.com...
> >> Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
> >> installiert zu haben.
> >>
> >> Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
> >> und einmal 804.026 in "site" welches mir der ppm als "update zum
> >> anderen" verkaufen wollte.
> >>
> >> Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.
> >
> > Nachdem ich nun versuchsweise das 804.026 wieder deinstalliert habe,
> > sieht wieder alles normal aus.
> > Mein ppm zeigt mir aber bei folgendes an (der mit GUI)
> >
> > Package name: Tk
> > Area: perl
> > Installed: 804.027-r6
> > Available: 804.026
> >
> > Sollten bei Available eigentlich nicht eher "Updates" stehen, als
> > ältere Versionen?? Jetzt funktioniert auch mein tk::JPEG . Hat die 027-
> > r6 da evtl. eine eigene dabei???
> >
>
> Das verstehe ich nicht. Tk gehört doch zum Perl-Core. Wieso kann man
> das separat updaten? Bei mir liegt Tk unter Perl\site\lib. Tk::JPEG
> ist auch dabei.
>

Nope, Tk ist nur bei ActivePerl im Core, beim "richtigen" Perl aber
nicht.

--
Slaven Rezic - slaven rezic de
BBBike - route planner for cyclists in Berlin
WWW version: http://www.bbbike.de
Perl/Tk version for Unix and Windows: http://bbbike.sourceforge.net

Re: Umlaute in Perl/Tk text-Widget

am 29.05.2007 23:27:02 von Ch Lamprecht

K. Wittrock schrieb:
>
>
> Hallo Jens,
>
> bei mir verhält sich das Textwidget beim Editieren (auch Löschen von
> Text mit Umlauten) richtig. Aufgefallen ist mir nur das Verhalten beim
> Doppelklick. Nach hinten wird bis einschließlich zum nächsten Umlaut
> markiert, nach vorn so weit, dass hinter dem vorigen Umlaut noch drei
> "normale" Buchstaben unmarkiert bleiben. Ist man näher am vorigen
> Umlaut, so wird erst ab der Cursorpos. markiert.

> Mein Perl ist schon recht betagt, Version ActiveState v5.8.4 mit Tk
> 804.027.

Hallo,

Die index-modifier 'wordstart' und 'wordend' scheinen nicht mit Umlauten umgehen
zu können.
Hier ist eine Möglichkeit, wie man die Doppelklicks (oder allgemein die
Wortmarkierung) reparieren kann:



use warnings;
use strict;
use Tk;
use Tk::Text;

package Tk::Text;
no warnings 'redefine';
sub SelectTo{
my ($w, $index, $mode)= @_;
$Tk::selectMode = $mode if defined ($mode);
my $cur = $w->index($index);
my $anchor = Tk::catch { $w->index('anchor') };
if (!defined $anchor) {
$w->markSet('anchor',$anchor = $cur);
$Tk::mouseMoved = 0;
} elsif ($w->compare($cur,'!=',$anchor)) {
$Tk::mouseMoved = 1;
}
$Tk::selectMode = 'char' unless (defined $Tk::selectMode);
$mode = $Tk::selectMode;
my ($first,$last);
if ($mode eq 'char') {
if ($w->compare($cur,'<','anchor')) {
$first = $cur;
$last = 'anchor';
} else {
$first = 'anchor';
$last = $cur
}
# change:
} elsif ($mode eq 'word') {
if ($w->compare($cur,'<','anchor')) {
$first = $w->wordstart ($cur);
$last = $w->wordend('anchor');
} else {
$first = $w->wordstart('anchor');
$last = $w->wordend($cur);
}
# end
} elsif ($mode eq 'line') {
if ($w->compare($cur,'<','anchor')) {
$first = $w->index("$cur linestart");
$last = $w->index('anchor - 1c lineend + 1c')
} else {
$first = $w->index('anchor linestart');
$last = $w->index("$cur lineend + 1c")
}
}
if ($Tk::mouseMoved || $Tk::selectMode ne 'char') {
$w->tagRemove('sel','1.0',$first);
$w->tagAdd('sel',$first,$last);
$w->tagRemove('sel',$last,'end');
$w->idletasks;
}
}



sub wordstart{
my ($w,$index) = @_;
my $cur = $w->index($index);
my ($line,$pos) = $cur =~ /(\d*)\.(\d*)$/;

my $string = $w->get("$index linestart","$index lineend");
$string = substr($string,0,$pos);
$string =~ s/\S*$//;
return "$line.".length $string;
}

sub wordend{
my ($w,$index) = @_;
my $cur = $w->index($index);
my ($line,$pos) = $cur =~ /(\d*)\.(\d*)$/;

my $string = $w->get("$index linestart","$index lineend");
$string = substr($string,$pos) . ' ' ;
$string =~ m/^\S*(.)/g;
my $off = pos($string) - 1 ;
return "$line.". ($pos + $off);
}


package main;
my $mw = tkinit;
$mw->Text->pack;
$mw->Entry->pack;

MainLoop;

Grüße, Christoph

--
use Tk;use Tk::GraphItems;$c=tkinit->Canvas->pack;push@i,Tk::GraphItems ->
TextBox(text=>$_,canvas=>$c,x=>$x+=70,y=>100)for(Just=>anoth er=>Perl=>Hacker);
Tk::GraphItems->Connector(source=>$i[$_],target=>$i[$_+1])fo r(0..2);
$c->repeat(30,sub{$_->move(0,4*cos($d+=3.16))for(@i)});MainL oop

Re: Umlaute in Perl/Tk text-Widget

am 30.05.2007 10:15:25 von KWittrock

"Ch Lamprecht" schrieb im Newsbeitrag
news:f3i5r6$h4v$1@online.de...
> K. Wittrock schrieb:
>>
>>
>> Hallo Jens,
>>
>> bei mir verhält sich das Textwidget beim Editieren (auch Löschen von Text
>> mit Umlauten) richtig. Aufgefallen ist mir nur das Verhalten beim
>> Doppelklick. Nach hinten wird bis einschließlich zum nächsten Umlaut
>> markiert, nach vorn so weit, dass hinter dem vorigen Umlaut noch drei
>> "normale" Buchstaben unmarkiert bleiben. Ist man näher am vorigen Umlaut,
>> so wird erst ab der Cursorpos. markiert.
>
>> Mein Perl ist schon recht betagt, Version ActiveState v5.8.4 mit Tk
>> 804.027.
>
> Hallo,
>
> Die index-modifier 'wordstart' und 'wordend' scheinen nicht mit Umlauten
> umgehen zu können.
> Hier ist eine Möglichkeit, wie man die Doppelklicks (oder allgemein die
> Wortmarkierung) reparieren kann:
>
> .........................................


Danke, Christoph. Ich werde deinen Kode in meine Trickkiste stecken, bis ich
mal wieder ein Textwidget verwende.

Ich hoffe, Slaven hat deine Antwort gelesen.

Gruß

Klaus

Re: Umlaute in Perl/Tk text-Widget

am 30.05.2007 10:30:12 von KWittrock

"Slaven Rezic" schrieb im Newsbeitrag
news:87veebqxlm.fsf@biokovo-amd64.herceg.de...
> "K. Wittrock" writes:
>
>> schrieb im Newsbeitrag
>> news:1180371765.006440.54530@p77g2000hsh.googlegroups.com...
>> >> Irgendwie hab ich (bzw. mein ppm) es geschafft 2 TK-Versionen
>> >> installiert zu haben.
>> >>
>> >> Einmal 804.027-r6 in "perl" (das war wohl der auslieferungszustand)
>> >> und einmal 804.026 in "site" welches mir der ppm als "update zum
>> >> anderen" verkaufen wollte.
>> >>
>> >> Ohne das 804.026 bekam ich aber tk::JPEG nicht zum laufen.
>> >
>> > Nachdem ich nun versuchsweise das 804.026 wieder deinstalliert habe,
>> > sieht wieder alles normal aus.
>> > Mein ppm zeigt mir aber bei folgendes an (der mit GUI)
>> >
>> > Package name: Tk
>> > Area: perl
>> > Installed: 804.027-r6
>> > Available: 804.026
>> >
>> > Sollten bei Available eigentlich nicht eher "Updates" stehen, als
>> > ältere Versionen?? Jetzt funktioniert auch mein tk::JPEG . Hat die 027-
>> > r6 da evtl. eine eigene dabei???
>> >
>>
>> Das verstehe ich nicht. Tk gehört doch zum Perl-Core. Wieso kann man
>> das separat updaten? Bei mir liegt Tk unter Perl\site\lib. Tk::JPEG
>> ist auch dabei.
>>
>
> Nope, Tk ist nur bei ActivePerl im Core, beim "richtigen" Perl aber
> nicht.

Ich dachte, ppm wäre ActiveState-spezifisch, und nahm daher an, dass Jens
eine ActiveState-Installation hat. Und im Ursprungsposting steht

| Ich hab AvctiveStatePerl 5.8.8 mit TK 804.026

Gruß

Klaus

Re: Umlaute in Perl/Tk text-Widget

am 30.05.2007 14:19:11 von Ch Lamprecht

K. Wittrock schrieb:
>
> "Ch Lamprecht" schrieb im Newsbeitrag
> news:f3i5r6$h4v$1@online.de...
>
>> K. Wittrock schrieb:

>>> Aufgefallen ist mir nur das Verhalten
>>> beim Doppelklick. Nach hinten wird bis einschließlich zum nächsten
>>> Umlaut markiert, nach vorn so weit, dass hinter dem vorigen Umlaut
>>> noch drei "normale" Buchstaben unmarkiert bleiben.
>>> Mein Perl ist schon recht betagt, Version ActiveState v5.8.4 mit Tk
>>> 804.027.

>> Hier ist eine Möglichkeit, wie man die Doppelklicks (oder allgemein
>> die Wortmarkierung) reparieren kann:
>>
>> .........................................

>
> Ich hoffe, Slaven hat deine Antwort gelesen.

Slaven hatte das schon längst gefixt, es ist nur noch nicht bis in die Active
State Version vorgedrungen...

Grüße,



--
use Tk;use Tk::GraphItems;$c=tkinit->Canvas->pack;push@i,Tk::GraphItems ->
TextBox(text=>$_,canvas=>$c,x=>$x+=70,y=>100)for(Just=>anoth er=>Perl=>Hacker);
Tk::GraphItems->Connector(source=>$i[$_],target=>$i[$_+1])fo r(0..2);
$c->repeat(30,sub{$_->move(0,4*cos($d+=3.16))for(@i)});MainL oop