]>
git.p6c8.net - selfforum.git/blob - selfforum-cgi/shared/Encode/Plain.pm
cf7ef0645c8e96ecda0f8d4b8c557417bf28f9b5
3 # ====================================================
4 # Autor: n.d.p. / 2001-01-07
5 # lm : n.d.p. / 2001-02-06
6 # ====================================================
8 # Codierung von non-ASCII-Zeichen fuer
10 # ====================================================
14 package Encode
::Plain
;
18 use vars
qw(@ISA @EXPORT %sonder %unimap $utf8);
20 # ====================================================
22 # ====================================================
26 @EXPORT = qw(plain multiline toUTF8);
28 ################################
31 # einfache Sonderzeichen ->
33 ################################
39 return \'' unless (defined $old);
41 my $new=(ref ($old))?$$old:$old;;
45 my $except=exists($ref->{-except});
48 # Referenz, also Liste uebergeben -> umwandeln in Regex
49 if (ref ($ref -> {-except})) {
50 $exreg = join ('|',map {quotemeta $_} @{$ref -> {-except}});}
52 # keine Referenz, also Regex angegeben
54 $exreg = $ref -> {-except};
55 $exreg =~ s/\//\\\//g;}} # LTS :-)
57 if (lc($ref->{-amp}) eq 'soft
') {
60 $new=~s/($exreg)|(?:\&(?!(?:#[Xx][\da-fA-F]+|#\d+|[a-zA-Z]+);))/(length($1))?$1:'&'/eg;}
63 $new=~s/\&(?!(?:#[Xx][\da-fA-F]+|#\d+|[a-zA-Z]+);)/&/g;}}
65 elsif (lc($ref->{-amp}) ne 'no') {
68 $new=~s/($exreg)|\&/(length($1))?$1:'&'/eg;}
75 $new =~ s/($exreg)|</(length($1))?$1:'<'/eg; # HTML ausschalten
76 $new =~ s/($exreg)|>/(length($1))?$1:'>'/eg;
77 $new =~ s/($exreg)|\|/(length($1))?$1:'|'/eg; # nich wahr
78 $new =~ s/($exreg)|"/(length($1))?$1:'"'/eg; # Diese Zeile wird den Bannerklickern
79 # zu schaffen machen, sowas aber auch...
82 if ($utf8 or $ref -> {-utf8}) {
84 $new =~ s/($exreg)|([\300-\337][\200-\277]|[\340-\357][\200-\277][\200-\277])/
85 length($1)?$1:(exists($unimap{$x = unpack('U
',$2)})?$unimap{$x}:"&#$x;")/eg;}
87 $new =~ s/($exreg)|([\177-\377])/(length($1))?$1:$sonder{$2}/eg;}
92 $new =~ s/\|/|/g;
96 if ($utf8 or $ref -> {-utf8}) {
98 $new =~ s/([\300-\337][\200-\277]|[\340-\357][\200-\277][\200-\277])/
99 exists($unimap{$x = unpack('U
',$1)})?$unimap{$x}:"&#$x;"/eg;}
101 $new =~ s/([\177-\377])/$sonder{$1}/g;}
104 $new=~s/([\001-\010\013\014\016-\037])/'&#'.ord($1).';'/eg;
108 ref($old)?\$new:$new;
111 ################################
114 # Whitespacecodierung
116 ################################
120 my $string=(ref ($old))?$$old:$old;
122 # Zeilenumbrueche normalisieren
123 $string=~s/\015\012|\015|\012/\n/g;
125 # Zeilenumbrueche in <br> umwandeln
126 $string=~s/\n/<br>/g;
128 # mehr als ein aufeinanderfolgendes
129 # Leerzeichen in feste Leerzeichen umwandeln
130 $string=~s/(\s\s+)/(' ' x (length($1)-1)) . ' '/eg;
132 # Leerzeichen nach einem <br> in feste
134 $string=~s/(?:^|(<br>))\s/$1 /g;
142 my $string = ref($ref)?$$ref:$ref;
145 $string =~ tr/\x80-\xff//CU;
147 ref($ref)?\$string:$string;
150 # ====================================================
151 # Modulinitialisierung
152 # ====================================================
156 %sonder=("\177" => '', # Delete-Zeichen
157 "\200" => '€', # Euro-Zeichen
158 "\201" => 'ü', # ue - DOS-Zeichensatz
159 "\202" => '‚', # einfaches Anfuehrungszeichen unten
160 "\203" => 'ƒ', # forte
161 "\204" => '„', # doppelte Anfuehrungszeichen unten
162 "\205" => '…', # drei punkte
163 "\206" => '†', # dagger
164 "\207" => '‡', # Dagger
165 "\210" => 'ˆ', # circ
166 "\211" => '‰', # Promille
167 "\212" => 'Š', # so ein S mit Haken drueber :-)
168 "\213" => '‹', # lsaquo
169 "\214" => 'Œ', # OE (so verhakelt - daenisch?) wer weiss das schon
170 "\215" => 'ì', # Codepage 850;
171 "\216" => 'Ž', # Z mit Haken drueber (Latin Extended B)
172 "\217" => 'Å', # Codepage 850 (Win)
173 "\220" => 'ü', # ue - Mac-Zeichensatz
174 "\221" => "'", # einfache Anfuehrungszeichen oben
175 "\222" => "'", # dito
176 "\223" => '“', # doppelte Anfuehrungszeichen oben
177 "\224" => '“', # dito
178 "\225" => '•', # Bullet
179 "\226" => '-', # Bindestrich
180 "\227" => '-', # dito
181 "\230" => '˜', # tilde...?
182 "\231" => '™', # Trade-Mark
183 "\232" => 'š', # kleines s mit Haken drueber
184 "\233" => '›', # rsaquo;
185 "\234" => 'œ', # oe verhakelt
186 "\235" => 'Ø', # Codepage 850 (Win)
187 "\236" => '×', # Codepage 850 (Win)
188 "\237" => 'Ÿ', # Y mit Punkten drueber
189 "\240" => ' ', # nbsp;
190 "\241" => '¡', # umgedrehtes !
191 "\242" => '¢', # cent-Zeichen
192 "\243" => '£', # (engl.)Pfund-Zeichen
193 "\244" => '¤', # Waehrungszeichen
194 "\245" => '¥', # Yen halt :-)
195 "\246" => '¦', # eigentlich soll es wohl ein | sein .-)
196 "\247" => '§', # Paragraph
197 "\250" => '¨', # zwei Punkte oben
198 "\251" => '©', # (C)
199 "\252" => 'ª', # hochgestelltes unterstrichenes a
200 "\253" => '«', # left-pointing double angle quotation mark (besser koennte ichs auch nicht beschreiben...)
201 "\254" => '¬', # Negationszeichen
202 "\255" => '-', # Bindestrich
203 "\256" => '®', # (R)
204 "\257" => 'ß', # sz, was auch immer fuern Zeichensatz (DOS?)
205 "\260" => '°', # Grad-Zeichen
206 "\261" => '±', # Plusminus
207 "\262" => '²', # hoch 2
208 "\263" => '³', # hoch 3
209 "\264" => '‚', # einf. anfuehrungszeichen unten
210 "\265" => 'µ', # my-Zeichen (griech)
211 "\266" => '¶', # Absatzzeichen
212 "\267" => '·', # Mal-Zeichen
214 "\271" => '¹', # hoch 1
215 "\272" => 'º', # masculine ordinal indicator (spanish)
216 "\273" => '»', # right-pointing double angle quotation mark
217 "\274" => '¼', # 1/4
218 "\275" => '½', # 1/2
219 "\276" => '¾', # 3/4
220 "\277" => '¿', # umgedrehtes ?
221 "\300" => 'À',
222 "\301" => 'Á',
224 "\303" => 'Ã',
228 "\307" => 'Ç',
229 "\310" => 'È',
230 "\311" => 'É',
233 "\314" => 'Ì',
234 "\315" => 'Í',
237 "\320" => 'Ð', # keine Ahnung, was das wohl sein soll, auf jeden Fall was islaendisches...
238 "\321" => 'Ñ',
239 "\322" => 'Ò',
240 "\323" => 'Ó',
242 "\325" => 'Õ',
244 "\327" => '×', # eigentlich × funzt afaik aber nicht aufm Mac (ob das hier funktioniert, weiss ich nicht)
245 "\330" => 'Ø',
246 "\331" => 'Ù',
247 "\332" => 'Ú',
250 "\335" => 'Ý',
253 "\340" => 'à',
254 "\341" => 'á',
256 "\343" => 'ã',
260 "\347" => 'ç',
261 "\350" => 'è',
262 "\351" => 'é',
265 "\354" => 'ì',
266 "\355" => 'í',
270 "\361" => 'ñ',
271 "\362" => 'ò',
272 "\363" => 'ó',
274 "\365" => 'õ',
276 "\367" => '÷',
277 "\370" => 'ø',
278 "\371" => 'ù',
279 "\372" => 'ú',
282 "\375" => 'ý',
287 %unimap=(128 => '€',
397 # making require happy
400 # ====================================================
401 # end of Encode::Plain
402 # ====================================================
patrick-canterino.de