[HAMSTER][Lungo] Ancora sullo script per giustificare il testo

1 view
Skip to first unread message

Ghost

unread,
Jun 1, 2002, 9:06:59 AM6/1/02
to
[xpost]

No, no: non č vanagloria!
L'ottimo Alessio (Sleepers) mi ha chiesto di postare l'ultima
versione del mio script, quello che giustifica il testo degli
articoli/messaggi in uscita, per poi eventualmente linkarlo in una
prossima edizione delle FAQ. Che potevo rispondere? "Obbedisco!" :-)

Eventuali correzioni e/o suggerimenti sono sempre ben accetti, cosě
magari lo sistemo ancora un po'.

Lo introduco, rispondendo alle domande che penso potrebbe pormi chi
lo vedesse per la prima volta.

Indice:
---------

0) Ho fretta, leggerň solo questo punto. Che faccio?
1) Ma che č, 'sta fuffa? A che mi serve? Ma li mortacci tua...
2) Che cosa fa lo script, in dettaglio?
3a) Ma se proprio proprio volessi rischiare, come dovrei
"installare" lo script?
3b) Dovrei configurarlo, e come?
3c) Come dovrei usarlo?
4) Posso giustificare file di testo qualsiasi?
5) Invece di questo script, non potevi farti una vagonata di c@77i
tuoi?
Appendice

Domande e risposte:
--------------------


0) Ho fretta, leggerň solo questo punto. Che faccio?

Userai lo script solo per la giustificazione. Copia lo script in un
file che chiamerai, per esempio, "tomas.hsc". Posiziona tale file
nella directory di Hamster (o, se esiste, nella particolare
sottodirectory in cui tieni gli script). Nelle opzioni del tuo
mail/newsreader, scegli una lunghezza massima per ogni riga
(dovrebbe aggirarsi sui 70 caratteri). Lancia lo script dopo aver
inviato gli articoli e/o le mail dal tuo mail/newssreader ad
Hamster, e prima di inviarle da Hamster ai server remoti. Se usi
l'ultima beta (161), puoi automatizzare il lancio dello script in
configura > automation > azioni > ...
Non vi sono problemi a far agire piů volte lo script sugli stessi
articoli. La prima volta che lanci lo script, in risposta a
quanto chiestoti, inserisci come lunghezza-obiettivo il medesimo
valore che hai indicato nel mail/newsreader.

1) Ma che č, 'sta fuffa? A che mi serve? Ma li mortacci tua...

Calma, calma... anzi: salma. La Salma č la virtů dei Mort(acc)i,
come si suol dire. Procediamo con ordine.

Questo script in hs2 per Hamster č pensato per modificare le mail e
gli articoli "in uscita". Pur potendo svolgere diverse funzioni,
quella principale, di giustificarne i corpi, opera solo quando essi
siano scritti in puro testo non codificato: anche se con alcune
opportune eccezioni, lo script trasforma ciascuna riga del loro
corpo, inserendo spazi bianchi dove necessario, per renderla di una
lunghezza prefissata (in caratteri).

Quando le righe dei corpi hanno tutte il medesimo numero di
caratteri, la visualizzazione č piů piacevole, purché si usi un
font a spaziatura fissa (ben lo sa Carlo Fusco: č infatti per una
"terribile invidia e disperata" nei suoi confronti, che mi decisi
all'opra). Sottolineo, perň: benché tutti possano usare lo
script, i vantaggi della giustificazione saranno apprezzati solo da
chi usa un font a spaziatura *fissa* in fase di visualizzazione: con
un font a spaziatura variabile, invece, diverse righe avrebbero
lunghezza effettiva diversa, pur essendo costituite del medesimo
numero di caratteri.

Sull'opportunitŕ di usare un font a spaziatura fissa, in Usenet, non
mi dilungo: basti pensare a qualsiasi sottolineatura, a qualsiasi
rappresentazione grafica di formule, a qualsiasi diagramma, per
tacere dell'ascii-art. Non usare la spaziatura fissa in fase di
composizione č la mancanza piů grave, in quanto ciň puň
pregiudicare la visualizzazione di chiunque non utilizzi il nostro
stesso font variabile (e, anche ammesso di segnalarlo in un header
addizionale, chi ci assicura che quel font sia disponibile su un
altro host? E poi: imporre agli altri di dover cambiare spesso font,
ma scherziamo?); non usarlo in fase di visualizzazione č
semplicemente come darsi la zappa sui piedi.


2) Che cosa fa lo script, in dettaglio?

