#!/usr/bin/perl
#
# rmligs 0.87 - ligature corrector for German LaTeX documents
# Copyright (C) 1999-2012 Bjrn Jacke <bjoern@j3e.de>
#
# This program comes with ABSOLUTELY NO WARRANTY; it may be copied or modified
# under the terms of the GNU General Public License version 2 or 3 as
# published by the Free Software Foundation.
#
# Please send bug reports, missing words and suggestions to bjoern@j3e.de
###############################################################################
#
# rmligs is a program for removing incorrectly used ligatures from
# LaTeX documents. This version is intended for German language texts only.
# The wordlist data is taken from the igerman98 dictionary available on
# http://www.j3e.de/ispell/igerman98/ .
# Up-to-date versions of rmligs can be found on CTAN
#
######################################################################
#
#  Usage:
#       rmligs [options] FILE(s) ...
#
#  -f, --filter       filter mode for streaming
#  -t, --test         test mode (read-only)
#  -i, --interactive  prompt before applying changes
#  -q, --quiet        be quite quiet
#
##############################################################

use Getopt::Long;
Getopt::Long::Configure ("bundling");

$debug = 0;
$outerr = STDERR;
$outmesg = STDOUT;

GetOptions('f'=>\$opt_f, 'filter'=>\$opt_f, '' => \$opt_f, 't'=>\$opt_t, 'test'=>\$opt_t, 'q'=>\$opt_q, 'quiet'=>\$opt_q, 'i'=>\$opt_i, 'interactive'=>\$opt_i) or printusage();
if ((($opt_f) and ((@ARGV) or ($opt_t) or ($opt_i)))
		or (($opt_t) and ($opt_q)) ) {
	print $outerr "\nIllegal combination of options!\n";
	exit 1;
}

if ($opt_q) {$outmesg = NUL;}


if (@ARGV) {
	printcopyright();
	buildlighash();
	
	for (@ARGV) {
		$oldfile = $_;
		open(OLDFILE, "< $oldfile") or print $outerr "Can't open $oldfile: $!\n\n" and next;
		$infile = OLDFILE;
		unless ($opt_t) {
			$newfile = "$_.tmp";
			$bakfile = "$_.bak";
			open(NEWFILE, "> $newfile") or die "Can't open $newfile: $!\n\n";
			$outfile = NEWFILE;
		}

		$corrlines = $linenumber = $jobs = 0;
		processfile();
		print $outmesg " >>> $jobs corrections in $corrlines of $linenumber lines in $oldfile\n\n";
		
		close(OLDFILE) or print $outerr "Can't close $oldfile: $!\n\n";
		
		unless ($opt_t) {
			unless ($jobs == 0) {
				close(NEWFILE) or die "Can't close $newfile $!\n";
				rename($oldfile,$bakfile) or die "Can't rename $oldfile to $bakfile: $!\n" and next;
				rename($newfile,$oldfile) or die "Can't rename $newfile to $oldfile: $!\n" and next;
			}
			else {unlink($newfile);}
		}
		else {print $outmesg "NO file changes (running read-only mode)\n";}
	}
}
elsif ($opt_f) {
	buildlighash();
	$outmesg = NUL;
	$infile = STDIN;
	$outfile = STDOUT;
	processfile();
}
else { printusage(); }



###########################


sub printcopyright {
	print $outmesg <<END;

rmligs 0.87 - ligature corrector for German LaTeX documents
Copyright (C) 1999-2012 Bjoern Jacke <bjoern\@j3e.de>

This program comes with ABSOLUTELY NO WARRANTY; it may be copied or modified
under the terms of the GNU General Public License version 2 or 3 as
published by the Free Software Foundation.

Please send bug reports, missing words and suggestions to bjoern\@j3e.de

END
}

####
sub printusage {
	printcopyright();
	print $outmesg <<END;
USAGE:  rmligs [options] FILE(S) ...

  -f, --filter       filter mode for streaming
  -t, --test         test mode (read-only)
  -i, --interactive  prompt before applying changes
  -q, --quiet        be quite quiet

END
	exit 1
}

####
sub buildlighash {
	while (<DATA>) {
		chomp;
		s//ss/g; # we store "ss" in spite of "" -- also good for Swiss language
		s//ae/g;
		s//oe/g;
		s//ue/g;
		
		my $key=$_;
		$key =~ s/\|//g;
		$lighash{$key} = $_;
	}
}

