]>
git.p6c8.net - selfforum.git/blob - selfforum-cgi/shared/Encode/Posting.pm
b12420fd2dbcfec03ee59125ac1c73ff7e235e99
3 # ====================================================
4 # Autor: n.d.p. / 2001-01-07
5 # lm : n.d.p. / 2001-01-08
6 # ====================================================
8 # Spezielle Codierung eines Postingtextes
9 # ====================================================
13 package Encode
::Posting
;
15 use vars
qw(@ISA @EXPORT);
16 use Encode::Plain; $Encode::Plain::utf8 = 1;
18 # ====================================================
20 # ====================================================
24 @EXPORT = qw(encoded_body answer_field message_field);
26 ################################
29 # Nachrichtentext in gueltiges
31 ################################
33 sub encoded_body
($;$) {
34 my $posting = ${+shift};
37 $posting =~ s/[ \t]$//gm; # Whitespaces am Zeilenende entfernen
38 $posting =~s
/\s+$//; # Whitespaces am Stringende entfernen
39 $posting = ${plain
(\
$posting)}; # Sonderzeichen maskieren
41 # Quotingzeichen normalisieren (\177)
42 my $quote = plain
($params -> {quoteChars
});
43 my $qquote = quotemeta $quote;
44 my $len = length ($quote);
45 $posting =~ s!^((?:$qquote)+)(.*)$!"\177" x (length($1)/$len) .$2!gem if (length ($qquote));
48 $posting = ${multiline
(\
$posting)};
51 $posting =~ s
{\
[link:\s
*
52 ((?
:ftp
:// # hier beginnt $1
63 | \
.\
.?
/ # relativ auf dem server
64 | / # absolut auf dem server
65 | (?
:[a
-zA
-Z
.\d
]+)?
\??
# im forum
66 ) [^\s
<'()\[\]]+ # auf jeden Fall kein \s und kein ] etc.
67 ) # hier ist $1 zuende
68 \s*(?:\]|(\s|\(|\)|<br>)) # der Begrenzer (\s, ] oder Zeilenende)
70 {<a href="$1">$1</a>$2}gix; # und der Link
72 # javascript-links extra
73 my $klammer1='\
((?
:[^)])*\
)';
74 my $klammer2="\\((?:$klammer1|(?:[^)])*)\\)";
75 my $klammer3="\\((?:$klammer2|(?:[^)])*)\\)";
76 my $klammer4="\\((?:$klammer3|(?:[^)])*)\\)";
78 $posting =~ s{\[link:\s*
79 (javascript: # hier beginnt $1
81 $klammer4 # Klammern bis Verschachtelungstiefe 4 (sollte reichen?)
82 | '[^\'\\]*(?
:\\.[^\'\\]*)*' # mit ' quotierter String
, J
.F
. sei gedankt
83 # im String sind Escapes zugelassen (also auch \')
84 # damit werden (korrekt gesetzte) Javascript-Links moeglich
85 | [^\s
<()'\]]+)+ # auf jeden Fall kein \s und kein ] (ausser im String)
86 ) # hier ist $1 zuende
87 \s*(?:\s|\]|(\(|\)|<br>)) # der Begrenzer (\s, ] oder Zeilenende)
89 {<a href="$1">$1</a>$2}gix; # und der Link
92 $posting =~ s{\[image:\s*
94 | \.\.?/ # relativ auf dem server
95 | / # absolut auf dem server
96 | (?:[a-zA-Z.\d]+)?\?? # im forum
97 ) [^\s<'()\
[\
]]+ # auf jeden Fall kein \s und kein ] etc.
98 ) # hier ist $1 zuende
99 \s
*(?
:\
]|(\s
|\
(|\
)|<br
>)) # der Begrenzer (\s, ] oder Zeilenende)
101 {<img src
="$1" border
=0 alt
="">$2}gix
; # und das Bild
104 $posting =~ s
{\
[iframe
:\s
*
116 | \
.\
.?
/ # relativ auf dem server
117 | / # absolut auf dem server
118 | [a
-zA
-Z\d
]+(?
:\
.html?
|/) # im forum (koennen eh nur threads oder verweise
119 # auf tiefere verzeichnisse sein)
120 )[^\s
<'()\]]+ # auf jeden Fall kein \s und kein ] etc. (s.o.)
121 ) # hier ist $1 zuende
122 \s*(?:\]|(\s|\(|\)|<br>)) # der Begrenzer (\s, ] oder Zeilenende)
124 {<iframe src="$1" width="90%" height="90%"><a href="$1">$1</a></iframe>$2}gix;
127 $params -> {messages} = {} unless (defined $params -> {messages});
128 my %msg = %{$params -> {messages}};
129 foreach (keys %msg) {
130 $posting =~ s/\[msg:\s*$_(?:\s*\]|\s)/'<img src="'.$msg{$_} -> {src}.'" width='.$msg{$_}->{width}.' height='.$msg{$_}->{height}.' border=0 alt="'.plain($msg{$_}->{alt}).'">'/gei;}
136 ################################
139 # Antwort HTML einer Message
141 ################################
143 sub answer_field ($$) {
146 $params = {} unless (defined $params);
151 my $area = $$posting;
153 my $qchar = $params -> {quoteChars};
155 $area =~ s/(?:^|(<br>))(?!<br>)/$1\177/g if ($params -> {quoteArea}); # Antwortfeld quoten?!
156 $area =~ s/\177/$qchar/g; # normalisierte Quotes jedenfalls in Chars umsetzen
158 # HTML-Zeug zurueckuebersetzen
160 $params -> {messages} = {} unless (defined $params -> {messages}); # um Fehlermeldungen auszuschliessen...
161 my %msg = map {($params -> {messages} -> {$_} -> {src} => $_)} keys %{$params -> {messages}};
163 $area =~ s{<iframe\s+src="([^"]*)"[^>]+>.*?</iframe>|<img\s+src="([^"]*)"\s+width[^>]+>|<img src="([^"]*)"[^>]*>|<a href="([^"]*)">.*?</a>}
164 {if (defined $1) {"[iframe: $1]"}
165 elsif (defined $2) {"[msg: $msg{$2}]"}
166 elsif (defined $3) {"[image: $3]"}
167 elsif (defined $4) {"[link: $4]"}}eg;
168 $area =~ s/<br>/\n/g;
169 $area =~ s/&(?:#160|nbsp);/ /g;
175 ################################
178 # HTML eines Postingtextes
180 ################################
182 sub message_field ($$) {
183 my $posting = ${+shift};
185 $params = {} unless (defined $params);
190 my $qchar = $params -> {quoteChars};
192 if ($params -> {quoting}) { # Quotes bekommen eine extra Klasse?
193 # ueberfluessige Abstaende entfernen,
194 # sie werden eh wieder auseinandergezogen...
195 $posting =~ s/(\177(?:[^<]|<(?!br>))*<br>)<br>(?=\177)/$1/g;
196 $posting =~ s/(\177(?:[^<]|<(?!br>))*<br>)<br>(?!\177)/$1/g;
198 my ($last_level, $level, $line, $q, @new)=(-1,0);
200 foreach $line (split (/<br>/,$posting)) { # Zeilenweise gucken,
201 ($q) = ($line =~ /^(\177+)/g); # wieviele
202 $level = length ($q); # Quotingchars am Anfang stehen
203 if ($level != $last_level) { # wenn sich was verandert...
206 if ($last_level <= 0 and $level > 0) {$last_level = $level; $line='<br
>'.$params -> {startCite} . $line}
207 elsif ($level > 0) {$last_level = $level; $line=$params -> {endCite} . '<br
>' . $params -> {startCite} . $line}
208 elsif ($level == 0 and $last_level > 0) {$last_level = -1; $line = $params -> {endCite} . '<br
>' . $line}}
212 $new[0] =~ s/^<br>//;
213 $posting = (join '<br
>',@new) . (($last_level > 0)?$params -> {endCite}:'');}
215 $posting =~ s/\177/$qchar/g; # normalisierte Quotes in Chars umsetzen
222 # ====================================================
223 # Modulinitialisierung
224 # ====================================================
226 # making require happy
229 # ====================================================
230 # end of Encode::Posting
231 # ====================================================
patrick-canterino.de