Concentriamoci sulla funzione di giustificazione dei messaggi.

I caratteri ascii 204, 205 e 206 sono riservati al corretto
funzionamento dello script, e non devono essere presenti nel testo
da formattare (altrimenti verranno sostituiti da spazi bianchi).

Si procede solo qualora il campo Content-Type contenga la stringa
"text/plain", ma non "UTF", oppure quando tale campo non esista. Se
il messaggio č in MIME-multipart, neppure le eventuali parti in
text/plain verranno giustificate.

NON vengono giustificate:
- le righe piů lunghe di quanto prefissato come obiettivo;
- le righe molto piů corte di quanto prefissato come obiettivo (si
hanno comportamenti diversi, in base all'eventuale segno di
punteggiatura che concludesse la riga, all'eventuale presenza di
smiley, alla lunghezza della riga successiva, al fatto che la riga
sia l'ultima o no);
- le righe che contengano almeno un TAB, tranne che a fine riga;
- le righe che comincino con almeno 5 spazi bianchi;
- le righe che seguano il (primo) corretto delimitatore di firma;
- le righe che costituiscano un allegato uuencode, e la riga che lo
introduca;
- le righe quotate (ovvero che comincino per ">", "?", "#", "|");
- le righe che non contengono spazi interni non racchiusi fra doppie
virgolette (vedi qui sotto).

Se, all'interno di una *medesima* riga, vi sono stringhe racchiuse
fra doppie virgolette ("come questa" e "come quest'altra"), ma "non
come questa", di tali stringhe verrŕ preservata la forma originale.
Se il testo virgolettato si estende su piů righe, raccomando di usare
le virgolette semplici.

Viene preservata la spaziatura originale fra "punto elenco" ed
inizio del testo (salvataggio dell'incipit).

La procedura di giustificazione viene attuata a righe alterne, da
destra a sinistra e poi da sinistra a destra.

Per una breve illustrazione della funzione ausiliaria, che ha che
fare col prefisso di replica, si veda l'appendice.

3a) Ma se proprio proprio volessi rischiare, come dovrei
"installare" lo script?

Il modo piů semplice č indicato al punto 0). La soluzione piů
elegante č quella di scorporare le sub_funzioni, ed inserirle in uno
o piů moduli da caricare all'inizio dello script vero č proprio (che
son due righe in croce).

3b) Dovrei configurarlo, e come?

Se hai intenzione di usarlo solo per giustificare, NO. E'
sufficiente che usi la versione 1.3.23.4 di Hamster, o superiore. La
prima volta che lo eseguirai, apparirŕ una finestra pop-up ove
dovrai inserire la lunghezza (in caratteri) che le righe
giustificate dovranno assumere (mi raccomando: che sia la stessa
indicata nel mail/newsreader, o di pochissimo superiore: *non*
inferiore, lo script non funzionerebbe). Null'altro.

Se hai intenzione di usarlo anche per il trattamento dei prefissi di
risposta, o solo per quelli, devi invece modificare, all'inizio
dello script, la chiamata alla funzione tomas. Nel testo dello
script ho inserito una legenda relativa al parametro $actions. Ad
ogni modo:
tomas("","","","") -> solo per giustificare, default;
tomas("","","1","") -> solo per trattamento prefissi;
tomas("","","2","") -> solo per giustificare, come il default;
tomas("","","3","") -> per giustificare e per i prefissi.

3c) Come dovrei usarlo?

Puoi lanciarlo manualmente, prima che le mail e le news lascino
Hamster per i server remoti. Se usi uno script per inviarle
periodicamente, dovrai modificarlo per far eseguire lo script qui
illustrato -o piů semplicemente la funzione tomas- prima dell'invio.
Se usi una delle ultime versioni beta di Hamster, puoi pure renderne
automatica l'esecuzione da configurazione > automation > azioni >...

