Gramo’s scripts (2)

A existat o vreme cand formatul HTML nu se impusese inca. Strange as it may sound, conceptul de hypertext exista si, intr-un fel, era mult mai simplu sa produci un hypertext pe vremea aia.

Incepeai sa scrii textul. La un moment dat, pornind de la un punct, faceai o divagatie (o paranteza, sau o chestie de felul unei note de subsol). Marcai punctul in care incepe paranteza intr-un fel simplu[simplu]. Te duceai in josul textului si introduceai o sectiune intitulata “[simplu]” in care iti scriai ideile.

In timp ce scriai acolo iti venea sa faci alta paranteza[paranteza] si sa vorbesti despre alte lucruri. Marcai si chestia asta si adaugai o sectiune la sfarsit, care sa inceapa cu “[paranteza]”. Si asa mai departe. Cand te saturai, puteai reveni in sectiunea principala.

Nu trebuia sa salvezi nu stiu cate fisiere, sa le dai nume, sa adaugi linkuri s.a.m.d. Fiecare sectiune aparea intr-un ecran separat, din fiecare te puteai intoarce la ecranul initial. Textul il scriai intr-un editor special, care tinea loc apoi si de browser. Totul ramanea intr-un singur fisier.

Well, Gramo si-a dorit sa aiba ceva asemanator pentru HTML. Adica, sa poti sa scrii un hypertext ca pe vremuri, fara sa te opresti sa creezi fisiere etc., sa il salvezi sub forma unui singur fisier, iar apoi sa poti genera automat paginile in format HTML.

Sa zicem ca textul e salvat intr-un fisier numit exemplu.txt si arata cam asa:

acum voi scrie un nou text, asa cum l-as scrie
efectiv, atunci cand mi-as dori sa explorez
ideea de hypertext[hyper]. voi incerca totusi
sa nu scriu ceva prea lung[scurt]; poate
ar fi mai bine sa scriu un text[text] despre
antonime[antonime]; sau poate ar trebui
sa scriu despre altceva[altceva]; dar
despre ce anume? nu stiu[nu_stiu]
 
[hyper]
adica ideea de a introduce anumite
legaturi dintr-un text catre altul
s.a.m.d.;
 
[scurt]
lung este antonimul lui scurt
 
[text]
text nu este un antonim al lui
hypertext
 
[antonime]
antonimele sunt niste cuvinte care
se opun[opun]; aici[scurt] puteti
vedea un exemplu de antonim, iar
aici[text] un exemplu de ceva
care nu e un antonim :) un
alt exemplu de ceva care nu
e antonim ar fi cel cu 'introducere'
si 'incheiere'...
 
[opun]
de fapt ,nu cuvintele se opun, doar
sensul lor e opus...
 
[altceva]
exista o opozitie intre ceva si altceva?
nu stiu daca e asa; exista doar o diferenta[dif],
iar diferenta e altceva decat o opozitie
 
[dif]
uneori o idee poate fi pusa mai bine in
evidenta printr-o difenta, adica pe
fondul unei idei diferite de ea,
cum e cazul cu ideea de hypertext[hyper]
fata de cea de text[text2]
 
[text2]
un text e o insiruire lineara[linear] de cuvinte,
propozitii etc.
 
[linear]
e adevarat insa ca cititorul poate sa nu
se 'raporteze linear' la textul pe care
il citeste, ca atunci cand citeste mai
intai incheierea si abia apoi introducerea
s.a.m.d.
 
[nu_stiu]
de fapt eu doar ma prefac ca urmaresc sa
scriu ceva aici, scopul meu principal
fiind, bineinteles, sa-mi testez noul
script scris in perl :) asa ca,
gata, am terminat[index]

Iar scriptul in Perl arata asa:

#!/usr/bin/perl
#fisierul se cheama proc.pl
$testfile= shift(@ARGV);
$readtemp= "";
$outpname= "";
$outptext= "";
 
open FILE, "< $testfile" or die "$!\n";
@outfile= <FILE> ;
$readtemp = join('', @outfile) ;
close FILE;
 
#aici trebuie sa intre procesarea propriu-zisa a textului
$_ = $readtemp;
s/([\w]+)\[([\w]+)\]/<a href=\"$2\.html\">$1<\a>/g ;
$readtemp= $_;
s/([^\[]+)([\w|\W]*)/$1/ ;
$outptext= $_;
createindex ($outptext) ;
#pana aici partea principala
 
$_ = $readtemp;
s/([^\[]+)([\w|\W]*)/$2/ ;
$temp= $_ ;
s/(\])[^\[]*/$1/g ;
s/\]\[/000/g ;
s/[\[|\]]*//g;
@titles= split(/000/,$_);
$_= $temp;
s/\[[\w]*\]//;
s/\[[\w]*\]/000/g;
@texts= split(/\n000/,$_);
foreach (@titles) {
$outpname= $_;
$outptext= shift(@texts);
createpage ($outpname, $outptext) ;
}
#pana aici textele secundare
print "ok\n";
 
#rutine aici
sub createindex {
my $outptxt = shift(@_);
open FILE, ">index.html" or die "$!\n";
print FILE "<html><head><title>index</title></head><body><pre>\n";
print FILE "$outptxt\n";
print FILE "</pre></body></html>";
close FILE;
}
 
sub createpage {
my $topicname = shift(@_);
my $outptxt = shift(@_);
$filename= join('', $topicname, ".html");
open FILE, "> $filename" or die "$!\n";
print FILE "<html><head><title>";
print FILE "$topicname";
print FILE "</title></head><body><pre>\n";
print FILE "$outptxt\n";
print FILE "</pre><br><hr><br><a href=\"javascript: history.back()\">Back</a>\n";
print FILE " <a href=\"index.html\">Home</a><hr></body></html>";
close FILE;
}

Scriptul si fisierul ce urmeaza a fi procesat se copiaza intr-un director gol; se executa, sa zicem, asa:
./proc.pl exemplu.txt

Scriptul proceseaza textul si produce un fisier “index.html”, in care apare textul principal, iar cuvintele dupa care vin nume de sectiuni devin link-uri catre sectiunile respective. Fiecare dintre ele va fi salvata sub forma unui fisier “numele_sectiunii.html”. Se sterge “proc.pl” din directorul respectiv si se pune totul pe server 🙂 That’s it, folks!

5 thoughts on “Gramo’s scripts (2)

  1. gramos

    yep, a fost complicat de pus scriptul pe wordpress 🙂 character encoding a fost solutia indeed 🙂 am verificat la sf rand cu rand, sper ca n-au ramas erori;

    cat despre wiki, da, sigure e super, da’ tre’ sa ai acces la o baza de date mysql si sa poti rula scripturi in php pe server; in timp ce jucaria lui Gramo face direct html-uri 🙂

  2. stefantalpalaru

    Po?i face un wiki static cu un script ÃŪn Perl. N-ai nevoie de baz? de date c? folose?ti fi?iere pentru stocare. Ce trebuie ÃŪn plus e doar o interfa?? web pentru editare (tot ÃŪn HTML) care s? trimit? con?inutul unui FORM scriptului t?u.

Comments are closed.