--- /dev/null
+# Encode/Plain.pm
+
+# ====================================================
+# Autor: n.d.p. / 2001-01-07
+# lm : n.d.p. / 2001-02-06
+# ====================================================
+# Funktion:
+# Codierung von non-ASCII-Zeichen fuer
+# HTML
+# ====================================================
+
+use strict;
+
+package Encode::Plain;
+
+require 5.6.0;
+
+use vars qw(@ISA @EXPORT %sonder %unimap $utf8);
+
+# ====================================================
+# Funktionsexport
+# ====================================================
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(plain multiline toUTF8);
+
+################################
+# sub plain
+#
+# einfache Sonderzeichen ->
+# Entity-Codierung
+################################
+
+sub plain ($;$) {
+ my ($old,$ref)=@_;
+ my $exreg;
+
+ return \'' unless (defined $old);
+
+ my $new=(ref ($old))?$$old:$old;;
+ $ref=($ref or {});
+
+ # Ausnahmen
+ my $except=exists($ref->{-except});
+ if ($except) {
+
+ # Referenz, also Liste uebergeben -> umwandeln in Regex
+ if (ref ($ref -> {-except})) {
+ $exreg = join ('|',map {quotemeta $_} @{$ref -> {-except}});}
+
+ # keine Referenz, also Regex angegeben
+ else {
+ $exreg = $ref -> {-except};
+ $exreg =~ s/\//\\\//g;}} # LTS :-)
+
+ if (lc($ref->{-amp}) eq 'soft') {
+
+ if ($except) {
+ $new=~s/($exreg)|(?:\&(?!(?:#[Xx][\da-fA-F]+|#\d+|[a-zA-Z]+);))/(length($1))?$1:'&'/eg;}
+
+ else {
+ $new=~s/\&(?!(?:#[Xx][\da-fA-F]+|#\d+|[a-zA-Z]+);)/&/g;}}
+
+ elsif (lc($ref->{-amp}) ne 'no') {
+
+ if ($except) {
+ $new=~s/($exreg)|\&/(length($1))?$1:'&'/eg;}
+
+ else {
+ $new=~s/\&/&/g;}}
+
+ # Weitere Zeichen
+ if ($except) {
+ $new =~ s/($exreg)|</(length($1))?$1:'<'/eg; # HTML ausschalten
+ $new =~ s/($exreg)|>/(length($1))?$1:'>'/eg;
+ $new =~ s/($exreg)|\|/(length($1))?$1:'|'/eg; # nich wahr
+ $new =~ s/($exreg)|"/(length($1))?$1:'"'/eg; # Diese Zeile wird den Bannerklickern
+ # zu schaffen machen, sowas aber auch...
+
+ # Der grosse Hash
+ if ($utf8 or $ref -> {-utf8}) {
+ my $x;
+ $new =~ s/($exreg)|([\300-\337][\200-\277]|[\340-\357][\200-\277][\200-\277])/
+ length($1)?$1:(exists($unimap{$x = unpack('U',$2)})?$unimap{$x}:"&#$x;")/eg;}
+
+ $new =~ s/($exreg)|([\177-\377])/(length($1))?$1:$sonder{$2}/eg;}
+
+ else {
+ $new =~ s/</</g;
+ $new =~ s/>/>/g;
+ $new =~ s/\|/|/g;
+ $new =~ s/"/"/g;
+
+ # Der grosse Hash
+ if ($utf8 or $ref -> {-utf8}) {
+ my $x;
+ $new =~ s/([\300-\337][\200-\277]|[\340-\357][\200-\277][\200-\277])/
+ exists($unimap{$x = unpack('U',$1)})?$unimap{$x}:"&#$x;"/eg;}
+
+ $new =~ s/([\177-\377])/$sonder{$1}/g;}
+
+ # Zeichen <= 31
+ $new=~s/([\001-\010\013\014\016-\037])/'&#'.ord($1).';'/eg;
+ $new=~s/\000/ /g;
+
+ # Rueckgabe
+ ref($old)?\$new:$new;
+}
+
+################################
+# sub multiline
+#
+# Whitespacecodierung
+# fuer Leerzeilen
+################################
+
+sub multiline {
+ my $old=shift;
+ my $string=(ref ($old))?$$old:$old;
+
+ # Zeilenumbrueche normalisieren
+ $string=~s/\015\012|\015|\012/\n/g;
+
+ # Zeilenumbrueche in <br> umwandeln
+ $string=~s/\n/<br>/g;
+
+ # mehr als ein aufeinanderfolgendes
+ # Leerzeichen in feste Leerzeichen umwandeln
+ $string=~s/(\s\s+)/(' ' x (length($1)-1)) . ' '/eg;
+
+ # Leerzeichen nach einem <br> in feste
+ # Spaces umwandeln
+ $string=~s/(?:^|(<br>))\s/$1 /g;
+
+ # Rueckgabe
+ \$string;
+}
+
+sub toUTF8 ($) {
+ my $ref = shift;
+ my $string = ref($ref)?$$ref:$ref;
+ no warnings 'utf8';
+
+ $string =~ tr/\x80-\xff//CU;
+
+ ref($ref)?\$string:$string;
+}
+
+# ====================================================
+# Modulinitialisierung
+# ====================================================
+
+BEGIN {
+ # Latin 1 + geraten
+ %sonder=("\177" => '', # Delete-Zeichen
+ "\200" => '€', # Euro-Zeichen
+ "\201" => 'ü', # ue - DOS-Zeichensatz
+ "\202" => '‚', # einfaches Anfuehrungszeichen unten
+ "\203" => 'ƒ', # forte
+ "\204" => '„', # doppelte Anfuehrungszeichen unten
+ "\205" => '…', # drei punkte
+ "\206" => '†', # dagger
+ "\207" => '‡', # Dagger
+ "\210" => 'ˆ', # circ
+ "\211" => '‰', # Promille
+ "\212" => 'Š', # so ein S mit Haken drueber :-)
+ "\213" => '‹', # lsaquo
+ "\214" => 'Œ', # OE (so verhakelt - daenisch?) wer weiss das schon
+ "\215" => 'ì', # Codepage 850;
+ "\216" => 'Ž', # Z mit Haken drueber (Latin Extended B)
+ "\217" => 'Å', # Codepage 850 (Win)
+ "\220" => 'ü', # ue - Mac-Zeichensatz
+ "\221" => "'", # einfache Anfuehrungszeichen oben
+ "\222" => "'", # dito
+ "\223" => '“', # doppelte Anfuehrungszeichen oben
+ "\224" => '“', # dito
+ "\225" => '•', # Bullet
+ "\226" => '-', # Bindestrich
+ "\227" => '-', # dito
+ "\230" => '˜', # tilde...?
+ "\231" => '™', # Trade-Mark
+ "\232" => 'š', # kleines s mit Haken drueber
+ "\233" => '›', # rsaquo;
+ "\234" => 'œ', # oe verhakelt
+ "\235" => 'Ø', # Codepage 850 (Win)
+ "\236" => '×', # Codepage 850 (Win)
+ "\237" => 'Ÿ', # Y mit Punkten drueber
+ "\240" => ' ', # nbsp;
+ "\241" => '¡', # umgedrehtes !
+ "\242" => '¢', # cent-Zeichen
+ "\243" => '£', # (engl.)Pfund-Zeichen
+ "\244" => '¤', # Waehrungszeichen
+ "\245" => '¥', # Yen halt :-)
+ "\246" => '¦', # eigentlich soll es wohl ein | sein .-)
+ "\247" => '§', # Paragraph
+ "\250" => '¨', # zwei Punkte oben
+ "\251" => '©', # (C)
+ "\252" => 'ª', # hochgestelltes unterstrichenes a
+ "\253" => '«', # left-pointing double angle quotation mark (besser koennte ichs auch nicht beschreiben...)
+ "\254" => '¬', # Negationszeichen
+ "\255" => '-', # Bindestrich
+ "\256" => '®', # (R)
+ "\257" => 'ß', # sz, was auch immer fuern Zeichensatz (DOS?)
+ "\260" => '°', # Grad-Zeichen
+ "\261" => '±', # Plusminus
+ "\262" => '²', # hoch 2
+ "\263" => '³', # hoch 3
+ "\264" => '‚', # einf. anfuehrungszeichen unten
+ "\265" => 'µ', # my-Zeichen (griech)
+ "\266" => '¶', # Absatzzeichen
+ "\267" => '·', # Mal-Zeichen
+ "\270" => '¸',
+ "\271" => '¹', # hoch 1
+ "\272" => 'º', # masculine ordinal indicator (spanish)
+ "\273" => '»', # right-pointing double angle quotation mark
+ "\274" => '¼', # 1/4
+ "\275" => '½', # 1/2
+ "\276" => '¾', # 3/4
+ "\277" => '¿', # umgedrehtes ?
+ "\300" => 'À',
+ "\301" => 'Á',
+ "\302" => 'Â',
+ "\303" => 'Ã',
+ "\304" => 'Ä',
+ "\305" => 'Å',
+ "\306" => 'Æ',
+ "\307" => 'Ç',
+ "\310" => 'È',
+ "\311" => 'É',
+ "\312" => 'Ê',
+ "\313" => 'Ë',
+ "\314" => 'Ì',
+ "\315" => 'Í',
+ "\316" => 'Î',
+ "\317" => 'Ï',
+ "\320" => 'Ð', # keine Ahnung, was das wohl sein soll, auf jeden Fall was islaendisches...
+ "\321" => 'Ñ',
+ "\322" => 'Ò',
+ "\323" => 'Ó',
+ "\324" => 'Ô',
+ "\325" => 'Õ',
+ "\326" => 'Ö',
+ "\327" => '×', # eigentlich × funzt afaik aber nicht aufm Mac (ob das hier funktioniert, weiss ich nicht)
+ "\330" => 'Ø',
+ "\331" => 'Ù',
+ "\332" => 'Ú',
+ "\333" => 'Û',
+ "\334" => 'Ü',
+ "\335" => 'Ý',
+ "\336" => 'Þ',
+ "\337" => 'ß',
+ "\340" => 'à',
+ "\341" => 'á',
+ "\342" => 'â',
+ "\343" => 'ã',
+ "\344" => 'ä',
+ "\345" => 'å',
+ "\346" => 'æ',
+ "\347" => 'ç',
+ "\350" => 'è',
+ "\351" => 'é',
+ "\352" => 'ê',
+ "\353" => 'ë',
+ "\354" => 'ì',
+ "\355" => 'í',
+ "\356" => 'î',
+ "\357" => 'ï',
+ "\360" => 'ð',
+ "\361" => 'ñ',
+ "\362" => 'ò',
+ "\363" => 'ó',
+ "\364" => 'ô',
+ "\365" => 'õ',
+ "\366" => 'ö',
+ "\367" => '÷',
+ "\370" => 'ø',
+ "\371" => 'ù',
+ "\372" => 'ú',
+ "\373" => 'û',
+ "\374" => 'ü',
+ "\375" => 'ý',
+ "\376" => 'þ',
+ "\377" => 'ÿ');
+
+ # Unicode-Mapping
+ %unimap=(128 => '€',
+ 129 => 'ü',
+ 130 => '‚',
+ 131 => 'ƒ',
+ 132 => '„',
+ 133 => '…',
+ 134 => '†',
+ 135 => '‡',
+ 136 => 'ˆ',
+ 137 => '‰',
+ 138 => 'Š',
+ 139 => '‹',
+ 140 => 'Œ',
+ 141 => 'ì',
+ 142 => 'Ž',
+ 143 => 'Å',
+ 144 => 'ü',
+ 145 => "'",
+ 146 => "'",
+ 147 => '“',
+ 148 => '“',
+ 149 => '•',
+ 150 => '-',
+ 151 => '-',
+ 152 => '˜',
+ 153 => '™',
+ 154 => 'š',
+ 155 => '›',
+ 156 => 'œ',
+ 157 => 'Ø',
+ 158 => '×',
+ 159 => 'Ÿ',
+ 160 => ' ',
+ 163 => '£',
+ 165 => '¥',
+ 167 => '§',
+ 169 => '©',
+ 171 => '«',
+ 173 => '-',
+ 174 => '®',
+ 175 => 'ß',
+ 180 => '‚',
+ 184 => '¸',
+ 185 => '¹',
+ 187 => '»',
+ 192 => 'À',
+ 193 => 'Á',
+ 194 => 'Â',
+ 195 => 'Ã',
+ 196 => 'Ä',
+ 197 => 'Å',
+ 198 => 'Æ',
+ 199 => 'Ç',
+ 200 => 'È',
+ 201 => 'É',
+ 202 => 'Ê',
+ 203 => 'Ë',
+ 204 => 'Ì',
+ 205 => 'Í',
+ 206 => 'Î',
+ 207 => 'Ï',
+ 208 => 'Ð',
+ 209 => 'Ñ',
+ 210 => 'Ò',
+ 211 => 'Ó',
+ 212 => 'Ô',
+ 213 => 'Õ',
+ 214 => 'Ö',
+ 216 => 'Ø',
+ 217 => 'Ù',
+ 218 => 'Ú',
+ 219 => 'Û',
+ 220 => 'Ü',
+ 221 => 'Ý',
+ 222 => 'Þ',
+ 223 => 'ß',
+ 224 => 'à',
+ 225 => 'á',
+ 226 => 'â',
+ 227 => 'ã',
+ 228 => 'ä',
+ 229 => 'å',
+ 230 => 'æ',
+ 231 => 'ç',
+ 232 => 'è',
+ 233 => 'é',
+ 234 => 'ê',
+ 235 => 'ë',
+ 236 => 'ì',
+ 237 => 'í',
+ 238 => 'î',
+ 239 => 'ï',
+ 240 => 'ð',
+ 241 => 'ñ',
+ 242 => 'ò',
+ 243 => 'ó',
+ 244 => 'ô',
+ 245 => 'õ',
+ 246 => 'ö',
+ 247 => '÷',
+ 248 => 'ø',
+ 249 => 'ù',
+ 250 => 'ú',
+ 251 => 'û',
+ 252 => 'ü',
+ 253 => 'ý',
+ 254 => 'þ',
+ 255 => 'ÿ');
+}
+
+# making require happy
+1;
+
+# ====================================================
+# end of Encode::Plain
+# ====================================================
\ No newline at end of file