4) Posso giustificare file di testo qualsiasi?

Puoi, sfruttando direttamente i parametri della funzione tomas dal
prompt hs2 di Hamster. Ipotizzando che tu abbia salvato la funzione
tomas nel *modulo* tomas.hsm, e che voglia giustificare tutti i file
colla (strana) estensione ".ciop" presenti nella cartella
"x:\mieifile\testo\" ad una lunghezza di 75 caratteri, al prompt
hs2 dovresti scrivere:

#!load tomas.hsm{Ctrl+T}tomas("x:\mieifile\testo\","ciop","2","75")

N.B. Nel path, la "\" finale č opzionale; nell'estensione *non* va
indicato il punto iniziale.

5) Invece di questo script, non potevi farti una vagonata di c@77i
tuoi?

Sě. Se NON vuoi che io scriva e posti altri script, inviami 1 Euro e
di' ad almeno 10 dei tuoi amici di fare lo stesso... e di passare la
voce. Attenzione: dovete tutti mandare i soldi a me, e non anche
mandarveli fra voi (sincerely, your Rasmus).

Appenděce.

I piů smaliziati possono usare con profitto anche la funzione per il
trattamento in uscita dei prefissi di risposta, che perň ha senso
*solo* come complemento alla funzione di trattamento in *ingresso*
dei prefissi di risposta (per la quale si dovrŕ usare uno script in
fase di scarico degli articoli news, anche automatizzato, e
sopportare il seguente disagio: per tutta la fase di scarico il
newsserver locale di Hamster sarŕ disabilitato, quindi inaccessibile
dal newsreader). In sintesi: in fase di ingresso, tutti gli articoli
scaricati dai gruppi in cui presumo scrivano anche italiani sono
controllati: se presentano un prefisso di risposta diverso da un
*singolo* "Re: ", il sbj originale viene salvato in un X-header
aggiunto, ed il prefisso viene sostituito da un singolo "Re :": ciň
assicura un corretto sviluppo del thread agli occhi del newsreader,
senza inopinati e fasulli cambi di sbj. Quando si risponde ad un
articolo, Hamster controlla se il sbj originale sia diverso: nel caso
modifica opportunamente il prefisso dell'articolo in uscita e, se
necessario, inserisce un avviso in cima al body, che invita
l'interlocutore a risolvere il suo problema. Per maggiori dettagli,
rimando al thread che iniziň su hamster.it.misc con
l'articolo <a8km66.1lg.1%gh...@ID-24474.user.dfncis.de> (e sono
disponibile per ulteriori chiarimenti, ovvio).

Per sfruttare anche la funzione per il trattamento in uscita dei
prefissi di risposta, si modifichi la chiamata a tomas, nel testo
dello script, secondo quanto indicato al punto 3b):
da
tomas("","","","")
a
tomas("","","3","")

Un ultima cosa: lo script puň essere ampliato. Quando un articolo in
uscita č caricato in una lista, ed č pronto per essere trattato,
conviene farci tutto quello che si vuole (magari aggiungere,
togliere, modificare alcuni header), prima di salvarlo di nuovo (da
dove credete che arrivi il "%ghost" nei miei messageID, per
esempio?). Ma qui lascio spazio alle necessitŕ di ciascuno.

Ecco, di seguito, lo script:


#!hs2
#!load hamster.hsm
#!load hmessage.hsm

#########################################################
#### I caratteri ascii 204, 205 e 206 sono riservati ####
#### al corretto funzionamento dello script: ####
#### non devono comparire nel testo da giustificare. ####
#########################################################

HamRequireVersion("1.3.23.4",True)

tomas("","","","") #### Chiamata alla procedura Tomas (Treatment of_
Outgoing Messages and ArticleS)
#### I parametri possibili sono:
#### $path -> percordo della cartella in cui
#### cercare i file da giustificare;
#### $ext -> estensione dei file da caricare;
#### $actions -> azioni da intraprendere,_
#### secondo la legenda;
#### $targetline -> lunghezza della riga
#### giustificata.
#### Il default č che NON siano impostati qui.


#############################################
# Legenda $actions: #
# ---------------- #
# 1 -> RE_outgoing #
# 2 -> giustifica #
# 3 -> giustifica & RE_outgoing #
#############################################

quit


Sub tomas($path,$ext,$actions,$targetlen)
#############################################
# Legenda $actions: #
# ---------------- #
# 1 -> RE_outgoing #
# 2 -> giustifica #
# 3 -> giustifica & RE_outgoing #
#############################################

if($actions="")
$actions="2"
else
if(!RE_match($actions,"^[1-3]$"))
warning("Azioni invalide! Script_
interrotto.")
quit
endif
endif
$actions=int($actions)

if($actions>=2)
if($targetlen="")
$targetlen=linelen
else
if(!RE_match($targetlen,"^0*[1-9]\d{1,2}$"))
warning("Lunghezza target invalida_
o non consentita! Script interrotto.")
quit
else
$targetlen=int($targetlen)
endif
endif

if($ext="")
$ext="msg"
else

endif
endif


if($path="")
work_in_dir(HamNewsOutPath,$ext,$actions,$targetlen)
work_in_dir(HamMailsOutPath,$ext,$actions,$targetlen)
else
if(direxists($path))
$path=RE_extract($path,".*[^\\]")+"\"
work_in_dir($path,$ext,$actions,$targetlen)
else
Warning("Percorso inesistente!_
Script interrotto.")
quit
endif
endif
endsub


Sub linelen #### Impostazione della lunghezza-obiettivo
var($ok,$targetlen)

#### Leggi la lunghezza da hscripts.ini
$targetlen=IniRead("","giustifica","targetlen","")
if($targetlen<>RE_Extract($targetlen, "^\d+" ))
$targetlen=""
endif
$targetlen=eval($targetlen)

if($targetlen=0) #### Se la lunghezza č zero
repeat
$targetlen =_
InputBox("Lunghezza riga giustificata_
( >= quella impostata nel newsreader,_
e compresa fra 40 e 75)?",_
"Inserisci lunghezza riga giustificata",_
"69", $ok) #### domandala
if($targetlen<>RE_Extract($targetlen,"^\d+"))
$targetlen=""
endif
$targetlen=eval($targetlen)
until(($ok=1)&&($targetlen>39)&&($targetlen<76))
IniWrite("","giustifica","targetlen",_
$targetlen) #### e salvala in hscripts.ini
endif
return($targetlen)
endsub

Sub work_in_dir($path,$ext,$actions,$targetlen) #### Procedura di_
carico
var( $files, $files_num, $indice, $message, $nomefile, $a1, $a2 )
$files = Listalloc(0,0)
ListFiles($files,$path+"*."+$ext,true)
$files_num = listcount( $files )

$indice = 0
$message = Listalloc(0,0)
while( $indice < $files_num )
Listclear( $message )
$nomefile = listget( $files, $indice )
ListLoad( $message, $nomefile )

if($actions<>2)
RE_outgoing($message)
endif

if($actions>=2)
giustifica($message,$targetlen)
endif

ListSave( $message, $nomefile )
inc($indice)
endwhile
Listfree($message)
Listfree( $files )
endsub


Sub giustifica(*$message,$targetlen) #### Inizio procedura di_
giustificazione

var( $inizio_corpo, $fine_corpo, $riga, $lunghezza, $stringa,_
$bianchi, $spazi, $cerca, $limitatore, $inizio, $contenuto,_
$fra_virgolette, $fra_virgolette_mod, $incipit,_
$lunghezza_incipit, $a1, $a2 )

varset($flag, false)

$contenuto=MsgGetHeader($message,"Content-Type:")

#### procedi solo su testo semplice
if(($contenuto="")||(RE_match($contenuto,"text/plain")_
&&!RE_match($contenuto,"UTF")))

$inizio_corpo = ListIndexOf($message,"") + 1
$fine_corpo = listcount($message) - 1

#### escludi firma
$limitatore=ListIndexOf($message, "-- " )
if(($limitatore>$inizio_corpo)&&($limitatore<=$fine_corpo))
$fine_corpo=$limitatore - 1
endif

#### Per ogni riga da trattare:
for($riga, $inizio_corpo, $fine_corpo)


#### elimina spazi finali
$stringa=RE_extract(ListGet($message,$riga),".*\S")

#### procedi solo se la riga non introduce uuencode
if(!RE_match($stringa, "^begin \d+ \S+"))

$inizio=ord($stringa)

#### scarta righe secondo il criterio dei caratteri
if(($inizio=62)||($inizio=124)||($inizio=63)||($inizio=35)_
||RE_match($stringa,"\t|^\s{5,}"))
# do nothing

#### altrimenti procedi
else
$lunghezza=len($stringa)

#### procedi solo sulle righe di lunghezza OK
if(($lunghezza+5>$targetlen)||(($riga<>$fine_corpo)_
&&(len(trim(ListGet($message,$riga+1)))>3)&&_
($lunghezza+11>$targetlen))||(($lunghezza+21>$targetlen)_
&&(!RE_match($stringa,_
"[.:;!?](\s*([.;:8?]-?[(){}[\]oOPpD<>/|\\]+)|(_\(?[^+oO\-]\)?))?$"))))

#### procedi solo se ci sono blank interni
if(RE_match(trim($stringa), " "))

#### preserva incipit (se particolare)
$incipit=RE_extract($stringa,_
"^\s*(((\d{0,2}[a-zA-Z]?|[a-zA-Z]{1}\d?)\))|[-+*]{1,3})?\s+")
$lunghezza_incipit=len($incipit)
if($lunghezza_incipit<>0)
$stringa=segnaposto($lunghezza_incipit,chr(205))+_
delete($stringa,1,$lunghezza_incipit)
endif

$cerca=""".*?"""

#### salvaguarda quanto virgolettetato
repeat

#### estrapola le porzioni, una per una
$fra_virgolette=RE_extract($stringa,$cerca)

#### crea una copia d'appoggio
$fra_virgolette_mod=$fra_virgolette

#### modifica la copia
$fra_virgolette_mod=replace(replace($fra_virgolette_mod," ",_
chr(204),true),"""",chr(206),true)

#### sostituisci temporaneamente l'originale
$stringa=replace($stringa,$fra_virgolette,$fra_virgolette_mod)

until($fra_virgolette="")

#### procedi solo se ci sono ancora blank interni
if(RE_match(trim($stringa)," "))

#### procedi a righe alterne
if($flag = true)

#### inverti: da "ab c def" a "fed c ba"
inverti_stringa($stringa)

endif

#### determina il numero di spazi bianchi da aggiungere
$spazi=$targetlen - $lunghezza
$bianchi=""

#### ciclo di ricerca intervalli bianchi ####
while($spazi>0)

#### dimensionamento progressivo dell'intervallo di lavoro
$bianchi=$bianchi+" "
$cerca="(?<=\S)"+$bianchi+"(?=\S)"

#### ciclo di allungamento degli intervalli bianchi
repeat
RE_Split($stringa, $cerca, $a1, $a2)
if($a2<>"")
$stringa=$a1+$bianchi+" "+$a2
$spazi=$spazi-1
endif
until(($spazi=0)||($a2=""))

endwhile #### ora la riga č giustificata

endif

#### ripristino delle righe invertite
if($flag = true)
inverti_stringa($stringa)
endif

#### ripristino dell'incipit
$stringa=$incipit+trim($stringa, chr(205))

#### ripristino del testo temporaneamente sostituito
$stringa=replace(replace($stringa,chr(204)," ",true),_
chr(206),"""",true)

#### salvataggio riga giustificata
ListSet($message, $riga, $stringa)

#### cambio di flag
$flag=!$flag

endif
endif
endif

else
$riga=$fine_corpo + 1 #### esclusione uuencode
endif

endfor
endif
endsub


Sub RE_outgoing(*$articolo)
var($original_sbj,$ref,$numero,$gruppo,$riferito,$hdl_gruppo,_
$a1, $a2)

if(RE_match(msggetheader($articolo, "Subject:"),_
"^(=\?[^?]+\?Q\?)?Re:"))

$ref=msggetheader($articolo,_
"In-Reply-To:")

if($ref="")

$ref=RE_Extract(msggetheader($articolo,_
"References:"), "<[^<>]+>(?=[^<>]*$)")

endif

if(Hamartlocatemid($ref, $gruppo,$numero)=0)
$hdl_gruppo=hamgroupopen($gruppo)
$riferito=listalloc
listsettext($riferito,_
hamarttext($hdl_gruppo,$numero))
$original_sbj=msggetheader($riferito,_
"X-Original-Subject:")
listfree($riferito)
hamgroupclose($hdl_gruppo)
if($original_sbj<>"")
if(RE_match($original_sbj,_
"^(=\?[^?]+\?Q\?)?Re:"))
Msgsetheader($articolo,_
"Subject:", $original_sbj)
else
if(ord($original_sbj)=61)
$a1=RE_Extract($original_sbj,_
"^=\?[^?]+\?Q\?(R(e)?:_)+")
$a2=RE_Extract($a1,"(R(e)?:_)+")
Msgsetheader($articolo,_
"Subject:",_
replace($original_sbj,$a1,_
replace($a1,$a2,"Re:_"+$a2)))
else
Msgsetheader($articolo,_
"Subject:", "Re: "_
+$original_sbj)
endif
#### avvertimento R: ####
varset($insert,listindexof($articolo,"")+1)
if(!RE_match(listget($articolo,$insert),_
"(?-i)_ATTENZIONE_!!!"))
listinsert($articolo,$insert,_
"_ATTENZIONE_!!!")
listinsert($articolo,$insert+1,"Il_
tuo programma utilizza un prefisso di_
risposta non standard.")
listinsert($articolo,$insert+2,_
"(""R: "" al posto di ""Re: ""). Per_
cortesia, risolvi il problema.")
listinsert($articolo,$insert+3,_
"Maggiori informazioni qui:_
www.vene.ws/mail/r-out.asp - Grazie.")
listinsert($articolo,$insert+4)
listinsert($articolo,$insert+5)
endif
#### fine avvertimento R: ####

endif
endif
endif
endif
endsub


Sub inverti_stringa(*$stringa)
var($lunghezza_stringa, $idx, $stringa_invertita)
$stringa_invertita=""
$lunghezza_stringa=len($stringa)
for($idx, $lunghezza_stringa, 1, -1)
$stringa_invertita = $stringa_invertita +_
copy($stringa, $idx, 1)
endfor
$stringa = $stringa_invertita
endsub


Sub segnaposto($numero, $modello)
var($idx,$segnaposto)
$segnaposto=""
for($idx,1,$numero)
$segnaposto=$segnaposto+$modello
endfor
return($segnaposto)
endsub


--
Informazioni su it.*: http://www.news.nic.it/news-it/faq.html
Archivio news: http://groups.google.com/advanced_group_search?hl=it
Linee guida della netiquette: http://www.faqs.org/rfcs/rfc1855.html
*PLEASE* visit: www.aspenleaf.com/distributed/distrib-projects.html

Ghost

unread,
Jun 1, 2002, 1:49:15 PM6/1/02
to
Su it.comp.software.newsreader Ghost ha scritto:
>Lines: 666

Ulp!

GardenIss

unread,
Jun 2, 2002, 11:58:29 AM6/2/02
to
> Ulp!

Scusa l'ignoranza, cosa significa?
--
Marco (19, 150+, NA) VW Golf TDI - GTI (marco_go...@despammed.com)
BBS RXII 17", Distanziali, Tar-Ox, Bilstein+H&R -40mm, filtro aria K&N
Sound by /////Alpine, Tec and JL -- Powered by Phoenix Gold and Steg
Gilera Runner 50SP Kat and CBR 600F ogni tanto driver :-D

Ghost

unread,
Jun 2, 2002, 3:01:58 PM6/2/02
to
Su it.comp.software.newsreader GardenIss ha scritto:

>Scusa l'ignoranza, cosa significa?

666 è il numero della Bestia. Ehm... mai visto un film dell'orrore?

Cfr. Apocalisse 13:
16Faceva sì che tutti, piccoli e grandi, ricchi e poveri, liberi e
schiavi ricevessero un marchio sulla mano destra e sulla fronte; 17e
che nessuno potesse comprare o vendere senza avere tale marchio,
cioè il nome della bestia o il numero del suo nome. 18Qui sta la
sapienza. Chi ha intelligenza calcoli il numero della bestia: essa
rappresenta un nome d'uomo. E tal cifra è seicentosessantasei.

<parodia>
e che nessuno potesse leggere o postare senza avere tale marchio:
solo gli articoli giustificati erano permessi.
</parodia> ;-)))))

werted.cjb.net

unread,
Jun 2, 2002, 5:58:18 PM6/2/02
to
[Ghost]

> e che nessuno potesse leggere o postare senza avere tale marchio:
> solo gli articoli giustificati erano permessi.

anch'io voglio il testo giustificato!!! :°(

--
http://werted.cjb.net

Andrew Harlan

unread,
Jun 10, 2002, 7:22:01 PM6/10/02
to
[X-Post to another: 1 group(s)]

Ghost scopri' di avere strani poteri il Sat, 1 Jun 2002 15:06:59 +0200
quando alzo' la sua spada al cielo e disse:

| L'ottimo Alessio (Sleepers) mi ha chiesto di postare l'ultima
| versione del mio script, quello che giustifica il testo degli
| articoli/messaggi in uscita

[cut]

molto carino! lo sto usando, ma ci ho messo delle piccole modifiche per
aggiustarmelo come mi era piu' comodo ^_^
ho fatto in modo tale che lo script venga chiamato solo sul post che
viene inviato su hamster e non ogni volta su tutti i post nella
cartella... anche se innocuo, mi pare inutile. utilizzando gli
automatismi poi lo script viene chiamato quando il post arriva su
hamster dal client, non quando sta per essere inviato, cosi' per me e'
piu' veloce poi l'upload una volta connesso ^_^
anzitutto ho messo tutto in un modulo: e' piu' elegante!
poi non utilizzo il file ini per memorizzare la lunghezza della riga, ma
lo metto come variabile globale del modulo... mi pare inutile usare un
file ini...
nel modulo ho creato questa funzione

Sub giustificaPost($filePost)
var($msg, $modified)
if(!FileExists($filePost))
return (false)
endif

$msg = ListAlloc
ListLoad($msg, $filePost)
$modified = giustifica($msg)
if($modified)
ListSave($msg, $filePost)
endif
ListFree($msg)
return ($modified)
endsub

poi ho creto uno script Giustifica.hsc con questo contenuto:

#!hs2
#!load Giustifica.hsm

if (ParamCount == 2)
giustificaPost(ParamStr(2))
endif

quit

poi in automatismi ho messo per posta uscente, news uscenti e gateway
mail2news il caricamento dello script.

nella funzione giustifica ho introdotto una semplice variabile che tiene
lo stato del messaggio, se e' modificato o meno, cosi' evito di salvare
il file se non viene modificato dallo script e questa variabile viene
restituita da giustifica.

ah, nella parte per non variare la firma ho aggiunto che deve
controllare, oltre a "-- " anche "--=20"

ehi, mi spieghi come faccio se non voglio giustificare una parte del
messaggio? c'e' un marcatore di inizio-fine non-modifica?
per adesso ho messo un controllo su un header: se e' settato, come in
questa mail, allora non giustifica (dato che c'e' del codice...)

ho postato questo sperando possa essere utile a qualcuno. se non e'
chiaro, sono pronto a chiarire!
lo script che uso per i post in uscita e' piu' complesso, e sistema
altre cose, come scrivere follow-up all'inizio del post se c'e' il
follow-up, oppure togliere degli header inutili o inserirne altri,
ecc. se volete lo posto ^^
--
"Conviene comportarsi nel modo più semplice, specie quando
si ha la reputazione d'essere una persona molto astuta"
\ | | | |
_ \ \ _` | _|-_)\ \ \ / __ | _` | _|| _` | \ andrew.harlan
_/ _\_| _|\__,_|_|\___| \_/\_/ _| _|\__,_|_| _|\__,_|_| _| @infinito.it

Reply all
Reply to author
Forward
0 new messages