Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Re: Tk text widget indices.

by perl_seeker (Scribe)
on Jul 18, 2003 at 11:47 UTC ( [id://275581]=note: print w/replies, xml ) Need Help??


in reply to Re: Tk text widget indices.
in thread Tk text widget indices.

Hi, thanks a lot for the reply
actually I am working with text in another language,
not English text.I gave that example in my post just to
state the problem(or so I thought).I had not at all tested
with english text.

In fact my code as well works with the english text file:

x.txt try **until **you **succeed


but strangely does not work for my text file which looks
like this, if the display is set to an english font:

y.txt ]]» **]X»]» **]Eõ]» ]]»»


In this case only the first character next to the 2nd
asterisk is printed:

$result: 1.4 $start: 1.6 The word: ]

I need the whole word to be printed that is:

]X»]»


What I then need to do is change the font color of
the word so that it stands out in the widget window,
and delete the **'s.
I need to present the text in the Tk widget as a user
interface.The user clicks a button, certain words get
marked by the asterisks.But instead of the asterisks,
I now want to change the font color of the words instead.

I'm not sure how I can search within a widget window
using regexps.

here's my actual code, with a whole lot of it not relevant
to this question omitted.

#!/usr/local/bin/perl -w use Tk; #use strict; our($filename, $info); #Variables to be used in the su +bs &load_file and &save_file. #$filename stores the file name + typed by the user in the entry widget of the main window. #$info stores the text message +displayed at the bottom of the main window. my $mw = MainWindow->new; # Main window. # Create necessary widgets. my $f = $mw->Frame->pack(-side => 'top', -fill => 'x'); + #Create frame. $f->Label(-text => "Filename:")->pack(-side => 'left', -anchor => 'w') +; # Label widget. $f->Entry(-textvariable => \$filename)->pack(-side => 'left', -anchor +=> 'w', -fill => 'x', -expand => 1); # Entry widget. + #Button widgets. $f->Button(-text => "Sug", -command =>\&tged)->pack(-side => 'right'); + $f->Button(-text => "Save", -command => \&save_file)->pack(-side => 'r +ight', -anchor => 'e'); $f->Button(-text => "Load", -command => \&load_file)->pack(-side => 'r +ight', -anchor => 'e'); $f->Button(-text => "Det",-command => \&chfile )->pack(-side => 'right +', -anchor => 'e'); $f->Button(-text => "Show",-command => \&load_file)->pack(-side => 'ri +ght', -anchor => 'e'); $f->Button(-text => "Add?",-command => \&addit)->pack(-side => 'right' +, -anchor => 'e'); $mw->Label(-textvariable => \$info, -relief => 'ridge')->pack(-side => + 'bottom', -fill => 'x'); # Label widget. #Text widget. + my $t = $mw->Scrolled("Text",-font=>"{as-ttdurga} 24 {bold}")->pack(-s +ide => 'bottom', -fill => 'both', -expand => 1); MainLoop; + sub chfile { open LEX, 'soundex.txt' or die $!; my %lexicon; while(<LEX>){ chomp; my @words =split; @lexicon{@words} = (1) x @words; } close LEX; open FILE, "+<$filename" or die $!; my @missing; my @data; while(<FILE>){ push @missing, grep { ! $lexicon{$_} } split; push @data,split; } #print @missing; #print "\n@data"; seek FILE, 0, 0; # go to start of file truncate FILE, 0; foreach $ditem(@data){ $_ = process($_); print FILE; print FILE " "; foreach $mitem(@missing) { my $currentposition=tell FILE; seek FILE,0,1 ; if ($mitem eq $ditem){ syswrite FILE,"**",4 ; #print"\n$mitem"; $result=$t->search(-forwards,"**",'end'); # print"\nThe start pos of the pattern:"; # print "\n$result"; $start=$result+.2; #print "\n$start"; @chars=$t->get("$start","$start wordend"); print "\nThe word:"; print"\n@chars"; #$t->tagConfigure("wrong",-foreground=>"red"); #$t->tagAdd("wrong","$start","$start wordend"); } } } close FILE; sub process { return($ditem); } } 1;
What is the alternative to using the 'wordend' index? That does not seem to work here. Thanx

Replies are listed 'Best First'.
Re: Re: Re: Tk text widget indices.
by tos (Deacon) on Jul 18, 2003 at 13:21 UTC
    but strangely does not work for my text file which looks like this, if the display is set to an english font:
    y.txt ]]» **]X»]» **]Eõ]» ]]»»
    Hmmm. Characters like these can cause unforseen behavior, because it's not ever clear whether they are taken as ESC-sequences or meta-characters.

    I googled a little with your as-ttdurga-font and saw that this is a kind of indic(assamese)-script-font. I like it's pretty appearance, but i wonder whether it can be fully represented by 8-Bit-ASCII-Code.

    In your code the font-declaration seems to be insignificant. This was my impression when i tested it.

    Do you actual see the desired font in your Tk-script ?

    I could imagine that you have to turn your line of thought in direction unicode. Therefore it's a good idea to use at least a perl-version >=5.6.1, i think.

    greetings, tos

      Hi,

      these fonts use ISFOC/ISCII encoding.Not the 8-bit
      ASCII.Unicode encoding has been proposed for this
      script, but most font creation software (e.g.
      Fontographer) for this script support either ISFOC/ISO Latin/Win 3.1 etc,
      but not Unicode.
      I'm using Perl 5.6 which supports Unicode, but that is of
      no use, since the font I use does not use Unicode encoding.

      Anyhow does Unicode have anything to do with where the
      problem is?......

      The search function worked correctly giving the position of
      the first *.The problem is I could not extract the word
      next to it using the get function because of the escape
      sequence/metacharcters thing.

      Could we use a loop here instead of get and read each
      char after the 2nd * ,one at a time until we get a
      whitespace?

      And yes, I can see the actual font in the Tk text widget
      window on running the script.

      I could read the entire contents of the window into a scalar
      and do a regexp search in it, but I still need the positions
      (line no, char no)of the matches found, in the window.

      By the way we can do a regexp search in the search function
      itself, if we use the -regex switch.
      HTH

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://275581]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (6)
As of 2024-04-18 19:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found