]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
adds hyphenation (Carlos Villegas, Fotis Jannidis) and simple configuration support...
authorfotis <fotis@unknown>
Tue, 12 Dec 2000 19:18:50 +0000 (19:18 +0000)
committerfotis <fotis@unknown>
Tue, 12 Dec 2000 19:18:50 +0000 (19:18 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193861 13f79535-47bb-0310-9956-ffa450edef68

45 files changed:
build.xml
conf/config.dtd [new file with mode: 0644]
conf/config.xml [new file with mode: 0644]
conf/userconfig.xml [new file with mode: 0644]
docs/examples/build.xml
docs/xml-docs/fop.xml
docs/xml-docs/xml2xml.xsl
hyph/de.xml [new file with mode: 0644]
hyph/en.xml [new file with mode: 0644]
hyph/en_GB.xml [new file with mode: 0644]
hyph/en_US.xml [new file with mode: 0644]
hyph/es.xml [new file with mode: 0644]
hyph/fr.xml [new file with mode: 0644]
hyph/hyphenation.dtd [new file with mode: 0644]
hyph/readme [new file with mode: 0644]
lib/Fop.class
lib/Fop.java
lib/SerializeHyphPattern.class [new file with mode: 0644]
lib/SerializeHyphPattern.java [new file with mode: 0644]
lib/readme
src/codegen/foproperties.xml
src/org/apache/fop/apps/CommandLine.java
src/org/apache/fop/apps/Driver.java
src/org/apache/fop/apps/Version.java
src/org/apache/fop/apps/XalanCommandLine.java
src/org/apache/fop/configuration/AWTConfiguration.java [new file with mode: 0644]
src/org/apache/fop/configuration/ConfigurationParser.java [new file with mode: 0644]
src/org/apache/fop/configuration/ConfigurationReader.java [new file with mode: 0644]
src/org/apache/fop/configuration/PDFConfiguration.java [new file with mode: 0644]
src/org/apache/fop/configuration/StandardConfiguration.java [new file with mode: 0644]
src/org/apache/fop/fo/Property.java
src/org/apache/fop/fo/flow/Block.java
src/org/apache/fop/layout/BlockArea.java
src/org/apache/fop/layout/InlineArea.java
src/org/apache/fop/layout/LineArea.java
src/org/apache/fop/layout/hyphenation/ByteVector.java [new file with mode: 0644]
src/org/apache/fop/layout/hyphenation/CharVector.java [new file with mode: 0644]
src/org/apache/fop/layout/hyphenation/Hyphen.java [new file with mode: 0644]
src/org/apache/fop/layout/hyphenation/Hyphenation.java [new file with mode: 0644]
src/org/apache/fop/layout/hyphenation/HyphenationException.java [new file with mode: 0644]
src/org/apache/fop/layout/hyphenation/HyphenationTree.java [new file with mode: 0644]
src/org/apache/fop/layout/hyphenation/Hyphenator.java [new file with mode: 0644]
src/org/apache/fop/layout/hyphenation/PatternConsumer.java [new file with mode: 0644]
src/org/apache/fop/layout/hyphenation/PatternParser.java [new file with mode: 0644]
src/org/apache/fop/layout/hyphenation/TernaryTree.java [new file with mode: 0644]

index 2ddcfc2e74cf27773efc01afe8e7a1c141b98309..782fc737c4185e21b5d5b9f11400fcbfce5026d7 100644 (file)
--- a/build.xml
+++ b/build.xml
@@ -197,6 +197,7 @@ Sometimes ant gives out this warnings, but the build is finished without any pro
     <property name="myfont.xml" value="${build.codegen}/myfont.xml"/>
     -->
 
+    <taskdef name="serHyph" classname="SerializeHyphPattern"/> 
     <taskdef name="xslt" classname="Xslt"/>
     <available property="xt.present" classname="com.jclark.xsl.sax.XSLProcessor"/>
     <available property="jimi.present" classname="com.sun.jimi.core.Jimi"/>
@@ -242,8 +243,23 @@ Sometimes ant gives out this warnings, but the build is finished without any pro
     <mkdir dir="${build.src}"/>
     <mkdir dir="${build.src}/${properties.dir}"/>
     <mkdir dir="${build.src}/${fonts.dir}"/>
+    <mkdir dir="${build.dest}/conf"/>
+    <mkdir dir="${build.dest}/hyph"/>
+    <copydir src="./conf" dest="${build.dest}/conf" />
   </target>
 
+
+  <!-- =================================================================== -->
+  <!-- compiles hyphenation patterns                                       -->
+  <!-- =================================================================== -->
+
+  <target name="hyphenation" depends="prepare,compile" >
+    <serHyph includes="*.xml" 
+             sourceDir="./hyph" 
+             targetDir="${build.dest}/hyph" /> 
+  </target>
+
+
   <!-- =================================================================== -->
   <!-- copies some source files if xt is present                           -->
   <!-- =================================================================== -->
@@ -263,6 +279,7 @@ Sometimes ant gives out this warnings, but the build is finished without any pro
              includes="**/${jimi}"/>
   </target>
 
+  <!-- =================================================================== -->
   <!-- copies special image class only if JAI library is present          -->
   <!-- =================================================================== -->
   <target name="prepare-jai" depends="prepare" if="jai.present">
@@ -385,18 +402,18 @@ Sometimes ant gives out this warnings, but the build is finished without any pro
   <!-- =================================================================== -->
   <!-- Creates the class package                                           -->
   <!-- =================================================================== -->
-  <target name="package" depends="compile">
+  <target name="package" depends="compile,hyphenation">
     <echo message="Creating the jar file ${build.dir}/${name}.jar"/>
     <jar jarfile="${build.dir}/${name}.jar"
          basedir="${build.dest}"
-         includes="org/**"/>
+         includes="org/**,conf/**,hyph/**"/>
   </target>
 
-  <target name="package-jdk11" depends="compile-jdk11">
+  <target name="package-jdk11" depends="compile-jdk11,hyphenation">
     <echo message="Creating the jar file ${build.dir}/${name}11.jar"/>
     <jar jarfile="${build.dir}/${name}-jdk11.jar"
          basedir="${build.dest}"
-         includes="org/**"/>
+         includes="org/**,conf/**,hyph/**"/>
   </target>
 
   <!-- =================================================================== -->
diff --git a/conf/config.dtd b/conf/config.dtd
new file mode 100644 (file)
index 0000000..d51a1a9
--- /dev/null
@@ -0,0 +1,6 @@
+<!ELEMENT configuration (entry+)>
+<!ELEMENT entry (key,(value | list))>
+<!ELEMENT key (#PCDATA)>
+<!ELEMENT value (#PCDATA)>
+<!ELEMENT list (value+ | subentry+)>
+<!ELEMENT subentry (key,value+)>
\ No newline at end of file
diff --git a/conf/config.xml b/conf/config.xml
new file mode 100644 (file)
index 0000000..076b7ca
--- /dev/null
@@ -0,0 +1,11 @@
+<!--<!DOCTYPE configuration SYSTEM "config.dtd">-->
+<!-- to developers: have a look at the config.dtd to 
+     see how to structure your config entries -->
+
+<configuration>
+  <entry>
+    <key>version</key>
+    <value>Fop 0.16.0 dev</value>
+  </entry>
+
+</configuration>
\ No newline at end of file
diff --git a/conf/userconfig.xml b/conf/userconfig.xml
new file mode 100644 (file)
index 0000000..d35d136
--- /dev/null
@@ -0,0 +1,43 @@
+<!--<!DOCTYPE configuration SYSTEM "config.dtd">-->
+<!-- 
+     this file contains templates which allow an user easy 
+     configuration of Fop. Actually normally you don't need this configuration 
+     file, but if you need to change configuration, you should
+     always use this file and *not* config.xml. 
+     Usage: java org.apache.fop.apps.CommandLine -cuserconfig.xml fo-file pdf-file
+-->
+
+
+<configuration>
+
+<!--  NOT IMPLEMENTED
+basedir: normally the base directory is the directory where the fo file is 
+         located. if you want to specify your own, uncomment this entry
+-->
+<!-- 
+  <entry>
+    <key>basedir</key>
+    <value></value>
+  </entry>
+-->
+
+<!--
+************************************************************************
+                        HYPHENATION 
+************************************************************************
+-->
+  
+<!--
+   hyphenation directory 
+   if you want to specify your own directory with hyphenation pattern
+   then uncomment the next entry and add the directory name
+-->
+
+<!--
+  <entry>
+    <key>hyphenation-dir</key>
+    <value>/java/xml-fop/hyph</value>
+  </entry>
+-->
+
+</configuration>
\ No newline at end of file
index 2d3152599b66e0f56b3d6cc489293278ddfc86f0..2186eaed5e66bde21e27408c4e16f57ce2416de2 100644 (file)
@@ -56,6 +56,7 @@
     <fop fofile="${foDir}/inhprop.fo" pdffile="${testDir}/inhprop.pdf"/>
     <fop fofile="${foDir}/normalex.fo" pdffile="${testDir}/normalex.pdf"/>
     <fop fofile="${foDir}/simple.fo" pdffile="${testDir}/simple.pdf"/>
+    <fop fofile="${foDir}/hyphen.fo" pdffile="${testDir}/hyphen.pdf"/>
   </target>
 
 
index 106fb285d9c2c8242a67382b84beb65bd339d185..e1f382bcd71c520e94f82015b810f386488d9a2c 100644 (file)
@@ -11,6 +11,7 @@
   <document id="limitations"    label="Limitations" source="fop/limitations.xml"    />
   <document id="bugs"           label="Bugs" source="fop/bugs.xml"    />
   <document id="examples"       label="Examples" source="fop/examples.xml"    />
+  <document id="config"       label="Configuration" source="fop/configuration.xml"    />
   <document id="fonts"       label="Fonts" source="fop/fonts.xml"    />
   <separator/>
   <document id="compiling"      label="Compiling" source="fop/compiling.xml"    />
index 4f14ba59a0bfac6eb296b8fc937d0c6257af6809..a130c144c2fd5c548b660202fac4616943b3d86e 100644 (file)
@@ -9,9 +9,10 @@
     <xsl:copy-of select="document('fop/running.xml')"/>
     <xsl:copy-of select="document('fop/implemented.xml')"/>
     <xsl:copy-of select="document('fop/limitations.xml')"/>
-    <xsl:copy-of select="document('fop/fonts.xml')"/>
     <xsl:copy-of select="document('fop/bugs.xml')"/>
     <xsl:copy-of select="document('fop/examples.xml')"/>
+    <xsl:copy-of select="document('fop/configuration.xml')"/>
+    <xsl:copy-of select="document('fop/fonts.xml')"/>
     <xsl:copy-of select="document('fop/compiling.xml')"/>
     <xsl:copy-of select="document('fop/embedding.xml')"/>
     <xsl:copy-of select="document('fop/involved.xml')"/>
diff --git a/hyph/de.xml b/hyph/de.xml
new file mode 100644 (file)
index 0000000..289b564
--- /dev/null
@@ -0,0 +1,592 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE hyphenation-info SYSTEM "hyphenation.dtd">
+
+<!--
+  Constructed by Carlos Villegas from Lout's german.lh file:
+%
+% This is a German hyphenation file constructed by Jeff Kingston
+% on 21 April 1994 from a TeX file supplied by Sverre Slotte.
+%
+-->
+<hyphenation-info>
+
+<hyphen-char value="-"/>
+<hyphen-min before="3" after="2"/>
+
+<classes>
+<!-- @!$%^&*()_-+=~`{[}]:;'|<,.>?/0123456789 -->
+aA
+bB
+cC
+dD
+eE
+fF
+gG
+hH
+iI
+jJ
+kK
+lL
+mM
+nN
+oO
+pP
+qQ
+rR
+sS
+tT
+uU
+vV
+wW
+xX
+yY
+zZ
+äÄ
+åÅ
+öÖ
+üÜ
+</classes>
+
+<exceptions>
+<!-- The <hyphen> element is equivalent to TeX's 
+     \discretionary{pre-break text}{post-break text}{no-break text}
+     which handles words that change spelling when they are split
+     between lines. The hyphenation algorithm doesn't handle
+     those cases, but they can be processed as exceptions. 
+     The following are some examples taken from the TeXbook.
+-->
+ba<hyphen pre="k-" no="c"/>ken
+bet<hyphen pre="t-"/>tuch
+</exceptions>
+
+<patterns>
+.aa6l .ab3a4s .ab3ei .abi2 .ab3it .ab1l .ab1r .ab3u .ad3o4r .alti6 .ana3c
+.an5alg .an1e .ang8s .an1s .ap1p .ar6sc .ar6ta .ar6tei .as2z .au2f1 .au2s3
+.be5erb .be3na .ber6t5r .bie6r5 .bim6s5t .brot3 .bru6s .ch6 .che6f5 .da8c
+.da2r .dar5in .dar5u .den6ka .de5r6en .des6pe .de8spo .de3sz .dia3s4 .dien4
+.dy2s1 .ehren5 .eine6 .ei6n5eh .ei8nen .ein5sa .en6der .en6d5r .en3k4
+.en8ta8 .en8tei .en4t3r .epo1 .er6ban .er6b5ei .er6bla .er6d5um .er3ei
+.er5er .er3in .er3o4b .erwi5s .es1p .es8t .ex1a2 .ex3em .fal6sc .fe6st5a
+.flu4g3 .furch8 .ga6ner .ge3n4a .ge5rö .ges6 .halb5 .halbe6 .hal6br
+.haup4 .hau4t .heima6 .he4r3e .her6za .he5x .hin3 .hir8sc .ho4c .hu3sa
+.hy5o .ibe5 .ima6ge .in1 .ini6 .is5chi .jagd5 .kal6k5o .ka6ph .ki4e .kop6f3
+.kraf6 .kü5ra .lab6br .liie6 .lo6s5k .lö4s3t .ma5d .mi2t1 .no6th
+.no6top .obe8ri .ob1l .obs2 .ob6st5e .or3c .ort6s5e .ost3a .oste8r .pe4re
+.pe3ts .ph6 .po8str .rau4m3 .re5an .ro8q .ru5the .rü5be .rü8stet
+.sch8 .se6e .se5n6h .se5ra .si2e .spi6ke .st4 .sy2n .tages5 .tan6kl .ta8th
+.te6e .te8str .to6der .to8nin .to6we .um1 .umpf4 .un1 .une6 .unge5n .ur1c
+.ur5en .ve6rin .vora8 .wah6l5 .we8ges .wo6r .wor3a .wun4s .zi4e .zuch8
+.ände8re .öch8 aa1c aa2gr aal5e aa6r5a a5arti aa2s1t aat2s 6aba
+ab3art 1abdr 6abel aben6dr ab5erk ab5err ab5esse 1abf 1abg 1abhä ab1ir
+1abko a1bl ab1la 5ablag a6blaß ab4ler ab1lu a8blä 5a6blö abma5c
+1abn ab1ra ab1re 5a6brec ab1ro ab1s ab8sk abs2z 3abtei ab1ur 1abw 5abze
+5abzu ab1än abäu8 a4ce.  a5chal ach5art ach5au a1che a8chent ach6er.
+a6ch5erf a1chi ach1l ach3m ach5n a1cho ach3re a1chu ach1w a1chy ach5äf
+ack1o acks6t ack5sta a1d 8ad.  a6d5ac ad3ant ad8ar 5addi a8dein ade5o8
+adi5en 1adj 1adle ad1op a2dre 3adres adt1 1adv a6dä a1e2d ae1r a1er.
+1aero 8afa a3fal af1an a5far a5fat af1au a6fentl a2f1ex af1fr af5rau af1re
+1afri af6tent af6tra aft5re a6f5um 8afä ag5abe 5a4gent ag8er ages5e
+1aggr ag5las ag1lo a1gn ag2ne 1agog a6g5und a1ha a1he ah5ein a4h3erh a1hi
+ahl1a ah1le ah4m3ar ahn1a a5ho ahra6 ahr5ab ah1re ah8rei ahren8s ahre4s3
+ahr8ti ah1ru a1hu ah8ö ai3d2s ai1e aif6 a3inse ai4re.  a5isch.  ais8e
+a3ismu ais6n aiso6 a1j 1akad a4kade a1ke a1ki 1akko 5akro1 a5lal al5ans
+3al8arm al8beb al8berw alb5la 3album al1c a1le a6l5e6be a4l3ein a8lel
+a8lerb a8lerh a6lert 5a6l5eth 1algi al4gli al3int al4lab al8lan al4l3ar
+alle3g a1lo a4l5ob al6schm al4the altist5 al4t3re 8a1lu alu5i a6lur alu3ta
+a1lä a6mate 8ame.  5a6meise am6m5ei am6mum am2n ampf3a am6schw am2ta
+a1mu a1mä a3nac a1nad anadi5e an3ako an3alp 3analy an3ame an3ara a1nas
+an5asti a1nat anat5s an8dent ande4s3 an1ec an5eis an1e2k 4aner.  a6n5erd
+a8nerf a6n5erke 1anfa 5anfert 1anfä 3angab 5angebo an3gli ang6lis an2gn
+3angri ang5t6 5anhä ani5g ani4ka an5i8on an1kl an6kno an4kro 1anl anma5c
+anmar4 3annah anne4s3 a1no 5a6n1o2d 5a6n3oma 5a6nord 1anr an1sa 5anschl
+an4soz an1st 5anstal an1s2z 5antenn an1th 5anwä a5ny an4z3ed 5anzeig
+5anzieh 3anzug an1ä 5anäs a1nö anö8d a1os a1pa 3apfel a2ph1t
+aph5ä6 a1pi 8apl apo1c apo1s a6poste a6poth 1appa ap1pr a1pr a5pä
+a3pü a1ra a4r3af ar3all 3arbei 2arbt ar1c 2a1re ar3ein ar2gl 2a1ri
+ari5es ar8kers ar6les ar4nan ar5o6ch ar1o2d a1rol ar3ony a8ror a3ros ar5ox
+ar6schl 8artei ar6t5ri a1ru a1ry 1arzt arz1w ar8zä arä8m arö6
+ar5öm ar1ü2 a1sa a6schec asch5l asch3m a6schn a3s4hi as1pa asp5l
+a8steb as5tev 1asth a6stoc a1str ast3re 8a1ta ata5c ata3la a6tapf ata5pl
+a1te a6teli aten5a ate5ran 6atf 6atg a1th at3hal 1athl 2a1ti 5atlant 3atlas
+8atmus 6atn a1to a6t5ops ato6ra a6t5ort.  4a1tr a6t5ru at2t1h at5t6hä
+6a1tu atz1w a1tä a1tü au1a au6bre auch3a au1e aue4l 5aufent 3auffü
+3aufga 1aufn auf1t 3auftr 1aufw 3auge.  au4kle aule8s 6aum au8mar aum5p
+1ausb 3ausd 1ausf 1ausg au8sin 3auss au4sta 1ausw 1ausz aut5eng au1th 1auto
+auße8 a1v ave5r6a aver6i a1w a6wes a1x a2xia a6xio a1ya a1z azi5er.
+8aß 1ba 8ba8del ba1la ba1na ban6k5r ba5ot bardi6n ba1ro basten6 bau3sp
+2b1b bb6le b2bli 2b1c 2b1d 1be be1a be8at.  be1ch 8becht 8becke.  be5el
+be1en bee8rei be5eta bef2 8beff be1g2 behö8 bei1s 6b5eisen bei3tr b8el
+bel8o belu3t be3nac bend6o be6ners be6nerw be4nor ben4se6 bens5el be1nä
+be1nü be1o2 b8er.  be1ra be8rac ber8gab.  ber1r be1rü bes8c bes5erh
+bes2p be5tha bet5sc be1un be1ur 8bex be6zwec 2b1f8 bfe6st5e 2b1g2 bga2s5
+bge1 2b1h bhole6 1bi bi1bl b6ie bi1el bi1la bilä5 bi1na bi4nok bi5str
+bi6stu bi5tr bit4t5r b1j 2b1k2 bkü6 bl8 b6la.  6b1lad 6blag 8blam 1blat
+b8latt 3blau.  b6lav 3ble.  b1leb b1led 8b1leg 8b1leh 8bleid 8bleih 6b3lein
+blei3s ble4m3o 4blich b4lind 8bling b2lio 5blit b4litz b1loh 8b1los 1blu
+5blum 2blun blut3a blut5sc 3blä bläs5c 5blö 3blü blü8sc 2b1m
+2b1n 1bo bo1ch bo5d6s boe5 8boff 8bonk bo1ra b1ort 2b1p2 b1q 1br brail6
+brast8 bre4a b5red 8bref 8b5riem b6riga bro1s b1rup b2ruz 8bröh
+brös5c 8bs b1sa b8sang b2s1ar b1sc bs3erl bs3erz b8sof b1s2p bst1h
+b3stru b5stä b6sun 2b1t b2t1h 1bu bu1ie bul6k b8ure bu6sin 6b1v 2b1w
+1by1 by6te.  8b1z bzi1s 1bä b5ä6s5 1bü b6ü5bere büge6
+bügel5e bür6sc 1ca cag6 ca5la ca6re ca5y c1c 1ce celi4c celich5 ce1ro
+c8h 2ch.  1chae ch1ah ch3akt cha6mer 8chanz 5chara 3chari 5chato 6chb 1chef
+6chei ch3eil ch3eis 6cherkl 6chf 4chh 5chiad 5chias 6chins 8chj chl6 5chlor
+6ch2m 2chn6 ch8nie 5cho.  8chob choi8d 6chp ch3ren ch6res ch3rü 2chs
+2cht cht5ha cht3hi 5chthon ch6tin 6chuh chu4la 6ch3unt chut6t 8chw 1ci
+ci5tr c2k 2ck.  ck1ei 4ckh ck3l ck3n ck5o8f ck1r 2cks ck5stra ck6s5u c2l
+1c8o con6ne 8corb cos6t c3q 1c6r 8c1t 1cu 1cy 5cä1 cö5 1da.  8daas
+2dabg 8dabr 6dabt 6dabw 1dac da2gr 6d5alk 8d5amt dan6ce.  dani5er dan8ker
+2danl danla6 6dans 8danzi 6danzu d1ap da2r1a8 2d1arb d3arc dar6men 4d3art
+8darz 1dat 8datm 2d1auf 2d1aus 2d1b 2d1c 2d1d d5de d3d2h ddämme8 1de
+2deal de5an de3cha de1e defe6 6deff 2d1ehr 5d4eic de5isc de8lar del6s5e
+del6spr de4mag de8mun de8nep dene6r 8denge.  8dengen de5o6d 2deol de5ram
+8derdb der5ein de1ro der1r d8ers der5um de4s3am de4s3an de4sau de6sil
+de4sin de8sor de4spr de2su 8deul de5us.  2d1f df2l 2d1g 2d1h 1di dia5c
+di5ara dice5 di3chr di5ena di1gn di1la dil8s di1na 8dind 6dinf 4d3inh
+2d1ins di5o6d di3p4t di8sen dis1p di5s8per di6s5to dis5tra di8tan di8tin
+d1j 6dje 2dju 2d1k 2d1l 2d1m 2d1n6 dni6 dnje6 1do 6d5obe do6berf 6d5ony
+do3ran 6dord 2d1org dor4t3h do6ste 6doth dott8e 2d1p d5q dr4 1drah 8drak
+d5rand 6dre.  4drech d6reck 4d3reg 8d3reic d5reife 8drem 8d1ren 2drer
+8dres.  6d5rh 1dria d1ric 8drind droi6 dro5x 1dru 8drut drös5c 1drü
+drü5b drü8sc 2ds d1sa d6san dsat6 d1sc 5d6scha.  5dschik dse8e d8serg
+8dsl d1sp d4spak ds2po d8spä d1st d1sü 2dt d1ta d1te d1ti d1to dt1s6
+d1tu d5tä 1du du5als du1b6 du1e duf4t3r 4d3uh du5ie 8duml 8dumw 2d1und
+du8ni 6d5unt dur2c durch3 6durl 6dursa 8durt du1s du8schr 2d1v 2d1w dwa8l
+2d1z 1dä 6däh 8dänd dä6r dö8bl d5öl dör6fl dö8sc
+d5ö4st dös3te 1dü ea4ben e1ac e1ah e1akt e1al.  e5alf e1alg
+e5a8lin e1alk e1all e5alp e1alt e5alw e1am e1and ea6nim e1ar.  e5arf e1ark
+e5arm e3art e5at.  e6ate e6a5t6l e8ats e5att e6au.  e1aus e1b e6b5am
+ebens5e eb4lie eb4ser eb4s3in e1che e8cherz e1chi ech3m 8ech3n ech1r
+ech8send ech4su e1chu eck5an e5cl e1d ee5a ee3e ee5g e1ei ee5isc eei4s3t
+ee6lend e1ell ee5lö e1erd ee3r4e ee8reng eere6s5 ee5rä ee6tat e1ex
+e1f e6fau e8fe8b 3effek ef3rom ege6ra eglo6si 1egy e1ha e6h5ach eh5ans
+e6hap eh5auf e1he e1hi ehl3a eh1le ehl5ein eh1mu ehn5ec e1ho ehr1a eh1re
+ehre6n eh1ri eh1ru ehr5um e1hu eh1w e1hy e1hä e1hö e3hüt ei1a
+eia6s ei6bar eich3a eich5r ei4dar ei6d5ei ei8derf ei3d4sc ei1e 8eifen
+3eifri 1eign eil1d ei6mab ei8mag ein1a4 ei8nat ei8nerh ei8ness ei6nete
+ein1g e8ini ein1k ei6n5od ei8nok ei4nor e3insä ei1o e1irr ei5ru ei8sab
+ei5schn ei6s5ent ei8sol ei4t3al eit3ar eit1h ei6thi ei8tho eit8samt ei6t5um
+e1j 1ekd e1ke e1ki e1k2l e1kn ekni4 e1la e2l1al 6elan e6lanf e8lanl e6l5ans
+el3arb el3arm e6l3art 5e6lasti e6lauge elbst5a e1le 6elef ele6h e6l5ehe
+e8leif e6l5einh 1elek e8lel 3eleme e6lemen e6lente el5epi e4l3err e6l5ersc
+elf2l elg2 e6l5ins ell8er 4e1lo e4l3ofe el8soh el8tent 5eltern e1lu elut2
+e1lä e1lü em8dei em8meis 4emo emo5s 1emp1f 1empt 1emto e1mu emurk4
+emurks5 e1mä en5a6ben en5achs en5ack e1nad en5af en5all en3alt en1am
+en3an.  en3ant en3anz en1a6p en1ar en1a6s 6e1nat en3auf en3aus en2ce enda6l
+end5erf end5erg en8dess 4ene.  en5eck e8neff e6n5ehr e6n5eim en3eis 6enem.
+6enen e4nent 4ener.  e8nerd e6n3erf e4nerg 5energi e6n5erla en5ers e6nerst
+en5erw 6enes e6n5ess e2nex en3glo 2eni enni6s5 ennos4 enns8 e1no e6nober
+eno8f en5opf e4n3ord en8sers ens8kl en1sp ens6por en5t6ag enta5go en8terbu
+en6tid 3entla ent5ric 5entwic 5entwu 1entz enu5i e3ny en8zan en1öf
+e1nös e1nüg eo1c e5o6fe e5okk e1on.  e3onf e5onk e5onl e5onr e5opf
+e5ops e5or.  e1ord e1org eo5r6h eo1t e1pa e8pee e6p5e6g ep5ent e1p2f e1pi
+5epid e6pidem e1pl 5epos e6pos.  ep4p3a e1pr e1pä e1q e1ra.  er5aal
+8eraba e5rabel er5a6ben e5rabi er3abs er3ach era5e era5k6l er3all er3amt
+e3rand e3rane er3ans e5ranz.  e1rap er3arc e3rari er3a6si e1rat erat3s
+er3auf e3raum 3erbse er1c e1re 4e5re.  er3eck er5egg er5e2h 2erei e3rei.
+e8reine er5einr 6eren.  e4r3enm 4erer.  e6r5erm er5ero er5erst e4r3erz
+er3ess 5erfül er8gan.  5ergebn er2g5h 5ergänz 5erhöhu 2e1ri eri5ak
+e6r5iat e4r3ind e6r5i6n5i6 er5ins e6r5int er5itio er1kl 3erklä
+5erlös.  ermen6s er6nab 3ernst 6e1ro.  e1rod er1o2f e1rog 6e3roi ero8ide
+e3rol e1rom e1ron e3rop8 e2r1or e1ros e1rot er5ox ersch4 5erstat er6t5ein
+er2t1h er5t6her 2e1ru eruf4s3 e4r3uhr er3ums e5rus 5erwerb e1ry er5zwa
+er3zwu erä8m er5äs erö8 e3rös.  e6r1ü2b e1sa esa8b e8sap
+e6s5a6v e1sc esch4l ese1a es5ebe eserve5 e8sh es5ill es3int es4kop e2sl
+eso8b e1sp espei6s5 es2po es2pu 5essenz e6stabs e6staf e6st5ak est3ar
+e8stob e1str est5res es3ur e2sz e1sü e1ta et8ag etari5e eta8ta e1te
+eten6te et5hal e5thel e1ti 1etn e1to e1tr et3rec e8tscha et8se et6tei et2th
+et2t1r e1tu etu1s et8zent et8zw e1tä e1tö e1tü eu1a2 eu1e eue8rei
+eu5fe euin5 euk2 e1um.  eu6nio e5unter eu1o6 eu5p 3europ eu1sp eu5str eu8zo
+e1v eval6s eve5r6en ever4i e1w e2wig ex1or 1exp 1extr ey3er.  e1z e1ä2
+e5ö8 e1ü e8ßes fa6ch5i fade8 fa6del fa5el.  fal6lo falt8e fa1na
+fan4gr 6fanl 6fap far6ba far4bl far6r5a 2f1art fa1sc fau8str fa3y 2f1b2
+6f1c 2f1d 1fe 2f1eck fe6dr feh6lei f6eim 8feins f5eis fel5en 8feltern 8femp
+fe5rant 4ferd.  ferri8 fe8stof fe6str fe6stum fe8tag fet6ta fex1 2ff f1fa
+f6f5arm f5fe ffe5in ffe6la ffe8ler ff1f f1fla ff3lei ff4lie ff8sa ff6s5ta
+2f1g2 fgewen6 4f1h 1fi fid4 fi3ds fieb4 fi1la fi8lei fil4m5a f8in.  fi1na
+8finf fi8scho fi6u 6f1j 2f1k2 f8lanz fl8e 4f3lein 8flib 4fling f2lix 6f3lon
+5flop 1flor 5f8läc 3flöt 2f1m 2f1n 1fo foh1 f2on fo6na 2f1op fo5ra
+for8mei for8str for8th for6t5r fo5ru 6f5otte 2f1p8 f1q fr6 f5ram 1f8ran
+f8raß f8re.  frei1 5frei.  f3reic f3rest f1rib 8f1ric 6frig 1fris fro8na
+fräs5t 2fs f1sc f2s1er f5str fs3tät 2ft f1tak f1te ft5e6h ftere6 ft1h
+f1ti f5to f1tr ft5rad ft1sc ft2so f1tu ftwi3d4 ft1z 1fu 6f5ums 6funf fun4ka
+fu8ßend 6f1v 2f1w 2f1z 1fä fä1c 8färm 6fäug fä8ß
+föde3 8föf 3för 1fü fün4f3u 1ga ga6bl 6gabw 8gabz g3a4der
+ga8ho ga5isc 4gak ga1la 6g5amt ga1na gan5erb gan6g5a ga5nj 6ganl 8gansc
+6garb 2g1arc 2g1arm ga5ro 6g3arti ga8sa ga8sc ga6stre 2g1atm 6g5auf gau5fr
+g5aus 2g1b g5c 6gd g1da 1ge ge1a2 ge6an ge8at.  ge1e2 ge6es gef2 8geff
+ge1g2l ge1im 4g3eise geist5r gel8bra gelt8s ge5lö ge8nin gen3k 6g5entf
+ge3nä ge1or ge1ra ge6rab ger8au 8gerhö ger8ins ge1ro 6g5erz.
+ge1rä ge1rü ge1s ges2p ge5unt 4g3ex3 2g1f8 2g1g g1ha 6g1hei 5ghel.
+g5henn 6g1hi g1ho 1ghr g1hö 1gi gi5la gi8me.  gi1na 4g3ins gi3str g1j
+2g1k 8gl.  1glad g5lag glan4z3 1glas 6glass 5glaub g3lauf 1gle.  g5leb
+3gleic g3lein 5gleis 1glem 2gler 8g3leu gli8a g2lie 3glied 1g2lik 1g2lim
+g6lio 1gloa 5glom 1glon 1glop g1los g4loss g5luf 1g2ly 1glü 2g1m gn8
+6gn.  1gna 8gnach 2gnah g1nas g8neu g2nie g3nis 1gno 8gnot 1go goe1 8gof
+2gog 5gogr 6g5oh goni5e 6gonist go1ra 8gord 2g1p2 g1q 1gr4 g5rahm gra8m
+gra4s3t 6g1rec gre6ge 4g3reic g5reit 8grenn gri4e g5riem 5grif 2grig g5ring
+6groh 2grot gro6ß 4grut 2gs gs1ab g5sah gs1ak gs1an gs8and gs1ar gs1au
+g1sc gs1ef g5seil gs5ein g2s1er gs1in g2s1o gso2r gs1pr g2s1u 2g1t g3te
+g2t1h 1gu gu5as gu2e 2gue.  6gued 4g3uh 8gums 6g5unt gu1s gut3h gu2tu 4g1v
+2g1w gy1n g1z 1gä 8gä8m 6gärm 1gö 1gü 6güb 1haa hab8r
+ha8del hade4n 8hae ha5el.  haf6tr 2hal.  ha1la hal4b5a 6hale 8han.  ha1na
+han6dr han6ge.  2hani h5anth 6hanz 6harb h3arbe h3arme ha5ro ha2t1h h1atm
+hau6san ha8ß h1b2 h1c h1d he2bl he3cho h3echt he5d6s 5heft h5e6he.
+hei8ds h1eif 2hein he3ism he5ist.  heit8s3 hek6ta hel8lau 8helt he6mer
+1hemm 6h1emp hen5end hen5klo hen6tri he2nu 8heo he8q her3ab he5rak her3an
+4herap her3au h3erbi he1ro he8ro8b he4r3um her6z5er he4spe he1st heta6
+het5am he5th heu3sc he1xa hey5e h1f2 h1g hgol8 h1h h1iat hie6r5i hi5kt
+hil1a2 hil4fr hi5nak hin4ta hi2nu hi5ob hirn5e hir6ner hi1sp hi1th hi5tr
+5hitz h1j h6jo h1k2 hlabb4 hla4ga hla6gr h5lai hl8am h1las h1laß hl1c
+h1led h3lein h5ler.  h2lif h2lim h8linf hl5int h2lip h2lit h4lor h3lose
+h1läs hme5e h2nee h2nei hn3eig h2nel hne8n hne4p3f hn8erz h6netz h2nip
+h2nit h1nol hn5sp h2nuc h2nud h2nul hoch1 1hoh hoh8lei 2hoi ho4l3ar 1holz
+h2on ho1ra 6horg 5horn.  ho3sl hos1p ho4spi h1p hpi6 h1q 6hr h1rai h8rank
+h5raum hr1c hrcre8 h1red h3reg h8rei.  h4r3erb h8rert hrg2 h1ric hr5ins
+h2rom hr6t5erl hr2t1h hr6t5ra hr8tri h6rum hr1z hs3ach h6s5amt h1sc h6s5ec
+h6s5erl hs8erle h4sob h1sp h8spaß h8spel hs6po h4spun h1str h4s3tum
+hs3und h1sü h5ta.  h5tab ht3ac ht1ak ht3ang h5tanz ht1ar ht1at h5taub
+h1te h2t1ec ht3eff ht3ehe h4t3eif h8teim h4t3ein ht3eis h6temp h8tentf
+hte8ren h6terfü h8tergr h4t3erh h6t5ersc h8terst h8tese h8tess h2t1eu
+h4t3ex ht1he ht5hu h1ti ht5rak hts3ah ht1sc ht6sex ht8sk ht8so h1tu htz8
+h5tüm hub5l hu6b5r huh1l h5uhr.  huld5a6 hu8lent hu8lä h5up.  h1v
+h5weib h3weis h1z hä8kl häl8s häma8tu8 hä8sche.  hät1s
+häu4s3c 2hö.  2höe 8höi hö6s hös5c hühne6 hül4s3t
+hütte8re i5adn i1af i5ak.  i1al.  i1al1a i1alb i1ald i5alei i1alf i1alg
+i3alh i1alk i1all i1alp i1alr i1als i1alt i1alv i5alw i3alz i1an.  ia5na
+i3and ian8e ia8ne8b i1ang i3ank i5ann i1ant i1anz i6apo i1ar.  ia6rab i5arr
+i1as.  i1asm i1ass i5ast.  i1at.  i5ats i1au i5azz i6b5eig i6b5eis ib2le
+i4blis i6brig i6b5unt i6büb i1che ich5ei i6cherb i1chi ich5ins ich1l
+ich3m ich1n i1cho icht5an icht3r i1chu ich1w ick6s5te ic5l i1d id3arm
+3ideal ide8na 3ideol ide5rö i6diot id5rec id1t ie1a ie6b5ar iebe4s3
+ie2bl ieb1r ie8bra ie4bre ie8bä ie2dr ie1e8 ie6f5ad ief5f ie2f1l ie4fro
+ief1t i1ei ie4l3ec ie8lei ie4lek i3ell i1en.  i1end ien6e i3enf i5enn
+ien6ne.  i1enp i1enr i5ensa ien8stal i5env i1enz ie5o ier3a4b ie4rap i2ere
+ie4rec ie6r5ein ie6r5eis ier8er i3ern.  ie8rum ie8rund ie6s5che ie6tau
+ie8tert ie5the ie6t5ri i1ett ie5un iex5 2if i1fa if5ang i6fau if1fr if5lac
+i5f6lie i1fre ift5a if6t5r ig3art 2ige i8gess ig5he i5gla ig2ni i5go ig3rot
+ig3s2p i1ha i8ham i8hans i1he i1hi ih1n ih1r i1hu i8hum ih1w 8i1i ii2s ii2t
+i1j i1k i6kak i8kerz i6kes ik4ler i6k5unt 2il i5lac i1lag il3ans i5las
+i1lau il6auf i1le ile8h i8lel il2fl il3ipp il6l5enn i1lo ilt8e i1lu i1lä
+i8mart imb2 i8mele i8mid imme6l5a i1mu i1mä i5mö ina5he i1nat in1au
+inau8s 8ind.  in4d3an 5index ind2r 3indus i5nec i2n1ei i8nerw 3infek 1info
+5ingeni ing5s6o 5inhab ini5er.  5inj in8kät in8nan i1no inoi8d in3o4ku
+in5sau in1sp 5inspe 5instit 5instru ins4ze 5intere 5interv in3the in5t2r
+i5ny inä2 i1när in1äs inö8 in5öd i1nös 2io io1a8 io1c
+iode4 io2di ioi8 i1ol.  i1om.  i1on.  i5onb ion2s1 i1ont i5ops i5o8pt i1or.
+i3oral io3rat i5orc i1os.  i1ot.  i1o8x 2ip i1pa i1pi i1p2l i1pr i1q i1ra
+ir6bl i1re i1ri ir8me8d ir2m1o2 ir8nak i1ro ir5rho ir6schl ir6sch5r i5rus
+i5ry i5rä i1sa i8samt i6sar i2s1au i8scheh i8schei isch5m isch3r
+ischä8 is8ele ise3ra i4s3erh is3err isi6de i8sind is4kop ison5e is6por
+i8s5tum i5sty i5sö i1ta it5ab.  i2t1a2m i8tax i1te i8tersc i1thi i1tho
+i5thr it8hä i1ti i8ti8d iti6kl itmen4 i1to i8tof it3ran it3rau i1tri
+itri5o it1sc it2se it5spa it8tru i1tu it6z5erg it6z1w i1tä itä6r5e
+ität2 itäts5 i1tü i1u iu6r 2i1v i6vad iva8tin i8vei i6v5ene i8verh
+i2vob i8vur i1w iwi2 i5xa i1xe i1z ize8n i8zir i6z5w iä8m i1ä6r
+i5ät.  i5äv i1ö8 iü8 i6ß5ers ja5la je2t3r 6jm 5jo jo5as
+jo1ra jou6l ju5cha jugen4 jugend5 jung5s6 ju1s 3jä 1ka 8kachs 8kakz
+ka1la kal5d kam5t ka1na 2kanl 8kapf ka6pl ka5r6a 6k3arbe ka1ro kar6p5f
+4k3arti 8karz ka1rä kasi5e ka6teb kat8ta kauf6s kau3t2 2k1b 2k1c 4k1d
+kehr6s kehrs5a 8keic 2k1eig 6k5ein 6k5eis ke6lar ke8leis ke8lo 8kemp
+k5ente.  k3entf 8k5ents 6kentz ke1ra k5erlau 2k1f8 2k1g 2k1h ki5fl 8kik
+king6s5 6kinh ki5os ki5sp ki5th 8ki8ö 2k1k2 kl8 1kla 8klac k5lager
+kle4br k3leib 3kleid kle5isc 4k3leit k3lek 6k5ler.  5klet 2klic 8klig k2lim
+k2lin 5klip 5klop k3lor 1klä 2k1m kmani5e kn8 6kner k2ni knä8 1k2o
+ko1a2 ko6de.  ko1i koi8t ko6min ko1op ko1or ko6pht ko3ra kor6d5er ko5ru
+ko5t6sc k3ou 3kow 6k5ox 2k1p2 k1q 1kr8 4k3rad 2k1rec 4k3reic kre5ie 2krib
+6krig 2krip 6kroba 2ks k1sa k6sab ksal8s k8samt k6san k1sc k2s1ex k5spat
+k5spe k8spil ks6por k1spr kst8 k2s1uf 2k1t kta8l kt5a6re k8tein kte8re
+k2t1h k8tinf kt3rec kt1s 1ku ku1ch kuck8 k3uhr ku5ie kum2s1 kunfts5 kun2s
+kunst3 ku8rau ku4ro kurz1 ku1st 4kusti ku1ta ku8ß 6k1v 2k1w ky5n 2k1z
+1kä kä4m 4k3ämi käse5 1kö kö1c kö1s 1kü kü1c
+kür6sc kü1s 1la.  8labf 8labh lab2r 2l1abs lach3r la8dr 5ladu 8ladv
+6laff laf5t la2gn 5laken 8lamb la6mer 5lampe.  2l1amt la1na 1land lan4d3a
+lan4d3r lan4gr 8lanme 6lann 8lanw 6lanä 8lappa lap8pl lap6pr l8ar.
+la5ra lar4af la8rag la8ran la6r5a6s l3arbe la8rei 6larm.  la8sa la1sc
+la8sta lat8i 6l5atm 4lauss 4lauto 1law 2lb l8bab l8bauf l8bede l4b3ins
+l5blo lbst5an lbst3e 8lc l1che l8chert l1chi lch3m l5cho lch5w 6ld l4d3ei
+ld1re l6düb le2bl le8bre lecht6s5 led2r 6leff le4gas 1lehr lei6br le8inf
+8leinn 5leistu 4lektr le6l5ers lemo2 8lemp l8en.  8lends 6lendun le8nend
+len8erw 6l5ents 4l3entw 4lentz 8lenzy 8leoz 6lepi le6pip 8lepo 1ler l6er.
+8lerbs 6l5erde le8reis le8rend le4r3er 4l3erg l8ergr 6lerkl 6l5erzie
+8lerö 8lesel lesi5e le3sko le3tha let1s 5leuc 4leuro leu4s3t le5xe 6lexp
+l1f 2l1g lgend8 l8gh lglie3 lglied6 6l1h 1li li1ar li1as 2lick li8dr li1en
+lien6n li8ers li8ert 2ließ 3lig li8ga8b li1g6n li1l8a 8limb li1na
+4l3indu lings5 4l3inh 6linj link4s3 4linkt 2lint 8linv lion5s6t 4lipp 5lipt
+4lisam livi5e 6l1j 6l1k l8keim l8kj lk2l lko8f lkor8 lk2sa lk2se 6ll l1la
+ll3a4be l8labt ll8anl ll1b ll1c ll1d6 l1le l4l3eim l6l5eise ller3a l4leti
+l5lip l1lo ll3ort ll5ov ll6spr llte8 l1lu ll3urg l1lä l5lü l6lüb
+2l1m l6m5o6d 6ln l1na l1no 8lobl lo6br 3loch.  l5o4fen 5loge.  5lohn 4l3ohr
+1lok l2on 4l3o4per lo1ra 2l1ord 6lorg 4lort lo1ru 1los.  lo8sei 3losig
+lo6ve lowi5 6l1p lp2f l8pho l8pn lp4s3te l2pt l1q 8l1r 2ls l1sa l6sarm l1sc
+l8sec l6s5erg l4s3ers l8sh l5s6la l1sp ls4por ls2pu l1str l8suni l1sü
+2l1t lt5amp l4t3ein l5ten l6t5eng l6t5erp l4t3hei lt3her l2t1ho l6t5i6b
+lti1l l8trö lt1sc lt6ser lt4s3o lt5ums lu8br lu2dr lu1en8 8lu8fe luft3a
+luf8tr lu6g5r 2luh l1uhr lu5it 5luk 2l1umf 2l1umw 1lun 6l5u6nio 4l3unte
+lu5ol 4lurg 6lurs l3urt lu4sto lu3str lu6st5re lu8su lu6tal lu6t5e6g
+lu8terg lu3the lu6t5or lu2t1r lu6ß5 l1v lve5r6u 2l1w 1ly lya6 6lymp
+ly1no l8zess l8zo8f l3zwei lz5wu 3länd lä5on lä6sc lät1s
+5läuf 2läug läu6s5c lä5v l1öl 1lös lö1ß6t 6l1übe
+1ma 8mabg ma5chan mad2 ma5el 4magg mag8n ma1la ma8lau mal5d 8malde mali5e
+malu8 ma8lut 2m1amp 3man mand2 man3ds 8mangr mani5o 8m5anst 6mappa 4m3arbe
+mar8kr ma1r4o mar8schm 3mas ma1sc ma1tö 4m5auf ma5yo 2m1b mb6r 2m1c 2m1d
+md6sä 1me me1ch me5isc 5meld mel8sa 8memp me5nal men4dr men8schl
+men8schw 8mentsp me1ra mer4gl me1ro 3mes me6s5ei me1th me8ß 2m1f6 2m1g
+2m1h 1mi mi1a mi6ale mi1la 2m1imm mi1na mi5nü mi4s3an mit1h mi5t6ra
+3mitt mitta8 mi6ß5 6mj 2m1k8 2m1l 2m1m m6mad m6m5ak m8menth m8mentw
+mme6ra m2mn mm5sp mm5ums mmut5s m8män m1n8 m5ni 1mo mo5ar mo4dr 8mof
+mo8gal mo4kla mol5d m2on mon8do mo4n3od mont8a 6m5ony mopa6 mo1ra mor8d5a
+mo1sc mo1sp 5mot moy5 2mp m1pa mpfa6 mpf3l mphe6 m1pi mpin6 m1pl mp2li
+m2plu mpo8ste m1pr mprä5 mp8th mput6 mpu5ts m1pö 8m1q 2m1r 2ms ms5au
+m1sc msch4l ms6po m3spri m1str 2m1t mt1ar m8tein m2t1h mt6se mt8sä mu5e
+6m5uh mumi1 1mun mun6dr muse5e mu1ta 2m1v mvol2 mvoll3 2m1w 1my 2m1z
+mä6kl 1män mä1s mä5tr mäu4s3c 3mäß möb2 6möl
+1mü 5mün 3müt 1na.  n5ab.  8nabn n1abs n1abz na6bä na2c nach3e
+3nacht 1nae na5el n1afr 1nag 1n2ah na8ha na8ho 1nai 6nair na4kol n1akt
+nal1a 8naly 1nama na4mer na1mn n1amp 8n1amt 5nanc nan6ce n1and n6and.
+2n1ang 1nani 1nann n1ans 8nanw 5napf.  1n2ar.  na2ra 2n1arc n8ard 1nari
+n8ark 6n1arm 5n6ars 2n1art n8arv 6natm nat6s5e 1naue 4nauf n3aug 5naui
+n5auk na5um 6nausb 6nauto 1nav 2nax 3naz 1naß n1b2 nbau5s n1c nche5e
+nch5m 2n1d nda8d n2d1ak nd5ans n2d1ei nde8lac ndel6sa n8derhi nde4se
+nde8stal n2dj ndnis5 n6d5or6t nd3rec nd3rot nd8samt nd6sau ndt1h n8dumd 1ne
+ne5as ne2bl 6n5ebn 2nec 5neei ne5en ne1g4l 2negy 4n1ein 8neis 4n3e4lem
+8nemb 2n1emp nen1a 6n5energ nen3k 8nentb 4n3en3th 8nentl 8n5entn 8n5ents
+ne1ra ne5r8al ne8ras 8nerbi 6n5erde.  nere5i6d nerfor6 6n5erhö 8nerlö
+2n1err n8ers.  6n5ertra 2n1erz nesi3e net1h neu4ra neu5sc 8neuß n1f nf5f
+nf2l nflei8 nf5lin nft8st n8g5ac ng5d ng8en nge8ram ngg2 ng1h n6glic ng3rip
+ng8ru ng2se4 ng2si n2g1um n1gy n8gäl n1h nhe6r5e 1ni ni1bl ni5chä
+ni8dee n6ie ni1en nie6s5te niet5h ni8etn 4n3i6gel n6ik ni1la 2n1imp ni5na
+2n1ind 8ninf 6n5inh ni8nit 6n5inn 2n1ins 4n1int n6is ni3str ni1th ni1tr n1j
+n6ji n8kad nk5ans n1ke n8kerla n1ki nk5inh n5klö n1k2n n8k5not nk3rot
+n8krü nk5spo nk6t5r n8kuh n6küb n5l6 nli4mi n1m nmen4s n1na n8nerg
+nni5o n1no nn4t3ak nnt1h nnu1e n1ny n1nä n1nö n1nü no5a no4b3la
+4n3obs 2nobt noche8 no6die no4dis no8ia no5isc 6n5o6leu no4mal noni6er
+2n1onk n1ony 4n3o4per 6nopf 6nopti no3ra no4ram nor6da 4n1org 2n1ort n6os
+no1st 8nost.  no8tan no8ter noty6pe 6n5ox n1p2 n1q n1r nrös3 6ns n1sac
+ns3ang n1sc n8self n8s5erf n8serg n6serk ns5erw n8sint n1s2pe n1spr
+n6s5tat.  n5s6te.  n6stob n1str n1ta n4t3a4go nt5anh nt3ark nt3art n1te
+nt3eis nte5n6ar nte8nei nter3a nte6rei nt1ha nt6har n3ther nt5hie n3thus
+n1ti nti1c n8tinh nti1t ntlo6b ntmen8 n1to nt3o4ti n1tr ntra5f ntra5ut
+nt8rea nt3rec nt8rep n4t3rin nt8rop n4t3rot n4trü nt1s nts6an nt2sk n1tu
+nt1z n1tä n1tö n8töl n1tü 1nu nu1a nu5el nu5en 4n1uhr nu5ie
+8numl 6n5ums 6n5umw 2n1und 6nuni 6n5unr 2n1unt 2nup 2nu6r n5uri nu3skr
+nu5ta n1v 8n1w 1nys n1za n6zab n2z1ar n6zaus nzi4ga n8zof n6z5unt n1zw
+n6zwir 1näc 5näe 5näi n8äl nä6m nä6re n5ärz 5näus
+n1öl 1nöt n5öz 5nü.  6n1ü2b 5nüß o5ab.  oa2l o8ala
+o1a2m o1an ob1ac obe4ra o6berh 5o4bers o4beru obe6ser 1obj o1bl o2bli ob5sk
+3obst.  ob8sta obst5re ob5sz o1che oche8b o8chec o3chi och1l och3m ocho8f
+o3chro och3to o3chu och1w o1d o2d1ag od2dr ode5i ode6n5e od1tr o5e6b
+o5e6der.  oe8du o1ef o1e2l o1e2p o1er.  o5e8x o1fa of8fan 1offi of8fin
+of6f5la o5fla o1fr 8o1g og2n o1ha o1he o6h5eis o1hi ohl1a oh1le oh4l3er
+5ohm.  oh2ni o1ho oh1re oh1ru o1hu oh1w o1hy o1hä o5ia o1id.  o8idi
+oi8dr o5ids o5isch.  oiset6 o1ism o3ist.  o5i6tu o1j o1k ok2l ok3lau
+o8klä 1okta o1la old5am old5r o1le ole5in ole1r ole3u ol6gl ol2kl olk4s1
+ol8lak ol8lauf.  ol6lel ol8less o1lo ol1s ol6sk o1lu oly1e2 5olym o2mab
+om6an o8mau ombe4 o8merz om5sp o1mu o8munt o1mä o1mö o1na ona8m on1ax
+on8ent o6n5erb 8oni oni5er.  on1k on6n5a6b o1no ono1c o4nokt 1ons onts8
+o1nä oo8f 1oog oo2pe oo2sa o1pa 3o4pera o3pfli opf3lo opf3r o1pi o1pl
+o2pli o5p6n op8pa op6pl o1pr o3p4ter 1opti o1pä o5pö o1q o1ra.  o3rad
+o8radd 1oram o6rang o5ras o8rauf or5cha or4d3a4m or8dei or8deu 1ordn or4dos
+o1re o5re.  ore2h o8r5ein ore5isc or6enn or8fla or8fli 1orga 5orgel.  or2gl
+o1ri 5o6rient or8nan or8nä o1ro or1r2h or6t5an or8tau or8tere o1rus o1ry
+o1rä or1ü2 o1sa osa3i 6ose o8serk o1sk o6ske o6ski os2kl os2ko os2kr
+osni5e o2s1o2d o3s4per o4stam o6stau o3stra ost3re osu6 o6s5ur o5s6ze o1ta
+ot3auf o6taus o1te o6terw o1th othe5u o2th1r o1ti o1to oto1a ot1re o1tri
+o1tro ot1sc o3tsu ot6t5erg ot2t3h ot2t5r ot8tö o1tu ou3e ouf1 ou5f6l
+o5u6gr ou5ie ou6rar ou1t6a o1v o1wa o1we o6wer.  o1wi owid6 o1wo o5wu o1xe
+oy5al.  oy1e oy1i o5yo o1z oza2r 1o2zea ozo3is oö8 oß5elt oß1t
+3paa pa6ce 5pad pag2 1pak pa1la pa8na8t pani5el pa4nor pan1s2 1pap pap8s
+pa8rei par8kr paro8n par5o6ti part8e 5partei 3partn pas6sep pa4tha 1pau
+6paug pau3sc p1b 8p5c 4p1d 1pe 4peic pe5isc 2pek pen3k pen8to8 p8er pe1ra
+pere6 per5ea per5eb pe4rem 2perr per8ran 3pers 4persi pe3rü pe4sta pet2s
+p2f1ec p4fei pf1f pf2l 5pflanz pf8leg pf3lei 2pft pf3ta p1g 1ph 2ph.
+2p1haf 6phb 8phd 6p5heit ph5eme 6phg phi6e 8phk 6phn p5holl pht2 ph3tha
+4ph3the phu6 6phz pi1en pi5err pi1la pi1na 5pinse pioni8e 1pis pi1s2k pi1th
+p1k pl8 5pla p2lau 4plei p3lein 2pler 6p5les 2plig p6lik 6p5ling p2liz
+plo8min 6p1m p1n 1p2o 8poh 5pol po8lan poly1 po3ny po1ra 2porn por4t3h
+po5rö 5poti p1pa p6p5ei ppe6la pp5f p2p1h p1pi pp1l ppp6 pp5ren pp1s
+p5pö pr6 3preis 1pres 2p3rig 5prinz 1prob 1prod 5prog pro8pt pro6t5a
+prote5i 8proß prä3l 1präs präte4 1prüf p5schl 2pst 1p2sy p1t
+p8to8d pt1s 5p6ty 1pu pu1b2 2puc pu2dr puf8fr 6p5uh pun8s pu8rei pu5s6h
+pu1ta p1v p3w 5py py5l p1z pä6der p5ä6m pä8nu 8pär pät5h
+pät1s qu6 1qui 8rabk ra6bla 3rable ra2br r1abt 6rabz ra4dan ra2dr 5rafal
+ra4f3er ra5gla ra2g3n 6raha ral5am 5rald 4ralg ra8lins 2rall ral5t 8ramei
+r3anal r6and ran8der ran4dr 8ranf 6ranga 5rangi ran8gli r3angr rans5pa
+8ranw r8anz.  ra5or 6rapf ra5pl rap6s5er 2r1arb 1rarh r1arm ra5ro 2r1art
+6r1arz ra8tei ra6t5he 6ratl ra4t3ro r5atta raue4n 6raus.  r5austa rau8tel
+raut5s ray1 r1b rb5lass r6bler rb4lie rbon6n r8brecht rb6s5tä r8ces
+r1che rch1l rch3m rch3re rch3tr rch1w 8rd r1da r8dachs r8dap rda5ro rde5ins
+rdio5 r8dir rd3ost r1dr r8drau 1re.  re1ak 3reakt re3als re6am.  re1as
+4reben re6bl rech5a r8edi re3er 8reff 3refl 2reh 5reha r4ei.  reich6s5
+8reier 6reign re5imp 4r3eina 6r3einb 6reing 6r5einn 6reinr 4r3eins r3eint
+reli3e 8r5elt 6rempf 2remt ren5a6b ren8gl r3enni 1reno 5rente 4r3enth
+8rentl 4r3entw 8rentz ren4zw re1on requi5 1rer rer4bl 6rerbs 4r3erd
+8rerhö 8rerkl 4r3erla 8rerlö 4r3erns 6r5ernä rer5o 6r5erreg r5ertr
+r5erwec r5erö re2sa re8schm 2ress re5u8ni 6rewo 2r1ex r1f r8ferd rf4lie
+8r1g r8gah rge4bl rge5na rgest4 rg6ne r2gni2 r8gob r4g3ret rg8sel r1h8 r2hy
+5rhyt ri1ar ri5cha rid2g r2ie rieg4s5 ri8ei ri1el ri6ele ri1en ri3er.
+ri5ers.  ri6fan ri8fer ri8fr 1r2ig ri8kn ri5la rimä8 ri1na r8inde rin4ga
+rin6gr 1rinn 6rinner rino1 r8insp 4rinst ri1nä ri5o6ch ri1o2d ri3o6st
+2r1ir r2is ri3sko ri8spr ri8stü ri5sv r2it 6r5i6tal ri5tr ri6ve.  8r1j
+6rk r1ke rkehrs5 r1ki r3klin r1k2n rk3str rk4t3an rk6to r6kuh rkä4s3t
+r1l r5li rline5a 6r1m r6manl rma4p r4m3aph r8minf r8mob rm5sa 2rn r1na
+rna8be r5ne rn2ei r6neif r6nex r6nh rn1k r1no r6n5oc rn1sp r1nä r1nü
+ro6bern 6robs ro1ch 3rock.  ro5de ro1e 4rofe ro8hert 1rohr ro5id ro1in
+ro5isc 6rolym r2on 6roog ro6phan r3ort ro1s2p ro5s6w ro4tau ro1tr ro6ts
+5rout r1p rpe8re rp2f r2ps r2pt r1q 2rr r1ra r1re rrer6 rr6hos r5rhö
+r1ri r1ro rro8f rr8or rror5a r1ru r3ry r1rä r1rö r1rü 2r1s r6sab
+r4sanf rse6e rse5na r2sh r6ska r6ski rs2kl r8sko r2sl rs2p r6stauf r8sterw
+r8stran rswi3d4 r2sz 2r1t rt3art r8taut r5tei rt5eige r8tepe r4t3erh
+r8terla r4t3hei r5t6hu r4t3int rt5reif rt1sc rt6ser rt6s5o rt6s5u rt5und
+r8turt rube6 ru1en 1r4uf ruf4st ru1ie 2r1umg 2r1uml 2rums run8der run4d5r
+6rundz 6runf 8runs 2r1unt 2r1ur r6us ru6sta ru3str ru6tr 1ruts r1v rven1
+rvi2c r1w r1x r1za rz5ac r6z5al r8z1ar r8zerd r6z5erf rz8erh rz4t3h r8zum
+rä4ste räu8sc r1öf 5röhr rö5le 3röll 5römis r1ör
+rö2sc 3rümp 1sa.  1saa s3a4ben sa2bl 2s1abs 6s1abt 6sabw 3sack.
+6s3a4der 1saf sa1fa 4s1aff sa5fr 1sag 1sai sa1i2k1 4s1akt 1sal sa1la
+4s3alpi 6salter salz3a 1sam s5anb san2c 1sand s5angeh 6sanl 2s1ans 6s3antr
+8s1anw s1ap s6aph 8sapo sap5p6 s8ar.  2s1arb 3sarg s1arm sa5ro 2s1art
+6s1arz 1sas 1sat sat8a 2s1atl sa8tom 3s8aue s5auff sau5i s6aur 2s1aus
+5s6ause 2s1b2 2sca s4ce 8sch.  3scha.  5schade 3schaf 3schal sch5ame
+8schanc 8schb 1sche 6schef 8schex 2schf 2schg 2schh 1schi 2schk 5schlag
+5schlu 6schmäß 6schnaß 1scho 6schord 6schp 3schri 8schric 8schrig
+8schrou 6schs 2scht sch3ta sch3tr 1schu 8schunt 6schv 2schz 5schö
+5schü 2sco scre6 6scu 2s1d 1se se5an se1ap se6ben se5ec see5i6g se3erl
+8seff se6han se8hi se8hö 6s5eid.  2s1eig s8eil 5sein.  sei5n6e 6s5einh
+3s8eit 3sel.  se4lar selb4 6s3e4lem se8lerl 2s1emp sen3ac se5nec 6s5ents
+4sentz s8er.  se8reim ser5inn 8sermä 8s5erzi 6seröf se1um 8sexa 6sexp
+2s1f2 sfal8ler 2s3g2 sge5b2 s1h s8hew 5s6hip 5s4hop 1si 2siat si1b sicht6s
+6s5i6dee siege6s5 si1en si5err si1f2 si1g2n si6g5r si8kau sik1i si4kin
+si2kl si8kü si1la sil6br si1na 2s1inf sin5gh 2s1inh sinne6s5 2s1ins
+si5ru si5str 4s1j s1k2 6sk.  2skau skel6c skelch5 s6kele 1s2ki.  3s4kin.
+s6kiz s8kj 6skn 2skow 3skrib 3skrip 2sku 8skü s1l s8lal slei3t s4low
+2s1m s1n 6sna 6snot 1so so1ch 2s1odo so4dor 6s5o4fen solo3 s2on so5of 4sope
+so1ra 2s1ord 4sorga sou5c so3un 4s3ox sp2 8spaa 5spal 1span 2spap s2pec
+s4peis 1spek s6perg 4spers s6pes 2s1pf 8sphi 1s2phä 1spi spi4e 6s5pig
+6spinse 2spis 2spla 2spol 5s6pom 6s5pos 6spoti 1spra 3s8prec 6spreis
+5spring 6sprob 1spru s2pul 1s2pur 6spy 5spän 1spü s1q 2s1r 2s1s2
+sse8nu ssini6s ssoi6r 2st.  1sta 4stafe 2stag sta3la 6stale 4stalg 8stalk
+8stamt 6st5anf 4stans 6stanw 6starb sta4te 6staus 2stb 6stc 6std 1ste
+4steil 3s2tel st3elb 8stemb 6steppi 8stese 8stesse 6stf 2stg 2sth st1ha
+st3hei s8t1hi st1ho st5hu 1sti sti4el 4stigm sti3na 6stind 4stinf sti8r
+2stk 2stl 2stm 1sto 6stoll.  4st3ope 6stopf.  6stord 6stp 5stra.  4strai
+3s4tral 6s5traum 3straß 3strec 6s3tref 8streib 5streif 6streno 6stres
+6strev 5s6tria 6strig 5strik 8strisi 3s4troa s8troma st5rose 4struf 3strum
+6sträg 2st1s6 2stt 1stu stu5a 4stuc 2stue 8stun.  2stv 2stw s2tyl 6stz
+1stä 8stäg 1stö 1stü 8stüch 4stür.  1su su2b1 3suc su1e
+su2fe su8mar 6sumfa 8sumk 2s1unt sup1p2 6s5u6ran 6surte 2s1v 2s1w 1sy 8syl.
+sy5la syn1 sy2na syne4 s1z s4zend 5s6zene.  8szu 1sä 6s5änd 6säugi
+6säuß 5söm 2s1ü2b 1süc sü8di 1sün 5süß taats3
+4tab.  taba6k ta8ban tab2l ta6bre 4tabs t3absc 8tabz 6t3acht ta6der 6tadr
+tad6s tad2t 1tafe4 1tag ta6ga6 ta8gei tage4s tag6s5t tah8 tahl3 tai6ne.
+ta5ir.  tak8ta tal3au 1tale ta8leng tal5ert 6t5a6mer 6tamp tampe6 2t1amt
+tan5d6a tan8dr tands5a tani5e 6tanl 2tanr t3ans 8t5antr tanu6 t5anw 8tanwa
+tan8zw ta8rau 6tarbe 1tari 2tark 2t1arm ta1ro 2tart t3arti 6tarz ta1sc
+ta6sien ta8stem ta8sto t5aufb 4taufn 8taus.  5tause 8tausf 6tausg t5ausl
+2t1b2 2t1c t6chu 2t1d te2am tea4s te8ben 5techn 4teff te4g3re te6hau 2tehe
+te4hel 2t1ehr te5id.  teig5l 6teign tei8gr 1teil 4teinh t5einhe 4teis
+t5eisen 8teiw te8lam te4lar 4telek 8telem te6man te6n5ag ten8erw ten5k
+tens4p ten8tro 4t3entw 8tentz te6pli 5teppi ter5a6b te3ral ter5au 8terbar
+t5erbe.  6terben 8terbs 4t3erbt t5erde.  ter5ebe ter5ein te8rers terf4
+8terhö 6terklä ter8nor ter6re.  t8erscha t5e6sel te8stau t3euro te1xa
+tex3e 8texp tex6ta 2t1f2 2t1g2 2th.  th6a 5tha.  2thaa 6t1hab 6t5haf t5hah
+8thak 3thal.  6thals 6t3hand 2t1hau 1the.  3t4hea t1heb t5heil t3heit
+t3helf 1theo 5therap 5therf 6t5herz 1thes 1thet 5thi.  2t1hil t3him 8thir
+3this t5hj 2th1l 2th1m th1n t5hob t5hof 4tholz 6thopti 1thr6 4ths t1hum
+1thy 4t1hä 2t1hö t1hü ti1a2m ti1b tie6fer ti1en ti8gerz tig3l
+ti8kin ti5lat 1tilg t1ind tin4k3l ti3spa ti5str 5tite ti5tr ti8vel ti8vr
+2t1j 2t1k2 2t1l tl8a 2t1m8 2t1n 3tobe 8tobj to3cha 5tocht 8tock tode4
+to8del to8du to1e 6t5o6fen to1in toi6r 5toll.  to8mene t2ons 2t1ony to4per
+5topf.  6topt to1ra to1s to6ska tos2l 2toti to1tr t8ou 2t1p2 6t1q tr6
+tra5cha tra8far traf5t 1trag tra6gl tra6gr t3rahm 1trai t6rans tra3sc
+tra6st 3traue t4re.  2trec t3rech t8reck 6t1red t8ree 4t1reg 3treib 4treif
+8t3reis 8trepo tre6t5r t3rev 4t3rez 1trib t6rick tri6er 2trig t8rink
+tri6o5d trizi5 tro1a 3troc trocke6 troi8d tro8man.  tro3ny 5tropf 6t5rosa
+t5roß 5trub 5trup trut5 1träg 6t1röh 5trüb trü3bu t1rüc
+t1rüs 2ts ts1ab t1sac tsa8d ts1ak t6s5alt ts1an ts1ar ts3auf t3schr
+t5schä tse6e tsee5i tsein6s ts3ent ts1er t8serf t4serk t8sh 5t6sik
+t4s3int ts5ort.  t5s6por t6sprei t1st t6s5tanz ts1th t6stit t4s3tor 1t2sua
+t2s1uf t8sum.  t2s1u8n t2s1ur 2t1t tt5eif tte6sa tt1ha tt8ret tt1sc tt8ser
+tt5s6z 1tuc tuch5a 1tu1e 6tuh t5uhr tu1i tu6it 1tumh 6t5umr 1tums 8tumt
+6tund 6tunf 2t1unt tu5ra tu6rau tu6re.  tu4r3er 2t1v 2t1w 1ty1 ty6a ty8la
+8tym 6ty6o 2tz tz5al tz1an tz1ar t8zec tzeh6 tzehn5 t6z5ei.  t6zor t4z3um
+t6zäu 5täg 6täh t5ält t8än täre8 8tä8st 6täuß
+t5öffen 8tö8k 1tön 4tüb t6ü5ber.  5tüch 1tür.  u3al.
+u5alb u5alf u3alh u5alk u3alp u3an.  ua5na u3and u5ans u5ar.  ua6th u1au
+ua1y u2bab ubi5er.  u6b5rit ubs2k u5bö u8büb 2uc u1che u6ch5ec u1chi
+uch1l uch3m uch5n uch1r uch5to ucht5re u1chu uch1w uck1a uck5in u1d ud4a
+u1ei u6ela uene8 u6ep u1er uer1a ue8rerl uer5o u8esc u2est u8ev u1fa u2f1ei
+u4f3ent u8ferh uf1fr uf1l uf1ra uf1re uf1rä uf1rü uf1s2p uf1st uft1s
+u8gabt u8gad u6gap ugeb8 u8gn ugo3s4 u1ha u1he u1hi uh1le u1ho uh1re u1hu
+uh1w u1hä u1hö 6ui ui5en u1ig u3ins uin8tes u5isch.  u1j 6uk u1ke
+u1ki u1kl u8klu u1k6n u5ky u1la uld8se u1le ul8lac ul6lau ul6le6l ul6lo
+ulni8 u1lo ulo6i ult6a ult8e u1lu ul2vr u1lä u1lö 3umfan 5umlau umo8f
+um8pho u1mu umu8s u5mö u1n1a un2al un6at unau2 6und.  5undein un4d3um
+3undzw undü8 un8düb une2b un1ec une2h un3eis 3unfal 1unfä 5ungea
+3unglü ung2s1 un8gä 1u2nif un4it un8kro unk5s u1no unpa2 uns2p unvol4
+unvoll5 u5os.  u1pa u1pi u1p2l u1pr up4s3t up2t1a u1q u1ra ur5abs ura8d
+ur5ah u6rak ur3alt u6rana u6r5ans u8rap ur5a6ri u8ratt u1re ur3eig ur8gri
+u1ri ur5ins 3urlau urmen6 ur8nan u1ro 3ursac ur8sau ur8sei ur4sk 3urtei
+u1ru uru5i6 uru6r u1ry ur2za ur6zä ur5ä6m u5rö u1rü urück3
+u1sa usa4gi u2s1ar u2s1au u8schec usch5wi u2s1ei use8kel u8sl u4st3a4b
+us3tau u3s4ter u2s1uf u8surn ut1ac u1tal uta8m u1tan ut1ar u1tas ut1au u1te
+u8teic u4tent u8terf u6terin u4t3hei ut5ho ut1hu u1ti utine5 uti6q u1to
+uto5c u1tr ut1sa ut1s6p ut6stro u1tu utz5w u1u u1v uve5n uve3r4ä u1w
+u1xe u5ya uy5e6 u1yi u2z1eh u8zerh u5ö uße6n ußen5e 8vanb 6vang
+6varb var8d va6t5a va8tei va2t1r 2v1b 6v5c 6vd 1ve 6ve5g6 ver1 ver5b verb8l
+ve2re2 verg8 ve2ru8 ve1s ve2s3p ve3xe 2v1f 2v1g 6v5h vi6el vie6w5 vi1g4
+vi8leh vil6le.  8vint vi1ru vi1tr 2v1k 2v1l 2v1m 4v5n 8vo8f voi6le vol8lend
+vol8li v2or1 vo2re vo8rin vo2ro 2v1p 8vra v6re 2v1s 2v1t 2v1v 4v3w 2v1z
+waffe8 wa6g5n 1wah wah8n wa5la wal8din wal6ta wan4dr 5ware wa8ru war4za
+1was w5c w1d 5wech we6fl 1weg we8geng weg5h weg3l we2g1r weh6r5er 5weise
+weit3r wel2t welt3r we6rat 8werc 5werdu wer4fl 5werk.  wer4ka wer8ku wer4ta
+wer8term we2sp we8stend we6steu we8str we8stö wet8ta wich6s5t 1wid wi2dr
+wiede4 wieder5 wik6 wim6ma win4d3r 5wirt wisch5l 1wj 6wk 2w1l 8w1n wo1c
+woche6 wol6f wor6t5r 6ws2 w1sk 6w5t 5wunde.  wun6gr wu1sc wu2t1 6w5w wy5a
+wärme5 wä1sc 1xag x1ak x3a4men 8xamt x1an 8x1b x1c 1xe.  x3e4g 1xen
+xe1ro x1erz 1xes 8xf x1g 8x1h 1xi 8xid xi8so 4xiste x1k 6x1l x1m 8xn 1xo
+8x5o6d 8x3p2 x1r x1s6 8x1t x6tak x8terf x2t1h 1xu xu1e x5ul 6x3w x1z 5ya.
+y5an.  y5ank y1b y1c y6cha y4chia y1d yen6n y5ern y1g y5h y5in y1j y1k2
+y1lak yl1al yla8m y5lax y1le y1lo y5lu y8mn ym1p2 y3mu y1na yno2d yn1t
+y1on.  y1o4p y5ou ypo1 y1pr y8ps y1r yri3e yr1r2 y1s ys5iat ys8ty y1t y3w
+y1z yä8m z5a6b zab5l 8za6d 1zah za5is 4z3ak 6z1am 5zange.  8zanl 2z1ara
+6z5as z5auf 3zaun 2z1b 6z1c 6z1d 1ze ze4dik 4z3eff 8zein zei4ta zei8ters
+ze6la ze8lec zel8th 4zemp 6z5engel zen8zin 8zergä zer8i ze1ro zers8
+zerta8 zer8tab zer8tag 8zerz ze8ste zeu6gr 2z1ex 2z1f8 z1g 4z1h 1zi zi1en
+zi5es.  4z3imp zi1na 6z5inf 6z5inni zin6s5er 8zinsuf zist5r zi5th zi1tr
+6z1j 2z1k 2z1l 2z1m 6z1n 1zo zo6gl 4z3oh zo1on zor6na8 4z1p z5q 6z1r 2z1s8
+2z1t z4t3end z4t3hei z8thi 1zu zu3al zu1b4 zu1f2 6z5uhr zun2a 8zunem zunf8
+8zungl zu1o zup8fi zu1s8 zu1z 2z1v zw8 z1wal 5zweck zwei3s z1wel z1wer
+z6werg 8z5wes 1zwi zwi1s 6z1wo 1zy 2z1z zz8a zzi1s 1zä 1zö 6zöl.
+zö1le 1zü 2z1ü2b ä1a6 äb1l ä1che ä3chi äch8sc
+äch8sp ä5chu äck5a äd1a äd5era ä6d5ia ä1e ä5fa
+äf1l äft6s äg1h äg3le ä6g5nan äg5str ä1he ä1hi
+äh1le äh5ne 1ähnl äh1re äh5ri äh1ru ä1hu äh1w
+6äi ä1isc ä6ische ä5ism ä5j ä1k äl1c ä1le ä8lei
+äl6schl ämi1e äm8n äm8s ä5na 5änderu äne5i8 äng3l
+änk5l ä1no än6s5c ä1pa äp6s5c 3äq är1c ä1re
+äre8m 5ärgern är6gl ä1ri 3ärmel ä1ro ärt6s5 ä1ru
+3ärztl ä5rö ä6s5chen äsen8s äs1th äta8b ä1te
+äteri4 äter5it ä6thy ä1ti 3ätk ä1to ät8schl äts1p
+ä5tu äub1l äu1e 1äug äu8ga äu5i ä1um.  ä1us.
+1äuß ä1z ö1b ö1che ö5chi öch8stei öch8str öcht6
+5ö6dem 5öffn ö1he öh1l8 öh1re ö1hu ö1is ö1ke
+1ö2ko 1öl.  öl6k5l öl8pl ö1mu ö5na önig6s3 ö1no
+ö5o6t öpf3l öp6s5c ö1re ör8gli ö1ri ör8tr ö1ru
+5österr ö1te ö5th ö1ti ö1tu ö1v ö1w öwe8 ö2z
+üb6e2 3ü4ber1 üb1l üb1r 5ü2bu ü1che ü1chi ü8ch3l
+üch6s5c ü8ck ück1a ück5ers üd1a2 ü6deu üdi8t ü2d1o4
+üd5s6 üge4l5a üg1l üh5a ü1he ü8heh ü6h5erk üh1le
+üh1re üh1ru ü1hu üh1w ü3k ü1le ül4l5a ül8lo
+ül4ps ül6s5c ü1lu ün8da ün8fei ünk5l ün8za ün6zw
+ü5pi ü1re ü8rei ür8fl ür8fr ür8geng ü1ri ü1ro
+ür8sta ür8ster ü1ru üse8n ü8sta ü8stes ü6s5tete
+ü3ta ü1te ü1ti üt8tr ü1tu üt8zei ü1v ß1a8 5ßa.
+ß8as ß1b8 ß1c ß1d 1ße ß5ec 8ße8g 8ße8h 2ß1ei
+8ßem ß1f8 ß1g ß1h 1ßi ß1k ß1l ß1m ßmana8 ß1n
+ß1o ß1p8 ß5q ß1r ß1s2 ßst8 ß1ta ß1te ßt3hei
+ß1ti ß5to ß1tr 1ßu8 6ß5um ß1v ß1w ß1z
+</patterns>
+</hyphenation-info>
diff --git a/hyph/en.xml b/hyph/en.xml
new file mode 100644 (file)
index 0000000..7d7137e
--- /dev/null
@@ -0,0 +1,4510 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE hyphenation-info SYSTEM "hyphenation.dtd">
+<!-- 
+    Hyphenation information for US English
+    Created by Carlos Villegas from TeX's original (Liang's) hyphenation 
+    patterns.
+-->
+<hyphenation-info>
+
+<hyphen-char value="-"/> 
+<hyphen-min before="3" after="2"/>
+
+<classes>
+aA
+bB
+cC
+dD
+eE
+fF
+gG
+hH
+iI
+jJ
+kK
+lL
+mM
+nN
+oO
+pP
+qQ
+rR
+sS
+tT
+uU
+vV
+wW
+xX
+yY
+zZ
+</classes>
+
+<exceptions>
+<!-- % Do NOT make any alterations to this list! - - - DEK -->
+as-so-ciate
+as-so-ciates
+dec-li-na-tion
+oblig-a-tory
+phil-an-thropic
+present
+presents
+project
+projects
+reci-procity
+re-cog-ni-zance
+ref-or-ma-tion
+ret-ri-bu-tion
+ta-ble
+</exceptions>
+
+<patterns> 
+<!-- % The Plain TeX hyphenation tables [NOT TO BE CHANGED IN ANY WAY!] -->
+.ach4
+.ad4der
+.af1t
+.al3t
+.am5at
+.an5c
+.ang4
+.ani5m
+.ant4
+.an3te
+.anti5s
+.ar5s
+.ar4tie
+.ar4ty
+.as3c
+.as1p
+.as1s
+.aster5
+.atom5
+.au1d
+.av4i
+.awn4
+.ba4g
+.ba5na
+.bas4e
+.ber4
+.be5ra
+.be3sm
+.be5sto
+.bri2
+.but4ti
+.cam4pe
+.can5c
+.capa5b
+.car5ol
+.ca4t
+.ce4la
+.ch4
+.chill5i
+.ci2
+.cit5r
+.co3e
+.co4r
+.cor5ner
+.de4moi
+.de3o
+.de3ra
+.de3ri
+.des4c
+.dictio5
+.do4t
+.du4c
+.dumb5
+.earth5
+.eas3i
+.eb4
+.eer4
+.eg2
+.el5d
+.el3em
+.enam3
+.en3g
+.en3s
+.eq5ui5t
+.er4ri
+.es3
+.eu3
+.eye5
+.fes3
+.for5mer
+.ga2
+.ge2
+.gen3t4
+.ge5og
+.gi5a
+.gi4b
+.go4r
+.hand5i
+.han5k
+.he2
+.hero5i
+.hes3
+.het3
+.hi3b
+.hi3er
+.hon5ey
+.hon3o
+.hov5
+.id4l
+.idol3
+.im3m
+.im5pin
+.in1
+.in3ci
+.ine2
+.in2k
+.in3s
+.ir5r
+.is4i
+.ju3r
+.la4cy
+.la4m
+.lat5er
+.lath5
+.le2
+.leg5e
+.len4
+.lep5
+.lev1
+.li4g
+.lig5a
+.li2n
+.li3o
+.li4t
+.mag5a5
+.mal5o
+.man5a
+.mar5ti
+.me2
+.mer3c
+.me5ter
+.mis1
+.mist5i
+.mon3e
+.mo3ro
+.mu5ta
+.muta5b
+.ni4c
+.od2
+.odd5
+.of5te
+.or5ato
+.or3c
+.or1d
+.or3t
+.os3
+.os4tl
+.oth3
+.out3
+.ped5al
+.pe5te
+.pe5tit
+.pi4e
+.pio5n
+.pi2t
+.pre3m
+.ra4c
+.ran4t
+.ratio5na
+.ree2
+.re5mit
+.res2
+.re5stat
+.ri4g
+.rit5u
+.ro4q
+.ros5t
+.row5d
+.ru4d
+.sci3e
+.self5
+.sell5
+.se2n
+.se5rie
+.sh2
+.si2
+.sing4
+.st4
+.sta5bl
+.sy2
+.ta4
+.te4
+.ten5an
+.th2
+.ti2
+.til4
+.tim5o5
+.ting4
+.tin5k
+.ton4a
+.to4p
+.top5i
+.tou5s
+.trib5ut
+.un1a
+.un3ce
+.under5
+.un1e
+.un5k
+.un5o
+.un3u
+.up3
+.ure3
+.us5a
+.ven4de
+.ve5ra
+.wil5i
+.ye4
+4ab.
+a5bal
+a5ban
+abe2
+ab5erd
+abi5a
+ab5it5ab
+ab5lat
+ab5o5liz
+4abr
+ab5rog
+ab3ul
+a4car
+ac5ard
+ac5aro
+a5ceou
+ac1er
+a5chet
+4a2ci
+a3cie
+ac1in
+a3cio
+ac5rob
+act5if
+ac3ul
+ac4um
+a2d
+ad4din
+ad5er.
+2adi
+a3dia
+ad3ica
+adi4er
+a3dio
+a3dit
+a5diu
+ad4le
+ad3ow
+ad5ran
+ad4su
+4adu
+a3duc
+ad5um
+ae4r
+aeri4e
+a2f
+aff4
+a4gab
+aga4n
+ag5ell
+age4o
+4ageu
+ag1i
+4ag4l
+ag1n
+a2go
+3agog
+ag3oni
+a5guer
+ag5ul
+a4gy
+a3ha
+a3he
+ah4l
+a3ho
+ai2
+a5ia
+a3ic.
+ai5ly
+a4i4n
+ain5in
+ain5o
+ait5en
+a1j
+ak1en
+al5ab
+al3ad
+a4lar
+4aldi
+2ale
+al3end
+a4lenti
+a5le5o
+al1i
+al4ia.
+ali4e
+al5lev
+4allic
+4alm
+a5log.
+a4ly.
+4alys
+5a5lyst
+5alyt
+3alyz
+4ama
+am5ab
+am3ag
+ama5ra
+am5asc
+a4matis
+a4m5ato
+am5era
+am3ic
+am5if
+am5ily
+am1in
+ami4no
+a2mo
+a5mon
+amor5i
+amp5en
+a2n
+an3age
+3analy
+a3nar
+an3arc
+anar4i
+a3nati
+4and
+ande4s
+an3dis
+an1dl
+an4dow
+a5nee
+a3nen
+an5est.
+a3neu
+2ang
+ang5ie
+an1gl
+a4n1ic
+a3nies
+an3i3f
+an4ime
+a5nimi
+a5nine
+an3io
+a3nip
+an3ish
+an3it
+a3niu
+an4kli
+5anniz
+ano4
+an5ot
+anoth5
+an2sa
+an4sco
+an4sn
+an2sp
+ans3po
+an4st
+an4sur
+antal4
+an4tie
+4anto
+an2tr
+an4tw
+an3ua
+an3ul
+a5nur
+4ao
+apar4
+ap5at
+ap5ero
+a3pher
+4aphi
+a4pilla
+ap5illar
+ap3in
+ap3ita
+a3pitu
+a2pl
+apoc5
+ap5ola
+apor5i
+apos3t
+aps5es
+a3pu
+aque5
+2a2r
+ar3act
+a5rade
+ar5adis
+ar3al
+a5ramete
+aran4g
+ara3p
+ar4at
+a5ratio
+ar5ativ
+a5rau
+ar5av4
+araw4
+arbal4
+ar4chan
+ar5dine
+ar4dr
+ar5eas
+a3ree
+ar3ent
+a5ress
+ar4fi
+ar4fl
+ar1i
+ar5ial
+ar3ian
+a3riet
+ar4im
+ar5inat
+ar3io
+ar2iz
+ar2mi
+ar5o5d
+a5roni
+a3roo
+ar2p
+ar3q
+arre4
+ar4sa
+ar2sh
+4as.
+as4ab
+as3ant
+ashi4
+a5sia.
+a3sib
+a3sic
+5a5si4t
+ask3i
+as4l
+a4soc
+as5ph
+as4sh
+as3ten
+as1tr
+asur5a
+a2ta
+at3abl
+at5ac
+at3alo
+at5ap
+ate5c
+at5ech
+at3ego
+at3en.
+at3era
+ater5n
+a5terna
+at3est
+at5ev
+4ath
+ath5em
+a5then
+at4ho
+ath5om
+4ati.
+a5tia
+at5i5b
+at1ic
+at3if
+ation5ar
+at3itu
+a4tog
+a2tom
+at5omiz
+a4top
+a4tos
+a1tr
+at5rop
+at4sk
+at4tag
+at5te
+at4th
+a2tu
+at5ua
+at5ue
+at3ul
+at3ura
+a2ty
+au4b
+augh3
+au3gu
+au4l2
+aun5d
+au3r
+au5sib
+aut5en
+au1th
+a2va
+av3ag
+a5van
+ave4no
+av3era
+av5ern
+av5ery
+av1i
+avi4er
+av3ig
+av5oc
+a1vor
+3away
+aw3i
+aw4ly
+aws4
+ax4ic
+ax4id
+ay5al
+aye4
+ays4
+azi4er
+azz5i
+5ba.
+bad5ger
+ba4ge
+bal1a
+ban5dag
+ban4e
+ban3i
+barbi5
+bari4a
+bas4si
+1bat
+ba4z
+2b1b
+b2be
+b3ber
+bbi4na
+4b1d
+4be.
+beak4
+beat3
+4be2d
+be3da
+be3de
+be3di
+be3gi
+be5gu
+1bel
+be1li
+be3lo
+4be5m
+be5nig
+be5nu
+4bes4
+be3sp
+be5str
+3bet
+bet5iz
+be5tr
+be3tw
+be3w
+be5yo
+2bf
+4b3h
+bi2b
+bi4d
+3bie
+bi5en
+bi4er
+2b3if
+1bil
+bi3liz
+bina5r4
+bin4d
+bi5net
+bi3ogr
+bi5ou
+bi2t
+3bi3tio
+bi3tr
+3bit5ua
+b5itz
+b1j
+bk4
+b2l2
+blath5
+b4le.
+blen4
+5blesp
+b3lis
+b4lo
+blun4t
+4b1m
+4b3n
+bne5g
+3bod
+bod3i
+bo4e
+bol3ic
+bom4bi
+bon4a
+bon5at
+3boo
+5bor.
+4b1ora
+bor5d
+5bore
+5bori
+5bos4
+b5ota
+both5
+bo4to
+bound3
+4bp
+4brit
+broth3
+2b5s2
+bsor4
+2bt
+bt4l
+b4to
+b3tr
+buf4fer
+bu4ga
+bu3li
+bumi4
+bu4n
+bunt4i
+bu3re
+bus5ie
+buss4e
+5bust
+4buta
+3butio
+b5uto
+b1v
+4b5w
+5by.
+bys4
+1ca
+cab3in
+ca1bl
+cach4
+ca5den
+4cag4
+2c5ah
+ca3lat
+cal4la
+call5in
+4calo
+can5d
+can4e
+can4ic
+can5is
+can3iz
+can4ty
+cany4
+ca5per
+car5om
+cast5er
+cas5tig
+4casy
+ca4th
+4cativ
+cav5al
+c3c
+ccha5
+cci4a
+ccompa5
+ccon4
+ccou3t
+2ce.
+4ced.
+4ceden
+3cei
+5cel.
+3cell
+1cen
+3cenc
+2cen4e
+4ceni
+3cent
+3cep
+ce5ram
+4cesa
+3cessi
+ces5si5b
+ces5t
+cet4
+c5e4ta
+cew4
+2ch
+4ch.
+4ch3ab
+5chanic
+ch5a5nis
+che2
+cheap3
+4ched
+che5lo
+3chemi
+ch5ene
+ch3er.
+ch3ers
+4ch1in
+5chine.
+ch5iness
+5chini
+5chio
+3chit
+chi2z
+3cho2
+ch4ti
+1ci
+3cia
+ci2a5b
+cia5r
+ci5c
+4cier
+5cific.
+4cii
+ci4la
+3cili
+2cim
+2cin
+c4ina
+3cinat
+cin3em
+c1ing
+c5ing.
+5cino
+cion4
+4cipe
+ci3ph
+4cipic
+4cista
+4cisti
+2c1it
+cit3iz
+5ciz
+ck1
+ck3i
+1c4l4
+4clar
+c5laratio
+5clare
+cle4m
+4clic
+clim4
+cly4
+c5n
+1co
+co5ag
+coe2
+2cog
+co4gr
+coi4
+co3inc
+col5i
+5colo
+col3or
+com5er
+con4a
+c4one
+con3g
+con5t
+co3pa
+cop3ic
+co4pl
+4corb
+coro3n
+cos4e
+cov1
+cove4
+cow5a
+coz5e
+co5zi
+c1q
+cras5t
+5crat.
+5cratic
+cre3at
+5cred
+4c3reta
+cre4v
+cri2
+cri5f
+c4rin
+cris4
+5criti
+cro4pl
+crop5o
+cros4e
+cru4d
+4c3s2
+2c1t
+cta4b
+ct5ang
+c5tant
+c2te
+c3ter
+c4ticu
+ctim3i
+ctu4r
+c4tw
+cud5
+c4uf
+c4ui
+cu5ity
+5culi
+cul4tis
+3cultu
+cu2ma
+c3ume
+cu4mi
+3cun
+cu3pi
+cu5py
+cur5a4b
+cu5ria
+1cus
+cuss4i
+3c4ut
+cu4tie
+4c5utiv
+4cutr
+1cy
+cze4
+1d2a
+5da.
+2d3a4b
+dach4
+4daf
+2dag
+da2m2
+dan3g
+dard5
+dark5
+4dary
+3dat
+4dativ
+4dato
+5dav4
+dav5e
+5day
+d1b
+d5c
+d1d4
+2de.
+deaf5
+deb5it
+de4bon
+decan4
+de4cil
+de5com
+2d1ed
+4dee.
+de5if
+deli4e
+del5i5q
+de5lo
+d4em
+5dem.
+3demic
+dem5ic.
+de5mil
+de4mons
+demor5
+1den
+de4nar
+de3no
+denti5f
+de3nu
+de1p
+de3pa
+depi4
+de2pu
+d3eq
+d4erh
+5derm
+dern5iz
+der5s
+des2
+d2es.
+de1sc
+de2s5o
+des3ti
+de3str
+de4su
+de1t
+de2to
+de1v
+dev3il
+4dey
+4d1f
+d4ga
+d3ge4t
+dg1i
+d2gy
+d1h2
+5di.
+1d4i3a
+dia5b
+di4cam
+d4ice
+3dict
+3did
+5di3en
+d1if
+di3ge
+di4lato
+d1in
+1dina
+3dine.
+5dini
+di5niz
+1dio
+dio5g
+di4pl
+dir2
+di1re
+dirt5i
+dis1
+5disi
+d4is3t
+d2iti
+1di1v
+d1j
+d5k2
+4d5la
+3dle.
+3dled
+3dles.
+4dless
+2d3lo
+4d5lu
+2dly
+d1m
+4d1n4
+1do
+3do.
+do5de
+5doe
+2d5of
+d4og
+do4la
+doli4
+do5lor
+dom5iz
+do3nat
+doni4
+doo3d
+dop4p
+d4or
+3dos
+4d5out
+do4v
+3dox
+d1p
+1dr
+drag5on
+4drai
+dre4
+drea5r
+5dren
+dri4b
+dril4
+dro4p
+4drow
+5drupli
+4dry
+2d1s2
+ds4p
+d4sw
+d4sy
+d2th
+1du
+d1u1a
+du2c
+d1uca
+duc5er
+4duct.
+4ducts
+du5el
+du4g
+d3ule
+dum4be
+du4n
+4dup
+du4pe
+d1v
+d1w
+d2y
+5dyn
+dy4se
+dys5p
+e1a4b
+e3act
+ead1
+ead5ie
+ea4ge
+ea5ger
+ea4l
+eal5er
+eal3ou
+eam3er
+e5and
+ear3a
+ear4c
+ear5es
+ear4ic
+ear4il
+ear5k
+ear2t
+eart3e
+ea5sp
+e3ass
+east3
+ea2t
+eat5en
+eath3i
+e5atif
+e4a3tu
+ea2v
+eav3en
+eav5i
+eav5o
+2e1b
+e4bel.
+e4bels
+e4ben
+e4bit
+e3br
+e4cad
+ecan5c
+ecca5
+e1ce
+ec5essa
+ec2i
+e4cib
+ec5ificat
+ec5ifie
+ec5ify
+ec3im
+eci4t
+e5cite
+e4clam
+e4clus
+e2col
+e4comm
+e4compe
+e4conc
+e2cor
+ec3ora
+eco5ro
+e1cr
+e4crem
+ec4tan
+ec4te
+e1cu
+e4cul
+ec3ula
+2e2da
+4ed3d
+e4d1er
+ede4s
+4edi
+e3dia
+ed3ib
+ed3ica
+ed3im
+ed1it
+edi5z
+4edo
+e4dol
+edon2
+e4dri
+e4dul
+ed5ulo
+ee2c
+eed3i
+ee2f
+eel3i
+ee4ly
+ee2m
+ee4na
+ee4p1
+ee2s4
+eest4
+ee4ty
+e5ex
+e1f
+e4f3ere
+1eff
+e4fic
+5efici
+efil4
+e3fine
+ef5i5nite
+3efit
+efor5es
+e4fuse.
+4egal
+eger4
+eg5ib
+eg4ic
+eg5ing
+e5git5
+eg5n
+e4go.
+e4gos
+eg1ul
+e5gur
+5egy
+e1h4
+eher4
+ei2
+e5ic
+ei5d
+eig2
+ei5gl
+e3imb
+e3inf
+e1ing
+e5inst
+eir4d
+eit3e
+ei3th
+e5ity
+e1j
+e4jud
+ej5udi
+eki4n
+ek4la
+e1la
+e4la.
+e4lac
+elan4d
+el5ativ
+e4law
+elaxa4
+e3lea
+el5ebra
+5elec
+e4led
+el3ega
+e5len
+e4l1er
+e1les
+el2f
+el2i
+e3libe
+e4l5ic.
+el3ica
+e3lier
+el5igib
+e5lim
+e4l3ing
+e3lio
+e2lis
+el5ish
+e3liv3
+4ella
+el4lab
+ello4
+e5loc
+el5og
+el3op.
+el2sh
+el4ta
+e5lud
+el5ug
+e4mac
+e4mag
+e5man
+em5ana
+em5b
+e1me
+e2mel
+e4met
+em3ica
+emi4e
+em5igra
+em1in2
+em5ine
+em3i3ni
+e4mis
+em5ish
+e5miss
+em3iz
+5emniz
+emo4g
+emoni5o
+em3pi
+e4mul
+em5ula
+emu3n
+e3my
+en5amo
+e4nant
+ench4er
+en3dic
+e5nea
+e5nee
+en3em
+en5ero
+en5esi
+en5est
+en3etr
+e3new
+en5ics
+e5nie
+e5nil
+e3nio
+en3ish
+en3it
+e5niu
+5eniz
+4enn
+4eno
+eno4g
+e4nos
+en3ov
+en4sw
+ent5age
+4enthes
+en3ua
+en5uf
+e3ny.
+4en3z
+e5of
+eo2g
+e4oi4
+e3ol
+eop3ar
+e1or
+eo3re
+eo5rol
+eos4
+e4ot
+eo4to
+e5out
+e5ow
+e2pa
+e3pai
+ep5anc
+e5pel
+e3pent
+ep5etitio
+ephe4
+e4pli
+e1po
+e4prec
+ep5reca
+e4pred
+ep3reh
+e3pro
+e4prob
+ep4sh
+ep5ti5b
+e4put
+ep5uta
+e1q
+equi3l
+e4q3ui3s
+er1a
+era4b
+4erand
+er3ar
+4erati.
+2erb
+er4bl
+er3ch
+er4che
+2ere.
+e3real
+ere5co
+ere3in
+er5el.
+er3emo
+er5ena
+er5ence
+4erene
+er3ent
+ere4q
+er5ess
+er3est
+eret4
+er1h
+er1i
+e1ria4
+5erick
+e3rien
+eri4er
+er3ine
+e1rio
+4erit
+er4iu
+eri4v
+e4riva
+er3m4
+er4nis
+4ernit
+5erniz
+er3no
+2ero
+er5ob
+e5roc
+ero4r
+er1ou
+er1s
+er3set
+ert3er
+4ertl
+er3tw
+4eru
+eru4t
+5erwau
+e1s4a
+e4sage.
+e4sages
+es2c
+e2sca
+es5can
+e3scr
+es5cu
+e1s2e
+e2sec
+es5ecr
+es5enc
+e4sert.
+e4serts
+e4serva
+4esh
+e3sha
+esh5en
+e1si
+e2sic
+e2sid
+es5iden
+es5igna
+e2s5im
+es4i4n
+esis4te
+esi4u
+e5skin
+es4mi
+e2sol
+es3olu
+e2son
+es5ona
+e1sp
+es3per
+es5pira
+es4pre
+2ess
+es4si4b
+estan4
+es3tig
+es5tim
+4es2to
+e3ston
+2estr
+e5stro
+estruc5
+e2sur
+es5urr
+es4w
+eta4b
+eten4d
+e3teo
+ethod3
+et1ic
+e5tide
+etin4
+eti4no
+e5tir
+e5titio
+et5itiv
+4etn
+et5ona
+e3tra
+e3tre
+et3ric
+et5rif
+et3rog
+et5ros
+et3ua
+et5ym
+et5z
+4eu
+e5un
+e3up
+eu3ro
+eus4
+eute4
+euti5l
+eu5tr
+eva2p5
+e2vas
+ev5ast
+e5vea
+ev3ell
+evel3o
+e5veng
+even4i
+ev1er
+e5verb
+e1vi
+ev3id
+evi4l
+e4vin
+evi4v
+e5voc
+e5vu
+e1wa
+e4wag
+e5wee
+e3wh
+ewil5
+ew3ing
+e3wit
+1exp
+5eyc
+5eye.
+eys4
+1fa
+fa3bl
+fab3r
+fa4ce
+4fag
+fain4
+fall5e
+4fa4ma
+fam5is
+5far
+far5th
+fa3ta
+fa3the
+4fato
+fault5
+4f5b
+4fd
+4fe.
+feas4
+feath3
+fe4b
+4feca
+5fect
+2fed
+fe3li
+fe4mo
+fen2d
+fend5e
+fer1
+5ferr
+fev4
+4f1f
+f4fes
+f4fie
+f5fin.
+f2f5is
+f4fly
+f2fy
+4fh
+1fi
+fi3a
+2f3ic.
+4f3ical
+f3ican
+4ficate
+f3icen
+fi3cer
+fic4i
+5ficia
+5ficie
+4fics
+fi3cu
+fi5del
+fight5
+fil5i
+fill5in
+4fily
+2fin
+5fina
+fin2d5
+fi2ne
+f1in3g
+fin4n
+fis4ti
+f4l2
+f5less
+flin4
+flo3re
+f2ly5
+4fm
+4fn
+1fo
+5fon
+fon4de
+fon4t
+fo2r
+fo5rat
+for5ay
+fore5t
+for4i
+fort5a
+fos5
+4f5p
+fra4t
+f5rea
+fres5c
+fri2
+fril4
+frol5
+2f3s
+2ft
+f4to
+f2ty
+3fu
+fu5el
+4fug
+fu4min
+fu5ne
+fu3ri
+fusi4
+fus4s
+4futa
+1fy
+1ga
+gaf4
+5gal.
+3gali
+ga3lo
+2gam
+ga5met
+g5amo
+gan5is
+ga3niz
+gani5za
+4gano
+gar5n4
+gass4
+gath3
+4gativ
+4gaz
+g3b
+gd4
+2ge.
+2ged
+geez4
+gel4in
+ge5lis
+ge5liz
+4gely
+1gen
+ge4nat
+ge5niz
+4geno
+4geny
+1geo
+ge3om
+g4ery
+5gesi
+geth5
+4geto
+ge4ty
+ge4v
+4g1g2
+g2ge
+g3ger
+gglu5
+ggo4
+gh3in
+gh5out
+gh4to
+5gi.
+1gi4a
+gia5r
+g1ic
+5gicia
+g4ico
+gien5
+5gies.
+gil4
+g3imen
+3g4in.
+gin5ge
+5g4ins
+5gio
+3gir
+gir4l
+g3isl
+gi4u
+5giv
+3giz
+gl2
+gla4
+glad5i
+5glas
+1gle
+gli4b
+g3lig
+3glo
+glo3r
+g1m
+g4my
+gn4a
+g4na.
+gnet4t
+g1ni
+g2nin
+g4nio
+g1no
+g4non
+1go
+3go.
+gob5
+5goe
+3g4o4g
+go3is
+gon2
+4g3o3na
+gondo5
+go3ni
+5goo
+go5riz
+gor5ou
+5gos.
+gov1
+g3p
+1gr
+4grada
+g4rai
+gran2
+5graph.
+g5rapher
+5graphic
+4graphy
+4gray
+gre4n
+4gress.
+4grit
+g4ro
+gruf4
+gs2
+g5ste
+gth3
+gu4a
+3guard
+2gue
+5gui5t
+3gun
+3gus
+4gu4t
+g3w
+1gy
+2g5y3n
+gy5ra
+h3ab4l
+hach4
+hae4m
+hae4t
+h5agu
+ha3la
+hala3m
+ha4m
+han4ci
+han4cy
+5hand.
+han4g
+hang5er
+hang5o
+h5a5niz
+han4k
+han4te
+hap3l
+hap5t
+ha3ran
+ha5ras
+har2d
+hard3e
+har4le
+harp5en
+har5ter
+has5s
+haun4
+5haz
+haz3a
+h1b
+1head
+3hear
+he4can
+h5ecat
+h4ed
+he5do5
+he3l4i
+hel4lis
+hel4ly
+h5elo
+hem4p
+he2n
+hena4
+hen5at
+heo5r
+hep5
+h4era
+hera3p
+her4ba
+here5a
+h3ern
+h5erou
+h3ery
+h1es
+he2s5p
+he4t
+het4ed
+heu4
+h1f
+h1h
+hi5an
+hi4co
+high5
+h4il2
+himer4
+h4ina
+hion4e
+hi4p
+hir4l
+hi3ro
+hir4p
+hir4r
+his3el
+his4s
+hith5er
+hi2v
+4hk
+4h1l4
+hlan4
+h2lo
+hlo3ri
+4h1m
+hmet4
+2h1n
+h5odiz
+h5ods
+ho4g
+hoge4
+hol5ar
+3hol4e
+ho4ma
+home3
+hon4a
+ho5ny
+3hood
+hoon4
+hor5at
+ho5ris
+hort3e
+ho5ru
+hos4e
+ho5sen
+hos1p
+1hous
+house3
+hov5el
+4h5p
+4hr4
+hree5
+hro5niz
+hro3po
+4h1s2
+h4sh
+h4tar
+ht1en
+ht5es
+h4ty
+hu4g
+hu4min
+hun5ke
+hun4t
+hus3t4
+hu4t
+h1w
+h4wart
+hy3pe
+hy3ph
+hy2s
+2i1a
+i2al
+iam4
+iam5ete
+i2an
+4ianc
+ian3i
+4ian4t
+ia5pe
+iass4
+i4ativ
+ia4tric
+i4atu
+ibe4
+ib3era
+ib5ert
+ib5ia
+ib3in
+ib5it.
+ib5ite
+i1bl
+ib3li
+i5bo
+i1br
+i2b5ri
+i5bun
+4icam
+5icap
+4icar
+i4car.
+i4cara
+icas5
+i4cay
+iccu4
+4iceo
+4ich
+2ici
+i5cid
+ic5ina
+i2cip
+ic3ipa
+i4cly
+i2c5oc
+4i1cr
+5icra
+i4cry
+ic4te
+ictu2
+ic4t3ua
+ic3ula
+ic4um
+ic5uo
+i3cur
+2id
+i4dai
+id5anc
+id5d
+ide3al
+ide4s
+i2di
+id5ian
+idi4ar
+i5die
+id3io
+idi5ou
+id1it
+id5iu
+i3dle
+i4dom
+id3ow
+i4dr
+i2du
+id5uo
+2ie4
+ied4e
+5ie5ga
+ield3
+ien5a4
+ien4e
+i5enn
+i3enti
+i1er.
+i3esc
+i1est
+i3et
+4if.
+if5ero
+iff5en
+if4fr
+4ific.
+i3fie
+i3fl
+4ift
+2ig
+iga5b
+ig3era
+ight3i
+4igi
+i3gib
+ig3il
+ig3in
+ig3it
+i4g4l
+i2go
+ig3or
+ig5ot
+i5gre
+igu5i
+ig1ur
+i3h
+4i5i4
+i3j
+4ik
+i1la
+il3a4b
+i4lade
+i2l5am
+ila5ra
+i3leg
+il1er
+ilev4
+il5f
+il1i
+il3ia
+il2ib
+il3io
+il4ist
+2ilit
+il2iz
+ill5ab
+4iln
+il3oq
+il4ty
+il5ur
+il3v
+i4mag
+im3age
+ima5ry
+imenta5r
+4imet
+im1i
+im5ida
+imi5le
+i5mini
+4imit
+im4ni
+i3mon
+i2mu
+im3ula
+2in.
+i4n3au
+4inav
+incel4
+in3cer
+4ind
+in5dling
+2ine
+i3nee
+iner4ar
+i5ness
+4inga
+4inge
+in5gen
+4ingi
+in5gling
+4ingo
+4ingu
+2ini
+i5ni.
+i4nia
+in3io
+in1is
+i5nite.
+5initio
+in3ity
+4ink
+4inl
+2inn
+2i1no
+i4no4c
+ino4s
+i4not
+2ins
+in3se
+insur5a
+2int.
+2in4th
+in1u
+i5nus
+4iny
+2io
+4io.
+ioge4
+io2gr
+i1ol
+io4m
+ion3at
+ion4ery
+ion3i
+io5ph
+ior3i
+i4os
+io5th
+i5oti
+io4to
+i4our
+2ip
+ipe4
+iphras4
+ip3i
+ip4ic
+ip4re4
+ip3ul
+i3qua
+iq5uef
+iq3uid
+iq3ui3t
+4ir
+i1ra
+ira4b
+i4rac
+ird5e
+ire4de
+i4ref
+i4rel4
+i4res
+ir5gi
+ir1i
+iri5de
+ir4is
+iri3tu
+5i5r2iz
+ir4min
+iro4g
+5iron.
+ir5ul
+2is.
+is5ag
+is3ar
+isas5
+2is1c
+is3ch
+4ise
+is3er
+3isf
+is5han
+is3hon
+ish5op
+is3ib
+isi4d
+i5sis
+is5itiv
+4is4k
+islan4
+4isms
+i2so
+iso5mer
+is1p
+is2pi
+is4py
+4is1s
+is4sal
+issen4
+is4ses
+is4ta.
+is1te
+is1ti
+ist4ly
+4istral
+i2su
+is5us
+4ita.
+ita4bi
+i4tag
+4ita5m
+i3tan
+i3tat
+2ite
+it3era
+i5teri
+it4es
+2ith
+i1ti
+4itia
+4i2tic
+it3ica
+5i5tick
+it3ig
+it5ill
+i2tim
+2itio
+4itis
+i4tism
+i2t5o5m
+4iton
+i4tram
+it5ry
+4itt
+it3uat
+i5tud
+it3ul
+4itz.
+i1u
+2iv
+iv3ell
+iv3en.
+i4v3er.
+i4vers.
+iv5il.
+iv5io
+iv1it
+i5vore
+iv3o3ro
+i4v3ot
+4i5w
+ix4o
+4iy
+4izar
+izi4
+5izont
+5ja
+jac4q
+ja4p
+1je
+jer5s
+4jestie
+4jesty
+jew3
+jo4p
+5judg
+3ka.
+k3ab
+k5ag
+kais4
+kal4
+k1b
+k2ed
+1kee
+ke4g
+ke5li
+k3en4d
+k1er
+kes4
+k3est.
+ke4ty
+k3f
+kh4
+k1i
+5ki.
+5k2ic
+k4ill
+kilo5
+k4im
+k4in.
+kin4de
+k5iness
+kin4g
+ki4p
+kis4
+k5ish
+kk4
+k1l
+4kley
+4kly
+k1m
+k5nes
+1k2no
+ko5r
+kosh4
+k3ou
+kro5n
+4k1s2
+k4sc
+ks4l
+k4sy
+k5t
+k1w
+lab3ic
+l4abo
+laci4
+l4ade
+la3dy
+lag4n
+lam3o
+3land
+lan4dl
+lan5et
+lan4te
+lar4g
+lar3i
+las4e
+la5tan
+4lateli
+4lativ
+4lav
+la4v4a
+2l1b
+lbin4
+4l1c2
+lce4
+l3ci
+2ld
+l2de
+ld4ere
+ld4eri
+ldi4
+ld5is
+l3dr
+l4dri
+le2a
+le4bi
+left5
+5leg.
+5legg
+le4mat
+lem5atic
+4len.
+3lenc
+5lene.
+1lent
+le3ph
+le4pr
+lera5b
+ler4e
+3lerg
+3l4eri
+l4ero
+les2
+le5sco
+5lesq
+3less
+5less.
+l3eva
+lev4er.
+lev4era
+lev4ers
+3ley
+4leye
+2lf
+l5fr
+4l1g4
+l5ga
+lgar3
+l4ges
+lgo3
+2l3h
+li4ag
+li2am
+liar5iz
+li4as
+li4ato
+li5bi
+5licio
+li4cor
+4lics
+4lict.
+l4icu
+l3icy
+l3ida
+lid5er
+3lidi
+lif3er
+l4iff
+li4fl
+5ligate
+3ligh
+li4gra
+3lik
+4l4i4l
+lim4bl
+lim3i
+li4mo
+l4im4p
+l4ina
+1l4ine
+lin3ea
+lin3i
+link5er
+li5og
+4l4iq
+lis4p
+l1it
+l2it.
+5litica
+l5i5tics
+liv3er
+l1iz
+4lj
+lka3
+l3kal
+lka4t
+l1l
+l4law
+l2le
+l5lea
+l3lec
+l3leg
+l3lel
+l3le4n
+l3le4t
+ll2i
+l2lin4
+l5lina
+ll4o
+lloqui5
+ll5out
+l5low
+2lm
+l5met
+lm3ing
+l4mod
+lmon4
+2l1n2
+3lo.
+lob5al
+lo4ci
+4lof
+3logic
+l5ogo
+3logu
+lom3er
+5long
+lon4i
+l3o3niz
+lood5
+5lope.
+lop3i
+l3opm
+lora4
+lo4rato
+lo5rie
+lor5ou
+5los.
+los5et
+5losophiz
+5losophy
+los4t
+lo4ta
+loun5d
+2lout
+4lov
+2lp
+lpa5b
+l3pha
+l5phi
+lp5ing
+l3pit
+l4pl
+l5pr
+4l1r
+2l1s2
+l4sc
+l2se
+l4sie
+4lt
+lt5ag
+ltane5
+l1te
+lten4
+ltera4
+lth3i
+l5ties.
+ltis4
+l1tr
+ltu2
+ltur3a
+lu5a
+lu3br
+luch4
+lu3ci
+lu3en
+luf4
+lu5id
+lu4ma
+5lumi
+l5umn.
+5lumnia
+lu3o
+luo3r
+4lup
+luss4
+lus3te
+1lut
+l5ven
+l5vet4
+2l1w
+1ly
+4lya
+4lyb
+ly5me
+ly3no
+2lys4
+l5yse
+1ma
+2mab
+ma2ca
+ma5chine
+ma4cl
+mag5in
+5magn
+2mah
+maid5
+4mald
+ma3lig
+ma5lin
+mal4li
+mal4ty
+5mania
+man5is
+man3iz
+4map
+ma5rine.
+ma5riz
+mar4ly
+mar3v
+ma5sce
+mas4e
+mas1t
+5mate
+math3
+ma3tis
+4matiza
+4m1b
+mba4t5
+m5bil
+m4b3ing
+mbi4v
+4m5c
+4me.
+2med
+4med.
+5media
+me3die
+m5e5dy
+me2g
+mel5on
+mel4t
+me2m
+mem1o3
+1men
+men4a
+men5ac
+men4de
+4mene
+men4i
+mens4
+mensu5
+3ment
+men4te
+me5on
+m5ersa
+2mes
+3mesti
+me4ta
+met3al
+me1te
+me5thi
+m4etr
+5metric
+me5trie
+me3try
+me4v
+4m1f
+2mh
+5mi.
+mi3a
+mid4a
+mid4g
+mig4
+3milia
+m5i5lie
+m4ill
+min4a
+3mind
+m5inee
+m4ingl
+min5gli
+m5ingly
+min4t
+m4inu
+miot4
+m2is
+mis4er.
+mis5l
+mis4ti
+m5istry
+4mith
+m2iz
+4mk
+4m1l
+m1m
+mma5ry
+4m1n
+mn4a
+m4nin
+mn4o
+1mo
+4mocr
+5mocratiz
+mo2d1
+mo4go
+mois2
+moi5se
+4mok
+mo5lest
+mo3me
+mon5et
+mon5ge
+moni3a
+mon4ism
+mon4ist
+mo3niz
+monol4
+mo3ny.
+mo2r
+4mora.
+mos2
+mo5sey
+mo3sp
+moth3
+m5ouf
+3mous
+mo2v
+4m1p
+mpara5
+mpa5rab
+mpar5i
+m3pet
+mphas4
+m2pi
+mpi4a
+mp5ies
+m4p1in
+m5pir
+mp5is
+mpo3ri
+mpos5ite
+m4pous
+mpov5
+mp4tr
+m2py
+4m3r
+4m1s2
+m4sh
+m5si
+4mt
+1mu
+mula5r4
+5mult
+multi3
+3mum
+mun2
+4mup
+mu4u
+4mw
+1na
+2n1a2b
+n4abu
+4nac.
+na4ca
+n5act
+nag5er.
+nak4
+na4li
+na5lia
+4nalt
+na5mit
+n2an
+nanci4
+nan4it
+nank4
+nar3c
+4nare
+nar3i
+nar4l
+n5arm
+n4as
+nas4c
+nas5ti
+n2at
+na3tal
+nato5miz
+n2au
+nau3se
+3naut
+nav4e
+4n1b4
+ncar5
+n4ces.
+n3cha
+n5cheo
+n5chil
+n3chis
+nc1in
+nc4it
+ncour5a
+n1cr
+n1cu
+n4dai
+n5dan
+n1de
+nd5est.
+ndi4b
+n5d2if
+n1dit
+n3diz
+n5duc
+ndu4r
+nd2we
+2ne.
+n3ear
+ne2b
+neb3u
+ne2c
+5neck
+2ned
+ne4gat
+neg5ativ
+5nege
+ne4la
+nel5iz
+ne5mi
+ne4mo
+1nen
+4nene
+3neo
+ne4po
+ne2q
+n1er
+nera5b
+n4erar
+n2ere
+n4er5i
+ner4r
+1nes
+2nes.
+4nesp
+2nest
+4nesw
+3netic
+ne4v
+n5eve
+ne4w
+n3f
+n4gab
+n3gel
+nge4n4e
+n5gere
+n3geri
+ng5ha
+n3gib
+ng1in
+n5git
+n4gla
+ngov4
+ng5sh
+n1gu
+n4gum
+n2gy
+4n1h4
+nha4
+nhab3
+nhe4
+3n4ia
+ni3an
+ni4ap
+ni3ba
+ni4bl
+ni4d
+ni5di
+ni4er
+ni2fi
+ni5ficat
+n5igr
+nik4
+n1im
+ni3miz
+n1in
+5nine.
+nin4g
+ni4o
+5nis.
+nis4ta
+n2it
+n4ith
+3nitio
+n3itor
+ni3tr
+n1j
+4nk2
+n5kero
+n3ket
+nk3in
+n1kl
+4n1l
+n5m
+nme4
+nmet4
+4n1n2
+nne4
+nni3al
+nni4v
+nob4l
+no3ble
+n5ocl
+4n3o2d
+3noe
+4nog
+noge4
+nois5i
+no5l4i
+5nologis
+3nomic
+n5o5miz
+no4mo
+no3my
+no4n
+non4ag
+non5i
+n5oniz
+4nop
+5nop5o5li
+nor5ab
+no4rary
+4nosc
+nos4e
+nos5t
+no5ta
+1nou
+3noun
+nov3el3
+nowl3
+n1p4
+npi4
+npre4c
+n1q
+n1r
+nru4
+2n1s2
+ns5ab
+nsati4
+ns4c
+n2se
+n4s3es
+nsid1
+nsig4
+n2sl
+ns3m
+n4soc
+ns4pe
+n5spi
+nsta5bl
+n1t
+nta4b
+nter3s
+nt2i
+n5tib
+nti4er
+nti2f
+n3tine
+n4t3ing
+nti4p
+ntrol5li
+nt4s
+ntu3me
+nu1a
+nu4d
+nu5en
+nuf4fe
+n3uin
+3nu3it
+n4um
+nu1me
+n5umi
+3nu4n
+n3uo
+nu3tr
+n1v2
+n1w4
+nym4
+nyp4
+4nz
+n3za
+4oa
+oad3
+o5a5les
+oard3
+oas4e
+oast5e
+oat5i
+ob3a3b
+o5bar
+obe4l
+o1bi
+o2bin
+ob5ing
+o3br
+ob3ul
+o1ce
+och4
+o3chet
+ocif3
+o4cil
+o4clam
+o4cod
+oc3rac
+oc5ratiz
+ocre3
+5ocrit
+octor5a
+oc3ula
+o5cure
+od5ded
+od3ic
+odi3o
+o2do4
+odor3
+od5uct.
+od5ucts
+o4el
+o5eng
+o3er
+oe4ta
+o3ev
+o2fi
+of5ite
+ofit4t
+o2g5a5r
+og5ativ
+o4gato
+o1ge
+o5gene
+o5geo
+o4ger
+o3gie
+1o1gis
+og3it
+o4gl
+o5g2ly
+3ogniz
+o4gro
+ogu5i
+1ogy
+2ogyn
+o1h2
+ohab5
+oi2
+oic3es
+oi3der
+oiff4
+oig4
+oi5let
+o3ing
+oint5er
+o5ism
+oi5son
+oist5en
+oi3ter
+o5j
+2ok
+o3ken
+ok5ie
+o1la
+o4lan
+olass4
+ol2d
+old1e
+ol3er
+o3lesc
+o3let
+ol4fi
+ol2i
+o3lia
+o3lice
+ol5id.
+o3li4f
+o5lil
+ol3ing
+o5lio
+o5lis.
+ol3ish
+o5lite
+o5litio
+o5liv
+olli4e
+ol5ogiz
+olo4r
+ol5pl
+ol2t
+ol3ub
+ol3ume
+ol3un
+o5lus
+ol2v
+o2ly
+om5ah
+oma5l
+om5atiz
+om2be
+om4bl
+o2me
+om3ena
+om5erse
+o4met
+om5etry
+o3mia
+om3ic.
+om3ica
+o5mid
+om1in
+o5mini
+5ommend
+omo4ge
+o4mon
+om3pi
+ompro5
+o2n
+on1a
+on4ac
+o3nan
+on1c
+3oncil
+2ond
+on5do
+o3nen
+on5est
+on4gu
+on1ic
+o3nio
+on1is
+o5niu
+on3key
+on4odi
+on3omy
+on3s
+onspi4
+onspir5a
+onsu4
+onten4
+on3t4i
+ontif5
+on5um
+onva5
+oo2
+ood5e
+ood5i
+oo4k
+oop3i
+o3ord
+oost5
+o2pa
+ope5d
+op1er
+3opera
+4operag
+2oph
+o5phan
+o5pher
+op3ing
+o3pit
+o5pon
+o4posi
+o1pr
+op1u
+opy5
+o1q
+o1ra
+o5ra.
+o4r3ag
+or5aliz
+or5ange
+ore5a
+o5real
+or3ei
+ore5sh
+or5est.
+orew4
+or4gu
+4o5ria
+or3ica
+o5ril
+or1in
+o1rio
+or3ity
+o3riu
+or2mi
+orn2e
+o5rof
+or3oug
+or5pe
+3orrh
+or4se
+ors5en
+orst4
+or3thi
+or3thy
+or4ty
+o5rum
+o1ry
+os3al
+os2c
+os4ce
+o3scop
+4oscopi
+o5scr
+os4i4e
+os5itiv
+os3ito
+os3ity
+osi4u
+os4l
+o2so
+os4pa
+os4po
+os2ta
+o5stati
+os5til
+os5tit
+o4tan
+otele4g
+ot3er.
+ot5ers
+o4tes
+4oth
+oth5esi
+oth3i4
+ot3ic.
+ot5ica
+o3tice
+o3tif
+o3tis
+oto5s
+ou2
+ou3bl
+ouch5i
+ou5et
+ou4l
+ounc5er
+oun2d
+ou5v
+ov4en
+over4ne
+over3s
+ov4ert
+o3vis
+oviti4
+o5v4ol
+ow3der
+ow3el
+ow5est
+ow1i
+own5i
+o4wo
+oy1a
+1pa
+pa4ca
+pa4ce
+pac4t
+p4ad
+5pagan
+p3agat
+p4ai
+pain4
+p4al
+pan4a
+pan3el
+pan4ty
+pa3ny
+pa1p
+pa4pu
+para5bl
+par5age
+par5di
+3pare
+par5el
+p4a4ri
+par4is
+pa2te
+pa5ter
+5pathic
+pa5thy
+pa4tric
+pav4
+3pay
+4p1b
+pd4
+4pe.
+3pe4a
+pear4l
+pe2c
+2p2ed
+3pede
+3pedi
+pedia4
+ped4ic
+p4ee
+pee4d
+pek4
+pe4la
+peli4e
+pe4nan
+p4enc
+pen4th
+pe5on
+p4era.
+pera5bl
+p4erag
+p4eri
+peri5st
+per4mal
+perme5
+p4ern
+per3o
+per3ti
+pe5ru
+per1v
+pe2t
+pe5ten
+pe5tiz
+4pf
+4pg
+4ph.
+phar5i
+phe3no
+ph4er
+ph4es.
+ph1ic
+5phie
+ph5ing
+5phisti
+3phiz
+ph2l
+3phob
+3phone
+5phoni
+pho4r
+4phs
+ph3t
+5phu
+1phy
+pi3a
+pian4
+pi4cie
+pi4cy
+p4id
+p5ida
+pi3de
+5pidi
+3piec
+pi3en
+pi4grap
+pi3lo
+pi2n
+p4in.
+pind4
+p4ino
+3pi1o
+pion4
+p3ith
+pi5tha
+pi2tu
+2p3k2
+1p2l2
+3plan
+plas5t
+pli3a
+pli5er
+4plig
+pli4n
+ploi4
+plu4m
+plum4b
+4p1m
+2p3n
+po4c
+5pod.
+po5em
+po3et5
+5po4g
+poin2
+5point
+poly5t
+po4ni
+po4p
+1p4or
+po4ry
+1pos
+pos1s
+p4ot
+po4ta
+5poun
+4p1p
+ppa5ra
+p2pe
+p4ped
+p5pel
+p3pen
+p3per
+p3pet
+ppo5site
+pr2
+pray4e
+5preci
+pre5co
+pre3em
+pref5ac
+pre4la
+pre3r
+p3rese
+3press
+pre5ten
+pre3v
+5pri4e
+prin4t3
+pri4s
+pris3o
+p3roca
+prof5it
+pro3l
+pros3e
+pro1t
+2p1s2
+p2se
+ps4h
+p4sib
+2p1t
+pt5a4b
+p2te
+p2th
+pti3m
+ptu4r
+p4tw
+pub3
+pue4
+puf4
+pul3c
+pu4m
+pu2n
+pur4r
+5pus
+pu2t
+5pute
+put3er
+pu3tr
+put4ted
+put4tin
+p3w
+qu2
+qua5v
+2que.
+3quer
+3quet
+2rab
+ra3bi
+rach4e
+r5acl
+raf5fi
+raf4t
+r2ai
+ra4lo
+ram3et
+r2ami
+rane5o
+ran4ge
+r4ani
+ra5no
+rap3er
+3raphy
+rar5c
+rare4
+rar5ef
+4raril
+r2as
+ration4
+rau4t
+ra5vai
+rav3el
+ra5zie
+r1b
+r4bab
+r4bag
+rbi2
+rbi4f
+r2bin
+r5bine
+rb5ing.
+rb4o
+r1c
+r2ce
+rcen4
+r3cha
+rch4er
+r4ci4b
+rc4it
+rcum3
+r4dal
+rd2i
+rdi4a
+rdi4er
+rdin4
+rd3ing
+2re.
+re1al
+re3an
+re5arr
+5reav
+re4aw
+r5ebrat
+rec5oll
+rec5ompe
+re4cre
+2r2ed
+re1de
+re3dis
+red5it
+re4fac
+re2fe
+re5fer.
+re3fi
+re4fy
+reg3is
+re5it
+re1li
+re5lu
+r4en4ta
+ren4te
+re1o
+re5pin
+re4posi
+re1pu
+r1er4
+r4eri
+rero4
+re5ru
+r4es.
+re4spi
+ress5ib
+res2t
+re5stal
+re3str
+re4ter
+re4ti4z
+re3tri
+reu2
+re5uti
+rev2
+re4val
+rev3el
+r5ev5er.
+re5vers
+re5vert
+re5vil
+rev5olu
+re4wh
+r1f
+rfu4
+r4fy
+rg2
+rg3er
+r3get
+r3gic
+rgi4n
+rg3ing
+r5gis
+r5git
+r1gl
+rgo4n
+r3gu
+rh4
+4rh.
+4rhal
+ri3a
+ria4b
+ri4ag
+r4ib
+rib3a
+ric5as
+r4ice
+4rici
+5ricid
+ri4cie
+r4ico
+rid5er
+ri3enc
+ri3ent
+ri1er
+ri5et
+rig5an
+5rigi
+ril3iz
+5riman
+rim5i
+3rimo
+rim4pe
+r2ina
+5rina.
+rin4d
+rin4e
+rin4g
+ri1o
+5riph
+riph5e
+ri2pl
+rip5lic
+r4iq
+r2is
+r4is.
+ris4c
+r3ish
+ris4p
+ri3ta3b
+r5ited.
+rit5er.
+rit5ers
+rit3ic
+ri2tu
+rit5ur
+riv5el
+riv3et
+riv3i
+r3j
+r3ket
+rk4le
+rk4lin
+r1l
+rle4
+r2led
+r4lig
+r4lis
+rl5ish
+r3lo4
+r1m
+rma5c
+r2me
+r3men
+rm5ers
+rm3ing
+r4ming.
+r4mio
+r3mit
+r4my
+r4nar
+r3nel
+r4ner
+r5net
+r3ney
+r5nic
+r1nis4
+r3nit
+r3niv
+rno4
+r4nou
+r3nu
+rob3l
+r2oc
+ro3cr
+ro4e
+ro1fe
+ro5fil
+rok2
+ro5ker
+5role.
+rom5ete
+rom4i
+rom4p
+ron4al
+ron4e
+ro5n4is
+ron4ta
+1room
+5root
+ro3pel
+rop3ic
+ror3i
+ro5ro
+ros5per
+ros4s
+ro4the
+ro4ty
+ro4va
+rov5el
+rox5
+r1p
+r4pea
+r5pent
+rp5er.
+r3pet
+rp4h4
+rp3ing
+r3po
+r1r4
+rre4c
+rre4f
+r4reo
+rre4st
+rri4o
+rri4v
+rron4
+rros4
+rrys4
+4rs2
+r1sa
+rsa5ti
+rs4c
+r2se
+r3sec
+rse4cr
+rs5er.
+rs3es
+rse5v2
+r1sh
+r5sha
+r1si
+r4si4b
+rson3
+r1sp
+r5sw
+rtach4
+r4tag
+r3teb
+rten4d
+rte5o
+r1ti
+rt5ib
+rti4d
+r4tier
+r3tig
+rtil3i
+rtil4l
+r4tily
+r4tist
+r4tiv
+r3tri
+rtroph4
+rt4sh
+ru3a
+ru3e4l
+ru3en
+ru4gl
+ru3in
+rum3pl
+ru2n
+runk5
+run4ty
+r5usc
+ruti5n
+rv4e
+rvel4i
+r3ven
+rv5er.
+r5vest
+r3vey
+r3vic
+rvi4v
+r3vo
+r1w
+ry4c
+5rynge
+ry3t
+sa2
+2s1ab
+5sack
+sac3ri
+s3act
+5sai
+salar4
+sal4m
+sa5lo
+sal4t
+3sanc
+san4de
+s1ap
+sa5ta
+5sa3tio
+sat3u
+sau4
+sa5vor
+5saw
+4s5b
+scan4t5
+sca4p
+scav5
+s4ced
+4scei
+s4ces
+sch2
+s4cho
+3s4cie
+5scin4d
+scle5
+s4cli
+scof4
+4scopy
+scour5a
+s1cu
+4s5d
+4se.
+se4a
+seas4
+sea5w
+se2c3o
+3sect
+4s4ed
+se4d4e
+s5edl
+se2g
+seg3r
+5sei
+se1le
+5self
+5selv
+4seme
+se4mol
+sen5at
+4senc
+sen4d
+s5ened
+sen5g
+s5enin
+4sentd
+4sentl
+sep3a3
+4s1er.
+s4erl
+ser4o
+4servo
+s1e4s
+se5sh
+ses5t
+5se5um
+5sev
+sev3en
+sew4i
+5sex
+4s3f
+2s3g
+s2h
+2sh.
+sh1er
+5shev
+sh1in
+sh3io
+3ship
+shiv5
+sho4
+sh5old
+shon3
+shor4
+short5
+4shw
+si1b
+s5icc
+3side.
+5sides
+5sidi
+si5diz
+4signa
+sil4e
+4sily
+2s1in
+s2ina
+5sine.
+s3ing
+1sio
+5sion
+sion5a
+si2r
+sir5a
+1sis
+3sitio
+5siu
+1siv
+5siz
+sk2
+4ske
+s3ket
+sk5ine
+sk5ing
+s1l2
+s3lat
+s2le
+slith5
+2s1m
+s3ma
+small3
+sman3
+smel4
+s5men
+5smith
+smol5d4
+s1n4
+1so
+so4ce
+soft3
+so4lab
+sol3d2
+so3lic
+5solv
+3som
+3s4on.
+sona4
+son4g
+s4op
+5sophic
+s5ophiz
+s5ophy
+sor5c
+sor5d
+4sov
+so5vi
+2spa
+5spai
+spa4n
+spen4d
+2s5peo
+2sper
+s2phe
+3spher
+spho5
+spil4
+sp5ing
+4spio
+s4ply
+s4pon
+spor4
+4spot
+squal4l
+s1r
+2ss
+s1sa
+ssas3
+s2s5c
+s3sel
+s5seng
+s4ses.
+s5set
+s1si
+s4sie
+ssi4er
+ss5ily
+s4sl
+ss4li
+s4sn
+sspend4
+ss2t
+ssur5a
+ss5w
+2st.
+s2tag
+s2tal
+stam4i
+5stand
+s4ta4p
+5stat.
+s4ted
+stern5i
+s5tero
+ste2w
+stew5a
+s3the
+st2i
+s4ti.
+s5tia
+s1tic
+5stick
+s4tie
+s3tif
+st3ing
+5stir
+s1tle
+5stock
+stom3a
+5stone
+s4top
+3store
+st4r
+s4trad
+5stratu
+s4tray
+s4trid
+4stry
+4st3w
+s2ty
+1su
+su1al
+su4b3
+su2g3
+su5is
+suit3
+s4ul
+su2m
+sum3i
+su2n
+su2r
+4sv
+sw2
+4swo
+s4y
+4syc
+3syl
+syn5o
+sy5rin
+1ta
+3ta.
+2tab
+ta5bles
+5taboliz
+4taci
+ta5do
+4taf4
+tai5lo
+ta2l
+ta5la
+tal5en
+tal3i
+4talk
+tal4lis
+ta5log
+ta5mo
+tan4de
+tanta3
+ta5per
+ta5pl
+tar4a
+4tarc
+4tare
+ta3riz
+tas4e
+ta5sy
+4tatic
+ta4tur
+taun4
+tav4
+2taw
+tax4is
+2t1b
+4tc
+t4ch
+tch5et
+4t1d
+4te.
+tead4i
+4teat
+tece4
+5tect
+2t1ed
+te5di
+1tee
+teg4
+te5ger
+te5gi
+3tel.
+teli4
+5tels
+te2ma2
+tem3at
+3tenan
+3tenc
+3tend
+4tenes
+1tent
+ten4tag
+1teo
+te4p
+te5pe
+ter3c
+5ter3d
+1teri
+ter5ies
+ter3is
+teri5za
+5ternit
+ter5v
+4tes.
+4tess
+t3ess.
+teth5e
+3teu
+3tex
+4tey
+2t1f
+4t1g
+2th.
+than4
+th2e
+4thea
+th3eas
+the5at
+the3is
+3thet
+th5ic.
+th5ica
+4thil
+5think
+4thl
+th5ode
+5thodic
+4thoo
+thor5it
+tho5riz
+2ths
+1tia
+ti4ab
+ti4ato
+2ti2b
+4tick
+t4ico
+t4ic1u
+5tidi
+3tien
+tif2
+ti5fy
+2tig
+5tigu
+till5in
+1tim
+4timp
+tim5ul
+2t1in
+t2ina
+3tine.
+3tini
+1tio
+ti5oc
+tion5ee
+5tiq
+ti3sa
+3tise
+tis4m
+ti5so
+tis4p
+5tistica
+ti3tl
+ti4u
+1tiv
+tiv4a
+1tiz
+ti3za
+ti3zen
+2tl
+t5la
+tlan4
+3tle.
+3tled
+3tles.
+t5let.
+t5lo
+4t1m
+tme4
+2t1n2
+1to
+to3b
+to5crat
+4todo
+2tof
+to2gr
+to5ic
+to2ma
+tom4b
+to3my
+ton4ali
+to3nat
+4tono
+4tony
+to2ra
+to3rie
+tor5iz
+tos2
+5tour
+4tout
+to3war
+4t1p
+1tra
+tra3b
+tra5ch
+traci4
+trac4it
+trac4te
+tras4
+tra5ven
+trav5es5
+tre5f
+tre4m
+trem5i
+5tria
+tri5ces
+5tricia
+4trics
+2trim
+tri4v
+tro5mi
+tron5i
+4trony
+tro5phe
+tro3sp
+tro3v
+tru5i
+trus4
+4t1s2
+t4sc
+tsh4
+t4sw
+4t3t2
+t4tes
+t5to
+ttu4
+1tu
+tu1a
+tu3ar
+tu4bi
+tud2
+4tue
+4tuf4
+5tu3i
+3tum
+tu4nis
+2t3up.
+3ture
+5turi
+tur3is
+tur5o
+tu5ry
+3tus
+4tv
+tw4
+4t1wa
+twis4
+4two
+1ty
+4tya
+2tyl
+type3
+ty5ph
+4tz
+tz4e
+4uab
+uac4
+ua5na
+uan4i
+uar5ant
+uar2d
+uar3i
+uar3t
+u1at
+uav4
+ub4e
+u4bel
+u3ber
+u4bero
+u1b4i
+u4b5ing
+u3ble.
+u3ca
+uci4b
+uc4it
+ucle3
+u3cr
+u3cu
+u4cy
+ud5d
+ud3er
+ud5est
+udev4
+u1dic
+ud3ied
+ud3ies
+ud5is
+u5dit
+u4don
+ud4si
+u4du
+u4ene
+uens4
+uen4te
+uer4il
+3ufa
+u3fl
+ugh3en
+ug5in
+2ui2
+uil5iz
+ui4n
+u1ing
+uir4m
+uita4
+uiv3
+uiv4er.
+u5j
+4uk
+u1la
+ula5b
+u5lati
+ulch4
+5ulche
+ul3der
+ul4e
+u1len
+ul4gi
+ul2i
+u5lia
+ul3ing
+ul5ish
+ul4lar
+ul4li4b
+ul4lis
+4ul3m
+u1l4o
+4uls
+uls5es
+ul1ti
+ultra3
+4ultu
+u3lu
+ul5ul
+ul5v
+um5ab
+um4bi
+um4bly
+u1mi
+u4m3ing
+umor5o
+um2p
+unat4
+u2ne
+un4er
+u1ni
+un4im
+u2nin
+un5ish
+uni3v
+un3s4
+un4sw
+unt3ab
+un4ter.
+un4tes
+unu4
+un5y
+un5z
+u4ors
+u5os
+u1ou
+u1pe
+uper5s
+u5pia
+up3ing
+u3pl
+up3p
+upport5
+upt5ib
+uptu4
+u1ra
+4ura.
+u4rag
+u4ras
+ur4be
+urc4
+ur1d
+ure5at
+ur4fer
+ur4fr
+u3rif
+uri4fic
+ur1in
+u3rio
+u1rit
+ur3iz
+ur2l
+url5ing.
+ur4no
+uros4
+ur4pe
+ur4pi
+urs5er
+ur5tes
+ur3the
+urti4
+ur4tie
+u3ru
+2us
+u5sad
+u5san
+us4ap
+usc2
+us3ci
+use5a
+u5sia
+u3sic
+us4lin
+us1p
+us5sl
+us5tere
+us1tr
+u2su
+usur4
+uta4b
+u3tat
+4ute.
+4utel
+4uten
+uten4i
+4u1t2i
+uti5liz
+u3tine
+ut3ing
+ution5a
+u4tis
+5u5tiz
+u4t1l
+ut5of
+uto5g
+uto5matic
+u5ton
+u4tou
+uts4
+u3u
+uu4m
+u1v2
+uxu3
+uz4e
+1va
+5va.
+2v1a4b
+vac5il
+vac3u
+vag4
+va4ge
+va5lie
+val5o
+val1u
+va5mo
+va5niz
+va5pi
+var5ied
+3vat
+4ve.
+4ved
+veg3
+v3el.
+vel3li
+ve4lo
+v4ely
+ven3om
+v5enue
+v4erd
+5vere.
+v4erel
+v3eren
+ver5enc
+v4eres
+ver3ie
+vermi4n
+3verse
+ver3th
+v4e2s
+4ves.
+ves4te
+ve4te
+vet3er
+ve4ty
+vi5ali
+5vian
+5vide.
+5vided
+4v3iden
+5vides
+5vidi
+v3if
+vi5gn
+vik4
+2vil
+5vilit
+v3i3liz
+v1in
+4vi4na
+v2inc
+vin5d
+4ving
+vio3l
+v3io4r
+vi1ou
+vi4p
+vi5ro
+vis3it
+vi3so
+vi3su
+4viti
+vit3r
+4vity
+3viv
+5vo.
+voi4
+3vok
+vo4la
+v5ole
+5volt
+3volv
+vom5i
+vor5ab
+vori4
+vo4ry
+vo4ta
+4votee
+4vv4
+v4y
+w5abl
+2wac
+wa5ger
+wag5o
+wait5
+w5al.
+wam4
+war4t
+was4t
+wa1te
+wa5ver
+w1b
+wea5rie
+weath3
+wed4n
+weet3
+wee5v
+wel4l
+w1er
+west3
+w3ev
+whi4
+wi2
+wil2
+will5in
+win4de
+win4g
+wir4
+3wise
+with3
+wiz5
+w4k
+wl4es
+wl3in
+w4no
+1wo2
+wom1
+wo5ven
+w5p
+wra4
+wri4
+writa4
+w3sh
+ws4l
+ws4pe
+w5s4t
+4wt
+wy4
+x1a
+xac5e
+x4ago
+xam3
+x4ap
+xas5
+x3c2
+x1e
+xe4cuto
+x2ed
+xer4i
+xe5ro
+x1h
+xhi2
+xhil5
+xhu4
+x3i
+xi5a
+xi5c
+xi5di
+x4ime
+xi5miz
+x3o
+x4ob
+x3p
+xpan4d
+xpecto5
+xpe3d
+x1t2
+x3ti
+x1u
+xu3a
+xx4
+y5ac
+3yar4
+y5at
+y1b
+y1c
+y2ce
+yc5er
+y3ch
+ych4e
+ycom4
+ycot4
+y1d
+y5ee
+y1er
+y4erf
+yes4
+ye4t
+y5gi
+4y3h
+y1i
+y3la
+ylla5bl
+y3lo
+y5lu
+ymbol5
+yme4
+ympa3
+yn3chr
+yn5d
+yn5g
+yn5ic
+5ynx
+y1o4
+yo5d
+y4o5g
+yom4
+yo5net
+y4ons
+y4os
+y4ped
+yper5
+yp3i
+y3po
+y4poc
+yp2ta
+y5pu
+yra5m
+yr5ia
+y3ro
+yr4r
+ys4c
+y3s2e
+ys3ica
+ys3io
+3ysis
+y4so
+yss4
+ys1t
+ys3ta
+ysur4
+y3thin
+yt3ic
+y1w
+za1
+z5a2b
+zar2
+4zb
+2ze
+ze4n
+ze4p
+z1er
+ze3ro
+zet4
+2z1i
+z4il
+z4is
+5zl
+4zm
+1zo
+zo4m
+zo5ol
+zte4
+4z1z2
+z4zy
+</patterns>
+</hyphenation-info>
diff --git a/hyph/en_GB.xml b/hyph/en_GB.xml
new file mode 100644 (file)
index 0000000..af5d8ca
--- /dev/null
@@ -0,0 +1,8611 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE hyphenation-info SYSTEM "hyphenation.dtd">
+<!-- 
+%
+%  Created by Jeff Kingston, 16 November 1996, from a TeX
+%  hyphenation file with the following header comment:
+%
+% File: ukhyphen.tex
+% TeX hyphenation patterns for UK English [NOT TO BE CHANGED IN ANY WAY!]
+% Version 1.0.  Released 17 April 1992.
+%
+% Created by Dominik Wujastyk and Graham Toal using Frank Liang's PATGEN 1.0.
+% Like the US patterns, these UK patterns correctly hyphenate about 90% of 
+% the words in the input list, and produce no hyphens not in the list 
+% (see TeXbook pp. 451-2).
+%
+% These patterns are based on a file of 114925 British-hyphenated words
+% generously made available to Dominik Wujastyk by Oxford University Press.
+% This list of words is copyright to the OUP and may not be redistributed.  
+% The hyphenation break points in the words in the abovementioned file is 
+% also copyright to the OUP.
+%
+% We are very grateful to Oxford University Press for allowing us to use 
+% their list of hyphenated words to produce the following TeX hyphenation 
+% patterns.  This file of hyphenation patterns may be freely distributed.
+%
+% These patterns require a value of about 14000 for TeX's pattern memory size.
+%
+-->
+<hyphenation-info>
+
+<hyphen-char value="-"/> 
+<hyphen-min before="3" after="2"/>
+
+<classes>
+<!-- @!$%^&*()_-+=~`{[}]:;'|<,.>?/0123456789 -->
+aA
+bB
+cC
+dD
+eE
+fF
+gG
+hH
+iI
+jJ
+kK
+lL
+mM
+nN
+oO
+pP
+qQ
+rR
+sS
+tT
+uU
+vV
+wW
+xX
+yY
+zZ
+</classes>
+
+<exceptions>
+as-so-ciate
+as-so-ciates
+dec-li-na-tion
+oblig-a-tory
+phil-an-thropic
+present
+presents
+project
+projects
+reci-procity
+re-cog-ni-zance
+ref-or-ma-tion
+ret-ri-bu-tion
+ta-ble
+</exceptions>
+
+<patterns>
+.ab4i
+.ab3ol
+.ace4
+.acet3
+.ach4
+.ac5tiva
+.ad4din
+.ad3e
+.ad3o
+.ae5d
+.aer3i
+.af3f
+.af3t
+.ag4a
+.ag5n
+.air3
+.al5im
+.al1k
+.al3le
+.am5ar
+.ama5te
+.am2i
+.am3pe
+.am3ph
+.an1
+.ana3b
+.ana3s
+.and2
+.an5da
+.an4el
+.an4en
+.an4gl
+.an4on.
+.an3s
+.ant3a
+.an3ti3
+.ant4ic
+.an4t5o
+.any5
+.aph5or
+.ap4i
+.ar5ab
+.ar5ap
+.ar4ci
+.ar5d
+.ar4e
+.ari4
+.ar4ise
+.ar4isi
+.ar5sen
+.art5icl
+.as1
+.as4q
+.as5sib
+.at5ar
+.ateli4
+.at5omise
+.at5omiz
+.at3r
+.at3t
+.au3b
+.au3g4u
+.aur4e5
+.aus5
+.authen5
+.av4
+.av5era
+.bap5tism
+.barri5c
+.bas4i
+.ba5sic
+.be3di
+.be3lo
+.be5r4a
+.be5sm
+.bi4er
+.blaz5o
+.bo3lo
+.bos5om
+.boun4d
+.bov4
+.bra5ch
+.bre2
+.burn5i
+.ca3de
+.ca4gin
+.cam5i
+.cam3o
+.can1
+.can5ta
+.ca5pitu
+.car4i
+.cas5ual
+.ca4ti
+.cen5so
+.cen5tena
+.cent5ri
+.cer4i
+.ch4
+.cit4a
+.clem5e
+.clima5to
+.co5it
+.co3pa
+.cop5ro
+.co3ru
+.co3si
+.co5ter
+.cotyle5
+.cri5tici
+.custom5
+.dav5
+.dea5co
+.de5lec
+.del5eg
+.de3li
+.deli5r
+.de1m
+.de5nit
+.de3no
+.der2
+.de3ra
+.de5res
+.de3ri
+.de5scrib
+.de5serv
+.de5signe
+.de5sir
+.de5sis
+.de5spoi
+.determ5i
+.de3ve
+.de4w
+.di4al.
+.dia3s
+.di4at
+.din4a
+.dio5c
+.do2
+.do4e
+.domest5
+.du4al.
+.du4c
+.dys3
+.east5
+.echin5
+.eco3
+.ec3t
+.ed5em
+.ed4it.
+.ed4iti
+.eg4
+.ei3d
+.ei5r
+.el3ev3
+.el2i
+.elu5s
+.em3b
+.em5in
+.emp4
+.em5py
+.en1
+.en5c
+.en4ded
+.en3s
+.ent2
+.en5ta
+.eos5
+.epi1
+.epi3d
+.er2a
+.er5em5
+.er4i4
+.er4o2
+.eros4
+.erot3
+.er4ri
+.es1
+.escal5
+.es3p
+.es3t
+.etern5
+.eth3e
+.eu1
+.eur4
+.eval3
+.evol5ut
+.ew4
+.ex1
+.ex3a
+.eye3
+.fal4le
+.far4i
+.fec5unda
+.fen4d
+.feoff5
+.fi2
+.fi5lia
+.fil5tr
+.fin5ess
+.fin3g
+.fi5n4it
+.fis4c5
+.fo3c
+.fran5ch
+.fu5ga
+.ga4m
+.gam5et
+.gen4et
+.ge5neti
+.gen5ia
+.ge3ro
+.glor5io
+.gnost4
+.go3no
+.gos3
+.hab2
+.ha5bili
+.hama5
+.han4de
+.hast5i
+.he4i
+.hem5a
+.hi2
+.hi3b
+.ho2l
+.ho5rol
+.hov3
+.hy3lo
+.ico3s
+.idi2
+.ig3
+.ig1n
+.il4i
+.im5b
+.in1
+.in3d
+.in3e2
+.in2i
+.in3o
+.in3t
+.invest5i
+.ir3r
+.is4c
+.is4li
+.is4o
+.iso5m
+.ka5ro
+.ki4e
+.kin3e
+.lab4o
+.la4me
+.lam5enta
+.lan5i
+.lash4e
+.le4m
+.len5ti
+.le2p
+.lep5r
+.les5son
+.le5van
+.librar5
+.lig3a
+.li3o
+.li4ons
+.li4p
+.loc3a
+.lo4gia
+.lo2p
+.loph3
+.lous5i
+.lov5er
+.lub3
+.lyo3
+.mac5u
+.mal5ad5
+.ma5lin
+.mar5ti
+.math5
+.me5lodio
+.ment4
+.men5ta
+.me5rid
+.me5rin
+.met4er
+.mi4e
+.mi3gr
+.min5ue
+.mirk4
+.mis1
+.mi5to
+.mo3bi
+.mo5lec
+.mon3a
+.mor5ti
+.mu3ni
+.mu3si
+.musi5co
+.myth3
+.na5k
+.nari4
+.nast4
+.nas5ti
+.nec3t
+.ni4c
+.ni5tro
+.no4c
+.nom3o
+.nos3t
+.no5tic
+.nucle5
+.obed5
+.ob3el
+.ob3l
+.od4
+.oed5
+.oe5so
+.of5t
+.oi4
+.ol4d
+.ome2
+.om5el
+.on4ce
+.on4e
+.op2i
+.opt5a
+.or1
+.or4at4
+.ora5tori
+.or5che
+.or3d
+.ore4
+.or3eo
+.or4i
+.orner4
+.or2o
+.os1
+.osi4
+.oth5
+.out1
+.ov4
+.pal5i
+.para5dis
+.par5af
+.para5t
+.pa5ta
+.pa4tio
+.pec3t4
+.pecu3
+.ped3e
+.pend4
+.pen5de
+.pep3t
+.peri5n
+.perse5c
+.pe5titi
+.ph2
+.phe5nom
+.phon4i
+.pi2e
+.pi3la
+.plast4
+.plic4
+.plica4
+.plos4
+.po3la
+.po5lite
+.po2p
+.pop5l
+.po5sitio
+.pos5si
+.pro5bat
+.pur4r
+.put4te
+.ra5cem
+.ran5gi
+.re3ca
+.ref5ere
+.re5gar
+.re1i
+.re5lin
+.re1m
+.re5o
+.res5ci
+.re5sen
+.re5spo
+.re5stat
+.re5store
+.re5str
+.re3ta
+.re5u
+.re3w
+.rib5a
+.rin4
+.rit2
+.rol4la
+.ros3a
+.sa2
+.sac5r
+.sal4i
+.sa5lin
+.salt5er
+.sanc5
+.sap5a
+.sa3vo
+.sci3e
+.sea3s
+.sect4
+.sec5to
+.se3gr
+.sen3t
+.se1q
+.ser4ie
+.ses1
+.sev5era
+.sh2
+.si5gno
+.sis3
+.st4
+.stat4o
+.stra5to
+.string5i
+.su5da
+.sulph5a
+.sul3t
+.tact4i
+.tac5tic
+.ta4m
+.tamar5
+.tar5o
+.tect4
+.tel5a
+.tell5e
+.te4m
+.te5ra5t
+.ter4p
+.th4
+.tho4
+.thol4
+.ti2
+.til4
+.ti5ni
+.tit4is
+.tor1
+.tran4c
+.tri5bal
+.tri3d
+.trin4a
+.tri5sti
+.tro4ph
+.troph5o
+.tro4v
+.tular5
+.turb4
+.turi4
+.tu5te
+.tu3to
+.ul4l
+.ulti5mat
+.un5ce
+.un5ch
+.un3d2
+.under5
+.un3e
+.un3g
+.uni3c
+.uni3o
+.un3k4
+.un5s
+.un3t4
+.un5u
+.up1
+.up3l
+.ura4
+.ur5eth
+.ur4o
+.va5led
+.ve2
+.vec5
+.ve5lo
+.vent5il
+.ver4ie
+.ver3n
+.vic5to
+.vi2s
+.vis3i
+.vi5so
+.vo1c
+.vo5lut
+.wine5s
+.xy3l
+.za5r
+a4a
+1ab
+2ab.
+2aba
+ab5are
+abay4
+2abb
+ab5ber
+2abe4
+ab3erd
+ab3err
+a3bet
+ab1ic
+a3bie
+2abin
+4abio
+abi5on
+ab3ita
+ab4itu
+ab3la
+abli4
+4abolic
+ab3om
+ab3ota
+3about
+ab1r
+2abs.
+ab1ul
+abu4lo
+ab3use
+ab3usi
+2aby
+ac2a
+ac5abl
+ac3al
+5acanth
+ac5ard
+a5cat
+ach5al
+a5chini
+ach5ism
+achro4
+ach5ur
+2aci
+a4cic
+aci4ers
+acif4
+4acit
+ack5a
+ac3li
+4aco.
+aco3d
+ac5onr
+4acos
+4acou
+ac1r
+ac3ry
+act5ate
+act5ile
+ac2to
+act5ory
+ac2t5r
+ac5uat
+a5dai
+ada3v
+4adee
+ad5eni
+ad4ha
+ad3ica
+a5dif
+4adil
+adi4op
+adi4p
+adis4i
+a3diti
+3adju
+5admit
+a2do
+4adoe
+4adoi
+ad3ol
+a3dos
+ad1ow
+ad1r
+adram4
+4a2du
+ad3ula
+ad3um
+4ady
+ae5a
+ae4cit
+aeco3
+4aed
+aed5is
+ae5g
+ae3on
+ae5p
+aerody5
+ae4s
+ae5si
+aes3t
+aet4a
+aeth4
+aet4or.
+aev3a
+4af.
+4afe
+af5ta
+a4fu
+ag4ari
+4ageri
+a5ghe
+a5gia
+agi4as
+4agino
+4agl
+agli4
+4ag1n
+ag3oni
+agor4a
+ag5ot
+a2gr
+ag3ri
+agru5
+2ah
+a1h2a
+ahar2
+aha5ra
+a1he
+ah4n
+a5hoo
+2ai2
+4ai.
+ai3a
+a1ic
+aid4a
+aid5er
+aig2
+ai5gu
+ail3er
+ail3o
+aim5er
+ain5ders
+ai5nea
+a3ing.
+ain3i
+ain5o
+aint5er
+air5a
+air5p
+air3s
+ais1i
+a5ism
+2a1j
+a4ju
+2ak
+akel4
+ak5u
+al5abl
+alact4
+a1lae
+al5ais
+ala3ma
+al5ance
+al3at
+a5lav
+alc3at
+al3ch
+ald5ri
+2ale
+a3lec
+aleg4
+ale5ma
+al5ende
+a1leo
+a2let
+al3ibr
+ali4ci
+al5ics
+al1id
+al3if
+5alig
+al1in
+a5lini
+alin5o
+al5ipe
+al5ipot
+4alis.
+4aliu
+4alk
+alk5ie
+al4lab
+al4lag
+alli5an
+allig4
+al4lish
+a5loe
+al3ogr
+a3lom
+a3loo
+al1or
+al4orim
+alos4
+a4lou
+al3ous
+a5low
+al5pen
+al3ph
+al5tati
+al3tie
+alu3b
+al5ued
+al3ues
+a5lumnia
+al1va
+al5ver
+alv5u
+2a1ly4
+a5lyn
+2a2m
+a5mad
+ama4g
+aman5d
+a5marine
+a3mas.
+am1at
+a5m4atic
+am5atu
+am4bin
+3ambu
+am5elo
+a3men
+amen4d
+am3era
+am5erl
+am1i
+ami2c
+am5ica
+amic5r
+3amid
+a3mili
+am5ily
+amini4f
+am5iniz
+aminos4
+a5mis.
+a4mium.
+a3mon
+amor5a
+amort3
+am5ose
+am2p
+am5peri
+amphi5g
+amp3li
+ampo5l
+am3ul
+amyl5
+a2n
+an2a
+a5nadi
+an3ae
+an3age
+ana5k
+an3ali
+an3arc
+a5nast
+an4con
+an3d4at
+and5au
+and5eer
+an5del
+an5dif
+and5ist
+an5dit
+an4doni
+an4ea
+an5eer
+an3ell
+anel5li
+an3eu
+an3gan
+angov4
+an4gur
+4anh
+an3ic
+ani3f
+an5ifo
+4anig
+an5ion
+anis5te
+4anity
+4aniu
+an5no
+4anny
+an1o
+an2oe
+an3oma
+anor3
+an2os
+an5ot
+an2s
+an3sc
+an4sco
+ans3il
+an4sur
+an2t2a
+ant5abl
+an3tal
+an5tam
+an2te
+1anth
+an4thi
+3anthr
+4antic
+an4tie
+an4ting
+ant4iv
+an4tone
+ant4r
+an4tus
+an5tym
+an3ul
+an3um.
+an5ums
+a3nur
+a5nut
+an2y
+an5ya
+a5nyi
+2ao
+aol3i
+5aow
+2ap
+4ap.
+4apa
+a1pac
+ap3al
+ap5aro
+ape5li
+a5peu
+aph5em
+aph3i
+aph5ol
+aphyl3
+ap1i
+ap5icu
+ap3in
+ap4ine
+a5pir
+a3plan
+ap5li
+apo5str
+apo3th
+a2pr
+ap5ron
+4aps
+apt5at
+apu5lar
+a5pun
+a4q
+a5qui
+a2r
+4arabi
+ara5bo
+aract4i
+ara2g
+ar3age
+ar4aged
+ar5agi
+ar3ago
+a3raj
+ar3all
+ara3m
+aran4g
+aran5te
+ar5apa
+ar1at
+a3rau
+ara3v
+ar3ba
+arb5et
+ar4bid
+ar4bl
+arb3li
+ar4bul
+ar5chet
+arch5o
+ar5dina
+ar4done
+ar3en
+aren5d
+ar5ett
+ar3ev5
+ar5gh
+ar3gu
+ar3h
+ar1i
+ar5iff
+ar4ill
+a5ri5net
+ar5ini
+a5rishi
+arm3er
+ar5mit
+ar3nal
+ar3nis
+ar3od
+ar5oid
+aro4mas
+aro4n
+a5roti
+a5rouc
+ar3ox
+arp5ers
+ar4pu
+2arr
+ar2rh
+ar2s
+ars5al
+ar3so
+art5at
+ar2th
+arth4e
+arth3r
+ar5tiz
+2aru
+ar3um
+ar5un4
+a3ryo
+a5ryt
+ar5z
+as1a
+as4af
+asan2
+2asc
+as5con
+as5cot
+as2cr
+as2e
+as3ect
+4ased
+asep4
+ash5ay
+ash5il
+as5ily
+as3in
+a5sio
+a3sit
+as5iv
+ask5er
+aski4
+as4la
+as4lo
+2aso
+as5och
+a4soned
+as5or
+as3ph
+ass2
+assa5gi
+ass5ibl
+as4sil
+assit5
+2asta
+as4tat
+as4tia
+as3tis
+as4tit
+4asto2
+as3tra
+as4tri
+as1u
+as4un
+as5ur
+2a2ta
+4atabi
+a5talis
+atam4
+ata3p
+atar3a
+ata3s
+ata3t4
+at3eau
+at3ech
+at5eer
+a5tel.
+ate5le
+at5enat
+at3ent
+4ater
+at3era
+at5ernis
+at5erniz
+4atess
+at5et
+4a2th
+ath3a
+a3then
+ath5erin
+ath5ero
+ath5ete
+ath3i
+ath3od
+a5thon
+ath5r
+4a3tia
+ati2c
+at5icis
+ati5cit
+at5iciz
+a2tif
+a4t1i4l
+a4tim
+a2t3in
+4atina
+at5ing
+4at4is.
+at1it
+atit3u
+atitud5i
+4atiu
+at4ivi
+a5tiviz
+a2to
+5at5od
+4atog
+2atol
+4aton
+a3too
+a4tops
+a5torian
+a4tory
+atos4
+a5toz
+2a2tr
+at3ra
+a4tre
+5at5ress
+at1ri
+atric5u
+at3ron
+at5rou
+at4tag
+2a2tu
+at1ul
+atu4m
+at3ura
+at3urg
+4a2ty
+2au2
+4au.
+aub5i
+4auc
+au5cer
+auc3o
+aud5er
+audic4
+aul3i
+aul4t
+aul5ted
+ault5er
+ault5i
+au3ma
+aun2
+aun5chie
+aun3d
+aun4dre
+au5reo
+aur4o
+au5ror
+4aus.
+aus5er
+aus5p
+aus4ted
+aut3ar
+aut3er
+au3th
+2av
+av4ab
+ava4g
+av3age
+ava5la
+av5alr
+av5ant
+av5ar
+avas3
+av3end
+av3ern
+av3ig
+aviol4
+av1is
+aw5er.
+aw5ers
+aw1i
+aw5nie
+aw5y
+a4x
+ax2id
+4ay
+ay5la
+ay3m
+ayn4
+ays2
+ay5si
+ay5sta
+ayth4
+2az2
+az3ar
+aze4
+az5ee
+azyg4
+azz4l
+2ba.
+ba5bir
+3back
+baen4
+bag4a
+5bah
+ba4i
+bal3a
+balm5i
+ba5lon
+bal5u
+bam4a
+ban4a
+ba5nan
+b4ane
+5bang
+b4aniti
+b4ans
+ba4p1
+5barb
+bar4d
+bardi4
+bar4n
+ba5rom
+bar3on
+5bars
+1bas
+bas4te
+ba4th4
+3batic
+ba5tio
+bat5on
+battle5
+2b1b2
+b4bata
+b3bli
+b4bone
+b1c2
+bcord4
+2b1d
+bdeac5
+bde4b
+bdi4v
+b2e
+4be.
+3bea
+4beas
+be3ca
+3becu
+2bed
+be3da
+bed5el
+bed2i
+be4do
+be5dra
+be4du
+5bee
+3bef
+be3go
+be5gr
+be3gu
+1bel
+be3la
+2bele
+be3lit
+bel4t
+be3m
+ben4d
+bend5a
+bend5er
+be1ne
+be5nig
+be5nu
+4beo
+be3q
+2bere
+berga5m
+berl4
+5berr
+ber5s
+b5ertin
+be1s2
+2bes.
+be3sl
+be3tr
+be3w
+2b1f
+bfa4
+4b1h
+b4ha
+2bi.
+1bia
+bi4b1
+bicen5
+3b2id
+bid5i
+b4ie
+bi4ers
+bif4
+bi4fid.
+bi5ga
+bigu3
+b1il
+b2ile
+5biles
+3b2ill
+4bim
+bimet5
+5bina
+5bin4d
+bind3e
+bin5et
+bin5i4
+1bi2o
+bio3l
+bio5m
+bi3ou
+bip4
+bi5q
+bir4
+bi3re4
+bi5rus
+b2is
+5bism
+bis4o
+bisul5
+3bitua
+4bity
+bi5ve
+b1j
+4b5k4
+2bl2
+5blac
+blag4
+b3lan
+5blast
+bla5tu
+blem5at
+3bler
+5blesp
+4blik
+blim3a
+bli3o
+bli2q
+b3lis
+4bly
+2b1m
+bment4
+bmi4
+4b1n
+bo2
+4bo.
+3boa
+bo5am
+5bob
+bod5i
+bo5h
+2boid
+4boke
+bol4e
+4boled
+bol3i
+bol4t
+3bon
+bon4c
+bon4e
+bon4ie
+boni4f
+bon4sp
+1boo
+b3orat
+bor3d
+bor5ee
+bor5et
+3bori
+bor5ic
+bor5io
+bor4n
+bot3an
+5boti
+boun5ti
+3bour
+bous4
+bow2
+bow3s
+4boxy
+5boy
+br4
+3brach
+4bral
+bram4
+b2ran
+bran4d
+4bre.
+b4reas
+4b2res
+brev5et
+b2rid
+5brief
+bring5
+bri4os
+b5rist
+b4roa
+bro4ma
+bros4
+brum4
+4bry.
+4b1s2
+b3sc
+bscon4
+bsen4
+bserv5an
+b5si
+bsin4
+bso2
+bsol3e
+bso3lu
+b4stac
+bstupe5
+2b1t
+b5tlet
+4bu.
+5bub
+buf5fer
+b4uli
+b4ulos
+bun2
+bun4a
+b5u5nat
+bunt4
+bur3e
+bur4ri
+busi4e
+buss2
+bus5si
+3bust
+bu5tar
+b3ute
+b5utin
+3butio
+but4iv
+b5ut5o
+b1v
+4b3w
+2by
+4by.
+3byi
+bys4
+5byt
+2ca.
+cab5in
+c4ace
+caco3
+cad4r
+5caf
+ca3go
+5cai
+5cak
+c1al
+c4ala
+ca5laman
+cal5ar
+3calc
+ca5lef
+call5in
+cal4m
+ca3ly
+ca3ma
+cam4i
+ca5nar
+c2an4e
+c4ano
+ca3noe
+can5tar
+can5ted
+can4tic
+can4tr
+5cao
+1cap
+ca5pil
+capt4
+cap3ti
+cap3u
+1car
+ca3ra5c
+car5ame
+ca3ree
+ca3r4i3c
+car3if
+car5m
+car3ni
+car3ol
+car5on
+car5oo
+ca3rou
+car4v
+case5
+cashi4
+3cas3s
+cas5tig
+3casu3
+c1at
+c4at.
+c2atc
+c4atom
+ca3t2r
+c4ats
+cat4u
+3cau
+caulk4i
+cav3il
+3cay
+c1c4
+ccent5r
+cces4sa
+c3ch
+cci3d4
+ccip4
+ccle3
+4ce.
+4ceab
+cean3
+3ceas
+ce4ci
+2ced
+5ceda
+ce3dar
+3cede
+3cedi
+4cef
+ce5g
+3ceiv
+cel3ai
+cel5ib5
+5cell
+cel5lin
+celo4
+ce5lom
+4cely
+2cem
+ce4met
+3cemi
+ce4mo
+1cen2
+5cenc
+cen5ci
+cen5ded
+cend5en
+cend5er
+cen3i
+2cenn
+3cent
+cent4a
+cen5ted
+cen5ter.
+cen5ters
+cen5tes
+1cep
+cept3a
+cep5tic
+3cera
+cer4bi
+3cerd
+ce3rem
+5cern
+5cess
+cest5o
+ces5tr
+ce2t
+cew4
+2ch
+4ch.
+4chab
+3chae
+3chai
+cham5per
+chan5gi
+cha3pa
+chec4
+4ched
+3chee
+3chem
+che3ol
+ch1er
+ch4eri
+5cherin
+ch4erl
+4ches
+3chete
+ch5eu
+che5va
+3chew
+ch5ex
+5chi.
+3chia
+3chico
+ch3ily
+ch4in.
+ch3inn
+3chio
+5chip
+chizz4
+ch5k
+5chlor
+4chm
+1cho
+cho3a
+5choc
+4choi
+ch5oid
+3chor
+4chored
+chor5ol
+4choso
+3chot
+4choti
+ch5ous
+chow5
+3chr
+chur4
+3chut
+5chyd
+3chyl
+3chym
+1c2i2
+4ci.
+4ciac
+cia4m
+ci3ca
+4cids
+4cie.
+ci3er
+ci3est
+ci5et
+ci3f
+cifi4
+4cig
+ci3ga
+cigar5
+3cil
+cil5lin
+2cim
+cim3a
+ci3me
+5cimen
+4cinab
+4cind
+cine5a
+cine5mat
+ci5ness
+4cint
+ci3ol
+ci5om
+ci4po
+cisi4
+cit3r
+ck1
+ckar5
+cka5t
+c4ke
+ck5if
+ck4sc
+cl2
+cla5rif
+3clas
+c2le2
+2cle.
+c5lec
+clemat4
+clev3
+cli1m
+c3ling
+cli2q
+clo4q
+c4lotr
+clue4
+clyp5
+5clys
+cn2
+c3ni
+1c2o2
+4co.
+3coa
+co5ba
+3coc
+co3ci
+co5cu
+co3dic
+co3dif
+4cody
+3coe
+co5et
+co3gr
+4c3oid
+co3inc
+4col.
+col3a
+co3log
+5colou
+co5ly
+co5mas
+co4me
+co3mo4
+comp4
+con1
+con4ati
+con4ch
+cond5er
+con4ey
+con4ie
+con3s
+con3t
+conta5d
+3coo
+coop4
+co3or
+cop4e
+co3ph
+co5pl
+co3po
+cop4t
+2cora
+cor5ded
+cord5er
+4cored
+co3rel
+3corn
+4coro
+co5rol
+5cort
+3cos.
+cost3a
+cost5er
+co5ta
+3co3tr
+5coty
+cous5t
+cov1
+co3va
+cow5a
+coz4
+co5zi
+c1q
+cr2
+5craf
+craft5i
+c4ran
+5crani
+cra5niu
+cras3t
+cra4te
+c2re
+4crean
+cre3at
+cre4p3
+5creti
+cre4to
+cret5or
+cri3l
+cron4
+crost4
+4crou
+5c4rus
+cry2
+crym3
+cryo3
+4c5s4
+csim5
+2ct
+c2ta
+c3tac
+ctac5u
+c5ta5g
+ct1an
+ct5ant
+c5taria
+c3tato
+c1te
+c4tea
+c2t5ee
+c4tent
+cter4ia
+ct5es
+ct5et
+ct2ic
+c5ticia
+c4tics
+ctifi4e
+c3tim
+ct4in.
+ct4ina
+ct5ing
+c3tini
+c5tin5o
+c5tio
+c3t2is
+c3tit
+c4titu
+c4tity
+ct5ive
+ct4ivit
+ct5olo
+c1tom
+c3ton
+c5toris
+c5toriz
+c1tr
+c2tre
+ctro5t
+c1tu
+c2tum
+c1ty
+cub3at
+c4uf
+cu5ity
+cul5ab
+c2uli
+cull5er
+cull5in
+1c2ult
+cu4mi
+5cuna
+cun4e
+5cuni
+5cuol
+cu5pa
+cu3pi
+c3upl
+1cur
+cur4er
+cur5ial
+4cur4o
+1cus
+cus5a
+c3utiv
+c3utr
+5cuu
+cu5v
+2cy.
+cy4bi
+1cyc
+cyl3
+cy4m
+cy5no
+cys4
+cys5to
+cy4t
+cz2
+4da.
+d4abr
+1d2ac
+dach4
+d5ache
+3dact
+d1ag
+d4a4gi
+d4ale
+d4alg
+dal5ler
+dam5a
+3dame
+d3ami
+da5mu
+3dang
+d1an4t
+d3ap
+d3ard
+5darm
+3d4as2
+dast5a
+d1at
+dativ4
+dat4u
+daugh3
+daun5te
+3dav
+d3b
+d3c4
+d1d4
+d4dere
+d3di
+d3dler
+d3dli
+d3dyi
+2de.
+deac3t
+de5aw
+de4bi
+deb5it
+3dec
+de5cant
+de4cil
+de1cr
+4dect
+ded3i
+defor5e
+de4fy.
+de3g
+de4gu
+de3io
+5de3is
+de3lat
+deli4e
+del5ler
+del5li
+de5lo
+1d4em
+4demie
+4dem4is
+demo4n
+de4mons
+de3mor
+de4mos
+4demy
+de1n2a
+den4d
+4dene
+d3enh
+deni4e
+dens5a
+dens5er
+den5tit
+de3od
+deo3l
+deon2
+deont5
+de1p
+depen4
+deposi4
+de2pu
+d3eq
+derac4
+de3rai
+d4ere
+4dered
+de5reg
+3derer
+1deri
+der3k
+3derm
+der4mi
+der5min
+5derne
+3dero4
+der5os
+der3s
+5deru
+4des.
+de3sa
+5desc
+des4ca
+de5scal
+de3sec
+des4i
+de3sid
+des5igna
+des1p
+des5pon
+de3sq
+d3est.
+des3ti
+1de1t
+de3tes
+de5th
+de2ti
+dev3il
+de3vis
+de3vit
+de4voi
+devol5u
+3dex
+2d5f
+dfol4
+d2g
+dg4a
+dgel4
+d4gen
+d3gr
+4d1h
+dhot4
+d4hu
+4di.
+1dia
+di2ad
+3diar
+diat5om
+4d1ib
+d1ic.
+dic5am
+di4ce
+di3ch
+d5icl
+dic5ol
+1dict
+dic5tat
+dic4te
+5dicul
+d5icur
+1did
+di4ers
+3di3ev
+d4ifo
+dig3al
+di3gam
+dil4
+5dill
+dilo4
+di3lu
+di5mer
+dimet4
+di1mi
+2d1in
+din4e
+din5gi
+di5nos
+3di1o
+dio4c
+di4ola
+dip5t
+3dire
+di3ri
+4d5iro
+di4s1
+d4isc
+disen3
+3disia
+3diss
+d4itas
+d4iter
+dithe4
+d3ito
+ditor3
+2dity
+1diu
+1di1v2
+di4val
+di5vine
+dix4i
+d1j
+2dl4
+d1la
+5dlef
+5dlest
+3dlew
+dlin4
+d1lo
+d5lu
+2d1m
+4d1n2
+1do
+4do.
+d4ob
+do4c3u
+dog4a
+do4j
+d4ol.
+dol3en
+do5line
+dol5it
+do4lon
+d4ols
+5dom.
+doman4
+domin5
+dom5ino
+dom5it
+do5mo
+don4at
+4dony
+3doo
+d2or
+4dor.
+dor4m
+dort4
+d4os
+do5sim
+dossi4
+dot1a
+dot4tin
+2dous
+d4own
+3dox
+d1p
+dr2
+d5rail
+d3ral
+3dram
+dran4
+d4ras
+drast4
+3drel
+dres4
+dress5o
+dri4e
+d4rif
+dri4g3
+d4rom
+dropho4
+drunk3
+4d1s2
+d5sl
+ds3m
+ds4mi
+d4sw
+dt4
+dt5ho
+1du
+2du.
+du1at
+3duc
+duch5
+duci5an
+du4co
+du5eli
+du5ell
+du5en
+du5ett
+du5in
+dul3c
+d3ule
+dul4l
+dum4be
+dun4a
+d5un4c
+du2p
+du3pl
+5duro
+d5use
+dust5er
+du3u
+d1v
+dver2
+dvert3
+dvoc5at
+2d1w
+dwell3
+2d2y
+dy4ad.
+dy5ar
+5dy4e
+5dyk
+dyl2
+dyll3
+5dymi
+3dyn
+dys3p
+d3zo
+ea2
+4eab
+e1act
+eac4te
+ea5cu
+e5add
+ead3er
+ead1i
+ead3li
+ea4g
+eak1
+eal3a
+eal3er
+ea3log
+eam4bl
+eam3er
+ean5i
+eap2
+eap5er
+e3app
+ear3a
+ear3er
+ear4li
+e5ar2r
+ear4te
+earth5i
+eas5er
+ea4soni
+e1as1s
+eassem4
+eas4t
+east5i
+eat5eni
+eat3er
+eat5ie
+e3atif
+eatit4
+eat4itu
+e3atri
+e4atu
+eau3
+eav5i
+eavi4e
+eav5ou
+eaz5i
+e1b
+ebar4
+eb2b
+ebe4
+e4bel.
+e4bels
+e2ben
+eb5et
+eb2i
+e5bil
+e4bin
+e4bis
+e4bl
+e4bos
+ebot3o
+e2br
+eb1ra
+eb2t
+e4buc
+ebus5i
+ec2a
+ec3ade
+ecad5en
+ecal5e
+e5cam
+e4capo
+ec3at
+ec5ath
+e1ce
+ecent5o
+ech3i
+e4cib
+eci4f
+ecip5i
+e1cl
+ec3lip
+econ4sc
+econstit5
+ec3ora
+ec5oro
+ec3rat
+ec5rean
+e4crem
+ec1ro
+ect5ati
+ec4ter
+ecti4c
+ec4tit
+ec4t5us
+ec1ul
+e5culi
+2ed
+e5dans
+e2dat
+ede2
+e4ded
+e5deh
+e4dele
+edes3t
+ede3te
+edeter5
+e3dev
+e5dew
+ed4g
+edi4als
+ed5ical
+ed5ics
+ediges4
+ed5igr
+ed3ime
+ed1it
+edi2v
+ediv5id
+ed3li
+edor4
+e4dox
+ed1ro
+edu5cer
+e2dul
+ed3ulo
+e4d5ur
+ee4ce
+eed3er
+ee4do
+ee2f
+ee5g
+ee1i
+ee2l1i
+ee2m
+eem5er
+eem3i
+eep1
+ee4pa
+eer4ine
+eesi4
+ee3to
+e1f
+efact5o
+efal4
+ef5eree
+ef5inite
+e4fite
+ef4l
+efor5est
+2efu
+e4fug
+efut5a
+egel3
+egi5a
+e4gib
+e3gla
+eg3le
+eg4mi
+eg5nab
+e5g4on
+e2gr
+e5gur
+e1h2
+e5ho
+eh5s
+ehy2
+ehyd5r
+eid4
+5eido
+4eif
+eig2
+e5ignit
+e4in.
+e3inc
+e2ine
+e1ing
+ein5i
+e4ins.
+ei4p4
+eir3o
+4eis
+eis3i
+eit5er
+eith4
+e2iv
+eiv3er
+e2iz
+e1j
+ejudic4
+ek3en
+ek5is
+ek4l
+e4lac
+e5lad
+el5age
+elam4
+el5anc
+elast3
+e4lates
+el5ative
+elch5er
+eld3er
+2ele
+elea5g
+4e4led
+el5eni
+el3eno
+ele3o
+ele5ph
+el1er
+e1les
+e5less
+e4leste
+el3et3o
+elev3a
+ele3vi
+el5ex
+e4l3ica4
+e1lie
+eli4ers
+e3lim
+el3ing
+eli3on
+e4li4s
+elit4t
+e3liv
+el4lab
+ell5iz
+e3loa
+e3loc
+elo5ca
+eloc3u
+elo4di
+e2log
+elom5ate
+el5op.
+el5ops
+elp5in
+el3so
+el5tie
+e1lu
+elu4m
+elus4
+elv4
+e5lyi
+3elyt
+em3ago
+em3ana
+emar4
+emarc5a
+em5atiz
+emat5ol
+em5bi
+e1me4
+e4mee
+e4mel
+e3mem
+e4m3era
+em5ero
+emet4e
+em4icis
+e4mie
+e2mig
+emig5ra
+em3ina
+em5ing
+e3mio
+em3ism
+e4mita
+e4miu
+em4mae
+4emnit
+emo3bi
+emod4u
+e2mog
+e4moi
+em3olo
+em5om
+4emon
+e3moni
+emon5ol
+e2mor
+em5oris
+em3orr
+e4motic
+e5moz
+empa5r
+empara5
+em5pes
+4empli.
+em4pre
+em3um
+e5mut
+en3ac
+e4nal
+en3am3o
+en4ann
+e2n3ar
+en3as.
+ena5ture
+3encep
+en4cile
+enct4
+2end
+en4d5al
+en4dedl
+end5rit
+4ene
+ene5d
+en3ee
+e5nelle
+e5nep
+e2ner
+e5nereo
+ener5v
+en5esi
+e3ness
+en1et
+en4ett
+e2n3eu
+e3new
+en3gi
+en3ic
+en5ier
+en3ig3r
+en5in
+enit5u
+en3k
+en1o
+en3oi
+eno2m
+en3oty
+enov3
+en2s
+ens5al
+en3sp
+en4sum
+en4sus
+ent3ar
+en4ters
+en5tia
+en4tify
+en2to
+en4tri
+ent5rin
+ent5up
+en4tus
+4enu
+en3ua
+en3uf
+en3ur
+en5ut
+5enwa
+eo3b
+e4och
+e4oda
+eof2
+eo2l
+eol5ar.
+eol5at
+eologi4
+e5olu
+eo3m
+eon4a
+e3ont
+eop4t
+e1or1
+eor4de
+eor3e
+eor5o
+eo1s2
+eo4to
+e1pa
+ep4al
+ep5arc
+epa4t
+epend5en
+ep5ert
+e4pete
+epe5titio
+ep5ex
+eph1
+eph4i
+e2pig
+e5pla
+ep3lic
+epol3a
+epol3i
+epolit5
+ep3reh
+epres5e
+ep5rim
+e4p5rob5
+ept3or
+e1p4u
+e3pur5
+e4puta
+equin4
+equi5no
+er1
+era4cie
+era4do
+era4g
+era4l
+er3aph
+er3api
+er3apy
+4erati.
+4eratim
+er5atu
+er3bat
+er3be
+erb5os
+2erc
+er3ch
+er3cl
+2erd
+erd5ar
+erdi4e
+2ere
+er3eal
+4ered
+er3egr
+er5el.
+er5ell
+er5els
+e4reme
+er3en
+5erend
+eren4e
+ere5ol
+e3req
+er3er
+ere4s
+er5ese
+er3esi
+er5este
+er5esti
+eres5tr
+eret4
+er3et.
+er3ets
+er3ett
+ere4v
+er3ex
+ergi3v
+er3gl
+er3ia.
+er4ian
+eri4cid
+5er5ick
+er2id
+er3ie
+er3iff
+er4imet
+er3in
+eri4na
+eri4on
+er3iou
+er4isc
+eri5sta
+4eri2t
+e3riv
+er5iz
+4erj
+erk4
+er3me
+er4moi
+5ernacl
+er5nalis
+ern3er
+ern3is
+ern3it
+4ero.
+er3oid
+ero5is
+ero5st
+erpent5in
+erre5la
+er4rep
+er5sine
+er5ted
+er4ter
+ert5er.
+ert5ers
+er4thi
+ert5iz
+2eru
+eru4b
+eru5d
+erund5
+er4vil
+5erwau
+eryth3
+2erz
+4es.
+es5am
+es5an
+e2sc
+es5can
+es5che
+esci5e
+escut5
+e3sea
+e3sect
+e5see
+e5seg5
+ese4l
+es5enc
+e3sh4a
+e1shi
+e5shu
+esi4an
+es5ic.
+e5sick
+es5iden
+esi5diu
+es5ies
+es3im
+es3in
+e5sion
+e4sit
+es4it.
+es4its
+e3skin
+e3s4mi
+es4od
+es3ola
+es3ol3u
+es3ona
+eso3p
+e1sor
+es3per3
+es5pira
+es5pit
+es4pl
+esplen5
+es5pot
+e5s2pr
+es4s3an
+essar5
+ess5ee
+es4sil
+es2so
+esta4b
+est3an
+e5star
+es5tau
+e2sti
+est5ifi
+est5igati
+e3stoc
+es5too
+est4r
+estud4
+e1su
+e2s3ul
+es4ur5
+et2a
+et3al.
+et5allis
+et3al5o
+eta5me
+eta3p
+et3ari
+et5ary
+et4as
+et3ate
+et3ati
+et5ay
+et3eer
+etell5i
+etend5er
+et5eni
+eter2
+et3er3a
+et5eria
+etex4
+e2th1
+ethyl3
+2etia
+e3ticu
+eti4gi
+e5tim
+et3in
+eti4na
+e3tir
+et5itiv
+eti4u
+et5olo
+e5tomete
+e2ton
+et3ona
+etor3i
+etra5g
+4e4tral
+etra5m
+et4ran
+et5ress
+et1ri
+et4ria
+etrib5a
+e4trim
+et1ro
+et2t
+et3ter
+etud4
+et3ude
+e4tum
+et4we
+et5z
+eudio5
+eue4
+euk5
+4eum
+e3urg
+eur5i
+eus4
+eu5ten
+eu3ter
+eut3i
+ev4abi
+eval5e
+eva2p3
+ev3ast
+ev3at
+ev5eli
+eve4n
+ev5erat
+ev5eren
+ever4er
+e4veri
+e4ves
+e1via
+e4viab
+e2vic
+evictu4
+evid3
+ev5ig
+ev4ile
+ev5ish
+evis5in
+evis5o
+e4viu
+evoc3
+evol5e
+evol5ute
+evu4
+e1wa
+e4wag
+e5way
+ew1er
+e3wh
+ew5ie
+ew1in
+ew5ish
+e3wit
+e1wr
+ex5ic
+ex4on.
+1exp
+4ey.
+ey4as
+eyl4
+ey3s2
+ez5er.
+ez5ers
+ez5ie
+1f2a
+2fa.
+fab4i
+fa3cet
+fact2
+fa2c3u
+2f3ag
+fall5in
+5falo
+fa5lon
+fals5ifie
+4fan3a
+fan5tasiz
+fant3i
+5far
+far3i
+5faw
+4f5b
+2f5d
+2fe.
+3feas
+fea3tu
+feb5r
+3fec
+2fed1
+5fei
+fe1li
+fem3i
+femin5
+fend5er
+f5eni
+4fered
+fer3ee
+3fero
+fe5roc
+fer5om
+3ferr
+fer3v
+2fes.
+fess3o
+fest3a
+fest5i
+fe4t
+fet4al
+fet4in
+fet4o
+3feu
+fe5veri
+2ff
+f1fe
+ffec4te
+f5fet
+f1fi
+f5fia
+f3fic
+f5fie
+ffil3
+f2f3is
+ff4le
+ff3lin
+ffoc3
+ffoni4
+ffor3e
+f3fr
+ffranch5
+4f5h
+fi5ance
+fib5u
+4fic.
+4fical
+3fici
+4fics
+fi5del
+fid3en
+fiel4
+fier4c
+fight5
+1fi2l
+2fin
+fin2a
+fi3nal
+find3
+fin2e
+f1ing
+5finin
+fin4ni
+fir2m1
+f3ita
+f5itee
+fl2
+3fla
+fle2s
+f3lica
+flin4
+3flo
+flo5ric
+3flu
+flum4i
+1fo
+4fo.
+3foc
+fo2e
+foeti4
+fo1l4i
+fo4lie
+foment4
+fo2n
+fon4de
+3foo
+fo5ram
+for5ay
+for5b
+for4di
+fore3t
+5form
+for4m3a
+fortu5na
+fo3v
+1fr2
+frag5a
+frant4
+frar4
+fratch4
+fre4s
+frost5i
+fruc4
+2f3s
+fs4p
+2ft
+f1ted
+f4ter.
+ft5es
+fti4et
+ft4ine
+3fu
+4fu.
+fu4c
+fuel5li
+fug4a
+fu4min
+fun2g
+4fured
+fur3n
+fu3sil
+fus5o
+fu5til
+4ga.
+ga4cie
+gadi4
+ga4dos
+3gag
+3gai
+3gale
+ga5len
+gali4a
+gal5ler
+3galo
+gam4bl
+gan5at
+4ganed
+gang5er
+g5ant.
+gan4tr
+g5ants
+g5arc
+g4are
+gar3ee
+gariz4a
+ga5rot
+gar5p
+5garr
+1ga4s
+gas5i
+gas3o
+gasol5
+gass5in
+gast3r
+g1at
+g4at.
+gat5iv
+g4ato.
+g4atos
+g4att
+gat5u
+gaud5
+ga5za
+g1b
+g5d4
+2ge.
+5geal
+3gean
+2ge4d
+3gedi
+5gedn
+4gef
+1gel
+4gele
+ge4li
+gel4in
+gel5li
+ge4lu
+2gely
+gem3i
+5gemo
+3gen
+gen4du
+gen5it
+gen3o
+gen5ti
+ge4o
+geo3lo
+4gere
+3germ4
+2ges.
+5gess
+gest5at
+3get
+get3a
+2g1f
+2g1g
+gg4a
+g2ge
+g5gedl
+g3ger
+g5gerer
+ggi4a5
+g3gli
+gglu3
+g5gly
+ggrav3
+g4gro
+2gh
+g5hai
+gh5eni
+g3ho
+g4hos
+gh2t
+1g2i
+4gi.
+gi4all
+gi4at
+3gib
+gi5co
+gi4g
+gi5gan
+gin5gi
+3gio
+gi4or
+gi4ot
+5gip
+gi5pa
+g4i4s
+5gis.
+gi2t1
+5gitu
+giv5en.
+2gl2
+g3lar
+5glass.
+glec4
+3gler
+g4leto
+g4letr
+g4ley
+gli5on
+g5lis4
+3glo
+4g5lod
+glom3
+4glop
+3glu
+glu5te
+glu5ti
+3glyp
+2g1m4
+2gn2
+g1na
+g4nab
+g5nate
+5gnath
+g5nati
+gna5tur
+gn5edl
+gn5ee
+gn3er
+g1ni
+g4nia
+g2n3in
+gn4in.
+g4ni2o
+g2no
+5gnori
+gno4s
+2go.
+5goa
+3goc
+5god
+3goe
+go4et
+go4ge
+4gogram
+g5oid
+go3is
+go2me
+5gonn
+go5nom
+3goo
+goph4
+4gor.
+5gorg
+4gors
+g4ory
+3gos
+gos4t
+2gou
+gour4i
+g1ous
+gov1
+g3p
+1gr2
+grab4
+3gram
+4grame
+gra2p
+g4re
+gril4
+grim3a
+g4ro
+gro4g
+g5ron
+grop4
+3gru
+gru3en
+gru5i
+grum4b
+2g1s
+gs4c
+gs4t
+g4sti
+gth5eni
+g5to
+g4u2a
+gu5ab
+5guan
+3guard
+g5uat
+2gue
+5gueu
+5guit4
+gui5ta
+gu2ma
+gu4mi
+3gun
+g4uras
+g4ured
+gur4n
+gur4u
+4gury
+gust5a
+2g1w
+2gy
+gy2b
+5gym
+3gyn
+gyn5o
+g5z2
+ha2
+4ha.
+h4ac
+hadi4e
+had4ine
+hae3o
+haged5
+hagi3o
+hag5u
+ha5ic
+hais4
+hak4ine
+hal5ant
+ha4m
+ham5an
+han4cro
+han2g
+h1ani4
+h5aniz
+han4t
+hant3a
+ha4pe
+hap3l
+har1a
+har5b
+har4d
+har5die
+harge4
+ha5rism
+har3o
+har4ted
+har4ti
+has4te
+hat5o
+haught5
+havel4
+hav5ersi
+hav5o
+h1b
+h1c
+h1d
+hdeac5
+hdu4
+he2
+4he.
+h2ea
+1head
+3hear
+hearch4
+heast5
+heav5en
+hec3t4
+he5del
+he3do
+heek4
+h4ei
+he3is
+he5lat
+h5elin
+he3lio
+he5liu
+hel4li
+h3el3o
+hem1a
+he3men
+hemis4
+he5mop
+hem4p
+hende5
+he3or
+hep1
+h1er.
+her4as
+her2b
+herb3a
+herb3i
+here3a
+here3o
+h5erett
+h5erh
+her5ial
+h5erine
+h1erl
+her5om
+h4eron
+h1ers
+h5erwa
+hes3tr
+het1
+h4et3a
+het3i
+het4ted
+heu2
+heum3
+heumat5
+he4v4
+hev5i
+hex5o
+h1f
+h5h
+2hi.
+hi4ar
+h1ic
+hi3c4an
+hi4cin
+h4icl
+h5ie.
+h1ier
+h4i4ers
+h1ies
+h3ifi4
+h3ify
+hig4o
+hi5ka
+hi4l
+hi5ma4
+hi5mer
+himos4
+h1in
+hin4d
+h2in2e
+hi5nie
+h5iniz
+hi5nop
+h2ins
+hio5lo
+h4ior
+hi2p
+hip3l
+h4ir
+hir4r
+hirr5i
+hit4a
+hiv5a
+4hl
+h3la
+h1le
+h3let
+h1l2i
+hli4a
+2h1m
+h4manic
+h5mica
+2h1n2
+hnocen5
+4ho.
+ho3an
+ho4co
+ho3don
+ho5du
+ho5ep
+hol3ar
+hold1
+hol4is.
+ho5lys
+ho4mag
+hom5in
+h2o4n
+hon5em
+ho5neu
+hon3ey
+hong3i
+ho5nio
+hon1o
+1hood
+hoo5r
+h4ope
+ho2p5r
+h4op4te
+hor5et
+h4orn
+horn5i
+ho5rog
+hort5h
+hosi4
+ho4ton
+h2ou
+3house3
+4h1p
+2hr
+hras5eo
+hre4
+hre5ma
+hr5er
+hres4
+hri4
+hrill5in
+hrim4
+h5rit
+h3rod
+hrom4i
+hry4
+h3rym3
+2h1s
+hsi4
+h4sk
+ht5ag
+ht5ee
+ht3en.
+ht5ener
+ht3eni
+ht3ens
+ht5eo
+ht5es
+ht4foo
+h1th
+ht4ine
+hu4g
+hu4mat
+hu5mer
+hu4min
+hun4c
+hunk4
+hun4t
+hur3i
+hu3sia
+huz4
+h1w
+h4wart
+h2y
+hy2l
+hyl5en
+hy2m
+hyn4
+hy3o
+hyol5i
+hy1pe
+hy3ph
+hyr4
+hys3te
+hy4t
+2i1a2
+ia4bl
+iab5olis
+iab5oliz
+i2ach
+iac3o
+i2ac2r
+ia5cri
+ia5dem
+i5ae
+iaf4
+i2ag4
+ia3gn
+i5a4g5o
+ia3gr
+i3ah
+i5ai
+ialect4
+i3alit
+ial5li
+4ialn
+i2a3lo
+ia5ly
+i5amb
+ia3me
+ianch5
+i3ant
+i5ape
+ia3ph
+i2ard
+4iarit
+i3at
+ia5the
+i5atom
+iat4u
+iatur4a
+i3au
+iav4
+ib3era
+ib1i
+ibio4
+ibios4
+ib5li
+4ibo
+i4bon
+ibor4
+i4bose
+i5bou
+ib1ri
+4ibu
+ib3uta
+ic3ac
+ic5ado
+i4cal
+ic1an
+2icar
+iccu4
+4ice
+i5ceo
+4ich
+ich4i
+ich5ing
+ich5ol
+4icin
+i5cio
+2ick
+ic4lo
+2i2co
+ico3c
+ic5ola
+icon3o
+i5cop
+icotyle5
+2i1cr
+i4cri
+i4cru
+i4cry
+ic4tedl
+ic4ter
+ict5ic
+2icu
+icu4lu
+ic3um
+i5cun4
+i5cut
+2i1cy
+i2d
+id1a
+i5day
+ide4m
+id3enc
+id3era
+iderm5
+i3dicu
+id3if
+i5dig
+i5dil
+i3dim
+id4ines
+idios4
+idir4
+id1is4
+id4ist
+2i4d1it
+idi4v
+id3li
+id3ol
+idol3a
+4idomi
+id3ow
+4idr
+id5ri
+id3ul
+ie2
+4iec
+2ieg2
+ie3ga
+ie5i
+i5ell
+4iem
+2i1en
+ien2d
+i1er
+i3eres
+i2eri
+ieri4n
+4iern
+ier2o
+i4ert
+i3esc
+ies3el
+i1es2t
+i3est.
+2i1et
+i4et.
+iet3ie
+4ieu
+i5euti
+iev3a
+iev3er
+iev3o
+2i1f
+i2fe
+if4fa
+iff5ler
+if3ic.
+i4ficac
+if5ics
+ifi4d
+ifi4n
+4i2fl
+i3fo
+ifoc5
+if5tee
+i3fy
+2ig
+i3gad
+ig3and
+3igar
+i1ge
+i3ger
+ight5er.
+ight5ers
+4igi
+ign5iz
+igno5m
+i3gon
+ig1or
+ig3ot
+i5gret
+i4g5ro
+igu5it
+ig1ur
+2i1h
+ihy4
+2ii
+i5in
+ija4
+4iju
+2ik2
+ik5an
+ike4b
+i2l3a
+ila4g
+ila5tel
+i5later
+il4ax
+il5dr
+il4du
+i3len
+ilesi4
+il3f
+il3ia.
+il3iar
+ili4arl
+i3lici
+i5lien
+ili4er
+ili4fe
+il4ific
+il1in
+il5ine.
+4iliou
+il5ipp
+il5iq
+il4ite
+ilit5u
+il4mo
+i5lon
+il3ou
+ilth4
+il2tr
+4ilu
+il5ul
+i5lum
+il5ure
+il3v
+4ilym
+ima4c
+im2ag
+im3age
+im1al
+im5am
+i5m2as
+i4mated
+i4matin
+imat5u
+im1i
+i3m2ie
+im4ine
+im5ino
+im5mes
+i2mo
+i5mog
+i3mon
+im5oo
+i3mos.
+impar5a
+imparad5
+im5pie
+impot5
+im5pr
+impu4
+im1ul
+im5um
+in3ab
+4inace
+in4ado
+in5agl
+in3air
+ina4l
+4inalit
+in5am
+in3an
+in3ap
+in4ars
+i3nas.
+4inata
+inator5
+in3au
+in4aw
+2inc
+inc4tua
+2ind
+in5dar
+inde5p
+indes5
+inde3t
+indeterm5
+in5dro
+4inea
+4ined
+in5ee
+in5ega
+4in5eo
+ine4s
+in3esi
+ine5te
+4ineu
+inev5
+infilt5
+infol4
+4infu
+4inga
+in5gal
+4inge
+ing5ha
+4ingi
+4ingle
+4ingli
+4ingo
+4ingu
+ing3um
+2ini
+in5ia.
+4inic
+in4ici
+in3ion
+in4itud
+4ink
+ink4ine
+4inl
+2inn
+2ino
+4ino.
+in3oi
+i5nole
+4inos
+i3nos.
+in5ose
+in3osi
+4inq
+ins2
+in4sch5
+inse2
+insect5
+insec5u
+in3si
+5insk
+insolv5
+in4tee
+int5ess
+in3til
+int5res
+intu5m
+2inu
+in5ul
+in5um
+in3un
+in3ur
+invol5u
+2io2
+ioact4
+i1od
+iod3i4
+iod5o
+ioe4
+io3gr
+4i1ol
+io3ma
+i4omani
+io3mo
+i5ope
+io3ph
+i5opo
+iop4s
+i1or
+iora4m
+4iore
+4iorit
+5ioriz
+4iorl
+ior4n
+io3sc
+i3ose
+i3osi
+i4oso
+io5sta
+i3ot
+iot4a
+io5th
+iot5ic
+io5tr
+i4oty
+i4our.
+i4ours
+i5ox
+2ip
+ip3al
+ipap4
+ipar3o
+ipart5ite
+ip1at
+i3pend
+i1ph2e
+iphen3
+i5pheri
+iphi4
+i4phu
+ip3id
+i5pil
+ip3in
+ip4ine
+ipir4
+ip5is
+ip1i4t
+ip4iti
+ip3lin
+ip3lo
+i3po
+i4pog
+i4poli
+i4pom
+ipon3
+i4pow
+ip2pl
+ip3pli
+ip4re
+ip5tori
+ip1ul
+i5put
+ipy4
+2iq
+i3qua
+2ir
+ir1a
+ir4abi
+ira4c
+ir4ae.
+ir4ag
+ir4alin
+ir4alli
+i5raso
+irassi4
+iray4
+ird3i
+ire3a
+ir3ec
+ir5ee
+irel4
+ire5li
+ires4
+ir5ess
+ir1i
+ir2i4d
+ir4im
+ir4is.
+5iriz
+irl5ing
+ir5och
+ir5ol
+ir3om
+ir4q
+ir2s
+ir5ta
+ir5tee
+irwo4me
+i4sa
+is5ad
+is3age
+is1al
+is3am
+is1an
+is3ar
+is5av
+4isb
+i2s3c
+is5chi
+isci5c
+4i1sec
+ise5cr
+is3ell
+4is3en
+is2er
+is5ere
+i2s3et
+4iseu
+is3har
+ish5ee
+4ishio
+ish3op
+is5hor
+2isia
+is5ic
+is3ie
+4isim
+is3inc
+4isis
+is4ke
+is1l
+islun4
+2isma
+is1on
+is5oner
+iso5p
+is1p
+i3s2ph
+5ispr
+2is1s
+iss5ad
+is4sal
+is5san
+iss4iv
+iss4o
+4ista
+is4tal
+ist5enc
+ist5ent
+is5terer
+4isth
+is4t3ic
+4istl
+i4s1to
+4is4tom
+is1tr
+3istry
+4isty
+i5sul
+is3ur
+2isy
+it1a
+it5ab
+ita4c
+4itai
+it3am
+it4ana
+it4as
+it3at
+i3tect
+it3ee
+it3enc
+it3ent
+it3era
+2ith
+itha5l
+ith5i
+i5thol
+ith3r
+ithy5
+2itia
+iti4co
+it5icu
+it1ie
+it3ig
+4itim
+it4in.
+it4ins
+4itio.
+4itione
+i5tiq
+4i5tit
+it3iv
+it4li
+it5lo
+4ito.
+it5ol
+2iton
+it1ou
+2itr
+it5ress
+i4tric
+2itt
+it4tit
+itu4als
+it5uar
+4itue
+it1ul
+it1ur
+it3us
+2i1u2
+i3um
+iur5e
+2iva
+iv5anc
+iv1at
+i4ved
+iv5el.
+iv5eling
+iv5els
+i4ver.
+iv3eri
+i4vers.
+iver5sal
+ives4
+iv3et
+i4vie
+iv3if
+i5vilit
+5ivist.
+5ivists
+iv1it
+i2vo
+ivoc3
+i5vore
+2i1w
+2ix
+ix3o
+i5ye
+1iz
+4izah
+iz3i2
+2izo
+iz5oi
+2izz
+1ja
+2ja.
+3jac
+ja2c5o
+jac3u
+jag5u
+jal4
+ja5lo
+ja5pan
+jel5la
+jeo2
+jeop3
+4jes
+jeu4
+jew3
+2ji
+3jig
+jil4
+jill5
+5jis.
+3jo2
+4jo.
+joc5o
+joc5u
+jol4e
+4jr
+4js
+ju1di
+jui4
+ju5l
+ju3ni
+juscu4
+jut3a
+ju1v
+k4abi
+k2a5bu
+kach4
+k3a4g
+kais5
+ka4l
+ka5lim
+kal4is
+k4an
+ka3o
+kap4
+kar4i
+1kas.
+kaur4
+kav4
+k1b4
+k1c
+kcom4
+k5d2
+kdo4
+kdol5
+4ked
+ke5da
+k5ede
+3kee
+ke4g
+ken4d
+keno4
+kep5t
+ker5a
+k4ere
+k5erel
+ker4j
+ker5o
+kes4i
+ket5a
+key4wo
+k1f
+kfur4
+k3ho
+5kih
+ki2l
+kilo3
+k1in
+k2in.
+3kind
+kinema4
+kin5et
+k3ing
+kin4i
+k2ins
+kir3m
+kir4r
+kis4
+3kis.
+k1ish
+kit5c
+ki4w
+kk4
+k5ker
+k2l2
+k3la
+k5lea
+k3ler
+k3let
+k3li
+k3lo
+k1m
+kn2
+k2no
+1know
+ko5a
+kol4
+ko5mi
+ko5pe
+k1p
+k5ro4
+k3ru
+4k1s
+k3sl
+ks2mi
+ks4t
+k1t
+kur5
+k5v
+k1w
+3kyl
+l2a
+4la.
+5laa
+lab5ar
+label4
+5labr
+l4ac
+la2ca
+la5ceo
+la5cer
+la4ch
+la2co
+5la5col
+lac5on
+la3cu
+la4de
+l5adm
+l4ae
+l4af
+la3ger
+la4gis
+lag3r
+5lah4
+la4ic.
+l4al
+4lale
+5lamandr
+la5melli
+lam4ie
+lam1o
+l5amu
+lan3at
+lan2d
+3land.
+land3i
+3lands
+lan4er
+lan3et
+lan5tine
+lan4tr
+la4p
+lapi4
+lar5an
+lar5de
+4lared
+l4as
+lat5al
+la4te
+5latilis
+5latiliz
+5latini
+lat5us
+l4au
+5laur
+lav5at
+l4aw
+4laz
+l3b
+lbe4
+l4bit
+l4by
+l1c2
+l2cat
+lce4
+lcen4
+l4cere
+lch4e
+l3dar
+l3ded
+l3deh
+l5dera
+ld3est
+l5dew
+ldi2
+l3die
+ld4ine
+l5di5nes
+ld3ish
+ld5li
+l3do
+4le.
+3leagu
+le5atio
+leav5er
+l3eb5ra
+le3ca
+le5cha
+lect5ica
+2led
+le5dr
+leg1a
+l3egan
+3legg
+le4gin
+leg3o
+le3gra
+lek4
+4leled
+lel5o
+lelu5
+lem5enc
+lem3is
+l5emiz
+5lemm
+l3emn
+le2mo
+lem5on
+l5enda
+len5dar
+lend4e
+len4do
+le1ne
+le5nie
+len3o
+4lentio
+len5u
+le3on
+leo4s
+le5q
+2ler
+le5rec
+5l4eria
+l4eric
+le5rig
+ler3om
+leros4
+ler3ot
+4les.
+le3sco
+3les4s
+1let
+le5tra
+le5tre
+5le5tu5
+leur5
+2lev
+l3eva
+5leve
+lev5ita
+le4wi
+l5exa
+1ley
+lf5id
+l2fo
+lf3on
+l1g2
+l4gal
+l4gem
+lgi4a
+l4gid
+l4goi
+l3h
+4li.
+li4ani
+lias4
+lib1r
+l1ic.
+5lich
+li4cie
+5licio
+l3ic3on
+lict4o
+li4cu
+l3ida
+l4idar
+5lidif
+3lieu
+l4ife
+l4ifo
+lift5er
+1lig
+li5ger
+light5i
+5lih
+3lik
+1l4il
+lil4i
+lim2b
+limet4e
+lim4p
+l4ina.
+l4inas
+lin4d
+l4ine
+5lin3ea
+lin4er.
+lin4ers
+lin4ger
+ling3i
+5lingt
+3lingu
+3linq
+lint5i
+3liog
+li4ol
+lio3m
+liot4
+li3ou
+5liph
+lipt5
+li1q
+3lir
+l1is
+l4isk
+5lisse
+l1it
+l2it.
+l3it5a
+5liter
+3lith
+5litia
+3litr
+lit4u
+l4iv
+l5ivat
+liv3er
+liv5id
+lkal5o
+lk5at
+lk3er.
+lk3ers
+ll2
+l1la
+lla4ba
+llact4
+l5las
+l4law
+l5leb
+l1lec
+l1leg
+l3lei
+l1lel
+lle5m
+l1len
+l3lep
+l3leu
+l3lev
+ll3f
+l1li
+lli5am
+lli4an
+llib4e
+llic4
+l4licl
+lli5co
+l5lie
+lligat4
+l2lin
+l5lin.
+l3lina
+l3line
+l5lio
+lli5v
+ll3m
+l1lo
+lloc3a
+lloc5u
+llo2q
+l4lov
+llow5er
+ll3p
+ll3s
+ll5t
+l1lu
+llun4
+l5lya
+l3lyc
+l3lyg
+l3lyh
+l3lyi
+l5lym
+lm2
+l1ma
+l1me
+l4mer
+lm3ing
+l5mip
+l2m3od
+l1n4
+l3ne
+lneo4
+2lo.
+5load
+5lob3a
+1loc
+loc3al
+loc5ul
+lo4cus.
+2locy
+l3odis
+3lo3dr
+1log
+lo5gan
+4loi.
+lo5mi
+lom4m
+lon4al
+lon4e
+l5onel
+lo5ney
+long5in
+3lonia
+loni4e
+l3onis
+l3oniz
+loom5er
+lop4e
+5lo5pen
+l3opm
+1lo1q
+l4ored
+lor5iat
+lor4ife
+lo5rof
+loros4
+l4os.
+lo1so
+loss4
+los5sie
+lot5at
+loth4ie
+lo5tu
+5loup
+lp1at
+lp3er
+lph2
+l5phe
+l3phin
+l2pho
+l3pie
+l3pit
+lr4
+l3ri
+l3ro
+l5ru
+4ls
+l5sam
+ls5an
+lsi4fia
+lsi4m
+ls4is
+l5sk
+ls4p
+l1s2t
+ltan3e
+l4tang
+lt5ant
+l5tar
+l1te
+l4tei
+ltern3
+lth3i
+lti4ci
+ltim4a
+ltin4
+lti3t
+l3t4iv
+lt4or
+l1tr
+ltramont5
+l1tu
+l4tus
+4lu.
+lu1a
+luch4
+lu2c5o
+luc5ra
+lu4cu
+4lue
+lu1en
+lu5er
+lu1i
+lu4it
+lum4bri
+lu4mo
+5lump
+lu2m5u
+lunch5eo
+5lune
+l3unta
+lu3ori
+5lup
+3lur3o
+lusk5
+luss4
+lut5an
+4lut5ar
+5lutioniz
+lu5toc
+lut5r
+lu1v
+lv5ate
+l5vet4
+l4vi
+l4vor
+l3w
+lx4
+2ly
+4ly.
+ly1c
+ly4ca
+lyc4l
+lyc5os
+lym2
+lymph5
+lyp2
+ly4pa
+lypt5o
+3lyr
+lys5er
+3lyw
+3lyz
+lz4
+4ma.
+m4aca
+mac3ad
+ma5chine
+5machy
+ma4cis
+mact4
+4mad.
+4mada
+4mads
+ma4ge
+5magn
+2mago4
+2mah
+ma5ho
+3ma4i
+4mai.
+maid3
+5mak
+mal3ap
+mal5ari
+5male2
+mal5ed
+mal3ef
+m3alg
+m3alis
+mal4is.
+mal3le
+mal4li
+2mam
+mament4
+m5ament.
+1man
+3m4an.
+man3a
+man5dar
+man3dr
+manic4
+man4ica
+ma5nil
+m4ans
+mantel5
+2map
+m3aph
+1mar
+5maran
+mar5ol
+ma5ron
+ma3roo
+mar5ri
+mar4shi
+mar3v
+ma3son
+massi4
+mass5ing
+3mas1t
+mas4ted
+mast4ic
+mas4tin
+m4at.
+m4aten
+ma3ter
+mater5n4
+m4atit
+mat4iti
+m4atiza
+ma3tog
+mat5om
+ma3top
+m4ats
+3m4att
+ma5ture
+mav4
+2m1b
+mbat4t
+mb4d
+m5bec
+m5berer
+m4bery
+m4bes
+mb2i
+m2bic
+m5bil5
+m4b3ing
+m4bis
+mb5ist
+mbival5
+m5bler
+m3bli
+mbru4
+mbu3l
+mbur4
+m1c
+m5d
+m2e
+2me.
+mea5g
+me5and
+me4ba
+me4bi
+2med
+4med.
+3media
+med5icat
+4medie
+m5ed5ies
+3medit
+me4do
+m5edy
+me2g
+5meg2a1
+mega5t
+4mele
+mel5ee
+mel5ler
+mel3on
+mel4t
+melt5er
+me2m
+4m5eme
+1men
+3men.
+2mena
+men4ag
+mend5er
+mend5o
+me1ne
+ment5or
+5ments
+5meog
+me4p
+m5eran
+4mere
+mer4ia
+2me2s
+mes5en
+me5si4a
+mes5q
+3mesti4
+1me2t
+meta3t
+met1e
+4meted
+meth4i
+meti4c
+met5ici
+met3o
+met3ri
+m1f
+4m3h
+4mi.
+m1ic
+mi4cin
+mi3co
+3micro
+m4ict
+mi3cul
+mi4cus
+m4idi
+mid4in
+mid5on
+mi5fi
+mig5a
+migh5ti
+mi2gr
+4mij
+mi5ka
+m2il
+m3ila
+mil4ad
+4m5ilie
+mil5ies
+3mill
+mi5lo
+mil4t
+3m2im
+mim5i
+5min4d
+mind5er
+min4er.
+min4ers
+ming5li
+min5ie
+m4init
+min3ol
+1m4int
+minth5o
+mi3o
+mi3p
+mirab4
+mi5racu
+m2is.
+m4isc
+mi4se
+4misem
+mis3ha
+5missi
+m3ist.
+mis4tin
+m3ists
+mi2t
+m5itan
+4mity
+3miu
+5mix
+4m1l
+mlo5cuti
+mlun4
+2m1m2
+mman4d
+mmand5er
+m3medi
+mmel5li
+mmet4e
+mmig3
+mmin3u
+mmis3
+mmob3
+m5moc
+mmor3
+mmut3a
+4m1n2
+mnif4
+m4nin
+mni5o
+mnis4
+mno5l
+1mo
+4mo.
+2moc
+mod1
+mod5ifie
+mogast4
+mo4go
+mog5ri
+m5oir
+mok4i
+mol3a
+4molog.
+4mologs
+4mologu
+mo3ly
+mo1m
+mo4mis
+m4on
+mona4
+4moned
+mon1g
+mo4no
+monolo4
+monolog5i
+m4op
+mophil5i
+mop4t
+m3orab
+m3orat4
+mor4ato
+m5ord
+mo5rel
+3moria
+m5oriz
+mor5on
+3morp
+3morse
+mor5tal
+mo3sp
+5most
+mo3sta
+2m1ous
+m1p
+m3pa
+m4panc
+m4pant
+mpath3
+mpel5li
+m5perer
+mper3i
+mpet5it
+mphal5o
+m4phe
+m4phl
+m2pi
+mp5id
+m5pig
+mp3ily
+mp1in
+m3pir
+mp3is
+m3po
+mpol5it
+mpo2t
+mpov5
+mp3to
+mp5tr
+m3pu
+m5q
+m3r
+m4ry
+4m1s
+msel5f
+m5si
+msol4
+mtu4
+muck4e
+muff4
+mul1t2
+m5unc
+mu5nio
+mun3is
+mus5co
+mu4se
+mus5ke
+mu3til
+m1v
+m3w
+2my
+5my3c
+my4d
+my3e
+3myi
+5myst4
+3myt
+n1a
+2na.
+na2c
+nach4
+na5cious.
+na5ciousl
+nac4te
+nac5tiva
+na5culari
+na4d4a
+nadi4
+nad4op
+n2ae.
+naffil4
+nag4a
+n4agen
+5na5geri
+na4gi
+n5ago
+5n4a3gr
+5nah
+5nail
+na5iv
+nak2
+4naled
+n5alg
+n4alia
+na3ly
+1nam
+3name
+nam4n
+na5nas
+nannot4
+nan4ta
+nan5ted
+nan4to
+na5o
+4n4ard
+nar5tisti
+n2as
+nas5i
+nas5p
+nas3s
+nas5te
+nat5al
+na5tat
+n4atee
+na3the
+nath4l
+nati4
+n4ati.
+nat5ic
+n4ato.
+na3tom
+na4tos
+nat4r
+na5turi
+naugh5ti
+naus3
+3naut
+naut3i
+na2v
+na5vel
+n3b4
+nbarric5
+nbeau4
+nbe4n
+nbene4
+nbet4
+nbit4
+n1c2a
+n4cal.
+ncarn5at
+ncel4i
+ncent5ri
+n4cept.
+n3cer
+ncer4e
+n4ces.
+n5cet
+n5cey
+n3cha
+nch4ie
+n3cho
+nch5olo
+n3chu
+n4cic
+ncid5en
+n4cif
+ncip5ie
+n1c2l
+n4cles
+ncoc4
+nco5pat
+n1cr
+nc1t
+nc4tin
+nct4ivi
+nct2o
+n1cu
+ncu4lo
+n4cun
+n4curvi
+ncus4t
+4nd
+n2da
+n3da4c
+n3dal
+n4dale
+n3dam
+nd3anc
+nde2
+n3dea
+nde3ci
+n1ded
+nde4l
+ndeleg4
+nd3enc
+ndepre4
+n3derl
+nde4s
+ndes5cr
+n5dez
+nd4hi
+n1dic
+ndic5u
+ndid5a
+n3die
+nd5ily
+nd4ine
+nd3ise
+nd5is4i
+nd5ism.
+nd5ity
+nd3ler
+nd1li
+n5doc
+ndor4
+n2dou
+nd5our
+ndrag5
+ndram4
+n5dron
+ndu4b
+nduct5iv
+n4dun
+nd2we
+n3dyi
+2ne.
+ne3alo
+n3ear
+ne2b3u
+5neck
+ne4cl
+ne2co
+n5ectom
+2ned
+3nedi
+ne4du4
+neg3a
+ne3go
+5negu
+neis4
+2nele
+ne5lia
+neli4g
+n4ely
+ne2mo
+4n1en
+n3end
+neo3l
+neon4
+ne2p
+n1er
+4nered
+5nering
+ner5o
+ner4r5
+ner2v
+nerv5in
+2nes.
+n1esc
+ne3sia
+1ness
+n1est
+nes3tr
+net3a
+net3ic
+ne4tog
+net1r
+neuma5to
+neut5r
+nev5er
+n4ew
+news3
+n4eys.
+n3f
+nfo4
+nform5er
+nfortu5
+nfran3
+4ng
+ng2a
+n4gae
+n5gee
+n3geri
+n5gero
+ngh4
+n2gi
+n5gic
+ngio4g
+n5glem
+n3glie
+n5glio
+ng1n
+n1go
+n4gry
+n1gu
+n2gum
+n1h2
+nhab3
+nho4
+nhy2
+nhyd5
+n1i
+4ni.
+3niac
+ni3ba
+n4icab
+ni4cen
+4nicl
+nict5a
+ni4cul4
+ni4dio
+n2ie
+ni4ers
+nif4f
+nift4
+nif5ti
+ni2g
+night5i
+n3igm
+3nign
+nik5e
+n2il
+nil4a
+n3im1
+n4ime
+5nimet
+n4ines
+nin4j
+5ninn
+n4inu
+5niol
+ni1ou
+3nipu
+5niq
+n4is.
+n4isk
+nis4l
+nis4o
+n5iss
+nis5ter.
+nis5ters
+nitch4
+ni4te
+ni3tho
+n4itos
+ni5tra
+nit5res
+ni3tri
+nit4ur
+n2iv
+niv4a
+ni3vo
+nivoc4
+niz5en
+n1j
+njam2
+njur5i
+4n2k
+nk5ar
+n5kero
+n3key
+nk5if
+nk5il
+4n1l2
+nland5
+n3le
+nlet4
+n3m
+nmater4
+nmor5ti
+n1n4
+nne4
+nnel5li
+nnerv5a
+n3ni
+nni3ki
+nnov3
+n5nyi
+4no.
+n5obi
+no5bil
+nob4l
+no5blem
+nobser4
+n5ocula
+no4di
+n4ody
+noe4c
+no4fa
+nois5i
+n5ol.
+no3la
+nol4i
+nom3al
+1nomi
+no2mo
+4none
+3nonic
+5nood
+nop5i
+nora4t
+nor5di
+nor4ia
+nor4is
+nor3ma
+n4oro
+nor4t
+n4os.
+nos4o
+no3sp
+not1a
+3note
+n1ou
+n4oug
+3noun
+2nous
+nou5v
+nova4l
+nove2
+nov3el
+novel5e
+n4ow
+now5er
+now3l
+n3p4
+npil4
+npla4
+npoin4
+npo5la
+npos4
+npri4
+n1q
+n4quef
+n1r
+nre4i
+nre3m
+nres5tr
+4n1s
+ns2c
+n2sco
+ns3cot
+n4scu
+n5sec
+nsec4te
+n2ses
+n5seu
+n3sh2
+n2si
+ns3ib
+n4sic
+n5sick
+n3sid
+n3sie
+ns5ifi
+ns3ing
+n3sio
+n3s2is
+nsi2t
+ns3iv
+nsolu4
+n5son
+n4sore
+n4sory
+n3spir
+n3s2t
+nsta4
+nstil4
+n3su
+nsur4e
+n3swa
+ntab4u
+nt3age
+nt1al
+n4t3anc
+nt5and
+ntan5eo
+n4t3ant
+nt4ariu
+n5tasis
+nt3ast
+nt1at
+nt5ath
+nt3ati
+nt5ativ
+n5tau
+n1te
+n4tec
+n4tee.
+n4tees
+n3tel
+ntend5en
+n4teo
+n4ter.
+n3teri
+n5tern
+ntern5al
+nter5nat
+nth2
+n1the
+nther5
+nth5ine
+nt2i
+nt4ib
+n4tic.
+n5ticis
+n5ticiz
+n4tics
+ntic4u4
+n3tid4
+n1tie
+n4tify.
+n3tig
+nt5ilati
+n5till
+nt3ing
+nt5ing.
+nti3p
+n4tipar
+n4tis.
+nt3ism
+nt3ist
+n5titio
+nt3iz
+n2tj
+n1t2o
+n3tom
+ntoni4
+n5top
+n1tr
+ntra3d
+nt3ral
+n4trant
+n3trat
+nt5ress
+nt3ril
+ntrol5ler
+n5trym
+n1tu
+n3tua
+ntub5
+ntup5li
+n5tur
+n2ty
+n2u
+nu1a
+5nuc
+3nud
+nud5i
+nu3en
+nug4a
+nu3i
+nu4is
+5nuk
+n4ulo
+n3ult
+nultim5
+nu1me
+5numenta
+5numer
+5numi
+3nunc
+nu3tat
+n5utiv
+nu4to
+nu1tr
+n3v2
+nve2
+nvel3
+nven4e
+nven5o
+nvers5an
+nvi4t
+nvoc5at
+n5w
+nwin4
+nwom4
+n2x4
+2ny2
+5nyc
+nym5it
+nyth4
+n1z2
+nzy4
+2oa2
+o5ace
+o3act
+oad5er
+oad5i
+o3ag
+oak5er
+o3ales
+oal4i
+oal5in
+o5alit
+oan4t
+oap5i
+oar5er
+oar4se
+oast5er
+oat5a
+oat5ee
+oat5er
+4oba
+obe4l
+ob2i
+ob3ing
+2obi3o
+ob3it
+o3bla
+ob1li
+4obo
+ob3oc
+o5bol
+o5bot
+o3bra
+obrom4
+ob5t
+ob3ul
+o3bus
+2oc
+oc2a
+o4cab
+o3cad
+oc5ag
+o5calli
+o4c5ativ
+oc5ato
+4o3ce2
+o4cea
+ocen5o
+ocess4i
+och4e
+och5in
+o3chon
+ochro4n
+o5chu
+oci3ab
+oci4al
+o1cl
+o2cle
+o1cr
+ocre3
+oct2
+oc2te
+oc1to
+ocu4lu
+ocum4
+oc5uo
+ocuss4
+ocus5si
+ocut5r
+o1cy
+o5cyt
+ocyt5o
+od3al.
+ode4c
+o5deg
+ode4ga
+o5dend
+o3dent
+odes4
+od3ica
+o4d1ie
+od3iga
+od4il
+od1is2
+odis5ia
+od5it
+5odiz
+od3li
+o2do
+od5olo
+od5ous
+o3dro
+od5ru
+o2du
+odu5cer
+o4duct.
+o4ducts
+od3ul
+o5dyt
+oe3a
+oe4bi
+oe5cu
+oe4d
+o5ee
+oe5ic
+o3elec
+oelli4
+oelo4
+oe3o4p
+oep5
+o5eq
+o3er
+oes3t
+o1et
+o4et.
+oet3i
+oet4r
+3oeu
+o3ev
+o3ex
+oflu4
+4ofo
+o4ful
+ofun4
+2o1g
+o2ga
+o3gam
+og5ar5
+o3gas
+ogen1
+o5gey
+o3gi
+o4gio
+og2na
+ogoni4
+o4got
+o2gri
+o4gro
+og4sh
+o2gu
+o5gyr
+o1h2
+o3ha
+ohab3
+o3he
+oher4er
+o3ho4
+ohy4
+2oi
+oi4c
+o3ic.
+oi5ch
+o2i4d
+4oide
+oig4
+oi5ki5
+oil3er
+oil5i
+oin3de
+o3ing
+oin4t5er
+oin4tr
+oi4o
+4ois
+o3ism
+oi4t
+oit4al
+oith4
+o1j
+ok4ine
+ok3l
+ok5u
+ola4c
+o4lack
+o5lali
+ol4an
+olan5d
+ol5ast
+olat5er
+ol5ch
+ole2c4
+ol5eci
+ol5efi
+o3leo
+ole4on
+o3lep
+ol1er
+o3lest
+o3leu
+o1lia
+ol3ica
+o3lice
+ol5iciz
+ol5ick
+ol3ics
+ol5id.
+oli2e
+o3lier
+ol5ies.
+o5lif
+oli4f3e
+oli5go
+o5lina
+ol3ing
+oli5os
+ol5ip4
+olis4
+ol2it
+olle2
+ollim3
+ol4lope
+ol4lyi
+ol3mi
+o1lo
+4oloc
+ol3oid
+o4lona
+olon5el
+ol1or
+o3los
+ol1ou
+4ol1ub
+o3lumi
+o5lunte
+ol3us.
+oly3ph
+4olyt
+2om
+o1ma
+o4mab
+o2mac
+o2mal
+o4mane
+omast4
+o3mat
+om4be
+ome4d
+ome4g
+omeg5a
+ome3li
+om3ena
+omen4t
+o3meri
+om1i
+o3mia
+omi2c
+omic5r
+om4ie.
+omil4
+om4iny
+omiss4
+om2it
+omme4
+om2na
+omni3
+o4moi
+omoli3
+o2mo4n
+om5ony
+o4mos.
+omot5iv
+o2mou
+om5pil
+ompt5er
+ona4d
+on3ai
+o5nas.
+onast5i
+on5ativ
+4onau
+on1c
+oncat3
+on4cho
+5ond5ar
+ond5ent
+on3der
+on3dr
+on5dy
+o2ne
+4onea
+onec4r
+4oned
+on1ee
+on5ell
+o3neo
+on3ess
+on1et
+ong3at
+on4gu
+4onh
+4o1nia
+on5iar
+2oni4c
+onic5a
+onical4
+on4id
+on3ies
+on3if
+o5nig
+o1nio
+onk4s
+4onnes
+on5odi
+on5oi
+ono4mi
+4o5nomic
+ono3s
+o5nota
+ons2
+2ont
+ont5ane.
+on4ter
+onti5fi
+onton5
+ont4r
+on4tre
+on5ur
+o5nus
+onvo5lu
+on2z
+2oo
+oof3er
+oo1i
+ook3er
+ook3i
+oo4le
+ool5ie
+oo4m
+oon3i
+oo2p
+oop4ie
+o3opt
+oo4se
+oost5er
+oo2t
+oot3er
+ooz5er
+o1pa
+o4pab
+o5pali
+opa5ra
+opath5
+o5pec
+opens4
+op1er
+3opera
+4operag
+o1pha
+o4phe
+oph4ie
+o5phil
+op5hol
+o1phy
+ophy5la
+op1i
+op3ies
+op5ing
+o3p2it
+4opl
+oplast4
+o4poi
+opol3i
+opon4
+op5ony
+op5ori
+opoun4
+o2p5ov
+op2pl
+op5pli
+oprac4
+op3ran
+opre4
+opro4l
+op5rop
+op5so
+1op1t
+op2ta
+op1u
+o5quial
+or1a
+or5ado
+ora4g
+o5rai
+or5al
+4orals
+oram4
+oran3e
+orator5
+orb3in
+or4ch
+orch3i
+or4du
+2ore
+or5ead
+ore5ar
+ore5ca
+ore3f
+ore3g
+or3ei
+oreo5l
+or3esc
+ore3sh
+or3ess
+orest5at
+or5este
+or5ett
+ore4v
+5orex
+or4fr
+or5gn
+or1i
+4ori.
+or3ia.
+4orian
+ori4ci
+ori5cid
+orien4
+or3if
+5orig
+ori5ga
+ori4no
+4orio.
+or5ion
+4orios
+ork5a
+2orm
+orm1i
+or3n4a
+5ornis
+or3nit
+or3one
+o5roo
+or5ose
+or5oso
+or1ou
+orrel3
+orres3
+or4sc
+or4sey
+or4sti
+2ort
+ort3an
+ort3at
+ort3er
+or5tes.
+or3thi
+or4thr
+or4tit
+ort3iz
+or4tor
+or5tra
+ort3re
+4or1u
+or4un
+ory5p
+osa5i
+os3al
+osar5
+o1sc
+os4ca
+os4ce
+o2sch
+o4sci
+osclero5s
+o3sec
+osec3u
+ose5g
+os5enc
+osens4
+os5eo
+oser4
+o2set
+os5eu
+o3sia
+osi4al
+osi4an
+os5ide
+o3sier
+os5if
+os1in
+o4sis
+o5ske
+o5son
+o3soph
+os3opo
+4osp
+o3spec
+os1pi
+os4sa
+oss5ar
+os4sit
+4osta
+ost5age
+os4tar
+os5tee
+os5ten
+osten5t
+ost5ica
+os3til
+o5stome
+ost3or
+4osu
+os1ur
+2ot
+ot3a4g
+o5talit
+ot3am
+ot4anic
+o3tap
+ot4atio
+o5ta5v
+o3tax
+o4ted
+oter4m
+ot5esta
+4oth
+othalam5
+oth5erin
+o5therm
+otherm5a
+o5thor
+o5tia
+o5till
+5ot5iniz
+ot4iv
+o3tiva
+o5tivi
+o1t2o
+o5tone
+o4torn
+o4tou
+4o1tr
+oturi4
+oty3le
+o4u2
+5ou3a
+oub2
+ou5br
+ou5ca
+ou5co
+oud5i
+4oue
+ou3et
+oug4
+ou5ga
+ought5i
+ou5gi
+oul4t
+oult5i
+ou3m
+2oun
+oun2d
+ound5a
+ound5el
+oun5gin
+oun3tr
+oup5li
+our3er
+ou5san
+2ouse
+5ousia
+ouss4
+out5ish
+ouv5a
+ova3le
+o5var
+4ovati
+ov5eling
+o4ver.
+over3b
+over3s
+ov4ete
+ovid5en
+o1vis
+ovis5o
+o2v5os
+ow3ag
+ow3an
+o5way
+owd4i
+owd3l
+ow1el
+owel5li
+ow5ha
+owhith4
+ow1i
+ow5in
+owi5ne
+ows4
+ow5sh
+ow5sl
+ow5y
+o4x
+ox3i
+oxic5ol
+ox5o
+2oy
+oy5a
+oys4
+2oz
+o1zo
+ozo5i
+o3zyg
+4pa.
+pac4te
+pa5dou
+pad4r
+paes4
+pa3gan
+4pagat
+pag4ati
+pain2
+4pairm
+pa5lan
+pal3in
+pa3lo
+p4als
+pan5ac
+pan1e
+pan3i
+pa4pa
+pa3pe
+pap3u
+pa3py
+1par
+para5s
+par3l
+pa3roc
+pa3rol
+par5on
+1p4as
+pass5ive
+pas1t
+pas4tin
+pa3ter
+pati4n
+p5ato
+pat4ric
+pa5tricia
+5pau
+paul5e
+pau3p
+pa5vil
+5paw
+pawk4
+paw5ki
+2p1b
+p1c4
+p5d2
+2pe.
+pearl5i
+pe4co
+pec4tu
+2ped
+5ped3a
+3pede
+3pedi
+ped3is
+3peds
+pe2du
+p4ee
+pe2f
+4pele
+pe5leo
+pel5v
+pen4at
+5p4enc
+pend5er
+pen5dr
+pen4ic
+3p4enn
+pens5ati
+pen5u
+pe5on
+5perc
+percent5
+4pere
+perem5i
+p4eri
+5p4er3n
+p3eron
+per4os.
+per5tin
+pert5is
+per3v
+p4ery
+2pes
+pes4s3
+pes5til
+3pet
+pet5all
+pet3en
+pe2ti
+pet3r
+pe4wa
+4pex
+p1f
+p5g
+2ph.
+4phae
+pha5ged
+ph5al.
+ph2an
+phant5i
+phe4
+ph5esi
+ph3et
+3phib
+4phic
+1phil
+phi4n
+ph1is
+phi5th
+ph2l
+1pho
+4phobl
+4phoned
+3phor
+ph5oriz
+phos3p
+ph3ou
+3phra
+4phs
+1phu
+phu5i
+2phy.
+3phyl
+4pi.
+3piar
+4pica
+p5ical
+pi3co
+pi4cr
+pict4
+p2ie
+p4iest
+pi5eti
+p5ifie
+pig3n
+p2il
+3pile
+pill5in
+5pilo
+pi3lot
+pim2
+pin4e
+pin5et
+3pinge
+p4inn
+5p4ins
+3pi1o
+pip4a
+pi4pe
+5piq
+pir5ac
+pir4t
+p4is.
+p4isc
+pis2s
+piss5a
+pis5til
+pis4tr
+p2itu
+2p3k2
+p2l2
+1pla
+pla5no
+plant5er
+plas5tici
+pla5t4o
+4ple.
+4pled.
+3pleg
+3plen
+2ples
+4plism
+4plist
+plu2m
+plum4be
+plumb5er
+p4ly
+2p1m
+2pn
+pnos4
+1po
+4po.
+po3ca
+3pod
+4pof
+2p5oid
+pois5i
+po5lemic
+po4ly1
+poly3s
+poman5
+pom4e
+p4o2n
+pon4ac
+pon4ce
+pon4i4e
+3ponif
+pon5ta
+2pony
+po4pa
+po5ple
+4porato
+por3ea
+4pored
+pori4f
+por3p
+3port
+por5tie
+3p4os
+pos1s2
+po1te
+poult5e
+pound5er
+pout5er
+p5oxi
+5poy
+4p1p2
+ppar3
+pparat5
+p4pene
+ppet3
+pph4
+ppi4c
+p4pled
+p5pler
+p5plet
+ppress5o
+pprob5a
+1pr2
+prac1
+pra5d
+prar4
+4pre.
+preb3
+pre1d
+pref5ere
+prel5ate
+3prem
+pre5mat
+pren3
+pres3a
+pre5scin
+p3rese
+5pressi
+5prici
+pri4es
+4pri4m
+pring5er
+pring5i
+4prio
+p5riol
+pri4os
+pris5in
+priv2
+4priva
+4pro.
+pro3bo
+p3roc3a
+pro4ch
+pro1l
+pron4a
+proph5e
+propyl5
+pro3r2
+pros4i
+pros5tr
+pro3th
+4pry
+2ps2
+p3sac
+psal5t
+p3sh
+p1si
+p5sin.
+pso3m
+p1st
+psul3i
+3psyc
+2pt2
+pt3ab
+p4tad
+p4tan
+p2tar
+pt5arc
+p1ted
+p5tena
+pt5enn
+5ptery
+p5tet
+pt4ic
+p5tie
+p3til
+p2t3in
+pt4ine
+p3tise
+p5tisi
+p5tom
+p4tr
+p1tu
+pub1
+pu5be
+puc4
+puch4
+pudi4c
+pu5er
+puff5er
+pu4lar
+pu5lar.
+pu5lis
+p4u4m
+pum4o
+p4un
+pun4a
+3punc
+pun5gi
+pun3i
+pun2t
+pu3pi
+pur5b
+pur3c
+p4us
+push4ie
+pu3tat
+p5u5tis
+pu3tr
+4p1w
+2p4y
+py3e
+3pyg
+3pyl
+pyr3e
+py5t
+4qf
+qu4
+5quak
+4quar
+qua5tio
+2que.
+3quera
+4quere
+4ques.
+1quet
+5quina
+5quir
+3quito
+4quitu
+4ra.
+ra3ba
+5rabe
+3ra3bin
+r2abo
+ra3bol
+rac4a
+r2acu
+rac5ula
+ra5culo
+r2ad
+ra4de
+rad4ine
+rag5ou
+ra3gr
+3raill
+ra5ist
+4ralia
+ra3ly
+r5amn
+ra3mu
+r4andi
+ran5dish
+ran4du
+ra5nee
+ran4gen
+ra3nia
+ra3noi
+ran2t
+ran5ted
+5rantel
+rant5in
+rant5o
+rapol5
+rap5to
+4rarc
+rare2
+rar3ef
+rar5ia.
+ras2
+ras3c
+r2ase
+r4ask
+ra3so
+rass5a
+rass5in
+r4as5te
+ra5tap
+ra5tat
+rat5eu
+rath4e
+rat3if
+rat4in.
+ra5toc
+5ra5tol
+4r4atom
+ra4tos
+ra5tui
+rat5um
+rat3ur
+rav5ai
+rav5eli
+rav3it
+rawn4
+ra3zie
+r1b
+r2ba
+r4bag
+rb3ali
+rb1an
+rbar3
+r2be
+rbe5c
+r3bel
+rbel5o
+rb3ent
+r4bes
+rb2i
+rbic4
+rbic5u
+r2bin
+r5bine
+rbit1
+r2bos
+r4bum
+rbu5t4
+r1c2
+rcant5
+rca4s
+r4cele
+rcen5er
+rcen5tena
+r2ces
+rcha3i
+rch3al
+rch5ard
+rch5ate
+r3cheo
+r4cher
+rch4ier
+r4chin
+rch3is
+r3chit
+rcil4
+rci5nog
+rcis2
+rciz4i
+r2cl
+r4cle
+r5clo
+rcolo4
+rcrit5
+rcriti4
+rct4
+rc5ti
+r5dam
+r4d1an4
+rd4an.
+r2dar
+r5de4l
+r3dens
+r4des
+rd5ess
+rd5ian
+r4die
+r5dig
+rd2in
+rd3ing
+rdi3o
+rd1is2
+rd5ler
+rd3li
+r4dol
+rd5ous
+r2e
+4re.
+rea4
+r4ea.
+react5iv
+re3af
+re3ag
+re5alt
+re5amb
+re3ani
+re5ant
+re5asc
+reas3o
+r5eau
+3reav
+r5ebrate
+reb5uc
+re3cal
+rec4ce
+re3ce
+reced5en
+re3cha
+reci5si
+r4e1c2r
+rec4t3r
+re3cu
+2r4ed
+re1de
+re3dis
+re4dol
+re1dr
+reed5i
+ree3m
+3reer
+re2fe
+re3fin
+re5gali
+re5gra
+re3gre
+reg3ri
+re3gro
+reg3ul
+rei4
+re3if
+re1in
+re3is
+reit3
+reit4i
+re1la
+re1le
+4reled
+re3lia
+rel3ic
+re5lig
+reli4q
+rel3li
+r5em.
+rem5ac
+reman4d
+rem5ato
+r3emp
+rem5ul
+rena4
+ren5at
+r4endi
+rene2
+ren4es
+r4eni
+renic5
+ren4it
+ren4ter
+re5num
+re3oc
+3reog
+re5ola
+re3oli
+3reos
+re1pe
+re4per
+re5ph
+rep5id
+re3pin
+re3ple
+re4pre
+re1q
+rer4a
+rere4
+re5rea
+re3r2u
+2res.
+re3scr
+re3sel
+re3sem
+re3ser
+res5ist
+re5sit
+re3spe
+r3esq
+re5stal
+rest5er
+re5stu
+3retar
+re3ten
+re4t4er3
+re5term
+re1t2o
+re5ton
+re3tra
+re3tre
+re5tri
+re3tu
+re3un
+reur4
+re1v
+rev3el
+revi4t
+r1f
+rf4l
+rfu4m
+r1g2
+r4gag
+rgal4
+r2ge
+r5gee
+r4gene
+r3geo
+r3ger
+rg5li
+rgu5f
+rh2
+r5hel4
+rhe5ol
+rhos4
+3r2hy
+4ri.
+ri3am
+ri5ap
+2r2ib
+ri3bo
+rica5tu
+2rice
+rich5om
+rick4en
+r4icl
+ri5cli
+ri3col
+ri5cor
+ri4cra
+2ricu
+rid4al
+rid4e
+ri5el
+ri3er
+ri2es
+rift5er
+rif5tie
+5rifuga
+ri5gam
+rig5ant
+ri5l4a
+r4ile
+rill5er.
+rill5ings
+4rim.
+ri2ma
+rima4g
+rim5an4
+rim3at
+r4imb
+rimen4
+4rimm
+4rims
+rin4e
+r4inet
+ring5ie
+rink5er
+r4ino
+rin4s
+rins5i
+rin4t5er
+ri3o
+rio4g
+5rione
+ri4op
+ri5or
+ri5p2a
+ri5pie
+rip5lica
+ri5r
+ris4c
+ris4is
+r2isp
+ris4pa
+ris4pe
+ris5ter
+4risti
+ri3ton
+r5it5r
+r2i4v
+riv4al
+ri5vall
+riv5eli
+riv3en
+riv3il
+5ri5zo
+r1j
+r2k
+r5kas
+rk5ati
+r5kell
+rk5eni
+rk1er
+r3ket
+r3key
+r3kier
+r5kiest
+r5kin.
+r5kins
+rks4me
+r1la
+rlat3
+r1le
+r3l4ic
+r3line
+r5lins
+r4lit
+r1lo
+r3mac
+rma5ce
+r5mad
+r2mal
+r4manc
+r4mano
+r4mari
+r4mary
+rm4as
+r4m3ati
+rma5toc
+r5ma5tol
+rme2a
+r2mic
+rm4ica
+r5m2id
+rm4ie
+r5mig
+rmil5
+rmin4e
+rm3ing
+r4ming.
+r4mite.
+r3moc
+rmol4
+r1mu
+rmu3li
+r2n2
+rn3ab
+r3nac
+r5nad
+rn5ar
+rn3ate
+rn5atin
+rn5edl
+r3nel
+r3ness
+rn5est
+r3net
+r3ney
+r5nia
+rn5ib
+r3nic
+rn3in
+rn4ine
+r1nis
+rn3ist
+rni5v
+rn3iz
+rn5n
+r3noc
+r5nog
+rnt4
+rnuc4
+r5nut
+4ro.
+ro4be
+rob3le
+ro5br
+5rocc
+ro3cu
+r2od
+ro3do
+rody4n
+ro1fe
+ro3gn
+4roi
+ro3ic
+roid3
+ro3la
+r4oled
+rol5ite
+ro3ly
+romant4
+ro5mel
+ro3mit
+romolec5
+rom4p
+ro3mu
+ron4ac
+4ronal
+ro5nate
+ron5ch
+ron4do
+rong5i
+r5onme
+ro1no
+ron4ton
+roo4
+1room
+5root
+r2op
+4rop.
+ro3pel
+rop4ine
+r4opr
+r5opte
+ror5d
+4rore
+r4osa
+rosi4a
+ro5sol
+4ross
+ro5stat
+ros4ti
+ros5tit
+ro3tat
+ro1te
+ro4ter
+ro3tu
+5roue
+roul3
+round5er
+rou5sel
+4rouss
+r4out
+r4ow
+row3er
+4rox
+rpass5in
+rp3at
+rpe2
+r3pent
+rp5er.
+r2ph
+rph5e
+r3phol
+rp3ing
+rp5is
+rpol3a
+r2p5ou
+rpre4
+rpret5er
+r3pu
+r1q
+4r1r4
+rra4h
+rran5gi
+rrap4
+rre2l
+r4reo4
+rrhe3
+r3ri
+rric4
+rricu4
+rri4fy.
+rrin5ge
+rri4os
+rrob3
+rrog5
+rro4t
+r5ru
+rry5
+r3ryi
+r3rym
+2r1s2
+r4sag
+r2sal
+r5salis
+r5saliz
+r2san
+r4sar
+r2se
+r3sea
+r3sec
+rsel4
+rsell5
+rs3er.
+rs3ers
+r3set
+r3sha
+r3shi
+r4shie
+r5si2a
+rs3ib
+r5sie
+r4sil
+rs3ing
+r3sio
+r4sit
+rs3iv
+rs5li
+rstor4
+rstrat4
+r3su
+r4sus
+rswear4
+rt2
+rt3ab
+rta4g
+rt3age
+r3tar
+r4tare
+rt3c
+r1ted
+r4tedl
+r3tel4
+r5tend
+rt3eni
+r5terer
+r5tet
+r5teu
+r4thene
+rth2i
+rth5ing.
+rth3ri
+r1t4ic
+r4ticl
+r5tiet
+r5tila
+r5till
+rtil5le
+rt5ily
+r2tin
+r3tina
+rt3ing
+r3titi
+rti5tu
+rt3iv
+r2tiz
+rt5let
+rt3li
+r1t4o
+rto5l
+rt5rid
+rt5si
+r1tu
+r4tus
+rtwis4
+ru3a
+r4ube
+rub3r
+ru4ce
+r2ud
+rue4l
+r4uf
+ru3in
+ruis5i
+ru2l
+r4ume
+r4umi
+ru4more
+run4cl
+runcu4
+runcul5
+run2d4
+run2e
+ru5net
+run4g
+run4t
+ru2p
+rup5lic
+ru3pu
+rur4i
+rus4p
+rust5at
+rust5ee
+rus5tic
+rus4t5u
+ru3tal
+ru3ti
+r1v2
+r4vanc
+r2ve
+rvel4i
+r3ven
+rven4e
+rv5er.
+rv5ers.
+r3vest
+r3vet
+r3vey
+rvi4t
+r1w
+2r2y
+ry5er
+5rygm
+ry4go
+rym4b
+3ryngo
+4ryngol
+ryp5a
+ry2t
+ryth4i
+r2z
+2sa.
+2sab
+s3abl
+5sack
+sac4q
+s3act
+sac4te
+sad5i
+sad5o
+5sae
+sa4g
+3sai
+sain4t
+5sak
+sa2l
+sa5lac
+3sale
+sa3lie
+s4al4t
+sa3lu
+sa4m
+sa5min
+sam5o
+samp4
+san3a
+san4ded
+s4an4e
+san5gar
+san5if
+2sant
+sant5ri
+s3ap
+sap3r
+sar5s
+3sas.
+sas3s
+sassem4
+s2a1t
+sa2te
+s5ativ
+s5atory
+sat1u
+1sau
+sau5ci
+saur5
+savi2
+sa3vou
+4s3b
+s4bei
+sbe4s
+sby3
+sc2
+s1ca
+sca5len
+sca2p
+scar4c
+scav3
+s1ce
+s4ced
+4scei
+4s4ces
+sch2
+scid5
+s2co
+scof4
+s4coi
+3s4cope
+5scopic
+5scripti
+2s1cu
+4scura.
+4scuras
+2s1d2
+2se.
+se2a
+s4eam
+seas4
+sea3w
+sec4a
+sec5an
+se2co
+secon4
+2sed
+se4da
+sed4it
+3seed
+3sei
+sei3g
+5sela
+4sele
+se3lec
+selen5
+5self
+2s4eme
+sem2i
+semi5d
+sem4o
+sen5g
+3sens
+sen5sati
+sen5sori
+sent5ee
+5sentm
+seo5log
+se2p
+sep3a
+sep4si
+3sept
+sep3ti
+ser4an
+se5rene
+ser4to
+4servo
+s2es
+4ses.
+se5sh
+s5esta
+1set
+5seum
+3sev
+sev3en
+sewo4
+3sex
+sexo2
+3sey
+2s1f
+sfact5o
+sfi4
+sfor5e
+sfran5
+2s1g4
+s2h
+4shab
+sh4abi
+sh1er
+sh5et
+shil5li
+sh5iness
+sh3io
+5ship
+s3hon
+4shu4
+shys4
+si4all
+siast5
+4s1ib
+s3icat
+3sicc
+2s5icl
+si4cu
+si5cul
+s4id
+4sid.
+si4de
+side5l
+sid3en
+sid5eri
+4sids
+5sid5u4a
+si4ers
+sif4
+sif5f
+si4g
+1sili
+sim4ply
+2sin
+s2ine
+sin5et
+5sing5er
+sin3i
+5sink
+si5nol
+si3nus
+1sio4
+4sio.
+si5o5s
+3sip
+si4pr
+s1is2
+4sish
+4sism
+sist3a
+sist3o
+s1it
+si4te
+sit5om
+4s1iv
+5siva
+s1j
+s2k2
+4sk.
+s5kar
+ske2
+s3ket
+s5key
+s3kier
+s5kiest
+sk5ily
+sk5ines
+4sks
+sky3l
+2sl4
+slang5i
+s1lat
+3slau
+slav5eri
+s2le
+s5lea
+s3let
+s5ley
+s3lit
+slo3c
+slov5
+s5luc
+2s1m4
+s3man
+smas4
+s3men
+smi3g
+3smith
+smo4d
+smu5tatio
+s1n2
+s2na
+2so.
+2s3od
+sod3o
+sody4
+3soe
+4s3oid
+s2ol
+sol3a
+so5lan
+sol4er
+so3lic
+3solve
+solv5er
+1so2m
+soma5to
+3some.
+so5mete
+so3mo
+s2ona
+son5at
+s4one
+son5or
+s2o2p
+4sor3ie
+5sorio
+sor4it
+s5oriz
+sor3o
+s3ory
+sos4
+4sose
+so5th
+3sou
+sov5e
+so3vi
+spast4
+spens5a
+4speo
+3sperm
+s5pero
+spers5a
+sph2
+s3pha
+3spher
+spic5ul
+s2pid
+sp5id.
+s5pier
+spil4l
+s2pin
+sp3ing
+spi5ni
+spital5
+s1pl
+sple2
+s4ply
+s2po
+5spom
+spon5gi
+3spons
+3spoon
+spru5d
+s4py
+s1r
+sre2
+sreg5
+srep5u
+sre4s
+4ss
+s1sa
+s5sam2
+s1sel
+s5seng
+s3sent
+ssent5er
+ss3er.
+s5seri
+ss3ers
+s5seu
+ssev3
+s3sia
+s1sic
+s1sif
+ss1in
+ss4in.
+s4sine
+ss4is.
+s3s2it
+ss4ivi
+ss5li
+ss3m
+s4sn
+s1so
+ssol3u
+ssolu4b
+s4sore
+ssor5ial
+ss5po
+s1su
+ss3w
+st2
+4st.
+stab2
+sta3bi
+4stak
+s4tale
+stant5iv
+s3tas.
+5static
+st3c
+ste2
+ste5ar
+ste5at
+s4teb
+s4tec
+4s1ted
+s4tedl
+s4tedn
+4stere
+ster4ia
+s4tern.
+s3tero
+st5est
+s1th
+s4tha
+s4thu
+s3ti3a
+3stick
+s3ticu
+stil5ler
+s4tily
+st3ing
+5s4tir
+s5tiz
+4stl
+st3ler
+st3li
+s4toe
+3ston
+stone3
+ston4ie
+s5torat
+stor5ian
+s4tose
+s2tou
+s4tray
+stre4
+strep3
+3struc
+stru5d
+2st3s
+s1tu
+s4tud
+stu4m
+stur4e
+4stw
+s4ty
+1styl
+4su.
+su5an
+su4b1
+subt2
+suct4
+sud4a
+su3et
+suf3f
+sug3
+3sui
+sui5c
+su5ing
+1s2ul
+s4u2m
+sum3i
+sun4a
+su5pe
+su3pin
+supra3
+sur4as
+sur3c
+s4urg
+sur3pl
+su5su
+su5z
+2s3v
+svers5a
+sves4
+svest5i
+sw2
+5swee
+swell5i
+4swered
+2swo
+s2y
+4sy.
+sy4bi
+sy1c
+sy4ce
+sy4chr
+sy4d
+1syl
+3syn
+syn5e
+sy5pho
+syr5i
+2ta.
+2tab
+ta5blem
+3tabli
+t2abo
+ta3bol
+ta4bou
+t4a3ce
+ta5chom
+ta3chy
+ta4cid
+t5ade
+tad4i
+5t2adj
+ta5dor
+tad2r
+tae5n
+taf4
+tage5o
+ta5gog
+3tagr
+3tah
+1tai
+3tail
+2tair
+t4ais
+1tak
+tal2c
+tal5ent
+ta5lep
+t4alia
+t4alin
+tal4l3a
+5tallu
+t2alo4
+ta3ly
+tam5ari
+5ta3met
+tamorph5
+tan5at
+tand5er
+t4ane
+5tanel
+tan5ie
+t5aniz
+tant5an
+ta4pa
+1tard
+tar5ia.
+tark5i
+tar3n
+3tarr
+tas3i
+t3asm
+5tass
+tas4t
+ta3sta
+tast5i4c
+t4ateu
+3tatis
+t4ato.
+tat4ou
+tat4r
+tat3ut
+tau3to
+t5awa
+tawn4
+t4ax
+4t3b
+2tc2
+t1ca
+tcas4
+tch5ett
+tch5u
+4t1d4
+4te.
+te5cha
+5techn
+te3cr
+t4ed
+te5d2a
+4tedd
+4tedo
+4teei
+te2g
+5tegic
+t3ego
+teg1r
+teg3u
+tei4
+te2l
+4teled
+tel5iz
+1tell
+4te3lo
+3tels
+tem3a
+4teme
+te5mon
+ten4ag
+4tenar
+4tene
+t5enm
+5tenna
+4teno
+te5nog
+tent4a
+te2o
+teo5l
+2tep
+te3pe
+tep5i
+tera4c
+t4erag
+t4erato
+3ter3b
+5terd
+2tere4
+ter3eb
+ter5ec
+5terel
+te3reo
+3teres4
+1teri
+ter3ia
+ter5id
+ter5if
+t4erin
+ter5iorit
+ter3it
+ter5k
+5ternit
+ter5no
+3terr
+2t2es
+4tes.
+tesi4
+t3esq
+t3ess.
+t5esses
+tes4t
+test3a
+5teste
+test5er
+test5in
+test5or
+tes5tu
+teti4
+tet1r
+tetr5o
+tew3ar
+3tex
+2t3f
+t3g
+2th.
+tha4
+th5al.
+thal3m
+4the.
+4thea
+th5eas
+4thed
+1thei
+3theo
+theo3l
+t4her
+5therap
+th5erc
+t5herd
+4thered
+th3ern
+th3ery
+4thi.
+t5hill
+3think
+5th4io
+th4is.
+th5lo
+2thm2
+th4mi
+th3oli
+4t5hoo
+4thopt
+4thores
+3thot
+5thoug
+1th2r
+2ths
+5thur
+5thym
+3thyr
+thys4
+4ti.
+1ti2a
+ti3ab
+2t3ib
+5ti5bu
+t1ic
+t3ic.
+tic5as
+t2ici
+tici5ar
+3ti3cin
+t4icity
+ti3col
+tic1u
+4ticule
+t3id.
+t4ida
+3tidi
+ti3die
+t5ids
+3ti2en
+1tif2
+ti3fe
+4tiff
+4tific.
+3tigi
+tigi5o
+4tigm
+5tigu
+ti4ka
+ti4let
+5tilin
+t4ill
+til4l5ag
+t4ilt
+1tim
+tim1a
+5timet4
+t1in
+5ti5nad
+4tined
+tin3et
+ting5ing
+3tinn
+4tins
+t4int
+tin4te
+tin5ted
+tint5er
+tin3ue
+1tio
+ti3oc
+tiol3a
+ti5omo
+4tionem
+1tip
+ti5plex
+ti3pli
+ti4q
+ti5qua
+t3iris
+2t1is
+3tisan
+tis4c
+tish5i
+3tiss
+tis2t
+5t4iste
+t4istr
+ti5t4an
+tith4e
+tit5il
+t3itis
+3titl
+ti3tra
+3tiu
+2t1iv
+tiv5all
+t3ive
+tiv3is
+2tl
+t1la
+tlant4
+5tleb
+5tledr
+3tlef
+3tlem
+5tlen
+5tletr
+5tlew
+t1li
+tlin4
+4t3m
+tmet2
+tmo4t5
+2t3n2
+t4nere
+2to.
+toas4
+to1b
+4tocc
+tode5c
+tod4i
+to5do
+3toe
+1tog
+2t3oid
+5tok
+4toled
+tol4l
+tolu5
+to5ly
+tom3ac
+toma4n
+tomat5ol
+tom4b
+to4mog
+tom5os
+ton4e
+ton5ea
+3tonn
+ton3s
+top4e
+to5pia
+to4pos
+t1or
+to5rad
+4tore
+tor5er
+tori4as
+tor5oi
+tor5p
+tor4q
+3tos.
+to3s4p
+tos4t
+to5str
+to5talis
+to5taliz
+to3tem
+tot5u
+tou4f
+5tour
+t3ous
+4tov
+to3war
+t3p
+tr2
+tra4co
+4tradd
+4traist
+tra5q
+trarch4
+tra5ven
+tra5vers
+trav5est
+3tray
+4tre.
+4tred
+tre4mo
+tren4
+trend5i
+tre5pr
+tres4s
+4trew
+t5ricl
+3tricu
+t2rie
+tri5fli
+trifu5ga
+2tril
+tri3li
+tri3me
+t2rit
+4trix
+t4rod
+tro5f
+5troop
+tro4pha
+tro3sp
+t2rot
+t5roto
+tro1v
+3troy
+t4ruc
+tru3i
+2t4ry
+trys4
+4t1s
+t2sc
+ts4h
+ts2i
+t4sil
+tstay4
+2t1t4
+tta4
+t3tab
+t5tan
+t5tas
+t3ted
+t4tere
+t5terer
+t5test
+t3ti
+tti3tu
+ttitud4
+ttitu5di
+t3tler
+t3tli
+t5toi
+t5tor
+t3tos
+tt5s
+t4tupe
+t2ty
+4tu.
+tu1a
+tu4al5li
+tuari4
+tu4bin
+tu5bu
+tu5den
+tud5ie
+tu5en
+4tuf
+tu1i
+tu4is
+2tum.
+3tumi
+4tums
+3tun
+tun4a
+tu4ne
+tun5it
+tup5let
+tup5lic
+tu5rac
+t4uran
+turb3a
+tur4d
+turf5i
+5turit
+tur4n
+5tur5o
+1tut
+4tut4iv
+t1w
+t3wa4
+t2wi
+twi5li
+t3wit
+t3wo
+twon4
+4ty.
+ty4a
+5tych
+ty4let
+tyl5i
+ty5mi
+1typ
+3type
+1tyr1
+2tz2
+t5zia
+t5zie
+2ua2
+ua3ci
+u2ag
+ua5h
+u1al
+ua5lu
+uan4o
+uant5is
+uant5it
+uar3a
+uar2d
+uar3i
+uari4n
+uar5ters
+uar4t5i
+ua5tern
+uba4
+ub5bly
+u1b2i
+u4bicu
+ub3lin
+ub5lo
+ub3ra
+4uc
+u1c2a
+uccen5
+u4cend
+u4ch
+u5chr
+uc3l
+u4com
+uco5t
+uc2tr
+uc3ub
+uc5ul
+u5cum
+u5dac
+ud1al
+ud4e
+ud5ep
+u4der
+udev4
+ud4g
+udi4cin
+ud3ied
+u5dinis
+udi3o
+u5ditio
+u2do
+u5doi
+ud5on
+u5dor
+ueb4
+u4ed
+uen4o
+uen4ter
+uer3a
+ues4s
+uest5rat
+ues5tri
+ue4t
+uf2
+3ufa
+u3fl
+u4fo
+uft4
+uga4c
+ug5lif
+ug2ni
+u4go
+ug3ul
+ug3ura
+uhem3
+2ui2
+ui3al
+u2ic
+uicent5
+uid5o
+uil4a
+uild5er
+ui3lib
+uil4t
+uinc5u
+uin4s
+uint4
+uin4ta
+ui5pr
+uis3er
+uis4t
+uisti4
+uit5er
+ui5val5
+ui3vo
+u2iz
+4ul.
+u1la
+u4lab
+4ulac
+ul5ard
+u5lat
+ul4bo
+ul3ca
+ul4ch
+5ulche
+5ulchre
+4ulea
+u5lee
+u1len4
+4ulenci
+u5lent
+ulet4
+ul4ev
+ul2fa
+ul2i
+ul4ia
+u3line
+ul3ing
+ul5ish
+u5liti
+u5lity
+4ull
+ul4lat
+ul4l5ib
+ul4lis
+ul4lit
+ul3m
+u1lo
+u5lom
+ulph3i
+ulph3o
+ulp5ing
+ul4po
+2uls
+ul3sif
+u1lu
+ul1v4
+u1ma
+um3am
+umar4
+u5mas
+um4bar.
+um2bi
+umen4t
+u1mi
+u4mic
+u2m5if
+umi4fy
+umi5lia
+umin4ar
+u4mined
+u4m3ing
+u4mora
+u4mos
+um2p
+um4pa
+ump3er
+ump5li
+umpt4
+ump5te
+u1mu
+umu4lo
+un1
+u4n3a4
+un5ab
+unabu4
+un4ae
+un4as.
+un2ce
+un4dal
+un3ded
+unde4t
+undeter5m
+undi4c
+un4die
+un3do
+un4dus
+u3n2er
+unho5li
+un2i
+u1nic
+un4ie
+un3in
+un4ine
+uni5p
+uni3so
+un3ist
+uni1v
+un3iz
+unk5eri
+un5ket
+un3kn
+2unn
+un4nag
+un5o
+un5r
+un3s4
+un5sh
+un2ti
+until4
+unu4
+un3us
+uo3de
+uodent4
+u5oros
+u3os
+uo5tatio
+u1ou
+2up
+u1pat
+u1pe
+u5pee
+uper3
+u1ph
+u5pid
+up3ing
+u4po
+u5pol
+u2pr
+upre4
+u5quet
+u4r
+ur1a
+4ura.
+ura4ci
+4urae
+ura2g
+4uranti
+uras5
+urb5ing
+ur2c
+urc3a
+ur5den.
+ur5deni
+ur5die
+ur4du
+ur3ea
+ur5ee
+ur1er
+ur3ers
+ur1e2t
+ur3ett
+ur2f
+ur3fa
+ur1i
+u5ri5cu
+ur4ie.
+ur5ifie
+uril4
+ur4ili
+ur5ion
+uri4os.
+url5er
+ur5lie
+url5ing
+ur1m4
+urn3al
+urn3er
+urn5s
+ur1o
+uro4d
+ur5o4m
+ur5ot
+uroti4
+urpen5t
+urph4
+ur2s
+urs5al
+urs5er
+ur3sh
+urs3or
+ur5ta
+ur1te
+ur5tes
+urth2
+ur3the
+urti4
+ur1u
+ur4va
+u3sad
+us3ag
+us3al
+us4ap
+us3at
+2usc
+us4can
+ush5a
+us5ian
+usil5
+u4s1in
+usk5er
+us1p
+us4pa
+uss4e
+4ust
+us3tac
+us5tan
+ust4ic
+us5tici
+ust5ig
+ust3il
+us1to4
+us1tr
+us4tre
+usur4e
+us5uri
+u3tane
+utch4e
+ut5eni
+u5teo
+u4tere
+ut2i
+u3tie
+ut3ing
+u5tini
+u3tio
+ut5ism
+ut3ist
+5u5tiz
+ut3le
+utli4
+ut2o
+u4to5s
+u4t1ra
+uts2
+ut5sm
+ut4tone
+u3tu
+u4tul
+uu4
+uv2
+u4va
+uve2
+uven3
+uv5eri
+u5vin
+ux2o
+uy4a
+uy5er
+4va.
+2v3ab
+5vac
+va1ca
+va5ceo
+vacu1
+v4ad
+3vag3a
+va4ge
+4vaged
+vager4
+vag5r
+v1al.
+1vale
+vali2
+va5lie
+val4ise
+5valu
+5val4v
+vam4i
+va5mo
+5vann
+vanta4
+4vantl
+var4is
+4vase
+vas5el5
+v5a4so
+vast3a
+v4at.
+5vatee
+vat4ina
+4vatu
+2ve.
+vect4
+ve3g
+3vei
+2vel
+vel3at
+4vele
+v3eler
+ve5line
+v1ell
+v4ella
+vel5ler
+vel3li
+vel5opi
+ven4al
+ven4do
+ve1ne
+ve5nia
+vent5o
+ven4tr
+4venu
+v5en5ue
+5ve3o
+5verb
+verde5v
+4v4ere4
+ver5ea
+ver3ei
+v5erie
+ver3m4
+ver4ne
+5verse
+4ves.
+4vi.
+5vialit
+vi4atr
+vi1b4
+vic2
+vi4ca
+vi5cari
+vice3r
+5vict2
+5vicu
+5vider
+vign3
+vi4l
+vil3i
+3vili4a
+v5ilise
+v5ilize
+vil5lin
+vim4
+5vime
+2v1in
+vin4ac
+3vinci
+vin2e
+5vinit
+v5iniz
+vint4
+vin5ta
+3vi1o
+viol3
+vi5om
+5vi3p
+vire4
+vi5rid
+vir3u
+5visecti
+5visio
+v3ism
+2v5ist
+vi2t
+vit2a
+vi3tal
+vi5tel
+v5itie
+vit1r
+vi3tu
+v3ity
+viv5al
+viv5or
+vi5zo
+1vo
+2vo.
+vo2l
+vo5litio
+vol4ubi
+volv4
+4von
+vo5rac
+3vorc
+4vore
+3voro
+vo3tar
+2vow
+vr4
+v5ra4
+v5ri
+v5ro
+vrot4
+4vs
+v3ure
+2vv2
+v5ver
+v5vi
+4vy
+4wab
+wag3o
+wais4
+w3al.
+wall5er
+w3als
+wan5gli
+wank5er
+war5ded
+ward5er
+ward5r
+war4f
+war4te
+war5thi
+wass4
+was4t
+wa1te
+wav4ine
+w1b4
+w4bon
+w5c
+w5die
+w3dr
+we4b
+w4ed
+3weed
+5wei
+weight5i
+weir4
+wel3i
+weliz4
+wel4izi
+wel4li
+went4
+wes4
+west3
+w5est.
+w5f
+wh2
+w5hid
+wi2
+wid4e
+wi5er
+will5in
+wim2p
+win2e
+wing5er
+win4tr
+3w4ise
+with5eri
+w3la
+wl1er
+wl1i
+wl4ie
+w1m
+1wo
+wol4
+wol5ver
+3wom
+won2t
+word5i
+wotch4
+woun4
+wp5in
+wra4
+ws5ing
+w5ster
+wt4
+w5te
+w3to
+wy2
+wz4
+x1a
+x4ach
+x4ade
+x2ag
+x3agg
+xa5met
+x3ami
+xan5d
+xano4
+x2as
+xas5p
+x3c4
+xcav3
+xcor5
+xe4
+x1ec
+xec3r
+xe5cutio
+xecut5o
+xe2d
+x5edl
+x5edn
+x5eg
+x1em
+x3en
+xen4op
+x3er
+xer4g
+xer3o
+x1h
+xhort4a
+x1i
+x3ia.
+x4ias
+xi4c
+x5ige
+xim3a
+x4ime
+ximet4
+x3io
+xi4p
+x4it.
+x4its
+x1o
+x4ode
+x5om
+xo4mat
+xo4n
+x4os
+xotrop4
+x3p
+xpel4
+xpo5n2
+xpoun4
+x1s2
+x1t2
+x4ted
+xtens5o
+xter3i
+xter4m3
+xtern3
+x4th
+xti4
+xtra5d
+xtra3v
+xtre4
+xu4o
+x1ur
+xur4b
+x5us
+x5w
+xx4
+xys4
+xy3t
+y1a2
+y5ac
+1y2ar
+3yard
+yas4i
+4y1b
+yb2i
+yca5m
+y5chede
+ych5is
+y3cho
+y4chose
+yc1l
+yclam4
+y4coli
+y4coll
+ycom4
+y2cos
+y1d4
+yda4
+yder4
+ydro5s
+y4drou
+y3ee
+yel5o
+y3en
+y1er
+y3est.
+yes5te
+y5ett
+y5f
+y1g
+ygi2
+ygi5a
+y3gl
+ygo4i
+y1h
+y1i
+y3in
+yle2
+ylin5de
+yllab5i
+yl3os
+yl5ou
+y1me4
+y3men
+y5met
+y5mia
+ym5in
+ymot4
+ym4pha
+yn1
+ynago4
+ynand5
+yn5ap4
+yn5ast
+yn4ci
+ynd4
+yn2e
+yn3er
+yng4
+yn4gol
+yni4c
+yn4y
+y1o2
+yo3d
+yo4gis
+youn4
+young5
+2yp
+yp5al
+yper3
+y5pere
+y4peri
+y4pero
+y4pet
+y2ph
+yph4e
+yph3i
+y4p1i
+yp1n
+ypo1
+y4pox
+y2pr
+yp5ri
+yp4si
+yp5syf
+ypt3a
+y5pu
+y3rag
+yr3at
+yr3ic
+y5rig
+yr3is
+yr3i4t
+yr5olo
+yr4r
+yr4s
+yr5u
+4y2s
+ys5ag
+ys5at
+y3s2c
+y3sh
+ys1ic
+ys3in
+ysi4o
+yso5
+ys4so
+ys1t
+ys4to
+y3u
+yv4
+y3w
+yz5er
+yzy4
+z1a1
+2za.
+za4bi
+za2i
+z4as
+za4te
+zd4
+zeb4
+ze4d
+zen4a
+z5eng
+zer5a
+z3et4
+z1i
+zib5
+5zic4
+z2ie
+zi5m
+zin4c3i
+z3ing
+zing5i
+z4is
+3zlem
+z3ler
+z3li
+4zo.
+5zoa
+zo3an
+3zoo2
+zo3ol
+zo3on
+zo5op
+zo5oti
+zo5p
+zot2
+z5s
+5zum
+4zy.
+zz2
+z3zar
+z5zas
+z3zie
+zzo3
+z5zot
+</patterns>
+</hyphenation-info>
diff --git a/hyph/en_US.xml b/hyph/en_US.xml
new file mode 100644 (file)
index 0000000..70428b2
--- /dev/null
@@ -0,0 +1,4887 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!DOCTYPE hyphenation-info SYSTEM "hyphenation.dtd">
+<!-- 
+    Hyphenation information for US English
+    Created by Carlos Villegas from TeX original (Liang's) hyphenation 
+    patterns and G.D.C. Kuiken's additions (see comments in the middle).
+-->
+<hyphenation-info>
+
+<hyphen-char value="-"/> 
+<hyphen-min before="3" after="2"/>
+
+<classes>
+aA
+bB
+cC
+dD
+eE
+fF
+gG
+hH
+iI
+jJ
+kK
+lL
+mM
+nN
+oO
+pP
+qQ
+rR
+sS
+tT
+uU
+vV
+wW
+xX
+yY
+zZ
+</classes>
+
+<exceptions>
+as-so-ciate
+as-so-ciates
+dec-li-na-tion
+oblig-a-tory
+phil-an-thropic
+present
+presents
+project
+projects
+reci-procity
+re-cog-ni-zance
+ref-or-ma-tion
+ret-ri-bu-tion
+ta-ble
+</exceptions>
+
+<patterns> 
+.ach4
+.ad4der
+.af1t
+.al3t
+.am5at
+.an5c
+.ang4
+.ani5m
+.ant4
+.an3te
+.anti5s
+.ar5s
+.ar4tie
+.ar4ty
+.as3c
+.as1p
+.as1s
+.aster5
+.atom5
+.au1d
+.av4i
+.awn4
+.ba4g
+.ba5na
+.bas4e
+.ber4
+.be5ra
+.be3sm
+.be5sto
+.bri2
+.but4ti
+.cam4pe
+.can5c
+.capa5b
+.car5ol
+.ca4t
+.ce4la
+.ch4
+.chill5i
+.ci2
+.cit5r
+.co3e
+.co4r
+.cor5ner
+.de4moi
+.de3o
+.de3ra
+.de3ri
+.des4c
+.dictio5
+.do4t
+.du4c
+.dumb5
+.earth5
+.eas3i
+.eb4
+.eer4
+.eg2
+.el5d
+.el3em
+.enam3
+.en3g
+.en3s
+.eq5ui5t
+.er4ri
+.es3
+.eu3
+.eye5
+.fes3
+.for5mer
+.ga2
+.ge2
+.gen3t4
+.ge5og
+.gi5a
+.gi4b
+.go4r
+.hand5i
+.han5k
+.he2
+.hero5i
+.hes3
+.het3
+.hi3b
+.hi3er
+.hon5ey
+.hon3o
+.hov5
+.id4l
+.idol3
+.im3m
+.im5pin
+.in1
+.in3ci
+.ine2
+.in2k
+.in3s
+.ir5r
+.is4i
+.ju3r
+.la4cy
+.la4m
+.lat5er
+.lath5
+.le2
+.leg5e
+.len4
+.lep5
+.lev1
+.li4g
+.lig5a
+.li2n
+.li3o
+.li4t
+.mag5a5
+.mal5o
+.man5a
+.mar5ti
+.me2
+.mer3c
+.me5ter
+.mis1
+.mist5i
+.mon3e
+.mo3ro
+.mu5ta
+.muta5b
+.ni4c
+.od2
+.odd5
+.of5te
+.or5ato
+.or3c
+.or1d
+.or3t
+.os3
+.os4tl
+.oth3
+.out3
+.ped5al
+.pe5te
+.pe5tit
+.pi4e
+.pio5n
+.pi2t
+.pre3m
+.ra4c
+.ran4t
+.ratio5na
+.ree2
+.re5mit
+.res2
+.re5stat
+.ri4g
+.rit5u
+.ro4q
+.ros5t
+.row5d
+.ru4d
+.sci3e
+.self5
+.sell5
+.se2n
+.se5rie
+.sh2
+.si2
+.sing4
+.st4
+.sta5bl
+.sy2
+.ta4
+.te4
+.ten5an
+.th2
+.ti2
+.til4
+.tim5o5
+.ting4
+.tin5k
+.ton4a
+.to4p
+.top5i
+.tou5s
+.trib5ut
+.un1a
+.un3ce
+.under5
+.un1e
+.un5k
+.un5o
+.un3u
+.up3
+.ure3
+.us5a
+.ven4de
+.ve5ra
+.wil5i
+.ye4
+4ab.
+a5bal
+a5ban
+abe2
+ab5erd
+abi5a
+ab5it5ab
+ab5lat
+ab5o5liz
+4abr
+ab5rog
+ab3ul
+a4car
+ac5ard
+ac5aro
+a5ceou
+ac1er
+a5chet
+4a2ci
+a3cie
+ac1in
+a3cio
+ac5rob
+act5if
+ac3ul
+ac4um
+a2d
+ad4din
+ad5er.
+2adi
+a3dia
+ad3ica
+adi4er
+a3dio
+a3dit
+a5diu
+ad4le
+ad3ow
+ad5ran
+ad4su
+4adu
+a3duc
+ad5um
+ae4r
+aeri4e
+a2f
+aff4
+a4gab
+aga4n
+ag5ell
+age4o
+4ageu
+ag1i
+4ag4l
+ag1n
+a2go
+3agog
+ag3oni
+a5guer
+ag5ul
+a4gy
+a3ha
+a3he
+ah4l
+a3ho
+ai2
+a5ia
+a3ic.
+ai5ly
+a4i4n
+ain5in
+ain5o
+ait5en
+a1j
+ak1en
+al5ab
+al3ad
+a4lar
+4aldi
+2ale
+al3end
+a4lenti
+a5le5o
+al1i
+al4ia.
+ali4e
+al5lev
+4allic
+4alm
+a5log.
+a4ly.
+4alys
+5a5lyst
+5alyt
+3alyz
+4ama
+am5ab
+am3ag
+ama5ra
+am5asc
+a4matis
+a4m5ato
+am5era
+am3ic
+am5if
+am5ily
+am1in
+ami4no
+a2mo
+a5mon
+amor5i
+amp5en
+a2n
+an3age
+3analy
+a3nar
+an3arc
+anar4i
+a3nati
+4and
+ande4s
+an3dis
+an1dl
+an4dow
+a5nee
+a3nen
+an5est.
+a3neu
+2ang
+ang5ie
+an1gl
+a4n1ic
+a3nies
+an3i3f
+an4ime
+a5nimi
+a5nine
+an3io
+a3nip
+an3ish
+an3it
+a3niu
+an4kli
+5anniz
+ano4
+an5ot
+anoth5
+an2sa
+an4sco
+an4sn
+an2sp
+ans3po
+an4st
+an4sur
+antal4
+an4tie
+4anto
+an2tr
+an4tw
+an3ua
+an3ul
+a5nur
+4ao
+apar4
+ap5at
+ap5ero
+a3pher
+4aphi
+a4pilla
+ap5illar
+ap3in
+ap3ita
+a3pitu
+a2pl
+apoc5
+ap5ola
+apor5i
+apos3t
+aps5es
+a3pu
+aque5
+2a2r
+ar3act
+a5rade
+ar5adis
+ar3al
+a5ramete
+aran4g
+ara3p
+ar4at
+a5ratio
+ar5ativ
+a5rau
+ar5av4
+araw4
+arbal4
+ar4chan
+ar5dine
+ar4dr
+ar5eas
+a3ree
+ar3ent
+a5ress
+ar4fi
+ar4fl
+ar1i
+ar5ial
+ar3ian
+a3riet
+ar4im
+ar5inat
+ar3io
+ar2iz
+ar2mi
+ar5o5d
+a5roni
+a3roo
+ar2p
+ar3q
+arre4
+ar4sa
+ar2sh
+4as.
+as4ab
+as3ant
+ashi4
+a5sia.
+a3sib
+a3sic
+5a5si4t
+ask3i
+as4l
+a4soc
+as5ph
+as4sh
+as3ten
+as1tr
+asur5a
+a2ta
+at3abl
+at5ac
+at3alo
+at5ap
+ate5c
+at5ech
+at3ego
+at3en.
+at3era
+ater5n
+a5terna
+at3est
+at5ev
+4ath
+ath5em
+a5then
+at4ho
+ath5om
+4ati.
+a5tia
+at5i5b
+at1ic
+at3if
+ation5ar
+at3itu
+a4tog
+a2tom
+at5omiz
+a4top
+a4tos
+a1tr
+at5rop
+at4sk
+at4tag
+at5te
+at4th
+a2tu
+at5ua
+at5ue
+at3ul
+at3ura
+a2ty
+au4b
+augh3
+au3gu
+au4l2
+aun5d
+au3r
+au5sib
+aut5en
+au1th
+a2va
+av3ag
+a5van
+ave4no
+av3era
+av5ern
+av5ery
+av1i
+avi4er
+av3ig
+av5oc
+a1vor
+3away
+aw3i
+aw4ly
+aws4
+ax4ic
+ax4id
+ay5al
+aye4
+ays4
+azi4er
+azz5i
+5ba.
+bad5ger
+ba4ge
+bal1a
+ban5dag
+ban4e
+ban3i
+barbi5
+bari4a
+bas4si
+1bat
+ba4z
+2b1b
+b2be
+b3ber
+bbi4na
+4b1d
+4be.
+beak4
+beat3
+4be2d
+be3da
+be3de
+be3di
+be3gi
+be5gu
+1bel
+be1li
+be3lo
+4be5m
+be5nig
+be5nu
+4bes4
+be3sp
+be5str
+3bet
+bet5iz
+be5tr
+be3tw
+be3w
+be5yo
+2bf
+4b3h
+bi2b
+bi4d
+3bie
+bi5en
+bi4er
+2b3if
+1bil
+bi3liz
+bina5r4
+bin4d
+bi5net
+bi3ogr
+bi5ou
+bi2t
+3bi3tio
+bi3tr
+3bit5ua
+b5itz
+b1j
+bk4
+b2l2
+blath5
+b4le.
+blen4
+5blesp
+b3lis
+b4lo
+blun4t
+4b1m
+4b3n
+bne5g
+3bod
+bod3i
+bo4e
+bol3ic
+bom4bi
+bon4a
+bon5at
+3boo
+5bor.
+4b1ora
+bor5d
+5bore
+5bori
+5bos4
+b5ota
+both5
+bo4to
+bound3
+4bp
+4brit
+broth3
+2b5s2
+bsor4
+2bt
+bt4l
+b4to
+b3tr
+buf4fer
+bu4ga
+bu3li
+bumi4
+bu4n
+bunt4i
+bu3re
+bus5ie
+buss4e
+5bust
+4buta
+3butio
+b5uto
+b1v
+4b5w
+5by.
+bys4
+1ca
+cab3in
+ca1bl
+cach4
+ca5den
+4cag4
+2c5ah
+ca3lat
+cal4la
+call5in
+4calo
+can5d
+can4e
+can4ic
+can5is
+can3iz
+can4ty
+cany4
+ca5per
+car5om
+cast5er
+cas5tig
+4casy
+ca4th
+4cativ
+cav5al
+c3c
+ccha5
+cci4a
+ccompa5
+ccon4
+ccou3t
+2ce.
+4ced.
+4ceden
+3cei
+5cel.
+3cell
+1cen
+3cenc
+2cen4e
+4ceni
+3cent
+3cep
+ce5ram
+4cesa
+3cessi
+ces5si5b
+ces5t
+cet4
+c5e4ta
+cew4
+2ch
+4ch.
+4ch3ab
+5chanic
+ch5a5nis
+che2
+cheap3
+4ched
+che5lo
+3chemi
+ch5ene
+ch3er.
+ch3ers
+4ch1in
+5chine.
+ch5iness
+5chini
+5chio
+3chit
+chi2z
+3cho2
+ch4ti
+1ci
+3cia
+ci2a5b
+cia5r
+ci5c
+4cier
+5cific.
+4cii
+ci4la
+3cili
+2cim
+2cin
+c4ina
+3cinat
+cin3em
+c1ing
+c5ing.
+5cino
+cion4
+4cipe
+ci3ph
+4cipic
+4cista
+4cisti
+2c1it
+cit3iz
+5ciz
+ck1
+ck3i
+1c4l4
+4clar
+c5laratio
+5clare
+cle4m
+4clic
+clim4
+cly4
+c5n
+1co
+co5ag
+coe2
+2cog
+co4gr
+coi4
+co3inc
+col5i
+5colo
+col3or
+com5er
+con4a
+c4one
+con3g
+con5t
+co3pa
+cop3ic
+co4pl
+4corb
+coro3n
+cos4e
+cov1
+cove4
+cow5a
+coz5e
+co5zi
+c1q
+cras5t
+5crat.
+5cratic
+cre3at
+5cred
+4c3reta
+cre4v
+cri2
+cri5f
+c4rin
+cris4
+5criti
+cro4pl
+crop5o
+cros4e
+cru4d
+4c3s2
+2c1t
+cta4b
+ct5ang
+c5tant
+c2te
+c3ter
+c4ticu
+ctim3i
+ctu4r
+c4tw
+cud5
+c4uf
+c4ui
+cu5ity
+5culi
+cul4tis
+3cultu
+cu2ma
+c3ume
+cu4mi
+3cun
+cu3pi
+cu5py
+cur5a4b
+cu5ria
+1cus
+cuss4i
+3c4ut
+cu4tie
+4c5utiv
+4cutr
+1cy
+cze4
+1d2a
+5da.
+2d3a4b
+dach4
+4daf
+2dag
+da2m2
+dan3g
+dard5
+dark5
+4dary
+3dat
+4dativ
+4dato
+5dav4
+dav5e
+5day
+d1b
+d5c
+d1d4
+2de.
+deaf5
+deb5it
+de4bon
+decan4
+de4cil
+de5com
+2d1ed
+4dee.
+de5if
+deli4e
+del5i5q
+de5lo
+d4em
+5dem.
+3demic
+dem5ic.
+de5mil
+de4mons
+demor5
+1den
+de4nar
+de3no
+denti5f
+de3nu
+de1p
+de3pa
+depi4
+de2pu
+d3eq
+d4erh
+5derm
+dern5iz
+der5s
+des2
+d2es.
+de1sc
+de2s5o
+des3ti
+de3str
+de4su
+de1t
+de2to
+de1v
+dev3il
+4dey
+4d1f
+d4ga
+d3ge4t
+dg1i
+d2gy
+d1h2
+5di.
+1d4i3a
+dia5b
+di4cam
+d4ice
+3dict
+3did
+5di3en
+d1if
+di3ge
+di4lato
+d1in
+1dina
+3dine.
+5dini
+di5niz
+1dio
+dio5g
+di4pl
+dir2
+di1re
+dirt5i
+dis1
+5disi
+d4is3t
+d2iti
+1di1v
+d1j
+d5k2
+4d5la
+3dle.
+3dled
+3dles.
+4dless
+2d3lo
+4d5lu
+2dly
+d1m
+4d1n4
+1do
+3do.
+do5de
+5doe
+2d5of
+d4og
+do4la
+doli4
+do5lor
+dom5iz
+do3nat
+doni4
+doo3d
+dop4p
+d4or
+3dos
+4d5out
+do4v
+3dox
+d1p
+1dr
+drag5on
+4drai
+dre4
+drea5r
+5dren
+dri4b
+dril4
+dro4p
+4drow
+5drupli
+4dry
+2d1s2
+ds4p
+d4sw
+d4sy
+d2th
+1du
+d1u1a
+du2c
+d1uca
+duc5er
+4duct.
+4ducts
+du5el
+du4g
+d3ule
+dum4be
+du4n
+4dup
+du4pe
+d1v
+d1w
+d2y
+5dyn
+dy4se
+dys5p
+e1a4b
+e3act
+ead1
+ead5ie
+ea4ge
+ea5ger
+ea4l
+eal5er
+eal3ou
+eam3er
+e5and
+ear3a
+ear4c
+ear5es
+ear4ic
+ear4il
+ear5k
+ear2t
+eart3e
+ea5sp
+e3ass
+east3
+ea2t
+eat5en
+eath3i
+e5atif
+e4a3tu
+ea2v
+eav3en
+eav5i
+eav5o
+2e1b
+e4bel.
+e4bels
+e4ben
+e4bit
+e3br
+e4cad
+ecan5c
+ecca5
+e1ce
+ec5essa
+ec2i
+e4cib
+ec5ificat
+ec5ifie
+ec5ify
+ec3im
+eci4t
+e5cite
+e4clam
+e4clus
+e2col
+e4comm
+e4compe
+e4conc
+e2cor
+ec3ora
+eco5ro
+e1cr
+e4crem
+ec4tan
+ec4te
+e1cu
+e4cul
+ec3ula
+2e2da
+4ed3d
+e4d1er
+ede4s
+4edi
+e3dia
+ed3ib
+ed3ica
+ed3im
+ed1it
+edi5z
+4edo
+e4dol
+edon2
+e4dri
+e4dul
+ed5ulo
+ee2c
+eed3i
+ee2f
+eel3i
+ee4ly
+ee2m
+ee4na
+ee4p1
+ee2s4
+eest4
+ee4ty
+e5ex
+e1f
+e4f3ere
+1eff
+e4fic
+5efici
+efil4
+e3fine
+ef5i5nite
+3efit
+efor5es
+e4fuse.
+4egal
+eger4
+eg5ib
+eg4ic
+eg5ing
+e5git5
+eg5n
+e4go.
+e4gos
+eg1ul
+e5gur
+5egy
+e1h4
+eher4
+ei2
+e5ic
+ei5d
+eig2
+ei5gl
+e3imb
+e3inf
+e1ing
+e5inst
+eir4d
+eit3e
+ei3th
+e5ity
+e1j
+e4jud
+ej5udi
+eki4n
+ek4la
+e1la
+e4la.
+e4lac
+elan4d
+el5ativ
+e4law
+elaxa4
+e3lea
+el5ebra
+5elec
+e4led
+el3ega
+e5len
+e4l1er
+e1les
+el2f
+el2i
+e3libe
+e4l5ic.
+el3ica
+e3lier
+el5igib
+e5lim
+e4l3ing
+e3lio
+e2lis
+el5ish
+e3liv3
+4ella
+el4lab
+ello4
+e5loc
+el5og
+el3op.
+el2sh
+el4ta
+e5lud
+el5ug
+e4mac
+e4mag
+e5man
+em5ana
+em5b
+e1me
+e2mel
+e4met
+em3ica
+emi4e
+em5igra
+em1in2
+em5ine
+em3i3ni
+e4mis
+em5ish
+e5miss
+em3iz
+5emniz
+emo4g
+emoni5o
+em3pi
+e4mul
+em5ula
+emu3n
+e3my
+en5amo
+e4nant
+ench4er
+en3dic
+e5nea
+e5nee
+en3em
+en5ero
+en5esi
+en5est
+en3etr
+e3new
+en5ics
+e5nie
+e5nil
+e3nio
+en3ish
+en3it
+e5niu
+5eniz
+4enn
+4eno
+eno4g
+e4nos
+en3ov
+en4sw
+ent5age
+4enthes
+en3ua
+en5uf
+e3ny.
+4en3z
+e5of
+eo2g
+e4oi4
+e3ol
+eop3ar
+e1or
+eo3re
+eo5rol
+eos4
+e4ot
+eo4to
+e5out
+e5ow
+e2pa
+e3pai
+ep5anc
+e5pel
+e3pent
+ep5etitio
+ephe4
+e4pli
+e1po
+e4prec
+ep5reca
+e4pred
+ep3reh
+e3pro
+e4prob
+ep4sh
+ep5ti5b
+e4put
+ep5uta
+e1q
+equi3l
+e4q3ui3s
+er1a
+era4b
+4erand
+er3ar
+4erati.
+2erb
+er4bl
+er3ch
+er4che
+2ere.
+e3real
+ere5co
+ere3in
+er5el.
+er3emo
+er5ena
+er5ence
+4erene
+er3ent
+ere4q
+er5ess
+er3est
+eret4
+er1h
+er1i
+e1ria4
+5erick
+e3rien
+eri4er
+er3ine
+e1rio
+4erit
+er4iu
+eri4v
+e4riva
+er3m4
+er4nis
+4ernit
+5erniz
+er3no
+2ero
+er5ob
+e5roc
+ero4r
+er1ou
+er1s
+er3set
+ert3er
+4ertl
+er3tw
+4eru
+eru4t
+5erwau
+e1s4a
+e4sage.
+e4sages
+es2c
+e2sca
+es5can
+e3scr
+es5cu
+e1s2e
+e2sec
+es5ecr
+es5enc
+e4sert.
+e4serts
+e4serva
+4esh
+e3sha
+esh5en
+e1si
+e2sic
+e2sid
+es5iden
+es5igna
+e2s5im
+es4i4n
+esis4te
+esi4u
+e5skin
+es4mi
+e2sol
+es3olu
+e2son
+es5ona
+e1sp
+es3per
+es5pira
+es4pre
+2ess
+es4si4b
+estan4
+es3tig
+es5tim
+4es2to
+e3ston
+2estr
+e5stro
+estruc5
+e2sur
+es5urr
+es4w
+eta4b
+eten4d
+e3teo
+ethod3
+et1ic
+e5tide
+etin4
+eti4no
+e5tir
+e5titio
+et5itiv
+4etn
+et5ona
+e3tra
+e3tre
+et3ric
+et5rif
+et3rog
+et5ros
+et3ua
+et5ym
+et5z
+4eu
+e5un
+e3up
+eu3ro
+eus4
+eute4
+euti5l
+eu5tr
+eva2p5
+e2vas
+ev5ast
+e5vea
+ev3ell
+evel3o
+e5veng
+even4i
+ev1er
+e5verb
+e1vi
+ev3id
+evi4l
+e4vin
+evi4v
+e5voc
+e5vu
+e1wa
+e4wag
+e5wee
+e3wh
+ewil5
+ew3ing
+e3wit
+1exp
+5eyc
+5eye.
+eys4
+1fa
+fa3bl
+fab3r
+fa4ce
+4fag
+fain4
+fall5e
+4fa4ma
+fam5is
+5far
+far5th
+fa3ta
+fa3the
+4fato
+fault5
+4f5b
+4fd
+4fe.
+feas4
+feath3
+fe4b
+4feca
+5fect
+2fed
+fe3li
+fe4mo
+fen2d
+fend5e
+fer1
+5ferr
+fev4
+4f1f
+f4fes
+f4fie
+f5fin.
+f2f5is
+f4fly
+f2fy
+4fh
+1fi
+fi3a
+2f3ic.
+4f3ical
+f3ican
+4ficate
+f3icen
+fi3cer
+fic4i
+5ficia
+5ficie
+4fics
+fi3cu
+fi5del
+fight5
+fil5i
+fill5in
+4fily
+2fin
+5fina
+fin2d5
+fi2ne
+f1in3g
+fin4n
+fis4ti
+f4l2
+f5less
+flin4
+flo3re
+f2ly5
+4fm
+4fn
+1fo
+5fon
+fon4de
+fon4t
+fo2r
+fo5rat
+for5ay
+fore5t
+for4i
+fort5a
+fos5
+4f5p
+fra4t
+f5rea
+fres5c
+fri2
+fril4
+frol5
+2f3s
+2ft
+f4to
+f2ty
+3fu
+fu5el
+4fug
+fu4min
+fu5ne
+fu3ri
+fusi4
+fus4s
+4futa
+1fy
+1ga
+gaf4
+5gal.
+3gali
+ga3lo
+2gam
+ga5met
+g5amo
+gan5is
+ga3niz
+gani5za
+4gano
+gar5n4
+gass4
+gath3
+4gativ
+4gaz
+g3b
+gd4
+2ge.
+2ged
+geez4
+gel4in
+ge5lis
+ge5liz
+4gely
+1gen
+ge4nat
+ge5niz
+4geno
+4geny
+1geo
+ge3om
+g4ery
+5gesi
+geth5
+4geto
+ge4ty
+ge4v
+4g1g2
+g2ge
+g3ger
+gglu5
+ggo4
+gh3in
+gh5out
+gh4to
+5gi.
+1gi4a
+gia5r
+g1ic
+5gicia
+g4ico
+gien5
+5gies.
+gil4
+g3imen
+3g4in.
+gin5ge
+5g4ins
+5gio
+3gir
+gir4l
+g3isl
+gi4u
+5giv
+3giz
+gl2
+gla4
+glad5i
+5glas
+1gle
+gli4b
+g3lig
+3glo
+glo3r
+g1m
+g4my
+gn4a
+g4na.
+gnet4t
+g1ni
+g2nin
+g4nio
+g1no
+g4non
+1go
+3go.
+gob5
+5goe
+3g4o4g
+go3is
+gon2
+4g3o3na
+gondo5
+go3ni
+5goo
+go5riz
+gor5ou
+5gos.
+gov1
+g3p
+1gr
+4grada
+g4rai
+gran2
+5graph.
+g5rapher
+5graphic
+4graphy
+4gray
+gre4n
+4gress.
+4grit
+g4ro
+gruf4
+gs2
+g5ste
+gth3
+gu4a
+3guard
+2gue
+5gui5t
+3gun
+3gus
+4gu4t
+g3w
+1gy
+2g5y3n
+gy5ra
+h3ab4l
+hach4
+hae4m
+hae4t
+h5agu
+ha3la
+hala3m
+ha4m
+han4ci
+han4cy
+5hand.
+han4g
+hang5er
+hang5o
+h5a5niz
+han4k
+han4te
+hap3l
+hap5t
+ha3ran
+ha5ras
+har2d
+hard3e
+har4le
+harp5en
+har5ter
+has5s
+haun4
+5haz
+haz3a
+h1b
+1head
+3hear
+he4can
+h5ecat
+h4ed
+he5do5
+he3l4i
+hel4lis
+hel4ly
+h5elo
+hem4p
+he2n
+hena4
+hen5at
+heo5r
+hep5
+h4era
+hera3p
+her4ba
+here5a
+h3ern
+h5erou
+h3ery
+h1es
+he2s5p
+he4t
+het4ed
+heu4
+h1f
+h1h
+hi5an
+hi4co
+high5
+h4il2
+himer4
+h4ina
+hion4e
+hi4p
+hir4l
+hi3ro
+hir4p
+hir4r
+his3el
+his4s
+hith5er
+hi2v
+4hk
+4h1l4
+hlan4
+h2lo
+hlo3ri
+4h1m
+hmet4
+2h1n
+h5odiz
+h5ods
+ho4g
+hoge4
+hol5ar
+3hol4e
+ho4ma
+home3
+hon4a
+ho5ny
+3hood
+hoon4
+hor5at
+ho5ris
+hort3e
+ho5ru
+hos4e
+ho5sen
+hos1p
+1hous
+house3
+hov5el
+4h5p
+4hr4
+hree5
+hro5niz
+hro3po
+4h1s2
+h4sh
+h4tar
+ht1en
+ht5es
+h4ty
+hu4g
+hu4min
+hun5ke
+hun4t
+hus3t4
+hu4t
+h1w
+h4wart
+hy3pe
+hy3ph
+hy2s
+2i1a
+i2al
+iam4
+iam5ete
+i2an
+4ianc
+ian3i
+4ian4t
+ia5pe
+iass4
+i4ativ
+ia4tric
+i4atu
+ibe4
+ib3era
+ib5ert
+ib5ia
+ib3in
+ib5it.
+ib5ite
+i1bl
+ib3li
+i5bo
+i1br
+i2b5ri
+i5bun
+4icam
+5icap
+4icar
+i4car.
+i4cara
+icas5
+i4cay
+iccu4
+4iceo
+4ich
+2ici
+i5cid
+ic5ina
+i2cip
+ic3ipa
+i4cly
+i2c5oc
+4i1cr
+5icra
+i4cry
+ic4te
+ictu2
+ic4t3ua
+ic3ula
+ic4um
+ic5uo
+i3cur
+2id
+i4dai
+id5anc
+id5d
+ide3al
+ide4s
+i2di
+id5ian
+idi4ar
+i5die
+id3io
+idi5ou
+id1it
+id5iu
+i3dle
+i4dom
+id3ow
+i4dr
+i2du
+id5uo
+2ie4
+ied4e
+5ie5ga
+ield3
+ien5a4
+ien4e
+i5enn
+i3enti
+i1er.
+i3esc
+i1est
+i3et
+4if.
+if5ero
+iff5en
+if4fr
+4ific.
+i3fie
+i3fl
+4ift
+2ig
+iga5b
+ig3era
+ight3i
+4igi
+i3gib
+ig3il
+ig3in
+ig3it
+i4g4l
+i2go
+ig3or
+ig5ot
+i5gre
+igu5i
+ig1ur
+i3h
+4i5i4
+i3j
+4ik
+i1la
+il3a4b
+i4lade
+i2l5am
+ila5ra
+i3leg
+il1er
+ilev4
+il5f
+il1i
+il3ia
+il2ib
+il3io
+il4ist
+2ilit
+il2iz
+ill5ab
+4iln
+il3oq
+il4ty
+il5ur
+il3v
+i4mag
+im3age
+ima5ry
+imenta5r
+4imet
+im1i
+im5ida
+imi5le
+i5mini
+4imit
+im4ni
+i3mon
+i2mu
+im3ula
+2in.
+i4n3au
+4inav
+incel4
+in3cer
+4ind
+in5dling
+2ine
+i3nee
+iner4ar
+i5ness
+4inga
+4inge
+in5gen
+4ingi
+in5gling
+4ingo
+4ingu
+2ini
+i5ni.
+i4nia
+in3io
+in1is
+i5nite.
+5initio
+in3ity
+4ink
+4inl
+2inn
+2i1no
+i4no4c
+ino4s
+i4not
+2ins
+in3se
+insur5a
+2int.
+2in4th
+in1u
+i5nus
+4iny
+2io
+4io.
+ioge4
+io2gr
+i1ol
+io4m
+ion3at
+ion4ery
+ion3i
+io5ph
+ior3i
+i4os
+io5th
+i5oti
+io4to
+i4our
+2ip
+ipe4
+iphras4
+ip3i
+ip4ic
+ip4re4
+ip3ul
+i3qua
+iq5uef
+iq3uid
+iq3ui3t
+4ir
+i1ra
+ira4b
+i4rac
+ird5e
+ire4de
+i4ref
+i4rel4
+i4res
+ir5gi
+ir1i
+iri5de
+ir4is
+iri3tu
+5i5r2iz
+ir4min
+iro4g
+5iron.
+ir5ul
+2is.
+is5ag
+is3ar
+isas5
+2is1c
+is3ch
+4ise
+is3er
+3isf
+is5han
+is3hon
+ish5op
+is3ib
+isi4d
+i5sis
+is5itiv
+4is4k
+islan4
+4isms
+i2so
+iso5mer
+is1p
+is2pi
+is4py
+4is1s
+is4sal
+issen4
+is4ses
+is4ta.
+is1te
+is1ti
+ist4ly
+4istral
+i2su
+is5us
+4ita.
+ita4bi
+i4tag
+4ita5m
+i3tan
+i3tat
+2ite
+it3era
+i5teri
+it4es
+2ith
+i1ti
+4itia
+4i2tic
+it3ica
+5i5tick
+it3ig
+it5ill
+i2tim
+2itio
+4itis
+i4tism
+i2t5o5m
+4iton
+i4tram
+it5ry
+4itt
+it3uat
+i5tud
+it3ul
+4itz.
+i1u
+2iv
+iv3ell
+iv3en.
+i4v3er.
+i4vers.
+iv5il.
+iv5io
+iv1it
+i5vore
+iv3o3ro
+i4v3ot
+4i5w
+ix4o
+4iy
+4izar
+izi4
+5izont
+5ja
+jac4q
+ja4p
+1je
+jer5s
+4jestie
+4jesty
+jew3
+jo4p
+5judg
+3ka.
+k3ab
+k5ag
+kais4
+kal4
+k1b
+k2ed
+1kee
+ke4g
+ke5li
+k3en4d
+k1er
+kes4
+k3est.
+ke4ty
+k3f
+kh4
+k1i
+5ki.
+5k2ic
+k4ill
+kilo5
+k4im
+k4in.
+kin4de
+k5iness
+kin4g
+ki4p
+kis4
+k5ish
+kk4
+k1l
+4kley
+4kly
+k1m
+k5nes
+1k2no
+ko5r
+kosh4
+k3ou
+kro5n
+4k1s2
+k4sc
+ks4l
+k4sy
+k5t
+k1w
+lab3ic
+l4abo
+laci4
+l4ade
+la3dy
+lag4n
+lam3o
+3land
+lan4dl
+lan5et
+lan4te
+lar4g
+lar3i
+las4e
+la5tan
+4lateli
+4lativ
+4lav
+la4v4a
+2l1b
+lbin4
+4l1c2
+lce4
+l3ci
+2ld
+l2de
+ld4ere
+ld4eri
+ldi4
+ld5is
+l3dr
+l4dri
+le2a
+le4bi
+left5
+5leg.
+5legg
+le4mat
+lem5atic
+4len.
+3lenc
+5lene.
+1lent
+le3ph
+le4pr
+lera5b
+ler4e
+3lerg
+3l4eri
+l4ero
+les2
+le5sco
+5lesq
+3less
+5less.
+l3eva
+lev4er.
+lev4era
+lev4ers
+3ley
+4leye
+2lf
+l5fr
+4l1g4
+l5ga
+lgar3
+l4ges
+lgo3
+2l3h
+li4ag
+li2am
+liar5iz
+li4as
+li4ato
+li5bi
+5licio
+li4cor
+4lics
+4lict.
+l4icu
+l3icy
+l3ida
+lid5er
+3lidi
+lif3er
+l4iff
+li4fl
+5ligate
+3ligh
+li4gra
+3lik
+4l4i4l
+lim4bl
+lim3i
+li4mo
+l4im4p
+l4ina
+1l4ine
+lin3ea
+lin3i
+link5er
+li5og
+4l4iq
+lis4p
+l1it
+l2it.
+5litica
+l5i5tics
+liv3er
+l1iz
+4lj
+lka3
+l3kal
+lka4t
+l1l
+l4law
+l2le
+l5lea
+l3lec
+l3leg
+l3lel
+l3le4n
+l3le4t
+ll2i
+l2lin4
+l5lina
+ll4o
+lloqui5
+ll5out
+l5low
+2lm
+l5met
+lm3ing
+l4mod
+lmon4
+2l1n2
+3lo.
+lob5al
+lo4ci
+4lof
+3logic
+l5ogo
+3logu
+lom3er
+5long
+lon4i
+l3o3niz
+lood5
+5lope.
+lop3i
+l3opm
+lora4
+lo4rato
+lo5rie
+lor5ou
+5los.
+los5et
+5losophiz
+5losophy
+los4t
+lo4ta
+loun5d
+2lout
+4lov
+2lp
+lpa5b
+l3pha
+l5phi
+lp5ing
+l3pit
+l4pl
+l5pr
+4l1r
+2l1s2
+l4sc
+l2se
+l4sie
+4lt
+lt5ag
+ltane5
+l1te
+lten4
+ltera4
+lth3i
+l5ties.
+ltis4
+l1tr
+ltu2
+ltur3a
+lu5a
+lu3br
+luch4
+lu3ci
+lu3en
+luf4
+lu5id
+lu4ma
+5lumi
+l5umn.
+5lumnia
+lu3o
+luo3r
+4lup
+luss4
+lus3te
+1lut
+l5ven
+l5vet4
+2l1w
+1ly
+4lya
+4lyb
+ly5me
+ly3no
+2lys4
+l5yse
+1ma
+2mab
+ma2ca
+ma5chine
+ma4cl
+mag5in
+5magn
+2mah
+maid5
+4mald
+ma3lig
+ma5lin
+mal4li
+mal4ty
+5mania
+man5is
+man3iz
+4map
+ma5rine.
+ma5riz
+mar4ly
+mar3v
+ma5sce
+mas4e
+mas1t
+5mate
+math3
+ma3tis
+4matiza
+4m1b
+mba4t5
+m5bil
+m4b3ing
+mbi4v
+4m5c
+4me.
+2med
+4med.
+5media
+me3die
+m5e5dy
+me2g
+mel5on
+mel4t
+me2m
+mem1o3
+1men
+men4a
+men5ac
+men4de
+4mene
+men4i
+mens4
+mensu5
+3ment
+men4te
+me5on
+m5ersa
+2mes
+3mesti
+me4ta
+met3al
+me1te
+me5thi
+m4etr
+5metric
+me5trie
+me3try
+me4v
+4m1f
+2mh
+5mi.
+mi3a
+mid4a
+mid4g
+mig4
+3milia
+m5i5lie
+m4ill
+min4a
+3mind
+m5inee
+m4ingl
+min5gli
+m5ingly
+min4t
+m4inu
+miot4
+m2is
+mis4er.
+mis5l
+mis4ti
+m5istry
+4mith
+m2iz
+4mk
+4m1l
+m1m
+mma5ry
+4m1n
+mn4a
+m4nin
+mn4o
+1mo
+4mocr
+5mocratiz
+mo2d1
+mo4go
+mois2
+moi5se
+4mok
+mo5lest
+mo3me
+mon5et
+mon5ge
+moni3a
+mon4ism
+mon4ist
+mo3niz
+monol4
+mo3ny.
+mo2r
+4mora.
+mos2
+mo5sey
+mo3sp
+moth3
+m5ouf
+3mous
+mo2v
+4m1p
+mpara5
+mpa5rab
+mpar5i
+m3pet
+mphas4
+m2pi
+mpi4a
+mp5ies
+m4p1in
+m5pir
+mp5is
+mpo3ri
+mpos5ite
+m4pous
+mpov5
+mp4tr
+m2py
+4m3r
+4m1s2
+m4sh
+m5si
+4mt
+1mu
+mula5r4
+5mult
+multi3
+3mum
+mun2
+4mup
+mu4u
+4mw
+1na
+2n1a2b
+n4abu
+4nac.
+na4ca
+n5act
+nag5er.
+nak4
+na4li
+na5lia
+4nalt
+na5mit
+n2an
+nanci4
+nan4it
+nank4
+nar3c
+4nare
+nar3i
+nar4l
+n5arm
+n4as
+nas4c
+nas5ti
+n2at
+na3tal
+nato5miz
+n2au
+nau3se
+3naut
+nav4e
+4n1b4
+ncar5
+n4ces.
+n3cha
+n5cheo
+n5chil
+n3chis
+nc1in
+nc4it
+ncour5a
+n1cr
+n1cu
+n4dai
+n5dan
+n1de
+nd5est.
+ndi4b
+n5d2if
+n1dit
+n3diz
+n5duc
+ndu4r
+nd2we
+2ne.
+n3ear
+ne2b
+neb3u
+ne2c
+5neck
+2ned
+ne4gat
+neg5ativ
+5nege
+ne4la
+nel5iz
+ne5mi
+ne4mo
+1nen
+4nene
+3neo
+ne4po
+ne2q
+n1er
+nera5b
+n4erar
+n2ere
+n4er5i
+ner4r
+1nes
+2nes.
+4nesp
+2nest
+4nesw
+3netic
+ne4v
+n5eve
+ne4w
+n3f
+n4gab
+n3gel
+nge4n4e
+n5gere
+n3geri
+ng5ha
+n3gib
+ng1in
+n5git
+n4gla
+ngov4
+ng5sh
+n1gu
+n4gum
+n2gy
+4n1h4
+nha4
+nhab3
+nhe4
+3n4ia
+ni3an
+ni4ap
+ni3ba
+ni4bl
+ni4d
+ni5di
+ni4er
+ni2fi
+ni5ficat
+n5igr
+nik4
+n1im
+ni3miz
+n1in
+5nine.
+nin4g
+ni4o
+5nis.
+nis4ta
+n2it
+n4ith
+3nitio
+n3itor
+ni3tr
+n1j
+4nk2
+n5kero
+n3ket
+nk3in
+n1kl
+4n1l
+n5m
+nme4
+nmet4
+4n1n2
+nne4
+nni3al
+nni4v
+nob4l
+no3ble
+n5ocl
+4n3o2d
+3noe
+4nog
+noge4
+nois5i
+no5l4i
+5nologis
+3nomic
+n5o5miz
+no4mo
+no3my
+no4n
+non4ag
+non5i
+n5oniz
+4nop
+5nop5o5li
+nor5ab
+no4rary
+4nosc
+nos4e
+nos5t
+no5ta
+1nou
+3noun
+nov3el3
+nowl3
+n1p4
+npi4
+npre4c
+n1q
+n1r
+nru4
+2n1s2
+ns5ab
+nsati4
+ns4c
+n2se
+n4s3es
+nsid1
+nsig4
+n2sl
+ns3m
+n4soc
+ns4pe
+n5spi
+nsta5bl
+n1t
+nta4b
+nter3s
+nt2i
+n5tib
+nti4er
+nti2f
+n3tine
+n4t3ing
+nti4p
+ntrol5li
+nt4s
+ntu3me
+nu1a
+nu4d
+nu5en
+nuf4fe
+n3uin
+3nu3it
+n4um
+nu1me
+n5umi
+3nu4n
+n3uo
+nu3tr
+n1v2
+n1w4
+nym4
+nyp4
+4nz
+n3za
+4oa
+oad3
+o5a5les
+oard3
+oas4e
+oast5e
+oat5i
+ob3a3b
+o5bar
+obe4l
+o1bi
+o2bin
+ob5ing
+o3br
+ob3ul
+o1ce
+och4
+o3chet
+ocif3
+o4cil
+o4clam
+o4cod
+oc3rac
+oc5ratiz
+ocre3
+5ocrit
+octor5a
+oc3ula
+o5cure
+od5ded
+od3ic
+odi3o
+o2do4
+odor3
+od5uct.
+od5ucts
+o4el
+o5eng
+o3er
+oe4ta
+o3ev
+o2fi
+of5ite
+ofit4t
+o2g5a5r
+og5ativ
+o4gato
+o1ge
+o5gene
+o5geo
+o4ger
+o3gie
+1o1gis
+og3it
+o4gl
+o5g2ly
+3ogniz
+o4gro
+ogu5i
+1ogy
+2ogyn
+o1h2
+ohab5
+oi2
+oic3es
+oi3der
+oiff4
+oig4
+oi5let
+o3ing
+oint5er
+o5ism
+oi5son
+oist5en
+oi3ter
+o5j
+2ok
+o3ken
+ok5ie
+o1la
+o4lan
+olass4
+ol2d
+old1e
+ol3er
+o3lesc
+o3let
+ol4fi
+ol2i
+o3lia
+o3lice
+ol5id.
+o3li4f
+o5lil
+ol3ing
+o5lio
+o5lis.
+ol3ish
+o5lite
+o5litio
+o5liv
+olli4e
+ol5ogiz
+olo4r
+ol5pl
+ol2t
+ol3ub
+ol3ume
+ol3un
+o5lus
+ol2v
+o2ly
+om5ah
+oma5l
+om5atiz
+om2be
+om4bl
+o2me
+om3ena
+om5erse
+o4met
+om5etry
+o3mia
+om3ic.
+om3ica
+o5mid
+om1in
+o5mini
+5ommend
+omo4ge
+o4mon
+om3pi
+ompro5
+o2n
+on1a
+on4ac
+o3nan
+on1c
+3oncil
+2ond
+on5do
+o3nen
+on5est
+on4gu
+on1ic
+o3nio
+on1is
+o5niu
+on3key
+on4odi
+on3omy
+on3s
+onspi4
+onspir5a
+onsu4
+onten4
+on3t4i
+ontif5
+on5um
+onva5
+oo2
+ood5e
+ood5i
+oo4k
+oop3i
+o3ord
+oost5
+o2pa
+ope5d
+op1er
+3opera
+4operag
+2oph
+o5phan
+o5pher
+op3ing
+o3pit
+o5pon
+o4posi
+o1pr
+op1u
+opy5
+o1q
+o1ra
+o5ra.
+o4r3ag
+or5aliz
+or5ange
+ore5a
+o5real
+or3ei
+ore5sh
+or5est.
+orew4
+or4gu
+4o5ria
+or3ica
+o5ril
+or1in
+o1rio
+or3ity
+o3riu
+or2mi
+orn2e
+o5rof
+or3oug
+or5pe
+3orrh
+or4se
+ors5en
+orst4
+or3thi
+or3thy
+or4ty
+o5rum
+o1ry
+os3al
+os2c
+os4ce
+o3scop
+4oscopi
+o5scr
+os4i4e
+os5itiv
+os3ito
+os3ity
+osi4u
+os4l
+o2so
+os4pa
+os4po
+os2ta
+o5stati
+os5til
+os5tit
+o4tan
+otele4g
+ot3er.
+ot5ers
+o4tes
+4oth
+oth5esi
+oth3i4
+ot3ic.
+ot5ica
+o3tice
+o3tif
+o3tis
+oto5s
+ou2
+ou3bl
+ouch5i
+ou5et
+ou4l
+ounc5er
+oun2d
+ou5v
+ov4en
+over4ne
+over3s
+ov4ert
+o3vis
+oviti4
+o5v4ol
+ow3der
+ow3el
+ow5est
+ow1i
+own5i
+o4wo
+oy1a
+1pa
+pa4ca
+pa4ce
+pac4t
+p4ad
+5pagan
+p3agat
+p4ai
+pain4
+p4al
+pan4a
+pan3el
+pan4ty
+pa3ny
+pa1p
+pa4pu
+para5bl
+par5age
+par5di
+3pare
+par5el
+p4a4ri
+par4is
+pa2te
+pa5ter
+5pathic
+pa5thy
+pa4tric
+pav4
+3pay
+4p1b
+pd4
+4pe.
+3pe4a
+pear4l
+pe2c
+2p2ed
+3pede
+3pedi
+pedia4
+ped4ic
+p4ee
+pee4d
+pek4
+pe4la
+peli4e
+pe4nan
+p4enc
+pen4th
+pe5on
+p4era.
+pera5bl
+p4erag
+p4eri
+peri5st
+per4mal
+perme5
+p4ern
+per3o
+per3ti
+pe5ru
+per1v
+pe2t
+pe5ten
+pe5tiz
+4pf
+4pg
+4ph.
+phar5i
+phe3no
+ph4er
+ph4es.
+ph1ic
+5phie
+ph5ing
+5phisti
+3phiz
+ph2l
+3phob
+3phone
+5phoni
+pho4r
+4phs
+ph3t
+5phu
+1phy
+pi3a
+pian4
+pi4cie
+pi4cy
+p4id
+p5ida
+pi3de
+5pidi
+3piec
+pi3en
+pi4grap
+pi3lo
+pi2n
+p4in.
+pind4
+p4ino
+3pi1o
+pion4
+p3ith
+pi5tha
+pi2tu
+2p3k2
+1p2l2
+3plan
+plas5t
+pli3a
+pli5er
+4plig
+pli4n
+ploi4
+plu4m
+plum4b
+4p1m
+2p3n
+po4c
+5pod.
+po5em
+po3et5
+5po4g
+poin2
+5point
+poly5t
+po4ni
+po4p
+1p4or
+po4ry
+1pos
+pos1s
+p4ot
+po4ta
+5poun
+4p1p
+ppa5ra
+p2pe
+p4ped
+p5pel
+p3pen
+p3per
+p3pet
+ppo5site
+pr2
+pray4e
+5preci
+pre5co
+pre3em
+pref5ac
+pre4la
+pre3r
+p3rese
+3press
+pre5ten
+pre3v
+5pri4e
+prin4t3
+pri4s
+pris3o
+p3roca
+prof5it
+pro3l
+pros3e
+pro1t
+2p1s2
+p2se
+ps4h
+p4sib
+2p1t
+pt5a4b
+p2te
+p2th
+pti3m
+ptu4r
+p4tw
+pub3
+pue4
+puf4
+pul3c
+pu4m
+pu2n
+pur4r
+5pus
+pu2t
+5pute
+put3er
+pu3tr
+put4ted
+put4tin
+p3w
+qu2
+qua5v
+2que.
+3quer
+3quet
+2rab
+ra3bi
+rach4e
+r5acl
+raf5fi
+raf4t
+r2ai
+ra4lo
+ram3et
+r2ami
+rane5o
+ran4ge
+r4ani
+ra5no
+rap3er
+3raphy
+rar5c
+rare4
+rar5ef
+4raril
+r2as
+ration4
+rau4t
+ra5vai
+rav3el
+ra5zie
+r1b
+r4bab
+r4bag
+rbi2
+rbi4f
+r2bin
+r5bine
+rb5ing.
+rb4o
+r1c
+r2ce
+rcen4
+r3cha
+rch4er
+r4ci4b
+rc4it
+rcum3
+r4dal
+rd2i
+rdi4a
+rdi4er
+rdin4
+rd3ing
+2re.
+re1al
+re3an
+re5arr
+5reav
+re4aw
+r5ebrat
+rec5oll
+rec5ompe
+re4cre
+2r2ed
+re1de
+re3dis
+red5it
+re4fac
+re2fe
+re5fer.
+re3fi
+re4fy
+reg3is
+re5it
+re1li
+re5lu
+r4en4ta
+ren4te
+re1o
+re5pin
+re4posi
+re1pu
+r1er4
+r4eri
+rero4
+re5ru
+r4es.
+re4spi
+ress5ib
+res2t
+re5stal
+re3str
+re4ter
+re4ti4z
+re3tri
+reu2
+re5uti
+rev2
+re4val
+rev3el
+r5ev5er.
+re5vers
+re5vert
+re5vil
+rev5olu
+re4wh
+r1f
+rfu4
+r4fy
+rg2
+rg3er
+r3get
+r3gic
+rgi4n
+rg3ing
+r5gis
+r5git
+r1gl
+rgo4n
+r3gu
+rh4
+4rh.
+4rhal
+ri3a
+ria4b
+ri4ag
+r4ib
+rib3a
+ric5as
+r4ice
+4rici
+5ricid
+ri4cie
+r4ico
+rid5er
+ri3enc
+ri3ent
+ri1er
+ri5et
+rig5an
+5rigi
+ril3iz
+5riman
+rim5i
+3rimo
+rim4pe
+r2ina
+5rina.
+rin4d
+rin4e
+rin4g
+ri1o
+5riph
+riph5e
+ri2pl
+rip5lic
+r4iq
+r2is
+r4is.
+ris4c
+r3ish
+ris4p
+ri3ta3b
+r5ited.
+rit5er.
+rit5ers
+rit3ic
+ri2tu
+rit5ur
+riv5el
+riv3et
+riv3i
+r3j
+r3ket
+rk4le
+rk4lin
+r1l
+rle4
+r2led
+r4lig
+r4lis
+rl5ish
+r3lo4
+r1m
+rma5c
+r2me
+r3men
+rm5ers
+rm3ing
+r4ming.
+r4mio
+r3mit
+r4my
+r4nar
+r3nel
+r4ner
+r5net
+r3ney
+r5nic
+r1nis4
+r3nit
+r3niv
+rno4
+r4nou
+r3nu
+rob3l
+r2oc
+ro3cr
+ro4e
+ro1fe
+ro5fil
+rok2
+ro5ker
+5role.
+rom5ete
+rom4i
+rom4p
+ron4al
+ron4e
+ro5n4is
+ron4ta
+1room
+5root
+ro3pel
+rop3ic
+ror3i
+ro5ro
+ros5per
+ros4s
+ro4the
+ro4ty
+ro4va
+rov5el
+rox5
+r1p
+r4pea
+r5pent
+rp5er.
+r3pet
+rp4h4
+rp3ing
+r3po
+r1r4
+rre4c
+rre4f
+r4reo
+rre4st
+rri4o
+rri4v
+rron4
+rros4
+rrys4
+4rs2
+r1sa
+rsa5ti
+rs4c
+r2se
+r3sec
+rse4cr
+rs5er.
+rs3es
+rse5v2
+r1sh
+r5sha
+r1si
+r4si4b
+rson3
+r1sp
+r5sw
+rtach4
+r4tag
+r3teb
+rten4d
+rte5o
+r1ti
+rt5ib
+rti4d
+r4tier
+r3tig
+rtil3i
+rtil4l
+r4tily
+r4tist
+r4tiv
+r3tri
+rtroph4
+rt4sh
+ru3a
+ru3e4l
+ru3en
+ru4gl
+ru3in
+rum3pl
+ru2n
+runk5
+run4ty
+r5usc
+ruti5n
+rv4e
+rvel4i
+r3ven
+rv5er.
+r5vest
+r3vey
+r3vic
+rvi4v
+r3vo
+r1w
+ry4c
+5rynge
+ry3t
+sa2
+2s1ab
+5sack
+sac3ri
+s3act
+5sai
+salar4
+sal4m
+sa5lo
+sal4t
+3sanc
+san4de
+s1ap
+sa5ta
+5sa3tio
+sat3u
+sau4
+sa5vor
+5saw
+4s5b
+scan4t5
+sca4p
+scav5
+s4ced
+4scei
+s4ces
+sch2
+s4cho
+3s4cie
+5scin4d
+scle5
+s4cli
+scof4
+4scopy
+scour5a
+s1cu
+4s5d
+4se.
+se4a
+seas4
+sea5w
+se2c3o
+3sect
+4s4ed
+se4d4e
+s5edl
+se2g
+seg3r
+5sei
+se1le
+5self
+5selv
+4seme
+se4mol
+sen5at
+4senc
+sen4d
+s5ened
+sen5g
+s5enin
+4sentd
+4sentl
+sep3a3
+4s1er.
+s4erl
+ser4o
+4servo
+s1e4s
+se5sh
+ses5t
+5se5um
+5sev
+sev3en
+sew4i
+5sex
+4s3f
+2s3g
+s2h
+2sh.
+sh1er
+5shev
+sh1in
+sh3io
+3ship
+shiv5
+sho4
+sh5old
+shon3
+shor4
+short5
+4shw
+si1b
+s5icc
+3side.
+5sides
+5sidi
+si5diz
+4signa
+sil4e
+4sily
+2s1in
+s2ina
+5sine.
+s3ing
+1sio
+5sion
+sion5a
+si2r
+sir5a
+1sis
+3sitio
+5siu
+1siv
+5siz
+sk2
+4ske
+s3ket
+sk5ine
+sk5ing
+s1l2
+s3lat
+s2le
+slith5
+2s1m
+s3ma
+small3
+sman3
+smel4
+s5men
+5smith
+smol5d4
+s1n4
+1so
+so4ce
+soft3
+so4lab
+sol3d2
+so3lic
+5solv
+3som
+3s4on.
+sona4
+son4g
+s4op
+5sophic
+s5ophiz
+s5ophy
+sor5c
+sor5d
+4sov
+so5vi
+2spa
+5spai
+spa4n
+spen4d
+2s5peo
+2sper
+s2phe
+3spher
+spho5
+spil4
+sp5ing
+4spio
+s4ply
+s4pon
+spor4
+4spot
+squal4l
+s1r
+2ss
+s1sa
+ssas3
+s2s5c
+s3sel
+s5seng
+s4ses.
+s5set
+s1si
+s4sie
+ssi4er
+ss5ily
+s4sl
+ss4li
+s4sn
+sspend4
+ss2t
+ssur5a
+ss5w
+2st.
+s2tag
+s2tal
+stam4i
+5stand
+s4ta4p
+5stat.
+s4ted
+stern5i
+s5tero
+ste2w
+stew5a
+s3the
+st2i
+s4ti.
+s5tia
+s1tic
+5stick
+s4tie
+s3tif
+st3ing
+5stir
+s1tle
+5stock
+stom3a
+5stone
+s4top
+3store
+st4r
+s4trad
+5stratu
+s4tray
+s4trid
+4stry
+4st3w
+s2ty
+1su
+su1al
+su4b3
+su2g3
+su5is
+suit3
+s4ul
+su2m
+sum3i
+su2n
+su2r
+4sv
+sw2
+4swo
+s4y
+4syc
+3syl
+syn5o
+sy5rin
+1ta
+3ta.
+2tab
+ta5bles
+5taboliz
+4taci
+ta5do
+4taf4
+tai5lo
+ta2l
+ta5la
+tal5en
+tal3i
+4talk
+tal4lis
+ta5log
+ta5mo
+tan4de
+tanta3
+ta5per
+ta5pl
+tar4a
+4tarc
+4tare
+ta3riz
+tas4e
+ta5sy
+4tatic
+ta4tur
+taun4
+tav4
+2taw
+tax4is
+2t1b
+4tc
+t4ch
+tch5et
+4t1d
+4te.
+tead4i
+4teat
+tece4
+5tect
+2t1ed
+te5di
+1tee
+teg4
+te5ger
+te5gi
+3tel.
+teli4
+5tels
+te2ma2
+tem3at
+3tenan
+3tenc
+3tend
+4tenes
+1tent
+ten4tag
+1teo
+te4p
+te5pe
+ter3c
+5ter3d
+1teri
+ter5ies
+ter3is
+teri5za
+5ternit
+ter5v
+4tes.
+4tess
+t3ess.
+teth5e
+3teu
+3tex
+4tey
+2t1f
+4t1g
+2th.
+than4
+th2e
+4thea
+th3eas
+the5at
+the3is
+3thet
+th5ic.
+th5ica
+4thil
+5think
+4thl
+th5ode
+5thodic
+4thoo
+thor5it
+tho5riz
+2ths
+1tia
+ti4ab
+ti4ato
+2ti2b
+4tick
+t4ico
+t4ic1u
+5tidi
+3tien
+tif2
+ti5fy
+2tig
+5tigu
+till5in
+1tim
+4timp
+tim5ul
+2t1in
+t2ina
+3tine.
+3tini
+1tio
+ti5oc
+tion5ee
+5tiq
+ti3sa
+3tise
+tis4m
+ti5so
+tis4p
+5tistica
+ti3tl
+ti4u
+1tiv
+tiv4a
+1tiz
+ti3za
+ti3zen
+2tl
+t5la
+tlan4
+3tle.
+3tled
+3tles.
+t5let.
+t5lo
+4t1m
+tme4
+2t1n2
+1to
+to3b
+to5crat
+4todo
+2tof
+to2gr
+to5ic
+to2ma
+tom4b
+to3my
+ton4ali
+to3nat
+4tono
+4tony
+to2ra
+to3rie
+tor5iz
+tos2
+5tour
+4tout
+to3war
+4t1p
+1tra
+tra3b
+tra5ch
+traci4
+trac4it
+trac4te
+tras4
+tra5ven
+trav5es5
+tre5f
+tre4m
+trem5i
+5tria
+tri5ces
+5tricia
+4trics
+2trim
+tri4v
+tro5mi
+tron5i
+4trony
+tro5phe
+tro3sp
+tro3v
+tru5i
+trus4
+4t1s2
+t4sc
+tsh4
+t4sw
+4t3t2
+t4tes
+t5to
+ttu4
+1tu
+tu1a
+tu3ar
+tu4bi
+tud2
+4tue
+4tuf4
+5tu3i
+3tum
+tu4nis
+2t3up.
+3ture
+5turi
+tur3is
+tur5o
+tu5ry
+3tus
+4tv
+tw4
+4t1wa
+twis4
+4two
+1ty
+4tya
+2tyl
+type3
+ty5ph
+4tz
+tz4e
+4uab
+uac4
+ua5na
+uan4i
+uar5ant
+uar2d
+uar3i
+uar3t
+u1at
+uav4
+ub4e
+u4bel
+u3ber
+u4bero
+u1b4i
+u4b5ing
+u3ble.
+u3ca
+uci4b
+uc4it
+ucle3
+u3cr
+u3cu
+u4cy
+ud5d
+ud3er
+ud5est
+udev4
+u1dic
+ud3ied
+ud3ies
+ud5is
+u5dit
+u4don
+ud4si
+u4du
+u4ene
+uens4
+uen4te
+uer4il
+3ufa
+u3fl
+ugh3en
+ug5in
+2ui2
+uil5iz
+ui4n
+u1ing
+uir4m
+uita4
+uiv3
+uiv4er.
+u5j
+4uk
+u1la
+ula5b
+u5lati
+ulch4
+5ulche
+ul3der
+ul4e
+u1len
+ul4gi
+ul2i
+u5lia
+ul3ing
+ul5ish
+ul4lar
+ul4li4b
+ul4lis
+4ul3m
+u1l4o
+4uls
+uls5es
+ul1ti
+ultra3
+4ultu
+u3lu
+ul5ul
+ul5v
+um5ab
+um4bi
+um4bly
+u1mi
+u4m3ing
+umor5o
+um2p
+unat4
+u2ne
+un4er
+u1ni
+un4im
+u2nin
+un5ish
+uni3v
+un3s4
+un4sw
+unt3ab
+un4ter.
+un4tes
+unu4
+un5y
+un5z
+u4ors
+u5os
+u1ou
+u1pe
+uper5s
+u5pia
+up3ing
+u3pl
+up3p
+upport5
+upt5ib
+uptu4
+u1ra
+4ura.
+u4rag
+u4ras
+ur4be
+urc4
+ur1d
+ure5at
+ur4fer
+ur4fr
+u3rif
+uri4fic
+ur1in
+u3rio
+u1rit
+ur3iz
+ur2l
+url5ing.
+ur4no
+uros4
+ur4pe
+ur4pi
+urs5er
+ur5tes
+ur3the
+urti4
+ur4tie
+u3ru
+2us
+u5sad
+u5san
+us4ap
+usc2
+us3ci
+use5a
+u5sia
+u3sic
+us4lin
+us1p
+us5sl
+us5tere
+us1tr
+u2su
+usur4
+uta4b
+u3tat
+4ute.
+4utel
+4uten
+uten4i
+4u1t2i
+uti5liz
+u3tine
+ut3ing
+ution5a
+u4tis
+5u5tiz
+u4t1l
+ut5of
+uto5g
+uto5matic
+u5ton
+u4tou
+uts4
+u3u
+uu4m
+u1v2
+uxu3
+uz4e
+1va
+5va.
+2v1a4b
+vac5il
+vac3u
+vag4
+va4ge
+va5lie
+val5o
+val1u
+va5mo
+va5niz
+va5pi
+var5ied
+3vat
+4ve.
+4ved
+veg3
+v3el.
+vel3li
+ve4lo
+v4ely
+ven3om
+v5enue
+v4erd
+5vere.
+v4erel
+v3eren
+ver5enc
+v4eres
+ver3ie
+vermi4n
+3verse
+ver3th
+v4e2s
+4ves.
+ves4te
+ve4te
+vet3er
+ve4ty
+vi5ali
+5vian
+5vide.
+5vided
+4v3iden
+5vides
+5vidi
+v3if
+vi5gn
+vik4
+2vil
+5vilit
+v3i3liz
+v1in
+4vi4na
+v2inc
+vin5d
+4ving
+vio3l
+v3io4r
+vi1ou
+vi4p
+vi5ro
+vis3it
+vi3so
+vi3su
+4viti
+vit3r
+4vity
+3viv
+5vo.
+voi4
+3vok
+vo4la
+v5ole
+5volt
+3volv
+vom5i
+vor5ab
+vori4
+vo4ry
+vo4ta
+4votee
+4vv4
+v4y
+w5abl
+2wac
+wa5ger
+wag5o
+wait5
+w5al.
+wam4
+war4t
+was4t
+wa1te
+wa5ver
+w1b
+wea5rie
+weath3
+wed4n
+weet3
+wee5v
+wel4l
+w1er
+west3
+w3ev
+whi4
+wi2
+wil2
+will5in
+win4de
+win4g
+wir4
+3wise
+with3
+wiz5
+w4k
+wl4es
+wl3in
+w4no
+1wo2
+wom1
+wo5ven
+w5p
+wra4
+wri4
+writa4
+w3sh
+ws4l
+ws4pe
+w5s4t
+4wt
+wy4
+x1a
+xac5e
+x4ago
+xam3
+x4ap
+xas5
+x3c2
+x1e
+xe4cuto
+x2ed
+xer4i
+xe5ro
+x1h
+xhi2
+xhil5
+xhu4
+x3i
+xi5a
+xi5c
+xi5di
+x4ime
+xi5miz
+x3o
+x4ob
+x3p
+xpan4d
+xpecto5
+xpe3d
+x1t2
+x3ti
+x1u
+xu3a
+xx4
+y5ac
+3yar4
+y5at
+y1b
+y1c
+y2ce
+yc5er
+y3ch
+ych4e
+ycom4
+ycot4
+y1d
+y5ee
+y1er
+y4erf
+yes4
+ye4t
+y5gi
+4y3h
+y1i
+y3la
+ylla5bl
+y3lo
+y5lu
+ymbol5
+yme4
+ympa3
+yn3chr
+yn5d
+yn5g
+yn5ic
+5ynx
+y1o4
+yo5d
+y4o5g
+yom4
+yo5net
+y4ons
+y4os
+y4ped
+yper5
+yp3i
+y3po
+y4poc
+yp2ta
+y5pu
+yra5m
+yr5ia
+y3ro
+yr4r
+ys4c
+y3s2e
+ys3ica
+ys3io
+3ysis
+y4so
+yss4
+ys1t
+ys3ta
+ysur4
+y3thin
+yt3ic
+y1w
+za1
+z5a2b
+zar2
+4zb
+2ze
+ze4n
+ze4p
+z1er
+ze3ro
+zet4
+2z1i
+z4il
+z4is
+5zl
+4zm
+1zo
+zo4m
+zo5ol
+zte4
+4z1z2
+z4zy
+<!-- 
+    % Patterns for standard Hyphenation Pattern Memory of 8000.
+    % Can be used with all standard TeX versions.
+    % Hyphenation trie becomes 6661 with 229 ops.
+    % These patterns are based on the Hyphenation Exception Log
+    % published in TUGboat, Volume 10 (1989), No. 3, pp. 337-341,
+    % and a large number of bad hyphened words not yet published.
+    % If added to Liang's before the closing bracket } of \patterns,
+    % the patterns run errorfree as far as known at this moment.
+    % Patterns do not find all admissible hyphens of the words in
+    % the Exception Log. The file ushyphen.max do.
+    % Can be used freely for non-commercial purposes.
+    % Copyright 1990 G.D.C. Kuiken. e-mail: wbahkui@hdetud1.tudelft.nl
+    % Postal address: P.O. Box 65791, NL 2506 EB Den Haag, Holland.
+    % Patterns of March 1, 1990. 
+-->
+.driv4
+.eth1y6l1
+.eu4ler
+.ev2
+.ga4som
+.ge4ome
+.he3p6a
+.in5u2t
+.kil2ni
+.ko6rte
+.le6ice
+.me4gal
+.met4ala
+.mimi4cr
+.mis4ers
+.ne6o3f
+.non1e2m
+.semi5
+.sem4ic
+.semid6
+.semip4
+.semir4
+.sem6is4
+.semiv4
+.sph6in1
+.to6pog
+.to2q
+.vi4car
+.we2b1l
+.ree4c
+a4cabl
+af6fish
+anal6ys
+anoa4c
+anti3de
+anti3n2
+anti3re
+a4peable
+ar4range
+as5ymptot
+at6tes.
+augh4tl
+av3iou
+ba6r1onie
+bbi4t
+be4vie
+bid4if
+bil4lab
+bio5m
+bi3orb
+bio3rh
+blan4d
+blin4d
+blon4d
+bo4tul
+brus4q
+bus6i2er
+bus6i2es
+buss4in
+but4ed.
+but4ted
+cad5em
+catas4
+4chs.
+chs3hu
+ciga3r
+cin4q
+cle4ar
+co6ph1o3n
+cous4ti
+cri5tie
+cro5e4co
+c2tro3me6c
+cu4ranc
+4d3alone
+data3b
+d2dib
+de4als.
+de2clin
+de5fin5iti
+de4mos
+des3ic
+de4tic
+dic5aid
+dif5fra
+di4ren
+di4rer
+4dlead
+4dli4e
+do5word
+drif4ta
+d3tab
+ea4nies
+e3chas
+edg3l
+eli4tis
+e3loa
+en3dix
+e6pineph
+e4rian.
+espac6i
+ethy6lene
+eu4clid1
+feb3ru
+fermi3o
+3fich
+flag6el
+g6endre.
+geo3d
+ght3we
+g3lead
+4g1lish
+g4nac
+g4nor.
+g4nores
+4go4niza
+griev3
+ha4parr
+hatch3
+hex2a
+hipela4
+ho6r1ic.
+h4teou
+id4ios
+ign4it
+i4jk
+im5peda
+infras4
+i5nitely.
+irre6v3oc
+i5tesima
+ithi4l
+janu3a
+ke6ling
+ki5netic
+k3sha
+la4cie
+lai6ness
+l3chai
+l3chil6d
+lea4sa
+lecta6b
+litho5g
+ll1fl
+l4lish
+lo4ges.
+l3tea
+lthi4ly
+lue1p
+man3u1sc
+mar3gin
+medi4c
+medi5cin
+medio6c
+me5gran
+mi3dab
+mil4lag
+milli5li
+mi6n3is.
+min4ute
+m3mab
+5maphro
+5mocrat
+moe4las
+mole5c
+mon4ey1l
+mono5ch
+mo4no1en
+moro6n5is
+monos6
+moth4et2
+mou5sin
+mshack4
+mu4dro
+mul4ti5u
+nar4chs.
+nch4est
+ne5back
+4neski
+nd3thr
+nfin5ites
+4nian.
+nge5nes
+ng3ho
+ng3spr
+nk3rup
+n5less
+nom1a6l
+nom5eno
+no5mist
+non5eq
+noni4so
+no5vemb
+ns5ceiv
+ns4moo
+ntre3p
+obli2g1
+o3chas
+oerst4
+oke3st
+olon4om
+o3mecha6
+o5norma
+ono4ton
+o3nou
+op3ism.
+or4tho3ni4t
+orth5ri
+o4spher
+o6v3ian.
+oxi6d2ic
+pal6mat
+parag6ra4
+par4ale
+param4
+para5me
+pee4v1
+phi2l3an
+phi5latel
+pi4cad
+pli4cab
+pli5nar
+1pole.
+poly1e
+prema5c
+pre5neu
+pres4pli
+pro4cess
+proc5ity.
+pro4ge
+3pseu4d
+pseud6od2
+pseud6of2
+ptomat4
+p5trol
+pubes5c
+quain4te
+qu6a3si3
+quasir6
+quasis6
+quiv4ar
+r5abolic
+ra3chu
+r3a3dig
+radi1o6g
+r4amen
+ra4me3triz
+ra3mou
+ran4has
+ra3or
+r3binge
+re4cipr
+rec4ogn
+rec5t6ang
+re2f1orma
+re4tribu
+r3ial.
+riv3ol
+rk3ho
+6rks.
+ro3bot3
+roe4las
+r3thou
+r3treu
+r3veil
+rz3sc
+sales5c
+sales5w
+sca6p1er
+sca4tol
+s4chitz
+sci4utt
+scy4th
+se1mi6t1ic
+sep5temb
+shoe5st
+side5st
+side5sw
+sky3sc
+s4ogamy
+so4lute
+s4pace
+s4pacin
+spe5cio
+spher5o
+spi4cil
+spokes5w
+sports5c
+sports5w
+s5quito
+s4sa3chu
+ss3hat
+s4sian.
+s4tamp
+s4tants
+star5tli
+sta3ti
+st5b
+stor5ab
+strat5ag
+strib5ut
+st5scr
+stupi4d
+styl5is
+su2per1e6
+3sync
+sythi4
+swimm6
+ta3gon.
+talka5
+ta3min
+t6ap6ath
+tar4rh
+tch3c
+tch5ed
+tch5ier
+t1cr
+tele4g
+tele1r6o
+tess4es
+tha4lam
+tho5don
+tho5geni
+thok4er
+thy4lan
+thy3sc
+4tian.
+ti4nom
+tli4er
+tot3ic
+trai5tor
+tra5vers
+treach5e
+tr4ial.
+5tro1leum
+tro5fit
+trop4is
+tropo5les
+tropo5lis
+tropol5it
+tsch5ie
+ttribut5
+turn5ar
+t1wh
+ty4pal
+u2ral.
+v3ativ
+va6guer
+v5ereig
+voice5p
+waste3w6
+waveg4
+w3c
+week3n
+wide5sp
+wo4ken
+wrap5aro
+x1q
+xquis3
+y5ched
+ym5etry
+y3stro
+z2z3w
+</patterns>
+</hyphenation-info>
diff --git a/hyph/es.xml b/hyph/es.xml
new file mode 100644 (file)
index 0000000..15c3c3f
--- /dev/null
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE hyphenation-info SYSTEM "hyphenation.dtd">
+
+<!-- Adapted by Carlos Villegas from Lout's spanish.lh.
+     Spanish is probably the easiest language to hyphenate!
+%
+%  Spanish hyphenation file, created by Jeffrey H. Kingston
+%  23 September 1994 from a TeX file supplied by Luis Melendez.
+%  See long comment below for full information about the origin
+%  of this file, and a copyright notice.
+%
+%  JeffK has made the following modifications to convert to ISO-LATIN-1:
+%
+%     TeX file         Lout file
+%     'a               \341
+%     'e               \351
+%     'i               \355
+%     'o               \363
+%     'u               \372
+%     "u               \374
+%     ~n               \361
+%
+-->
+<hyphenation-info>
+
+<hyphen-char value="-"/>
+<hyphen-min before="2" after="2"/>
+
+<classes>
+<!-- @!$%^&*()_-+=~`{[}]:;'|<,.>?/0123456789 -->
+aA
+bB
+cC
+dD
+eE
+fF
+gG
+hH
+iI
+jJ
+kK
+lL
+mM
+nN
+oO
+pP
+qQ
+rR
+sS
+tT
+uU
+vV
+wW
+xX
+yY
+zZ
+áÁ
+éÉ
+íÍ
+óÓ
+úÚ
+üÜ
+ñÑ
+</classes>
+
+<patterns>
+<!--
+% Hyphenation patterns for Spanish.
+% Compiled by Julio Sanchez (jsanchez@gmv.es) on September 1991.
+%
+% These patterns have been derived from "On Word Division in Spanish",
+% José A. Mañas, Communications of the ACM, and implemented in his
+% package ftc. You can get ftc and a draft of the abovementioned
+% paper from goya.dit.upm.es in src/text.proc/ftc.Z. FTP access may
+% be available. Otherwise, send help to info@goya.dit.upm.es for
+% details on use of the mail server.
+%
+% Rules mentioned below are those described in that paper. After
+% several unsatisfactory attempts to pretend I knew better, these 
+% patterns closely follow that paper. Pattern 'tl' is not considered. 
+% It is conflictive and ftc does not use it either.
+%
+% These patterns have been generated by shyphen.sh version 1.2, 
+% shyphen.sh is a sh script that allows a number of choices. 
+% Full benefit from some of these options can only be
+% obtained if appropriate fonts are available.
+%
+% Follows a copyright notice. This is not in the public domain,
+% but the copyright is essentially a hold-harmless clause. That
+% is, use it at will, but don't sue me if you don't like it.
+%
+%                      COPYRIGHT NOTICE
+%
+% These patterns and the generating sh script are Copyright (c) GMV 1991
+% These patterns were developed for internal GMV use and are made
+% public in the hope that they will benefit others. Also, spreading
+% these patterns throughout the Spanish-language TeX community is
+% expected to provide back-benefits to GMV in that it can help keeping
+% GMV in the mainstream of spanish users. However, this is given
+% for free and WITHOUT ANY WARRANTY. Under no circumstances can Julio
+% Sanchez, GMV, Jos'e A. Ma~nas or any agents or representatives thereof 
+% be held responsible for any errors in this software nor for any damages
+% derived from its use, even in case any of the above has been notified
+% of the possibility of such damages. If any such situation arises, you
+% responsible for repair. Use of this software is an explicit
+% acceptance of these conditions. 
+% 
+% You can use this software for any purpose. You cannot delete this
+% copyright notice. If you change this software, you must include 
+% comments explaining who, when and why. You are kindly requested to 
+% send any changes to tex@gmv.es. If you change the generating 
+% script, you must include code in it such that any output is clearly
+% labeled as generated by a modified script.
+%
+% Despite the lack of warranty, we would like to hear about any
+% problem you find. Please report problems to tex@gmv.es.
+%
+%               END OF COPYRIGHT NOTICE
+%
+% Options included in this set: basic TeX
+% Open vowels: a e o 'a 'e 'i 'o 'u
+% Closed vowels: i u "u
+% Consonants: b c d f g j k l m n p q r s t v w x y z ~n
+%
+% Some of the patterns below represent combinations that never
+% happen in Spanish. Would they happen, they would be hyphenated
+% according to the rules.
+
+% This keeps {cat|lc}code changes, if any, local. Nice to users of
+% multilingual versions. These are the minimum changes needed to process
+% the patterns. These and other changes will have to be re-enacted when
+% Spanish be established as the current language. See the babel docs if
+% you don't understand this.
+% deleted by JeffK:  \begingroup
+% deleted by JeffK:  \catcode`'=12 \lccode`'=`'
+% deleted by JeffK:  \catcode`"=12 \lccode`"=`"
+% deleted by JeffK:  \catcode`~=12 \lccode`~=`~
+% deleted by JeffK:  \patterns{
+% Rule SR1
+% Vowels are kept together by the defaults
+% Rule SR2
+% Attach vowel groups to left consonant
+-->
+1ba 1be 1bo 1bá 1bé 1bí 1bó 1bú 1bi 1bu 1bü 
+1ca 1ce 1co 1cá 1cé 1cí 1có 1cú 1ci 1cu 1cü 
+1da 1de 1do 1dá 1dé 1dí 1dó 1dú 1di 1du 1dü 
+1fa 1fe 1fo 1fá 1fé 1fí 1fó 1fú 1fi 1fu 1fü 
+1ga 1ge 1go 1gá 1gé 1gí 1gó 1gú 1gi 1gu 1gü 
+1ja 1je 1jo 1já 1jé 1jí 1jó 1jú 1ji 1ju 1jü 
+1ka 1ke 1ko 1ká 1ké 1kí 1kó 1kú 1ki 1ku 1kü 
+1la 1le 1lo 1lá 1lé 1lí 1ló 1lú 1li 1lu 1lü 
+1ma 1me 1mo 1má 1mé 1mí 1mó 1mú 1mi 1mu 1mü 
+1na 1ne 1no 1ná 1né 1ní 1nó 1nú 1ni 1nu 1nü 
+1pa 1pe 1po 1pá 1pé 1pí 1pó 1pú 1pi 1pu 1pü 
+1qa 1qe 1qo 1qá 1qé 1qí 1qó 1qú 1qi 1qu 1qü 
+1ra 1re 1ro 1rá 1ré 1rí 1ró 1rú 1ri 1ru 1rü 
+1sa 1se 1so 1sá 1sé 1sí 1só 1sú 1si 1su 1sü 
+1ta 1te 1to 1tá 1té 1tí 1tó 1tú 1ti 1tu 1tü 
+1va 1ve 1vo 1vá 1vé 1ví 1vó 1vú 1vi 1vu 1vü 
+1wa 1we 1wo 1wá 1wé 1wí 1wó 1wú 1wi 1wu 1wü 
+1xa 1xe 1xo 1xá 1xé 1xí 1xó 1xú 1xi 1xu 1xü 
+1ya 1ye 1yo 1yá 1yé 1yí 1yó 1yú 1yi 1yu 1yü 
+1za 1ze 1zo 1zá 1zé 1zí 1zó 1zú 1zi 1zu 1zü 
+1ña 1ñe 1ño 1ñá 1ñé 1ñí 1ñó 1ñú 1ñi 1ñu 1ñü 
+<!--
+% Rule SR3
+% Build legal consonant groups, leave other consonants bound to 
+% the previous group. This overrides part of the SR2 pattern
+% group.
+-->
+1c2ha 1c2he 1c2ho 1c2há 1c2hé 1c2hí 1c2hó 1c2hú 1c2hi 1c2hu 1c2hü 
+1l2la 1l2le 1l2lo 1l2lá 1l2lé 1l2lí 1l2ló 1l2lú 1l2li 1l2lu 1l2lü 
+1r2ra 1r2re 1r2ro 1r2rá 1r2ré 1r2rí 1r2ró 1r2rú 1r2ri 1r2ru 1r2rü 
+1b2la 1b2le 1b2lo 1b2lá 1b2lé 1b2lí 1b2ló 1b2lú 1b2li 1b2lu 1b2lü 
+1b2ra 1b2re 1b2ro 1b2rá 1b2ré 1b2rí 1b2ró 1b2rú 1b2ri 1b2ru 1b2rü 
+1c2la 1c2le 1c2lo 1c2lá 1c2lé 1c2lí 1c2ló 1c2lú 1c2li 1c2lu 1c2lü 
+1c2ra 1c2re 1c2ro 1c2rá 1c2ré 1c2rí 1c2ró 1c2rú 1c2ri 1c2ru 1c2rü 
+1d2ra 1d2re 1d2ro 1d2rá 1d2ré 1d2rí 1d2ró 1d2rú 1d2ri 1d2ru 1d2rü 
+1f2la 1f2le 1f2lo 1f2lá 1f2lé 1f2lí 1f2ló 1f2lú 1f2li 1f2lu 1f2lü 
+1f2ra 1f2re 1f2ro 1f2rá 1f2ré 1f2rí 1f2ró 1f2rú 1f2ri 1f2ru 1f2rü 
+1g2la 1g2le 1g2lo 1g2lá 1g2lé 1g2lí 1g2ló 1g2lú 1g2li 1g2lu 1g2lü 
+1g2ra 1g2re 1g2ro 1g2rá 1g2ré 1g2rí 1g2ró 1g2rú 1g2ri 1g2ru 1g2rü 
+1k2la 1k2le 1k2lo 1k2lá 1k2lé 1k2lí 1k2ló 1k2lú 1k2li 1k2lu 1k2lü 
+1k2ra 1k2re 1k2ro 1k2rá 1k2ré 1k2rí 1k2ró 1k2rú 1k2ri 1k2ru 1k2rü 
+1p2la 1p2le 1p2lo 1p2lá 1p2lé 1p2lí 1p2ló 1p2lú 1p2li 1p2lu 1p2lü 
+1p2ra 1p2re 1p2ro 1p2rá 1p2ré 1p2rí 1p2ró 1p2rú 1p2ri 1p2ru 1p2rü 
+1t2ra 1t2re 1t2ro 1t2rá 1t2ré 1t2rí 1t2ró 1t2rú 1t2ri 1t2ru 1t2rü 
+<!--
+% Rule SR4 is implicitly implemented by the default values
+% Rule HE1 is implemented by TeX parameters \lefthyphenmin and
+% \righthyphenmin. Help yourself. The correct values for
+% Spanish are 2 and 2. If you set them below these values,
+% incorrect breaks will happen.
+% Rule HE2
+% Break between a consonant and an h
+-->
+b1h d1h f1h g1h j1h k1h l1h m1h n1h p1h q1h r1h s1h t1h v1h w1h x1h y1h z1h ñ1h 
+<!-- % We now avoid some problematic breaks. -->
+su2b2r su2b2l
+<!--
+% deleted by JeffK:  }
+% deleted by JeffK:  \endgroup
+-->
+</patterns>
+</hyphenation-info>
+
diff --git a/hyph/fr.xml b/hyph/fr.xml
new file mode 100644 (file)
index 0000000..9b163f2
--- /dev/null
@@ -0,0 +1,1400 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE hyphenation-info SYSTEM "hyphenation.dtd">
+
+<!-- Created by Carlos Villegas from Lout's french.lh,
+     converted to ISO-LATIN-1 and added back the
+     oe ligature patterns, the original comments follow:
+%
+%  Created by Jeff Kingston, 19 May 1996, from a TeX
+%  hyphenation file.  Apart from commenting out things that
+%  are not relevant to Lout I have made the following changes:
+%
+%  (1)  I have guessed that \c c means ccedilla, and I have changed the
+%       only line containing it from 1\c c to 1\cc, and informed Lout that
+%       \cc is the code for ccedilla.  The change is because Lout does not
+%       expect to find spaces in the middle of hyphenation patterns.
+%
+%  (2)  I have deleted the following lines since I am unsure what to do
+%       about \oe (it is not an ISO-LATIN-1 character):
+%
+%         1c\oe0 % final zero essential to terminate cs
+%         .d\'e2s1\oe0 % final zero essential to terminate cs
+%         1m\oe0 % final zero essential to terminate cs
+%         1n\oe0 % final zero essential to terminate cs
+%         1s\oe0 % final zero essential to terminate cs
+%
+%  In other respects this file should faithfully reflect the original.
+-->
+<hyphenation-info>
+
+<hyphen-char value="-"/>
+<hyphen-min before="2" after="2"/>
+
+<classes>
+<!-- @!$%^&*()_-+=~`{[}]:;|<,.>?/0123456789 -->
+'
+aA
+bB
+cC
+dD
+eE
+fF
+gG
+hH
+iI
+jJ
+kK
+lL
+mM
+nN
+oO
+pP
+qQ
+rR
+sS
+tT
+uU
+vV
+wW
+xX
+yY
+zZ
+àÀ
+âÂ
+çÇ
+èÈ
+éÉ
+êÊ
+îÎ
+ïÏ
+ôÔ
+ûÛ
+&#x0153;&#x0152; <!-- oe OE ligatures -->
+</classes>
+<patterns>
+<!--
+% f7hyph.tex % French hyphenation patterns (7-bit OT1 encoding)
+% f7hyph.tex is ONLY for people having a MlTeX engine and CMR fonts.
+% \message{f7hyph.tex french hyphenation patterns. 7-bit OT1 encoding 
+%         (V2.0) 05/20/94}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%          *BEFORE* using this file *PLEASE* run checksum on it:           %
+%                       checksum -v f7hyph.tex                             %
+% to make sure that it hasn't been damaged.                                %
+% Then if you notice anything wrong in french hyphenation please report to %
+% Daniel Flipo and Bernard Gaulle at the email address: cesure-l@ens.fr    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%      checksum        = "20125 1319 2460 29960"
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%% The most famous good guys who worked hard to obtain something usable. 
+% Jacques Desarmenien, Universite de Strasbourg :
+%          -  << how to run TeX in a French environment: hyphenation, fonts,
+%             typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference
+%          -  << La division par ordinateur des mots francais :
+%             application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET-
+%                                                             Gauthier-Villars
+% Norman Buckle, UQAH (nb; many additions)
+% Michael Ferguson, INRS-Telecommunications (mjf) June 1988
+% Justin Bur, Universite de Montreal (jbb; checked against original list)
+%                    all patterns including apostrophe missing from nb list
+% after that, GUTenberg  and specially Daniel Flipo and Bernard Gaulle
+% did their best effort to improve the list of patterns.
+%\begingroup
+% comment the following line when used without MlTeX and outside hyconfig.tex
+%\accenthyphcodes\spechyphcodes % changes the \' ... etc
+%\lccode`\'=`\'
+%%%%%%%%
+% hyphenation patterns for french ... for use with fonts that do not
+%                                     have the accented characters inside.
+%%%%%%%
+% Mods to \i and \oe form ... TeX eats up spaces and loses patterns. mjf Jun 88
+%\lccode'33='33 %\oe ... both needed in
+%\lccode'20='20 % \i .. dotless i
+%\patterns{
+%===================%=======================%
+% phonetic patterns % etymological patterns %
+%===================%=======================%
+%%*
+%===================%=======================%
+% phonetic patterns % etymological patterns %
+%===================%=======================%
+%%a
+-->
+2'2
+.a4
+'a4
+.â4
+'â4
+                    .ab3réa
+                    'ab3réa
+                    a1è2dre
+                    .ae3s4ch
+                    'ae3s4ch
+                    1alcool
+                    a2l1algi
+                    .amino1a2c
+                    'amino1a2c
+                    .ana3s4tr
+                    'ana3s4tr
+                    1a2nesthési
+                    .anti1a2
+                    'anti1a2
+                    .anti1e2
+                    'anti1e2
+                    .anti1é2
+                    .anti2enne
+                    'anti2enne
+                    'anti1é2
+                    .anti1s2
+                    'anti1s2
+                    .apo2s3ta
+                    'apo2s3ta
+                    apo2s3tr
+                    archi1é2pis
+                    .as2ta
+                    'as2ta
+                    a2s3tro
+<!--
+%==================-%======================-%
+% phonetic patterns % etymological patterns %
+%==================-%======================-%
+%%b -->
+1ba
+1bâ
+                    .bai2se3main <!-- % hyphen disappeared from french  5/2/94 -->
+1be
+1bé
+1bè
+1bê
+4be.
+4bes.
+2bent. <!-- % mute syllable: tombent (df) 22/02/94 -->
+1bi
+1bî0 <!-- % final zero essential to terminate cs -->
+                    .bi1a2c
+                    .bi1a2t <!-- % like .tri1a2t for tri-athlon bg 12/27/93 -->
+                    .bi1au
+                    .bio1a2
+                    .bi2s1a2
+                    .bi1u2
+1b2l
+4ble.
+4bles.
+2blent. <!-- % mute syllable: troublent (df) 28/02/94 -->
+1bo
+1bô
+1b2r
+4bre.
+4bres.
+2brent. <!-- % mute syllable: palabrent (df) 28/02/94 -->
+1bu
+1bû
+1by
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%c -->
+1\cc
+1ca
+1câ
+ca3ou3t2 <!-- % pour caoutchou... added 3/1/94 df-bg -->
+1ce
+1cé
+1cè
+1cê
+4ce.
+4ces.
+<!-- % words ending with -cent (df) 22/02/94 -->
+        2cent.
+      ja3cent.
+      ac3cent.
+     é3cent.
+  munifi3cent.
+  réti3cent.
+privatdo3cent.
+    inno3cent.
+      es3cent.
+ acquies4cent.
+      is3cent.
+   immis4cent.
+<!-- % -->
+.ch4
+1c2h
+4ch.
+2chb
+4che.
+4ches.
+2chent. <!-- % mute syllable: touchent (df) 22/02/94 -->
+                    .chè2vre3feuille <!-- % hyphen disappeared from french 5/2/94 -->
+2chg
+ch2l
+4chle.
+4chles.
+                    chlo2r3a2c
+                    chlo2r3é2t
+2chm
+2chn
+2chp
+ch2r
+4chre.
+4chres.
+2chs
+2cht
+2chw
+1ci
+1cî0 <!-- % final zero essential to terminate cs -->
+                    .ci2s1alp
+1c2k
+4ck.
+2ckb
+4cke.
+4ckes.
+2ckent. <!-- % mute syllable: stockent (df) 22/02/94 -->
+2ckf
+2ckg
+2ck3h
+2ckp
+2cks
+2ckt
+1c2l
+4cle.
+4cles.
+2clent. <!-- % mute syllable: encerclent (df) 28/02/94 -->
+1co
+1cô
+                    co1acc
+                    co1acq
+                    co1a2d
+                    co1ap
+                    co1ar
+                    co1assoc
+                    co1assur
+                    co1au
+                    co1ax
+                    co1é2
+                    co1ef
+                    co1en
+                    co1ex
+                    .con4  <!-- % missing from nb list -->
+                    .cons4 <!-- % missing from nb list -->
+                    .contre1s2c
+                    .contre3maî0tre <!-- % hyphen disappeared from french 5/2/94 -->
+                    co2nurb
+                    .co1o2
+                    .co2o3lie
+1c2r
+4cre.
+4cres.
+2crent. <!-- % mute syllable: massacrent (df) 28/02/94 -->
+1cu
+1cû
+1cy
+.cul4 <!-- % == as .con4 .cons4 (march 92) -->
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%d -->
+1d'
+1da
+1dâ
+                    .dacryo1a2
+d1d2h
+1de
+1dé
+1dè
+1dê
+4de.
+4des.
+<!-- % words ending with -dent (df) 22/02/94 -->
+      2dent.
+déca3dent.
+   é3dent.
+   cci3dent.
+  inci3dent.
+ confi3dent.
+   tri3dent.
+ dissi3dent.
+ chien3dent.
+   .ar3dent.
+  impu3dent.
+   pru3dent.
+<!-- % -->
+                    .dé1a2
+                    .dé1io
+                    .dé1o2
+                    .dé2s <!-- % originaly in JD file -->
+                    <!-- %.dé2s1a2 removed 09/17/92 because wrong for the -->
+                    <!-- % original JD 500 words test -->
+                    .dé3s2a3cr
+                    .dés2a3m <!-- % .dés2a2mi introduced 09/17/92 bec. i -->
+                               <!-- % can't see why désamidonner ran in JD. -->
+                               <!-- % Moved to .dés2a3m df 12/27/93. -->
+                    .dé3s2a3tell
+                    .dé3s2astr
+                    .dé3s2c <!-- % 1 moved 3 due to .dé2s 09/17/92 -->
+                    <!-- %.dé2s1e2 removed 09/17/92 because wrong for the -->
+                    <!-- % original JD 500 words test -->
+                    .dé2s1é2
+                    .dé3s2é3gr
+                    .dé3s2ensib
+                    .dé3s2ert
+                    .dé3s2exu
+                    <!-- %.dé2s3h removed 09/17/92 because wrong for the -->
+                    <!-- % original JD 500 words test -->
+                    .dé2s1i2
+                    .dé3s2i3d
+                    .dé3s2i3gn
+                    .dé3s2i3li
+                    .dé3s2i3nen
+                    .dé3s2invo
+                    .dé3s2i3r
+                    .dé3s2ist
+                    <!-- %.dé2s1o2 removed 09/17/92 because wrong for the -->
+                    <!-- % original JD 500 words test -->
+                    .dé3s2o3dé
+                    .dé3s2o3l
+                    .dé3s2o3pil
+                    .dé3s2orm
+                    .dé3s2orp
+                    .dé3s2oufr
+                    .dé3s2p <!-- % 1 moved 3 due to .dé2s 09/17/92 -->
+                    .dé3s2t <!-- % 1 moved 3 due to .dé2s 09/17/92 -->
+                    .dé2s1u2n
+                    3d2hal
+                    3d2houd
+1di
+1dî0 <!-- % final zero essential to terminate cs -->
+                    di2s3cop
+                    .di1a2cé
+                    .di1a2cid
+                    dia2g3n
+                    .di1ald
+                    .di1a2mi
+                    .di1a2tom
+                    .di1e2n
+                    .di2s3h
+2dlent. <!-- % mute syllable: jodlent (df) 28/02/94 -->
+1do
+1dô
+1d2r
+4dre.
+4dres.
+2drent. <!-- % mute syllable: engendrent (df) 28/02/94 -->
+d1s2
+1du
+1dû
+1dy
+                    .dy2s3
+                    .dy2s1a2
+                    .dy2s1i2
+                    .dy2s1o2 <!-- % missing from nb list -->
+                    .dy2s1u2
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%e -->
+.e4
+'e4
+.ê4
+'ê4
+.é4
+'é4
+.è4
+'è4
+                    1é2drie
+                    1é2drique
+                    1é2lectr
+                    1é2lément
+                    .en1a2
+                    'en1a2
+                    1é2nerg
+                    e2n1i2vr
+                    .en1o2
+                    'en1o2
+                    épi2s3cop
+                    épi3s4cope
+                    e2s3cop
+                    .eu2r1a2
+                    'eu2r1a2
+                    eu1s2tat
+                    extra1
+                    extra2c
+                    extra2i
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%f -->
+1fa
+1fâ
+1fe
+1fé
+1fè
+1fê
+4fe.
+4fes.
+2fent. <!-- % mute syllable: agrafent chauffent (df) 22/02/94 -->
+<!-- % -->
+1fi
+1fî0 <!-- % final zero essential to terminate cs -->
+1f2l
+4fle.
+4fles.
+2flent. <!-- % mute syllable: gonflent (df) 28/02/94 -->
+1fo
+1fô
+1f2r
+4fre.
+4fres.
+2frent. <!-- % mute syllable: balafrent (df) 28/02/94 -->
+f1s2
+1fu
+1fû
+1fy
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%g -->
+1ga
+1gâ
+1ge
+1gé
+1gè
+1gê
+4ge.
+4ges.
+<!-- % words ending with -gent (df) 22/02/94 -->
+       2gent.
+   ré3gent.
+  entre3gent.
+   indi3gent.
+   dili3gent.
+intelli3gent.
+  indul3gent.
+    tan3gent.
+    rin3gent.
+ contin3gent.
+    .ar3gent.
+    'ar3gent.
+    ser3gent.
+    ter3gent.
+résur3gent.
+<!-- % -->
+1g2ha
+1g2he
+1g2hi
+1g2ho
+1g2hy
+1gi
+1gî0 <!-- % final zero essential to terminate cs -->
+1g2l
+4gle.
+4gles.
+2glent. <!-- % mute syllable: meuglent (df) 28/02/94 -->
+    1g2n
+.sta2g3n
+  wa2g3n
+4gne.
+4gnes.
+2gnent. <!-- % mute syllable: accompagnent (df) 28/02/94 -->
+1go
+1gô
+1g2r
+4gre.
+4gres.
+2grent. <!-- % mute syllable: immigrent (df) 28/02/94 -->
+1gu
+1gû
+g1s2
+4gue.
+4gues.
+<!-- % words ending with -guent (df) 22/02/94 -->
+   2guent.
+.on3guent.
+'on3guent.
+<!-- % -->
+1gy
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%h -->
+1ha
+1hâ
+1he
+1hé
+1hè
+1hê
+                    hémi1é
+                    hémo1p2t
+4he.
+4hes.
+1hi
+1hî0 <!-- % final zero essential to terminate cs -->
+1ho
+1hô
+1hu
+1hû
+1hy
+                    hypera2
+                    hypere2
+                    hyperé2
+                    hyperi2
+                    hypero2
+                    hypers2
+                    hype4r1
+                    hyperu2
+                    hypo1a2
+                    hypo1e2 <!-- % missing from nb list -->
+                    hypo1é2
+                    hypo1i2
+                    hypo1o2
+                    hypo1s2
+                    hypo1u2
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%i -->
+.i4
+'i4
+.î4
+'î4
+                    i1algi
+                    i1arthr
+                    i1è2dre
+<!-- % ill patterns missing from nb list -->
+    il2l 
+   cil3l
+  rcil4l
+  ucil4l
+ vacil4l
+   gil3l
+   hil3l
+   lil3l
+     l3lion
+   mil3l
+   mil4let
+émil4l
+ semil4l
+  rmil4l
+ armil5l
+ capil3l
+ papil3la
+ papil3le
+ papil3li
+ papil3lom
+ pupil3l
+ piril3l
+ thril3l
+ cyril3l
+ ibril3l
+ pusil3l
+ .stil3l
+distil3l
+instil3l
+fritil3l
+boutil3l
+ vanil3lin
+ vanil3lis
+   vil3l
+  avil4l
+chevil4l
+ uevil4l
+  uvil4l
+   xil3l
+<!-- % end of ill patterns -->
+                    1informat <!-- % missing from nb list -->
+                    .in1a2
+                    'in1a2
+                    .in2a3nit
+                    'in2a3nit
+                    .in2augur
+                    'in2augur
+                    .in1e2
+                    'in1e2
+                    .in1é2
+                    'in1é2
+                    .in2effab <!-- % missing from nb list -->
+                    'in2effab
+                    .in2é3lucta
+                    'in2é3lucta
+                    .in2é3narra
+                    'in2é3narra
+                    .in2ept
+                    'in2ept
+                    .in2er
+                    'in2er
+                    .in2exora <!-- % missing from nb list -->
+                    'in2exora
+                    .in1i2
+                    'in1i2
+                    .in2i3miti
+                    'in2i3miti
+                    .in2i3q
+                    'in2i3q
+                    .in2i3t
+                    'in2i3t
+                    .in1o2
+                    'in1o2
+                    .in2o3cul
+                    'in2o3cul
+                    .in2ond
+                    'in2ond
+                    .in1s2tab
+                    'in1s2tab
+                    'inte4r3
+                    .intera2
+                    'intera2
+                    .intere2
+                    'intere2
+                    .interé2
+                    'interé2
+                    .interi2
+                    'interi2
+                    .intero2
+                    'intero2
+                    .inte4r3
+                    .interu2
+                    'interu2
+                    .inters2
+                    'inters2
+                    .in1u2
+                    'in1u2
+                    .in2uit
+                    'in2uit
+                    .in2u3l
+                    'in2u3l
+                    io1a2ct
+                    i1oxy
+                    i1s2tat
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%j -->
+1j
+2jk
+4je.
+4jes.
+2jent. <!-- % mute syllable: galèjent (df) 22/02/94 -->
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%k -->
+1ka
+1kâ
+1ke
+1ké
+1kè
+1kê
+4ke.
+4kes.
+2kent. <!-- % mute syllable: jerkent (df) 22/02/94 -->
+1k2h
+4kh.
+.kh4
+1ki
+1kî0 <!-- % final zero essential to terminate cs -->
+1ko
+1kô
+1k2r
+1ku
+1kû
+1ky
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%l -->
+1la
+1lâ
+1là
+                    la2w3re
+1le
+1lé
+1lè
+1lê
+4le.
+4les.
+<!-- % words ending with -lent (df) 22/02/94 -->
+        2lent.
+     .ta3lent.
+     iva3lent.
+équiva4lent.
+  monova3lent.
+  polyva3lent.
+      re3lent.
+     .do3lent.
+    indo3lent.
+    inso3lent.
+   turbu3lent.
+   succu3lent.
+  fécu3lent.
+   trucu3lent.
+     opu3lent.
+   corpu3lent.
+      ru3lent.
+   sporu4lent.
+<!-- % -->
+1li
+1lî0 <!-- % final zero essential to terminate cs -->
+1lo
+1lô
+l1s2t
+1lu
+1lû
+1ly
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%m -->
+1ma
+1mâ
+                    .ma2c3k
+                    .macro1s2c
+                    .ma2l1a2dres
+                    .ma2l1a2dro
+                    .ma2l1aisé
+                    .ma2l1ap
+                    .ma2l1a2v
+                    .ma2l1en
+                    .ma2l1int
+                    .ma2l1oc
+                    .ma2l1o2d
+                    .ma2r1x <!-- % nb (jbb: ?) -->
+1me
+1mé
+1mè
+1mê
+                    .mé2g1oh
+                    .mé2sa <!-- % missing from nb list -->
+                    .mé3san <!-- % missing from nb list -->
+                    .mé2s1es
+                    .mé2s1i
+                    .mé2s1u2s
+                    .méta1s2ta
+4me.
+4mes.
+<!-- % words ending with -ment (df) 22/02/94 -->
+      â2ment.
+       da2ment.
+       fa2ment.
+   amalga2ment.
+      cla2ment.
+       ra2ment.
+tempéra3ment.
+       ta2ment.
+    testa3ment.
+      qua2ment.
+      è2ment.
+   carê2ment.
+ diaphrag2ment.
+     ryth2ment.
+       ai2ment.
+      rai3ment.
+   abî2ment.
+    éci2ment.
+     vidi2ment.
+    subli2ment.
+    éli2ment.
+     reli2ment.
+       mi2ment.
+      ani2ment.
+     veni2ment.
+       ri2ment.
+  détri3ment.
+    nutri3ment.
+     inti2ment.
+     esti2ment.
+        l2ment.
+     flam2ment.
+     gram2ment.
+     .gem2ment.
+       om2ment.
+     .com3ment.
+      ô2ment.
+    slalo2ment.
+     chro2ment.
+       to2ment.
+       ar2ment.
+     .sar3ment.
+       er2ment.
+  antifer3ment.
+     .ser3ment.
+      fir2ment.
+       or2ment.
+       as2ment.
+       au2ment.
+    écu2ment.
+       fu2ment.
+       hu2ment.
+    fichu3ment.
+      llu2ment.
+      plu2ment.
+      bou2ment.
+      bru2ment.
+       su2ment.
+       tu2ment.
+<!-- % -->
+1mi
+1mî0 <!-- % final zero essential to terminate cs -->
+                    .milli1am
+                    1m2némo
+                    1m2nès
+                    1m2nési
+1mo
+1mô
+                    .mono1a2
+                    .mono1e2
+                    .mono1é2
+                    .mono1i2
+                    .mono1ï2dé
+                    .mono1o2
+                    .mono1u2
+                    .mono1s2
+                    mon2t3réal <!-- % missing from nb list -->
+m1s2
+1mu
+1mû
+1my
+                    moye2n1â2g
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%n -->
+1na
+1nâ
+1ne
+1né
+1nè
+1nê
+4ne.
+4nes.
+<!-- % words ending with -nent (df) 22/02/94 -->
+          2nent. <!-- % fric-tionnent - syllable muette - bg 27/12/93 -->
+    réma3nent.
+      imma3nent.
+     perma3nent.
+    .émi3nent.
+préémi3nent.
+  proémi3nent.
+  surémi3nent.
+      immi3nent.
+     conti3nent.
+     perti3nent.
+     absti3nent.
+<!-- % -->
+1ni
+1nî0 <!-- % final zero essential to terminate cs -->
+1no
+1nô
+                    .no2n1obs
+1nu
+1nû
+                    n3s2at.
+                    n3s2ats.
+n1x
+1ny
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%o -->
+.o4
+'o4
+'ô4
+.ô4
+<!-- %'\"o2 % mjf % deleted 3/1/94 df-bg -->
+                    o2b3long
+                    1octet <!-- % missing from nb list -->
+                    o1d2l
+                    o1è2dre
+                    o1ioni
+                    ombud2s3
+                    omni1s2
+                    o1s2tas
+                    o1s2tat
+                    o1s2téro
+                    o1s2tim
+                    o1s2tom
+                    o1s2trad
+                    o1s2tratu
+                    o1s2triction
+                    .oua1ou
+                    'oua1ou
+                    .ovi1s2c
+                    'ovi1s2c
+                    oxy1a2
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%p -->
+1pa
+1pâ
+                    paléo1é2
+                    .pa2n1a2f
+                    .pa2n1a2mé
+                    .pa2n1a2ra
+                    .pa2n1is
+                    .pa2n1o2ph
+                    .pa2n1opt
+                    .pa2r1a2che
+                    .pa2r1a2chè
+                    .para1s2
+                    .pa2r3hé
+1pe
+1pé
+1pè
+1pê
+4pe.
+4pes.
+<!-- % words ending with -pent (df) 22/02/94 -->
+   2pent.
+ re3pent.
+.ar3pent.
+'ar3pent.
+ser3pent.
+<!-- % -->
+                    .pen2ta <!-- % pent- or penta- but never pen-ta bg 12/27/93 -->
+                    per3h
+                    pé2nul <!-- % pé2n1ul moved back 09/17/92 to JD def. -->
+                    .pe4r
+                    .per1a2
+                    .per1e2
+                    .per1é2
+                    .per1i2
+                    .per1o2
+                    .per1u2
+                    pé1r2é2q <!-- % 2r1 moved 09/17/92 to 1r2(it was a typo) -->
+                    .péri1os
+                    .péri1s2
+                    .péri2s3s
+                    .péri2s3ta
+                    .péri1u2
+1p2h
+.ph4
+4ph.
+                    .phalan3s2t
+4phe.
+4phes.
+2phent. <!-- % mute syllable: triomphent (df) 22/02/94 -->
+ph2l
+4phle.
+4phles.
+2phn
+                    photo1s2
+ph2r
+4phre.
+4phres.
+2phs
+2pht
+                    3ph2talé
+                    3ph2tis
+<!-- %%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94 -->
+<!-- %%%%                .phyto3ph2 % originaly, but wrong for phy-toph-thora   9/92 -->
+<!-- %%%%                .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94 -->
+1pi
+1pî0 <!-- % final zero essential to terminate cs -->
+1p2l
+4ple.
+4ples.
+2plent. <!-- % mute syllable: accouplent (df) 28/02/94 -->
+                    .pluri1a
+                    1p2né
+                    1p2neu
+1po
+1pô
+                    po1astre
+                    poly1a2
+                    poly1e2
+                    poly1é2
+                    poly1è2
+                    poly1i2
+                    poly1o2
+                    poly1s2
+                    poly1u2
+                    .pon2tet <!-- % JD hypenated it asis 09/17/92, exception -->
+                    .pos2t3h
+                    .pos2t1in
+                    .pos2t1o2
+                    .pos2t3r
+                    .post1s2
+1p2r
+4pre.
+4pres.
+2prent. <!-- % mute syllable: empourprent (df) 28/02/94 -->
+                    .pré1a2
+                    .pré2a3la <!-- % missing from nb list -->
+                    .pré2au
+                    .pré1é2
+                    .pré1e2
+                    .pré1i2
+                    .pré1o2
+                    .pré1u2
+                    .pré1s2
+                    .pro1é2
+                    .pro1s2cé
+                    pro2s3tat
+                    .prou3d2h
+                    1p2sych
+                    .psycho1a2n
+                    1p2tèr
+                    1p2tér
+1pu
+                    .pud1d2l
+1pû
+1py
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%q -->
+1q
+4que.
+4ques.
+<!-- % words ending with -quent (df) 22/02/94 -->
+        2quent.
+     é3quent.
+   élo3quent.
+grandilo3quent.
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%r -->
+1ra
+1râ
+                    radio1a2 <!-- % missing from nb list -->
+1re
+1ré
+1rè
+1rê
+                    .ré1a2
+                    .ré2a3le
+                    .ré2a3lis
+                    .ré2a3lit
+                    .ré2aux
+                    .ré1é2
+                    .ré1e2
+                    .ré2el
+                    .ré2er
+                    .ré2èr
+                    .ré1i2
+                    .ré2i3fi
+                    .ré1o2
+                    .re1s2
+                    .re2s3cap
+                    .re2s3cisi <!-- % for res-cision  09/17/92 (missing from nb) -->
+                    .re2s3ciso <!-- % for res-cisoire 09/17/92(missing from nb) -->
+                    .re2s3cou
+                    .re2s3cri
+                    .re2s3pect
+                    .re2s3pir
+                    .re2s3plend
+                    .re2s3pons
+                    .re2s3quil
+                    .re2s3s
+                    .re2s3t
+                    .re3s4tab
+                    .re3s4tag
+                    .re3s4tand
+                    .re3s4tat
+                    .re3s4tén
+                    .re3s4tér
+                    .re3s4tim
+                    .re3s4tip
+                    .re3s4toc
+                    .re3s4top
+                    .re3s4tr
+                    .re4s5trein
+                    .re4s5trict
+                    .re4s5trin
+                    .re3s4tu
+                    .re3s4ty
+                    .réu2 <!-- %.ré1u2 % pattern rejected 12/2/92 -->
+                            <!-- % (don't hyphenate as ré-union nor réu-nion) -->
+                    .ré2uss
+                    .rétro1a2
+4re.
+4res.
+<!-- % words ending with -rent (df) 22/02/94 -->
+       2rent. <!-- % es-pèrent - syllable muette - bg 27/12/93 -->
+    .pa3rent.
+   appa3rent.
+transpa3rent.
+    é3rent.
+    tor3rent.
+    cur3rent.
+<!-- % -->
+1r2h
+4rhe.
+4rhes.
+                    2r3heur
+                    2r3hydr
+1ri
+1rî0 <!-- % final zero essential to terminate cs -->
+1ro
+1rô
+1ru
+1rû
+1ry
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%s -->
+1sa
+1sâ
+.sch4
+                    1s2caph
+                    1s2clér
+                    1s2cop
+ 1s2ch
+e2s3ch
+i2s3ché
+i2s3chia
+i2s3chio
+4sch.
+4sche.
+4sches.
+2schs
+1se
+1sé
+1sè
+1sê
+                    sesqui1a2
+4se.
+4ses.
+<!-- % words ending with -sent (df) 22/02/94 -->
+     2sent. <!-- % massent - syllable muette - bg 27/12/93 -->
+   ab3sent.
+pré3sent.
+ .res3sent.
+<!-- % -->
+.seu2le <!-- % jbb -->
+.sh4
+1s2h
+4sh.
+4she.
+4shes.
+2shent. <!-- % mute syllable: smashent (df) 22/02/94 -->
+2shm
+                    2s3hom
+2shr
+2shs
+1si
+1sî0 <!-- % final zero essential to terminate cs -->
+                    1s2lav
+                    1s2lov
+1so
+1sô
+                    1s2patia
+                    1s2perm
+                    1s2por
+                    1s2phèr
+                    1s2phér
+                    1s2piel
+                    1s2piros
+                    1s2tandard
+                    1s2tein
+                    stéréo1s2
+                    1s2tigm
+                    1s2tock
+                    1s2tomos
+                    1s2troph
+                    1s2tructu
+                    1s2tyle
+1su
+1sû
+                    .su2b1a2
+                    .su3b2alt
+                    .su2b1é2
+                    .su3b2é3r
+                    .su2b1in
+                    .su2b3limin
+                    .su2b3lin
+                    .su2b3lu
+                    sub1s2
+                    .su2b1ur
+                    supero2
+                    supe4r1
+                    supers2
+                    .su2r1a2
+                    su3r2ah
+                    .su3r2a3t
+                    .su2r1e2
+                    .su3r2eau
+                    .su3r2ell
+                    .su3r2et
+                    .su2r1é2
+                    .su2r3h
+                    .su2r1i2m
+                    .su2r1inf
+                    .su2r1int
+                    .su2r1of
+                    .su2r1ox
+1sy
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%t -->
+1ta
+1tâ
+1tà
+                    tachy1a2
+                    tchin3t2
+1te
+1té
+1tè
+1tê
+                    télé1e2
+                    télé1i2
+                    télé1o2b
+                    télé1o2p
+                    télé1s2
+4te.
+4tes.
+<!-- % words ending with -tent (df) 22/02/94 -->
+        2tent. <!-- % mentent - syllable muette - bg 27/12/93 -->
+     .la3tent.
+     .pa3tent.
+ compé3tent.
+   éni3tent.
+ mécon3tent.
+  omnipo3tent.
+ventripo3tent.
+équipo3tent.
+    impo3tent.
+     mit3tent.
+<!-- % -->
+.th4
+1t2h
+4th.
+4the.
+4thes.
+                    thermo1s2
+                    2t3heur
+2thl <!-- % th2l  was wrong for ...ath-lon (jd said 2thl) df 12/27/93 -->
+2thm
+2thn
+th2r
+4thre.
+4thres.
+2ths
+1ti
+1tî0 <!-- % final zero essential to terminate cs -->
+1to
+1tô
+1t2r
+                    tran2s1a2
+                    tran3s2act
+                    tran3s2ats
+                    tran2s3h
+                    tran2s1o2
+                    tran2s3p
+                    tran2s1u2
+4tre.
+4tres.
+2trent. <!-- % mute syllable: infiltrent (df) 28/02/94 -->
+                    .tri1a2c
+                    .tri1a2n
+                    .tri1a2t
+                    .tri1o2n
+                    t1t2l
+1tu
+1tû
+tung2s3
+1ty
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%u -->
+.u4
+'u4
+.û4
+'û4
+                    uni1o2v
+                    uni1a2x
+                    u2s3tr
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%v -->
+1va
+1vâ
+1ve
+1vé
+1vè
+1vê
+                    vélo1s2ki
+4ve.
+4ves.
+<!-- % words ending with -vent (df) 22/02/94 -->
+     2vent.
+conni3vent.
+ .sou3vent.
+<!-- % -->
+1vi
+1vî0 <!-- % final zero essential to terminate cs -->
+1vo
+1vô
+                    vol2t1amp
+1v2r
+4vre.
+4vres.
+2vrent. <!-- % mute syllable: recouvrent (df) 28/02/94 -->
+1vu
+1vû
+1vy
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%w -->
+1wa
+1we
+4we.
+4wes.
+2went. <!-- % mute syllable: interviewent (df) 22/02/94 -->
+1wi
+1wo
+1wu
+1w2r
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%x -->
+2xent. <!-- % mute syllable:  malaxent (df) 22/02/94 -->
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%y -->
+.y4
+'y4
+                    y1asth
+                    y1s2tom
+                    y1algi
+<!-- %==================-%======================-% -->
+<!-- % phonetic patterns % etymological patterns % -->
+<!-- %==================-%======================-% -->
+<!-- %%z -->
+1za
+1ze
+1zé
+1zè
+4ze.
+4zes.
+<!-- % words ending with -zent (df) 22/02/94 -->
+        2zent.
+privatdo3zent.
+<!-- % -->
+1zi
+1zo
+1zu
+1zy
+<!-- %} -->
+<!-- %\endgroup -->
+<!-- %Fin du fichier f7hyph.tex -->
+<!-- %%%%%%%%%%%%%%%%%%%%%%%%%% -->
+
+<!-- Added back the oe ligature patterns. Carlos Villegas -->
+1c&#x0153;0 <!-- % final zero essential to terminate cs -->
+.d\'e2s1&#x0153;0 <!-- % final zero essential to terminate cs -->
+1m&#x0153;0 <!-- % final zero essential to terminate cs -->
+1n&#x0153;0 <!-- % final zero essential to terminate cs -->
+1s&#x0153;0 <!-- % final zero essential to terminate cs -->
+
+</patterns>
+</hyphenation-info>
diff --git a/hyph/hyphenation.dtd b/hyph/hyphenation.dtd
new file mode 100644 (file)
index 0000000..4b4c2a0
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+
+<!ELEMENT hyphenation-info (hyphen-char?, hyphen-min?,
+                           classes, exceptions?, patterns)>
+
+<!-- Hyphen character to be used in the exception list as shortcut for
+     <hyphen pre-break="-"/>. Defaults to '-'
+-->
+<!ELEMENT hyphen-char EMPTY>
+<!ATTLIST hyphen-char value CDATA #REQUIRED>
+
+<!-- Default minimun length in characters of hyphenated word fragments
+     before and after the line break. For some languages this is not
+     only for aesthetic purposes, wrong hyphens may be generated if this
+     is not accounted for. 
+-->
+<!ELEMENT hyphen-min EMPTY>
+<!ATTLIST hyphen-min before CDATA #REQUIRED>
+<!ATTLIST hyphen-min after CDATA #REQUIRED>
+
+<!-- Character equivalent classes: space separated list of character groups, all
+     characters in a group are to be treated equivalent as far as
+     the hyphenation algorithm is concerned. The first character in a group
+     is the group's equivalent character. Patterns should only contain
+     first characters. It also defines word characters, i.e. a word that
+     contains characters not present in any of the classes is not hyphenated.
+-->
+<!ELEMENT classes (#PCDATA)>
+
+<!-- Hyphenation exceptions: space separated list of hyphenated words.
+     A hyphen is indicated by the hyphen tag, but you can use the
+     hyphen-char defined previously as shortcut. This is in cases
+     when the algorithm procedure finds wrong hyphens or you want
+     to provide your own hyphenation for some words.
+-->
+<!ELEMENT exceptions (#PCDATA|hyphen)* >
+
+<!-- The hyphenation patterns, space separated. A pattern is made of 'equivalent'
+     characters as described before, between any two word characters a digit
+     in the range 0 to 9 may be specified. The absence of a digit is equivalent
+     to zero. The '.' character is reserved to indicate begining or ending
+     of words. -->
+<!ELEMENT patterns (#PCDATA)>
+
+<!-- A "full hyphen" equivalent to TeX's \discretionary 
+     with pre-break, post-break and no-break attributes.
+     To be used in the exceptions list, the hyphen character is not
+     automatically added -->
+<!ELEMENT hyphen EMPTY>
+<!ATTLIST hyphen pre CDATA #IMPLIED>
+<!ATTLIST hyphen no CDATA #IMPLIED>
+<!ATTLIST hyphen post CDATA #IMPLIED>
diff --git a/hyph/readme b/hyph/readme
new file mode 100644 (file)
index 0000000..8cafbc3
--- /dev/null
@@ -0,0 +1,30 @@
+Hyphenation
+
+Fop comes with some hyphenation pattern. If you need a hyphenation 
+pattern which isn't included in the distribution, do the following: 
+
+1. get the TeX hyphenation pattern file and turn it into an xml file 
+   which conforms to the hyphenation.dtd in the sub directory /hyph
+
+2. name this new file following this schema: languageCode_countryCode.xml. 
+   If you don't need a country code, leave it away, p.e. the file name 
+   for an American english hyphenation pattern would look like this:  
+   en_US.xml. 
+   For an Italian file: it.xml. 
+   Language and country codes must be the same as in xsl:fo, that is follow 
+   ISO 639 <http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt> and 
+   ISO 3166 <http://www.ics.uci.edu/pub/ietf/http/related/iso3166.txt> 
+   respectively. 
+   NOTE: The ISO 639/ISO 3166 convention is that language names are
+   written in lower case, while country codes are written in upper case.
+
+3. If you have build your new hyphenation pattern file successfully there are
+   two ways to make it accessible to Fop. 
+   a) Put this new file into the directory /hyph and rebuild Fop. The file will 
+      be picked up and added to the fop.jar.
+   b) Put the file into a directory of your choice and specify this directory
+      in the userconfig.xml in the entry <hyphenation-dir>
+
+4. If the license of your hyphenation pattern file does allow it, please send 
+   it to the list fop-dev, so it can be made part of the Fop distribution. 
+
index 34a0f1011693378f09b034ebb44c15dc520ac197..c905191b00b1265231e4c50477ad6a9e2c684242 100644 (file)
Binary files a/lib/Fop.class and b/lib/Fop.class differ
index cd929c7fa02dd836d2d5cc43013715494cfe930c..dbe4c568a210aeac1e5afef4cb6bb739527bbfac 100644 (file)
@@ -3,34 +3,34 @@
  ============================================================================
                    The Apache Software License, Version 1.1
  ============================================================================
+
     Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
  Redistribution and use in source and binary forms, with or without modifica-
  tion, are permitted provided that the following conditions are met:
+
  1. Redistributions of  source code must  retain the above copyright  notice,
     this list of conditions and the following disclaimer.
+
  2. Redistributions in binary form must reproduce the above copyright notice,
     this list of conditions and the following disclaimer in the documentation
     and/or other materials provided with the distribution.
+
  3. The end-user documentation included with the redistribution, if any, must
     include  the following  acknowledgment:  "This product includes  software
     developed  by the  Apache Software Foundation  (http://www.apache.org/)."
     Alternately, this  acknowledgment may  appear in the software itself,  if
     and wherever such third-party acknowledgments normally appear.
+
  4. The names "Fop" and  "Apache Software Foundation"  must not be used to
     endorse  or promote  products derived  from this  software without  prior
     written permission. For written permission, please contact
     apache@apache.org.
+
  5. Products  derived from this software may not  be called "Apache", nor may
     "Apache" appear  in their name,  without prior written permission  of the
     Apache Software Foundation.
+
  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
  This software  consists of voluntary contributions made  by many individuals
  on  behalf of the Apache Software  Foundation and was  originally created by
- James Tauber <jtauber@jtauber.com>. For more  information on the Apache 
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
  Software Foundation, please see <http://www.apache.org/>.
+
  */
 
 // Ant
@@ -74,137 +74,144 @@ import org.apache.fop.messaging.MessageHandler;
 import org.apache.fop.apps.*;
 
 /**
- * extension to Ant which allows usage of Fop in the 
+ * extension to Ant which allows usage of Fop in the
  * same way as org.apache.fop.apps.CommandLine (the code is adapted from this class)
  * Gets input and output filenames from the script file <br/>
- * needed libraries: Sax 2 parser (defaults to Xerces-J), Jimi for images, w3c.jar 
+ * needed libraries: Sax 2 parser (defaults to Xerces-J), Jimi for images, w3c.jar
  * containing org.w3c.dom.svg etc. for svg support
  */
 
 public class Fop {
-  String fofile, pdffile;
-  
-  /**
-   * sets the name of the input file
-   * @param String name of the input fo file 
-   */
-  public void setFofile(String fofile) {
-    this.fofile = fofile;
-  }
-  
-  /**
-   * sets the name of the output file
-   * @param String name of the output pdf file 
-   */
-  public void setPdffile(String pdffile) {
-    this.pdffile = pdffile;
-  }
-  
-
-  /**
-   * creates a SAX parser, using the value of org.xml.sax.parser
-   * defaulting to org.apache.xerces.parsers.SAXParser
-   *
-   * @return the created SAX parser
-   */
-  static XMLReader createParser() {
-    String parserClassName =
-        System.getProperty("org.xml.sax.parser");
-    if (parserClassName == null) {
-        parserClassName = "org.apache.xerces.parsers.SAXParser";
-    }
-    MessageHandler.logln("using SAX parser " + parserClassName);
-
-    try {
-        return (XMLReader)
-          Class.forName(parserClassName).newInstance();
-    } catch (ClassNotFoundException e) {
-        MessageHandler.errorln("Could not find " + parserClassName);
-    } catch (InstantiationException e) {
-        MessageHandler.errorln("Could not instantiate "
-                       + parserClassName);
-    } catch (IllegalAccessException e) {
-        MessageHandler.errorln("Could not access " + parserClassName);
-    } catch (ClassCastException e) {
-        MessageHandler.errorln(parserClassName + " is not a SAX driver"); 
-    }
-    return null;
-  }  // end: createParser
-
-  /**
-   * create an InputSource from a file name
-   *
-   * @param filename the name of the file
-   * @return the InputSource created
-   */
-  protected static InputSource fileInputSource(String filename) {
-
-    /* this code adapted from James Clark's in XT */
-    File file = new File(filename);
-    String path = file.getAbsolutePath();
-    String fSep = System.getProperty("file.separator");
-    if (fSep != null && fSep.length() == 1)
-        path = path.replace(fSep.charAt(0), '/');
-    if (path.length() > 0 && path.charAt(0) != '/')
-        path = '/' + path;
-    try {
-        return new InputSource(new URL("file", null,
-               path).toString());
-    }
-    catch (java.net.MalformedURLException e) {
-        throw new Error("unexpected MalformedURLException");
-    }
-  }  // end: fileInputSource
-
-  /**
-   * main method, starts execution of this task
-   * 
-   */
-  public void execute () throws BuildException {
-    boolean errors = false;
-    String version = Version.getVersion();
-    MessageHandler.logln("=======================\nTask " + version + 
-                       "\nconverting file " + fofile + " to " + pdffile);
-  
-    if (!(new File(fofile).exists())) {
-      errors = true;
-      MessageHandler.errorln("Task Fop - ERROR: Formatting objects file " + fofile + " missing.");
-    }
-  
-    XMLReader parser = createParser();
-  
-    if (parser == null) {
-        MessageHandler.errorln("Task Fop - ERROR: Unable to create SAX parser");
-        errors = true;
+    String fofile, pdffile;
+
+    /**
+     * sets the name of the input file
+     * @param String name of the input fo file
+     */
+    public void setFofile(String fofile) {
+        this.fofile = fofile;
     }
 
-    // setting the parser features
-    try {
-      parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
-    } catch (SAXException e) {
-      MessageHandler.errorln("Error in setting up parser feature namespace-prefixes");
-      MessageHandler.errorln("You need a parser which supports SAX version 2");  
-      System.exit(1);  
+    /**
+      * sets the name of the output file
+      * @param String name of the output pdf file
+      */
+    public void setPdffile(String pdffile) {
+        this.pdffile = pdffile;
     }
 
-    if (!errors) {
-      try {
+
+    /**
+      * creates a SAX parser, using the value of org.xml.sax.parser
+      * defaulting to org.apache.xerces.parsers.SAXParser
+      *
+      * @return the created SAX parser
+      */
+    static XMLReader createParser() {
+        String parserClassName = System.getProperty("org.xml.sax.parser");
+        if (parserClassName == null) {
+            parserClassName = "org.apache.xerces.parsers.SAXParser";
+        }
+        MessageHandler.logln("using SAX parser " + parserClassName);
+
+        try {
+            return (XMLReader) Class.forName(
+                     parserClassName).newInstance();
+        } catch (ClassNotFoundException e) {
+            MessageHandler.errorln("Could not find " + parserClassName);
+        }
+        catch (InstantiationException e) {
+            MessageHandler.errorln("Could not instantiate " +
+                                   parserClassName);
+        }
+        catch (IllegalAccessException e) {
+            MessageHandler.errorln("Could not access " + parserClassName);
+        }
+        catch (ClassCastException e) {
+            MessageHandler.errorln(parserClassName + " is not a SAX driver");
+        }
+        return null;
+    } // end: createParser
+
+    /**
+     * create an InputSource from a file name
+     *
+     * @param filename the name of the file
+     * @return the InputSource created
+     */
+    protected static InputSource fileInputSource(String filename) {
+
+        /* this code adapted from James Clark's in XT */
+        File file = new File(filename);
+        String path = file.getAbsolutePath();
+        String fSep = System.getProperty("file.separator");
+        if (fSep != null && fSep.length() == 1)
+            path = path.replace(fSep.charAt(0), '/');
+        if (path.length() > 0 && path.charAt(0) != '/')
+            path = '/' + path;
+        try {
+            return new InputSource(new URL("file", null, path).toString());
+        } catch (java.net.MalformedURLException e) {
+            throw new Error("unexpected MalformedURLException");
+        }
+    } // end: fileInputSource
+
+    /**
+     * main method, starts execution of this task
+     *
+     */
+    public void execute () throws BuildException {
         Driver driver = new Driver();
-        driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);
-        driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
-        driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
-           driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping");
-           driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping");
-        driver.setWriter(new PrintWriter(new FileWriter(pdffile)));
-        driver.buildFOTree(parser, fileInputSource(fofile));
-        driver.format();
-        driver.render();
-      } catch (Exception e) {
-        MessageHandler.errorln("Task Fop - FATAL ERROR: " + e.getMessage());
-        System.exit(1);
-      }
-    }
-    MessageHandler.logln("=======================\n");  
-  } // end: execute
+        driver.loadStandardConfiguration("standard");
+        driver.setBaseDir(fofile);
+        boolean errors = false;
+        String version = Version.getVersion();
+        MessageHandler.logln("=======================\nTask " +
+                             version + "\nconverting file " + fofile + " to " + pdffile);
+
+        if (!(new File(fofile).exists())) {
+            errors = true;
+            MessageHandler.errorln(
+              "Task Fop - ERROR: Formatting objects file " +
+              fofile + " missing.");
+        }
+
+        XMLReader parser = createParser();
+
+        if (parser == null) {
+            MessageHandler.errorln("Task Fop - ERROR: Unable to create SAX parser");
+            errors = true;
+        }
+
+        // setting the parser features
+        try {
+            parser.setFeature("http://xml.org/sax/features/namespace-prefixes",
+                              true);
+        } catch (SAXException e) {
+            MessageHandler.errorln("Error in setting up parser feature namespace-prefixes");
+            MessageHandler.errorln("You need a parser which supports SAX version 2");
+            System.exit(1);
+        }
+
+        if (!errors) {
+            try {
+                driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer",
+                                   version);
+                driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
+                driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
+                driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping");
+                driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping");
+                driver.setWriter(new PrintWriter(new FileWriter(pdffile)));
+                driver.buildFOTree(parser, fileInputSource(fofile));
+                driver.format();
+                driver.render();
+            } catch (Exception e) {
+                MessageHandler.errorln("Task Fop - FATAL ERROR: " +
+                                       e.getMessage());
+                System.exit(1);
+            }
+        }
+        MessageHandler.logln("=======================\n");
+    } // end: execute
 }
 
diff --git a/lib/SerializeHyphPattern.class b/lib/SerializeHyphPattern.class
new file mode 100644 (file)
index 0000000..375be27
Binary files /dev/null and b/lib/SerializeHyphPattern.class differ
diff --git a/lib/SerializeHyphPattern.java b/lib/SerializeHyphPattern.java
new file mode 100644 (file)
index 0000000..f43f6d7
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 1999 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in
+ *  the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ *  any, must include the following acknowlegement:
+ *     "This product includes software developed by the
+ *    Apache Software Foundation (http://www.apache.org/)."
+ *  Alternately, this acknowlegement may appear in the software itself,
+ *  if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
+ *  Foundation" must not be used to endorse or promote products derived
+ *  from this software without prior written permission. For written
+ *  permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ *  nor may "Apache" appear in their names without prior written
+ *  permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+//package org.apache.tools.ant.taskdefs;
+
+import org.apache.tools.ant.taskdefs.MatchingTask;
+import org.apache.tools.ant.DirectoryScanner;
+import java.net.*;
+import java.io.*;
+import java.util.*;
+import org.xml.sax.SAXException;
+
+//fop
+import org.apache.fop.layout.hyphenation.HyphenationTree;
+import org.apache.fop.layout.hyphenation.HyphenationException;
+
+/**
+ *    SerializeHyphPattern
+ */
+
+
+public class SerializeHyphPattern extends MatchingTask {
+    private File sourceDir, targetDir;
+    private boolean errorDump = false;
+
+    /**
+       *  Main method, which is called by ant.
+       */
+    public void execute () throws org.apache.tools.ant.BuildException {
+        DirectoryScanner ds = this.getDirectoryScanner(sourceDir);
+        String[] files = ds.getIncludedFiles();
+        for (int i = 0; i < files.length ; i++) {
+            processFile(files[i].substring(0, files[i].length() - 4));
+        }
+    } //end execute
+
+
+    /**
+       * Sets the source directory
+       *
+       */
+    public void setSourceDir (String sourceDir) {
+        File dir = new File(sourceDir);
+        if (!dir.exists()) {
+            System.err.println("Fatal Error: source directory " +
+                               sourceDir + " for hyphenation files doesn't exist.");
+            System.exit(1);
+        }
+        this.sourceDir = dir;
+    }
+
+    /**
+         * Sets the target directory
+         *
+         */
+    public void setTargetDir (String targetDir) {
+        File dir = new File(targetDir);
+        this.targetDir = dir;
+    }
+
+    /**
+         * more error information
+         *
+         */
+    public void setErrorDump (boolean errorDump) {
+        this.errorDump = errorDump;
+    }
+
+
+    /*
+      * checks whether input or output files exists or the latter is older than input file
+      * and start build if necessary
+      */
+    private void processFile (String filename) {
+        File infile = new File (sourceDir , filename + ".xml");
+        File outfile = new File(targetDir , filename + ".hyp");
+        long outfileLastModified = outfile.lastModified();
+        boolean startProcess = true;
+
+        startProcess = rebuild(infile, outfile);
+        if (startProcess) {
+            buildPatternFile(infile, outfile);
+        }
+    }
+
+    /*
+       * serializes pattern files
+       */
+    private void buildPatternFile (File infile, File outfile) {
+        System.out.println("Processing " + infile);
+        HyphenationTree hTree = new HyphenationTree();
+        try {
+            hTree.loadPatterns(infile.toString());
+            if (errorDump) {
+                System.out.println("Stats: ");
+                hTree.printStats();
+            }
+        } catch (HyphenationException ex) {
+            System.err.println("Can't load patterns from xml file " +
+                               infile + " - Maybe hyphenation.dtd is missing?");
+            if (errorDump) {
+                System.err.println(ex.toString());
+            }
+        }
+        //serialize class
+        try {
+            ObjectOutputStream out = new ObjectOutputStream (
+                                       new FileOutputStream(outfile));
+            out.writeObject(hTree);
+            out.close();
+        } catch (IOException ioe) {
+            System.err.println("Can't write compiled pattern file: " +
+                               outfile);
+            System.err.println(ioe);
+        }
+    }
+
+    /**
+       *  Checks for existence of output file and compares
+       *  dates with input and stylesheet file
+       */
+    private boolean rebuild (File infile, File outfile) {
+        if (outfile.exists()) {
+            //checks whether output file is older than input file
+            if (outfile.lastModified() < infile.lastModified()) {
+                return true;
+            }
+        } else {
+            //if output file does not exist, start process
+            return true;
+        }
+        return false;
+    } //end rebuild
+
+/*
+    //quick access for debugging
+    public static void main (String args[]) {
+        SerializeHyphPattern ser = new SerializeHyphPattern();
+        ser.setIncludes("*.xml");
+        ser.setSourceDir("\\xml-fop\\hyph\\");
+        ser.setTargetDir("\\xml-fop\\hyph\\");
+        ser.execute();
+    }
+*/
+
+
+}
index d99053365229545070982321ed7cda2cc46a57b9..3dafbcf89ae2d8e88fe3878b0982e189b2c49850 100644 (file)
@@ -9,3 +9,4 @@ w3c.jar                  the svg library from the w3 consortium
 Compare.java             a ant task which compares files
 Fop.java                 a ant task which allows calling Fop from Ant 
 Xslt.java                a ant task which allows calling Xalan from Ant
+SerializeHyphPattern     a ant task which serializes hyphenation patterns for quicker access
index 14e4deccf3a0b7d2376c62814738154d3c07365e..5f6af34e88633d57904f38cdaa8d8d769d77d0e1 100644 (file)
     <datatype>Number</datatype>
     <default>1</default>
   </property>
+
+
+  <property>
+    <name>region-name</name>
+    <class-name>RegionName</class-name>
+    <inherited>false</inherited>
+    <datatype>String</datatype>
+    <default></default>
+  </property>
+
+  
+  <property>
+    <name>hyphenate</name>
+    <class-name>Hyphenate</class-name>
+    <inherited>true</inherited>
+    <datatype>Enum</datatype>
+      <enumeration>
+        <value const="TRUE">true</value>
+        <value const="FALSE">false</value>
+      </enumeration>
+    <default>false</default>
+  </property>
+
+  <property>
+    <name>hyphenation-character</name>
+    <class-name>HyphenationCharacter</class-name>
+    <inherited>true</inherited>
+    <datatype>Character</datatype>
+    <default>-</default>
+  </property>
+
+  <property>
+    <name>hyphenation-push-character-count</name>
+    <class-name>HyphenationPushCharacterCount</class-name>
+    <inherited>true</inherited>
+    <datatype>Number</datatype>
+    <default>2</default>
+  </property>
+
+  <property>
+    <name>hyphenation-remain-character-count</name>
+    <class-name>HyphenationRemainCharacterCount</class-name>
+    <inherited>true</inherited>
+    <datatype>Number</datatype>
+    <default>2</default>
+  </property>
+  
+  <property>
+    <name>language</name>
+    <class-name>Language</class-name>
+    <inherited>true</inherited>
+    <datatype>String</datatype>
+    <default>none</default>
+  </property>
+
   <property>
     <name>widows</name>
     <inherited>true</inherited>
   </property>
 
   <property>
-    <name>region-name</name>
-    <class-name>RegionName</class-name>
-    <inherited>false</inherited>
+    <name>country</name>
+    <class-name>Country</class-name>
+    <inherited>true</inherited>
     <datatype>String</datatype>
-    <default></default>
+    <default>none</default>
   </property>
-  
+
  </generic-property-list>
 </property-list>
 
index d817f2587fc2fcc021b967459dc43f991f654744..3918bc039352f786496094a961d6415811749b50 100644 (file)
@@ -66,11 +66,12 @@ import java.io.PrintWriter;
 import java.io.IOException;
 import java.io.FileNotFoundException;
 import java.net.URL;
+import java.io.InputStream;
+
 
 // FOP
 import org.apache.fop.messaging.MessageHandler;
 
-
 /**
  * mainline class.
  *
@@ -82,6 +83,8 @@ public class CommandLine {
 
     private String foFile = null;
     private String pdfFile = null;
+    private String userConfigFile = null;
+    private String baseDir = null;
 
     /** show a full dump on error */
     private static boolean errorDump = false;
@@ -90,6 +93,8 @@ public class CommandLine {
         for (int i = 0; i < args.length; i++) {
             if (args[i].equals("-d") || args[i].equals("--full-error-dump")) {
                 errorDump = true;
+            } else if ((args[i].charAt(0) == '-') && (args[i].charAt(1) == 'c')) {
+                userConfigFile = args[i].substring(2);
             } else if (args[i].charAt(0) == '-') {
                 printUsage(args[i]);
             } else if (foFile == null) {
@@ -108,16 +113,27 @@ public class CommandLine {
     public void printUsage(String arg) {
         if (arg != null) {
             MessageHandler.errorln("Unkown argument: '"+arg + "'");
-            MessageHandler.errorln("Usage: java [-d]" +
+            MessageHandler.errorln("Usage: java [-d] " +
+                                   "[-cMyConfigFile] " +
                                    "org.apache.fop.apps.CommandLine " + "formatting-object-file pdf-file");
             MessageHandler.errorln("Options:\n" + "  -d or --full-error-dump    Show stack traces upon error");
+            MessageHandler.errorln("-cMyConfigFile use values in configuration file MyConfigFile instead of default");
 
             System.exit(1);
         }
     }
 
-
     public void run() {
+        Driver driver  = new Driver();
+        driver.loadStandardConfiguration("standard");
+//        driver.loadStandardConfiguration("pdf");
+        if (userConfigFile != null)  {
+            driver.loadUserconfiguration(userConfigFile,"standard");
+        }
+        driver.setBaseDir(foFile);
+
+        String version = Version.getVersion();
+        MessageHandler.logln(version);
 
         XMLReader parser = createParser();
 
@@ -140,7 +156,6 @@ public class CommandLine {
         }
 
         try {
-            Driver driver = new Driver();
             driver.setErrorDump(errorDump);
             driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer",
                                Version.getVersion());
@@ -216,7 +231,7 @@ public class CommandLine {
       * @param filename the name of the file
       * @return the InputSource created
       */
-    protected static InputSource fileInputSource(String filename) {
+    public static InputSource fileInputSource(String filename) {
 
         /* this code adapted from James Clark's in XT */
         File file = new File(filename);
@@ -242,9 +257,6 @@ public class CommandLine {
       * @param command line arguments
       */
     public static void main(String[] args) {
-        String version = Version.getVersion();
-        MessageHandler.errorln(version);
-
         CommandLine cmdLine = new CommandLine(args);
         cmdLine.run();
 
index 46b9229707329c80235e912b433ed5477fc324ff..efa3192ba3c95304d138d5b4c3a21daf5b7772a9 100644 (file)
@@ -59,6 +59,9 @@ import org.apache.fop.layout.AreaTree;
 import org.apache.fop.layout.FontInfo;
 import org.apache.fop.render.Renderer;
 import org.apache.fop.messaging.MessageHandler;
+import org.apache.fop.configuration.ConfigurationReader;
+import org.apache.fop.configuration.StandardConfiguration;
+
 
 // DOM
 import org.w3c.dom.Document;
@@ -76,6 +79,8 @@ import org.xml.sax.helpers.AttributesImpl;
 // Java
 import java.io.PrintWriter;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.File;
 
 /**
  * <P>Primary class that drives overall FOP process.
@@ -130,7 +135,7 @@ public class Driver {
     protected PrintWriter writer;
 
     /** If true, full error stacks are reported */
-    protected boolean errorDump;
+    protected boolean errorDump = false;
 
     /** create a new Driver */
     public Driver() {
@@ -138,8 +143,8 @@ public class Driver {
     }
 
     /** Set the error dump option
-      * @param dump if true, full stacks will be reported to the error log
-      */
+       * @param dump if true, full stacks will be reported to the error log
+       */
     public void setErrorDump(boolean dump) {
         errorDump = dump;
     }
@@ -150,18 +155,18 @@ public class Driver {
     }
 
     /**
-      * set the class name of the Renderer to use as well as the
-      * producer string for those renderers that can make use of it
-      */
+       * set the class name of the Renderer to use as well as the
+       * producer string for those renderers that can make use of it
+       */
     public void setRenderer(String rendererClassName, String producer) {
         this.renderer = createRenderer(rendererClassName);
         this.renderer.setProducer(producer);
     }
 
     /**
-      * protected method used by setRenderer(String, String) to
-      * instantiate the Renderer class
-      */
+       * protected method used by setRenderer(String, String) to
+       * instantiate the Renderer class
+       */
     protected Renderer createRenderer(String rendererClassName) {
         MessageHandler.logln("using renderer " + rendererClassName);
 
@@ -185,26 +190,26 @@ public class Driver {
     }
 
     /**
-      * add the given element mapping.
-      *
-      * an element mapping maps element names to Java classes
-      */
+       * add the given element mapping.
+       *
+       * an element mapping maps element names to Java classes
+       */
     public void addElementMapping(ElementMapping mapping) {
         mapping.addToBuilder(this.treeBuilder);
     }
 
     /**
-      * add the element mapping with the given class name
-      */
+       * add the element mapping with the given class name
+       */
     public void addElementMapping(String mappingClassName) {
         createElementMapping(mappingClassName).addToBuilder(
           this.treeBuilder);
     }
 
     /**
-      * protected method used by addElementMapping(String) to
-      * instantiate element mapping class
-      */
+       * protected method used by addElementMapping(String) to
+       * instantiate element mapping class
+       */
     protected ElementMapping createElementMapping(
       String mappingClassName) {
         MessageHandler.logln("using element mapping " + mappingClassName);
@@ -233,16 +238,16 @@ public class Driver {
     }
 
     /**
-      * add the element mapping with the given class name
-      */
+       * add the element mapping with the given class name
+       */
     public void addPropertyList(String listClassName) {
         createPropertyList(listClassName).addToBuilder(this.treeBuilder);
     }
 
     /**
-      * protected method used by addPropertyList(String) to
-      * instantiate list mapping class
-      */
+       * protected method used by addPropertyList(String) to
+       * instantiate list mapping class
+       */
     protected PropertyListMapping createPropertyList(
       String listClassName) {
         MessageHandler.logln("using property list mapping " +
@@ -272,20 +277,20 @@ public class Driver {
     }
 
     /**
-      * return the tree builder (a SAX DocumentHandler).
-      *
-      * used in situations where SAX is used but not via a FOP-invoked
-      * SAX parser. A good example is an XSLT engine that fires SAX
-      * events but isn't a SAX Parser itself.
-      */
+       * return the tree builder (a SAX DocumentHandler).
+       *
+       * used in situations where SAX is used but not via a FOP-invoked
+       * SAX parser. A good example is an XSLT engine that fires SAX
+       * events but isn't a SAX Parser itself.
+       */
     public ContentHandler getContentHandler() {
         return this.treeBuilder;
     }
 
     /**
-      * build the formatting object tree using the given SAX Parser and
-      * SAX InputSource
-      */
+       * build the formatting object tree using the given SAX Parser and
+       * SAX InputSource
+       */
     public void buildFOTree(XMLReader parser,
                             InputSource source) throws FOPException {
 
@@ -308,8 +313,8 @@ public class Driver {
     }
 
     /**
-      * build the formatting object tree using the given DOM Document
-      */
+       * build the formatting object tree using the given DOM Document
+       */
     public void buildFOTree(Document document) throws FOPException {
 
         /* most of this code is modified from John Cowan's */
@@ -337,7 +342,7 @@ public class Driver {
                         int datalen = data.length();
                         if (array == null || array.length < datalen) {
                             /* if the array isn't big enough, make a new
-                                one */
+                                 one */
                             array = new char[datalen];
                         }
                         data.getChars(0, datalen, array, 0);
@@ -399,8 +404,8 @@ public class Driver {
     }
 
     /**
-      * Dumps an error
-      */
+       * Dumps an error
+       */
     public void dumpError(Exception e) {
         if (errorDump) {
             if (e instanceof SAXException) {
@@ -417,16 +422,16 @@ public class Driver {
 
 
     /**
-      * set the PrintWriter to use to output the result of the Renderer
-      * (if applicable)
-      */
+       * set the PrintWriter to use to output the result of the Renderer
+       * (if applicable)
+       */
     public void setWriter(PrintWriter writer) {
         this.writer = writer;
     }
 
     /**
-      * format the formatting object tree into an area tree
-      */
+       * format the formatting object tree into an area tree
+       */
     public void format() throws FOPException {
         FontInfo fontInfo = new FontInfo();
         this.renderer.setupFontInfo(fontInfo);
@@ -438,9 +443,86 @@ public class Driver {
     }
 
     /**
-      * render the area tree to the output form
-      */
+       * render the area tree to the output form
+       */
     public void render() throws IOException, FOPException {
         this.renderer.render(areaTree, this.writer);
     }
+
+    /**
+      *  loads standard configuration file and a user file, if it has been specified
+      */
+    public void loadStandardConfiguration(String role) {
+        String file;
+        if (role.equals("standard")) {
+            file = "config.xml";
+        } else if (role.equals("pdf")) {
+            file = "pdf.xml";
+        } else  if (role.equals("awt")) {
+            file = "awt.xml";
+        } else {
+            MessageHandler.errorln("Error: unknown configuration role: " + role
+                                   + "\n using standard");
+            file = "config.xml";
+        }
+        // the entry /conf/config.xml refers to a directory conf which is a sibling of org
+        InputStream configfile =
+          ConfigurationReader.class.getResourceAsStream("/conf/"+file);
+        if (configfile == null) {
+            MessageHandler.errorln("Fatal error: can't find default configuration file");
+            System.exit(1);
+        }
+        MessageHandler.logln("reading default configuration file");
+        ConfigurationReader reader =
+          new ConfigurationReader (new InputSource(configfile),
+                                   "standard");
+        if (errorDump) {
+            reader.setDumpError(true);
+        }
+        try {
+            reader.start();
+        } catch (org.apache.fop.apps.FOPException error) {
+            MessageHandler.errorln("Fatal Error: Can't process default configuration file. \nProbably it is not well-formed.");
+            if (errorDump) {
+                reader.dumpError(error);
+            }
+            System.exit(1);
+        }
+    }
+
+    public void loadUserconfiguration(String userConfigFile, String role) {
+        //read user configuration file
+        if (userConfigFile != null) {
+            MessageHandler.logln("reading user configuration file");
+            ConfigurationReader reader = new ConfigurationReader (
+                                           CommandLine.fileInputSource(userConfigFile), role);
+            if (errorDump) {
+                reader.setDumpError(true);
+            }
+            try {
+                reader.start();
+            } catch (org.apache.fop.apps.FOPException error) {
+                MessageHandler.errorln(
+                  "Can't find user configuration file " +
+                  userConfigFile);
+                MessageHandler.errorln("using default values");
+                if (errorDump) {
+                    reader.dumpError(error);
+                }
+            }
+        }
+    }
+
+    public void setBaseDir(String fofile) {
+      String baseDir = StandardConfiguration.getStringValue("baseDir");
+      if (baseDir == null)  {
+        baseDir = new File(new File(fofile).getAbsolutePath()).getParent();
+        StandardConfiguration.put("baseDir",baseDir);
+      } 
+      if (errorDump) {
+        MessageHandler.logln("base directory: " + baseDir);
+      }
+    }
+
+
 }
index 2201df3240ca1c4475a2415037d0c678ee8f26ff..9af596207d4246264a0db5f78600683464b8601e 100644 (file)
@@ -51,6 +51,7 @@
 
 package org.apache.fop.apps;
 
+import org.apache.fop.configuration.StandardConfiguration;
 /** 
  * class representing the version of FOP.
  */
@@ -62,6 +63,6 @@ public class Version {
      * @return the version string
      */
     public static String getVersion() {
-        return "FOP 0.15";
+        return StandardConfiguration.getStringValue("version");
     }
 }
index a82c418590a628f54291fa86048c189e42856c80..9fec8a7d6f0b8573cb2c156a3e6808bd69fe6a89 100644 (file)
@@ -68,6 +68,7 @@ import java.io.FileWriter;
 import java.io.PrintWriter;
 import java.io.BufferedWriter;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.FileNotFoundException;
 import java.net.URL;
 
@@ -80,7 +81,7 @@ import org.apache.xalan.xslt.XSLTResultTarget;
 
 // FOP
 import org.apache.fop.messaging.MessageHandler;
-
+import org.apache.fop.configuration.ConfigurationReader;
 
 /**
  * mainline class.
@@ -91,6 +92,11 @@ import org.apache.fop.messaging.MessageHandler;
  */
 public class XalanCommandLine {
 
+    private String userConfigFile = null;
+
+    /** show a full dump on error */  //this should be implemented here too
+    private static boolean errorDump = false;
+
     /**
      * creates a SAX parser, using the value of org.xml.sax.parser
      * defaulting to org.apache.xerces.parsers.SAXParser
@@ -150,6 +156,7 @@ public class XalanCommandLine {
         }
     }
 
+
     /**
       * mainline method
       *
@@ -160,16 +167,26 @@ public class XalanCommandLine {
       * @param command line arguments
       */
     public static void main(String[] args) {
-        String version = Version.getVersion();
-        MessageHandler.logln(version);
-
-
         if (args.length != 3) {
             MessageHandler.errorln("usage: java " +
                                    "org.apache.fop.apps.XalanCommandLine " + "xml-file xslt-file pdf-file");
             System.exit(1);
         }
 
+        Driver driver  = new Driver();
+        driver.loadStandardConfiguration("standard");
+//must be redone like CommandLine
+/*        if (userConfigFile != null)  {
+            driver.loadUserconfiguration(userConfigFile,"standard");
+        }
+*/
+        driver.setBaseDir(args[0]);
+
+        String version = Version.getVersion();
+        MessageHandler.logln(version);
+
+
+
         XMLReader parser = createParser();
 
         if (parser == null) {
@@ -238,7 +255,6 @@ public class XalanCommandLine {
             writer.close();
 
             //set Driver methods to start Fop processing
-            Driver driver = new Driver();
             driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer",
                                version);
             driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
diff --git a/src/org/apache/fop/configuration/AWTConfiguration.java b/src/org/apache/fop/configuration/AWTConfiguration.java
new file mode 100644 (file)
index 0000000..330e519
--- /dev/null
@@ -0,0 +1,141 @@
+package org.apache.fop.configuration;
+
+import java.util.Vector;
+import java.util.Hashtable;
+import java.util.Enumeration;
+
+public class AWTConfiguration {
+
+  /** stores the configuration information */
+  private static Hashtable configuration;
+
+
+  /**
+   * general access method
+   *
+   * @param key a string containing the key value for the configuration value
+   * @return Object containing the value; normally you would use one of the
+   *                convenience methods, which return the correct form.
+   *         null   if the key is not defined.
+   */
+  public static Object getValue (String key){
+    return configuration.get(key);
+  };
+
+  /**
+   *  convenience methods to access strings values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return String a string containing the value
+   *          null   if the key is not defined.
+   */
+  public static String getStringValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof String) {
+      return (String) obj;
+    } else {
+      return null;
+    }
+  };
+
+  /**
+   *  convenience methods to access int values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return int a int containing the value
+   *          -1   if the key is not defined.
+   */
+  public static int getIntValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof String) {
+      return Integer.parseInt((String) obj);
+    } else {
+      return -1;
+    }
+  };
+
+  /**
+   *  convenience methods to access list values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return Vector a Vector containing the values
+   *          null   if the key is not defined.
+   */
+  public static Vector getListValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof Vector) {
+      return (Vector) obj;
+    } else {
+      return null;
+    }
+  };
+
+  /**
+   *  convenience methods to access map/hashtable values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return Hashtable a Hashtable containing the values
+   *          null   if the key is not defined.
+   */
+  public static Hashtable getHashtableValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof Hashtable) {
+      return (Hashtable) obj;
+    } else {
+      return null;
+    }
+  };
+
+  /**
+   *  adds information to the configuration map/hashtable in key,value form
+   *  @param key a string containing the key value for the configuration value
+   *  @param value an Object containing the value; can be a String, a Vector or a Hashtable
+   */
+  public static void put(String key,Object value){
+    configuration.put(key,value);
+  };
+
+  /**
+   *  debug methods, which writes out all information in this configuration
+   */
+  public static void dumpConfiguration() {
+    String key;
+    Object value;
+    Vector list;
+    Hashtable map;
+    Enumeration enum;
+    String tmp;
+    System.out.println("Dumping standard configuration: ");
+    Enumeration enumeration = configuration.keys();
+    while (enumeration.hasMoreElements()) {
+      key = (String) enumeration.nextElement();
+      System.out.print("  key: " + key);
+      value = configuration.get(key);
+      if (value instanceof String) {
+        System.out.println(" value: " + value);
+      } else if (value instanceof Vector) {
+        list = (Vector) value;
+        enum = list.elements();
+        System.out.print(" value: ");
+        while (enum.hasMoreElements()) {
+          System.out.print( enum.nextElement() + " - ");
+        }
+        System.out.println("");
+      } else if (value instanceof Hashtable) {
+          map = (Hashtable) value;
+          enum = map.keys();
+          while (enum.hasMoreElements()) {
+            tmp = (String) enum.nextElement();
+            System.out.print(" " + tmp + ":" + map.get(tmp));
+          }
+          System.out.println("");
+      }
+    }
+
+  }
+
+  /**
+   * initializes this configuration
+   * @param config contains the configuration information
+   */
+  public static void setup(Hashtable config){
+    configuration = config;
+  }
+
+}
diff --git a/src/org/apache/fop/configuration/ConfigurationParser.java b/src/org/apache/fop/configuration/ConfigurationParser.java
new file mode 100644 (file)
index 0000000..e99a6cd
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.configuration;
+
+import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import org.apache.fop.messaging.MessageHandler;
+
+/**
+ * SAX2 Handler which parses the events and stores them in a Configuration.
+ * Normally this class must not accessed directly.
+ */
+
+public class ConfigurationParser extends DefaultHandler {
+    private final int OUT = 0;
+    private final int IN_ENTRY = 1;
+    private final int IN_KEY = 2;
+    private final int IN_VALUE = 4;
+    private final int IN_LIST = 8;
+    private final int IN_SUBENTRY = 16;
+    private final int IN_SUBKEY = 32;
+
+    private final int STRING = 0;
+    private final int LIST = 1;
+    private final int MAP = 2;
+
+    //state of parser
+    private int status = OUT;
+    private int datatype = -1;
+
+    //stores the result configuration
+    private static Hashtable configuration = new Hashtable(20);
+
+    //stores key for new config entry
+    private String key = "";
+
+    //stores string value
+    private String value = "";
+
+    //stores key for new config entry
+    private String subkey = "";
+
+    //stores list value
+    private Vector list = new Vector (15);
+
+    //stores hashtable value
+    private Hashtable map = new Hashtable(15);
+
+    /** locator for line number information */
+    private Locator locator;
+
+
+    /** get locator for position information */
+    public void setDocumentLocator(Locator locator) {
+        this.locator = locator;
+    }
+
+    /**
+      * extracts the element and attribute name and sets the fitting status and datatype values
+      * */
+    public void startElement(String uri, String localName,
+                             String qName, Attributes attributes) {
+        if (localName.equals("key")) {
+            status += IN_KEY;
+        } else if (localName.equals("value")) {
+            status += IN_VALUE;
+        } else if (localName.equals("list")) {
+            status += IN_LIST;
+        } else if (localName.equals("subentry")) {
+            status += IN_SUBENTRY;
+        } else if (localName.equals("configuration") ||
+                localName.equals("entry") || localName.equals("datatype")) {
+        } else {
+            //to make sure that user knows about false tag
+            MessageHandler.errorln(
+              "Unknown tag in configuration file: " + localName);
+        }
+    } //end startElement
+
+    /**
+     * stores subentries or entries into their hashes (map for subentries, configuration for entry)
+     */
+    public void endElement(String uri, String localName, String qName) {
+        if (localName.equals("entry")) {
+            int tek = 0;
+            switch (datatype) {
+                case STRING:
+                    configuration.put(key, value);
+                    break;
+                case LIST:
+                    configuration.put(key, list);
+                    break;
+                case MAP:
+                    configuration.put(key, map);
+            }
+            status = OUT;
+        } else if (localName.equals("subentry")) {
+            map.put(subkey, value);
+            status -= IN_SUBENTRY;
+        } else if (localName.equals("key")) {
+            status -= IN_KEY;
+        } else if (localName.equals("list")) {
+            status -= IN_LIST;
+        } else if (localName.equals("value")) {
+            status -= IN_VALUE;
+        }
+
+    }
+
+    /**
+      * extracts characters from text nodes and puts them into their respective
+      * variables
+      */
+    public void characters(char[] ch, int start, int length) {
+        char characters [] = new char [length];
+        System.arraycopy(ch, start, characters, 0, length);
+        String text = new String(characters);
+        switch (status) {
+            case IN_KEY:
+                key = text;
+                break;
+            case IN_LIST + IN_SUBENTRY + IN_KEY:
+                subkey = text;
+                break;
+            case IN_VALUE:
+                value = text;
+                datatype = STRING;
+                break;
+            case IN_LIST + IN_VALUE:
+                list.add(text);
+                datatype = LIST;
+                break;
+            case IN_LIST + IN_SUBENTRY + IN_VALUE:
+                value = text;
+                datatype = MAP;
+                break;
+        }
+
+    } //end characters
+
+    /**
+     * returns the parsed configuration information
+     * @return Hashtable containing the configuration information as key/value pairs
+     */
+    public Hashtable getConfiguration() {
+        return configuration;
+    }
+
+}
diff --git a/src/org/apache/fop/configuration/ConfigurationReader.java b/src/org/apache/fop/configuration/ConfigurationReader.java
new file mode 100644 (file)
index 0000000..798a356
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.configuration;
+
+//sax
+import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.XMLReader;
+import org.xml.sax.SAXException;
+import java.io.IOException;
+import org.xml.sax.InputSource;
+
+//fop
+import org.apache.fop.messaging.MessageHandler;
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.configuration.AWTConfiguration;
+import org.apache.fop.configuration.PDFConfiguration;
+import org.apache.fop.configuration.StandardConfiguration;
+
+/**
+ *  entry class for reading configuration from file and creating a configuration
+ *  class. typical use looks like that: <br>
+ *
+ *  <code>ConfigurationReader reader = new ConfigurationReader ("config.xml","standard");
+ *     try {
+ *       reader.start();
+ *     } catch (org.apache.fop.apps.FOPException error) {
+ *       reader.dumpError(error);
+ *     }
+ *  </code>
+ *  Once the configuration has been setup, the information can be accessed with
+ *  the methods of StandardConfiguration.
+ */
+
+public class ConfigurationReader {
+    /** show a full dump on error */
+    private static boolean errorDump = false;
+
+    /** inputsource for configuration file  */
+    private InputSource filename;
+
+    private String role ;
+
+    /**
+     * creates a configuration reader
+     * @param filename the file which contains the configuration information
+     * @param role three values are recognized: awt, pdf, standard
+     */
+    public ConfigurationReader (InputSource filename, String role) {
+        this.filename = filename;
+        this.role = role;
+    }
+
+
+    /**
+      * intantiates parser and starts parsing of config file
+      */
+    public void start () throws FOPException {
+        XMLReader parser = createParser();
+
+        if (parser == null) {
+            MessageHandler.errorln("ERROR: Unable to create SAX parser");
+            System.exit(1);
+        }
+
+        // setting the parser features
+        try {
+            parser.setFeature("http://xml.org/sax/features/namespace-prefixes",
+                              false);
+        } catch (SAXException e) {
+            MessageHandler.errorln("You need a parser which supports SAX version 2");
+            if (errorDump) {
+                e.printStackTrace();
+            }
+            System.exit(1);
+        }
+        ConfigurationParser configurationParser = new ConfigurationParser();
+        parser.setContentHandler(configurationParser);
+
+        try {
+            parser.parse(filename);
+            if (role.equalsIgnoreCase("standard")) {
+                StandardConfiguration.setup(
+                  configurationParser.getConfiguration());
+            } else if (role.equalsIgnoreCase("pdf")) {
+                PDFConfiguration.setup(
+                  configurationParser.getConfiguration());
+            } else if (role.equalsIgnoreCase("awt")) {
+                AWTConfiguration.setup(
+                  configurationParser.getConfiguration());
+            }
+        } catch (SAXException e) {
+            if (e.getException() instanceof FOPException) {
+                dumpError(e.getException());
+                throw (FOPException) e.getException();
+            } else {
+                dumpError(e);
+                throw new FOPException(e.getMessage());
+            }
+        }
+        catch (IOException e) {
+            dumpError(e);
+            throw new FOPException(e.getMessage());
+        }
+    }
+
+
+    /**
+       * creates a SAX parser, using the value of org.xml.sax.parser
+       * defaulting to org.apache.xerces.parsers.SAXParser
+       *
+       * @return the created SAX parser
+       */
+    static XMLReader createParser() {
+        String parserClassName = System.getProperty("org.xml.sax.parser");
+        if (parserClassName == null) {
+            parserClassName = "org.apache.xerces.parsers.SAXParser";
+        }
+        if (errorDump) {
+            MessageHandler.logln( "configuration reader using SAX parser " +
+                                  parserClassName);
+        }
+
+        try {
+            return (XMLReader) Class.forName(
+                     parserClassName).newInstance();
+        } catch (ClassNotFoundException e) {
+            MessageHandler.errorln("Could not find " + parserClassName);
+            if (errorDump) {
+                e.printStackTrace();
+            }
+        }
+        catch (InstantiationException e) {
+            MessageHandler.errorln("Could not instantiate " +
+                                   parserClassName);
+            if (errorDump) {
+                e.printStackTrace();
+            }
+        }
+        catch (IllegalAccessException e) {
+            MessageHandler.errorln("Could not access " + parserClassName);
+            if (errorDump) {
+                e.printStackTrace();
+            }
+        }
+        catch (ClassCastException e) {
+            MessageHandler.errorln(parserClassName + " is not a SAX driver");
+            if (errorDump) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+    /**
+       * Dumps an error
+       */
+    public void dumpError(Exception e) {
+        if (errorDump) {
+            if (e instanceof SAXException) {
+                e.printStackTrace();
+                if (((SAXException) e).getException() != null) {
+                    ((SAXException) e).getException().printStackTrace();
+                }
+            } else {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+      *  long or short error messages
+      *
+      */
+    public void setDumpError(boolean dumpError) {
+        this.errorDump = errorDump;
+    }
+
+}
diff --git a/src/org/apache/fop/configuration/PDFConfiguration.java b/src/org/apache/fop/configuration/PDFConfiguration.java
new file mode 100644 (file)
index 0000000..ae62719
--- /dev/null
@@ -0,0 +1,147 @@
+package org.apache.fop.configuration;
+
+import java.util.Vector;
+import java.util.Hashtable;
+import java.util.Enumeration;
+
+/**
+ *  a configuration class for information related to the pdf renderer. All configuration is stored
+ *  in key / value pairs. The value can be a String, a list of Strings
+ *  or a map, containing a list of key / value pairs.
+ *
+ */
+
+public class PDFConfiguration {
+
+  /** stores the configuration information */
+  private static Hashtable configuration;
+
+  /**
+   * general access method
+   *
+   * @param key a string containing the key value for the configuration value
+   * @return Object containing the value; normally you would use one of the
+   *                convenience methods, which return the correct form.
+   *         null   if the key is not defined.
+   */
+  public static Object getValue (String key){
+    return configuration.get(key);
+  };
+
+  /**
+   *  convenience methods to access strings values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return String a string containing the value
+   *          null   if the key is not defined.
+   */
+  public static String getStringValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof String) {
+      return (String) obj;
+    } else {
+      return null;
+    }
+  };
+
+  /**
+   *  convenience methods to access int values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return int a int containing the value
+   *          -1   if the key is not defined.
+   */
+  public static int getIntValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof String) {
+      return Integer.parseInt((String) obj);
+    } else {
+      return -1;
+    }
+  };
+
+  /**
+   *  convenience methods to access list values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return Vector a Vector containing the values
+   *          null   if the key is not defined.
+   */
+  public static Vector getListValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof Vector) {
+      return (Vector) obj;
+    } else {
+      return null;
+    }
+  };
+
+  /**
+   *  convenience methods to access map/hashtable values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return Hashtable a Hashtable containing the values
+   *          null   if the key is not defined.
+   */
+  public static Hashtable getHashtableValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof Hashtable) {
+      return (Hashtable) obj;
+    } else {
+      return null;
+    }
+  };
+
+  /**
+   *  adds information to the configuration map/hashtable in key,value form
+   *  @param key a string containing the key value for the configuration value
+   *  @param value an Object containing the value; can be a String, a Vector or a Hashtable
+   */
+  public static void put(String key,Object value){
+    configuration.put(key,value);
+  };
+
+  /**
+   *  debug methods, which writes out all information in this configuration
+   */
+  public static void dumpConfiguration() {
+    String key;
+    Object value;
+    Vector list;
+    Hashtable map;
+    Enumeration enum;
+    String tmp;
+    System.out.println("Dumping standard configuration: ");
+    Enumeration enumeration = configuration.keys();
+    while (enumeration.hasMoreElements()) {
+      key = (String) enumeration.nextElement();
+      System.out.print("  key: " + key);
+      value = configuration.get(key);
+      if (value instanceof String) {
+        System.out.println(" value: " + value);
+      } else if (value instanceof Vector) {
+        list = (Vector) value;
+        enum = list.elements();
+        System.out.print(" value: ");
+        while (enum.hasMoreElements()) {
+          System.out.print( enum.nextElement() + " - ");
+        }
+        System.out.println("");
+      } else if (value instanceof Hashtable) {
+          map = (Hashtable) value;
+          enum = map.keys();
+          while (enum.hasMoreElements()) {
+            tmp = (String) enum.nextElement();
+            System.out.print(" " + tmp + ":" + map.get(tmp));
+          }
+          System.out.println("");
+      }
+    }
+
+  }
+
+  /**
+   * initializes this configuration
+   * @param config contains the configuration information
+   */
+  public static void setup(Hashtable config){
+    configuration = config;
+  }
+
+}
diff --git a/src/org/apache/fop/configuration/StandardConfiguration.java b/src/org/apache/fop/configuration/StandardConfiguration.java
new file mode 100644 (file)
index 0000000..98a0cf8
--- /dev/null
@@ -0,0 +1,171 @@
+
+package org.apache.fop.configuration;
+
+import java.util.Vector;
+import java.util.Hashtable;
+import java.util.Enumeration;
+
+/**
+ *  a configuration class for all general configuration aspects except those
+ *  related to specific renderers. All configuration is stored
+ *  in key / value pairs. The value can be a String, a list of Strings
+ *  or a map, containing a list of key / value pairs.
+ *
+ */
+public class StandardConfiguration  {
+
+  /** stores the configuration information */
+  private static Hashtable configuration;
+
+  /**
+   * general access method
+   *
+   * @param key a string containing the key value for the configuration value
+   * @return Object containing the value; normally you would use one of the
+   *                convenience methods, which return the correct form.
+   *         null   if the key is not defined.
+   */
+  public static Object getValue (String key){
+    return configuration.get(key);
+  };
+
+  /**
+   *  convenience methods to access strings values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return String a string containing the value
+   *          null   if the key is not defined.
+   */
+  public static String getStringValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof String) {
+      return (String) obj;
+    } else {
+      return null;
+    }
+  };
+
+  /**
+   *  convenience methods to access int values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return int a int containing the value
+   *          -1   if the key is not defined.
+   */
+  public static int getIntValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof String) {
+      return Integer.parseInt((String) obj);
+    } else {
+      return -1;
+    }
+  };
+
+  /**
+   *  convenience methods to access boolean values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return boolean true or false as value
+   *          -1   if the key is not defined.
+   */
+  public static Boolean getBooleanValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof String) {
+      String value = (String) obj;
+      if (value.equals("true")) {
+        return new Boolean(true);
+      } else if (value.equals("false")) {
+        return new Boolean(false);
+      } else {
+        return null;
+      }
+    } else {
+        return null;
+    }
+  };
+
+  /**
+   *  convenience methods to access list values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return Vector a Vector containing the values
+   *          null   if the key is not defined.
+   */
+  public static Vector getListValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof Vector) {
+      return (Vector) obj;
+    } else {
+      return null;
+    }
+  };
+
+  /**
+   *  convenience methods to access map/hashtable values in the configuration
+   *  @param key a string containing the key value for the configuration value
+   *  @return Hashtable a Hashtable containing the values
+   *          null   if the key is not defined.
+   */
+  public static Hashtable getHashtableValue(String key){
+    Object obj = configuration.get(key);
+    if (obj instanceof Hashtable) {
+      return (Hashtable) obj;
+    } else {
+      return null;
+    }
+  };
+
+  /**
+   *  adds information to the configuration map/hashtable in key,value form
+   *  @param key a string containing the key value for the configuration value
+   *  @param value an Object containing the value; can be a String, a Vector or a Hashtable
+   */
+  public static void put(String key,Object value){
+    configuration.put(key,value);
+  };
+
+  /**
+   *  debug methods, which writes out all information in this configuration
+   */
+  public static void dumpConfiguration() {
+    String key;
+    Object value;
+    Vector list;
+    Hashtable map;
+    Enumeration enum;
+    String tmp;
+    System.out.println("Dumping standard configuration: ");
+    Enumeration enumeration = configuration.keys();
+    while (enumeration.hasMoreElements()) {
+      key = (String) enumeration.nextElement();
+      System.out.print("  key: " + key);
+      value = configuration.get(key);
+      if (value instanceof String) {
+        System.out.println(" value: " + value);
+      } else if (value instanceof Vector) {
+        list = (Vector) value;
+        enum = list.elements();
+        System.out.print(" value: ");
+        while (enum.hasMoreElements()) {
+          System.out.print( enum.nextElement() + " - ");
+        }
+        System.out.println("");
+      } else if (value instanceof Hashtable) {
+          map = (Hashtable) value;
+          enum = map.keys();
+          while (enum.hasMoreElements()) {
+            tmp = (String) enum.nextElement();
+            System.out.print(" " + tmp + ":" + map.get(tmp));
+          }
+          System.out.println("");
+      }
+    }
+
+  }
+
+  /**
+   * initializes this configuration
+   * @param config contains the configuration information
+   */
+  public static void setup(Hashtable config){
+    configuration = config;
+  }
+
+}
+
index 552bff53e208a7f23d2c4ac691852092733947c1..90394a9d5b9cb2671a7be297671eff3338023a23 100644 (file)
@@ -343,6 +343,7 @@ public class Property {
   public LengthRange getLengthRange() { return null; }
   public Space getSpace() { return null; }
   public int getEnum() { return 0; }
+  public char getCharacter() { return 0;}
 
   public Number getNumber() { return null; }
 
index 55348eb603551f944626cbd7cedefd02d573971e..c2a4fe6fcbb4813bec2595b0bbc8f1c11e469ebc 100644 (file)
@@ -107,6 +107,13 @@ public class Block extends FObjMixed {
     int borderRightWidth;
     int borderRightStyle;
 
+    int hyphenate;
+    char hyphenationChar;
+    int hyphenationPushCharacterCount;
+    int hyphenationRemainCharacterCount;
+    String language;
+    String country;
+
     BlockArea blockArea;
 
     // this may be helpful on other FOs too
@@ -223,6 +230,18 @@ public class Block extends FObjMixed {
             this.blockOrphans =
               this.properties.get("orphans").getNumber().intValue();
 
+            this.hyphenate = this.properties.get("hyphenate").getEnum();
+            this.hyphenationChar = this.properties.get("hyphenation-character").getCharacter();
+            this.hyphenationPushCharacterCount = this.properties.get(
+                                                   "hyphenation-push-character-count").getNumber().
+                                                 intValue();
+            this.hyphenationRemainCharacterCount = this.properties.get(
+                                                     "hyphenation-remain-character-count").getNumber().
+                                                   intValue();
+            this.language = this.properties.get("language").getString();
+            this.country = this.properties.get("country").getString();
+
+
             this.id = this.properties.get("id").getString();
 
             if (area instanceof BlockArea) {
@@ -306,6 +325,9 @@ public class Block extends FObjMixed {
                                  borderBottomWidth, borderRightWidth);
         blockArea.setBorderColor(borderTopColor, borderLeftColor,
                                  borderBottomColor, borderRightColor);
+        blockArea.setHyphenation(language, country, hyphenate,
+                                 hyphenationChar, hyphenationPushCharacterCount,
+                                 hyphenationRemainCharacterCount);
         blockArea.start();
 
         blockArea.setAbsoluteHeight(area.getAbsoluteHeight());
index 214d95c20840899cbc163cee9e9da17483ace9f8..3a7eb48c012813c6e89e5f6f4c196de2edae27d0 100644 (file)
@@ -84,6 +84,14 @@ public class BlockArea extends Area {
     /* have any line areas been used? */
     protected boolean hasLines = false;
 
+    /*hyphenation*/
+    protected int hyphenate;
+    protected char hyphenationChar;
+    protected int hyphenationPushCharacterCount;
+    protected int hyphenationRemainCharacterCount;
+    protected String language;
+    protected String country;
+
     public BlockArea(FontState fontState, int allocationWidth,
                      int maxHeight, int startIndent, int endIndent,
                      int textIndent, int align, int alignLastLine, int lineHeight) {
@@ -124,6 +132,10 @@ public class BlockArea extends Area {
         this.currentLineArea.changeColor(red, green, blue);
         this.currentLineArea.changeWrapOption(wrapOption);
         this.currentLineArea.changeWhiteSpaceCollapse(whiteSpaceCollapse);
+        this.currentLineArea.changeHyphenation(language, country, hyphenate,
+                                 hyphenationChar, hyphenationPushCharacterCount,
+                                 hyphenationRemainCharacterCount);
+
 
         if (ls != null) {
             this.currentLinkSet = ls;
@@ -156,7 +168,9 @@ public class BlockArea extends Area {
         this.currentLineArea.changeColor(red, green, blue);
         this.currentLineArea.changeWrapOption(wrapOption);
         this.currentLineArea.changeWhiteSpaceCollapse(whiteSpaceCollapse);
-
+        this.currentLineArea.changeHyphenation(language, country, hyphenate,
+                                 hyphenationChar, hyphenationPushCharacterCount,
+                                 hyphenationRemainCharacterCount);
         if (ls != null) {
             this.currentLinkSet = ls;
             ls.setYOffset(currentHeight);
@@ -182,6 +196,9 @@ public class BlockArea extends Area {
             this.currentLineArea.changeWrapOption(wrapOption);
             this.currentLineArea.changeWhiteSpaceCollapse(
               whiteSpaceCollapse);
+            this.currentLineArea.changeHyphenation(language, country, hyphenate,
+                                     hyphenationChar, hyphenationPushCharacterCount,
+                                     hyphenationRemainCharacterCount);
             if (ls != null) {
                 ls.setYOffset(currentHeight);
             }
@@ -299,4 +316,15 @@ public class BlockArea extends Area {
         return halfLeading;
     }
 
+    public void setHyphenation(String language, String country, int hyphenate, char hyphenationChar,
+                                 int hyphenationPushCharacterCount,
+                                 int hyphenationRemainCharacterCount) {
+      this.language = language;
+      this.country = country;
+      this.hyphenate =  hyphenate;
+      this.hyphenationChar = hyphenationChar;
+      this.hyphenationPushCharacterCount = hyphenationPushCharacterCount;
+      this.hyphenationRemainCharacterCount = hyphenationRemainCharacterCount;
+    }
+
 }
index c445cd0e7cd6f7b00d30403adb5908c535e409ac..41b3f3a02b303a41074419463ded05b29287edfe 100644 (file)
@@ -1,36 +1,36 @@
-/*-- $Id$ -- 
+/*-- $Id$ --
 
  ============================================================================
                    The Apache Software License, Version 1.1
  ============================================================================
+
     Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
  Redistribution and use in source and binary forms, with or without modifica-
  tion, are permitted provided that the following conditions are met:
+
  1. Redistributions of  source code must  retain the above copyright  notice,
     this list of conditions and the following disclaimer.
+
  2. Redistributions in binary form must reproduce the above copyright notice,
     this list of conditions and the following disclaimer in the documentation
     and/or other materials provided with the distribution.
+
  3. The end-user documentation included with the redistribution, if any, must
     include  the following  acknowledgment:  "This product includes  software
     developed  by the  Apache Software Foundation  (http://www.apache.org/)."
     Alternately, this  acknowledgment may  appear in the software itself,  if
     and wherever such third-party acknowledgments normally appear.
+
  4. The names "Fop" and  "Apache Software Foundation"  must not be used to
     endorse  or promote  products derived  from this  software without  prior
     written permission. For written permission, please contact
     apache@apache.org.
+
  5. Products  derived from this software may not  be called "Apache", nor may
     "Apache" appear  in their name,  without prior written permission  of the
     Apache Software Foundation.
+
  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
  This software  consists of voluntary contributions made  by many individuals
  on  behalf of the Apache Software  Foundation and was  originally created by
- James Tauber <jtauber@jtauber.com>. For more  information on the Apache 
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
  Software Foundation, please see <http://www.apache.org/>.
+
  */
 package org.apache.fop.layout;
 
@@ -55,7 +55,7 @@ import org.apache.fop.render.Renderer;
 public class InlineArea extends Area {
 
     private String text;
-    protected String pageNumberId=null;
+    protected String pageNumberId = null;
     private float red, green, blue;
 
     // Textdecoration
@@ -64,33 +64,34 @@ public class InlineArea extends Area {
     protected boolean lineThrough = false;
 
 
-    public InlineArea(FontState fontState, float red, float green, float blue, String text, int width) {
-       super(fontState);
-       this.red = red;
-       this.green = green;
-       this.blue = blue;
-       this.text = text;
-       this.contentRectangleWidth = width;
+    public InlineArea(FontState fontState, float red, float green,
+                      float blue, String text, int width) {
+        super(fontState);
+        this.red = red;
+        this.green = green;
+        this.blue = blue;
+        this.text = text;
+        this.contentRectangleWidth = width;
     }
 
     public void render(Renderer renderer) {
-       renderer.renderInlineArea(this);
+        renderer.renderInlineArea(this);
     }
 
     public float getBlue() {
-       return this.blue;
+        return this.blue;
     }
 
     public float getGreen() {
-       return this.green;
+        return this.green;
     }
 
     public float getRed() {
-       return this.red;
+        return this.red;
     }
 
     public String getText() {
-       return this.text;
+        return this.text;
     }
 
     public String getPageNumberID() {
@@ -98,11 +99,11 @@ public class InlineArea extends Area {
     }
 
     public void setUnderlined(boolean ul) {
-           this.underlined = ul;
+        this.underlined = ul;
     }
 
     public boolean getUnderlined() {
-           return this.underlined;
+        return this.underlined;
     }
 
 }
index a35a2b4bd9efd8e25b214784bd7d63b6c23ce82b..63d2ef0d3310b25678dd02d55c640bebf5900a23 100644 (file)
 
 package org.apache.fop.layout;
 
+//fop
 import org.apache.fop.render.Renderer;
 import org.apache.fop.messaging.MessageHandler;
 import org.apache.fop.layout.LeaderArea;
+import org.apache.fop.datatypes.IDNode;
+import org.apache.fop.fo.properties.WrapOption;
+import org.apache.fop.fo.properties.WhiteSpaceCollapse;
+import org.apache.fop.fo.properties.TextAlign;
+import org.apache.fop.fo.properties.TextAlignLast;
+import org.apache.fop.fo.properties.LeaderPattern;
+import org.apache.fop.fo.properties.Hyphenate;
+import org.apache.fop.fo.properties.CountryMaker;
+import org.apache.fop.fo.properties.LanguageMaker;
+import org.apache.fop.fo.properties.LeaderAlignment;
+import org.apache.fop.layout.hyphenation.Hyphenation;
+import org.apache.fop.layout.hyphenation.Hyphenator;
 
+//java
 import java.util.Vector;
 import java.util.Enumeration;
 import java.awt.Rectangle;
 
-import org.apache.fop.fo.properties.WrapOption; // for enumerated
-// values
-import org.apache.fop.fo.properties.WhiteSpaceCollapse; // for
-// enumerated values
-import org.apache.fop.fo.properties.TextAlign; // for enumerated
-// values
-import org.apache.fop.fo.properties.TextAlignLast; // for enumerated
-// values
-import org.apache.fop.fo.properties.LeaderPattern;
-import org.apache.fop.fo.properties.LeaderAlignment;
-
-import org.apache.fop.datatypes.IDNode;
 
 public class LineArea extends Area {
 
@@ -91,6 +93,14 @@ public class LineArea extends Area {
     private int wrapOption;
     private int whiteSpaceCollapse;
 
+    /*hyphenation*/
+    protected int hyphenate;
+    protected char hyphenationChar;
+    protected int hyphenationPushCharacterCount;
+    protected int hyphenationRemainCharacterCount;
+    protected String language;
+    protected String country;
+
     /* the width of text that has definitely made it into the line
        area */
     protected int finalWidth = 0;
@@ -183,10 +193,10 @@ public class LineArea extends Area {
 
 
     /**
-      * adds text to line area
-      *
-      * @return int character position
-      */
+       * adds text to line area
+       *
+       * @return int character position
+       */
     public int addText(char odata[], int start, int end, LinkSet ls,
                        boolean ul) {
         boolean overrun = false;
@@ -199,12 +209,6 @@ public class LineArea extends Area {
             data[count] = odata[count];
         }
 
-                       // added by hani 9/13/2000 to maintain  my sanity
-                       // and to prevent array index out of bounds.
-               if( start == -1 )
-                       return -1;
-       
-
         /* iterate over each character */
         for (int i = start; i < end; i++) {
             int charWidth;
@@ -389,7 +393,11 @@ public class LineArea extends Area {
                             return wordStart;
                         }
                     } else if (this.wrapOption == WrapOption.WRAP) {
+                      if (this.hyphenate == Hyphenate.TRUE) {
+                        return this.doHyphenation(data,i,wordStart,this.getContentWidth()-finalWidth-pendingWidth-spaceWidth);
+                      } else {
                         return wordStart;
+                      }
                     }
                 }
 
@@ -423,18 +431,19 @@ public class LineArea extends Area {
     }
 
     /**
-      * adds a Leader; actually the method receives the leader properties
-      * and creates a leader area or an inline area which is appended to
-      * the children of the containing line area. <br>
-      * leader pattern use-content is not implemented.
-      */
+       * adds a Leader; actually the method receives the leader properties
+       * and creates a leader area or an inline area which is appended to
+       * the children of the containing line area. <br>
+       * leader pattern use-content is not implemented.
+       */
     public void addLeader(int leaderPattern, int leaderLengthMinimum,
                           int leaderLengthOptimum, int leaderLengthMaximum,
                           int ruleStyle, int ruleThickness, int leaderPatternWidth,
                           int leaderAlignment) {
         InlineArea leaderPatternArea;
         int leaderLength;
-        int remainingWidth = this.getContentWidth() - this.getCurrentXPosition();
+        int remainingWidth =
+          this.getContentWidth() - this.getCurrentXPosition();
 
         //here is the point to decide which leader-length is to be used, either
         //optimum or maximum. At the moment maximum is used if the remaining
@@ -450,7 +459,8 @@ public class LineArea extends Area {
                 //whitespace setting must be false for this
                 int whiteSpaceSetting = this.whiteSpaceCollapse;
                 this.changeWhiteSpaceCollapse(WhiteSpaceCollapse.FALSE);
-                pendingAreas.addElement(this.buildSimpleLeader(32,leaderLength));
+                pendingAreas.addElement(
+                  this.buildSimpleLeader(32, leaderLength));
                 this.changeWhiteSpaceCollapse(whiteSpaceSetting);
                 break;
             case LeaderPattern.RULE:
@@ -468,19 +478,20 @@ public class LineArea extends Area {
                 }
                 //if value of leader-pattern-width is 'use-font-metrics' (0)
                 if (leaderPatternWidth == 0) {
-                    pendingAreas.addElement(this.buildSimpleLeader(46,leaderLength));
+                    pendingAreas.addElement(
+                      this.buildSimpleLeader(46, leaderLength));
                 } else {
                     //if leader-alignment is used, calculate space to insert before leader
                     //so that all dots will be parallel.
                     if (leaderAlignment == LeaderAlignment.REFERENCE_AREA) {
-                        int spaceBeforeLeader =
-                          this.getLeaderAlignIndent(leaderLength,
-                                                          leaderPatternWidth);
+                        int spaceBeforeLeader = this.getLeaderAlignIndent(
+                                                  leaderLength, leaderPatternWidth);
                         //appending indent space leader-alignment
                         //setting InlineSpace to false, so it is not used in line justification
                         if (spaceBeforeLeader != 0) {
                             pendingAreas.addElement(
-                              new InlineSpace(spaceBeforeLeader,false));
+                              new InlineSpace(spaceBeforeLeader,
+                                              false));
                             pendingWidth += spaceBeforeLeader;
                             //shorten leaderLength, otherwise - in case of
                             //leaderLength=remaining length - it will cut off the end of
@@ -493,12 +504,14 @@ public class LineArea extends Area {
                     //inline area with this width
                     InlineSpace spaceBetweenDots =
                       new InlineSpace(leaderPatternWidth -
-                                      this.currentFontState.width(46),false);
-                    leaderPatternArea = new InlineArea(currentFontState, this.red,
-                                                this.green, this.blue, new String ("."),
-                                                this.currentFontState.width(46));
-                    int dotsFactor = (int) Math.floor (((double) leaderLength )/
-                                                 ((double)leaderPatternWidth));
+                                      this.currentFontState.width(46), false);
+                    leaderPatternArea =
+                      new InlineArea(currentFontState, this.red,
+                                     this.green, this.blue, new String ("."),
+                                     this.currentFontState.width(46));
+                    int dotsFactor = (int) Math.floor (
+                                       ((double) leaderLength) /
+                                       ((double) leaderPatternWidth));
 
                     //add combination of dot + space to fill leader
                     //is there a way to do this in a more effective way?
@@ -513,8 +526,8 @@ public class LineArea extends Area {
                 break;
                 //leader pattern use-content not implemented.
             case LeaderPattern.USECONTENT:
-                MessageHandler.errorln("leader-pattern=\"use-content\" not "
-                + "supported by this version of Fop");
+                MessageHandler.errorln(
+                  "leader-pattern=\"use-content\" not " + "supported by this version of Fop");
                 return;
         }
         //adds leader length to length of pending inline areas
@@ -525,20 +538,15 @@ public class LineArea extends Area {
     }
 
     /**
-      * adds pending inline areas to the line area
-      * normally done,if the line area is filled and
-      * added as child to the parent block area
-      */
+       * adds pending inline areas to the line area
+       * normally done,if the line area is filled and
+       * added as child to the parent block area
+       */
     public void addPending() {
         if (spaceWidth > 0) {
-                       // by Dresdner Bank, Germany        
-            // this should handle the correct amount of space after
-            // the text if there is no more text, important for right alignment
-            if(this.whiteSpaceCollapse == WhiteSpaceCollapse.FALSE || pendingAreas.size() > 0) {
-                addChild(new InlineSpace(spaceWidth));
-                finalWidth += spaceWidth;
-                spaceWidth = 0;
-            }
+            addChild(new InlineSpace(spaceWidth));
+            finalWidth += spaceWidth;
+            spaceWidth = 0;
         }
 
         Enumeration e = pendingAreas.elements();
@@ -555,9 +563,9 @@ public class LineArea extends Area {
     }
 
     /**
-      * aligns line area
-      *
-      */
+       * aligns line area
+       *
+       */
     public void align(int type) {
         int padding = 0;
 
@@ -585,8 +593,8 @@ public class LineArea extends Area {
                     if (b instanceof InlineSpace) {
                         InlineSpace space = (InlineSpace) b;
                         if (space.getResizeable()) {
-                          spaceList.addElement(space);
-                          spaceCount++;
+                            spaceList.addElement(space);
+                            spaceCount++;
                         }
                     }
                 }
@@ -660,32 +668,52 @@ public class LineArea extends Area {
     }
 
     /**
-      * creates a leader as String out of the given char and the leader length
-      * and wraps it in an InlineArea which is returned
+      * sets hyphenation related traits: language, country, hyphenate, hyphenation-character
+      * and minimum number of character to remain one the previous line and to be on the
+      * next line.
       */
-    private InlineArea buildSimpleLeader(int charNumber,int leaderLength) {
-      int factor = (int) Math.floor (leaderLength /
-                                    this.currentFontState.width(charNumber));
-      char [] leaderChars = new char [factor];
-      char fillChar = (char) charNumber;
-      for (int i = 0; i < factor; i ++) {
-          leaderChars[i] = fillChar;
-      }
-      InlineArea leaderPatternArea = new InlineArea(currentFontState, this.red,
-                                  this.green, this.blue, new String (leaderChars),
-                                  leaderLength);
-      return leaderPatternArea;
+    public void changeHyphenation(String language, String country,
+                                  int hyphenate, char hyphenationChar,
+                                  int hyphenationPushCharacterCount,
+                                  int hyphenationRemainCharacterCount) {
+        this.language = language;
+        this.country = country;
+        this.hyphenate = hyphenate;
+        this.hyphenationChar = hyphenationChar;
+        this.hyphenationPushCharacterCount = hyphenationPushCharacterCount;
+        this.hyphenationRemainCharacterCount =
+          hyphenationRemainCharacterCount;
+
     }
 
+
     /**
-      * calculates the width of space which has to be inserted before the
-      * start of the leader, so that all leader characters are aligned.
-      * is used if property leader-align is set. At the moment only the value
-      * for leader-align="reference-area" is supported.
-      *
-      */
+       * creates a leader as String out of the given char and the leader length
+       * and wraps it in an InlineArea which is returned
+       */
+    private InlineArea buildSimpleLeader(int charNumber, int leaderLength) {
+        int factor = (int) Math.floor (leaderLength /
+                                       this.currentFontState.width(charNumber));
+        char [] leaderChars = new char [factor];
+        char fillChar = (char) charNumber;
+        for (int i = 0; i < factor; i ++) {
+            leaderChars[i] = fillChar;
+        }
+        InlineArea leaderPatternArea =
+          new InlineArea(currentFontState, this.red, this.green,
+                         this.blue, new String (leaderChars), leaderLength);
+        return leaderPatternArea;
+    }
+
+    /**
+       * calculates the width of space which has to be inserted before the
+       * start of the leader, so that all leader characters are aligned.
+       * is used if property leader-align is set. At the moment only the value
+       * for leader-align="reference-area" is supported.
+       *
+       */
     private int getLeaderAlignIndent (int leaderLength,
-            int leaderPatternWidth ) {
+                                      int leaderPatternWidth) {
         //calculate position of used space in line area
         double position = getCurrentXPosition();
         //calculate factor of next leader pattern cycle
@@ -699,11 +727,81 @@ public class LineArea extends Area {
     }
 
     /**
-      * calculates the used space in this line area
-      */
+       * calculates the used space in this line area
+       */
     private int getCurrentXPosition() {
-      return finalWidth + spaceWidth + startIndent + pendingWidth;
+        return finalWidth + spaceWidth + startIndent + pendingWidth;
+    }
+
+    /**
+     * extracts a complete word from the character data
+     */
+    private String getHyphenationWord (char [] characters, int wordStart) {
+        boolean wordendFound = false;
+        int counter = 0;
+        char [] newWord = new char [100];  //create a buffer
+        while ((!wordendFound) && ((wordStart + counter) < characters.length)) {
+          char tk = characters[wordStart+counter];
+          if (Character.isLetter(tk)) {
+            newWord[counter] = tk;
+            counter++;
+          } else {
+            wordendFound = true;
+          }
+        }
+        return new String (newWord,0,counter);
     }
 
 
+    private int doHyphenation (char [] characters, int position, int wordStart, int remainingWidth) {
+        int hyphCharWidth = this.currentFontState.width(this.hyphenationChar);
+        remainingWidth -= hyphCharWidth;
+
+        String wordToHyphenate = getHyphenationWord(characters,wordStart);
+        //check whether the language property has been set
+        if (this.language.equalsIgnoreCase("none")) {
+          MessageHandler.errorln("if property 'hyphenate' is used, a language must be specified");
+          return wordStart;
+        }
+        //are there any hyphenation points
+        Hyphenation hyph = Hyphenator.hyphenate(language,country,wordToHyphenate,hyphenationRemainCharacterCount,hyphenationPushCharacterCount);
+        if (hyph != null) {
+            int [] hyphenationPoints = hyph.getHyphenationPoints();
+
+            int index = 0;
+            String wordBegin = "";
+            int wordBeginWidth = 0;
+
+            while (wordBeginWidth < remainingWidth && hyph.length() > index) {
+              wordBegin = hyph.getPreHyphenText(index);
+              wordBeginWidth = getWordWidth(wordBegin);
+              index++;
+            }
+            if (index > 1) {
+              wordBegin = hyph.getPreHyphenText(index-1) + this.hyphenationChar;
+              wordBeginWidth = getWordWidth(wordBegin);
+              InlineArea hia = new InlineArea(currentFontState,
+                                         this.red, this.green, this.blue,
+                                         wordBegin,wordBegin.length());
+              this.addChild(new InlineSpace(currentFontState.width(32)));
+              this.addChild(hia);
+
+              //calculate the space needed
+              finalWidth += wordBeginWidth + currentFontState.width(32);
+              return wordStart + wordBegin.length()-1;
+            }
+        }
+        return wordStart;
+    }
+
+    private int getWordWidth (String word) {
+      int wordLength = word.length();
+      int width = 0;
+      char [] characters = new char [wordLength];
+      word.getChars(0,wordLength,characters,0);
+      for (int i = 0; i < wordLength; i++) {
+        width += this.currentFontState.width(characters[i]);
+      }
+      return width;
+    }
 }
diff --git a/src/org/apache/fop/layout/hyphenation/ByteVector.java b/src/org/apache/fop/layout/hyphenation/ByteVector.java
new file mode 100644 (file)
index 0000000..10b4cf2
--- /dev/null
@@ -0,0 +1,158 @@
+/** -- $Id$ --
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout.hyphenation;
+
+import java.io.Serializable;
+
+/**
+ * This class implements a simple byte vector with access to the
+ * underlying array.
+ *
+ * @author Carlos Villegas <cav@uniscope.co.jp>
+ */
+public class ByteVector implements Serializable
+{
+      /** Capacity increment size */
+      private final static int DEFAULT_BLOCK_SIZE=2048;
+      private int BLOCK_SIZE;
+      
+      /** The encapsulated array */
+      private byte[] array;
+
+      /** Points to next free item */
+      private int n;
+      
+      public ByteVector()
+      {
+         this(DEFAULT_BLOCK_SIZE);
+      }
+
+      public ByteVector(int capacity)
+      {
+         if ( capacity > 0 )
+            BLOCK_SIZE = capacity;
+         else
+            BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
+         array = new byte[BLOCK_SIZE];
+         n = 0;
+      }
+
+      public ByteVector(byte[] a)
+      {
+         BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
+         array = a;
+         n = 0;
+      }
+
+      public ByteVector(byte[] a, int capacity)
+      {
+         if ( capacity > 0 )
+            BLOCK_SIZE = capacity;
+         else
+            BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
+         array = a;
+         n = 0;
+      }         
+      
+      public byte[] getArray()
+      {
+         return array;
+      }
+
+      /** return number of items in array */
+      public int length()
+      {
+         return n;
+      }
+
+      /** returns current capacity of array */
+      public int capacity()
+      {
+         return array.length;
+      }
+
+      public void put(int index, byte val)
+      {
+         array[index] = val;
+      }
+
+      public byte get(int index)
+      {
+         return array[index];
+      }
+
+      /**
+       * This is to implement memory allocation in the array. Like malloc().
+       */
+      public int alloc(int size)
+      {
+         int index = n;
+         int len = array.length;         
+         if ( n+size >= len ) {
+            byte[] aux = new byte[len+BLOCK_SIZE];
+            System.arraycopy(array, 0, aux, 0, len);
+            array = aux;
+         }
+         n += size;
+         return index;
+      }
+
+      public void trimToSize()
+      {
+         if ( n < array.length ) {
+            byte[] aux = new byte[n];
+            System.arraycopy(array, 0, aux, 0, n);
+            array = aux;
+         }
+      }
+      
+}
diff --git a/src/org/apache/fop/layout/hyphenation/CharVector.java b/src/org/apache/fop/layout/hyphenation/CharVector.java
new file mode 100644 (file)
index 0000000..b8660f4
--- /dev/null
@@ -0,0 +1,168 @@
+/** -- $Id$ --
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout.hyphenation;
+
+import java.io.Serializable;
+
+/**
+ * This class implements a simple char vector with access to the
+ * underlying array.
+ *
+ * @author Carlos Villegas <cav@uniscope.co.jp>
+ */
+public class CharVector implements Cloneable, Serializable
+
+{
+      /** Capacity increment size */
+      private final static int DEFAULT_BLOCK_SIZE=2048;
+      private int BLOCK_SIZE;
+
+      /** The encapsulated array */
+      private char[] array;
+
+      /** Points to next free item */
+      private int n;
+      
+      public CharVector()
+      {
+         this(DEFAULT_BLOCK_SIZE);
+      }
+
+      public CharVector(int capacity)
+      {
+         if ( capacity > 0 )
+            BLOCK_SIZE = capacity;
+         else
+            BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
+         array = new char[BLOCK_SIZE];
+         n = 0;
+      }
+
+      public CharVector(char[] a)
+      {
+         BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
+         array = a;
+         n = a.length;
+      }
+
+      public CharVector(char[] a, int capacity)
+      {
+         if ( capacity > 0 )
+            BLOCK_SIZE = capacity;
+         else
+            BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
+         array = a;
+         n = a.length;
+      }         
+
+      /** Reset Vector but don't resize or clear elements */
+      public void clear()
+      {
+         n = 0;
+      }
+      
+      public Object clone()
+      {
+         CharVector cv = new CharVector((char[])array.clone(), BLOCK_SIZE);
+         cv.n = this.n;
+         return cv;
+      }
+      
+      public char[] getArray()
+      {
+         return array;
+      }
+
+      /** return number of items in array */
+      public int length()
+      {
+         return n;
+      }
+
+      /** returns current capacity of array */
+      public int capacity()
+      {
+         return array.length;
+      }
+      
+      public void put(int index, char val)
+      {
+         array[index] = val;
+      }
+
+      public char get(int index)
+      {
+         return array[index];
+      }
+      
+      public int alloc(int size)
+      {
+         int index = n;
+         int len = array.length;         
+         if ( n+size >= len ) {
+            char[] aux = new char[len+BLOCK_SIZE];
+            System.arraycopy(array, 0, aux, 0, len);
+            array = aux;
+         }
+         n += size;
+         return index;
+      }
+
+      public void trimToSize()
+      {
+         if ( n < array.length ) {
+            char[] aux = new char[n];
+            System.arraycopy(array, 0, aux, 0, n);
+            array = aux;
+         }
+      }
+}
diff --git a/src/org/apache/fop/layout/hyphenation/Hyphen.java b/src/org/apache/fop/layout/hyphenation/Hyphen.java
new file mode 100644 (file)
index 0000000..8d19b4e
--- /dev/null
@@ -0,0 +1,101 @@
+/** -- $Id$ --
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout.hyphenation;
+import java.io.Serializable;
+
+/**
+ * This class represents a hyphen. A 'full' hyphen is made of 3 parts:
+ * the pre-break text, post-break text and no-break. If no line-break
+ * is generated at this position, the no-break text is used, otherwise,
+ * pre-break and post-break are used. Typically, pre-break is equal to
+ * the hyphen character and the others are empty. However, this general
+ * scheme allows support for cases in some languages where words change
+ * spelling if they're split across lines, like german's 'backen' which
+ * hyphenates 'bak-ken'. BTW, this comes from TeX.
+ *
+ * @author Carlos Villegas <cav@uniscope.co.jp>
+ */
+
+public class Hyphen implements Serializable
+{
+      public String preBreak;
+      public String noBreak;
+      public String postBreak;
+
+      Hyphen(String pre, String no, String post)
+      {
+         preBreak = pre;
+         noBreak = no;
+         postBreak = post;
+      }
+
+      Hyphen(String pre)
+      {
+         preBreak = pre;
+         noBreak = null;
+         postBreak = null;
+      }
+      
+      public String toString()
+      {
+         if ( noBreak == null && postBreak == null && preBreak != null && preBreak.equals("-") )
+            return "-";
+         StringBuffer res = new StringBuffer("{");
+         res.append(preBreak);
+         res.append("}{");
+         res.append(postBreak);
+         res.append("}{");
+         res.append(noBreak);
+         res.append('}');
+         return res.toString();
+      }
+}
diff --git a/src/org/apache/fop/layout/hyphenation/Hyphenation.java b/src/org/apache/fop/layout/hyphenation/Hyphenation.java
new file mode 100644 (file)
index 0000000..675a7ad
--- /dev/null
@@ -0,0 +1,106 @@
+/** -- $Id$ --
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout.hyphenation;
+
+import java.util.Vector;
+
+/**
+ * This class represents a hyphenated word.
+ *
+ * @author Carlos Villegas <cav@uniscope.co.jp>
+ */
+public class Hyphenation {
+    int[] hyphenPoints;
+    String word;
+
+    /** number of hyphenation points in word */
+    int len;
+
+    /** rawWord as made of alternating strings and {@link Hyphen Hyphen}
+     *  instances */
+    Hyphenation(String word, int[] points) {
+        this.word = word;
+        hyphenPoints = points;
+        len = points.length;
+    }
+
+    /** @return the number of hyphenation points in the word */
+    public int length() {
+        return len;
+    }
+
+    /** @return the pre-break text, not including the hyphen character */
+    public String getPreHyphenText(int index) {
+        return word.substring(0, hyphenPoints[index]);
+    }
+
+    /** @return the post-break text */
+    public String getPostHyphenText(int index) {
+        return word.substring(hyphenPoints[index]);
+    }
+
+    /** @return the hyphenation points */
+    public int [] getHyphenationPoints() {
+        return hyphenPoints;
+    }
+
+    public String toString() {
+        StringBuffer str = new StringBuffer();
+        int start = 0;
+        for (int i = 0; i < len; i++) {
+            str.append(word.substring(start, hyphenPoints[i]) + "-");
+            start = hyphenPoints[i];
+        }
+        str.append(word.substring(start));
+        return str.toString();
+    }
+}
diff --git a/src/org/apache/fop/layout/hyphenation/HyphenationException.java b/src/org/apache/fop/layout/hyphenation/HyphenationException.java
new file mode 100644 (file)
index 0000000..76dfd60
--- /dev/null
@@ -0,0 +1,63 @@
+/** -- $Id$ --
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout.hyphenation;
+
+/**
+ * @author Carlos Villegas <cav@uniscope.co.jp>
+ */
+public class HyphenationException extends Exception {
+
+      public HyphenationException(String msg)
+      {
+         super(msg);
+      }
+}
diff --git a/src/org/apache/fop/layout/hyphenation/HyphenationTree.java b/src/org/apache/fop/layout/hyphenation/HyphenationTree.java
new file mode 100644 (file)
index 0000000..bc0e7e5
--- /dev/null
@@ -0,0 +1,529 @@
+/** -- $Id$ --
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout.hyphenation;
+
+import java.io.*;
+import java.util.Vector;
+import java.util.Hashtable;
+
+/**
+ * This tree structure stores the hyphenation patterns in an efficient
+ * way for fast lookup. It provides the provides the method to
+ * hyphenate a word.
+ *
+ * @author Carlos Villegas <cav@uniscope.co.jp>
+ */
+public class HyphenationTree extends TernaryTree
+   implements PatternConsumer, Serializable
+{
+
+      /** value space: stores the inteletter values */
+      protected ByteVector vspace;
+      /** This map stores hyphenation exceptions */
+      protected Hashtable stoplist;
+      /** This map stores the character classes */
+      protected TernaryTree classmap;
+      /** Temporary map to store interletter values on pattern loading. */
+      private transient TernaryTree ivalues;
+
+      public HyphenationTree()
+      {
+         stoplist = new Hashtable(23); // usually a small table
+         classmap = new TernaryTree();
+         vspace = new ByteVector();
+         vspace.alloc(1); // this reserves index 0, which we don't use
+      }
+      
+      /**
+       * Packs the values by storing them in 4 bits, two values into a byte
+       * Values range is from 0 to 9. We use zero as terminator,
+       * so we'll add 1 to the value.
+       * @param values a string of digits from '0' to '9' representing the
+       *        interletter values.
+       * @return the index into the vspace array where the packed values
+       *        are stored.
+       */
+      protected int packValues(String values)
+      {
+         int i, n = values.length();
+         int m = (n & 1) == 1 ? (n>>1)+2 : (n>>1)+1;
+         int offset = vspace.alloc(m);
+         byte[] va = vspace.getArray();
+         for(i=0; i<n; i++) {
+            int j = i>>1;
+            byte v = (byte)((values.charAt(i) - '0' + 1) & 0x0f);
+            if ( (i&1) == 1 )
+               va[j+offset] = (byte)( va[j+offset] | v );
+            else
+               va[j+offset] = (byte)(v << 4);  // big endian
+         }
+         va[m-1+offset] = 0; // terminator
+         return offset;
+      }
+
+      protected String unpackValues(int k)
+      {
+         StringBuffer buf = new StringBuffer();
+         byte v = vspace.get(k++);
+         while( v != 0 ) {
+            char c = (char)((v >>> 4) -1 + '0');
+            buf.append(c);
+            c = (char)(v & 0x0f);
+            if ( c == 0 ) break;
+            c = (char)(c - 1 + '0');
+            buf.append(c);
+            v = vspace.get(k++);
+         }
+         return buf.toString();
+      }
+
+      /**
+       * Read hyphenation patterns from an XML file.
+       */
+      public void loadPatterns(String filename)
+         throws HyphenationException
+      {
+         PatternParser pp = new PatternParser(this);
+         ivalues = new TernaryTree();
+
+         pp.parse(filename);
+
+         // patterns/values should be now in the tree
+         // let's optimize a bit
+         trimToSize();
+         vspace.trimToSize();
+         classmap.trimToSize();
+         
+         // get rid of the auxiliary map
+         ivalues = null;
+      }
+
+      public String findPattern(String pat)
+      {
+         int k = super.find(pat);
+         if ( k >= 0 )
+            return unpackValues(k);
+         return "";
+      }
+
+      /**
+       * String compare, returns 0 if equal or
+       * t is a substring of s
+       */
+      protected int hstrcmp(char[] s, int si, char[] t, int ti)
+      {
+         for ( ; s[si] == t[ti]; si++, ti++)
+            if (s[si] == 0)
+               return 0;
+         if ( t[ti] == 0 )
+            return 0;
+         return s[si] - t[ti];
+      }
+
+      protected byte[] getValues(int k)
+      {
+         StringBuffer buf = new StringBuffer();
+         byte v = vspace.get(k++);
+         while( v != 0 ) {
+            char c = (char)((v >>> 4) - 1);
+            buf.append(c);
+            c = (char)(v & 0x0f);
+            if ( c == 0 ) break;
+            c = (char)(c - 1);
+            buf.append(c);
+            v = vspace.get(k++);
+         }
+         byte[] res = new byte[buf.length()];
+         for(int i=0;i<res.length;i++)
+            res[i] = (byte)buf.charAt(i);
+         return res;
+      }
+      
+      /**
+       * <p>Search for all possible partial matches of word starting
+       * at index an update interletter values. In other words, it
+       * does something like:</p>
+       * <code>
+       *  for(i=0; i<patterns.length; i++) {
+       *        if ( word.substring(index).startsWidth(patterns[i]) )
+       *          update_interletter_values(patterns[i]);
+       *  }
+       * </code>
+       * <p>But it is done in an efficient way since the patterns are
+       * stored in a ternary tree. In fact, this is the whole purpose
+       * of having the tree: doing this search without having to test
+       * every single pattern. The number of patterns for languages
+       * such as English range from 4000 to 10000. Thus, doing thousands
+       * of string comparisons for each word to hyphenate would be
+       * really slow without the tree. The tradeoff is memory, but
+       * using a ternary tree instead of a trie, almost halves the
+       * the memory used by Lout or TeX. It's also faster than using
+       * a hash table</p>
+       * @param word null terminated word to match
+       * @param index start index from word
+       * @param il interletter values array to update
+       */
+      protected void searchPatterns(char[] word, int index, byte[] il)
+      {
+         byte[] values;
+         int i=index;
+         char p, q;
+         char sp = word[i];
+         p = root;
+
+         while( p != 0 ) {
+            if (sc[p] == 0xFFFF) {
+               if ( hstrcmp(word, i, kv.getArray(), lo[p]) == 0 ) {
+                  values = getValues(eq[p]);  // data pointer is in eq[]
+                  int j=index;
+                  for(int k=0; k<values.length; k++) {
+                     if ( values[k] > il[j] )
+                        il[j] = values[k];
+                     j++;
+                  }
+               }
+               return;
+            }
+            int d = sp - sc[p];
+            if ( d == 0 ) {
+               if ( sp == 0 )
+                  break;
+               sp = word[++i];
+               p = eq[p];
+               q = p;
+
+               // look for a pattern ending at this position by searching for
+               // the null char ( splitchar == 0 )
+               while ( q != 0 ) {
+                  if ( sc[q] == 0xFFFF ) // stop at compressed branch
+                     break;
+                  if ( sc[q] == 0 ) {
+                     values = getValues(eq[q]);
+                     int j=index;
+                     for(int k=0; k<values.length; k++) {
+                        if ( values[k] > il[j] )
+                           il[j] = values[k];
+                        j++;
+                     }
+                     break;
+                  } else {
+                     q = lo[q];
+                     /** actually the code should be:
+                         q = sc[q] < 0 ? hi[q] : lo[q];
+                         but java chars are unsigned
+                     */
+                  }
+               }
+            } else
+               p = d < 0 ? lo[p] : hi[p];
+         }
+      }
+
+      /**
+       * Hyphenate word and return a Hyphenation object.
+       * @param word the word to be hyphenated
+       * @param remainCharCount Minimum number of characters allowed
+       *  before the hyphenation point.
+       * @param pushCharCount Minimum number of characters allowed after
+       *  the hyphenation point.
+       * @return a {@link Hyphenation Hyphenation} object representing
+       * the hyphenated word or null if word is not hyphenated.
+       */
+      public Hyphenation hyphenate(String word, int remainCharCount, int pushCharCount)
+      {
+         char[] w = word.toCharArray();
+         return hyphenate(w, 0, w.length, remainCharCount, pushCharCount);
+      }
+      
+      /**
+       * Hyphenate word and return an array of hyphenation points.
+       * @param w char array that contains the word
+       * @param offset Offset to first character in word
+       * @param len Length of word
+       * @param remainCharCount Minimum number of characters allowed
+       *  before the hyphenation point.
+       * @param pushCharCount Minimum number of characters allowed after
+       *  the hyphenation point.
+       * @return a {@link Hyphenation Hyphenation} object representing
+       * the hyphenated word or null if word is not hyphenated.
+       */
+      public Hyphenation hyphenate(char[] w, int offset, int len,
+                              int remainCharCount, int pushCharCount)
+      {
+         int i;
+         char[] word = new char[len+3];
+
+         // normalize word
+         char[] c = new char[2];
+         for(i=1; i<=len; i++) {
+            c[0] = w[offset+i-1];
+            int nc = classmap.find(c,0);
+            if ( nc < 0 ) { // found a non-letter character, abort
+               return null;
+            }
+            word[i] = (char)nc;
+         }
+         int[] result = new int[len+1];
+         int k=0;
+
+         // check exception list first
+         String sw = new String(word,1,len);
+         if ( stoplist.containsKey(sw) ) {
+            // assume only simple hyphens (Hyphen.pre="-", Hyphen.post = Hyphen.no = null)
+            Vector hw = (Vector)stoplist.get(sw);
+            int j = 0;
+            for(i=0; i<hw.size(); i++) {
+               Object o = hw.elementAt(i);
+               if ( o instanceof String ) {
+                  j += ((String)o).length();
+                  if ( j >= remainCharCount && j < (len - pushCharCount) )
+                     result[k++] = j;
+               }
+            }
+         } else {
+            
+            // use algorithm to get hyphenation points
+            word[0] = '.';  // word start marker            
+            word[len+1] = '.'; // word end marker
+            word[len+2] = 0;  // null terminated
+            byte[] il = new byte[len+3]; // initialized to zero
+            for(i=0; i<len+1; i++)
+               searchPatterns(word, i, il);
+
+            // hyphenation points are located where interletter value is odd
+            for(i=0; i<len; i++) {
+               if ( ((il[i+1] & 1) == 1) && i >= remainCharCount
+                    && i < (len-pushCharCount) ) {
+                  result[k++] = i;
+               }
+            }
+         }
+
+         if ( k > 0 ) {
+            // trim result array
+            int[] res = new int[k];
+            System.arraycopy(result, 0, res, 0, k);
+            return new Hyphenation(new String(w,offset,len), res);
+         } else {
+            return null;
+         }
+      }      
+
+      /**
+       * Add a character class to the tree. It is used by 
+       * {@link PatternParser PatternParser} as callback to
+       * add character classes. Character classes define the
+       * valid word characters for hyphenation. If a word contains
+       * a character not defined in any of the classes, it is not hyphenated.
+       * It also defines a way to normalize the characters in order
+       * to compare them with the stored patterns. Usually pattern
+       * files use only lower case characters, in this case a class
+       * for letter 'a', for example, should be defined as "aA", the first
+       * character being the normalization char.
+       */
+      public void addClass(String chargroup)
+      {
+         if ( chargroup.length() > 0 ) {
+            char equivChar = chargroup.charAt(0);
+            char[] key = new char[2];
+            key[1] = 0;
+            for(int i=0; i<chargroup.length(); i++ ) {
+               key[0] = chargroup.charAt(i);
+               classmap.insert(key, 0, equivChar);
+            }
+         }     
+      }
+
+      /**
+       * Add an exception to the tree. It is used by
+       * {@link PatternParser PatternParser} class as callback to
+       * store the hyphenation exceptions.
+       * @param word normalized word
+       * @param hyphenatedword a vector of alternating strings and
+       * {@link Hyphen hyphen} objects.
+       */
+      public void addException(String word, Vector hyphenatedword)
+      {
+         stoplist.put(word, hyphenatedword);
+      }
+
+      /**
+       * Add a pattern to the tree. Mainly, to be used by
+       * {@link PatternParser PatternParser} class as callback to
+       * add a pattern to the tree.
+       * @param pattern the hyphenation pattern
+       * @param ivalue interletter weight values indicating the
+       * desirability and priority of hyphenating at a given point
+       * within the pattern. It should contain only digit characters.
+       * (i.e. '0' to '9').
+       */
+      public void addPattern(String pattern, String ivalue)
+      {
+         int k = ivalues.find(ivalue);
+         if ( k <= 0 ) {
+            k = packValues(ivalue);
+            ivalues.insert(ivalue, (char)k);
+         }
+         insert(pattern, (char)k);
+      }
+
+      public void printStats()
+      {
+         System.out.println("Value space size = " + Integer.toString(vspace.length()));
+         super.printStats();
+         
+      }
+      
+      public static void main(String[] argv)
+         throws Exception
+      {
+         HyphenationTree ht = null;
+         int minCharCount = 2;
+         BufferedReader in
+            = new BufferedReader(new InputStreamReader(System.in));
+         for(;;) {
+            System.out.print("l:\tload patterns from XML\nL:\tload patterns from serialized object\ns:\tset minimun character count\nw:\twrite hyphenation tree to object file\nh:\thyphenate\nf:\tfind pattern\nb:\tbenchmark\nq:\tquit\n\nCommand:");
+            String token = in.readLine().trim();
+            if ( token.equals("f") ) {
+               System.out.print("Pattern: ");
+               token = in.readLine().trim();
+               System.out.println("Values: " + ht.findPattern(token));
+            } else if ( token.equals("s")) {
+               System.out.print("Minimun value: " );
+               token = in.readLine().trim();
+               minCharCount = Integer.parseInt(token);
+            } else if ( token.equals("l") ) {
+               ht = new HyphenationTree();
+               System.out.print("XML file name: ");
+               token = in.readLine().trim();
+               ht.loadPatterns(token);
+            } else if ( token.equals("L") ) {
+               ObjectInputStream ois = null;
+               System.out.print("Object file name: ");
+               token = in.readLine().trim();
+               try {
+                  ois = new ObjectInputStream(new FileInputStream(token));
+                  ht = (HyphenationTree)ois.readObject();
+               }
+               catch (Exception e) {
+                  e.printStackTrace();
+               }
+               finally {
+                  if ( ois != null ) {
+                     try { ois.close(); }
+                     catch (IOException e) { }
+                  }
+               }
+            } else if ( token.equals("w") ) {
+               System.out.print("Object file name: ");
+               token = in.readLine().trim();
+               ObjectOutputStream oos = null;
+               try {
+                  oos = new ObjectOutputStream(new FileOutputStream(token));
+                  oos.writeObject(ht);
+               }
+               catch (Exception e) {
+                  e.printStackTrace();
+               }
+               finally {
+                  if ( oos != null ) {
+                     try { oos.flush(); }
+                     catch (IOException e) {}
+                     try { oos.close(); }
+                     catch (IOException e) {}
+                  }
+               }
+            } else if ( token.equals("h") ) {
+               System.out.print("Word: ");
+               token = in.readLine().trim();
+               System.out.print("Hyphenation points: ");
+               System.out.println(ht.hyphenate(token,minCharCount,minCharCount));
+            } else if ( token.equals("b") ) {
+               if ( ht == null ) {
+                  System.out.println("No patterns has been loaded.");
+                  break;
+               }
+               System.out.print("Word list filename: ");
+               token = in.readLine().trim();
+               long starttime = 0;
+               int counter = 0;;
+               try {
+                  BufferedReader reader = new BufferedReader ( new FileReader(token));
+                  String line;
+
+                  starttime = System.currentTimeMillis();
+                  while ((line = reader.readLine())!= null) {
+                     //System.out.print("\nline: ");
+                     Hyphenation hyp = ht.hyphenate(line,minCharCount,minCharCount);
+                     if (hyp != null) {
+                        String hword = hyp.toString();
+                        //System.out.println(line);
+                        //System.out.println(hword);
+                     } else {
+                        //System.out.println("No hyphenation");
+                     }
+                     counter++;
+                  }
+               } catch (Exception ioe) {
+                  System.out.println("Exception " + ioe);
+                  ioe.printStackTrace();
+               }
+               long endtime = System.currentTimeMillis();
+               long result = endtime - starttime;
+               System.out.println(counter+ " words in " + result + " Millisekunden hyphenated");
+               
+            } else if ( token.equals("q") )
+               break;
+         }
+
+      }
+}
diff --git a/src/org/apache/fop/layout/hyphenation/Hyphenator.java b/src/org/apache/fop/layout/hyphenation/Hyphenator.java
new file mode 100644 (file)
index 0000000..7323172
--- /dev/null
@@ -0,0 +1,266 @@
+/** -- $Id$ --
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout.hyphenation;
+
+import java.io.*;
+import java.util.Hashtable;
+import org.apache.fop.configuration.*;
+import org.apache.fop.messaging.MessageHandler;
+
+/**
+ * This class is the main entry point to the hyphenation package.
+ * You can use only the static methods or create an instance.
+ *
+ * @author Carlos Villegas <cav@uniscope.co.jp>
+ */
+public class Hyphenator {
+    static Hashtable hyphenTrees = new Hashtable();
+
+    private HyphenationTree hyphenTree = null;
+    private int remainCharCount = 2;
+    private int pushCharCount = 2;
+    private static boolean errorDump = false;
+
+    public Hyphenator(String lang, String country, int leftMin,
+                      int rightMin) {
+        hyphenTree = getHyphenationTree(lang, country);
+        remainCharCount = leftMin;
+        pushCharCount = rightMin;
+    }
+
+    public static HyphenationTree getHyphenationTree(String lang,
+            String country) {
+        String key = lang;
+        //check whether the country code has been used
+        if (country != null && !country.equals("none"))
+            key += "_" + country;
+        // first try to find it in the cache
+        if (hyphenTrees.containsKey(key))
+            return (HyphenationTree) hyphenTrees.get(key);
+        if (hyphenTrees.containsKey(lang))
+            return (HyphenationTree) hyphenTrees.get(lang);
+
+        HyphenationTree hTree = getFopHyphenationTree(key);
+        if (hTree == null) {
+            String hyphenDir = StandardConfiguration.getStringValue("hyphenation-dir");
+            if (hyphenDir != null){
+                hTree = getUserHyphenationTree(key,hyphenDir);
+            }
+        }
+        //put it into the pattern cache 
+        if (hTree != null) {
+            hyphenTrees.put(key, hTree);
+        } else {
+            MessageHandler.errorln("Couldn't find hyphenation pattern " + key);
+        }
+        return hTree;
+    }
+
+    public static HyphenationTree getFopHyphenationTree (String key) {
+        HyphenationTree hTree = null;
+        ObjectInputStream ois = null;
+        InputStream is = null;
+        try {
+            is = Hyphenator.class.getResourceAsStream("/hyph/" + key + ".hyp");
+            if (is == null) {
+                if (key.length() == 5) {
+                    is = Hyphenator.class.getResourceAsStream("/hyph/" +
+                        key.substring(0,2) + ".hyp"); 
+                    if (is != null) {
+                        MessageHandler.errorln(
+                          "Couldn't find hyphenation pattern  " + key
+                           + "\nusing general language pattern " +
+                           key.substring(0,2) + " instead.");
+                    } else {
+                    if (errorDump){
+                        MessageHandler.errorln("Couldn't find precompiled " 
+                        + "fop hyphenation pattern " + key + ".hyp");
+                    }
+                        return null;
+                    }
+                } else {
+                    if (errorDump){
+                        MessageHandler.errorln("Couldn't find precompiled " 
+                        + "fop hyphenation pattern " + key + ".hyp");
+                    }
+                    return null;
+                }
+            }
+            ois = new ObjectInputStream(is);
+            hTree = (HyphenationTree) ois.readObject();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally { 
+            if (ois != null) {
+                try {
+                    ois.close();
+                } catch (IOException e) {
+                    MessageHandler.errorln("can't close hyphenation object stream");
+                }
+            }
+        } 
+        return hTree;
+    }
+
+    /**
+     *       load tree from serialized file or xml file
+     *       using configuration settings
+     */
+    public static HyphenationTree getUserHyphenationTree (String key,String hyphenDir) {
+        HyphenationTree hTree = null;
+        // I use here the following convention. The file name specified in
+        // the configuration is taken as the base name. First we try
+        // name + ".hyp" assuming a serialized HyphenationTree. If that fails
+        // we try name + ".xml", assumming a raw hyphenation pattern file.
+
+        // first try serialized object
+        File hyphenFile = new File(hyphenDir, key + ".hyp");
+        if (hyphenFile.exists()) {
+            ObjectInputStream ois = null;
+            try {
+                ois = new ObjectInputStream(
+                        new FileInputStream(hyphenFile));
+                hTree = (HyphenationTree) ois.readObject();
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally { 
+                if (ois != null) {
+                    try {
+                        ois.close();
+                    } catch (IOException e) { 
+                    }
+                }
+            } 
+            return hTree;
+        } else {
+
+        // try the raw XML file
+            hyphenFile = new File(hyphenDir, key + ".xml");
+            if (hyphenFile.exists()) {
+                hTree = new HyphenationTree();
+                if (errorDump) {
+                    MessageHandler.errorln("reading " +
+                                           hyphenDir + key +".xml");
+                }
+                try {
+                    hTree.loadPatterns(hyphenFile.getPath());
+                    if (errorDump) {
+                        System.out.println("Stats: ");
+                        hTree.printStats();
+                    }
+                    return hTree;
+                } catch (HyphenationException ex) {
+                    if (errorDump) {
+                        MessageHandler.errorln("Can't load user patterns "
+                                                + "from xml file " + hyphenDir + key +".xml");
+                    }
+                    return null;
+                }
+            } else {
+                if (errorDump) {
+                    MessageHandler.errorln("Tried to load " +
+                                       hyphenFile.toString() +
+                                       "\nCannot find compiled nor xml file for " 
+                                       + "hyphenation pattern" + key );
+                }
+                return null;
+            }
+        }
+    }
+
+    public static Hyphenation hyphenate(String lang, String country,
+                                        String word, int leftMin, int rightMin) {
+        HyphenationTree hTree = getHyphenationTree(lang, country);
+        if (hTree == null) {
+            MessageHandler.errorln(
+              "Error building hyphenation tree for language " + lang);
+            return null;
+        }
+        return hTree.hyphenate(word, leftMin, rightMin);
+    }
+
+    public static Hyphenation hyphenate(String lang, String country,
+                                        char[] word, int offset, int len, int leftMin, int rightMin) {
+        HyphenationTree hTree = getHyphenationTree(lang, country);
+        if (hTree == null) {
+            MessageHandler.errorln(
+              "Error building hyphenation tree for language " + lang);
+            return null;
+        }
+        return hTree.hyphenate(word, offset, len, leftMin, rightMin);
+    }
+
+    public void setMinRemainCharCount(int min) {
+        remainCharCount = min;
+    }
+
+    public void setMinPushCharCount(int min) {
+        pushCharCount = min;
+    }
+
+    public void setLanguage(String lang, String country) {
+        hyphenTree = getHyphenationTree(lang, country);
+    }
+
+    public Hyphenation hyphenate(char[] word, int offset, int len) {
+        if (hyphenTree == null)
+            return null;
+        return hyphenTree.hyphenate(word, offset, len, remainCharCount,
+                                    pushCharCount);
+    }
+
+    public Hyphenation hyphenate(String word) {
+        if (hyphenTree == null)
+            return null;
+        return hyphenTree.hyphenate(word, remainCharCount, pushCharCount);
+    }
+}
diff --git a/src/org/apache/fop/layout/hyphenation/PatternConsumer.java b/src/org/apache/fop/layout/hyphenation/PatternConsumer.java
new file mode 100644 (file)
index 0000000..70bc045
--- /dev/null
@@ -0,0 +1,85 @@
+/** -- $Id$ --
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout.hyphenation;
+import java.util.Vector;
+
+/**
+ * This interface is used to connect the XML pattern file parser to
+ * the hyphenation tree.
+ *
+ * @author Carlos Villegas <cav@uniscope.co.jp>
+ */
+public interface PatternConsumer {
+
+      /** Add a character class.
+       * A character class defines characters that are considered
+       * equivalent for the purpose of hyphenation (e.g. "aA"). It
+       * usually means to ignore case.
+       */
+      public void addClass(String chargroup);
+      
+      /** Add a hyphenation exception. An exception replaces the
+       * result obtained by the algorithm for cases for which this
+       * fails or the user wants to provide his own hyphenation.
+       * A hyphenatedword is a vector of alternating String's and
+       * {@link Hyphen Hyphen} instances */
+      public void addException(String word, Vector hyphenatedword);
+      
+      /**
+       * Add hyphenation patterns.
+       * @param pattern
+       * @param values interletter values expressed as a string of
+       * digit characters.
+       */
+      public void addPattern(String pattern, String values);
+
+}
diff --git a/src/org/apache/fop/layout/hyphenation/PatternParser.java b/src/org/apache/fop/layout/hyphenation/PatternParser.java
new file mode 100644 (file)
index 0000000..96495b0
--- /dev/null
@@ -0,0 +1,450 @@
+/** -- $Id$ --
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout.hyphenation;
+
+// SAX
+import org.xml.sax.XMLReader;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.Attributes;
+
+// Java
+import java.io.FileReader;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.util.Vector;
+import java.net.URL;
+
+/**
+ * A SAX document handler to read and parse hyphenation patterns
+ * from a XML file.
+ *
+ * @author Carlos Villegas <cav@uniscope.co.jp>
+ */
+public class PatternParser extends DefaultHandler implements PatternConsumer {
+
+      XMLReader parser;
+      int currElement;
+      PatternConsumer consumer;
+      StringBuffer token;
+      Vector exception;
+      char hyphenChar;
+      String errMsg;
+
+      static final int ELEM_CLASSES = 1;
+      static final int ELEM_EXCEPTIONS = 2;
+      static final int ELEM_PATTERNS = 3;
+      static final int ELEM_HYPHEN = 4;
+      
+      public PatternParser()
+         throws HyphenationException
+      {
+         token = new StringBuffer();
+         parser = createParser();               
+         parser.setContentHandler(this);
+         parser.setErrorHandler(this);
+         hyphenChar = '-'; // default
+
+      }
+
+      public PatternParser(PatternConsumer consumer)
+         throws HyphenationException
+      {
+         this();
+         this.consumer = consumer;
+      }
+
+      public void setConsumer(PatternConsumer consumer)
+      {
+         this.consumer = consumer;
+      }
+      
+      public void parse(String filename)
+         throws HyphenationException
+      {
+         InputSource uri = fileInputSource(filename);
+
+         try {
+            parser.parse(uri);
+         } catch ( SAXException e ) {
+            throw new HyphenationException(errMsg);
+         } catch ( IOException e ) {
+            throw new HyphenationException(e.getMessage());
+         } catch ( NullPointerException e) {
+            throw new HyphenationException("SAX parser not available");
+         }
+      }
+      
+      /**
+       * creates a SAX parser, using the value of org.xml.sax.parser
+       * defaulting to org.apache.xerces.parsers.SAXParser
+       *
+       * @return the created SAX parser
+       */
+      static XMLReader createParser()
+         throws HyphenationException
+      {
+         String parserClassName = System.getProperty("org.xml.sax.parser");
+         if (parserClassName == null) {
+           parserClassName = "org.apache.xerces.parsers.SAXParser";
+         }
+         // System.out.println("using SAX parser " + parserClassName);
+
+         try {
+           return (XMLReader)
+               Class.forName(parserClassName).newInstance();
+         } catch (ClassNotFoundException e) {
+           throw new HyphenationException("Could not find " + parserClassName);
+         } catch (InstantiationException e) {
+           throw new HyphenationException("Could not instantiate " + parserClassName);
+         } catch (IllegalAccessException e) {
+           throw new HyphenationException("Could not access " + parserClassName);
+         } catch (ClassCastException e) {
+           throw new HyphenationException(parserClassName + " is not a SAX driver"); 
+         }
+      }
+
+      /**
+       * create an InputSource from a file name
+       *
+       * @param filename the name of the file
+       * @return the InputSource created
+       */
+      protected static InputSource fileInputSource(String filename)
+         throws HyphenationException
+      {
+       
+         /* this code adapted from James Clark's in XT */
+         File file = new File(filename);
+         String path = file.getAbsolutePath();
+         String fSep = System.getProperty("file.separator");
+         if (fSep != null && fSep.length() == 1)
+           path = path.replace(fSep.charAt(0), '/');
+         if (path.length() > 0 && path.charAt(0) != '/')
+           path = '/' + path;
+         try {
+           return new InputSource(new URL("file", null, path).toString());
+         }
+         catch (java.net.MalformedURLException e) {
+           throw new HyphenationException("unexpected MalformedURLException");
+         }
+      }
+
+      protected String readToken(StringBuffer chars)
+      {
+         String word;
+         boolean space = false;
+         int i;
+         for(i=0; i<chars.length(); i++)
+            if ( Character.isWhitespace(chars.charAt(i)) )
+               space = true;
+            else
+               break;
+         if ( space ) {
+            chars.delete(0,i);
+            if ( token.length() > 0 ) {
+               word = token.toString();
+               token.setLength(0);
+               return word;
+            }
+         }
+         space = false;
+         for(i=0; i<chars.length(); i++) {
+            if ( Character.isWhitespace(chars.charAt(i)) ) {
+               space = true;
+               break;
+            }
+         }
+         token.append(chars.substring(0,i));
+         chars.delete(0,i);
+         if ( space ) {
+            word = token.toString();
+            token.setLength(0);
+            return word;
+         }
+         token.append(chars);
+         return null;
+      }
+
+      protected static String getPattern(String word)
+      {
+         StringBuffer pat = new StringBuffer();
+         int len = word.length();
+         for(int i=0; i<len; i++)
+            if ( ! Character.isDigit(word.charAt(i)) )
+               pat.append(word.charAt(i));
+         return pat.toString();
+      }
+
+      protected Vector normalizeException(Vector ex)
+      {
+         Vector res = new Vector();
+         for(int i=0; i<ex.size(); i++) {
+            Object item = ex.elementAt(i);
+            if ( item instanceof String ) {
+               String str = (String)item;
+               StringBuffer buf = new StringBuffer();
+               for(int j=0; j<str.length(); j++) {
+                  char c = str.charAt(j);
+                  if ( c != hyphenChar )
+                     buf.append(c);
+                  else {
+                     res.addElement(buf.toString());
+                     buf.setLength(0);
+                     char[] h = new char[1];
+                     h[0] = hyphenChar;
+                     // we use here hyphenChar which is not necessarily
+                     // the one to be printed
+                     res.addElement(new Hyphen(new String(h),null,null));
+                  }
+               }
+               if ( buf.length() > 0 )
+                  res.addElement(buf.toString());
+            } else
+               res.addElement(item);
+         }
+         return res;
+      }
+      
+      protected String getExceptionWord(Vector ex)
+      {
+         StringBuffer res = new StringBuffer();
+         for(int i=0; i<ex.size(); i++) {
+            Object item = ex.elementAt(i);
+            if ( item instanceof String )
+               res.append((String)item);
+            else {
+               if ( ((Hyphen)item).noBreak != null )
+                  res.append(((Hyphen)item).noBreak);
+            }
+         }
+         return res.toString();
+      }
+      
+      protected static String getInterletterValues(String pat)
+      {
+         StringBuffer il = new StringBuffer();
+         String word = pat + "a"; // add dummy letter to serve as sentinel
+         int len = word.length();
+         for(int i=0;i<len;i++) {
+            char c = word.charAt(i);
+            if ( Character.isDigit(c) ) {
+               il.append(c);
+               i++;
+            } else il.append('0');
+         }
+         return il.toString();
+      }
+      
+      //
+      // DocumentHandler methods
+      //
+
+      /** Start element. */
+      public void startElement(String uri, String local, String raw, Attributes attrs)
+      {
+         if ( local.equals("hyphen-char") ) {
+            String h = attrs.getValue("value");
+            if ( h != null && h.length() == 1 )
+               hyphenChar = h.charAt(0);
+         } else if ( local.equals("classes") )
+            currElement = ELEM_CLASSES;
+         else if ( local.equals("patterns") )
+            currElement = ELEM_PATTERNS;
+         else if ( local.equals("exceptions") ) {
+            currElement = ELEM_EXCEPTIONS;
+            exception = new Vector();
+         }
+         else if ( local.equals("hyphen") ) {
+            if ( token.length() > 0 ) {
+               exception.addElement(token.toString());
+            }
+            exception.addElement(new Hyphen(attrs.getValue("pre"),
+                                            attrs.getValue("no"),
+                                            attrs.getValue("post")));
+            currElement = ELEM_HYPHEN;
+         }
+         token.setLength(0);
+      }
+
+      public void endElement(String uri, String local, String raw)
+      {
+
+         if ( token.length() > 0 ) {
+            String word = token.toString();
+            switch ( currElement ) {
+               case ELEM_CLASSES:
+                  consumer.addClass(word);
+                  break;
+               case ELEM_EXCEPTIONS:
+                  exception.addElement(word);
+                  exception = normalizeException(exception);
+                  consumer.addException(getExceptionWord(exception),
+                                        (Vector)exception.clone());
+                  break;
+               case ELEM_PATTERNS:
+                  consumer.addPattern(getPattern(word), getInterletterValues(word));
+                  break;
+               case ELEM_HYPHEN:
+                  // nothing to do 
+                  break;
+            }
+            if ( currElement != ELEM_HYPHEN )
+               token.setLength(0);
+         }
+         if ( currElement == ELEM_HYPHEN )
+            currElement = ELEM_EXCEPTIONS;
+         else
+            currElement = 0;
+
+      }
+
+      /** Characters. */
+      public void characters(char ch[], int start, int length)
+      {
+         StringBuffer chars = new StringBuffer(length);
+         chars.append(ch, start, length);
+         String word = readToken(chars);
+         while ( word != null ) {
+            // System.out.println("\"" + word + "\"");
+            switch ( currElement ) {
+               case ELEM_CLASSES:
+                  consumer.addClass(word);
+                  break;
+               case ELEM_EXCEPTIONS:
+                  exception.addElement(word);
+                  exception = normalizeException(exception);
+                  consumer.addException(getExceptionWord(exception),
+                                        (Vector)exception.clone());
+                  exception.removeAllElements();
+                  break;
+               case ELEM_PATTERNS:
+                  consumer.addPattern(getPattern(word), getInterletterValues(word));
+                  break;
+            }
+            word = readToken(chars);
+         }
+               
+      }
+      
+      //
+      // ErrorHandler methods
+      //
+
+      /** Warning. */
+      public void warning(SAXParseException ex) {
+         errMsg = "[Warning] "+ getLocationString(ex)+": "+ ex.getMessage();
+      }
+
+      /** Error. */
+      public void error(SAXParseException ex) {
+         errMsg = "[Error] "+ getLocationString(ex)+": "+ ex.getMessage();
+      }
+
+      /** Fatal error. */
+      public void fatalError(SAXParseException ex) throws SAXException {
+         errMsg = "[Fatal Error] "+getLocationString(ex)+": "+ ex.getMessage();
+         throw ex;
+      }
+
+      /** Returns a string of the location. */
+      private String getLocationString(SAXParseException ex) {
+         StringBuffer str = new StringBuffer();
+
+         String systemId = ex.getSystemId();
+         if (systemId != null) {
+            int index = systemId.lastIndexOf('/');
+            if (index != -1) 
+               systemId = systemId.substring(index + 1);
+            str.append(systemId);
+         }
+         str.append(':');
+         str.append(ex.getLineNumber());
+         str.append(':');
+         str.append(ex.getColumnNumber());
+
+         return str.toString();
+
+      } // getLocationString(SAXParseException):String
+
+
+      // PatternConsumer implementation for testing purposes
+      public void addClass(String c)
+      {
+         System.out.println("class: " + c);
+      }
+
+      public void addException(String w, Vector e)
+      {
+         System.out.println("exception: " + w + " : " + e.toString());
+      }
+
+      public void addPattern(String p, String v)
+      {
+         System.out.println("pattern: " + p + " : " + v);
+      }
+      
+      public static void main(String[] args)
+         throws Exception
+      {
+         if ( args.length > 0  ){
+            PatternParser pp = new PatternParser();
+            pp.setConsumer(pp);
+            pp.parse(args[0]);
+         }
+      }
+}
diff --git a/src/org/apache/fop/layout/hyphenation/TernaryTree.java b/src/org/apache/fop/layout/hyphenation/TernaryTree.java
new file mode 100644 (file)
index 0000000..ec01994
--- /dev/null
@@ -0,0 +1,690 @@
+/** -- $Id$ --
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+ */
+
+package org.apache.fop.layout.hyphenation;
+
+import java.util.Enumeration;
+import java.util.Stack;
+import java.io.Serializable;
+
+/**
+ *  <h2>Ternary Search Tree</h2>
+ *
+ *  <p>A ternary search tree is a hibrid between a binary tree and
+ *  a digital search tree (trie). Keys are limited to strings.
+ *  A data value of type char is stored in each leaf node.
+ *  It can be used as an index (or pointer) to the data.
+ *  Branches that only contain one key are compressed to one node
+ *  by storing a pointer to the trailer substring of the key.
+ *  This class is intended to serve as base class or helper class
+ *  to implement Dictionary collections or the like. Ternary trees
+ *  have some nice properties as the following: the tree can be
+ *  traversed in sorted order, partial matches (wildcard) can be
+ *  implemented, retrieval of all keys within a given distance
+ *  from the target, etc. The storage requirements are higher than
+ *  a binary tree but a lot less than a trie. Performance is
+ *  comparable with a hash table, sometimes it outperforms a hash
+ *  function (most of the time can determine a miss faster than a hash).</p>
+ *
+ *  <p>The main purpose of this java port is to serve as a base for
+ *  implementing TeX's hyphenation algorithm (see The TeXBook,
+ *  appendix H). Each language requires from 5000 to 15000 hyphenation
+ *  patterns which will be keys in this tree. The strings patterns
+ *  are usually small (from 2 to 5 characters), but each char in the
+ *  tree is stored in a node. Thus memory usage is the main concern.
+ *  We will sacrify 'elegance' to keep memory requirenments to the
+ *  minimum. Using java's char type as pointer (yes, I know pointer
+ *  it is a forbidden word in java) we can keep the size of the node
+ *  to be just 8 bytes (3 pointers and the data char). This gives
+ *  room for about 65000 nodes. In my tests the english patterns
+ *  took 7694 nodes and the german patterns 10055 nodes,
+ *  so I think we are safe.</p>
+ *
+ *  <p>All said, this is a map with strings as keys and char as value.
+ *  Pretty limited!. It can be extended to a general map by
+ *  using the string representation of an object and using the
+ *  char value as an index to an array that contains the object
+ *  values.</p>
+ *
+ *  @author cav@uniscope.co.jp
+ */
+
+public class TernaryTree implements Cloneable, Serializable {
+
+      /**
+       * We use 4 arrays to represent a node. I guess I should have created
+       * a proper node class, but somehow Knuth's pascal code made me forget
+       * we now have a portable language with virtual memory management and
+       * automatic garbage collection! And now is kind of late, furthermore,
+       * if it ain't broken, don't fix it.
+       */
+      
+      /**
+       * Pointer to low branch and to rest of the key when it is
+       * stored directly in this node, we don't have unions in java!
+       */
+      protected char[] lo;
+
+      /**
+       * Pointer to high branch.
+       */
+      protected char[] hi;
+      
+      /**
+       * Pointer to equal branch and to data when this node is a string terminator.
+       */
+      protected char[] eq;
+
+      /**
+       * <P>The character stored in this node: splitchar
+       * Two special values are reserved:</P>
+       * <ul><li>0x0000 as string terminator</li>
+       * <li>0xFFFF to indicate that the branch starting at
+       * this node is compressed</li></ul>
+       * <p>This shouldn't be a problem if we give the usual semantics to
+       * strings since 0xFFFF is garanteed not to be an Unicode character.</p>
+       */
+      protected char[] sc;
+
+      /**
+       * This vector holds the trailing of the keys when the branch is compressed.
+       */
+      protected CharVector kv;
+      
+      protected char root;
+      protected char freenode;
+      protected int length;       // number of items in tree
+      
+      protected final static int BLOCK_SIZE=2048;    // allocation size for arrays
+
+      TernaryTree()
+      {
+         init();
+      }
+
+      protected void init()
+      {
+         root = 0;
+         freenode = 1;
+         length = 0;
+         lo = new char[BLOCK_SIZE];
+         hi = new char[BLOCK_SIZE];
+         eq = new char[BLOCK_SIZE];
+         sc = new char[BLOCK_SIZE];         
+         kv = new CharVector();
+      }
+
+      /**
+       * Branches are initially compressed, needing
+       * one node per key plus the size of the string
+       * key. They are decompressed as needed when
+       * another key with same prefix
+       * is inserted. This saves a lot of space,
+       * specially for long keys.
+       */
+      public void insert(String key, char val)
+      {
+         // make sure we have enough room in the arrays
+         int len = key.length() + 1; // maximum number of nodes that may be generated
+         if ( freenode + len > eq.length )
+            redimNodeArrays(eq.length + BLOCK_SIZE);
+         char strkey[] = new char[len--];
+         key.getChars(0, len, strkey, 0);
+         strkey[len] = 0;
+         root = insert(root, strkey, 0, val);
+      }
+
+      public void insert(char[] key, int start, char val)
+      {
+         int len = strlen(key) + 1;
+         if ( freenode + len > eq.length )
+            redimNodeArrays(eq.length + BLOCK_SIZE);
+         root = insert(root, key, start, val);
+      }
+
+      /**
+       * The actual insertion function, recursive version.
+       */
+      private char insert(char p, char[] key, int start, char val)
+      {
+         int len = strlen(key, start);
+         if ( p == 0 ) {
+            // this means there is no branch, this node will start a new branch.
+            // Instead of doing that, we store the key somewhere else and create
+            // only one node with a pointer to the key
+            p = freenode++;
+            eq[p] = val; //holds data
+            length++;
+            hi[p] = 0;
+            if ( len > 0 ) {
+               sc[p] = 0xFFFF;  // indicates branch is compressed
+               lo[p] = (char)kv.alloc(len+1); // use 'lo' to hold pointer to key
+               strcpy(kv.getArray(), lo[p], key, start);
+            } else {
+               sc[p] = 0;
+               lo[p] = 0;
+            }
+            return p;
+         }
+
+         if ( sc[p] == 0xFFFF ) {
+            // branch is compressed: need to decompress
+            // this will generate garbage in the external key array
+            // but we can do some garbage collection later
+            char pp = freenode++;
+            lo[pp] = lo[p]; // previous pointer to key
+            eq[pp] = eq[p]; // previous pointer to data
+            lo[p] = 0;
+            if ( len > 0 ) {
+               sc[p] = kv.get(lo[pp]);
+               eq[p] = pp;
+               lo[pp]++;
+               if ( kv.get(lo[pp]) == 0 ) {
+                  // key completly decompressed leaving garbage in key array
+                  lo[pp] = 0;
+                  sc[pp] = 0;
+                  hi[pp] = 0;
+               } else
+                  sc[pp] = 0xFFFF;  // we only got first char of key, rest is still there
+            } else {
+               // In this case we can save a node by swapping the new node
+               // with the compressed node
+               sc[pp] = 0xFFFF;
+               hi[p] = pp;
+               sc[p] = 0;
+               eq[p] = val;
+               length++;
+               return p;
+            }            
+         }
+         char s = key[start];
+         if ( s < sc[p] )
+            lo[p] = insert(lo[p], key, start, val);
+         else if ( s == sc[p] ) {
+            if ( s != 0 )
+               eq[p] = insert(eq[p], key, start+1, val);
+            else {
+               // key already in tree, overwrite data
+               eq[p] = val;
+            }
+               
+         } else
+            hi[p] = insert(hi[p], key, start, val);
+         return p;
+      }
+
+      /** Compares 2 null terminated char arrays */
+      public static int strcmp(char[] a, int startA, char[] b, int startB)
+      {
+         for(; a[startA] == b[startB]; startA++, startB++)
+            if ( a[startA] == 0 )
+               return 0;
+         return a[startA] - b[startB];
+      }
+      
+      /**
+       * Compares a string with null terminated char array
+       */
+      public static int strcmp(String str, char[] a, int start)
+      {
+         int i,d,len=str.length();
+         for(i=0; i<len; i++) {
+            d = (int)str.charAt(i) - a[start+i];
+            if ( d != 0 )
+               return d;
+            if ( a[start+i] == 0 )
+               return d;
+         }
+         if ( a[start+i] != 0 )
+            return (int)-a[start+i];
+         return 0;
+         
+      }
+
+      public static void strcpy(char[] dst, int di, char[] src, int si)
+      {
+         while( src[si] != 0 )
+            dst[di++] = src[si++];
+         dst[di] = 0;
+      }
+
+      public static int strlen(char[] a, int start)
+      {
+         int len=0;
+         for(int i=start; i<a.length && a[i]!=0; i++)
+            len++;
+         return len;
+      }
+
+      public static int strlen(char[] a)
+      {
+         return strlen(a, 0);
+      }
+      
+      public int find(String key)
+      {
+         int len = key.length();
+         char strkey[] = new char[len+1];
+         key.getChars(0, len, strkey, 0);
+         strkey[len] = 0;
+
+         return find(strkey, 0);
+      }
+
+      public int find(char[] key, int start)
+      {
+         int d;
+         char p = root;
+         int i=start;
+         char c;
+         
+         while( p != 0) {
+            if ( sc[p] == 0xFFFF ) {
+               if ( strcmp(key, i, kv.getArray(), lo[p]) == 0 )
+                  return eq[p];
+               else
+                  return -1;
+            }
+            c = key[i];
+            d = c - sc[p];
+            if ( d == 0 ) {
+               if ( c == 0 )
+                  return eq[p];
+               i++;
+               p = eq[p];
+            } else if ( d < 0 )
+               p = lo[p];
+            else
+               p = hi[p];
+         }
+         return -1;
+      }
+      
+      public boolean knows(String key)
+      {
+         return (find(key) >= 0 );
+      }
+      
+      // redimension the arrays
+      private void redimNodeArrays(int newsize)
+      {
+         int len = newsize < lo.length ? newsize : lo.length;
+         char[] na = new char[newsize];
+         System.arraycopy(lo, 0, na, 0, len);
+         lo = na;
+         na = new char[newsize];
+         System.arraycopy(hi, 0, na, 0, len);
+         hi = na;
+         na = new char[newsize];
+         System.arraycopy(eq, 0, na, 0, len);
+         eq = na;
+         na = new char[newsize];
+         System.arraycopy(sc, 0, na, 0, len);
+         sc = na;
+      } 
+
+      public int size()
+      {
+         return length;
+      }
+      
+      public Object clone()
+      {
+         TernaryTree t = new TernaryTree();
+         t.lo = (char[])this.lo.clone();
+         t.hi = (char[])this.hi.clone();
+         t.eq = (char[])this.eq.clone();
+         t.sc = (char[])this.sc.clone();
+         t.kv = (CharVector)this.kv.clone();
+         t.root = this.root;
+         t.freenode = this.freenode;
+         t.length = this.length;
+         
+         return t;
+      }
+
+      /**
+       * Recursively insert the median first and then the median of the
+       * lower and upper halves, and so on in order to get a balanced
+       * tree. The array of keys is assumed to be sorted in ascending
+       * order.
+       */
+      protected void insertBalanced(String[] k, char[] v, int offset, int n)
+      {
+         int m;
+         if ( n < 1) return;
+         m = n >> 1;
+
+         insert(k[m+offset], v[m+offset]);
+         insertBalanced(k, v, offset, m);
+         
+         insertBalanced(k, v, offset+m+1, n-m-1);
+      }
+
+      
+      /**
+       * Balance the tree for best search performance
+       */
+      public void balance()
+      {
+         // System.out.print("Before root splitchar = "); System.out.println(sc[root]);
+         
+         int i=0, n = length;
+         String[] k = new String[n];
+         char[] v = new char[n];
+         Iterator iter = new Iterator();
+         while ( iter.hasMoreElements() ) {
+            v[i] = iter.getValue();            
+            k[i++] = (String)iter.nextElement();
+         }
+         init();
+         insertBalanced(k, v, 0, n);
+         
+         // With uniform letter distribution sc[root] should be around 'm'
+         // System.out.print("After root splitchar = "); System.out.println(sc[root]);
+      }
+      
+      /**
+       * Each node stores a character (splitchar) which is part of
+       * some key(s). In a compressed branch (one that only contain
+       * a single string key) the trailer of the key which is not
+       * already in nodes is stored  externally in the kv array.
+       * As items are inserted, key substrings decrease.
+       * Some substrings may completely  disappear when the whole
+       * branch is totally decompressed.
+       * The tree is traversed to find the key substrings actually
+       * used. In addition, duplicate substrings are removed using
+       * a map (implemented with a TernaryTree!).
+       *
+       */
+      public void trimToSize()
+      {
+         // first balance the tree for best performance
+         balance();
+
+         // redimension the node arrays
+         redimNodeArrays(freenode);
+
+         // ok, compact kv array
+         CharVector kx = new CharVector();
+         kx.alloc(1);
+         TernaryTree map = new TernaryTree();
+         compact(kx, map, root);
+         kv = kx;
+         kv.trimToSize();
+      }
+
+      private void compact(CharVector kx, TernaryTree map, char p)
+      {
+         int k;
+         if (p == 0) return;
+         if ( sc[p] == 0xFFFF ) {
+            k = map.find(kv.getArray(), lo[p]);
+            if ( k < 0 ) {
+               k = kx.alloc(strlen(kv.getArray(),lo[p])+1);
+               strcpy(kx.getArray(), k, kv.getArray(), lo[p]);
+               map.insert(kx.getArray(), k, (char)k);
+            }
+            lo[p] = (char)k;
+         } else {
+            compact(kx, map, lo[p]);
+            if ( sc[p] != 0 )
+               compact(kx, map, eq[p]);
+            compact(kx, map, hi[p]);
+         }
+      }
+
+
+      public Enumeration keys()
+      {
+         return new Iterator();
+      }
+      
+      public class Iterator implements Enumeration {
+
+            /** current node index */
+            int cur;
+
+            /** current key */
+            String curkey;
+
+            private class Item implements Cloneable {
+                  char parent;
+                  char child;
+                  
+                  public Item()
+                  {
+                     parent = 0;
+                     child = 0;
+                  }
+                  
+                  public Item(char p, char c)
+                  {
+                     parent = p;
+                     child = c;
+                  }
+
+                  public Object clone()
+                  {
+                     return new Item(parent, child);
+                  }
+            }
+            
+            /** Node stack */
+            Stack ns;
+
+            /** key stack implemented with a StringBuffer */
+            StringBuffer ks;
+
+            public Iterator()
+            {
+               cur = -1;
+               ns = new Stack();
+               ks = new StringBuffer();
+               rewind();
+            }
+
+            public void rewind()
+            {
+               ns.clear();
+               ks.setLength(0);
+               cur = root;
+               run();
+            }
+
+            public Object nextElement()
+            {
+               String res = new String(curkey);
+               cur = up();
+               run();
+               return res;
+            }
+            
+            public char getValue()
+            {
+               if ( cur >= 0 )
+                  return eq[cur];
+               return 0;
+            }
+            
+            public boolean hasMoreElements()
+            {
+               return (cur != -1);
+            }
+
+            /** traverse upwards */
+            private int up()
+            {
+               Item i = new Item();
+               int res=0;
+
+               if ( ns.empty() )
+                  return -1;
+
+               if ( cur != 0 && sc[cur] == 0 )
+                  return lo[cur];
+
+               boolean climb=true;
+
+               while(climb) {
+                  i = (Item)ns.pop();
+                  i.child++;
+                  switch( i.child ) {
+                     case 1:
+                        if ( sc[i.parent] != 0 ) {
+                           res = eq[i.parent];
+                           ns.push(i.clone());
+                           ks.append(sc[i.parent]);
+                        } else {
+                           i.child++;
+                           ns.push(i.clone());
+                           res = hi[i.parent];
+                        }
+                        climb = false;
+                        break;
+
+                     case 2:
+                        res = hi[i.parent];
+                        ns.push(i.clone());
+                        if ( ks.length() > 0 )
+                           ks.setLength(ks.length()-1); // pop
+                        climb=false;
+                        break;
+
+                     default:
+                        if ( ns.empty() )
+                           return -1;
+                        climb = true;
+                        break;
+                  }
+               }
+               return res;
+            }
+
+            /** traverse the tree to find next key */
+            private int run()
+            {
+               if ( cur == -1 )
+                  return -1;
+
+               boolean leaf = false;
+               for(;;) {
+                  // first go down on low branch until leaf or compressed branch
+                  while ( cur != 0 ) {
+                     if( sc[cur] == 0xFFFF ) {
+                        leaf = true;
+                        break;
+                     }
+                     ns.push( new Item((char)cur, '\u0000') );
+                     if ( sc[cur] == 0 ) {
+                        leaf = true;
+                        break;
+                     }
+                     cur = lo[cur];
+                  }
+                  if ( leaf ) break;
+                  // nothing found, go up one node and try again
+                  cur = up();
+                  if ( cur == -1 ) {
+                     return -1;
+                  }
+               }
+               // The current node should be a data node and
+               // the key should be in the key stack (at least partially)
+               StringBuffer buf = new StringBuffer(ks.toString());
+               if ( sc[cur] == 0xFFFF ) {
+                  int p = lo[cur];
+                  while( kv.get(p) != 0 )
+                     buf.append(kv.get(p++));
+               }
+               curkey = buf.toString();
+               return 0;
+            }
+            
+      }
+
+      public void printStats()
+      {
+         System.out.println("Number of keys = " + Integer.toString(length));
+         System.out.println("Node count = " + Integer.toString(freenode));
+         // System.out.println("Array length = " + Integer.toString(eq.length));
+         System.out.println("Key Array length = " + Integer.toString(kv.length()));
+
+         /*
+         for(int i=0; i<kv.length(); i++)
+            if ( kv.get(i) != 0 )
+               System.out.print(kv.get(i));
+            else
+               System.out.println("");
+
+         System.out.println("Keys:");
+         for(Enumeration enum = keys(); enum.hasMoreElements(); )
+            System.out.println(enum.nextElement());
+         */
+
+      }
+      
+      public static void main(String[] args)
+         throws Exception
+      {
+         TernaryTree tt = new TernaryTree();
+         tt.insert("Carlos", 'C');
+         tt.insert("Car", 'r');
+         tt.insert("palos", 'l');
+         tt.insert("pa", 'p');
+         tt.trimToSize();
+         System.out.println((char)tt.find("Car"));
+         System.out.println((char)tt.find("Carlos"));
+         System.out.println((char)tt.find("alto"));
+         tt.printStats();
+      }
+}
+