🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
5 messages
5 total messages Started by Adam Twardoch (fidel) Fri, 08 Aug 1997 20:52
Podświetlenie tekstu w PERLu
#496
Author: Adam Twardoch (fidel)
Date: Fri, 08 Aug 1997 20:52
60 lines
2863 bytes
Drodzy!
Sytuacja: PERL. Serwer WWW na stacji Unix. CGI. 
Mam dokument HTML i mam pewne wyrażenie. 
Na przykład dokument index.html oraz wyrażenie "font". 
Mam skrypt CGI w Perlu, który wywołuję z parametrami URL tego dokumentu
i wyrażenie.

W skrypcie url jest w zmiennej $inurl a wyrażenie w $searchtext

I teraz chcę, żeby dokument spod $inurl został wypisany na ekranie
"przefiltrowany", tzn. wszystkie pojawienia się wyrażenia $searchtext (w
tym przypadku "font" w tym dokumencie mają być objęte jakimś 
tagien (np. <FONT COLOR="red"></FONT>). 

Ale! Po pierwsze zamiany ma zajść tylko w body a po drugie wewnątrz
tagów oczywiście nie!
No i jeszcze żeby było case insensitive (ale to już tylko ewentualnie).
Czyli mam taki dokument: 

------------------------------------------
<HTML>
<HEAD><TITLE>Polskie fonty</TITLE></HEAD>
<BODY><H1>Polskie fonty pod Windows 95</H1>
Tu znajdziecie FONTY Arial i Times New Roman. Inne fonty 
dostępne są <A HREF="http://www.fontfont.de/">tutaj</A>. 
</BODY></HTML>
------------------------------------------

Jak widać, wyrażenie "font" jest w tytule, w <H1>, w zwyklym tekscie i w
tagu <A>

Oczywiście zamianione mają być tylko te w <H1> i w zwyklam tekscie,
czyli outpot skryptu wywulanego z parametrami "index.html" i "font"
powinien wyglądać tak:

------------------------------------------
<HTML>
<HEAD><TITLE>Polskie fonty</TITLE></HEAD>
<BODY><H1>Polskie <FONT COLOR="red">font</FONT>y pod Windows 95</H1>
Tu znajdziecie <FONT COLOR="red">FONTY</FONT> Arial i Times New Roman.
Inne <FONT COLOR="red">fonty</FONT>
dostępne są <A HREF="http://www.fontfont.de/">tutaj</A>. 
</BODY></HTML>
------------------------------------------

Jak to zrobić w PERLu?

Z góry dziękuję.
Adam Twardoch

Ogonek i spółka - http://ogonek.home.ml.org/



-- 
| adam.twardoch@euv-frankfurt-o.de  |  http://twardoch.home.ml.org/ |
| Tel. Polska: (095)592151 (032)2181807  |   world +49 335 5534 638 |
| Pilsudskiego 14/51 | Nalkowskiej 15/84 | Muehlenweg 36/507        |
| PL 69-100 Slubice  | PL 43-100 Tychy   | D-15232 Frankfurt (Oder) |
| Poland             | Poland            | Germany                  |
Re: Podświetlenie tekstu w PERLu
#497
Author: Jaroslaw Strzalkowski
Date: Sat, 09 Aug 1997 16:54
55 lines
1691 bytes
In pl.comp.lang.perl Adam Twardoch (fidel) <adam.twardoch@euv-frankfurt-o.de> wrote:
: Drodzy!
: Sytuacja: PERL. Serwer WWW na stacji Unix. CGI. 
: Mam dokument HTML i mam pewne wyrażenie. 
[...opis problemu...]

: Jak to zrobić w PERLu?

Popatrz na to poniżej - to jeszcze nie całkiem doszlifowane, ale w zasadzie
robi to co chcesz - dopieść to sobie tak jak chcesz. Komentarze są chyba
niepotrzebne - dość banalne to, nieprawdaż?
Pozdrowienia.


#!/usr/local/bin/perl

undef $/;
$_ = <STDIN>;
if( /(<body>)(.+)(<\/body>)/is ) 
{ 
  $before_body = $`.$1; 
  $body = $2;
  $after_body = $3.$';
}
else
{
  $body = $_;
}

print $before_body;

while( $_ ne '' )
{
  if( /^([^<]*)(<[^>]*>)/s )
  {
    $nietag = $1;
    $tag = $2;
    $_ = $';
  }
  else
  {
    $nietag = $_;
    $tag = '';
    $_ = '';
  }

  $nietag =~ s/(font\w*)/<FONT COLOR="red">$1<\/FONT>/igs;
  print $nietag . $tag;
}


print $after_body;

-- 
Jaroslaw Strzalkowski, Uczelniane Centrum Informatyki AGH, Krakow
Re: Podświetlenie tekstu w PERLu
#498
Author: Piotr Piatkowski
Date: Sun, 10 Aug 1997 14:21
44 lines
2755 bytes
In pl.comp.lang.perl Jaroslaw Strzalkowski <js@galaxy.uci.agh.edu.pl> wrote:
: In pl.comp.lang.perl Adam Twardoch (fidel) <adam.twardoch@euv-frankfurt-o.de> wrote:
: : Drodzy!
: : Sytuacja: PERL. Serwer WWW na stacji Unix. CGI. 
: : Mam dokument HTML i mam pewne wyrażenie. 
: [...opis problemu...]

: : Jak to zrobić w PERLu?

: Popatrz na to poniżej - to jeszcze nie całkiem doszlifowane, ale w zasadzie
: robi to co chcesz - dopieść to sobie tak jak chcesz. Komentarze są chyba
: niepotrzebne - dość banalne to, nieprawdaż?

No to ja - w ramach odwiecznej rywalizacji :-) zrobiłem to troszkę 
prościej. Wcześniej już posłałem do Adama mailem - bo przysłał pytanie też 
do mnie bezpośrednio - ale nie mogę przecież sobie podarować okazji, coby
się publicznie powymądrzać :-> A skoro już się wymądrzać, to co mi 
tam - dodam komentarze (Adam dostał bez komentarzy) :-)

#!/usr/bin/perl
my $file = join "", <>;  # cały plik(i) do $file (coś jakby cat $* >$file)
my $parsed = "";         
while( $file =~ /<[^>]*>|[^<]*/g ) { # bierz albo kolejny tag, albo 
                                     # tekst między tagami
   $_ = $&; # zapisz co zostało dopasowane - dla wygody w $_
   if( /<body.*>/i .. /<\/body.*>/i ) { # Jeżeli było już <body>, ale nie było 
                                        # jeszcze </body>
     s!(font\S*)!<font color="red">$1</font>!gi # dokonaj modyfikacji...
       unless /^</;                             # ...chyba że to jest tag
   }
   $parsed .= $_; # dopisz następny kawałek do zmiennej z wynikiem.
}
print $parsed; # zrobione :-)

Pozostaje pytanie czy moje rozwiązanie jest mniej czy bardziej 
czytelne niż Jarka. Ale IMHO jak trzeba cudzy program zrozumieć, to 
chyba najważniejsze żeby był krótki - bo wtedy do rozumienia jest 
mniej :-)

P.S. To dlatego jestem taki miły i dokładny, że mam właśnie do 
     zrobienia znacznie większy i pilniejszy projekt :-)

-- 
Piotr Piątkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Re: Podświetlenie tekstu w PERLu
#500
Author: Adam Twardoch (fidel)
Date: Mon, 11 Aug 1997 08:46
17 lines
1373 bytes
Wielkie dzięki dla Mistrzów Ogonkowiczów za tak rychłą odpowiedź.
Wybrałem rozwiązanie Piotra, gdyż bliższe było temu, co sam starałem się
powoli klecić do kupy (chociaż bez Waszej pomocy badziewiłbym pewnie
jeszcze z miesiąc).

Wynik jest do obejrzenia na stronie Ogonek i spółka
(http://ogonek.home.ml.org/). 

Pozdrawiam,
Adam Twardoch (fidel)

-- 
| adam.twardoch@euv-frankfurt-o.de  |  http://twardoch.home.ml.org/ |
| Tel. Polska: (095)592151 (032)2181807  |   world +49 335 5534 638 |
| Pilsudskiego 14/51 | Nalkowskiej 15/84 | Muehlenweg 36/507        |
| PL 69-100 Slubice  | PL 43-100 Tychy   | D-15232 Frankfurt (Oder) |
| Poland             | Poland            | Germany                  |
Re: Podświetlenie tekstu w PERLu
#499
Author: Jaroslaw Strzalkowski
Date: Mon, 11 Aug 1997 15:59
8 lines
1054 bytes
In pl.comp.lang.perl Piotr Piatkowski <kompas@galaxy.uci.agh.edu.pl> wrote:
: No to ja - w ramach odwiecznej rywalizacji :-) zrobiłem to troszkę 
: prościej.

Panowie! Kto następny?! Kto skróci zapis Piotra o połowę?
Ale faktycznie o $& zapomniałem. 
-- 
Jaroslaw Strzalkowski, Uczelniane Centrum Informatyki AGH, Krakow
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads