# German compounding

# handle special casing of German sharp s

CHECKSHARPS

# compound flags

COMPOUNDBEGIN U
COMPOUNDMIDDLE V
COMPOUNDEND W

# Prefixes are allowed at the beginning of compounds,
# suffixes are allowed at the end of compounds by default:
# (prefix)?(root)+(affix)?
# Affixes with COMPOUNDPERMITFLAG may be inside of compounds.
COMPOUNDPERMITFLAG P

# for German fogemorphemes (Fuge-element)
# Hint: ONLYINCOMPOUND is not required everywhere, but the
# checking will be a little faster with it.

ONLYINCOMPOUND X

# for decapitalizing nouns with fogemorphemes

CIRCUMFIX Y

# for handling Fuge-elements with dashes (Arbeits-) 
# dash will be a special word

COMPOUNDMIN 1
WORDCHARS -

# compound settings and fogemorpheme for `Arbeit'

SFX A Y 3
SFX A 0 s/UPX .
SFX A 0 s/VPXDY .
SFX A 0 0/WXDY .

# compound settings for `Computer'

SFX B Y 2
SFX B 0 0/UPX .
SFX B 0 0/VWPXDY .

# a suffix for `Computer'

SFX C Y 2
SFX C 0 n .
SFX C 0 n/WXDY .

# for forbid exceptions (*Arbeitsnehmer)

FORBIDDENWORD Z

# dash prefix for compounds with dash (Arbeits-Computer)

PFX - Y 2
PFX - 0 -/PUVW .
PFX - 0 -/PY .

# decapitalizing prefix
# circumfix for positioning in compounds

PFX D Y 29
PFX D A a/PXY A
PFX D Ä ä/PXY Ä
PFX D B b/PXY B
PFX D C c/PXY C
PFX D D d/PXY D
PFX D E e/PXY E
PFX D F f/PXY F
PFX D G g/PXY G
PFX D H h/PXY H
PFX D I i/PXY I
PFX D J j/PXY J
PFX D K k/PXY K
PFX D L l/PXY L
PFX D M m/PXY M
PFX D N n/PXY N
PFX D O o/PXY O
PFX D Ö ö/PXY Ö
PFX D P p/PXY P
PFX D Q q/PXY Q
PFX D R r/PXY R
PFX D S s/PXY S
PFX D T t/PXY T
PFX D U u/PXY U
PFX D Ü ü/PXY Ü
PFX D V v/PXY V
PFX D W w/PXY W
PFX D X x/PXY X
PFX D Y y/PXY Y
PFX D Z z/PXY Z
