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