####
sub processfile {
	while (<$infile>) {
		++$linenumber;
		$linecorrected = 0;
		for $word (m/[\\]*[\"a-z\303\244\204\266\274\234\237]*f[fil][\"a-z\303\244\204\266\274\234\237]*/gi) {
			getlig();    # get our ligword ... if existing
			if (defined $ligword and &check_interactive) {
				changeword();
				s/([^a-zA-Z\303\244\204\266\274\234\237\\]|^)\Q$word/$1$newword/g;
				print $outmesg "line $linenumber: $word => $newword\n";  # let's be verbose!
				++$jobs;
				$linecorrected = 1;
			}
		}
		print $outfile $_ unless $opt_t;
		$corrlines += $linecorrected;
	}
}

####
sub getlig {
	print "XXX checking $word\n" if ($debug);
	my $compword = $word;
	$compword =~ s/^(\\\\)*//;  # \\ as newline is allowed; \bla is a command!
	                            # We remove all 2*n \'s from beginning
	$compword =~ s/(\303\244|\303\204)/ae/g;
	$compword =~ s/(\303\266|\303\226)/oe/g;
	$compword =~ s/(\303\274|\303\234)/ue/g;
	$compword =~ s/(\303\237)/ss/g;
	$compword =~ tr [A-Z] [a-z];
	$compword =~ s/(\"a|)/ae/g;
	$compword =~ s/(\"o|)/oe/g;
	$compword =~ s/(\"u|)/ue/g;
	$compword =~ s/(\"[sz]|)/ss/g;
	$compword =~ s/\"$//;  # we want a trailing "' to be possible!
	$ligword = $lighash{$compword};
}

####
sub changeword {
	my $pos = index($ligword,'|');
	my $runs = 0;
	my $cut_pos = 0;
	$newword = $word;
	# to make all characters as long as the ones of the lighash (2 - only chars count!):
	$newword =~ s//qq/g;    # "qq" as a placeholder for iso-8859-1/15 &szlig;
	$newword =~ s/"/"z/g;    # umlauts encoded like "o need to be 2 chars long, too!
	$newword =~ s//\"ae/g;  #
	$newword =~ s//\"AE/g;  #
	$newword =~ s//\"oe/g;  # "\"AE" etc. as placeholders fr iso8859-1/15 umlauts
	$newword =~ s//\"OE/g;  #
	$newword =~ s//\"ue/g;  #
	$newword =~ s//\"UE/g;  #
	# equivalent UTF-8 characters already are 2 bytes long ... nothing more to do.
	print "XXX changeword: $newword\n" if ($debug);
	do {
		my $left = my $right = $newword;
		  # delete all up to the first occurence of | in the ligword:
		$cutpos = $pos - $runs++;
		$right =~ s/^\\*([\|\"\ ]*[a-z\303\244\204\266\274\234\237]){$cutpos}//i;
		  # remember the rest of the word (left side):
		$left =~ s/($right)$//i;
		  # glue left & right with "| :
		$newword = "$left\"\|$right";
		  # get the next(?) non-ligature:
		$pos = index($ligword,'|',++$pos);
	} until ($pos == -1);
	$newword =~ s/qq//g;    # to get back our ""
	$newword =~ s/"z/"/g;    #
	$newword =~ s/\"ae//g;  #
	$newword =~ s/\"AE//g;  #
	$newword =~ s/\"oe//g;  # ... and other umlauts
	$newword =~ s/\"OE//g;  #
	$newword =~ s/\"ue//g;  #
	$newword =~ s/\"UE//g;  #
}

sub check_interactive {
	if (not $opt_i) { return 1; }
	my $a="";
	do {
		print STDOUT "Correct $word (l. $linenumber)? [y/n]";
		read STDIN, $a, 1;
		print "\n";
	} until ($a =~ m/[yn]/);
	return 1 if ($a eq "y");
}

__END__
ablauf|folge
ablauf|folgen
ablauf|fhig
ablauf|fhige
ablauf|fhigem
ablauf|fhigen
ablauf|fhiger
ablauf|fhiges
ablauf|fhigkeit
ablauf|fhigkeiten
ablauf|leitung
ablauf|leitungen
ablauf|liste
ablauf|listen
auf|fahrbar
auf|fahrbare
auf|fahrbarem
auf|fahrbaren
auf|fahrbarer
auf|fahrbares
auf|fahre
auf|fahren
auf|fahrend
auf|fahrende
auf|fahrendem
auf|fahrenden
auf|fahrender
auf|fahrendes
auf|fahrt
auf|fahrten
auf|fahrtsweg
auf|fahrunfall
auf|fahrunfalls
auf|fahrunflle
auf|fahrunfllen
auf|falle
auf|fallen
auf|fallend
auf|fallende
auf|fallendem
auf|fallenden
auf|fallender
auf|fallendere
auf|fallenderem
auf|fallenderen
auf|fallenderer
auf|fallenderes
auf|fallenderweise
auf|fallendes
auf|fallendst
auf|fallendste
auf|fallendstem
auf|fallendsten
auf|fallendster
auf|fallendstes
auf|fallt
auf|fand
auf|fanden
auf|fandest
auf|fandet
auf|fandst
auf|fangbar
auf|fangbare
auf|fangbarem
auf|fangbaren
auf|fangbarer
auf|fangbares
auf|fangbecken
auf|fangbeckens
auf|fange
auf|fangen
auf|fangend
auf|fangende
auf|fangendem
auf|fangenden
auf|fangender
auf|fangendes
auf|fanglager
auf|fanglagern
auf|fanglagers
auf|fangregister
auf|fangregistern
auf|fangregisters
auf|fangt
auf|fangvorrichtung
auf|fangvorrichtungen
auf|fangwanne
auf|fangwannen
auf|fangweiche
auf|fangweichen
auf|fassbar
auf|fassbare
auf|fassbarem
auf|fassbaren
auf|fassbarer
auf|fassbares
auf|fassbarkeit
auf|fassbarkeiten
auf|fasse
auf|fassen
auf|fassend
auf|fassende
auf|fassendem
auf|fassenden
auf|fassender
auf|fassendes
auf|fassens
auf|fassest
auf|fasst
auf|fasste
auf|fassten
auf|fasstest
auf|fasstet
auf|fassung
auf|fassungen
auf|fassungsgabe
auf|fassungsgaben
auf|fassungsvermgen
auf|fassungsvermgens
auf|fat
auf|fate
auf|faten
auf|fatest
auf|fatet
auf|fiel
auf|fiele
auf|fielen
auf|fielst
auf|fielt
auf|findbar
auf|findbare
auf|findbarem
auf|findbaren
auf|findbarer
auf|findbares
auf|findbarkeit
auf|findbarkeiten
auf|finde
auf|finden
auf|findend
auf|findende
auf|findendem
auf|findenden
auf|findender
auf|findendes
auf|findens
auf|findest
auf|findet
auf|findung
auf|findungen
auf|fing
auf|finge
auf|fingen
auf|fingst
auf|fingt
auf|fische
auf|fischen
auf|fischend
auf|fischende
auf|fischendem
auf|fischenden
auf|fischender
auf|fischendes
auf|fischest
auf|fischst
auf|fischt
auf|fischte
auf|fischten
auf|fischtest
auf|fischtet
auf|flackern
auf|flackerns
auf|flamme
auf|flammen
auf|flammend
auf|flammende
auf|flammendem
auf|flammenden
auf|flammender
auf|flammendes
auf|flammst
auf|flammt
auf|flammte
auf|flammten
auf|flammtest
auf|flammtet
auf|fliege
auf|fliegen
auf|fliegend
auf|fliegende
auf|fliegendem
auf|fliegenden
auf|fliegender
auf|fliegendes
auf|fliegst
auf|fliegt
auf|flog
auf|flogen
auf|flogst
auf|flogt
auf|flge
auf|flgen
auf|flgest
auf|flget
auf|fordere
auf|fordern
auf|fordernd
auf|fordernde
auf|forderndem
auf|fordernden
auf|fordernder
auf|forderndes
auf|forderns
auf|forderst
auf|fordert
auf|forderte
auf|forderten
auf|fordertest
auf|fordertet
auf|forderung
auf|forderungen
auf|fordre
auf|forstbar
auf|forstbare
auf|forstbarem
auf|forstbaren
auf|forstbarer
auf|forstbares
auf|forste
auf|forsten
auf|forstend
auf|forstende
auf|forstendem
auf|forstenden
auf|forstender
auf|forstendes
auf|forstens
auf|forstest
auf|forstet
auf|forstete
auf|forsteten
auf|forstetest
auf|forstetet
auf|forstung
auf|forstungen
auf|fra
auf|fraen
auf|fraest
auf|frat
auf|fresse
auf|fressen
auf|fressend
auf|fressende
auf|fressendem
auf|fressenden
auf|fressender
auf|fressendes
auf|fresst
auf|fret
auf|frischbar
auf|frischbare
auf|frischbarem
auf|frischbaren
auf|frischbarer
auf|frischbares
auf|frische
auf|frischen
auf|frischend
auf|frischende
auf|frischendem
auf|frischenden
auf|frischender
auf|frischendes
auf|frischens
auf|frischest
auf|frischst
auf|frischt
auf|frischte
auf|frischten
auf|frischtest
auf|frischtet
auf|frischung
auf|frischungen
auf|frisiere
auf|frisieren
auf|frisierend
auf|frisierende
auf|frisierendem
auf|frisierenden
auf|frisierender
auf|frisierendes
auf|frisierst
auf|frisiert
auf|frisierte
auf|frisiertem
auf|frisierten
auf|frisierter
auf|frisiertes
auf|frisiertest
auf|frisiertet
auf|frisst
auf|frit
auf|fre
auf|fren
auf|frest
auf|fret
auf|fuhr
auf|fuhren
auf|fuhrst
auf|fuhrt
auf|fcherbar
auf|fcherbare
auf|fcherbarem
auf|fcherbaren
auf|fcherbarer
auf|fcherbares
auf|fchere
auf|fchern
auf|fchernd
auf|fchernde
auf|fcherndem
auf|fchernden
auf|fchernder
auf|fcherndes
auf|fcherns
auf|fcherst
auf|fchert
auf|fcherte
auf|fcherten
auf|fchertest
auf|fchertet
auf|fcherung
auf|fcherungen
auf|fchre
auf|fdelbar
auf|fdelbare
auf|fdelbarem
auf|fdelbaren
auf|fdelbarer
auf|fdelbares
auf|fdele
auf|fdeln
auf|fdelnd
auf|fdelnde
auf|fdelndem
auf|fdelnden
auf|fdelnder
auf|fdelndes
auf|fdelst
auf|fdelt
auf|fdelte
auf|fdelten
auf|fdeltest
auf|fdeltet
auf|fdle
auf|fhrst
auf|fhrt
auf|fllig
auf|fllige
auf|flligem
auf|flligen
auf|flliger
auf|flligere
auf|flligerem
auf|flligeren
auf|flligerer
auf|flligeres
auf|flliges
auf|flligkeit
auf|flligkeiten
auf|flligst
auf|flligste
auf|flligstem
auf|flligsten
auf|flligster
auf|flligstes
auf|fllst
auf|fllt
auf|fngst
auf|fngt
auf|fhrbar
auf|fhrbare
auf|fhrbarem
auf|fhrbaren
auf|fhrbarer
auf|fhrbares
auf|fhre
auf|fhren
auf|fhrend
auf|fhrende
auf|fhrendem
auf|fhrenden
auf|fhrender
auf|fhrendes
auf|fhrens
auf|fhrst
auf|fhrt
auf|fhrte
auf|fhrten
auf|fhrtest
auf|fhrtet
auf|fhrung
auf|fhrungen
auf|fhrungsstatistik
auf|fhrungsstil
auf|fhrungsstile
auf|fhrungsstilen
auf|fhrungsstils
auf|fllbar
auf|fllbare
auf|fllbarem
auf|fllbaren
auf|fllbarer
auf|fllbares
auf|flle
auf|fllen
auf|fllend
auf|fllende
auf|fllendem
auf|fllenden
auf|fllender
auf|fllendes
auf|fllens
auf|fllst
auf|fllt
auf|fllte
auf|fllten
auf|flltest
auf|flltet
auf|fllung
auf|fllungen
auf|lache
auf|lachen
auf|lachend
auf|lachende
auf|lachendem
auf|lachenden
auf|lachender
auf|lachendes
auf|lachst
auf|lacht
auf|lachte
auf|lachten
auf|lachtest
auf|lachtet
auf|ladbar
auf|ladbare
auf|ladbarem
auf|ladbaren
auf|ladbarer
auf|ladbares
auf|lade
auf|laden
auf|ladend
auf|ladende
auf|ladendem
auf|ladenden
auf|ladender
auf|ladendes
auf|ladens
auf|lader
auf|laderin
auf|laderinnen
auf|ladern
auf|laders
auf|ladet
auf|ladevorgang
auf|ladevorgangs
auf|ladung
auf|ladungen
auf|lage
auf|lageflche
auf|lageflchen
auf|lagen
auf|lagenerhhung
auf|lagenerhhungen
auf|lagenstark
auf|lagenstarke
auf|lagenstarkem
auf|lagenstarken
auf|lagenstarker
auf|lagenstarkes
auf|lagenzahl
auf|lagenzahlen
auf|lagenziffer
auf|lagenziffern
auf|landig
auf|landige
auf|landigem
auf|landigen
auf|landiger
auf|landiges
auf|lasse
auf|lassen
auf|lassend
auf|lassende
auf|lassendem
auf|lassenden
auf|lassender
auf|lassendes
auf|lassens
auf|lasst
auf|lassung
auf|lassungen
auf|lauere
auf|lauern
auf|lauernd
auf|lauernde
auf|lauerndem
auf|lauernden
auf|lauernder
auf|lauerndes
auf|lauerst
auf|lauert
auf|lauerte
auf|lauerten
auf|lauertest
auf|lauertet
auf|lauf
auf|laufe
auf|laufen
auf|laufend
auf|laufende
auf|laufendem
auf|laufenden
auf|laufender
auf|laufendes
auf|laufs
auf|lauft
auf|lauf|form
auf|lauf|formen
auf|laure
auf|lat
auf|lebe
auf|leben
auf|lebend
auf|lebende
auf|lebendem
auf|lebenden
auf|lebender
auf|lebendes
auf|lebst
auf|lebt
auf|lebte
auf|lebten
auf|lebtest
auf|lebtet
auf|lege
auf|legen
auf|legend
auf|legende
auf|legendem
auf|legenden
auf|legender
auf|legendes
auf|legst
auf|legt
auf|legte
auf|legten
auf|legtest
auf|legtet
auf|lehne
auf|lehnen
auf|lehnend
auf|lehnende
auf|lehnendem
auf|lehnenden
auf|lehnender
auf|lehnendes
auf|lehnens
auf|lehnst
auf|lehnt
auf|lehnte
auf|lehnten
auf|lehntest
auf|lehntet
auf|lehnung
auf|lehnungen
auf|lese
auf|lesen
auf|lesend
auf|lesende
auf|lesendem
auf|lesenden
auf|lesender
auf|lesendes
auf|lest
auf|leuchte
auf|leuchten
auf|leuchtend
auf|leuchtende
auf|leuchtendem
auf|leuchtenden
auf|leuchtender
auf|leuchtendes
auf|leuchtest
auf|leuchtet
auf|leuchtete
auf|leuchteten
auf|leuchtetest
auf|leuchtetet
auf|liege
auf|liegen
auf|liegend
auf|liegende
auf|liegendem
auf|liegenden
auf|liegender
auf|liegendes
auf|liegeschema
auf|liegst
auf|liegt
auf|liee
auf|lieen
auf|lieest
auf|lieet
auf|listbar
auf|listbare
auf|listbarem
auf|listbaren
auf|listbarer
auf|listbares
auf|liste
auf|listen
auf|listend
auf|listende
auf|listendem
auf|listenden
auf|listender
auf|listendes
auf|listens
auf|listest
auf|listet
auf|listete
auf|listeten
auf|listetest
auf|listetet
auf|listung
auf|listungen
auf|lockere
auf|lockern
auf|lockernd
auf|lockernde
auf|lockerndem
auf|lockernden
auf|lockernder
auf|lockerndes
auf|lockerns
auf|lockerst
auf|lockert
auf|lockerte
auf|lockerten
auf|lockertest
auf|lockertet
auf|lockerung
auf|lockerungen
auf|lockerungstendenz
auf|lockerungstendenzen
auf|lockre
auf|lodere
auf|lodern
auf|lodernd
auf|lodernde
auf|loderndem
auf|lodernden
auf|lodernder
auf|loderndes
auf|loderns
auf|loderst
auf|lodert
auf|loderte
auf|loderten
auf|lodertest
auf|lodertet
auf|lodre
auf|ldst
auf|ldt
auf|lufe
auf|lufen
auf|lufst
auf|luft
auf|lsbar
auf|lsbare
auf|lsbarem
auf|lsbaren
auf|lsbarer
auf|lsbares
auf|lse
auf|lsen
auf|lsend
auf|lsende
auf|lsendem
auf|lsenden
auf|lsender
auf|lsendes
auf|lsens
auf|lsest
auf|lst
auf|lste
auf|lsten
auf|lstest
auf|lstet
auf|lsung
auf|lsungen
auf|lsungsbeschluss
auf|lsungsbeschlusses
auf|lsungsbeschlu
auf|lsungsbeschlsse
auf|lsungsbeschlssen
auf|lsungserscheinung
auf|lsungserscheinungen
auf|lsungsprozess
auf|lsungsprozesse
auf|lsungsprozessen
auf|lsungsproze
auf|lsungsvermgen
auf|lsungsvermgens
auf|lte
auf|lten
auf|ltend
auf|ltende
auf|ltendem
auf|ltenden
auf|ltender
auf|ltendes
auf|ltest
auf|ltet
auf|ltete
auf|lteten
auf|ltetest
auf|ltetet
auf|lde
auf|lden
auf|ldest
auf|ldet
autobahnauf|fahrt
bauauf|lage
bauauf|lagen
baustoff|industrie
baustoff|industrien
begreif|lich
begreif|liche
begreif|lichem
begreif|lichen
begreif|licher
begreif|lichere
begreif|licherem
begreif|licheren
begreif|licherer
begreif|licheres
begreif|licherweise
begreif|liches
begreif|lichst
begreif|lichste
begreif|lichstem
begreif|lichsten
begreif|lichster
begreif|lichstes
begriff|lich
begriff|liche
begriff|lichem
begriff|lichen
begriff|licher
begriff|liches
behilf|lich
behilf|liche
behilf|lichem
behilf|lichen
behilf|licher
behilf|liches
beruf|lich
beruf|liche
beruf|lichem
beruf|lichen
beruf|licher
beruf|liches
bettauf|lage
bettauf|lagen
bildschirmauf|lsung
bildschirmauf|lsungen
bischf|lich
bischf|liche
bischf|lichem
bischf|lichen
bischf|licher
bischf|liches
boxcalf|leder
boxcalf|leders
boxkalf|leder
boxkalf|leders
brief|lich
brief|liche
brief|lichem
brief|lichen
brief|licher
brief|liches
chef|flugleiter
chef|ideologe
dampf|leistung
dampf|lokomotiven
darauf|folge
darauf|folgen
darauf|folgend
darauf|folgende
darauf|folgendem
darauf|folgenden
darauf|folgender
darauf|folgendes
darauf|folgst
darauf|folgt
darauf|folgte
darauf|folgten
darauf|folgtest
darauf|folgtet
darstellungsauf|fassung
darstellungsauf|fassungen
drauf|lege
drauf|legen
drauf|legend
drauf|legende
drauf|legendem
drauf|legenden
drauf|legender
drauf|legendes
drauf|legst
drauf|legt
drauf|legte
drauf|legten
drauf|legtest
drauf|legtet
drauf|los
drauf|losgegangen
drauf|losgegangene
drauf|losgegangenem
drauf|losgegangenen
drauf|losgegangener
drauf|losgegangenes
drauf|losgehe
drauf|losgehen
drauf|losgehend
drauf|losgehende
drauf|losgehendem
drauf|losgehenden
drauf|losgehender
drauf|losgehendes
drauf|losgehst
drauf|losgeht
drauf|losging
drauf|losginge
drauf|losgingen
drauf|losgingst
drauf|losgingt
druckkopf|lebensdauer
drf|lich
drf|liche
drf|lichem
drf|lichen
drf|licher
drf|liches
dsenkampf|flugzeug
eingabeauf|forderung
einzelhandelskauf|leute
einzelhandelskauf|leuten
elf|fach
elf|fache
elf|fachem
elf|fachen
elf|facher
elf|faches
erstauf|fhrung
erstauf|lage
erstauf|lagen
erzbischf|lich
erzbischf|liche
erzbischf|lichem
erzbischf|lichen
erzbischf|licher
erzbischf|liches
freiberuf|ler
freiberuf|lerin
freiberuf|lerinnen
freiberuf|lern
freiberuf|lers
freiberuf|lich
freiberuf|liche
freiberuf|lichem
freiberuf|lichen
freiberuf|licher
freiberuf|liches
freilichtauf|fhrung
freilichtauf|fhrungen
fnf|fach
fnf|fache
fnf|fachem
fnf|fachen
fnf|facher
fnf|faches
fnf|fingerig
fnf|fingerige
fnf|fingerigem
fnf|fingerigen
fnf|fingeriger
fnf|fingeriges
fnf|fingrig
fnf|fingrige
fnf|fingrigem
fnf|fingrigen
fnf|fingriger
fnf|fingriges
fnf|linge
fnf|lingen
gastspielauf|fhrung
glimpf|lich
glimpf|liche
glimpf|lichem
glimpf|lichen
glimpf|licher
glimpf|liches
grafikauf|lsung
grafikauf|lsungen
grafikkartenauf|lsung
grafikkartenauf|lsungen
griff|fest
griff|feste
griff|festem
griff|festen
griff|fester
griff|festes
grundauf|fassung
grundauf|fassungen
handgreif|lich
handgreif|liche
handgreif|lichem
handgreif|lichen
handgreif|licher
handgreif|liches
handgreif|lichkeit
handgreif|lichkeiten
hauptberuf|lich
hauptberuf|liche
hauptberuf|lichem
hauptberuf|lichen
hauptberuf|licher
hauptberuf|liches
hilf|los
hilf|lose
hilf|losem
hilf|losen
hilf|loser
hilf|losere
hilf|loserem
hilf|loseren
hilf|loserer
hilf|loseres
hilf|loses
hilf|losest
hilf|loseste
hilf|losestem
hilf|losesten
hilf|losester
hilf|losestes
hinauf|fahre
hinauf|fahren
hinauf|fahrend
hinauf|fahrende
hinauf|fahrendem
hinauf|fahrenden
hinauf|fahrender
hinauf|fahrendes
hinauf|fahrt
hinauf|fuhr
hinauf|fuhren
hinauf|fuhrst
hinauf|fuhrt
hinauf|fhre
hinauf|fhren
hinauf|fhrend
hinauf|fhrende
hinauf|fhrendem
hinauf|fhrenden
hinauf|fhrender
hinauf|fhrendes
hinauf|fhrst
hinauf|fhrt
hinauf|fhrte
hinauf|fhrten
hinauf|fhrtest
hinauf|fhrtet
hochauf|lsend
hochauf|lsende
hochauf|lsendem
hochauf|lsenden
hochauf|lsender
hochauf|lsendes
hof|fhig
hof|fhige
hof|fhigem
hof|fhigen
hof|fhiger
hof|fhiges
hof|landwirtschaft
hof|leben
huf|lein
huf|leins
hf|lich
hf|liche
hf|lichem
hf|lichen
hf|licher
hf|lichere
hf|licherem
hf|licheren
hf|licherer
hf|licheres
hf|liches
hf|lichkeit
hf|lichkeiten
hf|lichkeitsbesuche
hf|lichkeitsbesuches
hf|lichkeitsformeln
hf|lichst
hf|lichste
hf|lichstem
hf|lichsten
hf|lichster
hf|lichstes
kampf|flieger
kampf|fliegers
kampf|flugzeug
kampf|flugzeuge
kampf|flugzeuges
kampf|front
kampf|fhig
kampf|fhige
kampf|fhigem
kampf|fhigen
kampf|fhiger
kampf|fhiges
kampf|fhigkeit
kampf|fhrung
kampf|lied
kampf|lieder
kampf|liedern
kampf|los
kampf|lose
kampf|losem
kampf|losen
kampf|loser
kampf|loses
kampf|lustig
kampf|lustige
kampf|lustigem
kampf|lustigen
kampf|lustiger
kampf|lustigere
kampf|lustigerem
kampf|lustigeren
kampf|lustigerer
kampf|lustigeres
kampf|lustiges
kampf|lustigst
kampf|lustigste
kampf|lustigstem
kampf|lustigsten
kampf|lustigster
kampf|lustigstes
kauf|fahrer
kauf|fahrerin
kauf|fahrerinnen
kauf|fahrern
kauf|fahrers
kauf|frau
kauf|frauen
kauf|interessenten
kauf|laden
kauf|ladens
kauf|leute
kauf|leuten
kauf|lust
kauf|lden
kettenstrf|ling
kettenstrf|linge
kettenstrf|lingen
kettenstrf|lings
kleiderstoff|industrie
kniff|lig
kniff|lige
kniff|ligem
kniff|ligen
kniff|liger
kniff|ligere
kniff|ligerem
kniff|ligeren
kniff|ligerer
kniff|ligeres
kniff|liges
kniff|ligst
kniff|ligste
kniff|ligstem
kniff|ligsten
kniff|ligster
kniff|ligstes
kontoauf|lsung
kopf|lastig
kopf|lastige
kopf|lastigem
kopf|lastigen
kopf|lastiger
kopf|lastiges
kopf|laus
kopf|leiste
kopf|los
kopf|lose
kopf|losem
kopf|losen
kopf|loser
kopf|losere
kopf|loserem
kopf|loseren
kopf|loserer
kopf|loseres
kopf|loses
kopf|losest
kopf|loseste
kopf|losestem
kopf|losesten
kopf|losester
kopf|losestes
kopf|luse
kopf|lusen
kreislauf|leiden
kunststoff|industrie
kuf|lich
kuf|liche
kuf|lichem
kuf|lichen
kuf|licher
kuf|liches
kuf|lichkeit
lagerauf|fllung
lagerauf|lsung
lauf|feuer
lauf|feuern
lauf|feuers
lauf|fhig
lauf|fhige
lauf|fhigem
lauf|fhigen
lauf|fhiger
lauf|fhiges
lauf|fhigkeit
lauf|index
lauf|indexe
lauf|indexen
lauf|indexes
lauf|indices
lauf|leine
lauf|leinen
lebensauf|fassung
lebensauf|fassungen
lff|ler
markgrf|lich
markgrf|liche
markgrf|lichem
markgrf|lichen
markgrf|licher
markgrf|liches
mindestreserveauf|lagen
monitorauf|lsung
monitorauf|lsungen
nebenberuf|lich
nebenberuf|liche
nebenberuf|lichem
nebenberuf|lichen
nebenberuf|licher
nebenberuf|liches
neuauf|lage
neuauf|lagen
off|line
opernauf|fhrung
opernauf|fhrungen
parlamentsauf|lsung
politikauf|fassung
politikauf|fassungen
produktionsauf|lagen
prf|feld
prf|ingenieur
prf|ling
prf|linge
prf|lingen
prf|lings
prf|liste
prf|listen
rauf|lustig
rauf|lustige
rauf|lustigem
rauf|lustigen
rauf|lustiger
rauf|lustiges
reichstagsauf|lsung
reif|lich
reif|liche
reif|lichem
reif|lichen
reif|licher
reif|lichere
reif|licherem
reif|licheren
reif|licherer
reif|licheres
reif|liches
reif|lichst
reif|lichste
reif|lichstem
reif|lichsten
reif|lichster
reif|lichstes
restauf|lage
restauf|lagen
rohstoff|indexe
sauerstoff|flasche
sauerstoff|flaschen
schaf|fell
schaf|felle
schaf|fellen
schaf|fells
schaf|leder
schaf|ledern
schaf|leders
scherf|lein
scherf|leins
schief|lache
schief|lachen
schief|lachend
schief|lachende
schief|lachendem
schief|lachenden
schief|lachender
schief|lachendes
schief|lachst
schief|lacht
schief|lachte
schief|lachten
schief|lachtest
schief|lachtet
schief|lag
schief|lage
schief|lagen
schief|lagst
schief|lagt
schief|laufen
schief|liege
schief|liegen
schief|liegend
schief|liegende
schief|liegendem
schief|liegenden
schief|liegender
schief|liegendes
schief|liegst
schief|liegt
schief|luft
schimpf|lich
schimpf|liche
schimpf|lichem
schimpf|lichen
schimpf|licher
schimpf|liches
schlaf|lied
schlaf|lieder
schlaf|liedern
schlaf|liedes
schlaf|lieds
schlaf|los
schlaf|lose
schlaf|losem
schlaf|losen
schlaf|loser
schlaf|loses
schlaf|losigkeit
schlaf|losigkeiten
schlupf|loch
schlupf|loches
schlupf|lochs
schlupf|lcher
schlupf|lchern
schnff|ler
schnff|lerin
schnff|lerinnen
schnff|lern
schnff|lers
schwef|lig
schwef|lige
schwef|ligem
schwef|ligen
schwef|liger
schwef|liges
schpf|lffel
schpf|lffeln
schpf|lffels
selbstauf|lsung
serienbrief|funktion
steckbrief|lich
steuerschnff|ler
steuerschnff|lern
steuerschnff|lers
straf|fllig
straf|fllige
straf|flligem
straf|flligen
straf|flliger
straf|flliges
straf|lager
straf|lagern
straf|lagers
straf|los
straf|lose
straf|losem
straf|losen
straf|loser
straf|loses
streif|licht
streif|lichter
streif|lichtern
streif|lichts
strf|lich
strf|liche
strf|lichem
strf|lichen
strf|licher
strf|liches
strf|ling
strf|linge
strf|lingen
strf|lings
sturzkampf|flugzeug
sturzkampf|flugzeuge
sturzkampf|flugzeugen
sturzkampf|flugzeugs
sumpf|fieber
sumpf|land
sumpf|landes
sumpf|lands
sumpf|lnder
sumpf|lndern
tarif|lich
tarif|liche
tarif|lichem
tarif|lichen
tarif|licher
tarif|liches
tarif|lohn
tarif|lohns
tarif|lhne
tarif|lhnen
teuf|lisch
teuf|lische
teuf|lischem
teuf|lischen
teuf|lischer
teuf|lischere
teuf|lischerem
teuf|lischeren
teuf|lischerer
teuf|lischeres
teuf|lisches
teuf|lischst
teuf|lischste
teuf|lischstem
teuf|lischsten
teuf|lischster
teuf|lischstes
theaterauf|fhrung
theaterauf|fhrungen
tief|fliege
tief|fliegen
tief|fliegend
tief|fliegende
tief|fliegendem
tief|fliegenden
tief|fliegender
tief|fliegendes
tief|flieger
tief|fliegern
tief|fliegers
tief|fliegst
tief|fliegt
tief|flog
tief|flogen
tief|flogst
tief|flogt
tief|flug
tief|fluges
tief|flugs
tief|flge
tief|flgen
tief|ladbar
tief|ladbare
tief|ladbarem
tief|ladbaren
tief|ladbarer
tief|ladbares
tief|lade
tief|laden
tief|ladeprogramm
tief|land
tief|landes
tief|lands
tief|liege
tief|liegen
tief|liegend
tief|liegende
tief|liegendem
tief|liegenden
tief|liegender
tief|liegendes
tief|liegst
tief|liegt
tief|lnder
tief|lndern
tief|lffel
tief|lffelbagger
tief|lffelbaggern
tief|lffeln
tief|lffels
treff|lich
treff|liche
treff|lichem
treff|lichen
treff|licher
treff|lichere
treff|licherem
treff|licheren
treff|licherer
treff|licheres
treff|liches
treff|lichkeit
treff|lichst
treff|lichste
treff|lichstem
treff|lichsten
treff|lichster
treff|lichstes
tuf|ling
tuf|linge
tuf|lingen
tuf|lings
unauf|findbar
unauf|findbare
unauf|findbarem
unauf|findbaren
unauf|findbarer
unauf|findbares
unauf|findbarkeit
unauf|findbarkeiten
unauf|fllig
unauf|fllige
unauf|flligem
unauf|flligen
unauf|flliger
unauf|flligere
unauf|flligerem
unauf|flligeren
unauf|flligerer
unauf|flligeres
unauf|flliges
unauf|flligkeit
unauf|flligkeiten
unauf|flligst
unauf|flligste
unauf|flligstem
unauf|flligsten
unauf|flligster
unauf|flligstes
unauf|lsbar
unauf|lsbare
unauf|lsbarem
unauf|lsbaren
unauf|lsbarer
unauf|lsbares
unauf|lslich
unauf|lsliche
unauf|lslichem
unauf|lslichen
unauf|lslicher
unauf|lsliches
unbegreif|lich
unbegreif|liche
unbegreif|lichem
unbegreif|lichen
unbegreif|licher
unbegreif|lichere
unbegreif|licherem
unbegreif|licheren
unbegreif|licherer
unbegreif|licheres
unbegreif|liches
unbegreif|lichkeit
unbegreif|lichst
unbegreif|lichste
unbegreif|lichstem
unbegreif|lichsten
unbegreif|lichster
unbegreif|lichstes
unerschpf|lich
unerschpf|liche
unerschpf|lichem
unerschpf|lichen
unerschpf|licher
unerschpf|lichere
unerschpf|licherem
unerschpf|licheren
unerschpf|licherer
unerschpf|licheres
unerschpf|liches
unerschpf|lichst
unerschpf|lichste
unerschpf|lichstem
unerschpf|lichsten
unerschpf|lichster
unerschpf|lichstes
unglimpf|lich
unglimpf|liche
unglimpf|lichem
unglimpf|lichen
unglimpf|licher
unglimpf|liches
unhf|lich
unhf|liche
unhf|lichem
unhf|lichen
unhf|licher
unhf|lichere
unhf|licherem
unhf|licheren
unhf|licherer
unhf|licheres
unhf|liches
unhf|lichkeit
unhf|lichkeiten
unhf|lichst
unhf|lichste
unhf|lichstem
unhf|lichsten
unhf|lichster
unhf|lichstes
unverkuf|lich
unverkuf|liche
unverkuf|lichem
unverkuf|lichen
unverkuf|licher
unverkuf|liches
unwiderruf|lich
unwiderruf|liche
unwiderruf|lichem
unwiderruf|lichen
unwiderruf|licher
unwiderruf|liches
urauf|fhre
urauf|fhren
urauf|fhrend
urauf|fhrende
urauf|fhrendem
urauf|fhrenden
urauf|fhrender
urauf|fhrendes
urauf|fhrst
urauf|fhrt
urauf|fhrte
urauf|fhrten
urauf|fhrtest
urauf|fhrtet
urauf|fhrung
urauf|fhrungen
verfnf|fache
verfnf|fachen
verfnf|fachend
verfnf|fachende
verfnf|fachendem
verfnf|fachenden
verfnf|fachender
verfnf|fachendes
verfnf|fachst
verfnf|facht
verfnf|fachte
verfnf|fachtem
verfnf|fachten
verfnf|fachter
verfnf|fachtes
verfnf|fachtest
verfnf|fachtet
verkuf|lich
verkuf|liche
verkuf|lichem
verkuf|lichen
verkuf|licher
verkuf|liches
verkuf|lichkeit
verwerf|lich
verwerf|liche
verwerf|lichem
verwerf|lichen
verwerf|licher
verwerf|lichere
verwerf|licherem
verwerf|licheren
verwerf|licherer
verwerf|licheres
verwerf|liches
verwerf|lichst
verwerf|lichste
verwerf|lichstem
verwerf|lichsten
verwerf|lichster
verwerf|lichstes
verzweif|lungsschritt
vorauf|fhrung
vorauf|fhrungen
vorberuf|lich
vorberuf|liche
vorberuf|lichem
vorberuf|lichen
vorberuf|licher
vorberuf|liches
vortreff|lich
vortreff|liche
vortreff|lichem
vortreff|lichen
vortreff|licher
vortreff|liches
waldorf|lehrer
waldorf|lehrerin
waldorf|lehrerinnen
waldorf|lehrern
waldorf|lehrers
widerruf|lich
widerruf|liche
widerruf|lichem
widerruf|lichen
widerruf|licher
widerruf|liches
wiederauf|fhrung
wiederauf|ladbar
wiederauf|ladbare
wiederauf|ladbarem
wiederauf|ladbaren
wiederauf|ladbarer
wiederauf|ladbares
wiederauf|lade
wiederauf|laden
wiederauf|ladend
wiederauf|ladende
wiederauf|ladendem
wiederauf|ladenden
wiederauf|ladender
wiederauf|ladendes
wiederauf|ladet
wiederauf|lebe
wiederauf|leben
wiederauf|lebend
wiederauf|lebende
wiederauf|lebendem
wiederauf|lebenden
wiederauf|lebender
wiederauf|lebendes
wiederauf|lebst
wiederauf|lebt
wiederauf|lebte
wiederauf|lebten
wiederauf|lebtest
wiederauf|lebtet
wirtschaftsauf|fassung
wrf|lig
wrf|lige
wrf|ligem
wrf|ligen
wrf|liger
wrf|liges
zahlungsauf|forderung
zahlungsauf|forderungen
zeitauf|lsung
zupf|instrument
zupf|instrumente
zupf|instrumenten
zupf|instrumentes
zupf|instruments
zweif|ler
zweif|lerin
zweif|lerinnen
zweif|lern
zweif|lers
zweitauf|lage
zweitauf|lagen
zwlf|fach
zwlf|fache
zwlf|fachem
zwlf|fachen
zwlf|facher
zwlf|faches
zwlf|fingerdarm
zwlf|fingerdarmes
zwlf|fingerdarms
bertarif|lich
bertarif|liche
bertarif|lichem
bertarif|lichen
bertarif|licher
bertarif|liches
