summaryrefslogtreecommitdiff
path: root/systems/android
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /systems/android
Initial commit
Diffstat (limited to 'systems/android')
-rw-r--r--systems/android/hktex/HKtex2/.classpath9
-rw-r--r--systems/android/hktex/HKtex2/.project33
-rw-r--r--systems/android/hktex/HKtex2/.settings/org.eclipse.jdt.core.prefs4
-rw-r--r--systems/android/hktex/HKtex2/AndroidManifest.xml43
-rw-r--r--systems/android/hktex/HKtex2/assets/bitmap/leftarrow.pngbin0 -> 365 bytes
-rw-r--r--systems/android/hktex/HKtex2/assets/bitmap/leftendarrow.pngbin0 -> 450 bytes
-rw-r--r--systems/android/hktex/HKtex2/assets/bitmap/rightarrow.pngbin0 -> 406 bytes
-rw-r--r--systems/android/hktex/HKtex2/assets/bitmap/rightendarrow.pngbin0 -> 440 bytes
-rw-r--r--systems/android/hktex/HKtex2/assets/fonts/asana-math.ttfbin0 -> 498180 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/AndroidManifest.xml43
-rw-r--r--systems/android/hktex/HKtex2/bin/HKtex2.apkbin0 -> 692238 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes.dexbin0 -> 1210408 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Block.classbin0 -> 4818 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/BuildConfig.classbin0 -> 345 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Colorfile.classbin0 -> 7947 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscape$LandscapeView.classbin0 -> 4273 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscape.classbin0 -> 3474 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscapeerror$SampleView1.classbin0 -> 2960 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscapeerror.classbin0 -> 1485 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportrait$SampleView1.classbin0 -> 4261 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportrait.classbin0 -> 3465 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportraiterror$SampleView1.classbin0 -> 2954 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportraiterror.classbin0 -> 1480 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/DocumentBitmap.classbin0 -> 1159 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Drawblock.classbin0 -> 6768 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Drawdocument.classbin0 -> 4247 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Fontfile.classbin0 -> 696 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Header.classbin0 -> 2347 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Hyphenator.classbin0 -> 2995 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Initdraw.classbin0 -> 7011 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/KnuthLiangTable.classbin0 -> 214693 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity$1.classbin0 -> 1120 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity$Parse.classbin0 -> 7363 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity.classbin0 -> 2696 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphBlock.classbin0 -> 3265 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphFormatting.classbin0 -> 6256 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphFormatting2.classbin0 -> 5303 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsable.classbin0 -> 5212 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseblock.classbin0 -> 76954 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsedocument.classbin0 -> 24272 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseeqnarray.classbin0 -> 8785 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseequation.classbin0 -> 5680 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsegraphics.classbin0 -> 9687 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsegraphicstable.classbin0 -> 19938 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsepreparation.classbin0 -> 6489 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetable.classbin0 -> 19450 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetext.classbin0 -> 10949 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetitle.classbin0 -> 9982 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseverbatim.classbin0 -> 4361 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$attr.classbin0 -> 340 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$dimen.classbin0 -> 461 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$drawable.classbin0 -> 575 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$id.classbin0 -> 452 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$layout.classbin0 -> 403 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$menu.classbin0 -> 388 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$string.classbin0 -> 472 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$style.classbin0 -> 431 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R.classbin0 -> 673 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Separatetext.classbin0 -> 1720 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Source.classbin0 -> 15805 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/SuperBlock.classbin0 -> 6422 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Symbol.classbin0 -> 11146 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Textattributefile.classbin0 -> 736 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/jarlist.cache3
-rw-r--r--systems/android/hktex/HKtex2/bin/res/crunch/drawable-hdpi/ic_launcher.pngbin0 -> 5964 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/exit.pngbin0 -> 827 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/ic_launcher.pngbin0 -> 2910 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/leftarrow.pngbin0 -> 312 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/leftendarrow.pngbin0 -> 383 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/rightarrow.pngbin0 -> 361 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/rightendarrow.pngbin0 -> 366 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/res/crunch/drawable-xhdpi/ic_launcher.pngbin0 -> 9355 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/res/crunch/drawable-xxhdpi/ic_launcher.pngbin0 -> 17889 bytes
-rw-r--r--systems/android/hktex/HKtex2/bin/resources.ap_bin0 -> 331766 bytes
-rw-r--r--systems/android/hktex/HKtex2/gen/worker4math/hktex2/BuildConfig.java6
-rw-r--r--systems/android/hktex/HKtex2/gen/worker4math/hktex2/R.java75
-rw-r--r--systems/android/hktex/HKtex2/ic_launcher-web.pngbin0 -> 47171 bytes
-rw-r--r--systems/android/hktex/HKtex2/proguard-project.txt20
-rw-r--r--systems/android/hktex/HKtex2/project.properties14
-rw-r--r--systems/android/hktex/HKtex2/res/drawable-hdpi/ic_launcher.pngbin0 -> 4359 bytes
-rw-r--r--systems/android/hktex/HKtex2/res/drawable-mdpi/exit.pngbin0 -> 865 bytes
-rw-r--r--systems/android/hktex/HKtex2/res/drawable-mdpi/ic_launcher.pngbin0 -> 2513 bytes
-rw-r--r--systems/android/hktex/HKtex2/res/drawable-mdpi/leftarrow.pngbin0 -> 365 bytes
-rw-r--r--systems/android/hktex/HKtex2/res/drawable-mdpi/leftendarrow.pngbin0 -> 450 bytes
-rw-r--r--systems/android/hktex/HKtex2/res/drawable-mdpi/rightarrow.pngbin0 -> 406 bytes
-rw-r--r--systems/android/hktex/HKtex2/res/drawable-mdpi/rightendarrow.pngbin0 -> 440 bytes
-rw-r--r--systems/android/hktex/HKtex2/res/drawable-xhdpi/ic_launcher.pngbin0 -> 6109 bytes
-rw-r--r--systems/android/hktex/HKtex2/res/drawable-xxhdpi/ic_launcher.pngbin0 -> 24777 bytes
-rw-r--r--systems/android/hktex/HKtex2/res/layout/activity_main.xml24
-rw-r--r--systems/android/hktex/HKtex2/res/menu/main.xml9
-rw-r--r--systems/android/hktex/HKtex2/res/values-sw600dp/dimens.xml8
-rw-r--r--systems/android/hktex/HKtex2/res/values-sw720dp-land/dimens.xml9
-rw-r--r--systems/android/hktex/HKtex2/res/values-v11/styles.xml11
-rw-r--r--systems/android/hktex/HKtex2/res/values-v14/styles.xml12
-rw-r--r--systems/android/hktex/HKtex2/res/values/dimens.xml7
-rw-r--r--systems/android/hktex/HKtex2/res/values/strings.xml8
-rw-r--r--systems/android/hktex/HKtex2/res/values/styles.xml20
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Block.java104
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Colorfile.java173
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Displaylandscape.java141
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Displaylandscapeerror.java84
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Displayportrait.java143
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Displayportraiterror.java85
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/DocumentBitmap.java29
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Drawblock.java164
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Drawdocument.java96
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Fontfile.java24
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Header.java59
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Hyphenator.java88
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Initdraw.java207
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/KnuthLiangTable.java8919
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/MainActivity.java211
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphBlock.java55
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphFormatting.java153
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphFormatting2.java124
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsable.java110
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseblock.java2554
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsedocument.java633
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseeqnarray.java139
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseequation.java89
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsegraphics.java162
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsegraphicstable.java505
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsepreparation.java143
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetable.java464
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetext.java221
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetitle.java221
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseverbatim.java68
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Separatetext.java48
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Source.java290
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/SuperBlock.java134
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Symbol.java2861
-rw-r--r--systems/android/hktex/HKtex2/src/worker4math/hktex2/Textattributefile.java25
-rw-r--r--systems/android/hktex/HKtexdoc.pdfbin0 -> 550050 bytes
-rw-r--r--systems/android/hktex/LicenceGuaranteeWarranty.txt12
-rw-r--r--systems/android/hktex/README11
135 files changed, 19907 insertions, 0 deletions
diff --git a/systems/android/hktex/HKtex2/.classpath b/systems/android/hktex/HKtex2/.classpath
new file mode 100644
index 0000000000..7bc01d9a9c
--- /dev/null
+++ b/systems/android/hktex/HKtex2/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="gen"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+ <classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/systems/android/hktex/HKtex2/.project b/systems/android/hktex/HKtex2/.project
new file mode 100644
index 0000000000..75282a5bf6
--- /dev/null
+++ b/systems/android/hktex/HKtex2/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>HKtex2</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ApkBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/systems/android/hktex/HKtex2/.settings/org.eclipse.jdt.core.prefs b/systems/android/hktex/HKtex2/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..b080d2ddc8
--- /dev/null
+++ b/systems/android/hktex/HKtex2/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/systems/android/hktex/HKtex2/AndroidManifest.xml b/systems/android/hktex/HKtex2/AndroidManifest.xml
new file mode 100644
index 0000000000..305b41d697
--- /dev/null
+++ b/systems/android/hktex/HKtex2/AndroidManifest.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="worker4math.hktex2"
+ android:versionCode="1"
+ android:versionName="1.0" >
+
+ <uses-sdk
+ android:minSdkVersion="8"
+ android:targetSdkVersion="18" />
+
+ <application
+ android:allowBackup="true"
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@style/AppTheme" >
+ <activity
+ android:name="worker4math.hktex2.MainActivity"
+ android:label="@string/app_name" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name="worker4math.hktex2.Displayportrait"
+ android:label="@string/app_name" >
+ </activity>
+ <activity
+ android:name="worker4math.hktex2.Displayportraiterror"
+ android:label="@string/app_name" >
+ </activity>
+ <activity
+ android:name="worker4math.hktex2.Displaylandscape"
+ android:label="@string/app_name" >
+ </activity>
+ <activity
+ android:name="worker4math.hktex2.Displaylandscapeerror"
+ android:label="@string/app_name" >
+ </activity>
+ </application>
+
+</manifest>
diff --git a/systems/android/hktex/HKtex2/assets/bitmap/leftarrow.png b/systems/android/hktex/HKtex2/assets/bitmap/leftarrow.png
new file mode 100644
index 0000000000..8080626633
--- /dev/null
+++ b/systems/android/hktex/HKtex2/assets/bitmap/leftarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/assets/bitmap/leftendarrow.png b/systems/android/hktex/HKtex2/assets/bitmap/leftendarrow.png
new file mode 100644
index 0000000000..c654fe3fff
--- /dev/null
+++ b/systems/android/hktex/HKtex2/assets/bitmap/leftendarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/assets/bitmap/rightarrow.png b/systems/android/hktex/HKtex2/assets/bitmap/rightarrow.png
new file mode 100644
index 0000000000..f1b0cb4a0f
--- /dev/null
+++ b/systems/android/hktex/HKtex2/assets/bitmap/rightarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/assets/bitmap/rightendarrow.png b/systems/android/hktex/HKtex2/assets/bitmap/rightendarrow.png
new file mode 100644
index 0000000000..777444aa45
--- /dev/null
+++ b/systems/android/hktex/HKtex2/assets/bitmap/rightendarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/assets/fonts/asana-math.ttf b/systems/android/hktex/HKtex2/assets/fonts/asana-math.ttf
new file mode 100644
index 0000000000..55d54a9f6a
--- /dev/null
+++ b/systems/android/hktex/HKtex2/assets/fonts/asana-math.ttf
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/AndroidManifest.xml b/systems/android/hktex/HKtex2/bin/AndroidManifest.xml
new file mode 100644
index 0000000000..305b41d697
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/AndroidManifest.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="worker4math.hktex2"
+ android:versionCode="1"
+ android:versionName="1.0" >
+
+ <uses-sdk
+ android:minSdkVersion="8"
+ android:targetSdkVersion="18" />
+
+ <application
+ android:allowBackup="true"
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@style/AppTheme" >
+ <activity
+ android:name="worker4math.hktex2.MainActivity"
+ android:label="@string/app_name" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name="worker4math.hktex2.Displayportrait"
+ android:label="@string/app_name" >
+ </activity>
+ <activity
+ android:name="worker4math.hktex2.Displayportraiterror"
+ android:label="@string/app_name" >
+ </activity>
+ <activity
+ android:name="worker4math.hktex2.Displaylandscape"
+ android:label="@string/app_name" >
+ </activity>
+ <activity
+ android:name="worker4math.hktex2.Displaylandscapeerror"
+ android:label="@string/app_name" >
+ </activity>
+ </application>
+
+</manifest>
diff --git a/systems/android/hktex/HKtex2/bin/HKtex2.apk b/systems/android/hktex/HKtex2/bin/HKtex2.apk
new file mode 100644
index 0000000000..eab756c244
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/HKtex2.apk
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes.dex b/systems/android/hktex/HKtex2/bin/classes.dex
new file mode 100644
index 0000000000..d532827191
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes.dex
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Block.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Block.class
new file mode 100644
index 0000000000..bef51315e7
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Block.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/BuildConfig.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/BuildConfig.class
new file mode 100644
index 0000000000..4ae971c356
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/BuildConfig.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Colorfile.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Colorfile.class
new file mode 100644
index 0000000000..7ebb00c6f4
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Colorfile.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscape$LandscapeView.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscape$LandscapeView.class
new file mode 100644
index 0000000000..6b61d8b9cb
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscape$LandscapeView.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscape.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscape.class
new file mode 100644
index 0000000000..d4d65cd65d
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscape.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscapeerror$SampleView1.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscapeerror$SampleView1.class
new file mode 100644
index 0000000000..fd45a71e50
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscapeerror$SampleView1.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscapeerror.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscapeerror.class
new file mode 100644
index 0000000000..46aeebfbaa
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displaylandscapeerror.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportrait$SampleView1.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportrait$SampleView1.class
new file mode 100644
index 0000000000..a40d82a669
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportrait$SampleView1.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportrait.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportrait.class
new file mode 100644
index 0000000000..df97723c2e
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportrait.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportraiterror$SampleView1.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportraiterror$SampleView1.class
new file mode 100644
index 0000000000..33661984af
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportraiterror$SampleView1.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportraiterror.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportraiterror.class
new file mode 100644
index 0000000000..4cd878a426
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Displayportraiterror.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/DocumentBitmap.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/DocumentBitmap.class
new file mode 100644
index 0000000000..49e0ac7dbf
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/DocumentBitmap.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Drawblock.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Drawblock.class
new file mode 100644
index 0000000000..a221255a06
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Drawblock.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Drawdocument.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Drawdocument.class
new file mode 100644
index 0000000000..1f6017e86f
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Drawdocument.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Fontfile.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Fontfile.class
new file mode 100644
index 0000000000..ca2c1a7e5c
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Fontfile.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Header.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Header.class
new file mode 100644
index 0000000000..17490d9f5b
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Header.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Hyphenator.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Hyphenator.class
new file mode 100644
index 0000000000..2883c56dd2
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Hyphenator.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Initdraw.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Initdraw.class
new file mode 100644
index 0000000000..c13202d891
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Initdraw.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/KnuthLiangTable.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/KnuthLiangTable.class
new file mode 100644
index 0000000000..48f40b2b81
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/KnuthLiangTable.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity$1.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity$1.class
new file mode 100644
index 0000000000..cf712d35e3
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity$1.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity$Parse.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity$Parse.class
new file mode 100644
index 0000000000..1ab3335f12
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity$Parse.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity.class
new file mode 100644
index 0000000000..2abecd4329
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/MainActivity.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphBlock.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphBlock.class
new file mode 100644
index 0000000000..6f5859ce17
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphBlock.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphFormatting.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphFormatting.class
new file mode 100644
index 0000000000..56387b7f5d
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphFormatting.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphFormatting2.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphFormatting2.class
new file mode 100644
index 0000000000..620bbb0214
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/ParagraphFormatting2.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsable.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsable.class
new file mode 100644
index 0000000000..71c8c3af8e
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsable.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseblock.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseblock.class
new file mode 100644
index 0000000000..17345df8a3
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseblock.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsedocument.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsedocument.class
new file mode 100644
index 0000000000..1387a73325
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsedocument.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseeqnarray.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseeqnarray.class
new file mode 100644
index 0000000000..836e4349e1
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseeqnarray.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseequation.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseequation.class
new file mode 100644
index 0000000000..7e5ee5b6d2
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseequation.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsegraphics.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsegraphics.class
new file mode 100644
index 0000000000..f28a019205
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsegraphics.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsegraphicstable.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsegraphicstable.class
new file mode 100644
index 0000000000..e9c3b6b12b
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsegraphicstable.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsepreparation.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsepreparation.class
new file mode 100644
index 0000000000..f1f2614070
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsepreparation.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetable.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetable.class
new file mode 100644
index 0000000000..14eda8e8cc
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetable.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetext.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetext.class
new file mode 100644
index 0000000000..c270900c65
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetext.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetitle.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetitle.class
new file mode 100644
index 0000000000..df39a110b6
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parsetitle.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseverbatim.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseverbatim.class
new file mode 100644
index 0000000000..c9e6adb3eb
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Parseverbatim.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$attr.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$attr.class
new file mode 100644
index 0000000000..cca39c3e3c
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$attr.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$dimen.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$dimen.class
new file mode 100644
index 0000000000..308df33310
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$dimen.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$drawable.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$drawable.class
new file mode 100644
index 0000000000..c799bbe3eb
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$drawable.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$id.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$id.class
new file mode 100644
index 0000000000..105c89e859
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$id.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$layout.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$layout.class
new file mode 100644
index 0000000000..bb7f688494
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$layout.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$menu.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$menu.class
new file mode 100644
index 0000000000..bc010a1d97
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$menu.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$string.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$string.class
new file mode 100644
index 0000000000..d3dc0b89e3
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$string.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$style.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$style.class
new file mode 100644
index 0000000000..7f60ec156e
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R$style.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R.class
new file mode 100644
index 0000000000..c1f915877e
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/R.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Separatetext.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Separatetext.class
new file mode 100644
index 0000000000..2bf5d0ccb3
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Separatetext.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Source.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Source.class
new file mode 100644
index 0000000000..937547aba5
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Source.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/SuperBlock.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/SuperBlock.class
new file mode 100644
index 0000000000..4fe5d06ab9
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/SuperBlock.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Symbol.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Symbol.class
new file mode 100644
index 0000000000..53c3a22e11
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Symbol.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Textattributefile.class b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Textattributefile.class
new file mode 100644
index 0000000000..4e2e404a57
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/classes/worker4math/hktex2/Textattributefile.class
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/jarlist.cache b/systems/android/hktex/HKtex2/bin/jarlist.cache
new file mode 100644
index 0000000000..0565465f22
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/jarlist.cache
@@ -0,0 +1,3 @@
+# cache for current jar dependency. DO NOT EDIT.
+# format is <lastModified> <length> <SHA-1> <path>
+# Encoding is UTF-8
diff --git a/systems/android/hktex/HKtex2/bin/res/crunch/drawable-hdpi/ic_launcher.png b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000000..efa7c5f150
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/exit.png b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/exit.png
new file mode 100644
index 0000000000..5ee0f7fd38
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/exit.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/ic_launcher.png b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000000..764521c197
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/leftarrow.png b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/leftarrow.png
new file mode 100644
index 0000000000..ecf1785728
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/leftarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/leftendarrow.png b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/leftendarrow.png
new file mode 100644
index 0000000000..419ca283dd
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/leftendarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/rightarrow.png b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/rightarrow.png
new file mode 100644
index 0000000000..58de628f41
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/rightarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/rightendarrow.png b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/rightendarrow.png
new file mode 100644
index 0000000000..20145d589d
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-mdpi/rightendarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/res/crunch/drawable-xhdpi/ic_launcher.png b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000000..92fc57d00c
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/res/crunch/drawable-xxhdpi/ic_launcher.png b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000000..b6f8f4e9d3
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/res/crunch/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/bin/resources.ap_ b/systems/android/hktex/HKtex2/bin/resources.ap_
new file mode 100644
index 0000000000..14529672d3
--- /dev/null
+++ b/systems/android/hktex/HKtex2/bin/resources.ap_
Binary files differ
diff --git a/systems/android/hktex/HKtex2/gen/worker4math/hktex2/BuildConfig.java b/systems/android/hktex/HKtex2/gen/worker4math/hktex2/BuildConfig.java
new file mode 100644
index 0000000000..1883c48475
--- /dev/null
+++ b/systems/android/hktex/HKtex2/gen/worker4math/hktex2/BuildConfig.java
@@ -0,0 +1,6 @@
+/** Automatically generated file. DO NOT MODIFY */
+package worker4math.hktex2;
+
+public final class BuildConfig {
+ public final static boolean DEBUG = true;
+} \ No newline at end of file
diff --git a/systems/android/hktex/HKtex2/gen/worker4math/hktex2/R.java b/systems/android/hktex/HKtex2/gen/worker4math/hktex2/R.java
new file mode 100644
index 0000000000..741ce10703
--- /dev/null
+++ b/systems/android/hktex/HKtex2/gen/worker4math/hktex2/R.java
@@ -0,0 +1,75 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package worker4math.hktex2;
+
+public final class R {
+ public static final class attr {
+ }
+ public static final class dimen {
+ /** Default screen margins, per the Android Design guidelines.
+
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+
+ */
+ public static final int activity_horizontal_margin=0x7f040000;
+ public static final int activity_vertical_margin=0x7f040001;
+ }
+ public static final class drawable {
+ public static final int exit=0x7f020000;
+ public static final int ic_launcher=0x7f020001;
+ public static final int leftarrow=0x7f020002;
+ public static final int leftendarrow=0x7f020003;
+ public static final int rightarrow=0x7f020004;
+ public static final int rightendarrow=0x7f020005;
+ }
+ public static final class id {
+ public static final int action_settings=0x7f080002;
+ public static final int btn2=0x7f080000;
+ public static final int mylogin=0x7f080001;
+ }
+ public static final class layout {
+ public static final int activity_main=0x7f030000;
+ }
+ public static final class menu {
+ public static final int main=0x7f070000;
+ }
+ public static final class string {
+ public static final int action_settings=0x7f050001;
+ public static final int app_name=0x7f050000;
+ public static final int hello_world=0x7f050002;
+ }
+ public static final class style {
+ /**
+ Base application theme, dependent on API level. This theme is replaced
+ by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+
+
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+
+
+ Base application theme for API 11+. This theme completely replaces
+ AppBaseTheme from res/values/styles.xml on API 11+ devices.
+
+ API 11 theme customizations can go here.
+
+ Base application theme for API 14+. This theme completely replaces
+ AppBaseTheme from BOTH res/values/styles.xml and
+ res/values-v11/styles.xml on API 14+ devices.
+
+ API 14 theme customizations can go here.
+ */
+ public static final int AppBaseTheme=0x7f060000;
+ /** Application theme.
+ All customizations that are NOT specific to a particular API-level can go here.
+ */
+ public static final int AppTheme=0x7f060001;
+ }
+}
diff --git a/systems/android/hktex/HKtex2/ic_launcher-web.png b/systems/android/hktex/HKtex2/ic_launcher-web.png
new file mode 100644
index 0000000000..df509d8bbb
--- /dev/null
+++ b/systems/android/hktex/HKtex2/ic_launcher-web.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/proguard-project.txt b/systems/android/hktex/HKtex2/proguard-project.txt
new file mode 100644
index 0000000000..f2fe1559a2
--- /dev/null
+++ b/systems/android/hktex/HKtex2/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/systems/android/hktex/HKtex2/project.properties b/systems/android/hktex/HKtex2/project.properties
new file mode 100644
index 0000000000..ce39f2d0a0
--- /dev/null
+++ b/systems/android/hktex/HKtex2/project.properties
@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-18
diff --git a/systems/android/hktex/HKtex2/res/drawable-hdpi/ic_launcher.png b/systems/android/hktex/HKtex2/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000000..bee4df9e1b
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/res/drawable-mdpi/exit.png b/systems/android/hktex/HKtex2/res/drawable-mdpi/exit.png
new file mode 100644
index 0000000000..f02bd92200
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/drawable-mdpi/exit.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/res/drawable-mdpi/ic_launcher.png b/systems/android/hktex/HKtex2/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000000..ee55c6ec16
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/res/drawable-mdpi/leftarrow.png b/systems/android/hktex/HKtex2/res/drawable-mdpi/leftarrow.png
new file mode 100644
index 0000000000..8080626633
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/drawable-mdpi/leftarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/res/drawable-mdpi/leftendarrow.png b/systems/android/hktex/HKtex2/res/drawable-mdpi/leftendarrow.png
new file mode 100644
index 0000000000..c654fe3fff
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/drawable-mdpi/leftendarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/res/drawable-mdpi/rightarrow.png b/systems/android/hktex/HKtex2/res/drawable-mdpi/rightarrow.png
new file mode 100644
index 0000000000..f1b0cb4a0f
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/drawable-mdpi/rightarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/res/drawable-mdpi/rightendarrow.png b/systems/android/hktex/HKtex2/res/drawable-mdpi/rightendarrow.png
new file mode 100644
index 0000000000..777444aa45
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/drawable-mdpi/rightendarrow.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/res/drawable-xhdpi/ic_launcher.png b/systems/android/hktex/HKtex2/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000000..deb677c0d6
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/res/drawable-xxhdpi/ic_launcher.png b/systems/android/hktex/HKtex2/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000000..85a6081587
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/systems/android/hktex/HKtex2/res/layout/activity_main.xml b/systems/android/hktex/HKtex2/res/layout/activity_main.xml
new file mode 100644
index 0000000000..5e0d29a608
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/layout/activity_main.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+
+ <Button
+ android:id="@+id/btn2"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:layout_alignBottom="@+id/mylogin"
+ android:layout_gravity="center"
+ android:textSize="11sp"
+ android:ellipsize="end"
+ android:layout_marginTop="-10dp"
+ android:layout_marginBottom="-10dp"
+ android:layout_marginRight="-10dp"
+ android:layout_marginLeft="-10dp"
+ android:color="#66FF0000"
+ android:onClick="launchRingDialog"
+ android:text="Click to start parsing" />
+
+
+</LinearLayout>
diff --git a/systems/android/hktex/HKtex2/res/menu/main.xml b/systems/android/hktex/HKtex2/res/menu/main.xml
new file mode 100644
index 0000000000..c002028230
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/menu/main.xml
@@ -0,0 +1,9 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <item
+ android:id="@+id/action_settings"
+ android:orderInCategory="100"
+ android:showAsAction="never"
+ android:title="@string/action_settings"/>
+
+</menu>
diff --git a/systems/android/hktex/HKtex2/res/values-sw600dp/dimens.xml b/systems/android/hktex/HKtex2/res/values-sw600dp/dimens.xml
new file mode 100644
index 0000000000..44f01db75f
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/values-sw600dp/dimens.xml
@@ -0,0 +1,8 @@
+<resources>
+
+ <!--
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw600dp devices (e.g. 7" tablets) here.
+ -->
+
+</resources>
diff --git a/systems/android/hktex/HKtex2/res/values-sw720dp-land/dimens.xml b/systems/android/hktex/HKtex2/res/values-sw720dp-land/dimens.xml
new file mode 100644
index 0000000000..61e3fa8fbc
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/values-sw720dp-land/dimens.xml
@@ -0,0 +1,9 @@
+<resources>
+
+ <!--
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+ -->
+ <dimen name="activity_horizontal_margin">128dp</dimen>
+
+</resources>
diff --git a/systems/android/hktex/HKtex2/res/values-v11/styles.xml b/systems/android/hktex/HKtex2/res/values-v11/styles.xml
new file mode 100644
index 0000000000..3c02242ad0
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/values-v11/styles.xml
@@ -0,0 +1,11 @@
+<resources>
+
+ <!--
+ Base application theme for API 11+. This theme completely replaces
+ AppBaseTheme from res/values/styles.xml on API 11+ devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+ <!-- API 11 theme customizations can go here. -->
+ </style>
+
+</resources>
diff --git a/systems/android/hktex/HKtex2/res/values-v14/styles.xml b/systems/android/hktex/HKtex2/res/values-v14/styles.xml
new file mode 100644
index 0000000000..a91fd0372b
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/values-v14/styles.xml
@@ -0,0 +1,12 @@
+<resources>
+
+ <!--
+ Base application theme for API 14+. This theme completely replaces
+ AppBaseTheme from BOTH res/values/styles.xml and
+ res/values-v11/styles.xml on API 14+ devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+ <!-- API 14 theme customizations can go here. -->
+ </style>
+
+</resources>
diff --git a/systems/android/hktex/HKtex2/res/values/dimens.xml b/systems/android/hktex/HKtex2/res/values/dimens.xml
new file mode 100644
index 0000000000..55c1e5908c
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/values/dimens.xml
@@ -0,0 +1,7 @@
+<resources>
+
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+
+</resources>
diff --git a/systems/android/hktex/HKtex2/res/values/strings.xml b/systems/android/hktex/HKtex2/res/values/strings.xml
new file mode 100644
index 0000000000..776beedf28
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/values/strings.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="app_name">HKtex2</string>
+ <string name="action_settings">Settings</string>
+ <string name="hello_world">Hello world!</string>
+
+</resources>
diff --git a/systems/android/hktex/HKtex2/res/values/styles.xml b/systems/android/hktex/HKtex2/res/values/styles.xml
new file mode 100644
index 0000000000..6ce89c7ba4
--- /dev/null
+++ b/systems/android/hktex/HKtex2/res/values/styles.xml
@@ -0,0 +1,20 @@
+<resources>
+
+ <!--
+ Base application theme, dependent on API level. This theme is replaced
+ by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Light">
+ <!--
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+ -->
+ </style>
+
+ <!-- Application theme. -->
+ <style name="AppTheme" parent="AppBaseTheme">
+ <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+ </style>
+
+</resources>
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Block.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Block.java
new file mode 100644
index 0000000000..8d23094784
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Block.java
@@ -0,0 +1,104 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.util.SparseArray;
+import android.util.SparseBooleanArray;
+
+public final class Block {
+
+ public static volatile SparseArray<ArrayList<String>> subblock = new SparseArray<ArrayList<String>>();
+ public static volatile SparseArray<ArrayList<Float>> subblockwidth = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> subblockheight = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> subblockdepth = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> subblockxpos = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> subblockypos = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<String>> subblockattribute = new SparseArray<ArrayList<String>>();
+
+ public static volatile SparseArray<ArrayList<Float>> blockwidth = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> blockheight = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> blockdepth = new SparseArray<ArrayList<Float>>();
+
+ public static volatile SparseArray<ArrayList<String>> subblock2 = new SparseArray<ArrayList<String>>();
+ public static volatile SparseArray<ArrayList<Float>> subblockxpos2 = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> subblockypos2 = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<String>> subblockattribute2 = new SparseArray<ArrayList<String>>();
+
+ public static volatile SparseArray<Float> blockwidth2 = new SparseArray<Float>();
+ public static volatile SparseArray<Float> blockheight2 = new SparseArray<Float>();
+ public static volatile SparseArray<Float> blockdepth2 = new SparseArray<Float>();
+
+ public static volatile SparseBooleanArray error = new SparseBooleanArray();
+ public static volatile SparseArray<String> errormessage = new SparseArray<String>();
+
+ public void initerror(int tid){
+ error.put(tid, false);
+ errormessage.put(tid, "");
+ return;
+ }
+
+ public void result(int tid, int blocknumber, ArrayList<ArrayList<String>> sb, ArrayList<ArrayList<Float>> sbw,
+ ArrayList<ArrayList<Float>> sbh, ArrayList<ArrayList<Float>> sbd, ArrayList<ArrayList<Float>> sbx,
+ ArrayList<ArrayList<Float>> sby, ArrayList<ArrayList<String>> sba,
+ ArrayList<Float> bw, ArrayList<Float> bh, ArrayList<Float> bd){
+
+ int tid2=tid*100;
+ synchronized(this){
+ blockwidth.put(tid, new ArrayList<Float>());
+ blockheight.put(tid, new ArrayList<Float>());
+ blockdepth.put(tid, new ArrayList<Float>());
+
+ for (int i=0;i<=blocknumber;i++){
+ int index=tid2+i;
+ subblock.put(index, new ArrayList<String>());
+ subblockwidth.put(index, new ArrayList<Float>());
+ subblockheight.put(index, new ArrayList<Float>());
+ subblockdepth.put(index, new ArrayList<Float>());
+ subblockxpos.put(index, new ArrayList<Float>());
+ subblockypos.put(index, new ArrayList<Float>());
+ subblockattribute.put(index, new ArrayList<String>());
+
+ for (int ii=0;ii<=sb.get(i).size()-1;ii++){
+ subblock.get(index).add(sb.get(i).get(ii));
+ subblockwidth.get(index).add(sbw.get(i).get(ii));
+ subblockheight.get(index).add(sbh.get(i).get(ii));
+ subblockdepth.get(index).add(sbd.get(i).get(ii));
+ subblockxpos.get(index).add(sbx.get(i).get(ii));
+ subblockypos.get(index).add(sby.get(i).get(ii));
+ subblockattribute.get(index).add(sba.get(i).get(ii));
+ }
+ blockwidth.get(tid).add(bw.get(i));
+ blockheight.get(tid).add(bh.get(i));
+ blockdepth.get(tid).add(bd.get(i));
+ }
+
+ int l=subblock.get(tid2).size();
+
+ subblock2.put(tid, new ArrayList<String>());
+ subblockxpos2.put(tid, new ArrayList<Float>());
+ subblockypos2.put(tid, new ArrayList<Float>());
+ subblockattribute2.put(tid, new ArrayList<String>());
+
+ for (int i=0;i<=l-1;i++){
+ if (!(subblock.get(tid2).get(i).equals("!dno ")) || i==0){
+ subblock2.get(tid).add(subblock.get(tid2).get(i));
+ subblockxpos2.get(tid).add(subblockxpos.get(tid2).get(i));
+ subblockypos2.get(tid).add(subblockypos.get(tid2).get(i));
+ subblockattribute2.get(tid).add(subblockattribute.get(tid2).get(i));
+ }
+ }
+
+ blockwidth2.put(tid,blockwidth.get(tid).get(0));
+ blockheight2.put(tid,blockheight.get(tid).get(0));
+ blockdepth2.put(tid,blockdepth.get(tid).get(0));
+
+ error.put(tid, false);
+ errormessage.put(tid, "");
+ }
+ }
+ } \ No newline at end of file
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Colorfile.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Colorfile.java
new file mode 100644
index 0000000000..1fa0c600e6
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Colorfile.java
@@ -0,0 +1,173 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+
+import java.util.HashMap;
+
+public class Colorfile{
+ HashMap<String, String> colorinteger = new HashMap<String,String>();
+
+
+ public void colorfile (){
+
+
+ colorinteger.put("aliceblue","0xFFF0F8FF" );
+ colorinteger.put("antiquewhite","0xFFFAEBD7" );
+ colorinteger.put("aquamarine","0xFF7FFFD4" );
+ colorinteger.put("aure","0xFFF0FFFF" );
+ colorinteger.put("banana","0xFFE3CF57" );
+ colorinteger.put("beige","0xFFF5F5DC" );
+ colorinteger.put("bisque","0xFFFFE4C4" );
+ colorinteger.put("black","0xFF000000" );
+ colorinteger.put("blanchedalmond","0xFFFFEBCD" );
+ colorinteger.put("blueviolet","0xFF8A2BE2" );
+ colorinteger.put("blue","0xFF0000FF" );
+ colorinteger.put("brick","0xFF9C661F" );
+ colorinteger.put("brown","0xFFA52A2A" );
+ colorinteger.put("burlywood","0xFFDEB887" );
+ colorinteger.put("burntsienna","0xFF8A360F" );
+ colorinteger.put("burntumber","0xFF8A3324" );
+ colorinteger.put("cadetblue","0xFF5F9EA0" );
+ colorinteger.put("cadmiumorange","0xFFFF6103" );
+ colorinteger.put("cadmiumyellow","0xFFFF9912" );
+ colorinteger.put("carrot","0xFFED9121" );
+ colorinteger.put("chartreuse","0xFF7FFF00" );
+ colorinteger.put("chocolate","0xFFD2691E" );
+ colorinteger.put("cobalt","0xFF3D59AB" );
+ colorinteger.put("cobaltgreen","0xFF3D9140" );
+ colorinteger.put("coldgrey","0xFF808A87" );
+ colorinteger.put("cornflowerblue","0xFF6495ED" );
+ colorinteger.put("cornsilk","0xFFFFF8DC" );
+ colorinteger.put("coral","0xFFFF7F50" );
+ colorinteger.put("crimson","0xFFDC143C" );
+ colorinteger.put("cyan","0xFF00FFFF" );
+ colorinteger.put("darkgoldenrod","0xFFB8860B" );
+ colorinteger.put("darkgray","0xFFA9A9A9" );
+ colorinteger.put("darkgreen","0xFF006400" );
+ colorinteger.put("darkkhaki","0xFFBDB76B" );
+ colorinteger.put("darkolivegreen","0xFF556B2F" );
+ colorinteger.put("darkorange","0xFFFF8C00" );
+ colorinteger.put("darkorchid","0xFF9932CC" );
+ colorinteger.put("darksalmon","0xFFE9967A" );
+ colorinteger.put("darkseagreen","0xFF8FBC8F" );
+ colorinteger.put("darkslateblue","0xFF483D8B" );
+ colorinteger.put("darkslategray","0xFF2F4F4F" );
+ colorinteger.put("darkturquoise","0xFF00CED1" );
+ colorinteger.put("ddarkviolet","0xFF9400D3" );
+ colorinteger.put("deeppink","0xFFFF1493" );
+ colorinteger.put("deepskyblue","0xFF00BFFF" );
+ colorinteger.put("dimgray","0xFF696969" );
+ colorinteger.put("dodgerblue","0xFF1E90FF" );
+ colorinteger.put("eggshell","0xFFFCE6C9" );
+ colorinteger.put("emeraldgreen","0xFF00C957" );
+ colorinteger.put("firebrick","0xFFB22222" );
+ colorinteger.put("flesh","0xFFFF7D40" );
+ colorinteger.put("floralwhite","0xFFFFFAF0" );
+ colorinteger.put("forestgreen","0xFF228B22" );
+ colorinteger.put("gainsboro","0xFFDCDCDC" );
+ colorinteger.put("ghostwhite","0xFFF8F8FF" );
+ colorinteger.put("gold","0xFFFFD700" );
+ colorinteger.put("goldenrod","0xFFDAA520" );
+ colorinteger.put("gray","0xFF808080" );
+ colorinteger.put("green","0xFF008000" );
+ colorinteger.put("greenyellow","0xFFADFF2F" );
+ colorinteger.put("honeydew","0xFFF0FFF0" );
+ colorinteger.put("hotpink","0xFFFF69B4" );
+ colorinteger.put("indianred","0xFFCD5C5C" );
+ colorinteger.put("indigo","0xFF4B0082" );
+ colorinteger.put("ivory","0xFFFFFFF0" );
+ colorinteger.put("ivoryblack","0xFF292421" );
+ colorinteger.put("khaki","0xFFF0E68C" );
+ colorinteger.put("lavender","0xFFE6E6FA" );
+ colorinteger.put("lavenderblush","0xFFFFF0F5" );
+ colorinteger.put("lawngreen","0xFF7CFC00" );
+ colorinteger.put("lemonchiffon","0xFFFFFACD" );
+ colorinteger.put("lightblue","0xFFADD8E6" );
+ colorinteger.put("lightcoral","0xFFF08080" );
+ colorinteger.put("lightcyan","0xFFE0FFFF" );
+ colorinteger.put("lightgrey","0xFFD3D3D3" );
+ colorinteger.put("lightgoldenrod","0xFFFFEC8B" );
+ colorinteger.put("lightgoldenrodyellow","0xFFFAFAD2" );
+ colorinteger.put("lightpink","0xFFFFB6C1" );
+ colorinteger.put("lightsalmon","0xFFFFA07A" );
+ colorinteger.put("lightseagreen","0xFF20B2AA" );
+ colorinteger.put("lightskyblue","0xFF87CEFA" );
+ colorinteger.put("lightslateblue","0xFF8470FF" );
+ colorinteger.put("lightslategray","0xFF778899" );
+ colorinteger.put("lightsteelblue","0xFFB0C4DE" );
+ colorinteger.put("lightyellow","0xFFFFFFE0" );
+ colorinteger.put("limegreen","0xFF32CD32" );
+ colorinteger.put("linen","0xFFFAF0E6" );
+ colorinteger.put("magenta","0xFFFF00FF" );
+ colorinteger.put("manganeseblue","0xFF03A89E" );
+ colorinteger.put("maroon","0xFF800000" );
+ colorinteger.put("mediumorchid","0xFFBA55D3" );
+ colorinteger.put("mediumpurple","0xFF9370DB" );
+ colorinteger.put("mediumseagreen","0xFF3CB371" );
+ colorinteger.put("mediumslateblue","0xFF7B68EE" );
+ colorinteger.put("mediumspringgreen","0xFF00FA9A" );
+ colorinteger.put("mediumturquoise","0xFF48D1CC" );
+ colorinteger.put("mediumvioletred","0xFFC71585" );
+ colorinteger.put("melon","0xFFE3A869" );
+ colorinteger.put("midnightblue","0xFF191970" );
+ colorinteger.put("mint","0xFFBDFCC9" );
+ colorinteger.put("mintcream","0xFFF5FFFA" );
+ colorinteger.put("mistyrose","0xFFFFE4E1" );
+ colorinteger.put("moccasin","0xFFFFE4B5" );
+ colorinteger.put("navajowhite","0xFFFFDEAD" );
+ colorinteger.put("navy","0xFF000080" );
+ colorinteger.put("oldlace","0xFFFDF5E6" );
+ colorinteger.put("olivedrab","0xFF6B8E23" );
+ colorinteger.put("olive","0xFF808000" );
+ colorinteger.put("orange","0xFFFF8000" );
+ colorinteger.put("orangered","0xFFFF4500" );
+ colorinteger.put("orchid","0xFFDA70D6" );
+ colorinteger.put("palegoldenrod","0xFFEEE8AA" );
+ colorinteger.put("palegreen","0xFF98FB98" );
+ colorinteger.put("palevioletred","0xFFDB7093" );
+ colorinteger.put("paleturquoise","0xFFBBFFFF" );
+ colorinteger.put("papayawhip","0xFFFFEFD5" );
+ colorinteger.put("peachpuff","0xFFFFDAB9" );
+ colorinteger.put("peacock","0xFF33A1C9" );
+ colorinteger.put("pink","0xFFFFC0CB" );
+ colorinteger.put("plum","0xFFDDA0DD" );
+ colorinteger.put("powderblue","0xFFB0E0E6" );
+ colorinteger.put("purple","0xFF800080" );
+ colorinteger.put("raspberry","0xFF872657" );
+ colorinteger.put("rawsienna","0xFFC76114" );
+ colorinteger.put("red","0xFFFF0000" );
+ colorinteger.put("royalblue","0xFF4169E1" );
+ colorinteger.put("rosybrown","0xFFBC8F8F" );
+ colorinteger.put("salmon","0xFFFA8072" );
+ colorinteger.put("sandybrown","0xFFF4A460" );
+ colorinteger.put("sapgreen","0xFF308014" );
+ colorinteger.put("seashell","0xFFFFF5EE" );
+ colorinteger.put("sepia","0xFF5E2612" );
+ colorinteger.put("sienna","0xFFA0522D" );
+ colorinteger.put("silver","0xFFC0C0C0" );
+ colorinteger.put("skyblue","0xFF87CEEB" );
+ colorinteger.put("slateblue","0xFF6A5ACD" );
+ colorinteger.put("slategray","0xFF708090" );
+ colorinteger.put("snow","0xFFFFFAFA" );
+ colorinteger.put("springgreen","0xFF00FF7F" );
+ colorinteger.put("steelblue","0xFF4682B4" );
+ colorinteger.put("teal","0xFF008080" );
+ colorinteger.put("thistle","0xFFD8BFD8" );
+ colorinteger.put("tomato","0xFFFF6347" );
+ colorinteger.put("turquoise","0xFF40E0D0" );
+ colorinteger.put("turquoiseblue","0xFF00C78C" );
+ colorinteger.put("violet","0xFFEE82EE" );
+ colorinteger.put("violetred","0xFFD02090" );
+ colorinteger.put("warmgrey","0xFF808069" );
+ colorinteger.put("wheat","0xFFF5DEB3" );
+ colorinteger.put("white","0xFFFFFFFF" );
+ colorinteger.put("whitesmoke","0xFFF5F5F5" );
+ colorinteger.put("yellow","0xFFFFFF00" );
+}}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displaylandscape.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displaylandscape.java
new file mode 100644
index 0000000000..fce1cca25b
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displaylandscape.java
@@ -0,0 +1,141 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+
+import android.os.Bundle;
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.view.MotionEvent;
+import android.view.View;
+
+public class Displaylandscape extends Activity{
+
+ Canvas canvas = new Canvas();
+ Drawdocument drawdocument = new Drawdocument();
+ public static int contentViewTop=0;
+ public static int contentViewBottom= 0;
+ public static int height=0;
+ public static int width=0;
+ public static int tid=0;
+ public static Bitmap larrow;
+ public static Bitmap rarrow;
+ public static Bitmap lendarrow;
+ public static Bitmap rendarrow;
+ public int showpage=0;
+ ArrayList<Typeface> tf = new ArrayList<Typeface>();
+ public Integer containerwidth;
+ public Integer containerheight;
+ Boolean parsed=false;
+ Boolean firstdraw=true;
+ InputStream bitmapstream=null;
+ DocumentBitmap documentbitmap = new DocumentBitmap();
+ Paint rpaint = new Paint();
+ Rect rect = new Rect();
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(new LandscapeView(this));
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+ larrow = BitmapFactory.decodeResource(getResources(), R.drawable.leftarrow);
+ rarrow = BitmapFactory.decodeResource(getResources(), R.drawable.rightarrow);
+ lendarrow = BitmapFactory.decodeResource(getResources(), R.drawable.leftendarrow);
+ rendarrow = BitmapFactory.decodeResource(getResources(), R.drawable.rightendarrow);
+
+ documentbitmap.documentbitmap();
+ for (int i=0;i<=DocumentBitmap.bitmapname.size()-1;i++){
+ try {
+ bitmapstream=getAssets().open("bitmap/"+DocumentBitmap.bitmapname.get(i));
+ DocumentBitmap.bitmap.put(DocumentBitmap.bitmapname.get(i),BitmapFactory.decodeStream(bitmapstream));
+ } catch (IOException e) {
+ e.printStackTrace();
+ } }
+ }
+
+ private class LandscapeView extends View {
+ public LandscapeView(Context context) {
+ super(context);
+ }
+
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ containerwidth = MeasureSpec.getSize(widthMeasureSpec);
+ containerheight = MeasureSpec.getSize(heightMeasureSpec);
+ rect.set(0,0,containerwidth,containerheight);
+ rpaint.setColor(Color.WHITE);
+ }
+
+ public boolean onTouchEvent(MotionEvent event) {
+
+ float eventX = event.getX();
+ float eventY = event.getY();
+ int pagenumber;
+ if ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)){
+ pagenumber=Initdraw.pagenumber/2;}
+ else {
+ pagenumber=Initdraw.pagenumber;
+ }
+ if(event.getAction()==MotionEvent.ACTION_DOWN){
+ if(eventX >= containerwidth/3-larrow.getWidth()/2 && eventX <= containerwidth/3+larrow.getWidth()/2 && eventY >= containerheight-larrow.getHeight() && eventY <= containerheight) {
+ if (Drawdocument.showpagenumber > 0) {
+ Drawdocument.showpagenumber--;
+ invalidate();
+ }
+ } else if (eventX >= containerwidth*2/3-rarrow.getWidth()/2 && eventX <= containerwidth*2/3+rarrow.getWidth()/2 && eventY >= containerheight-rarrow.getHeight() && eventY <= containerheight){
+ if (Drawdocument.showpagenumber < pagenumber) {
+ Drawdocument.showpagenumber++;
+ invalidate();
+ }
+ }else if (eventX >= 10 && eventX <= lendarrow.getWidth()+10 && eventY >= containerheight-lendarrow.getHeight() && eventY <= containerheight){
+ Drawdocument.showpagenumber=0;
+ invalidate();
+ }else if (eventX >= containerwidth-rendarrow.getWidth()-10 && eventX <= containerwidth-10 && eventY >= containerheight-rendarrow.getHeight() && eventY <= containerheight){
+ Drawdocument.showpagenumber=pagenumber;
+ invalidate();
+ }
+ }
+
+ return true;
+ }
+@Override
+ public void onDraw(Canvas canvas) {
+
+ if (firstdraw){drawdocument.drawinit(containerwidth, containerheight); firstdraw=false;}
+
+ tf.add(Typeface.SERIF);
+ tf.add(Typeface.create(Typeface.SERIF,Typeface.ITALIC));
+ tf.add(Typeface.DEFAULT_BOLD);
+ tf.add(Typeface.MONOSPACE);
+ tf.add(Typeface.createFromAsset(getAssets(),"fonts/asana-math.ttf")); // Math symbols
+ tf.add(Typeface.SERIF); // For the moment, use serif instead
+
+
+ canvas.drawRect(rect, rpaint);
+ drawdocument.drawdocument(canvas, tf,containerwidth);
+
+ canvas.drawBitmap(larrow, containerwidth/3-larrow.getWidth()/2, containerheight-larrow.getHeight(), null);
+ canvas.drawBitmap(rarrow, containerwidth*2/3-rarrow.getWidth()/2, containerheight-rarrow.getHeight(), null);
+ canvas.drawBitmap(lendarrow, 10, containerheight-lendarrow.getHeight(), null);
+ canvas.drawBitmap(rendarrow, containerwidth-rendarrow.getWidth()-10, containerheight-rendarrow.getHeight(), null);
+
+ } }
+}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displaylandscapeerror.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displaylandscapeerror.java
new file mode 100644
index 0000000000..3ba9b17615
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displaylandscapeerror.java
@@ -0,0 +1,84 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+
+import android.os.Bundle;
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.view.MotionEvent;
+import android.view.View;
+
+public class Displaylandscapeerror extends Activity {
+
+ Canvas canvas = new Canvas();
+ public Integer containerwidth;
+ public Integer containerheight;
+ public static Bitmap exit;
+ Paint rpaint = new Paint();
+ Rect rect = new Rect();
+ Paint tpaint = new Paint();
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(new SampleView1(this));
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+ exit = BitmapFactory.decodeResource(getResources(), R.drawable.exit);
+ }
+
+ private class SampleView1 extends View {
+ public SampleView1(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ containerwidth = MeasureSpec.getSize(widthMeasureSpec);
+ containerheight = MeasureSpec.getSize(heightMeasureSpec);
+ rect.set(0,0,containerwidth,containerheight);
+ rpaint.setColor(Color.WHITE);
+ }
+
+ public boolean onTouchEvent(MotionEvent event) {
+
+ float eventX = event.getX();
+ float eventY = event.getY();
+
+ if(event.getAction()==MotionEvent.ACTION_DOWN){
+ if(eventX >= containerwidth/2-exit.getWidth()/2 && eventX <= containerwidth/2+exit.getWidth()/2 && eventY >= containerheight-exit.getHeight()-5 && eventY <= containerheight-5) {
+ finish();
+ }
+ }
+ return true;
+ }
+
+@Override
+ public void onDraw(Canvas canvas) {
+
+ tpaint.setTextSize(12);
+ tpaint.setColor(Color.RED);
+
+ canvas.drawRect(rect, rpaint);
+ int i=0;
+ for (int tid=0;tid<=Header.nthread;tid++){
+ if (Parsedocument.errormessage.indexOfKey(tid)>=0 && Parsedocument.errormessage.get(tid)!="")
+ canvas.drawText(Parsedocument.errormessage.get(tid), 10, containerheight/4+i*12, tpaint);
+ i++;
+ }
+ canvas.drawBitmap(exit, containerwidth/2-exit.getWidth()/2, containerheight-exit.getHeight()-5, null);
+ }
+}}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displayportrait.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displayportrait.java
new file mode 100644
index 0000000000..198ebf27a9
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displayportrait.java
@@ -0,0 +1,143 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+
+import android.os.Bundle;
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.view.MotionEvent;
+import android.view.View;
+
+
+public class Displayportrait extends Activity {
+
+ Canvas canvas = new Canvas();
+ Drawdocument drawdocument = new Drawdocument();
+ public static int contentViewTop=0;
+ public static int contentViewBottom= 0;
+ public static int height=0;
+ public static int width=0;
+ public static int tid=0;
+ public static Bitmap larrow;
+ public static Bitmap rarrow;
+ public static Bitmap lendarrow;
+ public static Bitmap rendarrow;
+ public int showpage=0;
+ ArrayList<Typeface> tf = new ArrayList<Typeface>();
+ public Integer containerwidth;
+ public Integer containerheight;
+ Boolean parsed=false;
+ Boolean firstdraw=true;
+ InputStream bitmapstream=null;
+ DocumentBitmap documentbitmap = new DocumentBitmap();
+ Paint rpaint = new Paint();
+ Rect rect = new Rect();
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(new SampleView1(this));
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+ larrow = BitmapFactory.decodeResource(getResources(), R.drawable.leftarrow);
+ rarrow = BitmapFactory.decodeResource(getResources(), R.drawable.rightarrow);
+ lendarrow = BitmapFactory.decodeResource(getResources(), R.drawable.leftendarrow);
+ rendarrow = BitmapFactory.decodeResource(getResources(), R.drawable.rightendarrow);
+ documentbitmap.documentbitmap();
+
+ for (int i=0;i<=DocumentBitmap.bitmapname.size()-1;i++){
+ try {
+ bitmapstream=getAssets().open("bitmap/"+DocumentBitmap.bitmapname.get(i));
+ DocumentBitmap.bitmap.put(DocumentBitmap.bitmapname.get(i),BitmapFactory.decodeStream(bitmapstream));
+ } catch (IOException e) {
+ e.printStackTrace();
+ } }
+ }
+
+ private class SampleView1 extends View {
+ public SampleView1(Context context) {
+ super(context);
+ }
+
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ containerwidth = MeasureSpec.getSize(widthMeasureSpec);
+ containerheight = MeasureSpec.getSize(heightMeasureSpec);
+ rect.set(0,0,containerwidth,containerheight);
+ rpaint.setColor(Color.WHITE);
+ }
+
+ public boolean onTouchEvent(MotionEvent event) {
+
+ float eventX = event.getX();
+ float eventY = event.getY();
+ int pagenumber;
+ if ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)){
+ pagenumber=Initdraw.pagenumber/2;}
+ else {
+ pagenumber=Initdraw.pagenumber;
+ }
+ if(event.getAction()==MotionEvent.ACTION_DOWN){
+ if(eventX >= containerwidth/3-larrow.getWidth()/2 && eventX <= containerwidth/3+larrow.getWidth()/2 && eventY >= containerheight-larrow.getHeight() && eventY <= containerheight) {
+ if (Drawdocument.showpagenumber > 0) {
+ Drawdocument.showpagenumber--;
+ invalidate();
+ }
+ } else if (eventX >= containerwidth*2/3-rarrow.getWidth()/2 && eventX <= containerwidth*2/3+rarrow.getWidth()/2 && eventY >= containerheight-rarrow.getHeight() && eventY <= containerheight){
+ if (Drawdocument.showpagenumber < pagenumber) {
+ Drawdocument.showpagenumber++;
+ invalidate();
+ }
+ }else if (eventX >= 10 && eventX <= lendarrow.getWidth()+10 && eventY >= containerheight-lendarrow.getHeight() && eventY <= containerheight){
+ Drawdocument.showpagenumber=0;
+ invalidate();
+ }else if (eventX >= containerwidth-rendarrow.getWidth()-10 && eventX <= containerwidth-10 && eventY >= containerheight-rendarrow.getHeight() && eventY <= containerheight){
+ Drawdocument.showpagenumber=pagenumber;
+ invalidate();
+ }
+ }
+
+ return true;
+ }
+@Override
+ public void onDraw(Canvas canvas) {
+
+ if (firstdraw){drawdocument.drawinit(containerwidth, containerheight); firstdraw=false;}
+
+ tf.add(Typeface.SERIF);
+ tf.add(Typeface.create(Typeface.SERIF,Typeface.ITALIC));
+ tf.add(Typeface.DEFAULT_BOLD);
+ tf.add(Typeface.MONOSPACE);
+ tf.add(Typeface.createFromAsset(getAssets(),"fonts/asana-math.ttf")); // Math symbols
+ tf.add(Typeface.SERIF); // For the moment, use serif instead
+
+
+ canvas.drawRect(rect, rpaint);
+ drawdocument.drawdocument(canvas, tf, containerwidth);
+
+ canvas.drawBitmap(larrow, containerwidth/3-larrow.getWidth()/2, containerheight-larrow.getHeight(), null);
+ canvas.drawBitmap(rarrow, containerwidth*2/3-rarrow.getWidth()/2, containerheight-rarrow.getHeight(), null);
+ canvas.drawBitmap(lendarrow, 10, containerheight-lendarrow.getHeight(), null);
+ canvas.drawBitmap(rendarrow, containerwidth-rendarrow.getWidth()-10, containerheight-rendarrow.getHeight(), null);
+
+ } }
+
+}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displayportraiterror.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displayportraiterror.java
new file mode 100644
index 0000000000..b03e78153b
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Displayportraiterror.java
@@ -0,0 +1,85 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+
+import android.os.Bundle;
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.view.MotionEvent;
+import android.view.View;
+
+public class Displayportraiterror extends Activity {
+
+ Canvas canvas = new Canvas();
+ public Integer containerwidth;
+ public Integer containerheight;
+ public static Bitmap exit;
+ Paint rpaint = new Paint();
+ Rect rect = new Rect();
+ Paint tpaint = new Paint();
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(new SampleView1(this));
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+ exit = BitmapFactory.decodeResource(getResources(), R.drawable.exit);
+ }
+
+ private class SampleView1 extends View {
+ public SampleView1(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ containerwidth = MeasureSpec.getSize(widthMeasureSpec);
+ containerheight = MeasureSpec.getSize(heightMeasureSpec);
+ rect.set(0,0,containerwidth,containerheight);
+ rpaint.setColor(Color.WHITE);
+ }
+
+ public boolean onTouchEvent(MotionEvent event) {
+
+ float eventX = event.getX();
+ float eventY = event.getY();
+
+ if(event.getAction()==MotionEvent.ACTION_DOWN){
+ if(eventX >= containerwidth/2-exit.getWidth()/2 && eventX <= containerwidth/2+exit.getWidth()/2 && eventY >= containerheight-exit.getHeight()-5 && eventY <= containerheight-5) {
+ finish();
+ }
+ }
+
+ return true;
+ }
+
+@Override
+ public void onDraw(Canvas canvas) {
+
+ tpaint.setTextSize(12);
+ tpaint.setColor(Color.RED);
+
+ canvas.drawRect(rect, rpaint);
+ int i=0;
+ for (int tid=0;tid<=Header.nthread;tid++){
+ if (Parsedocument.errormessage.indexOfKey(tid)>=0 && Parsedocument.errormessage.get(tid)!="")
+ canvas.drawText(Parsedocument.errormessage.get(tid), 10, containerheight/4+i*12, tpaint);
+ i++;
+ }
+ canvas.drawBitmap(exit, containerwidth/2-exit.getWidth()/2, containerheight-exit.getHeight()-5, null);
+ }
+}}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/DocumentBitmap.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/DocumentBitmap.java
new file mode 100644
index 0000000000..0fe9712489
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/DocumentBitmap.java
@@ -0,0 +1,29 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import android.graphics.Bitmap;
+
+public class DocumentBitmap {
+
+ public static final ArrayList<String> bitmapname = new ArrayList<String>();
+ public static ArrayList<String> usedbitmap = new ArrayList<String>();
+ public static HashMap<String,Bitmap> bitmap = new HashMap<String,Bitmap>();
+ public static HashMap<String,Float> bitmapwidth = new HashMap<String,Float>();
+ public static HashMap<String,Float> bitmapheight = new HashMap<String,Float>();
+
+ public void documentbitmap(){
+ bitmapname.add("leftarrow.png");
+ bitmapname.add("rightarrow.png");
+ bitmapname.add("leftendarrow.png");
+ bitmapname.add("rightendarrow.png");
+ }
+}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Drawblock.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Drawblock.java
new file mode 100644
index 0000000000..e60e3ad724
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Drawblock.java
@@ -0,0 +1,164 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import android.graphics.Color;
+import android.graphics.Typeface;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+
+public class Drawblock {
+
+ float moleculeheight = 0.0f;
+ float moleculelength = 0.0f;
+
+ public void drawblock(Canvas canvas,
+ ArrayList<String> block,
+ ArrayList<Float> xpos,
+ ArrayList<Float> ypos,
+ ArrayList<String> attribute,
+ HashMap<String, String> symbolunicode, HashMap<String, Integer> symboltype, HashMap<String, String> matchsymbol,
+ ArrayList<Typeface> tf ) {
+
+ int i,j1,ii,i2=0;
+ int numatom = 0;
+ int fontcolor=0;
+
+ String key = "";
+
+ char temp = ' ';
+ char charExclaim = '!';
+
+ Colorfile color = new Colorfile();
+ color.colorfile();
+
+ Paint mPaint = new Paint();
+ mPaint.setColor(Color.BLACK);
+ Paint lPaint= new Paint();
+ Paint sPaint = new Paint();
+ sPaint.setTypeface(tf.get(4));
+
+
+ numatom = block.size();
+
+ for (i=0;i<=numatom-1;i++){
+ if (attribute.get(i).charAt(0)=='g'){
+ canvas.drawBitmap(DocumentBitmap.bitmap.get(block.get(i)), xpos.get(i), ypos.get(i), null);
+ } else if (attribute.get(i).charAt(0)=='G'){
+ canvas.drawBitmap(DocumentBitmap.bitmap.get(block.get(i)), xpos.get(i), ypos.get(i), null);
+ } else if (attribute.get(i).charAt(0)=='1'){
+ mPaint.setUnderlineText(false);mPaint.setStrikeThruText(false);mPaint.setTextSkewX(0);mPaint.setAlpha(255);mPaint.setShadowLayer(0,0,0,0);
+ mPaint.setTextSize(Integer.parseInt(attribute.get(i).substring(1,4)));
+
+ Long il=Long.parseLong(attribute.get(i).substring(9,17),16);
+ ii=il.intValue();
+ mPaint.setColor(ii);
+ mPaint.setTypeface(tf.get(Integer.parseInt(attribute.get(i).substring(4,7))));
+ canvas.drawText(block.get(i), xpos.get(i), ypos.get(i), mPaint);
+ } else {
+ String atom = block.get(i);
+
+ Float positionx = xpos.get(i);
+ Float positiony = ypos.get(i);
+ String textattribute=attribute.get(i);
+
+ if (textattribute.charAt(0)=='0'){
+ if (textattribute.charAt(18) == '1'){mPaint.setUnderlineText(true);sPaint.setUnderlineText(true);} else {mPaint.setUnderlineText(false);sPaint.setUnderlineText(false);};
+ if (textattribute.charAt(19) == '1'){mPaint.setStrikeThruText(true);sPaint.setStrikeThruText(true);} else{mPaint.setStrikeThruText(false);sPaint.setStrikeThruText(false);} ;
+ if (textattribute.substring(20,25)!="+0.00"){mPaint.setTextSkewX(Float.parseFloat(textattribute.substring(20,25)));sPaint.setTextSkewX(Float.parseFloat(textattribute.substring(20,25)));}
+ else {mPaint.setTextSkewX(0);sPaint.setTextSkewX(0);} ;
+ if (textattribute.substring(25,29)!="0xFF"){ mPaint.setAlpha(Integer.parseInt(textattribute.substring(27,29),16));sPaint.setAlpha(Integer.parseInt(textattribute.substring(27,29),16));}
+ else {mPaint.setAlpha(255);sPaint.setAlpha(255);};
+ if (textattribute.charAt(29) != '0'){
+ Long il=Long.parseLong(color.colorinteger.get(textattribute.substring(32)).substring(2),16);
+ fontcolor=il.intValue();
+ mPaint.setShadowLayer(Float.parseFloat(textattribute.substring(29,30)),Float.parseFloat(textattribute.substring(30,31)),
+ Float.parseFloat(textattribute.substring(31,32)),fontcolor);
+ sPaint.setShadowLayer(Float.parseFloat(textattribute.substring(29,30)),Float.parseFloat(textattribute.substring(30,31)),
+ Float.parseFloat(textattribute.substring(31,32)),fontcolor);
+ } else {
+ mPaint.setShadowLayer(0,0,0,0);sPaint.setShadowLayer(0,0,0,0);
+ };
+ } else {
+ mPaint.setUnderlineText(false);sPaint.setUnderlineText(false);mPaint.setStrikeThruText(false);sPaint.setStrikeThruText(false);
+ mPaint.setShadowLayer(0,0,0,0);sPaint.setShadowLayer(0,0,0,0);mPaint.setAlpha(255);sPaint.setAlpha(255);
+ mPaint.setTextSkewX(0);sPaint.setTextSkewX(0);
+ }
+ mPaint.setTextSize(Integer.parseInt(attribute.get(i).substring(1,4)));
+ Long il=Long.parseLong(attribute.get(i).substring(9,17),16);
+ fontcolor=il.intValue();
+
+ j1=0;
+ for (int j=0; j1<=atom.length()-1 && j<1000; j++){
+
+ temp = atom.charAt(j1);
+ if (temp != charExclaim) {
+
+ int fontinteger=Integer.parseInt(attribute.get(i).substring(4,7));
+
+ mPaint.setColor(fontcolor);
+ mPaint.setTypeface(tf.get(fontinteger));
+ canvas.drawText(Character.toString(temp), positionx, positiony, mPaint);
+
+ float tempsize = mPaint.measureText(Character.toString(temp));
+ positionx = positionx + tempsize;
+ j1++;
+ } else if (temp == charExclaim) {
+ key ="";
+ for (i2=j1+1;!(atom.charAt(i2)==' ');i2++){
+ key = key + atom.charAt(i2);
+ }
+ if (symboltype.containsKey(key) && (symboltype.get(key)<=13 ||symboltype.get(key)>=16) ){
+ sPaint.setTextSize(Integer.parseInt(attribute.get(i).substring(1,4)));
+ sPaint.setColor(fontcolor);
+ canvas.drawText(symbolunicode.get(key), positionx, positiony, sPaint);
+ j1=j1+key.length()+2;
+ }else if (symboltype.containsKey(key) && (symboltype.get(key)==14 || symboltype.get(key)==15)){
+ mPaint.setTextSize(Integer.parseInt(attribute.get(i).substring(1,4)));
+ mPaint.setTypeface(tf.get(5));
+ mPaint.setColor(fontcolor);
+ canvas.drawText(symbolunicode.get(key), positionx, positiony, mPaint);
+ j1=j1+key.length()+2;
+ }else if (key.equals("hlin")){
+ lPaint.setColor(fontcolor);
+ int strokewidth=1;
+ lPaint.setStrokeWidth(strokewidth);
+ float tempy=Integer.parseInt(attribute.get(i).substring(1,4));
+ canvas.drawLine(positionx, positiony, positionx+tempy, positiony, lPaint);
+ j1+=6;
+ }else if (key.equals("vlin")){
+ lPaint.setColor(fontcolor);
+ int strokewidth=1;
+ lPaint.setStrokeWidth(strokewidth);
+ float tempy=Integer.parseInt(attribute.get(i).substring(1,4));
+ canvas.drawLine(positionx, positiony, positionx, positiony-tempy, lPaint);
+ j1+=6;
+ }else if (key.equals("dno")){
+// do nothing
+ j1+=5;
+ } else if (key.equals("hsp")){
+ j1+=5;
+ } else if (key.equals("vsp")){
+ j1+=5;
+ }else if (key.equals("gho")){
+ j1+=5;
+ }else {
+ mPaint.setColor(fontcolor);
+ mPaint.setTypeface(tf.get(0));
+ canvas.drawText(symbolunicode.get(key), positionx, positiony, mPaint);
+
+ j1=j1+key.length()+2; }
+
+ }
+ } }}
+ }
+ }
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Drawdocument.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Drawdocument.java
new file mode 100644
index 0000000000..8ca8c7ac3e
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Drawdocument.java
@@ -0,0 +1,96 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+import android.graphics.Typeface;
+import android.graphics.Canvas;
+import java.util.ArrayList;
+
+public class Drawdocument {
+
+ public static int ii=0;
+ public static int showpagenumber=0;
+
+ SuperBlock superblock = new SuperBlock();
+ Parsedocument parsedocument = new Parsedocument();
+ public static float containerwidth2;
+ public static float containerheight2;
+ public static float height=0;
+
+ public void drawinit(float containerwidth,float containerheight){
+ containerwidth2=containerwidth;
+ containerheight2=containerheight;
+ Initdraw initdraw = new Initdraw();
+ initdraw.initdraw(containerwidth, containerheight);
+ return;
+ }
+
+
+ public void drawdocument(Canvas canvas, ArrayList<Typeface> tf, Integer containerwidth){
+ Drawblock draw = new Drawblock();
+ int tid=0;
+ int showpagenumber2;
+ if ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)){
+ showpagenumber2=showpagenumber*2;}
+ else {
+ showpagenumber2=showpagenumber;
+ }
+ if (Initdraw.pageline.indexOfKey(showpagenumber2)>=0){
+ int index=SuperBlock.superblocklinenumber.get(0)+1;
+ int index2=0;
+
+ for (int ii=0;ii<=Initdraw.pageline.get(showpagenumber2).size()-1;ii++){
+ int i=Initdraw.pageline.get(showpagenumber2).get(ii);
+ while(i>=index){
+ tid++;index2=index;index=index+SuperBlock.superblocklinenumber.get(tid)+1;}
+ int tid2=tid*1000+(i-index2);
+
+// add page number
+ if(Header.showpagenumber && i==Initdraw.pageline.get(showpagenumber2).get(Initdraw.pageline.get(showpagenumber2).size()-1)){
+ SuperBlock.blockatom.get(tid2).add(Integer.toString(showpagenumber+Header.firstpage));
+ SuperBlock.blockxpos.get(tid2).add(containerwidth2/2);
+ SuperBlock.blockypos.get(tid2).add(containerheight2-Header.bottomsidemargin+10.0f);
+ SuperBlock.blockattribute.get(tid2).add(Header.defaultattribute);
+ }
+ if (SuperBlock.blockatom.get(tid2).size()>0){
+ draw.drawblock(canvas, SuperBlock.blockatom.get(tid2),
+ SuperBlock.blockxpos.get(tid2),SuperBlock.blockypos.get(tid2),
+ SuperBlock.blockattribute.get(tid2), Symbol.symbolunicode, Symbol.symboltype,
+ Symbol.matchsymbol,
+ tf);
+ }
+ }}
+ if ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns) ){
+ tid=0;
+ showpagenumber2=showpagenumber*2+1;
+ if (Initdraw.pageline.indexOfKey(showpagenumber2)>=0){
+ int index=SuperBlock.superblocklinenumber.get(0)+1;
+ int index2=0;
+
+ for (int ii=0;ii<=Initdraw.pageline.get(showpagenumber2).size()-1;ii++){
+ int i=Initdraw.pageline.get(showpagenumber2).get(ii);
+ while(i>=index){
+ tid++;index2=index;index=index+SuperBlock.superblocklinenumber.get(tid)+1;}
+ int tid2=tid*1000+(i-index2);
+
+ float t=containerwidth/2-Header.leftsidemargin+Header.rightsidemargin/2;
+ ArrayList<Float> xpos = new ArrayList<Float>();
+ for (int iii=0;iii<=SuperBlock.blockxpos.get(tid2).size()-1;iii++){
+ xpos.add(SuperBlock.blockxpos.get(tid2).get(iii)+t);
+ }
+ if (SuperBlock.blockatom.get(tid2).size()>0){
+ draw.drawblock(canvas, SuperBlock.blockatom.get(tid2),
+ xpos,SuperBlock.blockypos.get(tid2),
+ SuperBlock.blockattribute.get(tid2), Symbol.symbolunicode, Symbol.symboltype,
+ Symbol.matchsymbol,
+ tf);
+ }
+ }}
+ }}
+ }
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Fontfile.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Fontfile.java
new file mode 100644
index 0000000000..97378bf3e9
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Fontfile.java
@@ -0,0 +1,24 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+
+public class Fontfile{
+ ArrayList<String> fontname = new ArrayList<String>();
+
+ public void fontfile (){
+
+ fontname.add("sf");
+ fontname.add("it");
+ fontname.add("bf");
+ fontname.add("mo");
+ fontname.add("asana");
+ fontname.add("rm");
+}}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Header.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Header.java
new file mode 100644
index 0000000000..509d7de767
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Header.java
@@ -0,0 +1,59 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+import java.util.HashMap;
+
+public class Header {
+
+ public static final int topsidemargin=30;
+ public static final int bottomsidemargin=30;
+ public static final int leftsidemargin = 30;
+ public static final int rightsidemargin = 30;
+ public static final int linegap=5;
+ public static final int columngap = 2;
+ public static final int characterheadroom = 2;
+ public static final int firstpage = 1;
+ public static final int defaultfont = 0;
+ public static final int minfontsize = 8;
+ public static final int maxfontsize = 80;
+ public static final int indent = 40;
+ public static final int fontsize = 12; // value between maxfontsize and minfontsize;
+ public static final float bigopsize = 2.0f; // size factor for big operator
+ public static final float bigbigopsize=3.0f; // size factor for big big operator
+ public static final float firstypos=20;
+ public static final Boolean dohyphenation=false;
+ public static final Boolean scrollview=false;
+ public static final Boolean showpagenumber=true;
+ public static final Boolean phone_orientation_portrait=true;
+ public static final Boolean tablet_orientation_landscape=false;
+ public static final int twocolumns_criteria=700;
+ public static final String defaultattribute="00120000xff00000000+0.000xFF0000xFF000000"; // char(1) to char(3) is the font size
+
+ public static final String defaultcolor="black";
+ public static final HashMap<String, Float> sizefactor = new HashMap<String,Float>();
+//
+// The following will be changed after launched
+//
+ public static Boolean phone_twocolumns=false; // if container width < twocolumns_criteria, this Boolean will be changed to false;
+ public static Boolean tablet_twocolumns=false; // if container width < twocolumns_criteria, this Boolean will be changed to false;
+ public static HashMap<Long,Integer> threadid = new HashMap<Long,Integer>();
+ public static int nthread=10; // min is 1, max is 10
+ public static Boolean tablet=true;
+
+ public void header(){
+ sizefactor.put("Huge",2.0f);
+ sizefactor.put("huge",1.75f);
+ sizefactor.put("Large",1.5f);
+ sizefactor.put("large",1.25f);
+ sizefactor.put("normalsize",1.0f);
+ sizefactor.put("small",0.75f);
+ sizefactor.put("scriptsize",0.6f);
+ sizefactor.put("tiny",0.5f);
+ }
+}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Hyphenator.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Hyphenator.java
new file mode 100644
index 0000000000..75492a8b2b
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Hyphenator.java
@@ -0,0 +1,88 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+public class Hyphenator {
+
+ protected String hyphenate(String word) {
+
+ int i,i2,i3,i4=0;
+ int ii=0;
+ int jj=0;
+ int l=0;
+ int l2=0;
+
+
+ KnuthLiangTable pattern = new KnuthLiangTable();
+ pattern.list();
+
+
+ String hyphenatedword = "";
+ String wordi="";
+ l=word.length();
+ if (l > 2){
+ for (i=0;i<=l-2;i++){
+ wordi=wordi+word.charAt(i)+"0";
+ }
+ wordi=".0"+wordi+word.charAt(l-1)+"0.";
+ word="."+word+".";
+ String word1="";
+ String word2="";
+ String word3="";
+ l=word.length();
+ int starti = 0;
+ for (i2=starti; i2<=l-2; i2++){
+ int ll=l-1-i2;
+ i3=i2+Math.min(ll, 7);
+ for (i4=i2+2;i4<=i3;i4++){
+ word1=word.substring(i2,i4);
+ if (pattern.pattern2.contains(word1)){
+ i=pattern.pattern2.headSet(word1).size();
+ word2=pattern.pattern1[i];
+ l2=word2.length();
+ jj=0;
+ word3="";
+ for (ii=0;jj<=l2-1;ii++){
+ if (word2.charAt(jj)== '1' || word2.charAt(jj)== '2'
+ || word2.charAt(jj)== '3' || word2.charAt(jj)== '4'
+ || word2.charAt(jj)== '5')
+ {if (word3.length()>=1){word3=word3.substring(0,word3.length()-1)+word2.charAt(jj);}else{word3=word2.substring(jj,jj+1);};
+ jj++;
+ }
+ else {
+ word3=word3+word2.charAt(jj)+"0";
+ jj++;
+ };
+ };
+ l2=word3.length();
+ if (word3.charAt(0) == '1' || word3.charAt(0) == '2' || word3.charAt(0) == '3'|| word3.charAt(0) == '4' || word3.charAt(0) == '5'){
+ for (ii=0;ii<=l2-1;ii+=1){
+ if(word3.charAt(ii)>wordi.charAt(i2*2+ii-1)){
+ wordi=wordi.substring(0,i2*2+ii-1)+word3.charAt(ii)+wordi.substring(i2*2+ii);}
+ };
+ } else {
+ for (ii=0;ii<=l2-1;ii+=1){
+ if(word3.charAt(ii)>wordi.charAt(i2*2+ii)){
+ wordi=wordi.substring(0,i2*2+ii)+word3.charAt(ii)+wordi.substring(i2*2+ii+1);}
+ };
+ };
+ }
+ }
+ };
+ l=wordi.length();
+ word=wordi.substring(2,3)+wordi.substring(4,5);
+ for (i=5;i<=l-5;i+=2){
+ if (wordi.charAt(i)== '1' || wordi.charAt(i) == '3' || wordi.charAt(i) == '5'){word=word+"-"+wordi.charAt(i+1);}
+ else {word=word+wordi.charAt(i+1);};
+ }
+ hyphenatedword=word+wordi.substring(l-3,l-2);
+ }
+ else { hyphenatedword=word;}
+ return hyphenatedword;
+ }}
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Initdraw.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Initdraw.java
new file mode 100644
index 0000000000..cdb9f48150
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Initdraw.java
@@ -0,0 +1,207 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.util.SparseArray;
+
+public class Initdraw {
+
+ public static int ii=0;
+ public static int showpagenumber=0;
+
+ SuperBlock superblock = new SuperBlock();
+ Parsedocument parsedocument = new Parsedocument();
+ public static SparseArray<ArrayList<Integer>> pageline = new SparseArray<ArrayList<Integer>>();
+ public static SparseArray<ArrayList<Integer>> pageline2 = new SparseArray<ArrayList<Integer>>();
+ public static Integer pagenumber = -1;
+ public static Integer totalline=-1;
+ public static float containerwidth2;
+ public static float containerheight2;
+ public static float height=0;
+
+ public void initdraw(float containerwidth,float containerheight){
+ containerwidth2=containerwidth;
+ containerheight2=containerheight;
+ float ypos=Header.firstypos+Header.topsidemargin+SuperBlock.superblocklineheight.get(0).get(0)-SuperBlock.superblocklinedepth.get(0).get(0);
+ float viewportheight=containerheight-Header.topsidemargin-Header.bottomsidemargin;
+
+ for (int i=0;i<=Header.nthread-1;i++){
+ for (int ii=0;ii<=SuperBlock.superblocklinenumber.get(i);ii++){
+ int index=i*1000+ii;
+ for (int iii=0;iii<=SuperBlock.blockatom.get(index).size()-1;iii++){
+ float t=SuperBlock.blockypos.get(index).get(iii)+ypos;
+ SuperBlock.blockypos.get(index).set(iii, t);
+ }
+ }
+
+ ypos=ypos+SuperBlock.ypos.get(i);
+ }
+
+ pagenumber++;
+ pageline.put(pagenumber, new ArrayList<Integer>());
+ ypos=0.0f;
+ float adjusty=0.0f;
+ for (int i=0;i<=Header.nthread-1;i++){
+
+ int i2=i*1000;
+ int tablenumber=1;
+
+ for (int ii=0;ii<=SuperBlock.superblocklinenumber.get(i);ii++){
+
+ int index=i2+ii;
+ if (tablenumber <=SuperBlock.tablenumber.get(i) && ii==SuperBlock.tablestartline.get(tablenumber+i2)){
+ float height2=SuperBlock.blockypos.get(index).get(0)-(SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii))+SuperBlock.tableheight.get(i2+tablenumber)-ypos;
+
+ if (height2>viewportheight && !SuperBlock.pagebreak.get(i).contains(ii)){
+
+// If there is table which does not fit into current page, move the line behind the table ahead.
+
+ int j=i;
+ int j2=j*1000;
+ int jj=SuperBlock.tableendline.get(tablenumber+j2)+1;
+
+ if(jj>SuperBlock.superblocklinenumber.get(j)
+ &&(tablenumber+1<=SuperBlock.tablenumber.get(j) && jj !=SuperBlock.tablestartline.get(tablenumber+j2+1))
+ && j<Header.nthread-1){jj=jj-SuperBlock.superblocklinenumber.get(j);j++;j2=j*1000;}
+ int totalline2=totalline+(SuperBlock.tableendline.get(j2+tablenumber)-SuperBlock.tablestartline.get(i2+tablenumber))+2;
+
+ if (jj<=SuperBlock.superblocklinenumber.get(j) && (tablenumber+1>SuperBlock.tablenumber.get(j) || jj !=SuperBlock.tablestartline.get(tablenumber+j2+1))){
+
+ index=j2+jj;
+
+ if (SuperBlock.blockatom.indexOfKey(index)<0){j++;j2=j*1000;jj=0;index=j2+jj;}
+ while (SuperBlock.blockypos.get(index).size()==0){jj++;index=j2+jj;totalline2++;};
+ float height=SuperBlock.blockypos.get(index).get(0)+SuperBlock.superblocklinedepth.get(j).get(jj)-SuperBlock.tableheight.get(i2+tablenumber)-ypos;
+
+ while(height<viewportheight
+ && (tablenumber+1>SuperBlock.tablenumber.get(j) || jj !=SuperBlock.tablestartline.get(tablenumber+j2+1))
+ && !(jj== SuperBlock.superblocklinenumber.get(j) && j==Header.nthread-1)
+ && !SuperBlock.pagebreak.get(j).contains(jj)){
+
+ pageline.get(pagenumber).add(totalline2);
+ if (SuperBlock.blockypos.get(index).size()>0){
+ adjusty=SuperBlock.superblocklineheight.get(j).get(jj)+adjusty;
+ for (int jjj=0;jjj<=SuperBlock.blockatom.get(index).size()-1;jjj++){
+ float t=SuperBlock.blockypos.get(index).get(jjj)-ypos-SuperBlock.tableheight.get(i2+tablenumber);
+ SuperBlock.blockypos.get(index).set(jjj, t);
+ }}
+ jj++;if(jj>SuperBlock.superblocklinenumber.get(j) && j<Header.nthread-1){j++;jj=0;j2=j*1000;}
+ index=j2+jj;
+ totalline2++;
+ height=SuperBlock.blockypos.get(index).get(0)+SuperBlock.superblocklinedepth.get(j).get(jj)-SuperBlock.tableheight.get(i2+tablenumber)-ypos;
+ }
+ if(height<viewportheight && (jj== SuperBlock.superblocklinenumber.get(j) && j==Header.nthread-1)){
+ pageline.get(pagenumber).add(totalline2);
+ if (SuperBlock.blockypos.get(index).size()>0){
+ adjusty=SuperBlock.superblocklineheight.get(j).get(jj)+adjusty;
+ for (int jjj=0;jjj<=SuperBlock.blockatom.get(index).size()-1;jjj++){
+ float t=SuperBlock.blockypos.get(index).get(jjj)-ypos-SuperBlock.tableheight.get(i2+tablenumber);
+ SuperBlock.blockypos.get(index).set(jjj, t);
+ }}
+ }
+ }
+// Now adjust the table
+ pagenumber++;
+ pageline.put(pagenumber,new ArrayList<Integer>());
+ index=i2+ii;
+ float t=Header.topsidemargin+SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii);
+ ypos=SuperBlock.blockypos.get(index).get(0)-t;
+ if (((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber==1){ypos=ypos-SuperBlock.titleheight.get(0);}
+
+ for (ii=SuperBlock.tablestartline.get(i2+tablenumber);ii<=SuperBlock.tableendline.get(i2+tablenumber);ii++){
+ index=i2+ii;
+ totalline++;pageline.get(pagenumber).add(totalline);
+ for (int iii=0;iii<=SuperBlock.blockatom.get(index).size()-1;iii++){
+ t=SuperBlock.blockypos.get(index).get(iii)-ypos;
+ SuperBlock.blockypos.get(index).set(iii, t);
+ }
+ }
+ totalline=totalline2-1;
+ i=j;
+ i2=i*1000;
+ tablenumber++;
+ if (jj== SuperBlock.superblocklinenumber.get(j) && j==Header.nthread-1) {ii=jj;} else{ii=jj-1;}
+ index=i2+ii;
+ if (SuperBlock.pagebreak.get(i).contains(ii)){
+ pagenumber++;
+ if (SuperBlock.pagebreak.get(i).contains(ii) && ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber%2==1){pagenumber++;};
+ pageline.put(pagenumber, new ArrayList<Integer>());
+ t=Header.topsidemargin+SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii);
+ ypos=SuperBlock.blockypos.get(index).get(0)-t;
+ } else {
+ ypos=ypos+adjusty;
+ adjusty=0.0f;
+ }
+
+ } else if (!SuperBlock.pagebreak.get(i).contains(ii)){
+
+// table can fit into current page.
+ totalline++;
+ if (SuperBlock.blockypos.get(index).size()>0){
+ float height=SuperBlock.blockypos.get(index).get(0)+SuperBlock.superblocklinedepth.get(i).get(ii)-ypos;
+ if (height>viewportheight && SuperBlock.pagebreak.get(i).contains(ii)){
+ pagenumber++;
+
+ if (SuperBlock.pagebreak.get(i).contains(ii) && ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber%2==1){pagenumber++;};
+ pageline.put(pagenumber, new ArrayList<Integer>());
+ float t=Header.topsidemargin+SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii);
+ ypos=SuperBlock.blockypos.get(index).get(0)-t;
+ if (((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber==1){ypos=ypos-SuperBlock.titleheight.get(0);}
+ }
+ pageline.get(pagenumber).add(totalline);
+
+ for (int iii=0;iii<=SuperBlock.blockatom.get(index).size()-1;iii++){
+ float t=SuperBlock.blockypos.get(index).get(iii)-ypos;
+ SuperBlock.blockypos.get(index).set(iii, t);
+ }}
+ }else {
+// pagebreak, new page for table or graphics
+ totalline++;
+ if (SuperBlock.blockypos.get(index).size()>0){
+ float height=SuperBlock.blockypos.get(index).get(0)+SuperBlock.superblocklinedepth.get(i).get(ii)-ypos;
+
+ if (height>viewportheight || SuperBlock.pagebreak.get(i).contains(ii)){
+ pagenumber++;
+ if (SuperBlock.pagebreak.get(i).contains(ii) && ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber%2==1){pagenumber++;};
+ pageline.put(pagenumber, new ArrayList<Integer>());
+ float t=Header.topsidemargin+SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii);
+ ypos=SuperBlock.blockypos.get(index).get(0)-t;
+ if (((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber==1){ypos=ypos-SuperBlock.titleheight.get(0)-Header.firstypos;}
+ }
+ pageline.get(pagenumber).add(totalline);
+ for (int iii=0;iii<=SuperBlock.blockatom.get(index).size()-1;iii++){
+ float t=SuperBlock.blockypos.get(index).get(iii)-ypos;
+ SuperBlock.blockypos.get(index).set(iii, t);
+ }}
+ }
+ } else {
+// Not table nor graphics
+ totalline++;
+ if (SuperBlock.blockypos.get(index).size()>0){
+ float height=SuperBlock.blockypos.get(index).get(0)+SuperBlock.superblocklinedepth.get(i).get(ii)-ypos;
+
+ if (height>viewportheight || SuperBlock.pagebreak.get(i).contains(ii)){
+ pagenumber++;
+ if (SuperBlock.pagebreak.get(i).contains(ii) && ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber%2==1){pagenumber++;};
+ pageline.put(pagenumber, new ArrayList<Integer>());
+ float t=Header.topsidemargin+SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii);
+ ypos=SuperBlock.blockypos.get(index).get(0)-t;
+ if (((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber==1){ypos=ypos-SuperBlock.titleheight.get(0)-Header.firstypos;}
+ }
+ pageline.get(pagenumber).add(totalline);
+ for (int iii=0;iii<=SuperBlock.blockatom.get(index).size()-1;iii++){
+ float t=SuperBlock.blockypos.get(index).get(iii)-ypos;
+ SuperBlock.blockypos.get(index).set(iii, t);
+ }}
+ }
+ }
+ }
+ return;
+ }
+}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/KnuthLiangTable.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/KnuthLiangTable.java
new file mode 100644
index 0000000000..902c2eb4ec
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/KnuthLiangTable.java
@@ -0,0 +1,8919 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.*;
+
+public class KnuthLiangTable {
+ String pattern1[] = new String[]{
+ ".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"
+ };
+
+
+ TreeSet<String> pattern2 = new TreeSet<String>();
+
+ public void list(){
+
+ pattern2.add(".ach");
+ pattern2.add(".adder");
+ pattern2.add(".aft");
+ pattern2.add(".alt");
+ pattern2.add(".amat");
+ pattern2.add(".anc");
+ pattern2.add(".ang");
+ pattern2.add(".anim");
+ pattern2.add(".ant");
+ pattern2.add(".ante");
+ pattern2.add(".antis");
+ pattern2.add(".ars");
+ pattern2.add(".artie");
+ pattern2.add(".arty");
+ pattern2.add(".asc");
+ pattern2.add(".asp");
+ pattern2.add(".ass");
+ pattern2.add(".aster");
+ pattern2.add(".atom");
+ pattern2.add(".aud");
+ pattern2.add(".avi");
+ pattern2.add(".awn");
+ pattern2.add(".bag");
+ pattern2.add(".bana");
+ pattern2.add(".base");
+ pattern2.add(".ber");
+ pattern2.add(".bera");
+ pattern2.add(".besm");
+ pattern2.add(".besto");
+ pattern2.add(".bri");
+ pattern2.add(".butti");
+ pattern2.add(".campe");
+ pattern2.add(".canc");
+ pattern2.add(".capab");
+ pattern2.add(".carol");
+ pattern2.add(".cat");
+ pattern2.add(".cela");
+ pattern2.add(".ch");
+ pattern2.add(".chilli");
+ pattern2.add(".ci");
+ pattern2.add(".citr");
+ pattern2.add(".coe");
+ pattern2.add(".cor");
+ pattern2.add(".corner");
+ pattern2.add(".demoi");
+ pattern2.add(".deo");
+ pattern2.add(".dera");
+ pattern2.add(".deri");
+ pattern2.add(".desc");
+ pattern2.add(".dictio");
+ pattern2.add(".dot");
+ pattern2.add(".duc");
+ pattern2.add(".dumb");
+ pattern2.add(".earth");
+ pattern2.add(".easi");
+ pattern2.add(".eb");
+ pattern2.add(".eer");
+ pattern2.add(".eg");
+ pattern2.add(".eld");
+ pattern2.add(".elem");
+ pattern2.add(".enam");
+ pattern2.add(".eng");
+ pattern2.add(".ens");
+ pattern2.add(".equit");
+ pattern2.add(".erri");
+ pattern2.add(".es");
+ pattern2.add(".eu");
+ pattern2.add(".eye");
+ pattern2.add(".fes");
+ pattern2.add(".former");
+ pattern2.add(".ga");
+ pattern2.add(".ge");
+ pattern2.add(".gent");
+ pattern2.add(".geog");
+ pattern2.add(".gia");
+ pattern2.add(".gib");
+ pattern2.add(".gor");
+ pattern2.add(".handi");
+ pattern2.add(".hank");
+ pattern2.add(".he");
+ pattern2.add(".heroi");
+ pattern2.add(".hes");
+ pattern2.add(".het");
+ pattern2.add(".hib");
+ pattern2.add(".hier");
+ pattern2.add(".honey");
+ pattern2.add(".hono");
+ pattern2.add(".hov");
+ pattern2.add(".idl");
+ pattern2.add(".idol");
+ pattern2.add(".imm");
+ pattern2.add(".impin");
+ pattern2.add(".in");
+ pattern2.add(".inci");
+ pattern2.add(".ine");
+ pattern2.add(".ink");
+ pattern2.add(".ins");
+ pattern2.add(".irr");
+ pattern2.add(".isi");
+ pattern2.add(".jur");
+ pattern2.add(".lacy");
+ pattern2.add(".lam");
+ pattern2.add(".later");
+ pattern2.add(".lath");
+ pattern2.add(".le");
+ pattern2.add(".lege");
+ pattern2.add(".len");
+ pattern2.add(".lep");
+ pattern2.add(".lev");
+ pattern2.add(".lig");
+ pattern2.add(".liga");
+ pattern2.add(".lin");
+ pattern2.add(".lio");
+ pattern2.add(".lit");
+ pattern2.add(".maga");
+ pattern2.add(".malo");
+ pattern2.add(".mana");
+ pattern2.add(".marti");
+ pattern2.add(".me");
+ pattern2.add(".merc");
+ pattern2.add(".meter");
+ pattern2.add(".mis");
+ pattern2.add(".misti");
+ pattern2.add(".mone");
+ pattern2.add(".moro");
+ pattern2.add(".muta");
+ pattern2.add(".mutab");
+ pattern2.add(".nic");
+ pattern2.add(".od");
+ pattern2.add(".odd");
+ pattern2.add(".ofte");
+ pattern2.add(".orato");
+ pattern2.add(".orc");
+ pattern2.add(".ord");
+ pattern2.add(".ort");
+ pattern2.add(".os");
+ pattern2.add(".ostl");
+ pattern2.add(".oth");
+ pattern2.add(".out");
+ pattern2.add(".pedal");
+ pattern2.add(".pete");
+ pattern2.add(".petit");
+ pattern2.add(".pie");
+ pattern2.add(".pion");
+ pattern2.add(".pit");
+ pattern2.add(".prem");
+ pattern2.add(".rac");
+ pattern2.add(".rant");
+ pattern2.add(".rationa");
+ pattern2.add(".ree");
+ pattern2.add(".remit");
+ pattern2.add(".res");
+ pattern2.add(".restat");
+ pattern2.add(".rig");
+ pattern2.add(".ritu");
+ pattern2.add(".roq");
+ pattern2.add(".rost");
+ pattern2.add(".rowd");
+ pattern2.add(".rud");
+ pattern2.add(".scie");
+ pattern2.add(".self");
+ pattern2.add(".sell");
+ pattern2.add(".sen");
+ pattern2.add(".serie");
+ pattern2.add(".sh");
+ pattern2.add(".si");
+ pattern2.add(".sing");
+ pattern2.add(".st");
+ pattern2.add(".stabl");
+ pattern2.add(".sy");
+ pattern2.add(".ta");
+ pattern2.add(".te");
+ pattern2.add(".tenan");
+ pattern2.add(".th");
+ pattern2.add(".ti");
+ pattern2.add(".til");
+ pattern2.add(".timo");
+ pattern2.add(".ting");
+ pattern2.add(".tink");
+ pattern2.add(".tona");
+ pattern2.add(".top");
+ pattern2.add(".topi");
+ pattern2.add(".tous");
+ pattern2.add(".tribut");
+ pattern2.add(".una");
+ pattern2.add(".unce");
+ pattern2.add(".under");
+ pattern2.add(".une");
+ pattern2.add(".unk");
+ pattern2.add(".uno");
+ pattern2.add(".unu");
+ pattern2.add(".up");
+ pattern2.add(".ure");
+ pattern2.add(".usa");
+ pattern2.add(".vende");
+ pattern2.add(".vera");
+ pattern2.add(".wili");
+ pattern2.add(".ye");
+ pattern2.add("ab.");
+ pattern2.add("abal");
+ pattern2.add("aban");
+ pattern2.add("abe");
+ pattern2.add("aberd");
+ pattern2.add("abia");
+ pattern2.add("abitab");
+ pattern2.add("ablat");
+ pattern2.add("aboliz");
+ pattern2.add("abr");
+ pattern2.add("abrog");
+ pattern2.add("abul");
+ pattern2.add("acar");
+ pattern2.add("acard");
+ pattern2.add("acaro");
+ pattern2.add("aceou");
+ pattern2.add("acer");
+ pattern2.add("achet");
+ pattern2.add("aci");
+ pattern2.add("acie");
+ pattern2.add("acin");
+ pattern2.add("acio");
+ pattern2.add("acrob");
+ pattern2.add("actif");
+ pattern2.add("acul");
+ pattern2.add("acum");
+ pattern2.add("ad");
+ pattern2.add("addin");
+ pattern2.add("ader.");
+ pattern2.add("adi");
+ pattern2.add("adia");
+ pattern2.add("adica");
+ pattern2.add("adier");
+ pattern2.add("adio");
+ pattern2.add("adit");
+ pattern2.add("adiu");
+ pattern2.add("adle");
+ pattern2.add("adow");
+ pattern2.add("adran");
+ pattern2.add("adsu");
+ pattern2.add("adu");
+ pattern2.add("aduc");
+ pattern2.add("adum");
+ pattern2.add("aer");
+ pattern2.add("aerie");
+ pattern2.add("af");
+ pattern2.add("aff");
+ pattern2.add("agab");
+ pattern2.add("agan");
+ pattern2.add("agell");
+ pattern2.add("ageo");
+ pattern2.add("ageu");
+ pattern2.add("agi");
+ pattern2.add("agl");
+ pattern2.add("agn");
+ pattern2.add("ago");
+ pattern2.add("agog");
+ pattern2.add("agoni");
+ pattern2.add("aguer");
+ pattern2.add("agul");
+ pattern2.add("agy");
+ pattern2.add("aha");
+ pattern2.add("ahe");
+ pattern2.add("ahl");
+ pattern2.add("aho");
+ pattern2.add("ai");
+ pattern2.add("aia");
+ pattern2.add("aic.");
+ pattern2.add("aily");
+ pattern2.add("ain");
+ pattern2.add("ainin");
+ pattern2.add("aino");
+ pattern2.add("aiten");
+ pattern2.add("aj");
+ pattern2.add("aken");
+ pattern2.add("alab");
+ pattern2.add("alad");
+ pattern2.add("alar");
+ pattern2.add("aldi");
+ pattern2.add("ale");
+ pattern2.add("alend");
+ pattern2.add("alenti");
+ pattern2.add("aleo");
+ pattern2.add("ali");
+ pattern2.add("alia.");
+ pattern2.add("alie");
+ pattern2.add("allev");
+ pattern2.add("allic");
+ pattern2.add("alm");
+ pattern2.add("alog.");
+ pattern2.add("aly.");
+ pattern2.add("alys");
+ pattern2.add("alyst");
+ pattern2.add("alyt");
+ pattern2.add("alyz");
+ pattern2.add("ama");
+ pattern2.add("amab");
+ pattern2.add("amag");
+ pattern2.add("amara");
+ pattern2.add("amasc");
+ pattern2.add("amatis");
+ pattern2.add("amato");
+ pattern2.add("amera");
+ pattern2.add("amic");
+ pattern2.add("amif");
+ pattern2.add("amily");
+ pattern2.add("amin");
+ pattern2.add("amino");
+ pattern2.add("amo");
+ pattern2.add("amon");
+ pattern2.add("amori");
+ pattern2.add("ampen");
+ pattern2.add("an");
+ pattern2.add("anage");
+ pattern2.add("analy");
+ pattern2.add("anar");
+ pattern2.add("anarc");
+ pattern2.add("anari");
+ pattern2.add("anati");
+ pattern2.add("and");
+ pattern2.add("andes");
+ pattern2.add("andis");
+ pattern2.add("andl");
+ pattern2.add("andow");
+ pattern2.add("anee");
+ pattern2.add("anen");
+ pattern2.add("anest.");
+ pattern2.add("aneu");
+ pattern2.add("ang");
+ pattern2.add("angie");
+ pattern2.add("angl");
+ pattern2.add("anic");
+ pattern2.add("anies");
+ pattern2.add("anif");
+ pattern2.add("anime");
+ pattern2.add("animi");
+ pattern2.add("anine");
+ pattern2.add("anio");
+ pattern2.add("anip");
+ pattern2.add("anish");
+ pattern2.add("anit");
+ pattern2.add("aniu");
+ pattern2.add("ankli");
+ pattern2.add("anniz");
+ pattern2.add("ano");
+ pattern2.add("anot");
+ pattern2.add("anoth");
+ pattern2.add("ansa");
+ pattern2.add("ansco");
+ pattern2.add("ansn");
+ pattern2.add("ansp");
+ pattern2.add("anspo");
+ pattern2.add("anst");
+ pattern2.add("ansur");
+ pattern2.add("antal");
+ pattern2.add("antie");
+ pattern2.add("anto");
+ pattern2.add("antr");
+ pattern2.add("antw");
+ pattern2.add("anua");
+ pattern2.add("anul");
+ pattern2.add("anur");
+ pattern2.add("ao");
+ pattern2.add("apar");
+ pattern2.add("apat");
+ pattern2.add("apero");
+ pattern2.add("apher");
+ pattern2.add("aphi");
+ pattern2.add("apilla");
+ pattern2.add("apillar");
+ pattern2.add("apin");
+ pattern2.add("apita");
+ pattern2.add("apitu");
+ pattern2.add("apl");
+ pattern2.add("apoc");
+ pattern2.add("apola");
+ pattern2.add("apori");
+ pattern2.add("apost");
+ pattern2.add("apses");
+ pattern2.add("apu");
+ pattern2.add("aque");
+ pattern2.add("ar");
+ pattern2.add("aract");
+ pattern2.add("arade");
+ pattern2.add("aradis");
+ pattern2.add("aral");
+ pattern2.add("aramete");
+ pattern2.add("arang");
+ pattern2.add("arap");
+ pattern2.add("arat");
+ pattern2.add("aratio");
+ pattern2.add("arativ");
+ pattern2.add("arau");
+ pattern2.add("arav");
+ pattern2.add("araw");
+ pattern2.add("arbal");
+ pattern2.add("archan");
+ pattern2.add("ardine");
+ pattern2.add("ardr");
+ pattern2.add("areas");
+ pattern2.add("aree");
+ pattern2.add("arent");
+ pattern2.add("aress");
+ pattern2.add("arfi");
+ pattern2.add("arfl");
+ pattern2.add("ari");
+ pattern2.add("arial");
+ pattern2.add("arian");
+ pattern2.add("ariet");
+ pattern2.add("arim");
+ pattern2.add("arinat");
+ pattern2.add("ario");
+ pattern2.add("ariz");
+ pattern2.add("armi");
+ pattern2.add("arod");
+ pattern2.add("aroni");
+ pattern2.add("aroo");
+ pattern2.add("arp");
+ pattern2.add("arq");
+ pattern2.add("arre");
+ pattern2.add("arsa");
+ pattern2.add("arsh");
+ pattern2.add("as.");
+ pattern2.add("asab");
+ pattern2.add("asant");
+ pattern2.add("ashi");
+ pattern2.add("asia.");
+ pattern2.add("asib");
+ pattern2.add("asic");
+ pattern2.add("asit");
+ pattern2.add("aski");
+ pattern2.add("asl");
+ pattern2.add("asoc");
+ pattern2.add("asph");
+ pattern2.add("assh");
+ pattern2.add("asten");
+ pattern2.add("astr");
+ pattern2.add("asura");
+ pattern2.add("ata");
+ pattern2.add("atabl");
+ pattern2.add("atac");
+ pattern2.add("atalo");
+ pattern2.add("atap");
+ pattern2.add("atec");
+ pattern2.add("atech");
+ pattern2.add("atego");
+ pattern2.add("aten.");
+ pattern2.add("atera");
+ pattern2.add("atern");
+ pattern2.add("aterna");
+ pattern2.add("atest");
+ pattern2.add("atev");
+ pattern2.add("ath");
+ pattern2.add("athem");
+ pattern2.add("athen");
+ pattern2.add("atho");
+ pattern2.add("athom");
+ pattern2.add("ati.");
+ pattern2.add("atia");
+ pattern2.add("atib");
+ pattern2.add("atic");
+ pattern2.add("atif");
+ pattern2.add("ationar");
+ pattern2.add("atitu");
+ pattern2.add("atog");
+ pattern2.add("atom");
+ pattern2.add("atomiz");
+ pattern2.add("atop");
+ pattern2.add("atos");
+ pattern2.add("atr");
+ pattern2.add("atrop");
+ pattern2.add("atsk");
+ pattern2.add("attag");
+ pattern2.add("atte");
+ pattern2.add("atth");
+ pattern2.add("atu");
+ pattern2.add("atua");
+ pattern2.add("atue");
+ pattern2.add("atul");
+ pattern2.add("atura");
+ pattern2.add("aty");
+ pattern2.add("aub");
+ pattern2.add("augh");
+ pattern2.add("augu");
+ pattern2.add("aul");
+ pattern2.add("aund");
+ pattern2.add("aur");
+ pattern2.add("ausib");
+ pattern2.add("auten");
+ pattern2.add("auth");
+ pattern2.add("ava");
+ pattern2.add("avag");
+ pattern2.add("avan");
+ pattern2.add("aveno");
+ pattern2.add("avera");
+ pattern2.add("avern");
+ pattern2.add("avery");
+ pattern2.add("avi");
+ pattern2.add("avier");
+ pattern2.add("avig");
+ pattern2.add("avoc");
+ pattern2.add("avor");
+ pattern2.add("away");
+ pattern2.add("awi");
+ pattern2.add("awly");
+ pattern2.add("aws");
+ pattern2.add("axic");
+ pattern2.add("axid");
+ pattern2.add("ayal");
+ pattern2.add("aye");
+ pattern2.add("ays");
+ pattern2.add("azier");
+ pattern2.add("azzi");
+ pattern2.add("ba.");
+ pattern2.add("badger");
+ pattern2.add("bage");
+ pattern2.add("bala");
+ pattern2.add("bandag");
+ pattern2.add("bane");
+ pattern2.add("bani");
+ pattern2.add("barbi");
+ pattern2.add("baria");
+ pattern2.add("bassi");
+ pattern2.add("bat");
+ pattern2.add("baz");
+ pattern2.add("bb");
+ pattern2.add("bbe");
+ pattern2.add("bber");
+ pattern2.add("bbina");
+ pattern2.add("bd");
+ pattern2.add("be.");
+ pattern2.add("beak");
+ pattern2.add("beat");
+ pattern2.add("bed");
+ pattern2.add("beda");
+ pattern2.add("bede");
+ pattern2.add("bedi");
+ pattern2.add("begi");
+ pattern2.add("begu");
+ pattern2.add("bel");
+ pattern2.add("beli");
+ pattern2.add("belo");
+ pattern2.add("bem");
+ pattern2.add("benig");
+ pattern2.add("benu");
+ pattern2.add("bes");
+ pattern2.add("besp");
+ pattern2.add("bestr");
+ pattern2.add("bet");
+ pattern2.add("betiz");
+ pattern2.add("betr");
+ pattern2.add("betw");
+ pattern2.add("bew");
+ pattern2.add("beyo");
+ pattern2.add("bf");
+ pattern2.add("bh");
+ pattern2.add("bib");
+ pattern2.add("bid");
+ pattern2.add("bie");
+ pattern2.add("bien");
+ pattern2.add("bier");
+ pattern2.add("bif");
+ pattern2.add("bil");
+ pattern2.add("biliz");
+ pattern2.add("binar");
+ pattern2.add("bind");
+ pattern2.add("binet");
+ pattern2.add("biogr");
+ pattern2.add("biou");
+ pattern2.add("bit");
+ pattern2.add("bitio");
+ pattern2.add("bitr");
+ pattern2.add("bitua");
+ pattern2.add("bitz");
+ pattern2.add("bj");
+ pattern2.add("bk");
+ pattern2.add("bl");
+ pattern2.add("blath");
+ pattern2.add("ble.");
+ pattern2.add("blen");
+ pattern2.add("blesp");
+ pattern2.add("blis");
+ pattern2.add("blo");
+ pattern2.add("blunt");
+ pattern2.add("bm");
+ pattern2.add("bn");
+ pattern2.add("bneg");
+ pattern2.add("bod");
+ pattern2.add("bodi");
+ pattern2.add("boe");
+ pattern2.add("bolic");
+ pattern2.add("bombi");
+ pattern2.add("bona");
+ pattern2.add("bonat");
+ pattern2.add("boo");
+ pattern2.add("bor.");
+ pattern2.add("bora");
+ pattern2.add("bord");
+ pattern2.add("bore");
+ pattern2.add("bori");
+ pattern2.add("bos");
+ pattern2.add("bota");
+ pattern2.add("both");
+ pattern2.add("boto");
+ pattern2.add("bound");
+ pattern2.add("bp");
+ pattern2.add("brit");
+ pattern2.add("broth");
+ pattern2.add("bs");
+ pattern2.add("bsor");
+ pattern2.add("bt");
+ pattern2.add("btl");
+ pattern2.add("bto");
+ pattern2.add("btr");
+ pattern2.add("buffer");
+ pattern2.add("buga");
+ pattern2.add("buli");
+ pattern2.add("bumi");
+ pattern2.add("bun");
+ pattern2.add("bunti");
+ pattern2.add("bure");
+ pattern2.add("busie");
+ pattern2.add("busse");
+ pattern2.add("bust");
+ pattern2.add("buta");
+ pattern2.add("butio");
+ pattern2.add("buto");
+ pattern2.add("bv");
+ pattern2.add("bw");
+ pattern2.add("by.");
+ pattern2.add("bys");
+ pattern2.add("ca");
+ pattern2.add("cabin");
+ pattern2.add("cabl");
+ pattern2.add("cach");
+ pattern2.add("caden");
+ pattern2.add("cag");
+ pattern2.add("cah");
+ pattern2.add("calat");
+ pattern2.add("calla");
+ pattern2.add("callin");
+ pattern2.add("calo");
+ pattern2.add("cand");
+ pattern2.add("cane");
+ pattern2.add("canic");
+ pattern2.add("canis");
+ pattern2.add("caniz");
+ pattern2.add("canty");
+ pattern2.add("cany");
+ pattern2.add("caper");
+ pattern2.add("carom");
+ pattern2.add("caster");
+ pattern2.add("castig");
+ pattern2.add("casy");
+ pattern2.add("cath");
+ pattern2.add("cativ");
+ pattern2.add("caval");
+ pattern2.add("cc");
+ pattern2.add("ccha");
+ pattern2.add("ccia");
+ pattern2.add("ccompa");
+ pattern2.add("ccon");
+ pattern2.add("ccout");
+ pattern2.add("ce.");
+ pattern2.add("ced.");
+ pattern2.add("ceden");
+ pattern2.add("cei");
+ pattern2.add("cel.");
+ pattern2.add("cell");
+ pattern2.add("cen");
+ pattern2.add("cenc");
+ pattern2.add("cene");
+ pattern2.add("ceni");
+ pattern2.add("cent");
+ pattern2.add("cep");
+ pattern2.add("ceram");
+ pattern2.add("cesa");
+ pattern2.add("cessi");
+ pattern2.add("cessib");
+ pattern2.add("cest");
+ pattern2.add("cet");
+ pattern2.add("ceta");
+ pattern2.add("cew");
+ pattern2.add("ch");
+ pattern2.add("ch.");
+ pattern2.add("chab");
+ pattern2.add("chanic");
+ pattern2.add("chanis");
+ pattern2.add("che");
+ pattern2.add("cheap");
+ pattern2.add("ched");
+ pattern2.add("chelo");
+ pattern2.add("chemi");
+ pattern2.add("chene");
+ pattern2.add("cher.");
+ pattern2.add("chers");
+ pattern2.add("chin");
+ pattern2.add("chine.");
+ pattern2.add("chiness");
+ pattern2.add("chini");
+ pattern2.add("chio");
+ pattern2.add("chit");
+ pattern2.add("chiz");
+ pattern2.add("cho");
+ pattern2.add("chti");
+ pattern2.add("ci");
+ pattern2.add("cia");
+ pattern2.add("ciab");
+ pattern2.add("ciar");
+ pattern2.add("cic");
+ pattern2.add("cier");
+ pattern2.add("cific.");
+ pattern2.add("cii");
+ pattern2.add("cila");
+ pattern2.add("cili");
+ pattern2.add("cim");
+ pattern2.add("cin");
+ pattern2.add("cina");
+ pattern2.add("cinat");
+ pattern2.add("cinem");
+ pattern2.add("cing");
+ pattern2.add("cing.");
+ pattern2.add("cino");
+ pattern2.add("cion");
+ pattern2.add("cipe");
+ pattern2.add("ciph");
+ pattern2.add("cipic");
+ pattern2.add("cista");
+ pattern2.add("cisti");
+ pattern2.add("cit");
+ pattern2.add("citiz");
+ pattern2.add("ciz");
+ pattern2.add("ck");
+ pattern2.add("cki");
+ pattern2.add("cl");
+ pattern2.add("clar");
+ pattern2.add("claratio");
+ pattern2.add("clare");
+ pattern2.add("clem");
+ pattern2.add("clic");
+ pattern2.add("clim");
+ pattern2.add("cly");
+ pattern2.add("cn");
+ pattern2.add("co");
+ pattern2.add("coag");
+ pattern2.add("coe");
+ pattern2.add("cog");
+ pattern2.add("cogr");
+ pattern2.add("coi");
+ pattern2.add("coinc");
+ pattern2.add("coli");
+ pattern2.add("colo");
+ pattern2.add("color");
+ pattern2.add("comer");
+ pattern2.add("cona");
+ pattern2.add("cone");
+ pattern2.add("cong");
+ pattern2.add("cont");
+ pattern2.add("copa");
+ pattern2.add("copic");
+ pattern2.add("copl");
+ pattern2.add("corb");
+ pattern2.add("coron");
+ pattern2.add("cose");
+ pattern2.add("cov");
+ pattern2.add("cove");
+ pattern2.add("cowa");
+ pattern2.add("coze");
+ pattern2.add("cozi");
+ pattern2.add("cq");
+ pattern2.add("crast");
+ pattern2.add("crat.");
+ pattern2.add("cratic");
+ pattern2.add("creat");
+ pattern2.add("cred");
+ pattern2.add("creta");
+ pattern2.add("crev");
+ pattern2.add("cri");
+ pattern2.add("crif");
+ pattern2.add("crin");
+ pattern2.add("cris");
+ pattern2.add("criti");
+ pattern2.add("cropl");
+ pattern2.add("cropo");
+ pattern2.add("crose");
+ pattern2.add("crud");
+ pattern2.add("cs");
+ pattern2.add("ct");
+ pattern2.add("ctab");
+ pattern2.add("ctang");
+ pattern2.add("ctant");
+ pattern2.add("cte");
+ pattern2.add("cter");
+ pattern2.add("cticu");
+ pattern2.add("ctimi");
+ pattern2.add("ctur");
+ pattern2.add("ctw");
+ pattern2.add("cud");
+ pattern2.add("cuf");
+ pattern2.add("cui");
+ pattern2.add("cuity");
+ pattern2.add("culi");
+ pattern2.add("cultis");
+ pattern2.add("cultu");
+ pattern2.add("cuma");
+ pattern2.add("cume");
+ pattern2.add("cumi");
+ pattern2.add("cun");
+ pattern2.add("cupi");
+ pattern2.add("cupy");
+ pattern2.add("curab");
+ pattern2.add("curia");
+ pattern2.add("cus");
+ pattern2.add("cussi");
+ pattern2.add("cut");
+ pattern2.add("cutie");
+ pattern2.add("cutiv");
+ pattern2.add("cutr");
+ pattern2.add("cy");
+ pattern2.add("cze");
+ pattern2.add("da");
+ pattern2.add("da.");
+ pattern2.add("dab");
+ pattern2.add("dach");
+ pattern2.add("daf");
+ pattern2.add("dag");
+ pattern2.add("dam");
+ pattern2.add("dang");
+ pattern2.add("dard");
+ pattern2.add("dark");
+ pattern2.add("dary");
+ pattern2.add("dat");
+ pattern2.add("dativ");
+ pattern2.add("dato");
+ pattern2.add("dav");
+ pattern2.add("dave");
+ pattern2.add("day");
+ pattern2.add("db");
+ pattern2.add("dc");
+ pattern2.add("dd");
+ pattern2.add("de.");
+ pattern2.add("deaf");
+ pattern2.add("debit");
+ pattern2.add("debon");
+ pattern2.add("decan");
+ pattern2.add("decil");
+ pattern2.add("decom");
+ pattern2.add("ded");
+ pattern2.add("dee.");
+ pattern2.add("deif");
+ pattern2.add("delie");
+ pattern2.add("deliq");
+ pattern2.add("delo");
+ pattern2.add("dem");
+ pattern2.add("dem.");
+ pattern2.add("demic");
+ pattern2.add("demic.");
+ pattern2.add("demil");
+ pattern2.add("demons");
+ pattern2.add("demor");
+ pattern2.add("den");
+ pattern2.add("denar");
+ pattern2.add("deno");
+ pattern2.add("dentif");
+ pattern2.add("denu");
+ pattern2.add("dep");
+ pattern2.add("depa");
+ pattern2.add("depi");
+ pattern2.add("depu");
+ pattern2.add("deq");
+ pattern2.add("derh");
+ pattern2.add("derm");
+ pattern2.add("derniz");
+ pattern2.add("ders");
+ pattern2.add("des");
+ pattern2.add("des.");
+ pattern2.add("desc");
+ pattern2.add("deso");
+ pattern2.add("desti");
+ pattern2.add("destr");
+ pattern2.add("desu");
+ pattern2.add("det");
+ pattern2.add("deto");
+ pattern2.add("dev");
+ pattern2.add("devil");
+ pattern2.add("dey");
+ pattern2.add("df");
+ pattern2.add("dga");
+ pattern2.add("dget");
+ pattern2.add("dgi");
+ pattern2.add("dgy");
+ pattern2.add("dh");
+ pattern2.add("di.");
+ pattern2.add("dia");
+ pattern2.add("diab");
+ pattern2.add("dicam");
+ pattern2.add("dice");
+ pattern2.add("dict");
+ pattern2.add("did");
+ pattern2.add("dien");
+ pattern2.add("dif");
+ pattern2.add("dige");
+ pattern2.add("dilato");
+ pattern2.add("din");
+ pattern2.add("dina");
+ pattern2.add("dine.");
+ pattern2.add("dini");
+ pattern2.add("diniz");
+ pattern2.add("dio");
+ pattern2.add("diog");
+ pattern2.add("dipl");
+ pattern2.add("dir");
+ pattern2.add("dire");
+ pattern2.add("dirti");
+ pattern2.add("dis");
+ pattern2.add("disi");
+ pattern2.add("dist");
+ pattern2.add("diti");
+ pattern2.add("div");
+ pattern2.add("dj");
+ pattern2.add("dk");
+ pattern2.add("dla");
+ pattern2.add("dle.");
+ pattern2.add("dled");
+ pattern2.add("dles.");
+ pattern2.add("dless");
+ pattern2.add("dlo");
+ pattern2.add("dlu");
+ pattern2.add("dly");
+ pattern2.add("dm");
+ pattern2.add("dn");
+ pattern2.add("do");
+ pattern2.add("do.");
+ pattern2.add("dode");
+ pattern2.add("doe");
+ pattern2.add("dof");
+ pattern2.add("dog");
+ pattern2.add("dola");
+ pattern2.add("doli");
+ pattern2.add("dolor");
+ pattern2.add("domiz");
+ pattern2.add("donat");
+ pattern2.add("doni");
+ pattern2.add("dood");
+ pattern2.add("dopp");
+ pattern2.add("dor");
+ pattern2.add("dos");
+ pattern2.add("dout");
+ pattern2.add("dov");
+ pattern2.add("dox");
+ pattern2.add("dp");
+ pattern2.add("dr");
+ pattern2.add("dragon");
+ pattern2.add("drai");
+ pattern2.add("dre");
+ pattern2.add("drear");
+ pattern2.add("dren");
+ pattern2.add("drib");
+ pattern2.add("dril");
+ pattern2.add("drop");
+ pattern2.add("drow");
+ pattern2.add("drupli");
+ pattern2.add("dry");
+ pattern2.add("ds");
+ pattern2.add("dsp");
+ pattern2.add("dsw");
+ pattern2.add("dsy");
+ pattern2.add("dth");
+ pattern2.add("du");
+ pattern2.add("dua");
+ pattern2.add("duc");
+ pattern2.add("duca");
+ pattern2.add("ducer");
+ pattern2.add("duct.");
+ pattern2.add("ducts");
+ pattern2.add("duel");
+ pattern2.add("dug");
+ pattern2.add("dule");
+ pattern2.add("dumbe");
+ pattern2.add("dun");
+ pattern2.add("dup");
+ pattern2.add("dupe");
+ pattern2.add("dv");
+ pattern2.add("dw");
+ pattern2.add("dy");
+ pattern2.add("dyn");
+ pattern2.add("dyse");
+ pattern2.add("dysp");
+ pattern2.add("eab");
+ pattern2.add("eact");
+ pattern2.add("ead");
+ pattern2.add("eadie");
+ pattern2.add("eage");
+ pattern2.add("eager");
+ pattern2.add("eal");
+ pattern2.add("ealer");
+ pattern2.add("ealou");
+ pattern2.add("eamer");
+ pattern2.add("eand");
+ pattern2.add("eara");
+ pattern2.add("earc");
+ pattern2.add("eares");
+ pattern2.add("earic");
+ pattern2.add("earil");
+ pattern2.add("eark");
+ pattern2.add("eart");
+ pattern2.add("earte");
+ pattern2.add("easp");
+ pattern2.add("eass");
+ pattern2.add("east");
+ pattern2.add("eat");
+ pattern2.add("eaten");
+ pattern2.add("eathi");
+ pattern2.add("eatif");
+ pattern2.add("eatu");
+ pattern2.add("eav");
+ pattern2.add("eaven");
+ pattern2.add("eavi");
+ pattern2.add("eavo");
+ pattern2.add("eb");
+ pattern2.add("ebel.");
+ pattern2.add("ebels");
+ pattern2.add("eben");
+ pattern2.add("ebit");
+ pattern2.add("ebr");
+ pattern2.add("ecad");
+ pattern2.add("ecanc");
+ pattern2.add("ecca");
+ pattern2.add("ece");
+ pattern2.add("ecessa");
+ pattern2.add("eci");
+ pattern2.add("ecib");
+ pattern2.add("ecificat");
+ pattern2.add("ecifie");
+ pattern2.add("ecify");
+ pattern2.add("ecim");
+ pattern2.add("ecit");
+ pattern2.add("ecite");
+ pattern2.add("eclam");
+ pattern2.add("eclus");
+ pattern2.add("ecol");
+ pattern2.add("ecomm");
+ pattern2.add("ecompe");
+ pattern2.add("econc");
+ pattern2.add("ecor");
+ pattern2.add("ecora");
+ pattern2.add("ecoro");
+ pattern2.add("ecr");
+ pattern2.add("ecrem");
+ pattern2.add("ectan");
+ pattern2.add("ecte");
+ pattern2.add("ecu");
+ pattern2.add("ecul");
+ pattern2.add("ecula");
+ pattern2.add("eda");
+ pattern2.add("edd");
+ pattern2.add("eder");
+ pattern2.add("edes");
+ pattern2.add("edi");
+ pattern2.add("edia");
+ pattern2.add("edib");
+ pattern2.add("edica");
+ pattern2.add("edim");
+ pattern2.add("edit");
+ pattern2.add("ediz");
+ pattern2.add("edo");
+ pattern2.add("edol");
+ pattern2.add("edon");
+ pattern2.add("edri");
+ pattern2.add("edul");
+ pattern2.add("edulo");
+ pattern2.add("eec");
+ pattern2.add("eedi");
+ pattern2.add("eef");
+ pattern2.add("eeli");
+ pattern2.add("eely");
+ pattern2.add("eem");
+ pattern2.add("eena");
+ pattern2.add("eep");
+ pattern2.add("ees");
+ pattern2.add("eest");
+ pattern2.add("eety");
+ pattern2.add("eex");
+ pattern2.add("ef");
+ pattern2.add("efere");
+ pattern2.add("eff");
+ pattern2.add("efic");
+ pattern2.add("efici");
+ pattern2.add("efil");
+ pattern2.add("efine");
+ pattern2.add("efinite");
+ pattern2.add("efit");
+ pattern2.add("efores");
+ pattern2.add("efuse.");
+ pattern2.add("egal");
+ pattern2.add("eger");
+ pattern2.add("egib");
+ pattern2.add("egic");
+ pattern2.add("eging");
+ pattern2.add("egit");
+ pattern2.add("egn");
+ pattern2.add("ego.");
+ pattern2.add("egos");
+ pattern2.add("egul");
+ pattern2.add("egur");
+ pattern2.add("egy");
+ pattern2.add("eh");
+ pattern2.add("eher");
+ pattern2.add("ei");
+ pattern2.add("eic");
+ pattern2.add("eid");
+ pattern2.add("eig");
+ pattern2.add("eigl");
+ pattern2.add("eimb");
+ pattern2.add("einf");
+ pattern2.add("eing");
+ pattern2.add("einst");
+ pattern2.add("eird");
+ pattern2.add("eite");
+ pattern2.add("eith");
+ pattern2.add("eity");
+ pattern2.add("ej");
+ pattern2.add("ejud");
+ pattern2.add("ejudi");
+ pattern2.add("ekin");
+ pattern2.add("ekla");
+ pattern2.add("ela");
+ pattern2.add("ela.");
+ pattern2.add("elac");
+ pattern2.add("eland");
+ pattern2.add("elativ");
+ pattern2.add("elaw");
+ pattern2.add("elaxa");
+ pattern2.add("elea");
+ pattern2.add("elebra");
+ pattern2.add("elec");
+ pattern2.add("eled");
+ pattern2.add("elega");
+ pattern2.add("elen");
+ pattern2.add("eler");
+ pattern2.add("eles");
+ pattern2.add("elf");
+ pattern2.add("eli");
+ pattern2.add("elibe");
+ pattern2.add("elic.");
+ pattern2.add("elica");
+ pattern2.add("elier");
+ pattern2.add("eligib");
+ pattern2.add("elim");
+ pattern2.add("eling");
+ pattern2.add("elio");
+ pattern2.add("elis");
+ pattern2.add("elish");
+ pattern2.add("eliv");
+ pattern2.add("ella");
+ pattern2.add("ellab");
+ pattern2.add("ello");
+ pattern2.add("eloc");
+ pattern2.add("elog");
+ pattern2.add("elop.");
+ pattern2.add("elsh");
+ pattern2.add("elta");
+ pattern2.add("elud");
+ pattern2.add("elug");
+ pattern2.add("emac");
+ pattern2.add("emag");
+ pattern2.add("eman");
+ pattern2.add("emana");
+ pattern2.add("emb");
+ pattern2.add("eme");
+ pattern2.add("emel");
+ pattern2.add("emet");
+ pattern2.add("emica");
+ pattern2.add("emie");
+ pattern2.add("emigra");
+ pattern2.add("emin");
+ pattern2.add("emine");
+ pattern2.add("emini");
+ pattern2.add("emis");
+ pattern2.add("emish");
+ pattern2.add("emiss");
+ pattern2.add("emiz");
+ pattern2.add("emniz");
+ pattern2.add("emog");
+ pattern2.add("emonio");
+ pattern2.add("empi");
+ pattern2.add("emul");
+ pattern2.add("emula");
+ pattern2.add("emun");
+ pattern2.add("emy");
+ pattern2.add("enamo");
+ pattern2.add("enant");
+ pattern2.add("encher");
+ pattern2.add("endic");
+ pattern2.add("enea");
+ pattern2.add("enee");
+ pattern2.add("enem");
+ pattern2.add("enero");
+ pattern2.add("enesi");
+ pattern2.add("enest");
+ pattern2.add("enetr");
+ pattern2.add("enew");
+ pattern2.add("enics");
+ pattern2.add("enie");
+ pattern2.add("enil");
+ pattern2.add("enio");
+ pattern2.add("enish");
+ pattern2.add("enit");
+ pattern2.add("eniu");
+ pattern2.add("eniz");
+ pattern2.add("enn");
+ pattern2.add("eno");
+ pattern2.add("enog");
+ pattern2.add("enos");
+ pattern2.add("enov");
+ pattern2.add("ensw");
+ pattern2.add("entage");
+ pattern2.add("enthes");
+ pattern2.add("enua");
+ pattern2.add("enuf");
+ pattern2.add("eny.");
+ pattern2.add("enz");
+ pattern2.add("eof");
+ pattern2.add("eog");
+ pattern2.add("eoi");
+ pattern2.add("eol");
+ pattern2.add("eopar");
+ pattern2.add("eor");
+ pattern2.add("eore");
+ pattern2.add("eorol");
+ pattern2.add("eos");
+ pattern2.add("eot");
+ pattern2.add("eoto");
+ pattern2.add("eout");
+ pattern2.add("eow");
+ pattern2.add("epa");
+ pattern2.add("epai");
+ pattern2.add("epanc");
+ pattern2.add("epel");
+ pattern2.add("epent");
+ pattern2.add("epetitio");
+ pattern2.add("ephe");
+ pattern2.add("epli");
+ pattern2.add("epo");
+ pattern2.add("eprec");
+ pattern2.add("epreca");
+ pattern2.add("epred");
+ pattern2.add("epreh");
+ pattern2.add("epro");
+ pattern2.add("eprob");
+ pattern2.add("epsh");
+ pattern2.add("eptib");
+ pattern2.add("eput");
+ pattern2.add("eputa");
+ pattern2.add("eq");
+ pattern2.add("equil");
+ pattern2.add("equis");
+ pattern2.add("era");
+ pattern2.add("erab");
+ pattern2.add("erand");
+ pattern2.add("erar");
+ pattern2.add("erati.");
+ pattern2.add("erb");
+ pattern2.add("erbl");
+ pattern2.add("erch");
+ pattern2.add("erche");
+ pattern2.add("ere.");
+ pattern2.add("ereal");
+ pattern2.add("ereco");
+ pattern2.add("erein");
+ pattern2.add("erel.");
+ pattern2.add("eremo");
+ pattern2.add("erena");
+ pattern2.add("erence");
+ pattern2.add("erene");
+ pattern2.add("erent");
+ pattern2.add("ereq");
+ pattern2.add("eress");
+ pattern2.add("erest");
+ pattern2.add("eret");
+ pattern2.add("erh");
+ pattern2.add("eri");
+ pattern2.add("eria");
+ pattern2.add("erick");
+ pattern2.add("erien");
+ pattern2.add("erier");
+ pattern2.add("erine");
+ pattern2.add("erio");
+ pattern2.add("erit");
+ pattern2.add("eriu");
+ pattern2.add("eriv");
+ pattern2.add("eriva");
+ pattern2.add("erm");
+ pattern2.add("ernis");
+ pattern2.add("ernit");
+ pattern2.add("erniz");
+ pattern2.add("erno");
+ pattern2.add("ero");
+ pattern2.add("erob");
+ pattern2.add("eroc");
+ pattern2.add("eror");
+ pattern2.add("erou");
+ pattern2.add("ers");
+ pattern2.add("erset");
+ pattern2.add("erter");
+ pattern2.add("ertl");
+ pattern2.add("ertw");
+ pattern2.add("eru");
+ pattern2.add("erut");
+ pattern2.add("erwau");
+ pattern2.add("esa");
+ pattern2.add("esage.");
+ pattern2.add("esages");
+ pattern2.add("esc");
+ pattern2.add("esca");
+ pattern2.add("escan");
+ pattern2.add("escr");
+ pattern2.add("escu");
+ pattern2.add("ese");
+ pattern2.add("esec");
+ pattern2.add("esecr");
+ pattern2.add("esenc");
+ pattern2.add("esert.");
+ pattern2.add("eserts");
+ pattern2.add("eserva");
+ pattern2.add("esh");
+ pattern2.add("esha");
+ pattern2.add("eshen");
+ pattern2.add("esi");
+ pattern2.add("esic");
+ pattern2.add("esid");
+ pattern2.add("esiden");
+ pattern2.add("esigna");
+ pattern2.add("esim");
+ pattern2.add("esin");
+ pattern2.add("esiste");
+ pattern2.add("esiu");
+ pattern2.add("eskin");
+ pattern2.add("esmi");
+ pattern2.add("esol");
+ pattern2.add("esolu");
+ pattern2.add("eson");
+ pattern2.add("esona");
+ pattern2.add("esp");
+ pattern2.add("esper");
+ pattern2.add("espira");
+ pattern2.add("espre");
+ pattern2.add("ess");
+ pattern2.add("essib");
+ pattern2.add("estan");
+ pattern2.add("estig");
+ pattern2.add("estim");
+ pattern2.add("esto");
+ pattern2.add("eston");
+ pattern2.add("estr");
+ pattern2.add("estro");
+ pattern2.add("estruc");
+ pattern2.add("esur");
+ pattern2.add("esurr");
+ pattern2.add("esw");
+ pattern2.add("etab");
+ pattern2.add("etend");
+ pattern2.add("eteo");
+ pattern2.add("ethod");
+ pattern2.add("etic");
+ pattern2.add("etide");
+ pattern2.add("etin");
+ pattern2.add("etino");
+ pattern2.add("etir");
+ pattern2.add("etitio");
+ pattern2.add("etitiv");
+ pattern2.add("etn");
+ pattern2.add("etona");
+ pattern2.add("etra");
+ pattern2.add("etre");
+ pattern2.add("etric");
+ pattern2.add("etrif");
+ pattern2.add("etrog");
+ pattern2.add("etros");
+ pattern2.add("etua");
+ pattern2.add("etym");
+ pattern2.add("etz");
+ pattern2.add("eu");
+ pattern2.add("eun");
+ pattern2.add("eup");
+ pattern2.add("euro");
+ pattern2.add("eus");
+ pattern2.add("eute");
+ pattern2.add("eutil");
+ pattern2.add("eutr");
+ pattern2.add("evap");
+ pattern2.add("evas");
+ pattern2.add("evast");
+ pattern2.add("evea");
+ pattern2.add("evell");
+ pattern2.add("evelo");
+ pattern2.add("eveng");
+ pattern2.add("eveni");
+ pattern2.add("ever");
+ pattern2.add("everb");
+ pattern2.add("evi");
+ pattern2.add("evid");
+ pattern2.add("evil");
+ pattern2.add("evin");
+ pattern2.add("eviv");
+ pattern2.add("evoc");
+ pattern2.add("evu");
+ pattern2.add("ewa");
+ pattern2.add("ewag");
+ pattern2.add("ewee");
+ pattern2.add("ewh");
+ pattern2.add("ewil");
+ pattern2.add("ewing");
+ pattern2.add("ewit");
+ pattern2.add("exp");
+ pattern2.add("eyc");
+ pattern2.add("eye.");
+ pattern2.add("eys");
+ pattern2.add("fa");
+ pattern2.add("fabl");
+ pattern2.add("fabr");
+ pattern2.add("face");
+ pattern2.add("fag");
+ pattern2.add("fain");
+ pattern2.add("falle");
+ pattern2.add("fama");
+ pattern2.add("famis");
+ pattern2.add("far");
+ pattern2.add("farth");
+ pattern2.add("fata");
+ pattern2.add("fathe");
+ pattern2.add("fato");
+ pattern2.add("fault");
+ pattern2.add("fb");
+ pattern2.add("fd");
+ pattern2.add("fe.");
+ pattern2.add("feas");
+ pattern2.add("feath");
+ pattern2.add("feb");
+ pattern2.add("feca");
+ pattern2.add("fect");
+ pattern2.add("fed");
+ pattern2.add("feli");
+ pattern2.add("femo");
+ pattern2.add("fend");
+ pattern2.add("fende");
+ pattern2.add("fer");
+ pattern2.add("ferr");
+ pattern2.add("fev");
+ pattern2.add("ff");
+ pattern2.add("ffes");
+ pattern2.add("ffie");
+ pattern2.add("ffin.");
+ pattern2.add("ffis");
+ pattern2.add("ffly");
+ pattern2.add("ffy");
+ pattern2.add("fh");
+ pattern2.add("fi");
+ pattern2.add("fia");
+ pattern2.add("fic.");
+ pattern2.add("fical");
+ pattern2.add("fican");
+ pattern2.add("ficate");
+ pattern2.add("ficen");
+ pattern2.add("ficer");
+ pattern2.add("fici");
+ pattern2.add("ficia");
+ pattern2.add("ficie");
+ pattern2.add("fics");
+ pattern2.add("ficu");
+ pattern2.add("fidel");
+ pattern2.add("fight");
+ pattern2.add("fili");
+ pattern2.add("fillin");
+ pattern2.add("fily");
+ pattern2.add("fin");
+ pattern2.add("fina");
+ pattern2.add("find");
+ pattern2.add("fine");
+ pattern2.add("fing");
+ pattern2.add("finn");
+ pattern2.add("fisti");
+ pattern2.add("fl");
+ pattern2.add("fless");
+ pattern2.add("flin");
+ pattern2.add("flore");
+ pattern2.add("fly");
+ pattern2.add("fm");
+ pattern2.add("fn");
+ pattern2.add("fo");
+ pattern2.add("fon");
+ pattern2.add("fonde");
+ pattern2.add("font");
+ pattern2.add("for");
+ pattern2.add("forat");
+ pattern2.add("foray");
+ pattern2.add("foret");
+ pattern2.add("fori");
+ pattern2.add("forta");
+ pattern2.add("fos");
+ pattern2.add("fp");
+ pattern2.add("frat");
+ pattern2.add("frea");
+ pattern2.add("fresc");
+ pattern2.add("fri");
+ pattern2.add("fril");
+ pattern2.add("frol");
+ pattern2.add("fs");
+ pattern2.add("ft");
+ pattern2.add("fto");
+ pattern2.add("fty");
+ pattern2.add("fu");
+ pattern2.add("fuel");
+ pattern2.add("fug");
+ pattern2.add("fumin");
+ pattern2.add("fune");
+ pattern2.add("furi");
+ pattern2.add("fusi");
+ pattern2.add("fuss");
+ pattern2.add("futa");
+ pattern2.add("fy");
+ pattern2.add("ga");
+ pattern2.add("gaf");
+ pattern2.add("gal.");
+ pattern2.add("gali");
+ pattern2.add("galo");
+ pattern2.add("gam");
+ pattern2.add("gamet");
+ pattern2.add("gamo");
+ pattern2.add("ganis");
+ pattern2.add("ganiz");
+ pattern2.add("ganiza");
+ pattern2.add("gano");
+ pattern2.add("garn");
+ pattern2.add("gass");
+ pattern2.add("gath");
+ pattern2.add("gativ");
+ pattern2.add("gaz");
+ pattern2.add("gb");
+ pattern2.add("gd");
+ pattern2.add("ge.");
+ pattern2.add("ged");
+ pattern2.add("geez");
+ pattern2.add("gelin");
+ pattern2.add("gelis");
+ pattern2.add("geliz");
+ pattern2.add("gely");
+ pattern2.add("gen");
+ pattern2.add("genat");
+ pattern2.add("geniz");
+ pattern2.add("geno");
+ pattern2.add("geny");
+ pattern2.add("geo");
+ pattern2.add("geom");
+ pattern2.add("gery");
+ pattern2.add("gesi");
+ pattern2.add("geth");
+ pattern2.add("geto");
+ pattern2.add("gety");
+ pattern2.add("gev");
+ pattern2.add("gg");
+ pattern2.add("gge");
+ pattern2.add("gger");
+ pattern2.add("gglu");
+ pattern2.add("ggo");
+ pattern2.add("ghin");
+ pattern2.add("ghout");
+ pattern2.add("ghto");
+ pattern2.add("gi.");
+ pattern2.add("gia");
+ pattern2.add("giar");
+ pattern2.add("gic");
+ pattern2.add("gicia");
+ pattern2.add("gico");
+ pattern2.add("gien");
+ pattern2.add("gies.");
+ pattern2.add("gil");
+ pattern2.add("gimen");
+ pattern2.add("gin.");
+ pattern2.add("ginge");
+ pattern2.add("gins");
+ pattern2.add("gio");
+ pattern2.add("gir");
+ pattern2.add("girl");
+ pattern2.add("gisl");
+ pattern2.add("giu");
+ pattern2.add("giv");
+ pattern2.add("giz");
+ pattern2.add("gl");
+ pattern2.add("gla");
+ pattern2.add("gladi");
+ pattern2.add("glas");
+ pattern2.add("gle");
+ pattern2.add("glib");
+ pattern2.add("glig");
+ pattern2.add("glo");
+ pattern2.add("glor");
+ pattern2.add("gm");
+ pattern2.add("gmy");
+ pattern2.add("gna");
+ pattern2.add("gna.");
+ pattern2.add("gnett");
+ pattern2.add("gni");
+ pattern2.add("gnin");
+ pattern2.add("gnio");
+ pattern2.add("gno");
+ pattern2.add("gnon");
+ pattern2.add("go");
+ pattern2.add("go.");
+ pattern2.add("gob");
+ pattern2.add("goe");
+ pattern2.add("gog");
+ pattern2.add("gois");
+ pattern2.add("gon");
+ pattern2.add("gona");
+ pattern2.add("gondo");
+ pattern2.add("goni");
+ pattern2.add("goo");
+ pattern2.add("goriz");
+ pattern2.add("gorou");
+ pattern2.add("gos.");
+ pattern2.add("gov");
+ pattern2.add("gp");
+ pattern2.add("gr");
+ pattern2.add("grada");
+ pattern2.add("grai");
+ pattern2.add("gran");
+ pattern2.add("graph.");
+ pattern2.add("grapher");
+ pattern2.add("graphic");
+ pattern2.add("graphy");
+ pattern2.add("gray");
+ pattern2.add("gren");
+ pattern2.add("gress.");
+ pattern2.add("grit");
+ pattern2.add("gro");
+ pattern2.add("gruf");
+ pattern2.add("gs");
+ pattern2.add("gste");
+ pattern2.add("gth");
+ pattern2.add("gua");
+ pattern2.add("guard");
+ pattern2.add("gue");
+ pattern2.add("guit");
+ pattern2.add("gun");
+ pattern2.add("gus");
+ pattern2.add("gut");
+ pattern2.add("gw");
+ pattern2.add("gy");
+ pattern2.add("gyn");
+ pattern2.add("gyra");
+ pattern2.add("habl");
+ pattern2.add("hach");
+ pattern2.add("haem");
+ pattern2.add("haet");
+ pattern2.add("hagu");
+ pattern2.add("hala");
+ pattern2.add("halam");
+ pattern2.add("ham");
+ pattern2.add("hanci");
+ pattern2.add("hancy");
+ pattern2.add("hand.");
+ pattern2.add("hang");
+ pattern2.add("hanger");
+ pattern2.add("hango");
+ pattern2.add("haniz");
+ pattern2.add("hank");
+ pattern2.add("hante");
+ pattern2.add("hapl");
+ pattern2.add("hapt");
+ pattern2.add("haran");
+ pattern2.add("haras");
+ pattern2.add("hard");
+ pattern2.add("harde");
+ pattern2.add("harle");
+ pattern2.add("harpen");
+ pattern2.add("harter");
+ pattern2.add("hass");
+ pattern2.add("haun");
+ pattern2.add("haz");
+ pattern2.add("haza");
+ pattern2.add("hb");
+ pattern2.add("head");
+ pattern2.add("hear");
+ pattern2.add("hecan");
+ pattern2.add("hecat");
+ pattern2.add("hed");
+ pattern2.add("hedo");
+ pattern2.add("heli");
+ pattern2.add("hellis");
+ pattern2.add("helly");
+ pattern2.add("helo");
+ pattern2.add("hemp");
+ pattern2.add("hen");
+ pattern2.add("hena");
+ pattern2.add("henat");
+ pattern2.add("heor");
+ pattern2.add("hep");
+ pattern2.add("hera");
+ pattern2.add("herap");
+ pattern2.add("herba");
+ pattern2.add("herea");
+ pattern2.add("hern");
+ pattern2.add("herou");
+ pattern2.add("hery");
+ pattern2.add("hes");
+ pattern2.add("hesp");
+ pattern2.add("het");
+ pattern2.add("heted");
+ pattern2.add("heu");
+ pattern2.add("hf");
+ pattern2.add("hh");
+ pattern2.add("hian");
+ pattern2.add("hico");
+ pattern2.add("high");
+ pattern2.add("hil");
+ pattern2.add("himer");
+ pattern2.add("hina");
+ pattern2.add("hione");
+ pattern2.add("hip");
+ pattern2.add("hirl");
+ pattern2.add("hiro");
+ pattern2.add("hirp");
+ pattern2.add("hirr");
+ pattern2.add("hisel");
+ pattern2.add("hiss");
+ pattern2.add("hither");
+ pattern2.add("hiv");
+ pattern2.add("hk");
+ pattern2.add("hl");
+ pattern2.add("hlan");
+ pattern2.add("hlo");
+ pattern2.add("hlori");
+ pattern2.add("hm");
+ pattern2.add("hmet");
+ pattern2.add("hn");
+ pattern2.add("hodiz");
+ pattern2.add("hods");
+ pattern2.add("hog");
+ pattern2.add("hoge");
+ pattern2.add("holar");
+ pattern2.add("hole");
+ pattern2.add("homa");
+ pattern2.add("home");
+ pattern2.add("hona");
+ pattern2.add("hony");
+ pattern2.add("hood");
+ pattern2.add("hoon");
+ pattern2.add("horat");
+ pattern2.add("horis");
+ pattern2.add("horte");
+ pattern2.add("horu");
+ pattern2.add("hose");
+ pattern2.add("hosen");
+ pattern2.add("hosp");
+ pattern2.add("hous");
+ pattern2.add("house");
+ pattern2.add("hovel");
+ pattern2.add("hp");
+ pattern2.add("hr");
+ pattern2.add("hree");
+ pattern2.add("hroniz");
+ pattern2.add("hropo");
+ pattern2.add("hs");
+ pattern2.add("hsh");
+ pattern2.add("htar");
+ pattern2.add("hten");
+ pattern2.add("htes");
+ pattern2.add("hty");
+ pattern2.add("hug");
+ pattern2.add("humin");
+ pattern2.add("hunke");
+ pattern2.add("hunt");
+ pattern2.add("hust");
+ pattern2.add("hut");
+ pattern2.add("hw");
+ pattern2.add("hwart");
+ pattern2.add("hype");
+ pattern2.add("hyph");
+ pattern2.add("hys");
+ pattern2.add("ia");
+ pattern2.add("ial");
+ pattern2.add("iam");
+ pattern2.add("iamete");
+ pattern2.add("ian");
+ pattern2.add("ianc");
+ pattern2.add("iani");
+ pattern2.add("iant");
+ pattern2.add("iape");
+ pattern2.add("iass");
+ pattern2.add("iativ");
+ pattern2.add("iatric");
+ pattern2.add("iatu");
+ pattern2.add("ibe");
+ pattern2.add("ibera");
+ pattern2.add("ibert");
+ pattern2.add("ibia");
+ pattern2.add("ibin");
+ pattern2.add("ibit.");
+ pattern2.add("ibite");
+ pattern2.add("ibl");
+ pattern2.add("ibli");
+ pattern2.add("ibo");
+ pattern2.add("ibr");
+ pattern2.add("ibri");
+ pattern2.add("ibun");
+ pattern2.add("icam");
+ pattern2.add("icap");
+ pattern2.add("icar");
+ pattern2.add("icar.");
+ pattern2.add("icara");
+ pattern2.add("icas");
+ pattern2.add("icay");
+ pattern2.add("iccu");
+ pattern2.add("iceo");
+ pattern2.add("ich");
+ pattern2.add("ici");
+ pattern2.add("icid");
+ pattern2.add("icina");
+ pattern2.add("icip");
+ pattern2.add("icipa");
+ pattern2.add("icly");
+ pattern2.add("icoc");
+ pattern2.add("icr");
+ pattern2.add("icra");
+ pattern2.add("icry");
+ pattern2.add("icte");
+ pattern2.add("ictu");
+ pattern2.add("ictua");
+ pattern2.add("icula");
+ pattern2.add("icum");
+ pattern2.add("icuo");
+ pattern2.add("icur");
+ pattern2.add("id");
+ pattern2.add("idai");
+ pattern2.add("idanc");
+ pattern2.add("idd");
+ pattern2.add("ideal");
+ pattern2.add("ides");
+ pattern2.add("idi");
+ pattern2.add("idian");
+ pattern2.add("idiar");
+ pattern2.add("idie");
+ pattern2.add("idio");
+ pattern2.add("idiou");
+ pattern2.add("idit");
+ pattern2.add("idiu");
+ pattern2.add("idle");
+ pattern2.add("idom");
+ pattern2.add("idow");
+ pattern2.add("idr");
+ pattern2.add("idu");
+ pattern2.add("iduo");
+ pattern2.add("ie");
+ pattern2.add("iede");
+ pattern2.add("iega");
+ pattern2.add("ield");
+ pattern2.add("iena");
+ pattern2.add("iene");
+ pattern2.add("ienn");
+ pattern2.add("ienti");
+ pattern2.add("ier.");
+ pattern2.add("iesc");
+ pattern2.add("iest");
+ pattern2.add("iet");
+ pattern2.add("if.");
+ pattern2.add("ifero");
+ pattern2.add("iffen");
+ pattern2.add("iffr");
+ pattern2.add("ific.");
+ pattern2.add("ifie");
+ pattern2.add("ifl");
+ pattern2.add("ift");
+ pattern2.add("ig");
+ pattern2.add("igab");
+ pattern2.add("igera");
+ pattern2.add("ighti");
+ pattern2.add("igi");
+ pattern2.add("igib");
+ pattern2.add("igil");
+ pattern2.add("igin");
+ pattern2.add("igit");
+ pattern2.add("igl");
+ pattern2.add("igo");
+ pattern2.add("igor");
+ pattern2.add("igot");
+ pattern2.add("igre");
+ pattern2.add("igui");
+ pattern2.add("igur");
+ pattern2.add("ih");
+ pattern2.add("ii");
+ pattern2.add("ij");
+ pattern2.add("ik");
+ pattern2.add("ila");
+ pattern2.add("ilab");
+ pattern2.add("ilade");
+ pattern2.add("ilam");
+ pattern2.add("ilara");
+ pattern2.add("ileg");
+ pattern2.add("iler");
+ pattern2.add("ilev");
+ pattern2.add("ilf");
+ pattern2.add("ili");
+ pattern2.add("ilia");
+ pattern2.add("ilib");
+ pattern2.add("ilio");
+ pattern2.add("ilist");
+ pattern2.add("ilit");
+ pattern2.add("iliz");
+ pattern2.add("illab");
+ pattern2.add("iln");
+ pattern2.add("iloq");
+ pattern2.add("ilty");
+ pattern2.add("ilur");
+ pattern2.add("ilv");
+ pattern2.add("imag");
+ pattern2.add("image");
+ pattern2.add("imary");
+ pattern2.add("imentar");
+ pattern2.add("imet");
+ pattern2.add("imi");
+ pattern2.add("imida");
+ pattern2.add("imile");
+ pattern2.add("imini");
+ pattern2.add("imit");
+ pattern2.add("imni");
+ pattern2.add("imon");
+ pattern2.add("imu");
+ pattern2.add("imula");
+ pattern2.add("in.");
+ pattern2.add("inau");
+ pattern2.add("inav");
+ pattern2.add("incel");
+ pattern2.add("incer");
+ pattern2.add("ind");
+ pattern2.add("indling");
+ pattern2.add("ine");
+ pattern2.add("inee");
+ pattern2.add("inerar");
+ pattern2.add("iness");
+ pattern2.add("inga");
+ pattern2.add("inge");
+ pattern2.add("ingen");
+ pattern2.add("ingi");
+ pattern2.add("ingling");
+ pattern2.add("ingo");
+ pattern2.add("ingu");
+ pattern2.add("ini");
+ pattern2.add("ini.");
+ pattern2.add("inia");
+ pattern2.add("inio");
+ pattern2.add("inis");
+ pattern2.add("inite.");
+ pattern2.add("initio");
+ pattern2.add("inity");
+ pattern2.add("ink");
+ pattern2.add("inl");
+ pattern2.add("inn");
+ pattern2.add("ino");
+ pattern2.add("inoc");
+ pattern2.add("inos");
+ pattern2.add("inot");
+ pattern2.add("ins");
+ pattern2.add("inse");
+ pattern2.add("insura");
+ pattern2.add("int.");
+ pattern2.add("inth");
+ pattern2.add("inu");
+ pattern2.add("inus");
+ pattern2.add("iny");
+ pattern2.add("io");
+ pattern2.add("io.");
+ pattern2.add("ioge");
+ pattern2.add("iogr");
+ pattern2.add("iol");
+ pattern2.add("iom");
+ pattern2.add("ionat");
+ pattern2.add("ionery");
+ pattern2.add("ioni");
+ pattern2.add("ioph");
+ pattern2.add("iori");
+ pattern2.add("ios");
+ pattern2.add("ioth");
+ pattern2.add("ioti");
+ pattern2.add("ioto");
+ pattern2.add("iour");
+ pattern2.add("ip");
+ pattern2.add("ipe");
+ pattern2.add("iphras");
+ pattern2.add("ipi");
+ pattern2.add("ipic");
+ pattern2.add("ipre");
+ pattern2.add("ipul");
+ pattern2.add("iqua");
+ pattern2.add("iquef");
+ pattern2.add("iquid");
+ pattern2.add("iquit");
+ pattern2.add("ir");
+ pattern2.add("ira");
+ pattern2.add("irab");
+ pattern2.add("irac");
+ pattern2.add("irde");
+ pattern2.add("irede");
+ pattern2.add("iref");
+ pattern2.add("irel");
+ pattern2.add("ires");
+ pattern2.add("irgi");
+ pattern2.add("iri");
+ pattern2.add("iride");
+ pattern2.add("iris");
+ pattern2.add("iritu");
+ pattern2.add("iriz");
+ pattern2.add("irmin");
+ pattern2.add("irog");
+ pattern2.add("iron.");
+ pattern2.add("irul");
+ pattern2.add("is.");
+ pattern2.add("isag");
+ pattern2.add("isar");
+ pattern2.add("isas");
+ pattern2.add("isc");
+ pattern2.add("isch");
+ pattern2.add("ise");
+ pattern2.add("iser");
+ pattern2.add("isf");
+ pattern2.add("ishan");
+ pattern2.add("ishon");
+ pattern2.add("ishop");
+ pattern2.add("isib");
+ pattern2.add("isid");
+ pattern2.add("isis");
+ pattern2.add("isitiv");
+ pattern2.add("isk");
+ pattern2.add("islan");
+ pattern2.add("isms");
+ pattern2.add("iso");
+ pattern2.add("isomer");
+ pattern2.add("isp");
+ pattern2.add("ispi");
+ pattern2.add("ispy");
+ pattern2.add("iss");
+ pattern2.add("issal");
+ pattern2.add("issen");
+ pattern2.add("isses");
+ pattern2.add("ista.");
+ pattern2.add("iste");
+ pattern2.add("isti");
+ pattern2.add("istly");
+ pattern2.add("istral");
+ pattern2.add("isu");
+ pattern2.add("isus");
+ pattern2.add("ita.");
+ pattern2.add("itabi");
+ pattern2.add("itag");
+ pattern2.add("itam");
+ pattern2.add("itan");
+ pattern2.add("itat");
+ pattern2.add("ite");
+ pattern2.add("itera");
+ pattern2.add("iteri");
+ pattern2.add("ites");
+ pattern2.add("ith");
+ pattern2.add("iti");
+ pattern2.add("itia");
+ pattern2.add("itic");
+ pattern2.add("itica");
+ pattern2.add("itick");
+ pattern2.add("itig");
+ pattern2.add("itill");
+ pattern2.add("itim");
+ pattern2.add("itio");
+ pattern2.add("itis");
+ pattern2.add("itism");
+ pattern2.add("itom");
+ pattern2.add("iton");
+ pattern2.add("itram");
+ pattern2.add("itry");
+ pattern2.add("itt");
+ pattern2.add("ituat");
+ pattern2.add("itud");
+ pattern2.add("itul");
+ pattern2.add("itz.");
+ pattern2.add("iu");
+ pattern2.add("iv");
+ pattern2.add("ivell");
+ pattern2.add("iven.");
+ pattern2.add("iver.");
+ pattern2.add("ivers.");
+ pattern2.add("ivil.");
+ pattern2.add("ivio");
+ pattern2.add("ivit");
+ pattern2.add("ivore");
+ pattern2.add("ivoro");
+ pattern2.add("ivot");
+ pattern2.add("iw");
+ pattern2.add("ixo");
+ pattern2.add("iy");
+ pattern2.add("izar");
+ pattern2.add("izi");
+ pattern2.add("izont");
+ pattern2.add("ja");
+ pattern2.add("jacq");
+ pattern2.add("jap");
+ pattern2.add("je");
+ pattern2.add("jers");
+ pattern2.add("jestie");
+ pattern2.add("jesty");
+ pattern2.add("jew");
+ pattern2.add("jop");
+ pattern2.add("judg");
+ pattern2.add("ka.");
+ pattern2.add("kab");
+ pattern2.add("kag");
+ pattern2.add("kais");
+ pattern2.add("kal");
+ pattern2.add("kb");
+ pattern2.add("ked");
+ pattern2.add("kee");
+ pattern2.add("keg");
+ pattern2.add("keli");
+ pattern2.add("kend");
+ pattern2.add("ker");
+ pattern2.add("kes");
+ pattern2.add("kest.");
+ pattern2.add("kety");
+ pattern2.add("kf");
+ pattern2.add("kh");
+ pattern2.add("ki");
+ pattern2.add("ki.");
+ pattern2.add("kic");
+ pattern2.add("kill");
+ pattern2.add("kilo");
+ pattern2.add("kim");
+ pattern2.add("kin.");
+ pattern2.add("kinde");
+ pattern2.add("kiness");
+ pattern2.add("king");
+ pattern2.add("kip");
+ pattern2.add("kis");
+ pattern2.add("kish");
+ pattern2.add("kk");
+ pattern2.add("kl");
+ pattern2.add("kley");
+ pattern2.add("kly");
+ pattern2.add("km");
+ pattern2.add("knes");
+ pattern2.add("kno");
+ pattern2.add("kor");
+ pattern2.add("kosh");
+ pattern2.add("kou");
+ pattern2.add("kron");
+ pattern2.add("ks");
+ pattern2.add("ksc");
+ pattern2.add("ksl");
+ pattern2.add("ksy");
+ pattern2.add("kt");
+ pattern2.add("kw");
+ pattern2.add("labic");
+ pattern2.add("labo");
+ pattern2.add("laci");
+ pattern2.add("lade");
+ pattern2.add("lady");
+ pattern2.add("lagn");
+ pattern2.add("lamo");
+ pattern2.add("land");
+ pattern2.add("landl");
+ pattern2.add("lanet");
+ pattern2.add("lante");
+ pattern2.add("larg");
+ pattern2.add("lari");
+ pattern2.add("lase");
+ pattern2.add("latan");
+ pattern2.add("lateli");
+ pattern2.add("lativ");
+ pattern2.add("lav");
+ pattern2.add("lava");
+ pattern2.add("lb");
+ pattern2.add("lbin");
+ pattern2.add("lc");
+ pattern2.add("lce");
+ pattern2.add("lci");
+ pattern2.add("ld");
+ pattern2.add("lde");
+ pattern2.add("ldere");
+ pattern2.add("lderi");
+ pattern2.add("ldi");
+ pattern2.add("ldis");
+ pattern2.add("ldr");
+ pattern2.add("ldri");
+ pattern2.add("lea");
+ pattern2.add("lebi");
+ pattern2.add("left");
+ pattern2.add("leg.");
+ pattern2.add("legg");
+ pattern2.add("lemat");
+ pattern2.add("lematic");
+ pattern2.add("len.");
+ pattern2.add("lenc");
+ pattern2.add("lene.");
+ pattern2.add("lent");
+ pattern2.add("leph");
+ pattern2.add("lepr");
+ pattern2.add("lerab");
+ pattern2.add("lere");
+ pattern2.add("lerg");
+ pattern2.add("leri");
+ pattern2.add("lero");
+ pattern2.add("les");
+ pattern2.add("lesco");
+ pattern2.add("lesq");
+ pattern2.add("less");
+ pattern2.add("less.");
+ pattern2.add("leva");
+ pattern2.add("lever.");
+ pattern2.add("levera");
+ pattern2.add("levers");
+ pattern2.add("ley");
+ pattern2.add("leye");
+ pattern2.add("lf");
+ pattern2.add("lfr");
+ pattern2.add("lg");
+ pattern2.add("lga");
+ pattern2.add("lgar");
+ pattern2.add("lges");
+ pattern2.add("lgo");
+ pattern2.add("lh");
+ pattern2.add("liag");
+ pattern2.add("liam");
+ pattern2.add("liariz");
+ pattern2.add("lias");
+ pattern2.add("liato");
+ pattern2.add("libi");
+ pattern2.add("licio");
+ pattern2.add("licor");
+ pattern2.add("lics");
+ pattern2.add("lict.");
+ pattern2.add("licu");
+ pattern2.add("licy");
+ pattern2.add("lida");
+ pattern2.add("lider");
+ pattern2.add("lidi");
+ pattern2.add("lifer");
+ pattern2.add("liff");
+ pattern2.add("lifl");
+ pattern2.add("ligate");
+ pattern2.add("ligh");
+ pattern2.add("ligra");
+ pattern2.add("lik");
+ pattern2.add("lil");
+ pattern2.add("limbl");
+ pattern2.add("limi");
+ pattern2.add("limo");
+ pattern2.add("limp");
+ pattern2.add("lina");
+ pattern2.add("line");
+ pattern2.add("linea");
+ pattern2.add("lini");
+ pattern2.add("linker");
+ pattern2.add("liog");
+ pattern2.add("liq");
+ pattern2.add("lisp");
+ pattern2.add("lit");
+ pattern2.add("lit.");
+ pattern2.add("litica");
+ pattern2.add("litics");
+ pattern2.add("liver");
+ pattern2.add("liz");
+ pattern2.add("lj");
+ pattern2.add("lka");
+ pattern2.add("lkal");
+ pattern2.add("lkat");
+ pattern2.add("ll");
+ pattern2.add("llaw");
+ pattern2.add("lle");
+ pattern2.add("llea");
+ pattern2.add("llec");
+ pattern2.add("lleg");
+ pattern2.add("llel");
+ pattern2.add("llen");
+ pattern2.add("llet");
+ pattern2.add("lli");
+ pattern2.add("llin");
+ pattern2.add("llina");
+ pattern2.add("llo");
+ pattern2.add("lloqui");
+ pattern2.add("llout");
+ pattern2.add("llow");
+ pattern2.add("lm");
+ pattern2.add("lmet");
+ pattern2.add("lming");
+ pattern2.add("lmod");
+ pattern2.add("lmon");
+ pattern2.add("ln");
+ pattern2.add("lo.");
+ pattern2.add("lobal");
+ pattern2.add("loci");
+ pattern2.add("lof");
+ pattern2.add("logic");
+ pattern2.add("logo");
+ pattern2.add("logu");
+ pattern2.add("lomer");
+ pattern2.add("long");
+ pattern2.add("loni");
+ pattern2.add("loniz");
+ pattern2.add("lood");
+ pattern2.add("lope.");
+ pattern2.add("lopi");
+ pattern2.add("lopm");
+ pattern2.add("lora");
+ pattern2.add("lorato");
+ pattern2.add("lorie");
+ pattern2.add("lorou");
+ pattern2.add("los.");
+ pattern2.add("loset");
+ pattern2.add("losophiz");
+ pattern2.add("losophy");
+ pattern2.add("lost");
+ pattern2.add("lota");
+ pattern2.add("lound");
+ pattern2.add("lout");
+ pattern2.add("lov");
+ pattern2.add("lp");
+ pattern2.add("lpab");
+ pattern2.add("lpha");
+ pattern2.add("lphi");
+ pattern2.add("lping");
+ pattern2.add("lpit");
+ pattern2.add("lpl");
+ pattern2.add("lpr");
+ pattern2.add("lr");
+ pattern2.add("ls");
+ pattern2.add("lsc");
+ pattern2.add("lse");
+ pattern2.add("lsie");
+ pattern2.add("lt");
+ pattern2.add("ltag");
+ pattern2.add("ltane");
+ pattern2.add("lte");
+ pattern2.add("lten");
+ pattern2.add("ltera");
+ pattern2.add("lthi");
+ pattern2.add("lties.");
+ pattern2.add("ltis");
+ pattern2.add("ltr");
+ pattern2.add("ltu");
+ pattern2.add("ltura");
+ pattern2.add("lua");
+ pattern2.add("lubr");
+ pattern2.add("luch");
+ pattern2.add("luci");
+ pattern2.add("luen");
+ pattern2.add("luf");
+ pattern2.add("luid");
+ pattern2.add("luma");
+ pattern2.add("lumi");
+ pattern2.add("lumn.");
+ pattern2.add("lumnia");
+ pattern2.add("luo");
+ pattern2.add("luor");
+ pattern2.add("lup");
+ pattern2.add("luss");
+ pattern2.add("luste");
+ pattern2.add("lut");
+ pattern2.add("lven");
+ pattern2.add("lvet");
+ pattern2.add("lw");
+ pattern2.add("ly");
+ pattern2.add("lya");
+ pattern2.add("lyb");
+ pattern2.add("lyme");
+ pattern2.add("lyno");
+ pattern2.add("lys");
+ pattern2.add("lyse");
+ pattern2.add("ma");
+ pattern2.add("mab");
+ pattern2.add("maca");
+ pattern2.add("machine");
+ pattern2.add("macl");
+ pattern2.add("magin");
+ pattern2.add("magn");
+ pattern2.add("mah");
+ pattern2.add("maid");
+ pattern2.add("mald");
+ pattern2.add("malig");
+ pattern2.add("malin");
+ pattern2.add("malli");
+ pattern2.add("malty");
+ pattern2.add("mania");
+ pattern2.add("manis");
+ pattern2.add("maniz");
+ pattern2.add("map");
+ pattern2.add("marine.");
+ pattern2.add("mariz");
+ pattern2.add("marly");
+ pattern2.add("marv");
+ pattern2.add("masce");
+ pattern2.add("mase");
+ pattern2.add("mast");
+ pattern2.add("mate");
+ pattern2.add("math");
+ pattern2.add("matis");
+ pattern2.add("matiza");
+ pattern2.add("mb");
+ pattern2.add("mbat");
+ pattern2.add("mbil");
+ pattern2.add("mbing");
+ pattern2.add("mbiv");
+ pattern2.add("mc");
+ pattern2.add("me.");
+ pattern2.add("med");
+ pattern2.add("med.");
+ pattern2.add("media");
+ pattern2.add("medie");
+ pattern2.add("medy");
+ pattern2.add("meg");
+ pattern2.add("melon");
+ pattern2.add("melt");
+ pattern2.add("mem");
+ pattern2.add("memo");
+ pattern2.add("men");
+ pattern2.add("mena");
+ pattern2.add("menac");
+ pattern2.add("mende");
+ pattern2.add("mene");
+ pattern2.add("meni");
+ pattern2.add("mens");
+ pattern2.add("mensu");
+ pattern2.add("ment");
+ pattern2.add("mente");
+ pattern2.add("meon");
+ pattern2.add("mersa");
+ pattern2.add("mes");
+ pattern2.add("mesti");
+ pattern2.add("meta");
+ pattern2.add("metal");
+ pattern2.add("mete");
+ pattern2.add("methi");
+ pattern2.add("metr");
+ pattern2.add("metric");
+ pattern2.add("metrie");
+ pattern2.add("metry");
+ pattern2.add("mev");
+ pattern2.add("mf");
+ pattern2.add("mh");
+ pattern2.add("mi.");
+ pattern2.add("mia");
+ pattern2.add("mida");
+ pattern2.add("midg");
+ pattern2.add("mig");
+ pattern2.add("milia");
+ pattern2.add("milie");
+ pattern2.add("mill");
+ pattern2.add("mina");
+ pattern2.add("mind");
+ pattern2.add("minee");
+ pattern2.add("mingl");
+ pattern2.add("mingli");
+ pattern2.add("mingly");
+ pattern2.add("mint");
+ pattern2.add("minu");
+ pattern2.add("miot");
+ pattern2.add("mis");
+ pattern2.add("miser.");
+ pattern2.add("misl");
+ pattern2.add("misti");
+ pattern2.add("mistry");
+ pattern2.add("mith");
+ pattern2.add("miz");
+ pattern2.add("mk");
+ pattern2.add("ml");
+ pattern2.add("mm");
+ pattern2.add("mmary");
+ pattern2.add("mn");
+ pattern2.add("mna");
+ pattern2.add("mnin");
+ pattern2.add("mno");
+ pattern2.add("mo");
+ pattern2.add("mocr");
+ pattern2.add("mocratiz");
+ pattern2.add("mod");
+ pattern2.add("mogo");
+ pattern2.add("mois");
+ pattern2.add("moise");
+ pattern2.add("mok");
+ pattern2.add("molest");
+ pattern2.add("mome");
+ pattern2.add("monet");
+ pattern2.add("monge");
+ pattern2.add("monia");
+ pattern2.add("monism");
+ pattern2.add("monist");
+ pattern2.add("moniz");
+ pattern2.add("monol");
+ pattern2.add("mony.");
+ pattern2.add("mor");
+ pattern2.add("mora.");
+ pattern2.add("mos");
+ pattern2.add("mosey");
+ pattern2.add("mosp");
+ pattern2.add("moth");
+ pattern2.add("mouf");
+ pattern2.add("mous");
+ pattern2.add("mov");
+ pattern2.add("mp");
+ pattern2.add("mpara");
+ pattern2.add("mparab");
+ pattern2.add("mpari");
+ pattern2.add("mpet");
+ pattern2.add("mphas");
+ pattern2.add("mpi");
+ pattern2.add("mpia");
+ pattern2.add("mpies");
+ pattern2.add("mpin");
+ pattern2.add("mpir");
+ pattern2.add("mpis");
+ pattern2.add("mpori");
+ pattern2.add("mposite");
+ pattern2.add("mpous");
+ pattern2.add("mpov");
+ pattern2.add("mptr");
+ pattern2.add("mpy");
+ pattern2.add("mr");
+ pattern2.add("ms");
+ pattern2.add("msh");
+ pattern2.add("msi");
+ pattern2.add("mt");
+ pattern2.add("mu");
+ pattern2.add("mular");
+ pattern2.add("mult");
+ pattern2.add("multi");
+ pattern2.add("mum");
+ pattern2.add("mun");
+ pattern2.add("mup");
+ pattern2.add("muu");
+ pattern2.add("mw");
+ pattern2.add("na");
+ pattern2.add("nab");
+ pattern2.add("nabu");
+ pattern2.add("nac.");
+ pattern2.add("naca");
+ pattern2.add("nact");
+ pattern2.add("nager.");
+ pattern2.add("nak");
+ pattern2.add("nali");
+ pattern2.add("nalia");
+ pattern2.add("nalt");
+ pattern2.add("namit");
+ pattern2.add("nan");
+ pattern2.add("nanci");
+ pattern2.add("nanit");
+ pattern2.add("nank");
+ pattern2.add("narc");
+ pattern2.add("nare");
+ pattern2.add("nari");
+ pattern2.add("narl");
+ pattern2.add("narm");
+ pattern2.add("nas");
+ pattern2.add("nasc");
+ pattern2.add("nasti");
+ pattern2.add("nat");
+ pattern2.add("natal");
+ pattern2.add("natomiz");
+ pattern2.add("nau");
+ pattern2.add("nause");
+ pattern2.add("naut");
+ pattern2.add("nave");
+ pattern2.add("nb");
+ pattern2.add("ncar");
+ pattern2.add("nces.");
+ pattern2.add("ncha");
+ pattern2.add("ncheo");
+ pattern2.add("nchil");
+ pattern2.add("nchis");
+ pattern2.add("ncin");
+ pattern2.add("ncit");
+ pattern2.add("ncoura");
+ pattern2.add("ncr");
+ pattern2.add("ncu");
+ pattern2.add("ndai");
+ pattern2.add("ndan");
+ pattern2.add("nde");
+ pattern2.add("ndest.");
+ pattern2.add("ndib");
+ pattern2.add("ndif");
+ pattern2.add("ndit");
+ pattern2.add("ndiz");
+ pattern2.add("nduc");
+ pattern2.add("ndur");
+ pattern2.add("ndwe");
+ pattern2.add("ne.");
+ pattern2.add("near");
+ pattern2.add("neb");
+ pattern2.add("nebu");
+ pattern2.add("nec");
+ pattern2.add("neck");
+ pattern2.add("ned");
+ pattern2.add("negat");
+ pattern2.add("negativ");
+ pattern2.add("nege");
+ pattern2.add("nela");
+ pattern2.add("neliz");
+ pattern2.add("nemi");
+ pattern2.add("nemo");
+ pattern2.add("nen");
+ pattern2.add("nene");
+ pattern2.add("neo");
+ pattern2.add("nepo");
+ pattern2.add("neq");
+ pattern2.add("ner");
+ pattern2.add("nerab");
+ pattern2.add("nerar");
+ pattern2.add("nere");
+ pattern2.add("neri");
+ pattern2.add("nerr");
+ pattern2.add("nes");
+ pattern2.add("nes.");
+ pattern2.add("nesp");
+ pattern2.add("nest");
+ pattern2.add("nesw");
+ pattern2.add("netic");
+ pattern2.add("nev");
+ pattern2.add("neve");
+ pattern2.add("new");
+ pattern2.add("nf");
+ pattern2.add("ngab");
+ pattern2.add("ngel");
+ pattern2.add("ngene");
+ pattern2.add("ngere");
+ pattern2.add("ngeri");
+ pattern2.add("ngha");
+ pattern2.add("ngib");
+ pattern2.add("ngin");
+ pattern2.add("ngit");
+ pattern2.add("ngla");
+ pattern2.add("ngov");
+ pattern2.add("ngsh");
+ pattern2.add("ngu");
+ pattern2.add("ngum");
+ pattern2.add("ngy");
+ pattern2.add("nh");
+ pattern2.add("nha");
+ pattern2.add("nhab");
+ pattern2.add("nhe");
+ pattern2.add("nia");
+ pattern2.add("nian");
+ pattern2.add("niap");
+ pattern2.add("niba");
+ pattern2.add("nibl");
+ pattern2.add("nid");
+ pattern2.add("nidi");
+ pattern2.add("nier");
+ pattern2.add("nifi");
+ pattern2.add("nificat");
+ pattern2.add("nigr");
+ pattern2.add("nik");
+ pattern2.add("nim");
+ pattern2.add("nimiz");
+ pattern2.add("nin");
+ pattern2.add("nine.");
+ pattern2.add("ning");
+ pattern2.add("nio");
+ pattern2.add("nis.");
+ pattern2.add("nista");
+ pattern2.add("nit");
+ pattern2.add("nith");
+ pattern2.add("nitio");
+ pattern2.add("nitor");
+ pattern2.add("nitr");
+ pattern2.add("nj");
+ pattern2.add("nk");
+ pattern2.add("nkero");
+ pattern2.add("nket");
+ pattern2.add("nkin");
+ pattern2.add("nkl");
+ pattern2.add("nl");
+ pattern2.add("nm");
+ pattern2.add("nme");
+ pattern2.add("nmet");
+ pattern2.add("nn");
+ pattern2.add("nne");
+ pattern2.add("nnial");
+ pattern2.add("nniv");
+ pattern2.add("nobl");
+ pattern2.add("noble");
+ pattern2.add("nocl");
+ pattern2.add("nod");
+ pattern2.add("noe");
+ pattern2.add("nog");
+ pattern2.add("noge");
+ pattern2.add("noisi");
+ pattern2.add("noli");
+ pattern2.add("nologis");
+ pattern2.add("nomic");
+ pattern2.add("nomiz");
+ pattern2.add("nomo");
+ pattern2.add("nomy");
+ pattern2.add("non");
+ pattern2.add("nonag");
+ pattern2.add("noni");
+ pattern2.add("noniz");
+ pattern2.add("nop");
+ pattern2.add("nopoli");
+ pattern2.add("norab");
+ pattern2.add("norary");
+ pattern2.add("nosc");
+ pattern2.add("nose");
+ pattern2.add("nost");
+ pattern2.add("nota");
+ pattern2.add("nou");
+ pattern2.add("noun");
+ pattern2.add("novel");
+ pattern2.add("nowl");
+ pattern2.add("np");
+ pattern2.add("npi");
+ pattern2.add("nprec");
+ pattern2.add("nq");
+ pattern2.add("nr");
+ pattern2.add("nru");
+ pattern2.add("ns");
+ pattern2.add("nsab");
+ pattern2.add("nsati");
+ pattern2.add("nsc");
+ pattern2.add("nse");
+ pattern2.add("nses");
+ pattern2.add("nsid");
+ pattern2.add("nsig");
+ pattern2.add("nsl");
+ pattern2.add("nsm");
+ pattern2.add("nsoc");
+ pattern2.add("nspe");
+ pattern2.add("nspi");
+ pattern2.add("nstabl");
+ pattern2.add("nt");
+ pattern2.add("ntab");
+ pattern2.add("nters");
+ pattern2.add("nti");
+ pattern2.add("ntib");
+ pattern2.add("ntier");
+ pattern2.add("ntif");
+ pattern2.add("ntine");
+ pattern2.add("nting");
+ pattern2.add("ntip");
+ pattern2.add("ntrolli");
+ pattern2.add("nts");
+ pattern2.add("ntume");
+ pattern2.add("nua");
+ pattern2.add("nud");
+ pattern2.add("nuen");
+ pattern2.add("nuffe");
+ pattern2.add("nuin");
+ pattern2.add("nuit");
+ pattern2.add("num");
+ pattern2.add("nume");
+ pattern2.add("numi");
+ pattern2.add("nun");
+ pattern2.add("nuo");
+ pattern2.add("nutr");
+ pattern2.add("nv");
+ pattern2.add("nw");
+ pattern2.add("nym");
+ pattern2.add("nyp");
+ pattern2.add("nz");
+ pattern2.add("nza");
+ pattern2.add("oa");
+ pattern2.add("oad");
+ pattern2.add("oales");
+ pattern2.add("oard");
+ pattern2.add("oase");
+ pattern2.add("oaste");
+ pattern2.add("oati");
+ pattern2.add("obab");
+ pattern2.add("obar");
+ pattern2.add("obel");
+ pattern2.add("obi");
+ pattern2.add("obin");
+ pattern2.add("obing");
+ pattern2.add("obr");
+ pattern2.add("obul");
+ pattern2.add("oce");
+ pattern2.add("och");
+ pattern2.add("ochet");
+ pattern2.add("ocif");
+ pattern2.add("ocil");
+ pattern2.add("oclam");
+ pattern2.add("ocod");
+ pattern2.add("ocrac");
+ pattern2.add("ocratiz");
+ pattern2.add("ocre");
+ pattern2.add("ocrit");
+ pattern2.add("octora");
+ pattern2.add("ocula");
+ pattern2.add("ocure");
+ pattern2.add("odded");
+ pattern2.add("odic");
+ pattern2.add("odio");
+ pattern2.add("odo");
+ pattern2.add("odor");
+ pattern2.add("oduct.");
+ pattern2.add("oducts");
+ pattern2.add("oel");
+ pattern2.add("oeng");
+ pattern2.add("oer");
+ pattern2.add("oeta");
+ pattern2.add("oev");
+ pattern2.add("ofi");
+ pattern2.add("ofite");
+ pattern2.add("ofitt");
+ pattern2.add("ogar");
+ pattern2.add("ogativ");
+ pattern2.add("ogato");
+ pattern2.add("oge");
+ pattern2.add("ogene");
+ pattern2.add("ogeo");
+ pattern2.add("oger");
+ pattern2.add("ogie");
+ pattern2.add("ogis");
+ pattern2.add("ogit");
+ pattern2.add("ogl");
+ pattern2.add("ogly");
+ pattern2.add("ogniz");
+ pattern2.add("ogro");
+ pattern2.add("ogui");
+ pattern2.add("ogy");
+ pattern2.add("ogyn");
+ pattern2.add("oh");
+ pattern2.add("ohab");
+ pattern2.add("oi");
+ pattern2.add("oices");
+ pattern2.add("oider");
+ pattern2.add("oiff");
+ pattern2.add("oig");
+ pattern2.add("oilet");
+ pattern2.add("oing");
+ pattern2.add("ointer");
+ pattern2.add("oism");
+ pattern2.add("oison");
+ pattern2.add("oisten");
+ pattern2.add("oiter");
+ pattern2.add("oj");
+ pattern2.add("ok");
+ pattern2.add("oken");
+ pattern2.add("okie");
+ pattern2.add("ola");
+ pattern2.add("olan");
+ pattern2.add("olass");
+ pattern2.add("old");
+ pattern2.add("olde");
+ pattern2.add("oler");
+ pattern2.add("olesc");
+ pattern2.add("olet");
+ pattern2.add("olfi");
+ pattern2.add("oli");
+ pattern2.add("olia");
+ pattern2.add("olice");
+ pattern2.add("olid.");
+ pattern2.add("olif");
+ pattern2.add("olil");
+ pattern2.add("oling");
+ pattern2.add("olio");
+ pattern2.add("olis.");
+ pattern2.add("olish");
+ pattern2.add("olite");
+ pattern2.add("olitio");
+ pattern2.add("oliv");
+ pattern2.add("ollie");
+ pattern2.add("ologiz");
+ pattern2.add("olor");
+ pattern2.add("olpl");
+ pattern2.add("olt");
+ pattern2.add("olub");
+ pattern2.add("olume");
+ pattern2.add("olun");
+ pattern2.add("olus");
+ pattern2.add("olv");
+ pattern2.add("oly");
+ pattern2.add("omah");
+ pattern2.add("omal");
+ pattern2.add("omatiz");
+ pattern2.add("ombe");
+ pattern2.add("ombl");
+ pattern2.add("ome");
+ pattern2.add("omena");
+ pattern2.add("omerse");
+ pattern2.add("omet");
+ pattern2.add("ometry");
+ pattern2.add("omia");
+ pattern2.add("omic.");
+ pattern2.add("omica");
+ pattern2.add("omid");
+ pattern2.add("omin");
+ pattern2.add("omini");
+ pattern2.add("ommend");
+ pattern2.add("omoge");
+ pattern2.add("omon");
+ pattern2.add("ompi");
+ pattern2.add("ompro");
+ pattern2.add("on");
+ pattern2.add("ona");
+ pattern2.add("onac");
+ pattern2.add("onan");
+ pattern2.add("onc");
+ pattern2.add("oncil");
+ pattern2.add("ond");
+ pattern2.add("ondo");
+ pattern2.add("onen");
+ pattern2.add("onest");
+ pattern2.add("ongu");
+ pattern2.add("onic");
+ pattern2.add("onio");
+ pattern2.add("onis");
+ pattern2.add("oniu");
+ pattern2.add("onkey");
+ pattern2.add("onodi");
+ pattern2.add("onomy");
+ pattern2.add("ons");
+ pattern2.add("onspi");
+ pattern2.add("onspira");
+ pattern2.add("onsu");
+ pattern2.add("onten");
+ pattern2.add("onti");
+ pattern2.add("ontif");
+ pattern2.add("onum");
+ pattern2.add("onva");
+ pattern2.add("oo");
+ pattern2.add("oode");
+ pattern2.add("oodi");
+ pattern2.add("ook");
+ pattern2.add("oopi");
+ pattern2.add("oord");
+ pattern2.add("oost");
+ pattern2.add("opa");
+ pattern2.add("oped");
+ pattern2.add("oper");
+ pattern2.add("opera");
+ pattern2.add("operag");
+ pattern2.add("oph");
+ pattern2.add("ophan");
+ pattern2.add("opher");
+ pattern2.add("oping");
+ pattern2.add("opit");
+ pattern2.add("opon");
+ pattern2.add("oposi");
+ pattern2.add("opr");
+ pattern2.add("opu");
+ pattern2.add("opy");
+ pattern2.add("oq");
+ pattern2.add("ora");
+ pattern2.add("ora.");
+ pattern2.add("orag");
+ pattern2.add("oraliz");
+ pattern2.add("orange");
+ pattern2.add("orea");
+ pattern2.add("oreal");
+ pattern2.add("orei");
+ pattern2.add("oresh");
+ pattern2.add("orest.");
+ pattern2.add("orew");
+ pattern2.add("orgu");
+ pattern2.add("oria");
+ pattern2.add("orica");
+ pattern2.add("oril");
+ pattern2.add("orin");
+ pattern2.add("orio");
+ pattern2.add("ority");
+ pattern2.add("oriu");
+ pattern2.add("ormi");
+ pattern2.add("orne");
+ pattern2.add("orof");
+ pattern2.add("oroug");
+ pattern2.add("orpe");
+ pattern2.add("orrh");
+ pattern2.add("orse");
+ pattern2.add("orsen");
+ pattern2.add("orst");
+ pattern2.add("orthi");
+ pattern2.add("orthy");
+ pattern2.add("orty");
+ pattern2.add("orum");
+ pattern2.add("ory");
+ pattern2.add("osal");
+ pattern2.add("osc");
+ pattern2.add("osce");
+ pattern2.add("oscop");
+ pattern2.add("oscopi");
+ pattern2.add("oscr");
+ pattern2.add("osie");
+ pattern2.add("ositiv");
+ pattern2.add("osito");
+ pattern2.add("osity");
+ pattern2.add("osiu");
+ pattern2.add("osl");
+ pattern2.add("oso");
+ pattern2.add("ospa");
+ pattern2.add("ospo");
+ pattern2.add("osta");
+ pattern2.add("ostati");
+ pattern2.add("ostil");
+ pattern2.add("ostit");
+ pattern2.add("otan");
+ pattern2.add("oteleg");
+ pattern2.add("oter.");
+ pattern2.add("oters");
+ pattern2.add("otes");
+ pattern2.add("oth");
+ pattern2.add("othesi");
+ pattern2.add("othi");
+ pattern2.add("otic.");
+ pattern2.add("otica");
+ pattern2.add("otice");
+ pattern2.add("otif");
+ pattern2.add("otis");
+ pattern2.add("otos");
+ pattern2.add("ou");
+ pattern2.add("oubl");
+ pattern2.add("ouchi");
+ pattern2.add("ouet");
+ pattern2.add("oul");
+ pattern2.add("ouncer");
+ pattern2.add("ound");
+ pattern2.add("ouv");
+ pattern2.add("oven");
+ pattern2.add("overne");
+ pattern2.add("overs");
+ pattern2.add("overt");
+ pattern2.add("ovis");
+ pattern2.add("oviti");
+ pattern2.add("ovol");
+ pattern2.add("owder");
+ pattern2.add("owel");
+ pattern2.add("owest");
+ pattern2.add("owi");
+ pattern2.add("owni");
+ pattern2.add("owo");
+ pattern2.add("oya");
+ pattern2.add("pa");
+ pattern2.add("paca");
+ pattern2.add("pace");
+ pattern2.add("pact");
+ pattern2.add("pad");
+ pattern2.add("pagan");
+ pattern2.add("pagat");
+ pattern2.add("pai");
+ pattern2.add("pain");
+ pattern2.add("pal");
+ pattern2.add("pana");
+ pattern2.add("panel");
+ pattern2.add("panty");
+ pattern2.add("pany");
+ pattern2.add("pap");
+ pattern2.add("papu");
+ pattern2.add("parabl");
+ pattern2.add("parage");
+ pattern2.add("pardi");
+ pattern2.add("pare");
+ pattern2.add("parel");
+ pattern2.add("pari");
+ pattern2.add("paris");
+ pattern2.add("pate");
+ pattern2.add("pater");
+ pattern2.add("pathic");
+ pattern2.add("pathy");
+ pattern2.add("patric");
+ pattern2.add("pav");
+ pattern2.add("pay");
+ pattern2.add("pb");
+ pattern2.add("pd");
+ pattern2.add("pe.");
+ pattern2.add("pea");
+ pattern2.add("pearl");
+ pattern2.add("pec");
+ pattern2.add("ped");
+ pattern2.add("pede");
+ pattern2.add("pedi");
+ pattern2.add("pedia");
+ pattern2.add("pedic");
+ pattern2.add("pee");
+ pattern2.add("peed");
+ pattern2.add("pek");
+ pattern2.add("pela");
+ pattern2.add("pelie");
+ pattern2.add("penan");
+ pattern2.add("penc");
+ pattern2.add("penth");
+ pattern2.add("peon");
+ pattern2.add("pera.");
+ pattern2.add("perabl");
+ pattern2.add("perag");
+ pattern2.add("peri");
+ pattern2.add("perist");
+ pattern2.add("permal");
+ pattern2.add("perme");
+ pattern2.add("pern");
+ pattern2.add("pero");
+ pattern2.add("perti");
+ pattern2.add("peru");
+ pattern2.add("perv");
+ pattern2.add("pet");
+ pattern2.add("peten");
+ pattern2.add("petiz");
+ pattern2.add("pf");
+ pattern2.add("pg");
+ pattern2.add("ph.");
+ pattern2.add("phari");
+ pattern2.add("pheno");
+ pattern2.add("pher");
+ pattern2.add("phes.");
+ pattern2.add("phic");
+ pattern2.add("phie");
+ pattern2.add("phing");
+ pattern2.add("phisti");
+ pattern2.add("phiz");
+ pattern2.add("phl");
+ pattern2.add("phob");
+ pattern2.add("phone");
+ pattern2.add("phoni");
+ pattern2.add("phor");
+ pattern2.add("phs");
+ pattern2.add("pht");
+ pattern2.add("phu");
+ pattern2.add("phy");
+ pattern2.add("pia");
+ pattern2.add("pian");
+ pattern2.add("picie");
+ pattern2.add("picy");
+ pattern2.add("pid");
+ pattern2.add("pida");
+ pattern2.add("pide");
+ pattern2.add("pidi");
+ pattern2.add("piec");
+ pattern2.add("pien");
+ pattern2.add("pigrap");
+ pattern2.add("pilo");
+ pattern2.add("pin");
+ pattern2.add("pin.");
+ pattern2.add("pind");
+ pattern2.add("pino");
+ pattern2.add("pio");
+ pattern2.add("pion");
+ pattern2.add("pith");
+ pattern2.add("pitha");
+ pattern2.add("pitu");
+ pattern2.add("pk");
+ pattern2.add("pl");
+ pattern2.add("plan");
+ pattern2.add("plast");
+ pattern2.add("plia");
+ pattern2.add("plier");
+ pattern2.add("plig");
+ pattern2.add("plin");
+ pattern2.add("ploi");
+ pattern2.add("plum");
+ pattern2.add("plumb");
+ pattern2.add("pm");
+ pattern2.add("pn");
+ pattern2.add("poc");
+ pattern2.add("pod.");
+ pattern2.add("poem");
+ pattern2.add("poet");
+ pattern2.add("pog");
+ pattern2.add("poin");
+ pattern2.add("point");
+ pattern2.add("polyt");
+ pattern2.add("poni");
+ pattern2.add("pop");
+ pattern2.add("por");
+ pattern2.add("pory");
+ pattern2.add("pos");
+ pattern2.add("poss");
+ pattern2.add("pot");
+ pattern2.add("pota");
+ pattern2.add("poun");
+ pattern2.add("pp");
+ pattern2.add("ppara");
+ pattern2.add("ppe");
+ pattern2.add("pped");
+ pattern2.add("ppel");
+ pattern2.add("ppen");
+ pattern2.add("pper");
+ pattern2.add("ppet");
+ pattern2.add("pposite");
+ pattern2.add("pr");
+ pattern2.add("praye");
+ pattern2.add("preci");
+ pattern2.add("preco");
+ pattern2.add("preem");
+ pattern2.add("prefac");
+ pattern2.add("prela");
+ pattern2.add("prer");
+ pattern2.add("prese");
+ pattern2.add("press");
+ pattern2.add("preten");
+ pattern2.add("prev");
+ pattern2.add("prie");
+ pattern2.add("print");
+ pattern2.add("pris");
+ pattern2.add("priso");
+ pattern2.add("proca");
+ pattern2.add("profit");
+ pattern2.add("prol");
+ pattern2.add("prose");
+ pattern2.add("prot");
+ pattern2.add("ps");
+ pattern2.add("pse");
+ pattern2.add("psh");
+ pattern2.add("psib");
+ pattern2.add("pt");
+ pattern2.add("ptab");
+ pattern2.add("pte");
+ pattern2.add("pth");
+ pattern2.add("ptim");
+ pattern2.add("ptur");
+ pattern2.add("ptw");
+ pattern2.add("pub");
+ pattern2.add("pue");
+ pattern2.add("puf");
+ pattern2.add("pulc");
+ pattern2.add("pum");
+ pattern2.add("pun");
+ pattern2.add("purr");
+ pattern2.add("pus");
+ pattern2.add("put");
+ pattern2.add("pute");
+ pattern2.add("puter");
+ pattern2.add("putr");
+ pattern2.add("putted");
+ pattern2.add("puttin");
+ pattern2.add("pw");
+ pattern2.add("qu");
+ pattern2.add("quav");
+ pattern2.add("que.");
+ pattern2.add("quer");
+ pattern2.add("quet");
+ pattern2.add("rab");
+ pattern2.add("rabi");
+ pattern2.add("rache");
+ pattern2.add("racl");
+ pattern2.add("raffi");
+ pattern2.add("raft");
+ pattern2.add("rai");
+ pattern2.add("ralo");
+ pattern2.add("ramet");
+ pattern2.add("rami");
+ pattern2.add("raneo");
+ pattern2.add("range");
+ pattern2.add("rani");
+ pattern2.add("rano");
+ pattern2.add("raper");
+ pattern2.add("raphy");
+ pattern2.add("rarc");
+ pattern2.add("rare");
+ pattern2.add("raref");
+ pattern2.add("raril");
+ pattern2.add("ras");
+ pattern2.add("ration");
+ pattern2.add("raut");
+ pattern2.add("ravai");
+ pattern2.add("ravel");
+ pattern2.add("razie");
+ pattern2.add("rb");
+ pattern2.add("rbab");
+ pattern2.add("rbag");
+ pattern2.add("rbi");
+ pattern2.add("rbif");
+ pattern2.add("rbin");
+ pattern2.add("rbine");
+ pattern2.add("rbing.");
+ pattern2.add("rbo");
+ pattern2.add("rc");
+ pattern2.add("rce");
+ pattern2.add("rcen");
+ pattern2.add("rcha");
+ pattern2.add("rcher");
+ pattern2.add("rcib");
+ pattern2.add("rcit");
+ pattern2.add("rcum");
+ pattern2.add("rdal");
+ pattern2.add("rdi");
+ pattern2.add("rdia");
+ pattern2.add("rdier");
+ pattern2.add("rdin");
+ pattern2.add("rding");
+ pattern2.add("re.");
+ pattern2.add("real");
+ pattern2.add("rean");
+ pattern2.add("rearr");
+ pattern2.add("reav");
+ pattern2.add("reaw");
+ pattern2.add("rebrat");
+ pattern2.add("recoll");
+ pattern2.add("recompe");
+ pattern2.add("recre");
+ pattern2.add("red");
+ pattern2.add("rede");
+ pattern2.add("redis");
+ pattern2.add("redit");
+ pattern2.add("refac");
+ pattern2.add("refe");
+ pattern2.add("refer.");
+ pattern2.add("refi");
+ pattern2.add("refy");
+ pattern2.add("regis");
+ pattern2.add("reit");
+ pattern2.add("reli");
+ pattern2.add("relu");
+ pattern2.add("renta");
+ pattern2.add("rente");
+ pattern2.add("reo");
+ pattern2.add("repin");
+ pattern2.add("reposi");
+ pattern2.add("repu");
+ pattern2.add("rer");
+ pattern2.add("reri");
+ pattern2.add("rero");
+ pattern2.add("reru");
+ pattern2.add("res.");
+ pattern2.add("respi");
+ pattern2.add("ressib");
+ pattern2.add("rest");
+ pattern2.add("restal");
+ pattern2.add("restr");
+ pattern2.add("reter");
+ pattern2.add("retiz");
+ pattern2.add("retri");
+ pattern2.add("reu");
+ pattern2.add("reuti");
+ pattern2.add("rev");
+ pattern2.add("reval");
+ pattern2.add("revel");
+ pattern2.add("rever.");
+ pattern2.add("revers");
+ pattern2.add("revert");
+ pattern2.add("revil");
+ pattern2.add("revolu");
+ pattern2.add("rewh");
+ pattern2.add("rf");
+ pattern2.add("rfu");
+ pattern2.add("rfy");
+ pattern2.add("rg");
+ pattern2.add("rger");
+ pattern2.add("rget");
+ pattern2.add("rgic");
+ pattern2.add("rgin");
+ pattern2.add("rging");
+ pattern2.add("rgis");
+ pattern2.add("rgit");
+ pattern2.add("rgl");
+ pattern2.add("rgon");
+ pattern2.add("rgu");
+ pattern2.add("rh");
+ pattern2.add("rh.");
+ pattern2.add("rhal");
+ pattern2.add("ria");
+ pattern2.add("riab");
+ pattern2.add("riag");
+ pattern2.add("rib");
+ pattern2.add("riba");
+ pattern2.add("ricas");
+ pattern2.add("rice");
+ pattern2.add("rici");
+ pattern2.add("ricid");
+ pattern2.add("ricie");
+ pattern2.add("rico");
+ pattern2.add("rider");
+ pattern2.add("rienc");
+ pattern2.add("rient");
+ pattern2.add("rier");
+ pattern2.add("riet");
+ pattern2.add("rigan");
+ pattern2.add("rigi");
+ pattern2.add("riliz");
+ pattern2.add("riman");
+ pattern2.add("rimi");
+ pattern2.add("rimo");
+ pattern2.add("rimpe");
+ pattern2.add("rina");
+ pattern2.add("rina.");
+ pattern2.add("rind");
+ pattern2.add("rine");
+ pattern2.add("ring");
+ pattern2.add("rio");
+ pattern2.add("riph");
+ pattern2.add("riphe");
+ pattern2.add("ripl");
+ pattern2.add("riplic");
+ pattern2.add("riq");
+ pattern2.add("ris");
+ pattern2.add("ris.");
+ pattern2.add("risc");
+ pattern2.add("rish");
+ pattern2.add("risp");
+ pattern2.add("ritab");
+ pattern2.add("rited.");
+ pattern2.add("riter.");
+ pattern2.add("riters");
+ pattern2.add("ritic");
+ pattern2.add("ritu");
+ pattern2.add("ritur");
+ pattern2.add("rivel");
+ pattern2.add("rivet");
+ pattern2.add("rivi");
+ pattern2.add("rj");
+ pattern2.add("rket");
+ pattern2.add("rkle");
+ pattern2.add("rklin");
+ pattern2.add("rl");
+ pattern2.add("rle");
+ pattern2.add("rled");
+ pattern2.add("rlig");
+ pattern2.add("rlis");
+ pattern2.add("rlish");
+ pattern2.add("rlo");
+ pattern2.add("rm");
+ pattern2.add("rmac");
+ pattern2.add("rme");
+ pattern2.add("rmen");
+ pattern2.add("rmers");
+ pattern2.add("rming");
+ pattern2.add("rming.");
+ pattern2.add("rmio");
+ pattern2.add("rmit");
+ pattern2.add("rmy");
+ pattern2.add("rnar");
+ pattern2.add("rnel");
+ pattern2.add("rner");
+ pattern2.add("rnet");
+ pattern2.add("rney");
+ pattern2.add("rnic");
+ pattern2.add("rnis");
+ pattern2.add("rnit");
+ pattern2.add("rniv");
+ pattern2.add("rno");
+ pattern2.add("rnou");
+ pattern2.add("rnu");
+ pattern2.add("robl");
+ pattern2.add("roc");
+ pattern2.add("rocr");
+ pattern2.add("roe");
+ pattern2.add("rofe");
+ pattern2.add("rofil");
+ pattern2.add("rok");
+ pattern2.add("roker");
+ pattern2.add("role.");
+ pattern2.add("romete");
+ pattern2.add("romi");
+ pattern2.add("romp");
+ pattern2.add("ronal");
+ pattern2.add("rone");
+ pattern2.add("ronis");
+ pattern2.add("ronta");
+ pattern2.add("room");
+ pattern2.add("root");
+ pattern2.add("ropel");
+ pattern2.add("ropic");
+ pattern2.add("rori");
+ pattern2.add("roro");
+ pattern2.add("rosper");
+ pattern2.add("ross");
+ pattern2.add("rothe");
+ pattern2.add("roty");
+ pattern2.add("rova");
+ pattern2.add("rovel");
+ pattern2.add("rox");
+ pattern2.add("rp");
+ pattern2.add("rpea");
+ pattern2.add("rpent");
+ pattern2.add("rper.");
+ pattern2.add("rpet");
+ pattern2.add("rph");
+ pattern2.add("rping");
+ pattern2.add("rpo");
+ pattern2.add("rr");
+ pattern2.add("rrec");
+ pattern2.add("rref");
+ pattern2.add("rreo");
+ pattern2.add("rrest");
+ pattern2.add("rrio");
+ pattern2.add("rriv");
+ pattern2.add("rron");
+ pattern2.add("rros");
+ pattern2.add("rrys");
+ pattern2.add("rs");
+ pattern2.add("rsa");
+ pattern2.add("rsati");
+ pattern2.add("rsc");
+ pattern2.add("rse");
+ pattern2.add("rsec");
+ pattern2.add("rsecr");
+ pattern2.add("rser.");
+ pattern2.add("rses");
+ pattern2.add("rsev");
+ pattern2.add("rsh");
+ pattern2.add("rsha");
+ pattern2.add("rsi");
+ pattern2.add("rsib");
+ pattern2.add("rson");
+ pattern2.add("rsp");
+ pattern2.add("rsw");
+ pattern2.add("rtach");
+ pattern2.add("rtag");
+ pattern2.add("rteb");
+ pattern2.add("rtend");
+ pattern2.add("rteo");
+ pattern2.add("rti");
+ pattern2.add("rtib");
+ pattern2.add("rtid");
+ pattern2.add("rtier");
+ pattern2.add("rtig");
+ pattern2.add("rtili");
+ pattern2.add("rtill");
+ pattern2.add("rtily");
+ pattern2.add("rtist");
+ pattern2.add("rtiv");
+ pattern2.add("rtri");
+ pattern2.add("rtroph");
+ pattern2.add("rtsh");
+ pattern2.add("rua");
+ pattern2.add("ruel");
+ pattern2.add("ruen");
+ pattern2.add("rugl");
+ pattern2.add("ruin");
+ pattern2.add("rumpl");
+ pattern2.add("run");
+ pattern2.add("runk");
+ pattern2.add("runty");
+ pattern2.add("rusc");
+ pattern2.add("rutin");
+ pattern2.add("rve");
+ pattern2.add("rveli");
+ pattern2.add("rven");
+ pattern2.add("rver.");
+ pattern2.add("rvest");
+ pattern2.add("rvey");
+ pattern2.add("rvic");
+ pattern2.add("rviv");
+ pattern2.add("rvo");
+ pattern2.add("rw");
+ pattern2.add("ryc");
+ pattern2.add("rynge");
+ pattern2.add("ryt");
+ pattern2.add("sa");
+ pattern2.add("sab");
+ pattern2.add("sack");
+ pattern2.add("sacri");
+ pattern2.add("sact");
+ pattern2.add("sai");
+ pattern2.add("salar");
+ pattern2.add("salm");
+ pattern2.add("salo");
+ pattern2.add("salt");
+ pattern2.add("sanc");
+ pattern2.add("sande");
+ pattern2.add("sap");
+ pattern2.add("sata");
+ pattern2.add("satio");
+ pattern2.add("satu");
+ pattern2.add("sau");
+ pattern2.add("savor");
+ pattern2.add("saw");
+ pattern2.add("sb");
+ pattern2.add("scant");
+ pattern2.add("scap");
+ pattern2.add("scav");
+ pattern2.add("sced");
+ pattern2.add("scei");
+ pattern2.add("sces");
+ pattern2.add("sch");
+ pattern2.add("scho");
+ pattern2.add("scie");
+ pattern2.add("scind");
+ pattern2.add("scle");
+ pattern2.add("scli");
+ pattern2.add("scof");
+ pattern2.add("scopy");
+ pattern2.add("scoura");
+ pattern2.add("scu");
+ pattern2.add("sd");
+ pattern2.add("se.");
+ pattern2.add("sea");
+ pattern2.add("seas");
+ pattern2.add("seaw");
+ pattern2.add("seco");
+ pattern2.add("sect");
+ pattern2.add("sed");
+ pattern2.add("sede");
+ pattern2.add("sedl");
+ pattern2.add("seg");
+ pattern2.add("segr");
+ pattern2.add("sei");
+ pattern2.add("sele");
+ pattern2.add("self");
+ pattern2.add("selv");
+ pattern2.add("seme");
+ pattern2.add("semol");
+ pattern2.add("senat");
+ pattern2.add("senc");
+ pattern2.add("send");
+ pattern2.add("sened");
+ pattern2.add("seng");
+ pattern2.add("senin");
+ pattern2.add("sentd");
+ pattern2.add("sentl");
+ pattern2.add("sepa");
+ pattern2.add("ser.");
+ pattern2.add("serl");
+ pattern2.add("sero");
+ pattern2.add("servo");
+ pattern2.add("ses");
+ pattern2.add("sesh");
+ pattern2.add("sest");
+ pattern2.add("seum");
+ pattern2.add("sev");
+ pattern2.add("seven");
+ pattern2.add("sewi");
+ pattern2.add("sex");
+ pattern2.add("sf");
+ pattern2.add("sg");
+ pattern2.add("sh");
+ pattern2.add("sh.");
+ pattern2.add("sher");
+ pattern2.add("shev");
+ pattern2.add("shin");
+ pattern2.add("shio");
+ pattern2.add("ship");
+ pattern2.add("shiv");
+ pattern2.add("sho");
+ pattern2.add("shold");
+ pattern2.add("shon");
+ pattern2.add("shor");
+ pattern2.add("short");
+ pattern2.add("shw");
+ pattern2.add("sib");
+ pattern2.add("sicc");
+ pattern2.add("side.");
+ pattern2.add("sides");
+ pattern2.add("sidi");
+ pattern2.add("sidiz");
+ pattern2.add("signa");
+ pattern2.add("sile");
+ pattern2.add("sily");
+ pattern2.add("sin");
+ pattern2.add("sina");
+ pattern2.add("sine.");
+ pattern2.add("sing");
+ pattern2.add("sio");
+ pattern2.add("sion");
+ pattern2.add("siona");
+ pattern2.add("sir");
+ pattern2.add("sira");
+ pattern2.add("sis");
+ pattern2.add("sitio");
+ pattern2.add("siu");
+ pattern2.add("siv");
+ pattern2.add("siz");
+ pattern2.add("sk");
+ pattern2.add("ske");
+ pattern2.add("sket");
+ pattern2.add("skine");
+ pattern2.add("sking");
+ pattern2.add("sl");
+ pattern2.add("slat");
+ pattern2.add("sle");
+ pattern2.add("slith");
+ pattern2.add("sm");
+ pattern2.add("sma");
+ pattern2.add("small");
+ pattern2.add("sman");
+ pattern2.add("smel");
+ pattern2.add("smen");
+ pattern2.add("smith");
+ pattern2.add("smold");
+ pattern2.add("sn");
+ pattern2.add("so");
+ pattern2.add("soce");
+ pattern2.add("soft");
+ pattern2.add("solab");
+ pattern2.add("sold");
+ pattern2.add("solic");
+ pattern2.add("solv");
+ pattern2.add("som");
+ pattern2.add("son.");
+ pattern2.add("sona");
+ pattern2.add("song");
+ pattern2.add("sop");
+ pattern2.add("sophic");
+ pattern2.add("sophiz");
+ pattern2.add("sophy");
+ pattern2.add("sorc");
+ pattern2.add("sord");
+ pattern2.add("sov");
+ pattern2.add("sovi");
+ pattern2.add("spa");
+ pattern2.add("spai");
+ pattern2.add("span");
+ pattern2.add("spend");
+ pattern2.add("speo");
+ pattern2.add("sper");
+ pattern2.add("sphe");
+ pattern2.add("spher");
+ pattern2.add("spho");
+ pattern2.add("spil");
+ pattern2.add("sping");
+ pattern2.add("spio");
+ pattern2.add("sply");
+ pattern2.add("spon");
+ pattern2.add("spor");
+ pattern2.add("spot");
+ pattern2.add("squall");
+ pattern2.add("sr");
+ pattern2.add("ss");
+ pattern2.add("ssa");
+ pattern2.add("ssas");
+ pattern2.add("ssc");
+ pattern2.add("ssel");
+ pattern2.add("sseng");
+ pattern2.add("sses.");
+ pattern2.add("sset");
+ pattern2.add("ssi");
+ pattern2.add("ssie");
+ pattern2.add("ssier");
+ pattern2.add("ssily");
+ pattern2.add("ssl");
+ pattern2.add("ssli");
+ pattern2.add("ssn");
+ pattern2.add("sspend");
+ pattern2.add("sst");
+ pattern2.add("ssura");
+ pattern2.add("ssw");
+ pattern2.add("st.");
+ pattern2.add("stag");
+ pattern2.add("stal");
+ pattern2.add("stami");
+ pattern2.add("stand");
+ pattern2.add("stap");
+ pattern2.add("stat.");
+ pattern2.add("sted");
+ pattern2.add("sterni");
+ pattern2.add("stero");
+ pattern2.add("stew");
+ pattern2.add("stewa");
+ pattern2.add("sthe");
+ pattern2.add("sti");
+ pattern2.add("sti.");
+ pattern2.add("stia");
+ pattern2.add("stic");
+ pattern2.add("stick");
+ pattern2.add("stie");
+ pattern2.add("stif");
+ pattern2.add("sting");
+ pattern2.add("stir");
+ pattern2.add("stle");
+ pattern2.add("stock");
+ pattern2.add("stoma");
+ pattern2.add("stone");
+ pattern2.add("stop");
+ pattern2.add("store");
+ pattern2.add("str");
+ pattern2.add("strad");
+ pattern2.add("stratu");
+ pattern2.add("stray");
+ pattern2.add("strid");
+ pattern2.add("stry");
+ pattern2.add("stw");
+ pattern2.add("sty");
+ pattern2.add("su");
+ pattern2.add("sual");
+ pattern2.add("sub");
+ pattern2.add("sug");
+ pattern2.add("suis");
+ pattern2.add("suit");
+ pattern2.add("sul");
+ pattern2.add("sum");
+ pattern2.add("sumi");
+ pattern2.add("sun");
+ pattern2.add("sur");
+ pattern2.add("sv");
+ pattern2.add("sw");
+ pattern2.add("swo");
+ pattern2.add("sy");
+ pattern2.add("syc");
+ pattern2.add("syl");
+ pattern2.add("syno");
+ pattern2.add("syrin");
+ pattern2.add("ta");
+ pattern2.add("ta.");
+ pattern2.add("tab");
+ pattern2.add("tables");
+ pattern2.add("taboliz");
+ pattern2.add("taci");
+ pattern2.add("tado");
+ pattern2.add("taf");
+ pattern2.add("tailo");
+ pattern2.add("tal");
+ pattern2.add("tala");
+ pattern2.add("talen");
+ pattern2.add("tali");
+ pattern2.add("talk");
+ pattern2.add("tallis");
+ pattern2.add("talog");
+ pattern2.add("tamo");
+ pattern2.add("tande");
+ pattern2.add("tanta");
+ pattern2.add("taper");
+ pattern2.add("tapl");
+ pattern2.add("tara");
+ pattern2.add("tarc");
+ pattern2.add("tare");
+ pattern2.add("tariz");
+ pattern2.add("tase");
+ pattern2.add("tasy");
+ pattern2.add("tatic");
+ pattern2.add("tatur");
+ pattern2.add("taun");
+ pattern2.add("tav");
+ pattern2.add("taw");
+ pattern2.add("taxis");
+ pattern2.add("tb");
+ pattern2.add("tc");
+ pattern2.add("tch");
+ pattern2.add("tchet");
+ pattern2.add("td");
+ pattern2.add("te.");
+ pattern2.add("teadi");
+ pattern2.add("teat");
+ pattern2.add("tece");
+ pattern2.add("tect");
+ pattern2.add("ted");
+ pattern2.add("tedi");
+ pattern2.add("tee");
+ pattern2.add("teg");
+ pattern2.add("teger");
+ pattern2.add("tegi");
+ pattern2.add("tel.");
+ pattern2.add("teli");
+ pattern2.add("tels");
+ pattern2.add("tema");
+ pattern2.add("temat");
+ pattern2.add("tenan");
+ pattern2.add("tenc");
+ pattern2.add("tend");
+ pattern2.add("tenes");
+ pattern2.add("tent");
+ pattern2.add("tentag");
+ pattern2.add("teo");
+ pattern2.add("tep");
+ pattern2.add("tepe");
+ pattern2.add("terc");
+ pattern2.add("terd");
+ pattern2.add("teri");
+ pattern2.add("teries");
+ pattern2.add("teris");
+ pattern2.add("teriza");
+ pattern2.add("ternit");
+ pattern2.add("terv");
+ pattern2.add("tes.");
+ pattern2.add("tess");
+ pattern2.add("tess.");
+ pattern2.add("tethe");
+ pattern2.add("teu");
+ pattern2.add("tex");
+ pattern2.add("tey");
+ pattern2.add("tf");
+ pattern2.add("tg");
+ pattern2.add("th.");
+ pattern2.add("than");
+ pattern2.add("the");
+ pattern2.add("thea");
+ pattern2.add("theas");
+ pattern2.add("theat");
+ pattern2.add("theis");
+ pattern2.add("thet");
+ pattern2.add("thic.");
+ pattern2.add("thica");
+ pattern2.add("thil");
+ pattern2.add("think");
+ pattern2.add("thl");
+ pattern2.add("thode");
+ pattern2.add("thodic");
+ pattern2.add("thoo");
+ pattern2.add("thorit");
+ pattern2.add("thoriz");
+ pattern2.add("ths");
+ pattern2.add("tia");
+ pattern2.add("tiab");
+ pattern2.add("tiato");
+ pattern2.add("tib");
+ pattern2.add("tick");
+ pattern2.add("tico");
+ pattern2.add("ticu");
+ pattern2.add("tidi");
+ pattern2.add("tien");
+ pattern2.add("tif");
+ pattern2.add("tify");
+ pattern2.add("tig");
+ pattern2.add("tigu");
+ pattern2.add("tillin");
+ pattern2.add("tim");
+ pattern2.add("timp");
+ pattern2.add("timul");
+ pattern2.add("tin");
+ pattern2.add("tina");
+ pattern2.add("tine.");
+ pattern2.add("tini");
+ pattern2.add("tio");
+ pattern2.add("tioc");
+ pattern2.add("tionee");
+ pattern2.add("tiq");
+ pattern2.add("tisa");
+ pattern2.add("tise");
+ pattern2.add("tism");
+ pattern2.add("tiso");
+ pattern2.add("tisp");
+ pattern2.add("tistica");
+ pattern2.add("titl");
+ pattern2.add("tiu");
+ pattern2.add("tiv");
+ pattern2.add("tiva");
+ pattern2.add("tiz");
+ pattern2.add("tiza");
+ pattern2.add("tizen");
+ pattern2.add("tl");
+ pattern2.add("tla");
+ pattern2.add("tlan");
+ pattern2.add("tle.");
+ pattern2.add("tled");
+ pattern2.add("tles.");
+ pattern2.add("tlet.");
+ pattern2.add("tlo");
+ pattern2.add("tm");
+ pattern2.add("tme");
+ pattern2.add("tn");
+ pattern2.add("to");
+ pattern2.add("tob");
+ pattern2.add("tocrat");
+ pattern2.add("todo");
+ pattern2.add("tof");
+ pattern2.add("togr");
+ pattern2.add("toic");
+ pattern2.add("toma");
+ pattern2.add("tomb");
+ pattern2.add("tomy");
+ pattern2.add("tonali");
+ pattern2.add("tonat");
+ pattern2.add("tono");
+ pattern2.add("tony");
+ pattern2.add("tora");
+ pattern2.add("torie");
+ pattern2.add("toriz");
+ pattern2.add("tos");
+ pattern2.add("tour");
+ pattern2.add("tout");
+ pattern2.add("towar");
+ pattern2.add("tp");
+ pattern2.add("tra");
+ pattern2.add("trab");
+ pattern2.add("trach");
+ pattern2.add("traci");
+ pattern2.add("tracit");
+ pattern2.add("tracte");
+ pattern2.add("tras");
+ pattern2.add("traven");
+ pattern2.add("traves");
+ pattern2.add("tref");
+ pattern2.add("trem");
+ pattern2.add("tremi");
+ pattern2.add("tria");
+ pattern2.add("trices");
+ pattern2.add("tricia");
+ pattern2.add("trics");
+ pattern2.add("trim");
+ pattern2.add("triv");
+ pattern2.add("tromi");
+ pattern2.add("troni");
+ pattern2.add("trony");
+ pattern2.add("trophe");
+ pattern2.add("trosp");
+ pattern2.add("trov");
+ pattern2.add("trui");
+ pattern2.add("trus");
+ pattern2.add("ts");
+ pattern2.add("tsc");
+ pattern2.add("tsh");
+ pattern2.add("tsw");
+ pattern2.add("tt");
+ pattern2.add("ttes");
+ pattern2.add("tto");
+ pattern2.add("ttu");
+ pattern2.add("tu");
+ pattern2.add("tua");
+ pattern2.add("tuar");
+ pattern2.add("tubi");
+ pattern2.add("tud");
+ pattern2.add("tue");
+ pattern2.add("tuf");
+ pattern2.add("tui");
+ pattern2.add("tum");
+ pattern2.add("tunis");
+ pattern2.add("tup.");
+ pattern2.add("ture");
+ pattern2.add("turi");
+ pattern2.add("turis");
+ pattern2.add("turo");
+ pattern2.add("tury");
+ pattern2.add("tus");
+ pattern2.add("tv");
+ pattern2.add("tw");
+ pattern2.add("twa");
+ pattern2.add("twis");
+ pattern2.add("two");
+ pattern2.add("ty");
+ pattern2.add("tya");
+ pattern2.add("tyl");
+ pattern2.add("type");
+ pattern2.add("typh");
+ pattern2.add("tz");
+ pattern2.add("tze");
+ pattern2.add("uab");
+ pattern2.add("uac");
+ pattern2.add("uana");
+ pattern2.add("uani");
+ pattern2.add("uarant");
+ pattern2.add("uard");
+ pattern2.add("uari");
+ pattern2.add("uart");
+ pattern2.add("uat");
+ pattern2.add("uav");
+ pattern2.add("ube");
+ pattern2.add("ubel");
+ pattern2.add("uber");
+ pattern2.add("ubero");
+ pattern2.add("ubi");
+ pattern2.add("ubing");
+ pattern2.add("uble.");
+ pattern2.add("uca");
+ pattern2.add("ucib");
+ pattern2.add("ucit");
+ pattern2.add("ucle");
+ pattern2.add("ucr");
+ pattern2.add("ucu");
+ pattern2.add("ucy");
+ pattern2.add("udd");
+ pattern2.add("uder");
+ pattern2.add("udest");
+ pattern2.add("udev");
+ pattern2.add("udic");
+ pattern2.add("udied");
+ pattern2.add("udies");
+ pattern2.add("udis");
+ pattern2.add("udit");
+ pattern2.add("udon");
+ pattern2.add("udsi");
+ pattern2.add("udu");
+ pattern2.add("uene");
+ pattern2.add("uens");
+ pattern2.add("uente");
+ pattern2.add("ueril");
+ pattern2.add("ufa");
+ pattern2.add("ufl");
+ pattern2.add("ughen");
+ pattern2.add("ugin");
+ pattern2.add("ui");
+ pattern2.add("uiliz");
+ pattern2.add("uin");
+ pattern2.add("uing");
+ pattern2.add("uirm");
+ pattern2.add("uita");
+ pattern2.add("uiv");
+ pattern2.add("uiver.");
+ pattern2.add("uj");
+ pattern2.add("uk");
+ pattern2.add("ula");
+ pattern2.add("ulab");
+ pattern2.add("ulati");
+ pattern2.add("ulch");
+ pattern2.add("ulche");
+ pattern2.add("ulder");
+ pattern2.add("ule");
+ pattern2.add("ulen");
+ pattern2.add("ulgi");
+ pattern2.add("uli");
+ pattern2.add("ulia");
+ pattern2.add("uling");
+ pattern2.add("ulish");
+ pattern2.add("ullar");
+ pattern2.add("ullib");
+ pattern2.add("ullis");
+ pattern2.add("ulm");
+ pattern2.add("ulo");
+ pattern2.add("uls");
+ pattern2.add("ulses");
+ pattern2.add("ulti");
+ pattern2.add("ultra");
+ pattern2.add("ultu");
+ pattern2.add("ulu");
+ pattern2.add("ulul");
+ pattern2.add("ulv");
+ pattern2.add("umab");
+ pattern2.add("umbi");
+ pattern2.add("umbly");
+ pattern2.add("umi");
+ pattern2.add("uming");
+ pattern2.add("umoro");
+ pattern2.add("ump");
+ pattern2.add("unat");
+ pattern2.add("une");
+ pattern2.add("uner");
+ pattern2.add("uni");
+ pattern2.add("unim");
+ pattern2.add("unin");
+ pattern2.add("unish");
+ pattern2.add("univ");
+ pattern2.add("uns");
+ pattern2.add("unsw");
+ pattern2.add("untab");
+ pattern2.add("unter.");
+ pattern2.add("untes");
+ pattern2.add("unu");
+ pattern2.add("uny");
+ pattern2.add("unz");
+ pattern2.add("uors");
+ pattern2.add("uos");
+ pattern2.add("uou");
+ pattern2.add("upe");
+ pattern2.add("upers");
+ pattern2.add("upia");
+ pattern2.add("uping");
+ pattern2.add("upl");
+ pattern2.add("upp");
+ pattern2.add("upport");
+ pattern2.add("uptib");
+ pattern2.add("uptu");
+ pattern2.add("ura");
+ pattern2.add("ura.");
+ pattern2.add("urag");
+ pattern2.add("uras");
+ pattern2.add("urbe");
+ pattern2.add("urc");
+ pattern2.add("urd");
+ pattern2.add("ureat");
+ pattern2.add("urfer");
+ pattern2.add("urfr");
+ pattern2.add("urif");
+ pattern2.add("urific");
+ pattern2.add("urin");
+ pattern2.add("urio");
+ pattern2.add("urit");
+ pattern2.add("uriz");
+ pattern2.add("url");
+ pattern2.add("urling.");
+ pattern2.add("urno");
+ pattern2.add("uros");
+ pattern2.add("urpe");
+ pattern2.add("urpi");
+ pattern2.add("urser");
+ pattern2.add("urtes");
+ pattern2.add("urthe");
+ pattern2.add("urti");
+ pattern2.add("urtie");
+ pattern2.add("uru");
+ pattern2.add("us");
+ pattern2.add("usad");
+ pattern2.add("usan");
+ pattern2.add("usap");
+ pattern2.add("usc");
+ pattern2.add("usci");
+ pattern2.add("usea");
+ pattern2.add("usia");
+ pattern2.add("usic");
+ pattern2.add("uslin");
+ pattern2.add("usp");
+ pattern2.add("ussl");
+ pattern2.add("ustere");
+ pattern2.add("ustr");
+ pattern2.add("usu");
+ pattern2.add("usur");
+ pattern2.add("utab");
+ pattern2.add("utat");
+ pattern2.add("ute.");
+ pattern2.add("utel");
+ pattern2.add("uten");
+ pattern2.add("uteni");
+ pattern2.add("uti");
+ pattern2.add("utiliz");
+ pattern2.add("utine");
+ pattern2.add("uting");
+ pattern2.add("utiona");
+ pattern2.add("utis");
+ pattern2.add("utiz");
+ pattern2.add("utl");
+ pattern2.add("utof");
+ pattern2.add("utog");
+ pattern2.add("utomatic");
+ pattern2.add("uton");
+ pattern2.add("utou");
+ pattern2.add("uts");
+ pattern2.add("uu");
+ pattern2.add("uum");
+ pattern2.add("uv");
+ pattern2.add("uxu");
+ pattern2.add("uze");
+ pattern2.add("va");
+ pattern2.add("va.");
+ pattern2.add("vab");
+ pattern2.add("vacil");
+ pattern2.add("vacu");
+ pattern2.add("vag");
+ pattern2.add("vage");
+ pattern2.add("valie");
+ pattern2.add("valo");
+ pattern2.add("valu");
+ pattern2.add("vamo");
+ pattern2.add("vaniz");
+ pattern2.add("vapi");
+ pattern2.add("varied");
+ pattern2.add("vat");
+ pattern2.add("ve.");
+ pattern2.add("ved");
+ pattern2.add("veg");
+ pattern2.add("vel.");
+ pattern2.add("velli");
+ pattern2.add("velo");
+ pattern2.add("vely");
+ pattern2.add("venom");
+ pattern2.add("venue");
+ pattern2.add("verd");
+ pattern2.add("vere.");
+ pattern2.add("verel");
+ pattern2.add("veren");
+ pattern2.add("verenc");
+ pattern2.add("veres");
+ pattern2.add("verie");
+ pattern2.add("vermin");
+ pattern2.add("verse");
+ pattern2.add("verth");
+ pattern2.add("ves");
+ pattern2.add("ves.");
+ pattern2.add("veste");
+ pattern2.add("vete");
+ pattern2.add("veter");
+ pattern2.add("vety");
+ pattern2.add("viali");
+ pattern2.add("vian");
+ pattern2.add("vide.");
+ pattern2.add("vided");
+ pattern2.add("viden");
+ pattern2.add("vides");
+ pattern2.add("vidi");
+ pattern2.add("vif");
+ pattern2.add("vign");
+ pattern2.add("vik");
+ pattern2.add("vil");
+ pattern2.add("vilit");
+ pattern2.add("viliz");
+ pattern2.add("vin");
+ pattern2.add("vina");
+ pattern2.add("vinc");
+ pattern2.add("vind");
+ pattern2.add("ving");
+ pattern2.add("viol");
+ pattern2.add("vior");
+ pattern2.add("viou");
+ pattern2.add("vip");
+ pattern2.add("viro");
+ pattern2.add("visit");
+ pattern2.add("viso");
+ pattern2.add("visu");
+ pattern2.add("viti");
+ pattern2.add("vitr");
+ pattern2.add("vity");
+ pattern2.add("viv");
+ pattern2.add("vo.");
+ pattern2.add("voi");
+ pattern2.add("vok");
+ pattern2.add("vola");
+ pattern2.add("vole");
+ pattern2.add("volt");
+ pattern2.add("volv");
+ pattern2.add("vomi");
+ pattern2.add("vorab");
+ pattern2.add("vori");
+ pattern2.add("vory");
+ pattern2.add("vota");
+ pattern2.add("votee");
+ pattern2.add("vv");
+ pattern2.add("vy");
+ pattern2.add("wabl");
+ pattern2.add("wac");
+ pattern2.add("wager");
+ pattern2.add("wago");
+ pattern2.add("wait");
+ pattern2.add("wal.");
+ pattern2.add("wam");
+ pattern2.add("wart");
+ pattern2.add("wast");
+ pattern2.add("wate");
+ pattern2.add("waver");
+ pattern2.add("wb");
+ pattern2.add("wearie");
+ pattern2.add("weath");
+ pattern2.add("wedn");
+ pattern2.add("weet");
+ pattern2.add("weev");
+ pattern2.add("well");
+ pattern2.add("wer");
+ pattern2.add("west");
+ pattern2.add("wev");
+ pattern2.add("whi");
+ pattern2.add("wi");
+ pattern2.add("wil");
+ pattern2.add("willin");
+ pattern2.add("winde");
+ pattern2.add("wing");
+ pattern2.add("wir");
+ pattern2.add("wise");
+ pattern2.add("with");
+ pattern2.add("wiz");
+ pattern2.add("wk");
+ pattern2.add("wles");
+ pattern2.add("wlin");
+ pattern2.add("wno");
+ pattern2.add("wo");
+ pattern2.add("wom");
+ pattern2.add("woven");
+ pattern2.add("wp");
+ pattern2.add("wra");
+ pattern2.add("wri");
+ pattern2.add("writa");
+ pattern2.add("wsh");
+ pattern2.add("wsl");
+ pattern2.add("wspe");
+ pattern2.add("wst");
+ pattern2.add("wt");
+ pattern2.add("wy");
+ pattern2.add("xa");
+ pattern2.add("xace");
+ pattern2.add("xago");
+ pattern2.add("xam");
+ pattern2.add("xap");
+ pattern2.add("xas");
+ pattern2.add("xc");
+ pattern2.add("xe");
+ pattern2.add("xecuto");
+ pattern2.add("xed");
+ pattern2.add("xeri");
+ pattern2.add("xero");
+ pattern2.add("xh");
+ pattern2.add("xhi");
+ pattern2.add("xhil");
+ pattern2.add("xhu");
+ pattern2.add("xi");
+ pattern2.add("xia");
+ pattern2.add("xic");
+ pattern2.add("xidi");
+ pattern2.add("xime");
+ pattern2.add("ximiz");
+ pattern2.add("xo");
+ pattern2.add("xob");
+ pattern2.add("xp");
+ pattern2.add("xpand");
+ pattern2.add("xpecto");
+ pattern2.add("xped");
+ pattern2.add("xt");
+ pattern2.add("xti");
+ pattern2.add("xu");
+ pattern2.add("xua");
+ pattern2.add("xx");
+ pattern2.add("yac");
+ pattern2.add("yar");
+ pattern2.add("yat");
+ pattern2.add("yb");
+ pattern2.add("yc");
+ pattern2.add("yce");
+ pattern2.add("ycer");
+ pattern2.add("ych");
+ pattern2.add("yche");
+ pattern2.add("ycom");
+ pattern2.add("ycot");
+ pattern2.add("yd");
+ pattern2.add("yee");
+ pattern2.add("yer");
+ pattern2.add("yerf");
+ pattern2.add("yes");
+ pattern2.add("yet");
+ pattern2.add("ygi");
+ pattern2.add("yh");
+ pattern2.add("yi");
+ pattern2.add("yla");
+ pattern2.add("yllabl");
+ pattern2.add("ylo");
+ pattern2.add("ylu");
+ pattern2.add("ymbol");
+ pattern2.add("yme");
+ pattern2.add("ympa");
+ pattern2.add("ynchr");
+ pattern2.add("ynd");
+ pattern2.add("yng");
+ pattern2.add("ynic");
+ pattern2.add("ynx");
+ pattern2.add("yo");
+ pattern2.add("yod");
+ pattern2.add("yog");
+ pattern2.add("yom");
+ pattern2.add("yonet");
+ pattern2.add("yons");
+ pattern2.add("yos");
+ pattern2.add("yped");
+ pattern2.add("yper");
+ pattern2.add("ypi");
+ pattern2.add("ypo");
+ pattern2.add("ypoc");
+ pattern2.add("ypta");
+ pattern2.add("ypu");
+ pattern2.add("yram");
+ pattern2.add("yria");
+ pattern2.add("yro");
+ pattern2.add("yrr");
+ pattern2.add("ysc");
+ pattern2.add("yse");
+ pattern2.add("ysica");
+ pattern2.add("ysio");
+ pattern2.add("ysis");
+ pattern2.add("yso");
+ pattern2.add("yss");
+ pattern2.add("yst");
+ pattern2.add("ysta");
+ pattern2.add("ysur");
+ pattern2.add("ythin");
+ pattern2.add("ytic");
+ pattern2.add("yw");
+ pattern2.add("za");
+ pattern2.add("zab");
+ pattern2.add("zar");
+ pattern2.add("zb");
+ pattern2.add("ze");
+ pattern2.add("zen");
+ pattern2.add("zep");
+ pattern2.add("zer");
+ pattern2.add("zero");
+ pattern2.add("zet");
+ pattern2.add("zi");
+ pattern2.add("zil");
+ pattern2.add("zis");
+ pattern2.add("zl");
+ pattern2.add("zm");
+ pattern2.add("zo");
+ pattern2.add("zom");
+ pattern2.add("zool");
+ pattern2.add("zte");
+ pattern2.add("zz");
+ pattern2.add("zzy");
+
+}}
+
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/MainActivity.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/MainActivity.java
new file mode 100644
index 0000000000..fd4be28ab0
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/MainActivity.java
@@ -0,0 +1,211 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import java.io.InputStream;
+import java.io.IOException;
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Typeface;
+import android.os.Bundle;
+import android.view.View;
+import android.util.DisplayMetrics;
+import android.util.SparseArray;
+
+public class MainActivity extends Activity {
+
+ Canvas canvas = new Canvas();
+ public static SparseArray<Thread> thread = new SparseArray<Thread>();
+
+ public static int contentViewTop=0;
+ public static int contentViewBottom= 0;
+ public static int height=0;
+ public static int width=0;
+ public static int tid=0;
+
+ public int showpage=0;
+ Boolean firstdraw=true;
+ ArrayList<Typeface> tf = new ArrayList<Typeface>();
+
+ Integer containerwidth=0;
+ Integer containerheight=0;
+ Boolean parsed=false;
+ Boolean error=false;
+ Boolean tablet=true;
+ String errormessage="";
+ InputStream bitmapstream=null;
+ DocumentBitmap documentbitmap = new DocumentBitmap();
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ }
+
+ public void launchRingDialog(View view) {
+ final ProgressDialog ringProgressDialog = ProgressDialog.show(MainActivity.this, "Please wait ...", "Start Parsing ...", true);
+ ringProgressDialog.setCancelable(true);
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Parse parse = new Parse();
+ parse.parse();
+ } catch (Exception e) {
+
+ }
+ ringProgressDialog.dismiss();
+ finish();
+ }
+ }).start();
+ }
+ public class Parse{
+ public void parse(){
+
+ Source content = new Source();
+ content.content();
+ Header header = new Header();
+ header.header();
+ Symbol symbol = new Symbol();
+ symbol.symbol();
+ DisplayMetrics metrics = new DisplayMetrics();
+ getWindowManager().getDefaultDisplay().getMetrics(metrics);
+
+ int containerheight = metrics.heightPixels;
+ int containerwidth = metrics.widthPixels;
+ int iwidth=Math.max(containerwidth, containerheight);
+ int iheight=Math.min(containerwidth, containerheight);
+
+ if (iwidth < 900){tablet=false;Header.tablet=false;} else {tablet=true;Header.tablet=true;}
+ if(tablet){
+ if (Header.tablet_orientation_landscape){
+ containerheight=iheight;
+ containerwidth=iwidth;
+ } else {
+ containerheight=iwidth;
+ containerwidth=iheight;
+ }
+ if (Header.tablet_twocolumns && containerwidth < Header.twocolumns_criteria){Header.tablet_twocolumns=false;}
+ } else {
+ if (!Header.phone_orientation_portrait){
+ containerheight=iheight;
+ containerwidth=iwidth;
+ } else {
+ containerheight=iwidth;
+ containerwidth=iheight;
+ }
+ if (Header.phone_twocolumns && containerwidth < Header.twocolumns_criteria){Header.phone_twocolumns=false;}
+ }
+ SuperBlock superblock = new SuperBlock();
+ Block block= new Block();
+ ParagraphBlock paragraphblock = new ParagraphBlock();
+
+
+ tf.add(Typeface.SERIF);
+ tf.add(Typeface.create(Typeface.SERIF,Typeface.ITALIC));
+ tf.add(Typeface.DEFAULT_BOLD);
+ tf.add(Typeface.MONOSPACE);
+ tf.add(Typeface.createFromAsset(getAssets(),"fonts/asana-math.ttf")); // Math symbols
+ tf.add(Typeface.SERIF); // For the moment, use serif instead
+
+ documentbitmap.documentbitmap();
+
+ for (int i=0;i<=DocumentBitmap.bitmapname.size()-1;i++){
+ try {
+ bitmapstream=getAssets().open("bitmap/"+DocumentBitmap.bitmapname.get(i));
+ Bitmap bitmap = BitmapFactory.decodeStream(bitmapstream);
+ float width=(float)bitmap.getWidth();
+ DocumentBitmap.bitmapwidth.put(DocumentBitmap.bitmapname.get(i), width);
+ float height=(float)bitmap.getHeight();
+ DocumentBitmap.bitmapheight.put(DocumentBitmap.bitmapname.get(i), height);
+ bitmap.recycle();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } }
+
+ Runnable task = new Parsable(canvas, header, symbol, superblock, block, paragraphblock, containerwidth, containerheight, 0.0f, tf);
+ Header.threadid.put(Thread.currentThread().getId(), 0);
+
+ Thread thread0 = new Thread(task);
+ Thread thread1 = new Thread(task);
+ Thread thread2 = new Thread(task);
+ Thread thread3 = new Thread(task);
+ Thread thread4 = new Thread(task);
+ Thread thread5 = new Thread(task);
+ Thread thread6 = new Thread(task);
+ Thread thread7 = new Thread(task);
+ Thread thread8 = new Thread(task);
+ Thread thread9 = new Thread(task);
+
+ thread0.setPriority(Thread.MAX_PRIORITY);
+ thread1.setPriority(Thread.MAX_PRIORITY-1);
+ thread2.setPriority(Thread.MAX_PRIORITY-2);
+ thread3.setPriority(Thread.MAX_PRIORITY-3);
+ thread4.setPriority(Thread.MAX_PRIORITY-4);
+ thread5.setPriority(Thread.MAX_PRIORITY-5);
+ thread6.setPriority(Thread.MAX_PRIORITY-6);
+ thread7.setPriority(Thread.MAX_PRIORITY-7);
+ thread8.setPriority(Thread.MAX_PRIORITY-8);
+ thread9.setPriority(Thread.MAX_PRIORITY-9);
+
+ thread.put(0, thread0);
+ thread.put(1, thread1);
+ thread.put(2, thread2);
+ thread.put(3, thread3);
+ thread.put(4, thread4);
+ thread.put(5, thread5);
+ thread.put(6, thread6);
+ thread.put(7, thread7);
+ thread.put(8, thread8);
+ thread.put(9, thread9);
+
+ for(int i=0;i<=Header.nthread-1;i++){
+ thread.get(i).start();
+ }
+ try {
+
+ for(int i=0;i<=Header.nthread-1;i++){
+ thread.get(i).join();
+ }
+ for(int i=0;i<=Header.nthread-1;i++){
+ if (Parsable.error.indexOfKey(i)>=0){error=true;errormessage=Parsable.errormessage.get(i);}
+ }
+ if (error){
+ if ((!tablet && Header.phone_orientation_portrait) || (tablet && !Header.tablet_orientation_landscape)){
+ Intent intent = new Intent(MainActivity.this,Displayportraiterror.class);
+ startActivityForResult(intent, 0);
+ finish();
+ } else {
+ Intent intent = new Intent(MainActivity.this,Displaylandscapeerror.class);
+ startActivityForResult(intent, 0);
+ finish();
+ }
+ } else {
+ if ((!tablet && Header.phone_orientation_portrait) || (tablet && !Header.tablet_orientation_landscape)){
+ Intent intent = new Intent(MainActivity.this,Displayportrait.class);
+ startActivityForResult(intent, 0);
+ finish();
+ } else {
+ Intent intent = new Intent(MainActivity.this,Displaylandscape.class);
+ startActivityForResult(intent, 0);
+ finish();
+ }
+ }
+ }catch (InterruptedException e){
+ e.printStackTrace();
+ }
+ return ;
+ }
+
+} } \ No newline at end of file
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphBlock.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphBlock.java
new file mode 100644
index 0000000000..07ed0bca84
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphBlock.java
@@ -0,0 +1,55 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.util.SparseArray;
+import android.util.SparseBooleanArray;
+
+public class ParagraphBlock {
+
+ public static volatile SparseArray<ArrayList<String>> line = new SparseArray<ArrayList<String>>();
+ public static volatile SparseArray<ArrayList<Float>> width = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> height = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> depth = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> xpos = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> ypos = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<String>> attribute = new SparseArray<ArrayList<String>>();
+ public static volatile SparseArray<ArrayList<Float>> tlinelength = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<Float> linelength = new SparseArray<Float>();
+ public static volatile SparseBooleanArray newfirstline = new SparseBooleanArray();
+
+ public void init(int tid){
+ synchronized(this){
+ line.put(tid,new ArrayList<String>());
+ width.put(tid,new ArrayList<Float>());
+ height.put(tid,new ArrayList<Float>());
+ depth.put(tid,new ArrayList<Float>());
+ xpos.put(tid,new ArrayList<Float>());
+ ypos.put(tid,new ArrayList<Float>());
+ attribute.put(tid,new ArrayList<String>());
+ tlinelength.put(tid,new ArrayList<Float>());
+ }}
+
+ public void add(int tid, ArrayList<String> line2, ArrayList<Float> width2, ArrayList<Float> height2, ArrayList<Float> depth2, ArrayList<Float > xpos2
+ ,ArrayList<Float> ypos2, ArrayList<String> attribute2, ArrayList<Float> tlinelength2,Float linelength2,Boolean newfirstline2){
+ for (int i=0;i<=line2.size()-1;i++){
+ line.get(tid).add(line2.get(i));
+ width.get(tid).add(width2.get(i));
+ height.get(tid).add(height2.get(i));
+ depth.get(tid).add(depth2.get(i));
+ xpos.get(tid).add(xpos2.get(i));
+ ypos.get(tid).add(ypos2.get(i));
+ attribute.get(tid).add(attribute2.get(i));
+ tlinelength.get(tid).add(tlinelength2.get(i));
+ }
+ linelength.put(tid,linelength2);
+ newfirstline.put(tid, newfirstline2);
+ }
+}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphFormatting.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphFormatting.java
new file mode 100644
index 0000000000..2c4e73abf9
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphFormatting.java
@@ -0,0 +1,153 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Typeface;
+
+public class ParagraphFormatting {
+
+
+ public void paragraphformatting(Canvas canvas, ParagraphBlock paragraphblock, Float pagelength, String paragraph, Integer tid, Float indent,
+ String thisattribute, Typeface tf){
+
+ ArrayList<String> line = new ArrayList<String>();
+ ArrayList<Float> width = new ArrayList<Float>();
+ ArrayList<Float> height = new ArrayList<Float>();
+ ArrayList<Float> depth = new ArrayList<Float>();
+ ArrayList<Float> xpos = new ArrayList<Float>();
+ ArrayList<Float> ypos = new ArrayList<Float>();
+ ArrayList<String> attribute = new ArrayList<String>();
+ ArrayList<Float> tlinelength = new ArrayList<Float>();
+ Float linelength = 0.0f;
+ Boolean newfirstline = false;
+
+ int i=0;
+ int ii=0;
+ int jj=0;
+ int j=0;
+ int linenu=0;
+ int fontsize = Integer.parseInt(thisattribute.substring(1,4));
+
+ boolean dohyphenation=true;
+
+ float spacelength = 0.0f;
+ float newlinelength = 0.0f;
+ float linelength1=0.0f;
+
+ Paint textpaint = new Paint();
+ textpaint.setColor(Color.BLACK);
+ textpaint.setTextSize(fontsize);
+ textpaint.setTypeface(tf);
+ synchronized(this){paragraphblock.init(tid);}
+
+ newfirstline=false;
+
+ spacelength=textpaint.measureText(" ");
+ Hyphenator hyphenate = new Hyphenator();
+
+ paragraph=paragraph.trim();
+ String words[] = paragraph.split(" ");
+ String word="";
+ int sizej = words.length;
+ j=0;
+ line.add("");linenu=0;width.add(0.0f);height.add((float)fontsize);depth.add(0.0f);xpos.add(indent);ypos.add(0.0f);attribute.add(thisattribute);
+ linelength=indent;
+ for (i=0;j<=sizej-1;i++){
+ word=words[j].trim();
+ word=words[j];
+ if (word.equals("")){j++;} else{
+ String line2=line.get(linenu)+word;
+ linelength1=linelength;
+ linelength=indent+textpaint.measureText(line2);
+ if (linelength > pagelength){
+
+ dohyphenation=true;
+ linelength=linelength1;
+ if (word.contains("-")){
+ dohyphenation=false;
+ int sw=word.indexOf("-");
+ String tword1=word.substring(0,sw+1);
+ String tword2=word.substring(sw+1);
+
+ line2=line.get(linenu)+tword1;
+ linelength1=linelength;
+ linelength=indent+textpaint.measureText(line2);
+ if (linelength > pagelength){
+ if (linenu==0 && i==0){newfirstline=true;};
+ linelength=linelength1;
+ line.add("");linenu++;width.add(0.0f);height.add((float)fontsize);depth.add(0.0f);xpos.add(0.0f);ypos.add(0.0f);attribute.add(thisattribute);
+ indent=0.0f;
+ line.set(linenu, word+" ");
+ linelength=indent+textpaint.measureText(line.get(linenu));
+ width.set(linenu, linelength);
+ ypos.set(linenu, ypos.get(linenu-1)+fontsize);
+ }
+ else {
+ line.set(linenu,line.get(linenu)+tword1);
+ width.set(linenu, linelength-indent);
+ line.add("");linenu++;width.add(0.0f);height.add((float)fontsize);depth.add(0.0f);xpos.add(0.0f);ypos.add(0.0f);attribute .add(thisattribute);
+ indent=0.0f;
+ line.set(linenu, tword2+" ");
+ linelength=textpaint.measureText(line.get(linenu));
+ width.set(linenu, linelength);
+ ypos.set(linenu, ypos.get(linenu-1)+fontsize+Header.linegap);
+ };
+ j++;
+ }
+ if(dohyphenation){
+ String hyphenatedword = hyphenate.hyphenate(word);
+ String splitword[] = hyphenatedword.split("-");
+ int sizejj=splitword.length;
+ if (sizejj-1 >=1 && splitword[sizejj-1].length()<=2){splitword[sizejj-2]=splitword[sizejj-2]+splitword[sizejj-1]; sizejj--;};
+ newlinelength=0;
+ jj=0;
+ for (ii=0;jj<=sizejj-1;ii++){
+ line2=line.get(linenu)+splitword[jj]+"-";
+ linelength1=indent+textpaint.measureText(line2);
+ if (linelength1 > pagelength){
+ if (linenu==0 && i==0 && ii==0){newfirstline=true;};
+ if (jj!=0){ line.set(linenu,line.get(linenu)+"-");}
+ line.add("");linenu++;width.add(0.0f);height.add((float)fontsize);depth.add(0.0f);xpos.add(0.0f);ypos.add(0.0f);attribute.add(thisattribute);
+ indent=0.0f;
+ for (int iii=0;jj<=sizejj-1 && iii<1000;iii++){
+ line.set(linenu, line.get(linenu)+splitword[jj]);
+ newlinelength=textpaint.measureText(line.get(linenu));
+ jj++;}
+ line.set(linenu, line.get(linenu)+" ");
+ ypos.set(linenu, ypos.get(linenu-1)+fontsize);
+ }else {
+ line.set(linenu,line.get(linenu)+splitword[jj]);
+ linelength=indent+textpaint.measureText(line.get(linenu));
+ width.set(linenu, linelength-indent);
+ jj++;
+ }
+ }
+ linelength=newlinelength+spacelength;
+ width.set(linenu, linelength-indent);
+ newlinelength=0;
+ j++;
+ }
+ }else{
+ line.set(linenu,line.get(linenu)+word+" ");
+ linelength=indent+textpaint.measureText(line.get(linenu));
+ width.set(linenu, linelength-indent);
+ j++;}
+ }}
+ linelength= linelength+spacelength;width.set(linenu, width.get(linenu)+spacelength);
+
+ for (i=0;i<=linenu;i++){
+ tlinelength.add(textpaint.measureText(line.get(i)));
+ }
+ synchronized(this){paragraphblock.add(tid, line, width, height, depth, xpos,ypos, attribute, tlinelength, linelength, newfirstline);};
+ }
+}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphFormatting2.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphFormatting2.java
new file mode 100644
index 0000000000..e5fbbc5e6a
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/ParagraphFormatting2.java
@@ -0,0 +1,124 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Typeface;
+
+
+public class ParagraphFormatting2 {
+
+ public void paragraphformatting2(Canvas canvas, ParagraphBlock paragraphblock, Float pagelength, String paragraph, Integer tid, Float indent, String thisattribute, Typeface tf){
+
+ ArrayList<String> line = new ArrayList<String>();
+ ArrayList<Float> width = new ArrayList<Float>();
+ ArrayList<Float> height = new ArrayList<Float>();
+ ArrayList<Float> depth = new ArrayList<Float>();
+ ArrayList<Float> xpos = new ArrayList<Float>();
+ ArrayList<Float> ypos = new ArrayList<Float>();
+ ArrayList<String> attribute = new ArrayList<String>();
+ ArrayList<Float> tlinelength = new ArrayList<Float>();
+ Float linelength = 0.0f;
+ Boolean newfirstline = false;
+
+ int i;
+ int j=0;
+
+ int linenu=0;
+ int fontsize = Integer.parseInt(thisattribute.substring(1,4));
+
+ float linelength2 = 0;
+ Boolean newfirstline2=false;;
+ float spacelength = 0;
+
+ float linelength1=0;
+ Paint textpaint = new Paint();
+ textpaint.setColor(Color.BLACK);
+ textpaint.setTextSize(fontsize);
+ textpaint.setTypeface(tf);
+
+ synchronized(this){paragraphblock.init(tid);}
+ spacelength=textpaint.measureText(" ");
+
+ paragraph=paragraph.trim();
+ String words[] = paragraph.split(" ");
+ String word="";
+ newfirstline2=false;
+ int sizej = words.length;
+ j=0;
+ line.add("");linenu=0;width.add(0.0f);height.add((float)fontsize);depth.add(0.0f);xpos.add(indent);ypos.add(0.0f);attribute.add(thisattribute);
+ linelength2=indent;
+ for (i=0;j<=sizej-1;i++){
+ word=words[j].trim();
+ word=words[j];
+ if (word.equals("")){j++;} else{
+ String line2=line.get(linenu)+word;
+
+ linelength1=linelength2;
+ linelength2=indent+textpaint.measureText(line2);
+ if (linelength2 > pagelength){
+ if (linenu==0){newfirstline2=true;};
+ linelength2=linelength1;
+ if (word.contains("-")){
+ int sw=word.indexOf("-");
+ String tword1=word.substring(0,sw+1);
+ String tword2=word.substring(sw+1);
+
+ line2=line.get(linenu)+tword1;
+ linelength1=linelength2;
+ linelength2=indent+textpaint.measureText(line2);
+ if (linelength2 > pagelength){
+ linelength2=linelength1;
+ line.add("");linenu++;width.add(0.0f);height.add((float)fontsize);depth.add(0.0f);xpos.add(0.0f);ypos.add(0.0f);attribute.add(thisattribute);
+ indent=0.0f;
+ line.set(linenu, word+" ");
+ linelength2=indent+textpaint.measureText(line.get(linenu));
+ width.set(linenu, linelength2);
+ ypos.set(linenu, ypos.get(linenu-1)+fontsize);
+ }
+ else {
+ line.set(linenu,line.get(linenu)+tword1);
+ width.set(linenu, linelength2-indent);
+ line.add("");linenu++;width.add(0.0f);height.add((float)fontsize);depth.add(0.0f);xpos.add(0.0f);ypos.add(0.0f);attribute.add(thisattribute);
+ indent=0.0f;
+ line.set(linenu, tword2+" ");
+ linelength2=textpaint.measureText(line.get(linenu));
+ width.set(linenu, linelength2);
+ ypos.set(linenu, ypos.get(linenu-1)+fontsize+Header.linegap);
+ };
+ j++;
+ } else {
+ linelength2=linelength1;
+ line.add("");linenu++;width.add(0.0f);height.add((float)fontsize);depth.add(0.0f);xpos.add(0.0f);ypos.add(0.0f);attribute.add(thisattribute);
+ indent=0.0f;
+ line.set(linenu, word+" ");
+ linelength2=indent+textpaint.measureText(line.get(linenu));
+ width.set(linenu, linelength2);
+ ypos.set(linenu, ypos.get(linenu-1)+fontsize);
+ j++;
+ }
+ }else{
+ line.set(linenu,line.get(linenu)+word+" ");
+ linelength2=indent+textpaint.measureText(line.get(linenu));
+ if (linenu==0 ){width.set(linenu, linelength2-indent);} else {width.set(linenu, linelength2);};
+ j++;}
+ }}
+ linelength2=linelength2+spacelength;width.set(linenu, width.get(linenu)+spacelength);
+
+ for (i=0;i<=linenu;i++){
+ tlinelength.add(textpaint.measureText(line.get(i)));
+ }
+ linelength=linelength2;
+ newfirstline=newfirstline2;
+ synchronized(this){paragraphblock.add(tid, line, width, height, depth, xpos,ypos, attribute, tlinelength, linelength, newfirstline);};
+ }
+}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsable.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsable.java
new file mode 100644
index 0000000000..139f80afb9
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsable.java
@@ -0,0 +1,110 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Typeface;
+import android.util.SparseArray;
+import android.util.SparseBooleanArray;
+
+import java.lang.Runnable;
+
+ public class Parsable implements Runnable {
+
+ Canvas canvas;
+ Header header;
+ Symbol symbol;
+ SuperBlock superblock;
+ Block block;
+ ParagraphBlock paragraphblock;
+ String lineblock;
+ Integer containerwidth;
+ Integer containerheight;
+ Boolean twocolumns=false;
+ float ypos;
+ ArrayList<Typeface> tf;
+
+ public static SparseBooleanArray error = new SparseBooleanArray();
+ public static SparseArray<String> errormessage = new SparseArray<String>();
+
+ Source content = new Source();
+ Parsedocument document = new Parsedocument();
+
+ public Parsable(Canvas canvas2, Header header2, Symbol symbol2, SuperBlock superblock2, Block block2, ParagraphBlock paragraphblock2, Integer containerwidth2, Integer containerheight2, Float ypos2, ArrayList<Typeface> tf2){
+
+ if ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)){
+ containerwidth=containerwidth2/2+Header.rightsidemargin/2;
+ containerheight=containerheight2;
+ twocolumns=true;
+ }else {
+ containerwidth=containerwidth2;
+ containerheight=containerheight2;
+ twocolumns=false;
+ }
+ ypos=ypos2;
+ tf=tf2;
+ canvas=canvas2;
+ header=header2;
+ symbol=symbol2;
+ superblock=superblock2;
+ block=block2;
+ paragraphblock=paragraphblock2;
+ }
+ @Override
+ public void run(){
+
+ int startline=-1;
+ int endline=-1;
+ int share=0;
+ int totalline=-1;
+ int tid;
+ int nthread=Header.nthread;
+
+ totalline=Source.lineblock.size()-1;
+
+ synchronized(this){
+ tid = Thread.currentThread().getPriority();
+ Header.threadid.put(Thread.currentThread().getId(),Thread.MAX_PRIORITY-tid);
+ Thread.currentThread().setPriority(5);
+ tid=Header.threadid.get(Thread.currentThread().getId());}
+
+ synchronized(this){
+ superblock.init(tid);
+ block.initerror(tid);
+ }
+
+ if (totalline>=nthread-1){
+ share=(totalline+1)/nthread;
+ startline=share*(tid);
+ int mod=(totalline+1)%nthread;
+ for (int i=0;i<=mod-1;i++){
+ if (tid==i){startline=startline+i;endline=startline+share;}
+ }
+ for (int i=mod;i<=nthread-1;i++){
+ if (tid==i){startline=startline+mod;endline=startline+share-1;}
+ }
+ } else {
+ if (tid==0){Header.nthread=totalline+1;}
+ for (int i=0;i<=totalline;i++){
+ if (tid==i){startline=i;endline=i;}
+ }
+ for (int i=totalline+1;i<=nthread-1;i++){
+ if (tid==i){startline=-1;endline=-1;}
+ }
+ }
+
+ if (startline!=-1){
+ document.parsedocument(canvas,header,symbol,superblock,block,paragraphblock,tid,startline,endline,containerwidth,containerheight,twocolumns,ypos,tf);
+ if (Parsedocument.error.get(tid)){error.put(tid, true);errormessage.put(tid,Parsedocument.errormessage.get(tid));}}
+ return;
+ }
+
+ }
+
+ \ No newline at end of file
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseblock.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseblock.java
new file mode 100644
index 0000000000..19bd8d08df
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseblock.java
@@ -0,0 +1,2554 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 27th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.util.SparseIntArray;
+
+public class Parseblock {
+
+ private ArrayList<Integer> blockfractionlevel = new ArrayList<Integer>();
+ private ArrayList<Integer> blocklevel = new ArrayList<Integer>();
+ private ArrayList<Integer> blockenclosurelevel = new ArrayList<Integer>();
+ private ArrayList<Integer> blocksuperscriptlevel = new ArrayList<Integer>();
+ private ArrayList<Integer> blocksubscriptlevel = new ArrayList<Integer>();
+ private ArrayList<Integer> blocktabularlevel = new ArrayList<Integer>();
+ private ArrayList<Float> blockwidth = new ArrayList<Float>();
+ private ArrayList<Float> blockheight = new ArrayList<Float>();
+ private ArrayList<Float> blockdepth = new ArrayList<Float>();
+
+ private ArrayList<ArrayList<String>> subblock = new ArrayList<ArrayList<String>>();
+ private ArrayList<ArrayList<Float>> subblockwidth = new ArrayList<ArrayList<Float>>();
+ private ArrayList<ArrayList<Float>> subblockheight = new ArrayList<ArrayList<Float>>();
+ private ArrayList<ArrayList<Float>> subblockdepth = new ArrayList<ArrayList<Float>>();
+ private ArrayList<ArrayList<Float>> subblockxpos = new ArrayList<ArrayList<Float>>();
+ private ArrayList<ArrayList<Float>> subblockypos = new ArrayList<ArrayList<Float>>();
+ private ArrayList<ArrayList<String>> subblockattribute = new ArrayList<ArrayList<String>>();
+
+ public void parseblock(int tid, Canvas canvas, Block block, String molecule, ArrayList<Typeface> tf , String defaultattribute){
+
+ SparseIntArray subblocknumber = new SparseIntArray();
+ subblocknumber.put(tid, -1);
+
+ char charExclam = '!';
+
+ String stringfra = "fra";
+ String stringcnb = "cnb";
+ String stringodb = "odb";
+ String stringcdb = "cdb";
+ String stringosp = "osp";
+ String stringcsp = "csp";
+ String stringosu = "osu";
+ String stringcsu = "csu";
+ String stringobx = "obx";
+ String stringcbx = "cbx";
+ String stringbta = "bta";
+ String stringeta = "eta";
+ String stringbln = "bln";
+ String stringeln = "eln";
+ String stringolb = "olb";
+ String stringclb = "clb";
+ String stringhline = "!hlin ";
+ String stringdnot = "!dno ";
+ String key="";
+ String key2="";
+ String parentkey="";
+ String sfontsize="";
+ String thisattribute;
+ String attribute2;
+ String columnspec="";
+
+ boolean showcloseenclosure = true;
+ boolean containfraction = false;
+ boolean containenclosure = false;
+
+ int i,j = 0;
+ int ii=0;
+ int iii=0;
+ int i3=0;
+ int j3=0;
+ int index=0;
+ int index2=0;
+ int blocknumber = 0;
+ int currentblock=0;
+ int previousblock=0;
+ int parentblock = 0;
+ int fontsize = Integer.parseInt(defaultattribute.substring(1,4));
+ int thisfontsize = fontsize;
+ int fontinteger = Integer.parseInt(defaultattribute.substring(4,7));
+
+ int thisblocklevel = 0;
+ int thisfractionlevel = 0;
+ int thisenclosurelevel = -1;
+ int thissuperscriptlevel = -1;
+ int thissubscriptlevel = -1;
+ int thistabularlevel = -1;
+ int fractionnumber = -1;
+ int currentfraction = -1;
+ int previousfraction = -1;
+ int numeratornumber = -1;
+ int currentnumerator = -1;
+ int denominatornumber = -1;
+ int currentdenominator = -1;
+ int previousdenominator = -1;
+ int enclosurenumber = -1;
+ int currentenclosure = -1;
+ int previousenclosure = -1;
+ int tabularnumber = -1;
+ int currenttabular = -1;
+ int previoustabular = -1;
+ int tabularlinenumber = -1;
+ int currenttabularline = -1;
+ int previoustabularline = -1;
+ int tabularlineblocknumber = -1;
+ int currenttabularlineblock = -1;
+ int superscriptnumber = -1;
+ int currentsuperscript = -1;
+ int subscriptnumber = -1;
+ int currentsubscript = -1;
+ int previoussubscript = -1;
+ int previoussuperscript = -1;
+ int numcolumn=0;
+ int column = 0;
+
+ float ypos = 0.0f;
+ float xpos = 0.0f;
+ float halfheight=0.0f;
+ float maxtop=0.0f;
+ float gap=Header.characterheadroom;
+ float columngap=Header.columngap;
+ float strokewidth=0.0f;
+ float width1 = 0.0f;
+ float width2 = 0.0f;
+ float width3 = 0.0f;
+ float maxwidth = 0.0f;
+ float maxwidth1=0.0f;
+ float maxcolumnwidth=0.0f;
+ float totalcolumnwidth=0.0f;
+ float tempx=0.0f;
+ float tempy=0.0f;
+ float twidth=0.0f;
+ float twidth2=0.0f;
+ float case6xmargin=0.0f;
+ float case7xmargin=0.0f;
+ float theight=0.0f;
+ float tdepth=0.0f;
+ float totaltabularheight=0.0f;
+ float totaltabulardepth=0.0f;
+ float spacewidth=0.0f;
+ float spaceheight=0.0f;
+ float spacedepth=0.0f;
+
+ ArrayList<Boolean> showopenenclosure = new ArrayList<Boolean>();
+ ArrayList<Boolean> aftersuperscript = new ArrayList<Boolean>();
+ ArrayList<Boolean> aftersubscript = new ArrayList<Boolean>();
+
+ ArrayList<Float> numeratorwidth = new ArrayList<Float>();
+ ArrayList<Float> numeratorheight = new ArrayList<Float>();
+ ArrayList<Float> numeratordepth = new ArrayList<Float>();
+ ArrayList<Float> denominatorwidth = new ArrayList<Float>();
+ ArrayList<Float> denominatorheight = new ArrayList<Float>();
+ ArrayList<Float> denominatordepth = new ArrayList<Float>();
+ ArrayList<Float> fractionwidth = new ArrayList<Float>();
+ ArrayList<Float> fractionheight = new ArrayList<Float>();
+ ArrayList<Float> fractiondepth = new ArrayList<Float>();
+ ArrayList<Float> columnwidth = new ArrayList<Float>();
+
+ ArrayList<Integer> openblock = new ArrayList<Integer>();
+ ArrayList<Integer> closeblock = new ArrayList<Integer>();
+ ArrayList<Integer> subparentblock = new ArrayList<Integer>();
+ ArrayList<Integer> supparentblock = new ArrayList<Integer>();
+ ArrayList<Integer> linenu = new ArrayList<Integer>();
+ ArrayList<Integer> openfraction = new ArrayList<Integer>();
+ ArrayList<Integer> closefraction = new ArrayList<Integer>();
+ ArrayList<Integer> opennumerator = new ArrayList<Integer>();
+ ArrayList<Integer> closenumerator = new ArrayList<Integer>();
+ ArrayList<Integer> opendenominator = new ArrayList<Integer>();
+ ArrayList<Integer> closedenominator = new ArrayList<Integer>();
+ ArrayList<Integer> homeblock = new ArrayList<Integer>();
+ ArrayList<Integer> numeratorindex = new ArrayList<Integer>();
+ ArrayList<Integer> denominatorindex = new ArrayList<Integer>();
+ ArrayList<Integer> opensubscript = new ArrayList<Integer>();
+ ArrayList<Integer> closesubscript = new ArrayList<Integer>();
+ ArrayList<Integer> opensuperscript = new ArrayList<Integer>();
+ ArrayList<Integer> closesuperscript = new ArrayList<Integer>();
+ ArrayList<Integer> openenclosure = new ArrayList<Integer>();
+ ArrayList<Integer> closeenclosure = new ArrayList<Integer>();
+ ArrayList<Integer> opentabular = new ArrayList<Integer>();
+ ArrayList<Integer> closetabular = new ArrayList<Integer>();
+ ArrayList<Integer> opentabularline = new ArrayList<Integer>();
+ ArrayList<Integer> closetabularline = new ArrayList<Integer>();
+ ArrayList<Integer> opentabularlineblock = new ArrayList<Integer>();
+ ArrayList<Integer> closetabularlineblock = new ArrayList<Integer>();
+
+ ArrayList<String> supparentkey = new ArrayList<String>();
+ ArrayList<String> subparentkey = new ArrayList<String>();
+
+ double[] fractionfontfactor = {1.0,0.75,0.5};
+
+
+ Fontfile font = new Fontfile();
+ font.fontfile();
+
+ Colorfile color = new Colorfile();
+ color.colorfile();
+
+ Paint textpaint = new Paint();
+ Rect textbounds = new Rect();
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(fontinteger));
+ textpaint.getTextBounds("Aj",0,"Aj".length(),textbounds);
+ spacewidth=textpaint.measureText(" ");
+ spaceheight=textbounds.height();
+ spacedepth=textbounds.bottom;
+
+ Paint textpaint5 = new Paint();
+ Rect textbounds5 = new Rect();
+ textpaint5.setTextSize(thisfontsize);
+ textpaint5.setTypeface(tf.get(5));
+
+ Paint symbolpaint = new Paint();
+ Rect symbolbounds = new Rect();
+ symbolpaint.setTextSize(thisfontsize);
+ symbolpaint.setTypeface(tf.get(4));
+
+
+ thisattribute=defaultattribute;
+ attribute2=defaultattribute;
+ sfontsize=Integer.toString(thisfontsize);
+ int ij=sfontsize.length();
+ if (ij==1){
+ thisattribute=thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4);
+ } else if (ij==2){
+ thisattribute=thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4);
+ } else if (ij==3){
+ thisattribute=thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4);
+ }
+
+ molecule=molecule.trim();
+ molecule = molecule + charExclam + charExclam + charExclam + charExclam + charExclam;
+
+ j=0;
+
+ char temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ create(tid,blocknumber, thisblocklevel, thisfractionlevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1);add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,0.0f,0.0f,thisattribute);
+ openblock.add(subblocknumber.get(tid)); closeblock.add(-1);homeblock.add(currentblock);
+
+ for (i=0;!((molecule.charAt(j) == charExclam) && (molecule.charAt(j+1)==charExclam)) ; i++) {
+
+ if (temp == charExclam && key.equals("openblock")) {
+ previousblock=currentblock;
+ blocknumber++;
+ currentblock= blocknumber;
+ thisblocklevel++;
+
+ create(tid,currentblock, thisblocklevel, thisfractionlevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ openblock.add(subblocknumber.get(tid)); closeblock.add(-1);homeblock.add(currentblock);
+
+ j+=11;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ } else if (temp == charExclam && key.equals("closeblock")) {
+ closeblock.set(currentblock, subblocknumber.get(tid));
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+
+ insert(tid,previousblock, currentblock,blockwidth.get(previousblock), blockheight.get(previousblock),blockdepth.get(previousblock) );
+
+ thisblocklevel--;
+ j+=12;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ } else if (temp == charExclam && key.equals(stringfra)) { // open fraction, open numerator
+
+ thisfractionlevel++;
+ fractionnumber++;
+ currentfraction=fractionnumber;
+
+ previousblock=currentblock;
+ blocknumber++;
+ currentblock= blocknumber;
+ thisblocklevel++;
+
+ create(tid, currentblock, thisblocklevel, thisfractionlevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+
+ openblock.add(subblocknumber.get(tid)); closeblock.add(-1);homeblock.add(currentblock);
+
+ openfraction.add(subblocknumber.get(tid)); closefraction.add(-1);
+ if (thissubscriptlevel ==-1 && thissuperscriptlevel ==-1){
+ if (thisfractionlevel<=2){
+ thisfontsize=(int)((double)fontsize*fractionfontfactor[thisfractionlevel]);
+ }else {
+ thisfontsize=(int)((double)fontsize*fractionfontfactor[2]);
+ };
+ if (thisfontsize<8){thisfontsize=8;};
+ };
+ numeratornumber++;
+ currentnumerator=numeratornumber;
+
+ previousblock=currentblock;
+ blocknumber++;
+ currentblock= blocknumber;
+ thisblocklevel++;
+
+ create(tid,currentblock, thisblocklevel, thisfractionlevel,thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+
+ openblock.add(subblocknumber.get(tid)); closeblock.add(-1);homeblock.add(currentblock);
+
+ numeratorindex.add(currentblock); numeratorwidth.add(0.0f); numeratorheight.add(0.0f);numeratordepth.add(0.0f);
+ denominatorindex.add(-1); denominatorwidth.add(0.0f); denominatorheight.add(0.0f);denominatordepth.add(0.0f);
+ fractionwidth.add(0.0f); fractionheight.add(0.0f); fractiondepth.add(0.0f);
+ opennumerator.add(subblocknumber.get(tid)); closenumerator.add(-1);
+ opendenominator.add(-1); closedenominator.add(-1);
+ linenu.add(currentblock);
+
+ j+=9;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ } else if (temp == charExclam && key.equals(stringcnb) ) { // close numerator
+
+ numeratorwidth.set(currentnumerator,blockwidth.get(currentblock));
+ numeratorheight.set(currentnumerator,blockheight.get(currentblock));
+ numeratordepth.set(currentnumerator,blockdepth.get(currentblock));
+ closenumerator.set(currentnumerator, subblocknumber.get(tid));
+ closeblock.set(currentblock, subblocknumber.get(tid));
+
+ containfraction = false;
+ containenclosure=false;
+ for (i=currentblock+1;i<=blocknumber && !containfraction && !containenclosure;i++){
+ if (blockenclosurelevel.get(i)==thisenclosurelevel &&
+ blocksuperscriptlevel.get(i)==thissuperscriptlevel &&
+ blocksubscriptlevel.get(i)==thissubscriptlevel &&
+ blockfractionlevel.get(i)==thisfractionlevel+1 &&
+ openblock.get(i)> openblock.get(currentblock) && closeblock.get(i) <= closeblock.get(currentblock)){
+ containfraction=true;
+ }
+ else if (blockenclosurelevel.get(i)==thisenclosurelevel+1 && blocklevel.get(i)==thisblocklevel+1 && openblock.get(i)>openblock.get(currentblock) && closeblock.get(i)<=closeblock.get(currentblock)){
+ containenclosure=true;
+ }
+ }
+
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(0));
+ textpaint.getTextBounds("1",0,"1".length(),textbounds);
+ Float off=(float) textbounds.height()/2;
+
+ if (containfraction){
+ adjustfraction(tid,currentblock, blocknumber, homeblock,openblock,closeblock,thisfractionlevel, thisblocklevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, off, gap);
+ }
+
+ strokewidth=(float)thisfontsize/10; if (strokewidth < 1){strokewidth=1;};
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringhline,0.0f,strokewidth,strokewidth,subblockxpos.get(currentblock).get(0),ypos+gap+blockdepth.get(currentblock),thisattribute);
+
+ closenumerator.set(currentnumerator, subblocknumber.get(tid));
+ closeblock.set(currentblock, subblocknumber.get(tid));homeblock.add(currentblock);
+ thisblocklevel--;
+
+ for (i=subblocknumber.get(tid);currentnumerator >=0 && closenumerator.get(currentnumerator)>=0;i--){
+ currentnumerator--;
+ }
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ parentkey="";
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ } else if (temp == charExclam && key.equals(stringcdb)) { // close denominator
+
+//denominator block
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+
+ closedenominator.set(currentdenominator, subblocknumber.get(tid));
+ closeblock.set(currentblock, subblocknumber.get(tid));
+
+ denominatorwidth.set(currentdenominator,blockwidth.get(currentblock));
+ denominatorheight.set(currentdenominator,blockheight.get(currentblock));
+ denominatordepth.set(currentdenominator,blockdepth.get(currentblock));
+
+ fractionwidth.set(currentfraction, Math.max(numeratorwidth.get(currentfraction),denominatorwidth.get(currentdenominator)));
+ fractionheight.set(currentfraction, numeratorheight.get(currentfraction) + denominatorheight.get(currentdenominator) + gap*2);
+ fractiondepth.set(currentfraction, denominatorheight.get(currentdenominator) + gap);
+
+ index=numeratorindex.get(currentfraction);
+ int l=subblockwidth.get(index).size();
+ subblockwidth.get(index).set(l-1,fractionwidth.get(currentfraction));
+ tempy=fractionwidth.get(currentfraction);
+ sfontsize=Integer.toString((int)tempy);
+ ij=sfontsize.length();
+ index=numeratorindex.get(currentfraction);
+
+ if (ij==1){
+ subblockattribute.get(index).set(l-1,thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (ij==2){
+ subblockattribute.get(index).set(l-1,thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (ij==3){
+ subblockattribute.get(index).set(l-1,thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+
+ containfraction = false;
+ containenclosure=false;
+ for (i=currentblock+1;i<=blocknumber && !containfraction && !containenclosure;i++){
+ if (blockenclosurelevel.get(i)==thisenclosurelevel &&
+ blocksuperscriptlevel.get(i)==thissuperscriptlevel &&
+ blocksubscriptlevel.get(i)==thissubscriptlevel &&
+ blockfractionlevel.get(i)==thisfractionlevel+1 &&
+ openblock.get(i)> openblock.get(currentblock) && closeblock.get(i) <= closeblock.get(currentblock)){
+ containfraction=true;
+ }
+ else if (blockenclosurelevel.get(i)==thisenclosurelevel+1 && blocklevel.get(i)==thisblocklevel+1 && openblock.get(i)>openblock.get(currentblock) && closeblock.get(i)<=closeblock.get(currentblock)){
+ containenclosure=true;
+ }
+ }
+
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(0));
+ textpaint.getTextBounds("1",0,"1".length(),textbounds);
+ Float off=(float) textbounds.height()/2;
+
+ if (containfraction){adjustfraction(tid,currentblock, blocknumber, homeblock,openblock,closeblock,thisfractionlevel, thisblocklevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, off, gap);}
+ thisblocklevel--;
+
+ // adjust horizontal position of numerator and denominator
+
+ if (numeratorwidth.get(currentfraction) > denominatorwidth.get(currentdenominator)){
+ tempx = (numeratorwidth.get(currentfraction) - denominatorwidth.get(currentdenominator))/2;
+ index=currentblock;
+ for (i=0;i<=subblock.get(index).size()-1;i++){subblockxpos.get(index).set(i, subblockxpos.get(index).get(i) + tempx);};
+ } else if (numeratorwidth.get(currentfraction) < denominatorwidth.get(currentdenominator)){
+ tempx = (denominatorwidth.get(currentdenominator) - numeratorwidth.get(currentfraction))/2;
+ index=numeratorindex.get(currentfraction);
+ blockwidth.set(numeratorindex.get(currentfraction),numeratorwidth.get(currentfraction));
+ for (i=0;i<=subblock.get(index).size()-2;i++){subblockxpos.get(index).set(i, subblockxpos.get(index).get(i) + tempx);};
+ }
+
+ // adjust vertical position of denominator
+
+ index=numeratorindex.get(currentfraction);
+ index2=currentblock;
+ tempy=subblockypos.get(index).get(subblock.get(index).size()-1)-subblockypos.get(index).get(0);
+ for (ii=0;ii<=subblock.get(index2).size()-1;ii++){
+ subblockypos.get(index2).set(ii,subblockypos.get(index2).get(ii)+tempy+gap+blockheight.get(currentblock)-blockdepth.get(currentblock));
+ }
+ index=0;
+
+ previousdenominator=currentdenominator;
+ halfheight=(float) 0;
+ for (i=subblocknumber.get(tid);currentdenominator >=0 && closedenominator.get(currentdenominator)>=0;i--){
+ currentdenominator--;
+ }
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+
+ if (thisfractionlevel == 1){
+
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(0));
+ textpaint.getTextBounds("a",0,"a".length(),textbounds);
+ halfheight=textbounds.height()*5/8;
+
+ index=numeratorindex.get(currentfraction);
+ tempy=subblockypos.get(index).get(subblock.get(index).size()-1)-subblockypos.get(index).get(0);
+ for (i=1;i<=subblock.get(index).size()-1;i++){
+ subblockypos.get(index).set(i, subblockypos.get(index).get(i)-tempy-halfheight);
+ }
+ ypos=subblockypos.get(index).get(0);
+ xpos=subblockxpos.get(index).get(subblock.get(index).size()-1)+fractionwidth.get(currentfraction);
+ index=previousblock;
+ for (i=1;i<=subblock.get(index).size()-2;i++){
+ subblockypos.get(index).set(i, subblockypos.get(index).get(i)-tempy-halfheight);
+ }
+ fractiondepth.set(currentfraction,fractiondepth.get(currentfraction)-halfheight);
+ }
+ else if (thisfractionlevel >= 2){
+ // adjust position after fraction
+
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(0));
+ textpaint.getTextBounds("a",0,"a".length(),textbounds);
+ halfheight=textbounds.height()*5/8;
+
+ index=numeratorindex.get(currentfraction);
+ iii=subblock.get(index).size()-1;
+ tempy=subblockypos.get(index).get(0);
+ blockdepth.set(currentblock,blockdepth.get(currentblock)-tempy+ypos);
+ ypos=tempy;
+ xpos=subblockxpos.get(index).get(iii)+subblockwidth.get(index).get(iii);
+ }
+
+ index = numeratorindex.get(currentfraction);
+ insert(tid,index, currentblock,0.0f,0.0f,0.0f);
+ insert(tid,previousblock, currentblock,0.0f,0.0f,0.0f);
+ blockwidth.set(index, numeratorwidth.get(currentfraction));
+ maxtop=Math.max(blockheight.get(currentblock)-blockdepth.get(currentblock), blockheight.get(index)-blockdepth.get(index));
+ blockdepth.set(currentblock, Math.max(blockdepth.get(currentblock),blockdepth.get(index)));
+ blockheight.set(currentblock, maxtop+blockdepth.get(currentblock));
+ blockwidth.set(previousblock, denominatorwidth.get(currentfraction));
+ maxtop=Math.max(blockheight.get(currentblock)-blockdepth.get(currentblock), blockheight.get(previousblock)-blockdepth.get(previousblock));
+ blockdepth.set(currentblock, Math.max(blockdepth.get(currentblock),blockdepth.get(previousblock)));
+ blockheight.set(currentblock, maxtop+blockdepth.get(currentblock));
+
+//fraction block
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+
+ closefraction.set(currentfraction, subblocknumber.get(tid));
+ closeblock.set(currentblock, subblocknumber.get(tid));
+ thisblocklevel--;
+ thisfractionlevel--;
+
+ if (thissubscriptlevel >= 0 || thissuperscriptlevel >= 0){
+ thisfontsize=fontsize/3;
+ }else if (thisfractionlevel<=2){
+ thisfontsize=(int)((double)fontsize*fractionfontfactor[thisfractionlevel]);
+ }else {
+ thisfontsize=(int)((double)fontsize*fractionfontfactor[2]);
+ };
+ if (thisfontsize<8){thisfontsize=8;};
+
+ previousfraction=currentfraction;
+ for (i=subblocknumber.get(tid);currentfraction >=0 && closefraction.get(currentfraction)>=0;i--){
+ currentfraction--;
+ }
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+
+ blockwidth.set(previousblock, fractionwidth.get(previousfraction));
+ blockheight.set(previousblock, fractionheight.get(previousfraction));
+ if (thisfractionlevel==0) {blockdepth.set(previousblock,denominatorheight.get(previousdenominator)+gap-halfheight);}
+ else {blockdepth.set(previousblock, numeratordepth.get(previousfraction)+denominatorheight.get(previousdenominator)+gap*2);};
+
+ twidth=fractionwidth.get(previousfraction);
+ theight=fractionheight.get(previousfraction);
+ tdepth=blockdepth.get(previousblock);
+ insert(tid,previousblock, currentblock,twidth, theight, tdepth);
+
+ parentkey="";
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ } else if (temp == charExclam && key.equals(stringodb)) { // open denominator
+
+ denominatornumber++;
+ currentdenominator=denominatornumber;
+
+ previousblock=currentblock;
+ blocknumber++;
+ currentblock=blocknumber;
+ thisblocklevel++;
+
+ index = numeratorindex.get(currentfraction);
+ ypos=subblockypos.get(index).get(0);
+ xpos=subblockxpos.get(index).get(subblock.get(index).size()-1);
+
+ create(tid,currentblock, thisblocklevel, thisfractionlevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+
+ openblock.add(subblocknumber.get(tid)); closeblock.add(-1);homeblock.add(currentblock);
+
+ denominatorindex.set(currentdenominator,currentblock);
+
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ opendenominator.set(currentdenominator, subblocknumber.get(tid));
+
+ } else if (temp == charExclam && key.equals(stringbta)) { // begin tabular
+
+ thistabularlevel=0;
+ tabularnumber=0;
+ currenttabular=tabularnumber;
+ opentabularline.clear();closetabularline.clear();opentabular.clear();closetabular.clear();opentabularlineblock.clear();closetabularlineblock.clear();
+
+ if (thisfractionlevel>0){
+ synchronized(this){
+ Block.error.put(tid, true);
+ Block.errormessage.put(tid, "Fraction cannot have tabular, parse failed!");}
+ return;
+ }
+ if (thistabularlevel>0){
+ synchronized(this){
+ Block.error.put(tid, true);
+ Block.errormessage.put(tid, "Tabular cannot have tabular, parse failed!");}
+ return;
+ }
+ blocknumber++;
+ currentblock= blocknumber;
+ thisblocklevel++;
+
+ create(tid,currentblock, thisblocklevel, thisfractionlevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+
+ openblock.add(subblocknumber.get(tid)); closeblock.add(-1);homeblock.add(currentblock);
+ opentabular.add(subblocknumber.get(tid)); closetabular.add(-1);
+
+ tabularlinenumber=-1;
+ j+=5;
+ int i4=molecule.indexOf("{",j);
+ numcolumn=0;
+ for (i=j;i<=i4-2;i++){
+ if (molecule.charAt(i)=='l' || molecule.charAt(i)=='c' || molecule.charAt(i)=='r'){
+ numcolumn++;
+ }
+ }
+ columnspec=molecule.substring(j,i4-1);
+ totalcolumnwidth=0;
+ columnwidth.clear();
+ opentabularlineblock.clear();
+
+ j=i4+1;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ }else if (temp == charExclam && key.equals(stringeta)) { // end tabular
+
+ thistabularlevel--;
+ closetabular.set(currenttabular, subblocknumber.get(tid));closeblock.set(currentblock, subblocknumber.get(tid));
+
+ blockwidth.set(currentblock, totalcolumnwidth);
+ twidth=0;totalcolumnwidth=0;
+
+ for (i=0;i<=numcolumn-1;i++){
+ totalcolumnwidth=totalcolumnwidth+columnwidth.get(i)+columngap;
+ }
+ totalcolumnwidth=totalcolumnwidth-columngap;
+ index2=currentblock;
+ blockwidth.set(currentblock, totalcolumnwidth);
+ xpos=subblockxpos.get(index2).get(0)+blockwidth.get(currentblock);
+ for (iii=0;iii<=currenttabularline;iii++){
+ twidth=0;
+ for (i=0;i<=numcolumn-1;i++){
+ for (ii=1;ii<=subblock.get(homeblock.get(opentabularlineblock.get(iii*numcolumn+i))).size()-1;ii++){
+ index= opentabularlineblock.get(iii*numcolumn+i)-openblock.get(currentblock)+ii;
+
+ if (columnspec.charAt(i)=='l'){subblockxpos.get(index2).set(index, subblockxpos.get(index2).get(index)+twidth);}
+ else if (columnspec.charAt(i)=='c'){twidth2=(columnwidth.get(i)-blockwidth.get(homeblock.get(opentabularlineblock.get(iii*numcolumn+i))))/2; subblockxpos.get(index2).set(index, subblockxpos.get(index2).get(index)+twidth+twidth2);}
+ else if (columnspec.charAt(i)=='r'){twidth2=columnwidth.get(i)-blockwidth.get(homeblock.get(opentabularlineblock.get(iii*numcolumn+i))); subblockxpos.get(index2).set(index, subblockxpos.get(index2).get(index)+twidth+twidth2);};
+ }
+ twidth=twidth+columnwidth.get(i)+columngap;
+ }}
+
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ previoustabular=currenttabular;
+ for (i=subblocknumber.get(tid);currenttabular >=0 && closeblock.get(currenttabular)>=0;i--){
+ currenttabular--;
+ }
+
+ if (tabularlinenumber>0) {
+ textpaint.setTextSize(thisfontsize);
+ textpaint.getTextBounds("a",0,"a".length(),textbounds);
+ tempy=blockdepth.get(previousblock)-blockheight.get(previousblock)/2+textbounds.height()/2;
+ for (i=opentabularlineblock.get(0)-opentabular.get(previoustabular);i<=closetabularlineblock.get(currenttabularlineblock)-opentabular.get(previoustabular);i++){
+ subblockypos.get(previousblock).set(i, subblockypos.get(previousblock).get(i)-tempy);
+ }
+ blockdepth.set(previousblock,blockdepth.get(previousblock)-tempy);}
+ insert(tid,previousblock, currentblock, blockwidth.get(previousblock), blockheight.get(previousblock),blockdepth.get(previousblock));
+
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }else if (temp == charExclam && key.equals(stringbln)) { // begin tabular line
+ tabularlinenumber++;
+ previoustabularline=currenttabularline;
+ currenttabularline=tabularlinenumber;
+
+ blocknumber++;
+ previousblock=currentblock;
+ currentblock= blocknumber;
+ thisblocklevel++;
+
+ if (currenttabularline >=1){xpos=subblockxpos.get(homeblock.get(opentabularline.get(previoustabularline))).get(0);};
+ create(tid,currentblock, thisblocklevel, thisfractionlevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ openblock.add(subblocknumber.get(tid)); closeblock.add(-1);homeblock.add(currentblock);
+ opentabularline.add(subblocknumber.get(tid)); closetabularline.add(-1);
+
+ tabularlineblocknumber=-1;
+
+ column=-1;
+ maxcolumnwidth=0;
+
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }else if (temp == charExclam && key.equals(stringeln)) { // end tabular line
+
+ closetabularline.set(currenttabularline, subblocknumber.get(tid));closeblock.set(currentblock, subblocknumber.get(tid));
+
+ float gap2=gap*thisfontsize/fontsize;
+ index2=currentblock;
+ if (currenttabularline > 0){
+ tempy=totaltabulardepth+blockheight.get(currentblock)-blockdepth.get(currentblock)+gap2;
+ for (i=1;i<=subblock.get(currentblock).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)+tempy);
+ }
+ }
+
+
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+
+ if (currenttabularline >=1) {
+ totaltabularheight=totaltabularheight+blockheight.get(previousblock)+gap2;
+ totaltabulardepth=totaltabulardepth+blockheight.get(previousblock)+gap2;
+ insert(tid,previousblock, currentblock, 0.0f, totaltabularheight, totaltabulardepth);
+ } else {
+ insert(tid,previousblock, currentblock, blockwidth.get(previousblock),blockheight.get(previousblock) , blockdepth.get(previousblock));
+ totaltabularheight=blockheight.get(previousblock);
+ totaltabulardepth=blockdepth.get(previousblock);
+ }
+
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }else if (temp == charExclam && key.equals(stringolb)) { // begin tabular line block
+
+ tabularlineblocknumber++;
+ currenttabularlineblock=tabularlineblocknumber;
+ column++;columnwidth.add(0.0f);
+ blocknumber++;
+ previousblock=currentblock;
+ currentblock= blocknumber;
+ thisblocklevel++;
+
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(fontinteger));
+ textpaint.getTextBounds("Aj",0,"Aj".length(),textbounds);
+ spacewidth=textpaint.measureText(" ");
+ spaceheight=textbounds.height();
+ spacedepth=textbounds.bottom;
+
+ create(tid,currentblock, thisblocklevel, thisfractionlevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,spacewidth,spaceheight,spacedepth,xpos,ypos,thisattribute);
+ openblock.add(subblocknumber.get(tid)); closeblock.add(-1);homeblock.add(currentblock);
+ opentabularlineblock.add(subblocknumber.get(tid)); closetabularlineblock.add(-1);
+ xpos=subblockxpos.get(homeblock.get(opentabularline.get(0))).get(0);
+
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }else if (temp == charExclam && key.equals(stringclb)) { // end tabular line block
+
+ closetabularlineblock.set(currenttabularlineblock, subblocknumber.get(tid));closeblock.set(currentblock, subblocknumber.get(tid));
+
+ maxcolumnwidth = Math.max(columnwidth.get(column),blockwidth.get(currentblock));
+ columnwidth.set(column, maxcolumnwidth);
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ insert(tid,previousblock, currentblock, blockwidth.get(previousblock),blockheight.get(previousblock) , blockdepth.get(previousblock));
+
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }else if (temp == charExclam && key.equals("blank")) {
+
+ sfontsize=Integer.toString(thisfontsize);
+ ij=sfontsize.length();
+ if (ij==1){
+ thisattribute=thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4);
+ } else if (ij==2){
+ thisattribute=thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4);
+ } else if (ij==3){
+ thisattribute=thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4);
+ }
+
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(fontinteger));
+
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock," ",(float)textpaint.measureText(" "),0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+ xpos=xpos+textbounds.width();
+
+ j+=7;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ }else if (temp == charExclam && key.equals("dno")) { // do nothing
+
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }else if (temp == charExclam && key.equals(stringobx)) { // open mbox
+
+ thisattribute=thisattribute.substring(0,4)+"000"+thisattribute.substring(7);
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }else if (temp == charExclam && key.equals(stringcbx)) { // close mbox
+
+ thisattribute=thisattribute.substring(0,4)+defaultattribute.substring(4,7)+thisattribute.substring(7);
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ } else if (temp == charExclam && key.charAt(0) == 'A') { //Begin attribute
+
+ if (key.charAt(1) == 'o'){
+ String attribute;
+ int jj=key.indexOf("(");
+ if (jj >2){
+ attribute = key.substring(2,jj);
+ } else {
+ attribute = key.substring(2);
+ }
+ if (attribute.equals("underlinetext")){
+ thisattribute="0"+thisattribute.substring(1,18)+"1"+thisattribute.substring(19);
+ } else if (attribute.equals("strikethru")){
+ thisattribute="0"+thisattribute.substring(1,19)+'1'+thisattribute.substring(20);
+ } else if (attribute.equals("skew")){
+ if (molecule.charAt(j+attribute.length()+3)=='(' ){
+ jj = molecule.indexOf(')',j+attribute.length()+3);
+ thisattribute="0"+thisattribute.substring(1,20)+molecule.substring(j+attribute.length()+4,jj)+thisattribute.substring(25);;
+ j=jj-key.length();
+ } else {
+ thisattribute="0"+thisattribute.substring(1,20)+"-0.25"+thisattribute.substring(25);
+ };
+ }else if (attribute.equals("alpha")){ // alpha does not work
+ synchronized(this){
+ Block.error.put(tid, true);
+ Block.errormessage.put(tid, "Alpha does not work, parse failed!");}
+ return;
+ }else if (attribute.equals("shadow")){
+
+ if (molecule.charAt(j+attribute.length()+3)=='(' ){
+ jj = molecule.indexOf(')',j+attribute.length()+3);
+ thisattribute="0"+thisattribute.substring(1,29)+molecule.substring(j+attribute.length()+4,jj);
+ j=jj-key.length();
+ } else {
+ thisattribute="0"+thisattribute.substring(1,29)+"222black";}
+ };
+ j=j+key.length()+2;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ } else if (key.charAt(1) == 'c'){
+ String attribute;
+ attribute = key.substring(2);
+ if (attribute.equals("underlinetext")){
+ thisattribute=thisattribute.substring(0,18)+"0"+thisattribute.substring(19);
+ } else if (attribute.equals("strikethru")){
+ thisattribute=thisattribute.substring(0,19)+"0"+thisattribute.substring(20);
+ } else if (attribute.equals("skew")){
+ thisattribute=thisattribute.substring(0,20)+"+0.00"+thisattribute.substring(25);
+ }else if (attribute.equals("alpha")){
+ // thisattribute=thisattribute.substring(0,25)+"0xFF"+thisattribute.substring(29); //alpha not working !!
+ }else if (attribute.equals("shadow")){
+ thisattribute=thisattribute.substring(0,29)+"0000xFF000000";
+ };
+
+ if (thisattribute.substring(1).equals(defaultattribute.substring(1))){ thisattribute='1'+thisattribute.substring(1);};
+
+ j=j+key.length()+2;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }
+ } else if (temp == charExclam && key.charAt(0) == 'F') { //Begin font
+
+ String fontname = key.substring(2);
+ if (key.charAt(1) == 'o'){
+ fontinteger = font.fontname.indexOf(fontname);
+
+ if (Integer.toString(fontinteger).length()==1){
+ thisattribute=thisattribute.substring(0,4)+"00"+Integer.toString(fontinteger)+thisattribute.substring(7);
+ } else if (Integer.toString(fontinteger).length()==2){
+ thisattribute=thisattribute.substring(0,4)+"0"+Integer.toString(fontinteger)+thisattribute.substring(7);
+ } else if (Integer.toString(fontinteger).length()==3){
+ thisattribute=thisattribute.substring(0,4)+Integer.toString(fontinteger)+thisattribute.substring(7);
+ }
+ j=j+key.length()+2;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ } else if (key.charAt(1) == 'c'){
+ fontinteger = Integer.parseInt(defaultattribute.substring(4,7));
+ if (Integer.toString(fontinteger).length()==1){
+ thisattribute=thisattribute.substring(0,4)+"00"+Integer.toString(fontinteger)+thisattribute.substring(7);
+ } else if (Integer.toString(fontinteger).length()==2){
+ thisattribute=thisattribute.substring(0,4)+"0"+Integer.toString(fontinteger)+thisattribute.substring(7);
+ } else if (Integer.toString(fontinteger).length()==3){
+ thisattribute=thisattribute.substring(0,4)+Integer.toString(fontinteger)+thisattribute.substring(7);
+ }
+ j=j+key.length()+2;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }
+ } else if (temp == charExclam && key.charAt(0) == 'X') { // Begin size
+ String sizename = key.substring(2);
+ if (key.charAt(1) == 'o'){
+ thisfontsize= (int)((float)fontsize*Header.sizefactor.get(sizename));
+ j=j+key.length()+2;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ } else if (key.charAt(1) == 'c'){
+ thisfontsize= fontsize;
+ j=j+key.length()+2;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }
+ } else if (temp == charExclam && key.charAt(0) == 'C') { // Begin color
+
+ String colorname = key.substring(2);
+ if (key.charAt(1) == 'o'){
+ thisattribute=thisattribute.substring(0,7)+color.colorinteger.get(colorname)+thisattribute.substring(17);
+ j=j+key.length()+2;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ } else if (key.charAt(1) == 'c'){
+
+ thisattribute=thisattribute.substring(0,7)+defaultattribute.substring(7,17)+thisattribute.substring(17);
+ j=j+key.length()+2;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!'||molecule.charAt(ii)==')' || molecule.charAt(ii)=='(');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ }
+ }else if (temp == charExclam && key.charAt(0) == 'V') { // open enclosure
+ key = key.substring(1);
+ if (Symbol.symboltype.containsKey(key) &&
+ (Symbol.symboltype.get(key) == 1 || Symbol.symboltype.get(key) == 2 ||Symbol.symboltype.get(key) == 3 || Symbol.symboltype.get(key) == 5 || Symbol.symboltype.get(key) == 6 || Symbol.symboltype.get(key) == 7 || Symbol.symboltype.get(key) == 8 || Symbol.symboltype.get(key) == 9)) { // open enclosure
+ ii=j+key.length()+2;
+ temp=molecule.charAt(ii);
+
+ if (temp=='{'){
+
+ enclosurenumber++;
+ currentenclosure=enclosurenumber;
+ thisenclosurelevel++;
+ previousblock=currentblock;
+ blocknumber++;
+ currentblock= blocknumber;
+ thisblocklevel++;
+ synchronized(this){
+ create(tid,currentblock, thisblocklevel, thisfractionlevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ }
+ openblock.add(subblocknumber.get(tid)); closeblock.add(-1);homeblock.add(currentblock);
+
+ openenclosure.add(subblocknumber.get(tid)); closeenclosure.add(-1); showopenenclosure.add(true);
+ index2=+currentblock;
+ switch(Symbol.symboltype.get(key)){
+ case 1:
+ case 3:
+ j3=j+key.length()+3;
+ if ( molecule.charAt(j3)== '!' && molecule.charAt(j3+1)== '.'){
+ showopenenclosure.set(currentenclosure, false);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+ j=j+2;
+ } else {
+ key2="!"+key+" ";
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,key2,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+ };
+ break;
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+ break;
+ case 9:
+ key2="!"+key+" ";
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,key2,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+ break;
+ }
+ parentkey=key;
+ index2=currentblock;
+ index = subblocknumber.get(tid)-openblock.get(currentblock);
+ subblockxpos.get(index2).set(index,xpos);
+ subblockypos.get(index2).set(index,ypos);
+ blockwidth.set(currentblock, 0.0f);
+ blockheight.set(currentblock, 0.0f);
+ blockdepth.set(currentblock, 0.0f);
+
+ j=j+key.length()+3;
+ temp = molecule.charAt(j);
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!');ii++){
+ key = key + molecule.charAt(ii);
+ }
+ } else if (temp == '}'){ // close enclosure
+ index2=currentblock;
+ closeblock.set(currentblock, subblocknumber.get(tid));
+ containfraction = false;
+ containenclosure=false;
+ for (i=currentblock+1;i<=blocknumber && !containfraction && !containenclosure;i++){
+ if (blockenclosurelevel.get(i)==thisenclosurelevel &&
+ blocksuperscriptlevel.get(i)==thissuperscriptlevel &&
+ blocksubscriptlevel.get(i)==thissubscriptlevel &&
+ blockfractionlevel.get(i)==thisfractionlevel+1 &&
+ blocktabularlevel.get(i)==-1 &&
+ openblock.get(i)> openblock.get(currentblock) && closeblock.get(i) <= closeblock.get(currentblock)){
+ containfraction=true;
+ }}
+
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(0));
+ textpaint.getTextBounds("1",0,"1".length(),textbounds);
+ Float off=(float) textbounds.height()/2;
+ if (containfraction){adjustfraction(tid,currentblock, blocknumber, homeblock,openblock,closeblock,thisfractionlevel, thisblocklevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, off, gap);}
+ containfraction = false;
+ containenclosure=false;
+
+ switch(Symbol.symboltype.get(key)){
+ case 2:
+ case 3:
+ j3=j+key.length()+3;
+ if ( molecule.charAt(j3)== '!' && molecule.charAt(j3+1)== '.'){
+ showcloseenclosure=false;
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+ j=j+2;
+ } else {
+ key2="!"+key+" ";
+ showcloseenclosure=true;
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,key2,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+ }
+ closeblock.set(currentblock,subblocknumber.get(tid));
+
+ closeenclosure.set(currentenclosure,subblocknumber.get(tid));
+ twidth=0;theight=0;tdepth=0;
+ for (i=0; theight<=blockheight.get(currentblock)+1;i++){
+ symbolpaint.setTextSize(i+8);
+
+ symbolpaint.getTextBounds(Symbol.symbolunicode.get(key),0,Symbol.symbolunicode.get(key).length(),symbolbounds);
+ theight = symbolbounds.height();
+ i3=i;};
+ twidth = symbolpaint.measureText(Symbol.symbolunicode.get(key));
+ tdepth = symbolbounds.bottom;
+ index=subblocknumber.get(tid)-openblock.get(currentblock);
+ if (showopenenclosure.get(currentenclosure)){
+ subblockwidth.get(index2).set(1,twidth);
+ subblockheight.get(index2).set(1,theight);
+ subblockdepth.get(index2).set(1,tdepth);
+ sfontsize=Integer.toString(i3+8);
+ int is=sfontsize.length();
+ if (is==1){
+ subblockattribute.get(index2).set(1, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ subblockattribute.get(index2).set(1, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ subblockattribute.get(index2).set(1, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+
+ subblockypos.get(index2).set(1, ypos+blockdepth.get(currentblock)-tdepth);
+ subblockxpos.get(index2).set(1, subblockxpos.get(index2).get(0));
+ blockwidth.set(currentblock,blockwidth.get(currentblock)+subblockwidth.get(index2).get(1));
+ for (i=2; i<=subblocknumber.get(tid)-openblock.get(currentblock);i++)
+ {subblockxpos.get(index2).set(i, subblockxpos.get(index2).get(i)+subblockwidth.get(index2).get(1));};
+ };
+
+ if (showcloseenclosure){
+ subblockwidth.get(index2).set(index,twidth);
+ subblockheight.get(index2).set(index,theight);
+ subblockdepth.get(index2).set(index,tdepth);
+
+ sfontsize=Integer.toString(i3+8);
+ int is=sfontsize.length();
+ if (is==1){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+ subblockypos.get(index2).set(index, ypos+blockdepth.get(currentblock)-tdepth);
+ subblockxpos.get(index2).set(index, subblockxpos.get(index2).get(0)+blockwidth.get(currentblock));
+ blockwidth.set(currentblock,blockwidth.get(currentblock)+subblockwidth.get(index2).get(index));
+ };
+ if (showopenenclosure.get(currentenclosure) || showcloseenclosure){
+ blockheight.set(currentblock,Math.max(blockheight.get(currentblock),theight+gap));
+ }
+ if (showcloseenclosure){
+ xpos = subblockxpos.get(index2).get(index)+ twidth;
+ } else {
+ xpos = subblockxpos.get(index2).get(index);
+ }
+ parentkey=key; parentblock=currentblock;
+ break;
+ case 5:
+ case 6 :
+ j3=j+key.length()+3;
+ key2="!"+key+" ";
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,key2,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ closeenclosure.set(currentenclosure,subblocknumber.get(tid));
+
+ twidth=0;theight=0;tdepth=0;
+ for (i=0; twidth<=blockwidth.get(currentblock);i++){
+ symbolpaint.setTextSize(i+8);
+ symbolpaint.getTextBounds(Symbol.symbolunicode.get(key),0,Symbol.symbolunicode.get(key).length(),symbolbounds);
+ twidth=symbolbounds.width();
+ i3=i;};
+
+ theight = symbolbounds.height();
+ tdepth = symbolbounds.bottom;
+
+ index2=currentblock;
+ index=subblock.get(index2).size()-1;
+ subblockwidth.get(index2).set(index,twidth);
+ subblockheight.get(index2).set(index, theight);
+ subblockdepth.get(index2).set(index, tdepth);
+ if (Symbol.symboltype.get(key)==5){
+ subblockypos.get(index2).set(index, subblockypos.get(index2).get(0)-blockheight.get(currentblock)+blockdepth.get(currentblock)-tdepth);
+ blockheight.set(currentblock,blockheight.get(currentblock)+theight);
+ blockwidth.set(currentblock, Math.max(blockwidth.get(currentblock),twidth));
+ subblockxpos.get(index2).set(index, subblockxpos.get(index2).get(0));
+ } else if (Symbol.symboltype.get(key)==6){
+ blockheight.set(currentblock,blockheight.get(currentblock)+theight+gap);
+ blockdepth.set(currentblock,blockdepth.get(currentblock)+theight+gap);
+ subblockypos.get(index2).set(index, subblockypos.get(index2).get(0)+blockdepth.get(currentblock)-tdepth);
+ case6xmargin=(symbolpaint.measureText(Symbol.symbolunicode.get(key))-twidth)/2;
+ subblockxpos.get(index2).set(index, subblockxpos.get(index2).get(0)-case6xmargin);
+ }
+
+ sfontsize=Integer.toString(i3+8);
+ int is=sfontsize.length();
+ if (is==1){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+ parentkey=key;
+ break;
+ case 7:
+
+ j3=j+key.length()+3;
+ key2="!"+key+" ";
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,key2,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ closeenclosure.set(currentenclosure,subblocknumber.get(tid));
+
+ twidth=0;theight=0;tdepth=0;
+ if (Symbol.symbolsubtype.get(key)==1){
+ i3=thisfontsize-8;
+ symbolpaint.setTextSize(i3+8);
+ symbolpaint.getTextBounds(Symbol.symbolunicode.get(key),0,Symbol.symbolunicode.get(key).length(),symbolbounds);
+ twidth=symbolbounds.width();
+ } else if (Symbol.symbolsubtype.get(key)==2){
+ for (i=0; twidth<=blockwidth.get(currentblock) ;i++){
+ symbolpaint.setTextSize(i+8);
+ symbolpaint.getTextBounds(Symbol.symbolunicode.get(key),0,Symbol.symbolunicode.get(key).length(),symbolbounds);
+ twidth=symbolbounds.width();
+ i3=i;};
+ };
+ theight = symbolbounds.height();
+ tdepth = symbolbounds.bottom;
+
+ case7xmargin=(blockwidth.get(currentblock)-twidth)/2;
+
+ index2=currentblock;
+ index=subblock.get(index2).size()-1;
+ subblockwidth.get(index2).set(index,twidth);
+ subblockheight.get(index2).set(index, theight);
+ subblockdepth.get(index2).set(index, tdepth);
+ if (!key.equals("not") && !key.equals("bar")){
+ subblockypos.get(index2).set(index, subblockypos.get(index2).get(0)-blockheight.get(currentblock)+blockdepth.get(currentblock)-tdepth-gap);
+ blockheight.set(currentblock,blockheight.get(currentblock)+theight+gap);
+ } else {
+ subblockypos.get(index2).set(index,subblockypos.get(index2).get(0));
+ }
+ if (Symbol.symbolsubtype.get(key)==1){
+ subblockxpos.get(index2).set(index, subblockxpos.get(index2).get(0)+twidth+case7xmargin);
+ } else if (Symbol.symbolsubtype.get(key)==2){
+ subblockxpos.get(index2).set(index, subblockxpos.get(index2).get(0)+case7xmargin);
+ }
+ blockwidth.set(currentblock, Math.max(blockwidth.get(currentblock),twidth));
+
+ sfontsize=Integer.toString(i3+8);
+ is=sfontsize.length();
+ if (is==1){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+ parentkey=key;
+
+ break;
+ case 8:
+ j3=j+key.length()+3;
+ key2="!"+key+" ";
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,key2,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ closeenclosure.set(currentenclosure,subblocknumber.get(tid));
+
+ twidth=0;theight=0;tdepth=0;
+ for (i=0; twidth<=blockwidth.get(currentblock);i++){
+ symbolpaint.setTextSize(i3+8);
+ symbolpaint.getTextBounds(Symbol.symbolunicode.get(key),0,Symbol.symbolunicode.get(key).length(),symbolbounds);
+ twidth=symbolbounds.width();
+ i3=i;};
+
+ theight = symbolbounds.height();
+ tdepth = symbolbounds.bottom;
+
+ blockheight.set(currentblock,blockheight.get(currentblock)+theight+gap);
+ blockdepth.set(currentblock,blockdepth.get(currentblock)+theight+gap);
+ blockwidth.set(currentblock, Math.max(blockwidth.get(currentblock),twidth));
+
+ index2=currentblock;
+ index=subblock.get(index2).size()-1;
+ subblockwidth.get(index2).set(index,blockwidth.get(currentblock));
+ subblockheight.get(index2).set(index, theight);
+ subblockdepth.get(index2).set(index, tdepth);
+ subblockypos.get(index2).set(index, subblockypos.get(index2).get(0)+blockdepth.get(currentblock)-tdepth);
+ subblockxpos.get(index2).set(index, subblockxpos.get(index2).get(0));
+ sfontsize=Integer.toString(i3+8);
+ is=sfontsize.length();
+ if (is==1){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+
+ parentkey=key;
+ break;
+
+ case 9:
+ j3=j+key.length()+3;
+ strokewidth=(float)thisfontsize/10; if (strokewidth < 1){strokewidth=1;};
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringhline,0.0f,strokewidth,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ closeenclosure.set(currentenclosure,subblocknumber.get(tid));
+
+ twidth=0;theight=0;tdepth=0;
+ for (i=0; theight<=blockheight.get(currentblock)+gap+1;i++){
+ symbolpaint.setTextSize(i+8);
+ symbolpaint.getTextBounds(Symbol.symbolunicode.get(key),0,Symbol.symbolunicode.get(key).length(),symbolbounds);
+ theight = symbolbounds.height();
+ i3=i;};
+ twidth = symbolpaint.measureText(Symbol.symbolunicode.get(key));
+ tdepth = symbolbounds.bottom;
+ index2=currentblock;
+
+ subblockwidth.get(index2).set(1,twidth);
+ subblockheight.get(index2).set(1,theight);
+ subblockdepth.get(index2).set(1,tdepth);
+
+ index=subblock.get(index2).size()-1;
+ subblockwidth.get(index2).set(index,blockwidth.get(currentblock)+1);
+ subblockypos.get(index2).set(index, ypos-blockheight.get(currentblock)-gap+blockdepth.get(currentblock));
+ subblockxpos.get(index2).set(index, subblockxpos.get(index2).get(1)+subblockwidth.get(index2).get(1)-1);
+
+ tempy=blockwidth.get(currentblock)+1;
+ sfontsize=Integer.toString((int)tempy+1);
+ is=sfontsize.length();
+ if (is==1){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ subblockattribute.get(index2).set(index, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+
+ blockheight.set(currentblock,blockheight.get(currentblock)+gap+strokewidth);
+ subblockypos.get(index2).set(1, ypos+blockdepth.get(currentblock)-tdepth);
+ blockwidth.set(currentblock,blockwidth.get(currentblock)+subblockwidth.get(index2).get(1));
+ for (i=2; i<=subblocknumber.get(tid)-openblock.get(currentblock)-1;i++)
+ {subblockxpos.get(index2).set(i, subblockxpos.get(index2).get(i)+subblockwidth.get(index2).get(1));};
+
+ sfontsize=Integer.toString(i3+8);
+ is=sfontsize.length();
+ if (is==1){
+ subblockattribute.get(index2).set(1, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ subblockattribute.get(index2).set(1, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ subblockattribute.get(index2).set(1, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+
+ parentkey="";
+ break;
+ }
+
+
+ closeblock.set(currentblock, subblocknumber.get(tid));
+ closeenclosure.set(currentenclosure,subblocknumber.get(tid));
+ thisenclosurelevel--;
+ previousenclosure = currentenclosure;
+ for (i=subblocknumber.get(tid);currentenclosure >= 0 && closeenclosure.get(currentenclosure)>=0;i--){
+ currentenclosure--;
+ }
+ thisblocklevel--;
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+
+ insert(tid,previousblock, currentblock, blockwidth.get(previousblock), blockheight.get(previousblock),blockdepth.get(previousblock));
+
+ j=j+key.length()+3;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ } }}
+ else if (temp == charExclam && key.equals(stringosp)) { // open superscript
+
+ thissuperscriptlevel++;
+ superscriptnumber++;
+ currentsuperscript=superscriptnumber;
+ aftersubscript.add(false);
+
+ supparentkey.add(parentkey);
+
+ if (Symbol.symboltype.containsKey(parentkey) && (Symbol.symboltype.get(parentkey)<=3)){
+ supparentblock.add(previousblock);
+ } else if (Symbol.symboltype.containsKey(parentkey) && (Symbol.symboltype.get(parentkey)==5 || Symbol.symboltype.get(parentkey)==7 )){
+ supparentblock.add(previousblock);
+ } else if (supparentkey.get(currentsuperscript).equals("csp")){
+ supparentblock.add(parentblock);
+ } else if (supparentkey.get(currentsuperscript).equals("csu")){
+ supparentkey.set(currentsuperscript, subparentkey.get(previoussubscript));
+ supparentblock.add(subparentblock.get(previoussubscript));
+ aftersubscript.set(currentsuperscript, true);
+ } else {
+ supparentblock.add(currentblock);
+ }
+
+ previousblock=currentblock;
+ blocknumber++;
+ currentblock= blocknumber;
+ thisblocklevel++;
+ thisfractionlevel=0;
+
+ thisenclosurelevel = -1;
+ synchronized(this){
+ create(tid,currentblock, thisblocklevel, thisfractionlevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock ,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ }
+ homeblock.add(currentblock); openblock.add(subblocknumber.get(tid)); closeblock.add(-1);
+
+ opensuperscript.add(subblocknumber.get(tid));closesuperscript.add(-1);
+ thisfontsize=fontsize*5/12;if (thisfontsize<8){thisfontsize=8;};
+
+ if (Symbol.symboltype.containsKey(supparentkey.get(currentsuperscript))){
+ switch(Symbol.symboltype.get(supparentkey.get(currentsuperscript))){
+ case 1 :
+ case 6 :
+ case 8 :
+ case 10 :
+ case 11 :
+ case 12 :
+ case 15 :
+ case 17 :
+ synchronized(this){
+ Block.error.put(tid, true);
+ Block.errormessage.put(tid, key+" does not have superscript, parse failed!");}
+ return;
+ case 2 :
+ case 3:
+ ypos = ypos+blockdepth.get(supparentblock.get(currentsuperscript))-blockheight.get(supparentblock.get(currentsuperscript));
+ if (aftersubscript.get(currentsuperscript)){xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(0)+blockwidth.get(supparentblock.get(currentsuperscript));};
+ break;
+ case 5 :
+ xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(subblock.get(supparentblock.get(currentsuperscript)).size()-1);
+ break ;
+ case 7 :
+ xpos=subblockxpos.get(homeblock.get(closeenclosure.get(previousenclosure))).get(0)+blockwidth.get(homeblock.get(closeenclosure.get(previousenclosure)));
+ break ;
+ case 13 :
+ case 14 :
+ if (aftersubscript.get(currentsuperscript)){xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(0)+blockwidth.get(supparentblock.get(currentsuperscript))-blockwidth.get(homeblock.get(opensubscript.get(previoussubscript)));};
+ break ;
+ case 19 :
+ case 20 :
+ case 21 :
+ if (!aftersubscript.get(currentsuperscript)){
+ xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(subblock.get(parentblock).size()-1);
+ } else {
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-subblock.get(homeblock.get(opensubscript.get(previoussubscript))).size()-1;
+ xpos=Math.min(subblockxpos.get(supparentblock.get(currentsuperscript)).get(index), subblockxpos.get(supparentblock.get(currentsuperscript)).get(index+2));
+ }
+ break ;
+ case 22 :
+ case 23 :
+ case 24 :
+ if (!aftersubscript.get(currentsuperscript)){
+
+ } else {
+ index=opensubscript.get(previoussubscript)-openblock.get(supparentblock.get(currentsuperscript))-1;
+ xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(index)+subblockwidth.get(supparentblock.get(currentsuperscript)).get(index);};
+ break ;
+ }
+ } else if (supparentkey.get(currentsuperscript).equals("csp")){
+ ypos = ypos+blockdepth.get(supparentblock.get(currentsuperscript))-blockheight.get(supparentblock.get(currentsuperscript));
+ }else {
+ if (aftersubscript.get(currentsuperscript)){xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(0)+blockwidth.get(supparentblock.get(currentsuperscript))-blockwidth.get(homeblock.get(opensubscript.get(previoussubscript)));};
+ }
+
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ } else if (temp == charExclam && key.equals(stringcsp)) { // close superscript;
+
+ index2=currentblock;
+ closesuperscript.set(currentsuperscript, subblocknumber.get(tid));
+ closeblock.set(currentblock, subblocknumber.get(tid));
+ parentkey=supparentkey.get(currentsuperscript);
+
+ if (Symbol.symboltype.containsKey(parentkey)
+ && (Symbol.symboltype.get(parentkey)<=7 || (Symbol.symboltype.get(parentkey)>=19 && Symbol.symboltype.get(parentkey)<=24))
+ ){
+ switch(Symbol.symboltype.get(parentkey)){
+ case 2 :
+ case 3 :
+ tempy=(blockheight.get(currentblock)-blockdepth.get(currentblock))/2;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)+tempy);
+ }
+ blockheight.set(currentblock, blockheight.get(supparentblock.get(currentsuperscript))+blockheight.get(currentblock)-blockdepth.get(currentblock)-tempy);
+ blockdepth.set(currentblock, blockdepth.get(supparentblock.get(currentsuperscript)));
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ previousblock=currentblock;thisblocklevel--;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ if (!aftersubscript.get(currentsuperscript)){
+ insert(tid,previousblock, currentblock,blockwidth.get(previousblock), blockheight.get(previousblock), blockdepth.get(previousblock));
+ } else {
+ width1=blockwidth.get(homeblock.get(opensubscript.get(previoussubscript)));
+ width2=blockwidth.get(previousblock);
+ maxwidth=Math.max(width1,width2);
+ insert(tid,previousblock, currentblock,maxwidth-width1, blockheight.get(previousblock),blockdepth.get(previousblock));
+ }
+ index2=+currentblock;
+ ypos=subblockypos.get(index2).get(0);
+ xpos=subblockxpos.get(index2).get(0)+maxwidth;
+
+ break;
+ case 5 :
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)+blockdepth.get(supparentblock.get(currentsuperscript))-blockheight.get(supparentblock.get(currentsuperscript))-blockdepth.get(currentblock));
+ }
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-1;
+ maxwidth=Math.max(subblockwidth.get(supparentblock.get(currentsuperscript)).get(index), blockwidth.get(currentblock));
+ tempy=(subblockwidth.get(supparentblock.get(currentsuperscript)).get(index)-blockwidth.get(currentblock))/2;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockxpos.get(index2).set(i, subblockxpos.get(index2).get(i)+tempy);
+ }
+
+ ypos=subblockypos.get(supparentblock.get(currentsuperscript)).get(0);
+ xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(1)+blockwidth.get(supparentblock.get(currentsuperscript));
+ blockdepth.set(currentblock, blockdepth.get(supparentblock.get(currentsuperscript)));
+ blockheight.set(currentblock, blockheight.get(supparentblock.get(currentsuperscript))+blockheight.get(currentblock)+gap);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ previousblock=currentblock;thisblocklevel--;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ index2=+currentblock;
+ for (i=1;i<=index;i++){
+ subblockxpos.get(index2).set(openblock.get(supparentblock.get(currentsuperscript))-openblock.get(currentblock)+i, subblockxpos.get(supparentblock.get(currentsuperscript)).get(i));
+ }
+ insert(tid,previousblock, currentblock,0.0f, blockheight.get(previousblock),blockdepth.get(previousblock));
+
+ break ;
+
+ case 7 :
+ tempy=blockdepth.get(supparentblock.get(currentsuperscript))-blockheight.get(supparentblock.get(currentsuperscript))-blockdepth.get(currentblock)+blockheight.get(currentblock)/2;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)+tempy);
+ }
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-1;
+ maxwidth=Math.max(subblockwidth.get(supparentblock.get(currentsuperscript)).get(index), blockwidth.get(currentblock));
+
+ ypos=subblockypos.get(supparentblock.get(currentsuperscript)).get(0);
+ xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(1)+blockwidth.get(supparentblock.get(currentsuperscript));
+
+ blockdepth.set(currentblock, blockdepth.get(supparentblock.get(currentsuperscript)));
+ blockheight.set(currentblock, blockheight.get(supparentblock.get(currentsuperscript))+blockheight.get(currentblock)/2+gap);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ previousblock=currentblock;thisblocklevel--;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ index2=+currentblock;
+ for (i=1;i<=index;i++){
+ subblockxpos.get(index2).set(openblock.get(supparentblock.get(currentsuperscript))-openblock.get(currentblock)+i, subblockxpos.get(supparentblock.get(currentsuperscript)).get(i));
+ }
+ insert(tid,previousblock, currentblock,0.0f, blockheight.get(previousblock), blockdepth.get(previousblock));
+ break ;
+
+ case 19 :
+ case 20 :
+ case 21 :
+ if (!aftersubscript.get(currentsuperscript)){
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-1;
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)
+ -subblockheight.get(supparentblock.get(currentsuperscript)).get(index)
+ +subblockdepth.get(supparentblock.get(currentsuperscript)).get(index)-gap);
+ }
+ } else {
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-1-subblock.get(homeblock.get(opensubscript.get(previoussubscript))).size();
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)
+ -subblockheight.get(supparentblock.get(currentsuperscript)).get(index)
+ +subblockdepth.get(supparentblock.get(currentsuperscript)).get(index)-gap);
+ }
+ }
+ if (!aftersubscript.get(currentsuperscript)){
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-1;
+ width1=subblockwidth.get(supparentblock.get(currentsuperscript)).get(index);
+ width2=blockwidth.get(currentblock);
+ maxwidth=Math.max(width1,width2);
+ if (width1 > width2){
+ float td=(maxwidth-width2)/2;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockxpos.get(index2).set(i, subblockxpos.get(index2).get(i)+td);
+ }
+ ypos=subblockypos.get(supparentblock.get(currentsuperscript)).get(0);
+ xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(index)+subblockwidth.get(supparentblock.get(currentsuperscript)).get(index);
+ } else {
+ float td=(maxwidth-width1)/2;
+ subblockxpos.get(supparentblock.get(currentsuperscript)).set(index, subblockxpos.get(supparentblock.get(currentsuperscript)).get(index)+td);
+ ypos=subblockypos.get(supparentblock.get(currentsuperscript)).get(0);
+ xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(index)+width1+td;
+ }
+
+ blockdepth.set(currentblock, subblockdepth.get(supparentblock.get(currentsuperscript)).get(index));
+ blockheight.set(currentblock, subblockheight.get(supparentblock.get(currentsuperscript)).get(index)+blockheight.get(currentblock)+gap);
+
+ } else {
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-subblock.get(homeblock.get(opensubscript.get(previoussubscript))).size()-1;
+ width1=subblockwidth.get(supparentblock.get(currentsuperscript)).get(index);
+ width2=blockwidth.get(homeblock.get(opensubscript.get(previoussubscript)));
+ width3=blockwidth.get(currentblock);
+
+ // undo the position shift in subscript
+
+ if (width1 > width2) {
+
+ float td=subblockxpos.get(supparentblock.get(currentsuperscript)).get(index+2)-subblockxpos.get(supparentblock.get(currentsuperscript)).get(index);
+ for (i=index+2;i<=index+subblock.get(homeblock.get(opensubscript.get(previoussubscript))).size();i++){
+ subblockxpos.get(supparentblock.get(currentsuperscript)).set(i, subblockxpos.get(supparentblock.get(currentsuperscript)).get(i)-td);
+ }
+ }else {
+ subblockxpos.get(supparentblock.get(currentsuperscript)).set(index, subblockxpos.get(supparentblock.get(currentsuperscript)).get(index+2));
+ }
+ xpos=subblockxpos.get(supparentblock.get(currentsuperscript)).get(index);
+
+ maxwidth1=Math.max(width1,width2);maxwidth=Math.max(maxwidth1, width3);
+ if (maxwidth > width3){
+ float td=(maxwidth-width3)/2;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockxpos.get(index2).set(i, subblockxpos.get(index2).get(i)+td);
+ }
+ }
+ if (maxwidth > width2){
+ float td=(maxwidth-width2)/2;
+ for (i=index+2;i<=index+subblock.get(homeblock.get(opensubscript.get(previoussubscript))).size();i++){
+ subblockxpos.get(supparentblock.get(currentsuperscript)).set(i, subblockxpos.get(supparentblock.get(currentsuperscript)).get(i)+td);
+ }
+ }
+ if (maxwidth > width1){
+ float td=(maxwidth-width1)/2;
+ subblockxpos.get(supparentblock.get(currentsuperscript)).set(index, subblockxpos.get(supparentblock.get(currentsuperscript)).get(index)+td);
+ }
+ xpos=xpos+maxwidth;
+ blockdepth.set(currentblock, blockdepth.get(homeblock.get(opensubscript.get(previoussubscript))));
+ blockheight.set(currentblock, blockheight.get(homeblock.get(opensubscript.get(previoussubscript)))+blockheight.get(currentblock)+gap);
+ }
+ ypos=subblockypos.get(supparentblock.get(currentsuperscript)).get(0);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ previousblock=currentblock;thisblocklevel--;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+
+ if (!aftersubscript.get(currentsuperscript)){
+ if (subblockwidth.get(supparentblock.get(currentsuperscript)).get(index)<blockwidth.get(previousblock)){
+ float td=(maxwidth-subblockwidth.get(supparentblock.get(currentsuperscript)).get(index));
+ insert(tid,previousblock, currentblock,td, blockheight.get(previousblock),blockdepth.get(previousblock));
+ } else {
+ insert(tid,previousblock, currentblock,0.0f, blockheight.get(previousblock),blockdepth.get(previousblock));
+ }} else {
+ if (maxwidth1 > maxwidth){
+ insert(tid,previousblock, currentblock,0.0f, blockheight.get(previousblock),blockdepth.get(previousblock));
+ } else {
+ insert(tid,previousblock, currentblock,maxwidth-maxwidth1, blockheight.get(previousblock), blockdepth.get(previousblock));
+ }
+ }
+ break ;
+
+ case 22 :
+ case 23 :
+ case 24 :
+ if (!aftersubscript.get(currentsuperscript)){
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-1;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)-subblockheight.get(supparentblock.get(currentsuperscript)).get(index)+subblockdepth.get(supparentblock.get(currentsuperscript)).get(index));
+ }
+ }else {
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-1-subblock.get(homeblock.get(opensubscript.get(previoussubscript))).size();
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)-subblockheight.get(supparentblock.get(currentsuperscript)).get(index)+subblockdepth.get(supparentblock.get(currentsuperscript)).get(index));
+ }
+ }
+ blockheight.set(currentblock, subblockheight.get(supparentblock.get(currentsuperscript)).get(index)+blockheight.get(currentblock)-blockdepth.get(currentblock));
+ blockdepth.set(currentblock, subblockdepth.get(supparentblock.get(currentsuperscript)).get(index));
+
+ thisblocklevel--;
+ closeblock.set(currentblock,subblocknumber.get(tid));
+
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ if (!aftersubscript.get(currentsuperscript)){
+ insert(tid,previousblock, currentblock,blockwidth.get(previousblock), blockheight.get(previousblock), blockdepth.get(previousblock));
+ } else {
+ symbolpaint.setTextSize(Integer.parseInt(subblockattribute.get(supparentblock.get(currentsuperscript)).get(1).substring(1,4)));
+ symbolpaint.getTextBounds(Symbol.symbolunicode.get("int"),0,Symbol.symbolunicode.get("int").length(),symbolbounds);
+ twidth = symbolbounds.width()/3;
+ tempy=Math.max(blockwidth.get(homeblock.get(opensubscript.get(previoussubscript)))-twidth,0);
+ tempy=Math.max(blockwidth.get(previousblock),tempy)-tempy;
+ insert(tid,previousblock, currentblock,tempy, blockheight.get(previousblock), blockdepth.get(previousblock));
+ }
+ index2=+currentblock;
+ ypos=subblockypos.get(index2).get(0);
+ xpos=subblockxpos.get(index2).get(0)+blockwidth.get(currentblock);
+
+ break ;
+ }
+ }else {
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(fontinteger));
+ spacewidth=textpaint.measureText(" ")/2;
+
+ if (!aftersubscript.get(currentsuperscript)){
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-1;
+ tempx=subblockheight.get(supparentblock.get(currentsuperscript)).get(index)-subblockdepth.get(supparentblock.get(currentsuperscript)).get(index);
+ tempy=tempx/4-blockdepth.get(currentblock);
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)-tempx+tempy);
+ subblockxpos.get(index2).set(i,subblockxpos.get(index2).get(i)+spacewidth);
+ }
+ }else {
+ index=subblock.get(supparentblock.get(currentsuperscript)).size()-1-subblock.get(homeblock.get(opensubscript.get(previoussubscript))).size();
+ tempx=subblockheight.get(supparentblock.get(currentsuperscript)).get(index)-subblockdepth.get(supparentblock.get(currentsuperscript)).get(index);
+ tempy=tempx/4-blockdepth.get(currentblock);
+ for (i=1;i<=subblock.get(currentblock).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)-tempx+tempy);
+ subblockxpos.get(index2).set(i,subblockxpos.get(index2).get(i)+spacewidth);
+ }
+ }
+ blockheight.set(currentblock, subblockheight.get(supparentblock.get(currentsuperscript)).get(index)+blockheight.get(currentblock)-blockdepth.get(currentblock)-tempy);
+ blockdepth.set(currentblock, subblockdepth.get(supparentblock.get(currentsuperscript)).get(index));
+ blockwidth.set(currentblock, blockwidth.get(currentblock)+spacewidth);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ thisblocklevel-=2;
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ if (!aftersubscript.get(currentsuperscript)){
+ insert(tid,previousblock, currentblock,blockwidth.get(previousblock), blockheight.get(previousblock),blockdepth.get(previousblock));
+ } else {
+ tempy=Math.max(blockwidth.get(previousblock),blockwidth.get(homeblock.get(opensubscript.get(previoussubscript))))-blockwidth.get(homeblock.get(opensubscript.get(previoussubscript)));
+ insert(tid,previousblock, currentblock,tempy, blockheight.get(previousblock), blockdepth.get(previousblock));
+ }
+ index2=+currentblock;
+ ypos=subblockypos.get(index2).get(0);
+ xpos=subblockxpos.get(index2).get(0)+blockwidth.get(currentblock);
+ }
+ thisfractionlevel = blockfractionlevel.get(currentblock);
+ thisenclosurelevel = blockenclosurelevel.get(currentblock);
+
+ previoussuperscript=currentsuperscript;thissuperscriptlevel--;
+ for (i=subblocknumber.get(tid);currentsuperscript >= 0 && closesuperscript.get(currentsuperscript)>=0;i--){
+ currentsuperscript--;
+ }
+
+ if (thissubscriptlevel >= 0 || thissuperscriptlevel >= 0){
+ thisfontsize=fontsize/3;
+ }else if (thisfractionlevel<=2){
+ thisfontsize=(int)((double)fontsize*fractionfontfactor[thisfractionlevel]);
+ }else {
+ thisfontsize=(int)((double)fontsize*fractionfontfactor[2]);
+ };
+ if (thisfontsize<8){thisfontsize=8;};
+
+ j+=5;
+ temp = molecule.charAt(j);
+ parentkey="csp";parentblock=previousblock;
+
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ } else if (temp == charExclam && key.equals(stringosu)) { // open subscript
+
+ thissubscriptlevel++;
+ subscriptnumber++;
+ currentsubscript=subscriptnumber;
+ aftersuperscript.add(false);
+
+ subparentkey.add(parentkey);
+
+ if (Symbol.symboltype.containsKey(parentkey) && (Symbol.symboltype.get(parentkey)<=3)){
+ subparentblock.add(previousblock);
+ } else if (Symbol.symboltype.containsKey(parentkey) && (Symbol.symboltype.get(parentkey)==6 || Symbol.symboltype.get(parentkey)==8 )){
+ subparentblock.add(previousblock);
+ } else if (subparentkey.get(currentsubscript).equals("csu")){
+ subparentblock.add(parentblock);
+ } else if (subparentkey.get(currentsubscript).equals("csp")){
+ subparentkey.set(currentsubscript, supparentkey.get(previoussuperscript));
+ subparentblock.add(supparentblock.get(previoussuperscript));
+ aftersuperscript.set(currentsubscript, true);
+ } else {
+ subparentblock.add(currentblock);
+ }
+
+ previousblock=currentblock;
+ blocknumber++;
+ currentblock= blocknumber;
+ thisblocklevel++;
+ thisfractionlevel=0;
+ thisenclosurelevel = -1;
+ synchronized(this){
+ create(tid,currentblock, thisblocklevel, thisfractionlevel, thisenclosurelevel, thissuperscriptlevel, thissubscriptlevel, thistabularlevel);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,0.0f,0.0f,0.0f,xpos,ypos,thisattribute);
+ }
+ homeblock.add(currentblock); openblock.add(subblocknumber.get(tid)); closeblock.add(-1);
+ opensubscript.add(subblocknumber.get(tid));closesubscript.add(-1);
+ thisfontsize=fontsize*5/12;if (thisfontsize<8){thisfontsize=8;};
+
+ if (Symbol.symboltype.containsKey(subparentkey.get(currentsubscript))){
+ switch(Symbol.symboltype.get(subparentkey.get(currentsubscript))){
+ case 1 :
+ case 5 :
+ case 7 :
+ case 10 :
+ case 11 :
+ case 12 :
+ case 17 :
+ synchronized(this){
+ Block.error.put(tid, true);
+ Block.errormessage.put(tid, key+" does not have subscript, parsing failed!");}
+ return;
+ case 2 :
+ case 3 :
+ ypos = ypos+blockdepth.get(subparentblock.get(currentsubscript));
+ if (aftersuperscript.get(currentsubscript)){xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(0)+blockwidth.get(subparentblock.get(currentsubscript));};
+ break;
+ case 6 :
+ case 8 :
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(0);
+ break ;
+ case 13 :
+ case 14 :
+ if (aftersuperscript.get(currentsubscript)){xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(0)+blockwidth.get(subparentblock.get(currentsubscript))-blockwidth.get(homeblock.get(opensuperscript.get(previoussuperscript)));};
+ break ;
+ case 15 :
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(subblock.get(parentblock).size()-1);
+ break ;
+ case 19 :
+ case 20 :
+ case 21 :
+ if (!aftersuperscript.get(currentsubscript)){
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(subblock.get(subparentblock.get(currentsubscript)).size()-1);
+ } else {
+ index=subblock.get(subparentblock.get(currentsubscript)).size()-subblock.get(homeblock.get(opensuperscript.get(previoussuperscript))).size()-1;
+ xpos=Math.min(subblockxpos.get(subparentblock.get(currentsubscript)).get(index), subblockxpos.get(subparentblock.get(currentsubscript)).get(index+2));
+ }
+ break;
+
+ case 22 :
+ case 23 :
+ case 24 :
+ symbolpaint.setTextSize(Integer.parseInt(subblockattribute.get(subparentblock.get(currentsubscript)).get(1).substring(1,4)));
+ symbolpaint.getTextBounds(Symbol.symbolunicode.get("int"),0,Symbol.symbolunicode.get("int").length(),symbolbounds);
+ twidth = symbolbounds.width()/3;
+ if (!aftersuperscript.get(currentsubscript)){
+ xpos=xpos-twidth;
+ } else {
+ index=opensuperscript.get(previoussuperscript)-openblock.get(subparentblock.get(currentsubscript))-1;
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(index)+subblockwidth.get(subparentblock.get(currentsubscript)).get(index)-twidth;
+ }
+ ypos = ypos+blockdepth.get(subparentblock.get(currentsubscript));
+
+ break ;
+ }
+ } else if (subparentkey.get(currentsubscript).equals("csu")){
+ ypos = ypos+blockdepth.get(subparentblock.get(currentsubscript));
+ }else {
+ if (aftersuperscript.get(currentsubscript)){xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(0)+blockwidth.get(subparentblock.get(currentsubscript))-blockwidth.get(homeblock.get(opensuperscript.get(previoussuperscript)));};
+ }
+
+ j+=5;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ } else if (temp == charExclam && key.equals(stringcsu)) { // close subscript
+ index2=currentblock;
+ closesubscript.set(currentsubscript, subblocknumber.get(tid));
+ closeblock.set(currentblock, subblocknumber.get(tid));
+ parentkey=subparentkey.get(currentsubscript);
+
+ if (Symbol.symboltype.containsKey(parentkey)
+ && (Symbol.symboltype.get(parentkey)<=8 || Symbol.symboltype.get(parentkey)==15 || (Symbol.symboltype.get(parentkey)>=19 && Symbol.symboltype.get(parentkey)<=24))
+ ){
+ switch(Symbol.symboltype.get(parentkey)){
+ case 2 :
+ case 3 :
+ blockheight.set(currentblock, blockheight.get(subparentblock.get(currentsubscript))+blockdepth.get(currentblock));
+ blockdepth.set(currentblock, blockdepth.get(subparentblock.get(currentsubscript))+blockdepth.get(currentblock));
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ previousblock=currentblock;thisblocklevel--;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ index2=+currentblock;
+ if (!aftersuperscript.get(currentsubscript)){
+ insert(tid,previousblock, currentblock,blockwidth.get(previousblock), blockheight.get(previousblock),blockdepth.get(previousblock));
+ } else {
+ width1=blockwidth.get(homeblock.get(opensuperscript.get(previoussuperscript)));
+ width2=blockwidth.get(previousblock);
+ maxwidth=Math.max(width1,width2);
+ insert(tid,previousblock, currentblock,maxwidth-width1, blockheight.get(previousblock), blockdepth.get(previousblock));
+ }
+
+ ypos=subblockypos.get(index2).get(0);
+ xpos=subblockxpos.get(index2).get(0)+maxwidth;
+
+ break;
+ case 6 :
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)+blockdepth.get(subparentblock.get(currentsubscript))+blockheight.get(currentblock)-blockdepth.get(currentblock));
+ }
+ index=subblock.get(subparentblock.get(currentsubscript)).size()-1;
+ maxwidth=Math.max(subblockwidth.get(subparentblock.get(currentsubscript)).get(index), blockwidth.get(currentblock));
+
+ tempy=(subblockwidth.get(subparentblock.get(currentsubscript)).get(index)-blockwidth.get(currentblock))/2;
+ for (i=1;i<=subblock.get(currentblock).size()-1;i++){
+ subblockxpos.get(currentblock).set(i, subblockxpos.get(currentblock).get(i)+tempy-case6xmargin);
+ }
+ ypos=subblockypos.get(subparentblock.get(currentsubscript)).get(0);
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(1)+blockwidth.get(subparentblock.get(currentsubscript));
+
+ blockdepth.set(currentblock, blockdepth.get(subparentblock.get(currentsubscript))+blockheight.get(currentblock)+gap);
+ blockheight.set(currentblock, blockheight.get(subparentblock.get(currentsubscript))+blockheight.get(currentblock)+gap);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ previousblock=currentblock;thisblocklevel--;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ index2=+currentblock;
+ for (i=1;i<=index;i++){
+ subblockxpos.get(index2).set(openblock.get(subparentblock.get(currentsubscript))-openblock.get(currentblock)+i, subblockxpos.get(subparentblock.get(currentsubscript)).get(i));
+ }
+ insert(tid,previousblock, currentblock,0.0f, blockheight.get(previousblock),blockdepth.get(previousblock));
+
+ break ;
+
+ case 8 :
+ float thisgap=gap*fontsize/thisfontsize;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)+blockdepth.get(subparentblock.get(currentsubscript))+blockheight.get(currentblock)-blockdepth.get(currentblock)+thisgap);
+ }
+ index=subblock.get(subparentblock.get(currentsubscript)).size()-1;
+ maxwidth=Math.max(subblockwidth.get(subparentblock.get(currentsubscript)).get(index), blockwidth.get(currentblock));
+
+ tempy=(subblockwidth.get(subparentblock.get(currentsubscript)).get(index)-blockwidth.get(currentblock))/2;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockxpos.get(index2).set(i, subblockxpos.get(index2).get(i)+tempy);
+ }
+ ypos=subblockypos.get(subparentblock.get(currentsubscript)).get(0);
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(1)+blockwidth.get(subparentblock.get(currentsubscript));
+
+ blockdepth.set(currentblock, blockdepth.get(subparentblock.get(currentsubscript))+blockheight.get(currentblock)+gap);
+ blockheight.set(currentblock, blockheight.get(subparentblock.get(currentsubscript))+blockheight.get(currentblock)+gap);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ previousblock=currentblock;thisblocklevel--;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ index2=+currentblock;
+ for (i=1;i<=index;i++){
+ subblockxpos.get(index2).set(openblock.get(subparentblock.get(currentsubscript))-openblock.get(currentblock)+i, subblockxpos.get(subparentblock.get(currentsubscript)).get(i));
+ }
+ insert(tid,previousblock, currentblock,0.0f, blockheight.get(previousblock),blockdepth.get(previousblock));
+
+ break ;
+ case 19 :
+ case 20 :
+ case 21 :
+
+ if (!aftersuperscript.get(currentsubscript)){
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ index=subblock.get(subparentblock.get(currentsubscript)).size()-1;
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)
+ +subblockdepth.get(subparentblock.get(currentsubscript)).get(index)
+ +blockheight.get(currentblock)-blockdepth.get(currentblock)+gap);
+ }
+ } else {
+ index=subblock.get(subparentblock.get(currentsubscript)).size()-1-subblock.get(homeblock.get(opensuperscript.get(previoussuperscript))).size();
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)
+ +subblockdepth.get(subparentblock.get(currentsubscript)).get(index)
+ +blockheight.get(currentblock)-blockdepth.get(currentblock)+gap);
+ }
+ }
+ if (!aftersuperscript.get(currentsubscript)){
+ index=subblock.get(subparentblock.get(currentsubscript)).size()-1;
+ width1=subblockwidth.get(subparentblock.get(currentsubscript)).get(index);
+ width2=blockwidth.get(currentblock);
+ maxwidth=Math.max(width1,width2);
+ if (width1 > width2){
+ float td=(maxwidth-width2)/2;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockxpos.get(index2).set(i, subblockxpos.get(index2).get(i)+td);
+ }
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(index)+subblockwidth.get(subparentblock.get(currentsubscript)).get(index);
+ } else {
+ float td=(maxwidth-width1)/2;
+ subblockxpos.get(subparentblock.get(currentsubscript)).set(index, subblockxpos.get(subparentblock.get(currentsubscript)).get(index)+td);
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(index)+width1+td;
+ }
+ blockdepth.set(currentblock, subblockdepth.get(subparentblock.get(currentsubscript)).get(index)+blockheight.get(currentblock)+gap);
+ blockheight.set(currentblock, subblockheight.get(subparentblock.get(currentsubscript)).get(index)+blockheight.get(currentblock)+gap);
+ } else {
+ index=subblock.get(subparentblock.get(currentsubscript)).size()-subblock.get(homeblock.get(opensuperscript.get(previoussuperscript))).size()-1;
+ width1=subblockwidth.get(subparentblock.get(currentsubscript)).get(index);
+ width2=blockwidth.get(homeblock.get(opensuperscript.get(previoussuperscript)));
+ width3=blockwidth.get(currentblock);
+
+ // undo the position shift in superscript
+
+ if (width1 > width2) {
+ float td=subblockxpos.get(subparentblock.get(currentsubscript)).get(index+2)-subblockxpos.get(subparentblock.get(currentsubscript)).get(index);
+ for (i=index+2;i<=index+subblock.get(homeblock.get(opensuperscript.get(previoussuperscript))).size();i++){
+ subblockxpos.get(subparentblock.get(currentsubscript)).set(i, subblockxpos.get(subparentblock.get(currentsubscript)).get(i)-td);
+ }
+ }else {
+ subblockxpos.get(subparentblock.get(currentsubscript)).set(index, subblockxpos.get(subparentblock.get(currentsubscript)).get(index+2));
+ }
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(index);
+ maxwidth1=Math.max(width1,width2);maxwidth=Math.max(maxwidth1, width3);
+ if (maxwidth > width3){
+ float td=(maxwidth-width3)/2;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockxpos.get(index2).set(i, subblockxpos.get(index2).get(i)+td);
+ }
+ }
+ if (maxwidth > width2){
+ float td=(maxwidth-width2)/2;
+ for (i=index+2;i<=index+subblock.get(homeblock.get(opensuperscript.get(previoussuperscript))).size();i++){
+ subblockxpos.get(subparentblock.get(currentsubscript)).set(i, subblockxpos.get(subparentblock.get(currentsubscript)).get(i)+td);
+ }
+ }
+ if (maxwidth > width1){
+ float td=(maxwidth-width1)/2;
+ subblockxpos.get(subparentblock.get(currentsubscript)).set(index, subblockxpos.get(subparentblock.get(currentsubscript)).get(index)+td);
+ }
+ xpos=xpos+maxwidth;
+ blockdepth.set(currentblock, blockdepth.get(homeblock.get(opensuperscript.get(previoussuperscript)))+blockheight.get(currentblock)+gap);
+ blockheight.set(currentblock, blockheight.get(homeblock.get(opensuperscript.get(previoussuperscript)))+blockheight.get(currentblock)+gap);
+ }
+
+ ypos=subblockypos.get(subparentblock.get(currentsubscript)).get(0);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ previousblock=currentblock;thisblocklevel--;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+
+ if (!aftersuperscript.get(currentsubscript)){
+ if (subblockwidth.get(subparentblock.get(currentsubscript)).get(index)<blockwidth.get(previousblock)){
+ float td=(maxwidth-subblockwidth.get(subparentblock.get(currentsubscript)).get(index));
+ insert(tid,previousblock, currentblock,td, blockheight.get(previousblock),blockdepth.get(previousblock));
+ } else {
+ insert(tid,previousblock, currentblock,0.0f, blockheight.get(previousblock),blockdepth.get(previousblock));
+ }
+ } else {
+ if (maxwidth1 > maxwidth){
+ insert(tid,previousblock, currentblock,0.0f, blockheight.get(previousblock),blockdepth.get(previousblock));
+ } else {
+ insert(tid,previousblock, currentblock,maxwidth-maxwidth1, blockheight.get(previousblock),blockdepth.get(previousblock));
+ }
+ }
+ break ;
+ case 22 :
+ case 23 :
+ case 24 :
+
+ symbolpaint.setTextSize(Integer.parseInt(subblockattribute.get(subparentblock.get(currentsubscript)).get(1).substring(1,4)));
+ symbolpaint.getTextBounds(Symbol.symbolunicode.get("int"),0,Symbol.symbolunicode.get("int").length(),symbolbounds);
+ twidth = symbolbounds.width()/3;
+
+ tempy=(blockheight.get(currentblock)-blockdepth.get(currentblock))/2;
+ index=subblock.get(subparentblock.get(currentsubscript)).size()-1;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)+tempy);
+ }
+
+ blockheight.set(currentblock, subblockheight.get(subparentblock.get(currentsubscript)).get(index)+blockdepth.get(currentblock)+tempy);
+ blockdepth.set(currentblock, subblockdepth.get(subparentblock.get(currentsubscript)).get(index)+blockdepth.get(currentblock)+tempy);
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ thisblocklevel--;
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ if (!aftersuperscript.get(currentsubscript)){
+ tempy=Math.max(blockwidth.get(previousblock)-twidth, 0);
+ insert(tid,previousblock, currentblock,tempy, blockheight.get(previousblock),blockdepth.get(previousblock));
+ } else {
+ tempy=Math.max(blockwidth.get(previousblock)-twidth,blockwidth.get(homeblock.get(opensuperscript.get(previoussuperscript))))-blockwidth.get(homeblock.get(opensuperscript.get(previoussuperscript)));
+ insert(tid,previousblock, currentblock,tempy, blockheight.get(previousblock),blockdepth.get(previousblock));
+ }
+ index2=+currentblock;
+ ypos=subblockypos.get(index2).get(0);
+ xpos=subblockxpos.get(index2).get(0)+blockwidth.get(currentblock);
+ break ;
+ case 15 :
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)
+ +subblockdepth.get(subparentblock.get(currentsubscript)).get(subblock.get(subparentblock.get(currentsubscript)).size()-1)
+ +blockheight.get(currentblock)-blockdepth.get(currentblock)+gap);
+ }
+ index=subblock.get(subparentblock.get(currentsubscript)).size()-1;
+ width1=subblockwidth.get(subparentblock.get(currentsubscript)).get(index);
+ width2=blockwidth.get(currentblock);
+ maxwidth=Math.max(width1,width2);
+ if (width1 > width2){
+ float td=(maxwidth-width2)/2;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockxpos.get(index2).set(i, subblockxpos.get(index2).get(i)+td);
+ }
+ ypos=subblockypos.get(subparentblock.get(currentsubscript)).get(0);
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(index)+subblockwidth.get(subparentblock.get(currentsubscript)).get(index);
+ } else {
+ float td=(maxwidth-width1)/2;
+ subblockxpos.get(subparentblock.get(currentsubscript)).set(index, subblockxpos.get(subparentblock.get(currentsubscript)).get(index)+td);
+ ypos=subblockypos.get(subparentblock.get(currentsubscript)).get(0);
+ xpos=subblockxpos.get(subparentblock.get(currentsubscript)).get(index)+width1+td;
+ }
+
+ blockdepth.set(currentblock, subblockdepth.get(subparentblock.get(currentsubscript)).get(index)+blockheight.get(currentblock));
+ blockheight.set(currentblock, subblockheight.get(subparentblock.get(currentsubscript)).get(index)+blockheight.get(currentblock)+gap);
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ previousblock=currentblock;thisblocklevel--;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+
+ if (subblockwidth.get(subparentblock.get(currentsubscript)).get(index)<blockwidth.get(previousblock)){
+ float td=(maxwidth-subblockwidth.get(subparentblock.get(currentsubscript)).get(index))/2;
+ insert(tid,previousblock, currentblock,td, blockheight.get(previousblock),blockdepth.get(previousblock));
+ }
+ else {
+ insert(tid,previousblock, currentblock,0.0f, blockheight.get(previousblock), blockdepth.get(previousblock));
+ }
+ break ;
+ }
+ }else {
+ tempy=(blockheight.get(currentblock)-blockdepth.get(currentblock))/2;
+ index=subblock.get(subparentblock.get(currentsubscript)).size()-1;
+ for (i=1;i<=subblock.get(index2).size()-1;i++){
+ subblockypos.get(index2).set(i,subblockypos.get(index2).get(i)+tempy);
+ }
+ tempy=Math.max(subblockdepth.get(subparentblock.get(currentsubscript)).get(index),(blockdepth.get(currentblock)+ blockheight.get(currentblock))/2);
+ maxtop=subblockheight.get(subparentblock.get(currentsubscript)).get(index)-subblockdepth.get(subparentblock.get(currentsubscript)).get(index);
+ blockdepth.set(currentblock, tempy);
+ blockheight.set(currentblock,maxtop+blockdepth.get(currentblock));
+
+ closeblock.set(currentblock,subblocknumber.get(tid));
+ thisblocklevel-=2;
+ previousblock=currentblock;
+ for (i=subblocknumber.get(tid);currentblock >=0 && closeblock.get(currentblock)>=0;i--){
+ currentblock--;
+ }
+ if (!aftersuperscript.get(currentsubscript)){
+ insert(tid,previousblock, currentblock,blockwidth.get(previousblock), blockheight.get(previousblock), blockdepth.get(previousblock));
+ } else {
+ tempy=Math.max(blockwidth.get(previousblock),blockwidth.get(homeblock.get(opensuperscript.get(previoussuperscript))))-blockwidth.get(homeblock.get(opensuperscript.get(previoussuperscript)));
+ insert(tid,previousblock, currentblock,tempy, blockheight.get(previousblock),blockdepth.get(previousblock));
+ }
+ index2=+currentblock;
+ ypos=subblockypos.get(index2).get(0);
+ xpos=subblockxpos.get(index2).get(0)+blockwidth.get(currentblock);
+ }
+ thisfractionlevel = blockfractionlevel.get(currentblock);
+ thisenclosurelevel = blockenclosurelevel.get(currentblock);
+
+ previoussubscript=currentsubscript;thissubscriptlevel--;
+ for (i=subblocknumber.get(tid);currentsubscript >= 0 && closesubscript.get(currentsubscript)>=0;i--){
+ currentsubscript--;
+ }
+
+ if (thissubscriptlevel >= 0 || thissuperscriptlevel >= 0){
+ thisfontsize=fontsize/3;
+ }else if (thisfractionlevel<=2){
+ thisfontsize=(int)((double)fontsize*fractionfontfactor[thisfractionlevel]);
+ }else {
+ thisfontsize=(int)((double)fontsize*fractionfontfactor[2]);
+ };
+ if (thisfontsize<8){thisfontsize=8;};
+ j+=5;
+ temp = molecule.charAt(j);
+ parentkey="csu";parentblock=previousblock;
+
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ } else if (temp == charExclam && key.equals("hsp")){ // hspace
+
+ j+=5;
+ key=molecule.substring(j,molecule.indexOf("}",j));j=j+key.length()+1;
+ twidth=Float.parseFloat(key);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stringdnot,twidth,0.0f,0.0f,xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+ xpos=xpos+twidth;
+
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ }else if (temp == charExclam && key.equals("vsp")){ // vspace
+
+ synchronized(this){
+ Block.error.put(tid, true);
+ Block.errormessage.put(tid, "vspace inserted in wrong place, parse failed!");}
+ return;
+
+ } else {
+
+ for (i = 0 ; (temp != charExclam) || (temp == charExclam && Symbol.symboltype.containsKey(key)
+ && Symbol.symboltype.get(key) >= 10 ) ; i++) {
+
+ if (temp != charExclam) { // italic text
+ sfontsize=Integer.toString(thisfontsize);
+ ij=sfontsize.length();
+ if (ij==1){
+ thisattribute=thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4);
+ } else if (ij==2){
+ thisattribute=thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4);
+ } else if (ij==3){
+ thisattribute=thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4);
+ }
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(Integer.parseInt(thisattribute.substring(4,7))));
+
+ ii=molecule.indexOf('!',j);
+ String stemp=molecule.substring(j,ii);
+ textpaint.getTextBounds(stemp,0,stemp.length(),textbounds);
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stemp,textpaint.measureText(stemp),(float)textbounds.height(),(float)textbounds.bottom, xpos,ypos,thisattribute);
+ homeblock.add(currentblock);
+ xpos=xpos+textpaint.measureText(stemp);
+ parentkey=stemp.substring(stemp.length()-1); parentblock=currentblock;
+ j=ii;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+
+ } else if (temp == charExclam){ // symbol
+
+ if (Symbol.symboltype.get(key)==20 || Symbol.symboltype.get(key)==23){
+ sfontsize=Integer.toString((int) ((float)thisfontsize*Header.bigopsize));
+ symbolpaint.setTextSize((int)(float)thisfontsize*Header.bigopsize);
+ } else if (Symbol.symboltype.get(key)==21 || Symbol.symboltype.get(key)==24){
+ sfontsize=Integer.toString((int) ((float)thisfontsize*Header.bigbigopsize));
+ symbolpaint.setTextSize((int)(float)thisfontsize*Header.bigbigopsize);
+ } else {
+ sfontsize=Integer.toString(thisfontsize);
+ symbolpaint.setTextSize(thisfontsize);
+ }
+ textpaint.setTextSize(thisfontsize);
+ textpaint.setTypeface(tf.get(fontinteger));
+ String stemp="a";
+ textpaint.getTextBounds(stemp,0,stemp.length(),textbounds);
+ Float sizeofa=(float) textbounds.height();
+
+ if (Symbol.symboltype.get(key)==15 || Symbol.symboltype.get(key)==14) {
+ ij=sfontsize.length();
+ if (ij==1){
+ attribute2=thisattribute.substring(0,1)+"00"+sfontsize+"005"+thisattribute.substring(7);
+ } else if (ij==2){
+ attribute2=thisattribute.substring(0,1)+"0"+sfontsize+"005"+thisattribute.substring(7);
+ } else if (ij==3){
+ attribute2=thisattribute.substring(0,1)+sfontsize+"005"+thisattribute.substring(7);
+ }
+
+ textpaint5.setTextSize(thisfontsize);
+ textpaint5.getTextBounds(Symbol.symbolunicode.get(key),0,Symbol.symbolunicode.get(key).length(),textbounds5);
+ twidth = textpaint5.measureText(Symbol.symbolunicode.get(key));
+ theight = textbounds5.height();
+ tdepth = textbounds5.bottom;
+ }else {
+ ij=sfontsize.length();
+ if (ij==1){
+ attribute2=thisattribute.substring(0,1)+"00"+sfontsize+"004"+thisattribute.substring(7);
+ } else if (ij==2){
+ attribute2=thisattribute.substring(0,1)+"0"+sfontsize+"004"+thisattribute.substring(7);
+ } else if (ij==3){
+ attribute2=thisattribute.substring(0,1)+sfontsize+"004"+thisattribute.substring(7);
+ }
+ symbolpaint.getTextBounds(Symbol.symbolunicode.get(key),0,Symbol.symbolunicode.get(key).length(),symbolbounds);
+ twidth = symbolpaint.measureText(Symbol.symbolunicode.get(key));
+ theight = symbolbounds.height();
+ tdepth = symbolbounds.bottom;
+ }
+ parentkey=key; parentblock=currentblock;
+
+ theight=Math.max(theight, sizeofa);
+ ii=j+key.length()+1;
+ stemp=molecule.substring(j,ii).trim()+" ";
+ subblocknumber.put(tid, subblocknumber.get(tid)+1); add(tid,currentblock,stemp,twidth,theight,tdepth,xpos,ypos,attribute2);
+ homeblock.add(currentblock);
+
+ xpos=xpos+twidth;
+
+ j=j+key.length()+1;
+ temp = molecule.charAt(j);
+ if (temp == charExclam){
+ key = "";
+ for (ii=j+1;!(molecule.charAt(ii)==' ' ||molecule.charAt(ii)=='}' || molecule.charAt(ii)=='{'|| molecule.charAt(ii)=='!');ii++){
+ key = key + molecule.charAt(ii);
+ }}
+ if(molecule.charAt(ii)==' ' && molecule.charAt(ii+1)!='!'){j=j+1;}
+ };
+ };
+ }
+ }
+ synchronized(this){
+ block.result(tid, blocknumber, subblock, subblockwidth, subblockheight, subblockdepth, subblockxpos, subblockypos, subblockattribute, blockwidth, blockheight, blockdepth);}
+ }
+
+ public void add(int tid, int blocknumber, String block,
+ Float width, Float height, Float depth, Float xpos, Float ypos, String attribute) {
+
+ int index=blocknumber;
+ subblock.get(index).add(block);
+ subblockwidth.get(index).add(width);
+ subblockheight.get(index).add(height);
+ subblockdepth.get(index).add(depth);
+ subblockxpos.get(index).add(xpos);
+ subblockypos.get(index).add(ypos);
+ subblockattribute.get(index).add(attribute);
+
+ blockwidth.set(blocknumber, blockwidth.get(blocknumber)+width);
+ float maxtop=Math.max(blockheight.get(blocknumber)-blockdepth.get(blocknumber), height-depth);
+ blockdepth.set(blocknumber, Math.max(blockdepth.get(blocknumber),depth));
+ blockheight.set(blocknumber,maxtop+blockdepth.get(blocknumber));
+ return;
+ }
+
+ public void create(int tid, int blocknumber, int thisblocklevel, int thisfractionlevel, int thisenclosurelevel, int thissuperscriptlevel, int thissubscriptlevel, int thistabularlevel) {
+
+ int index=blocknumber;
+ subblock.add(index,new ArrayList<String>());
+ subblockwidth.add(index,new ArrayList<Float>());
+ subblockheight.add(index,new ArrayList<Float>());
+ subblockdepth.add(index,new ArrayList<Float>());
+ subblockxpos.add(index,new ArrayList<Float>());
+ subblockypos.add(index,new ArrayList<Float>());
+ subblockattribute.add(index,new ArrayList<String>());
+
+ blocklevel.add(thisblocklevel);
+ blockfractionlevel.add(thisfractionlevel);
+ blockenclosurelevel.add(thisenclosurelevel);
+ blocksuperscriptlevel.add(thissuperscriptlevel);
+ blocksubscriptlevel.add(thissubscriptlevel);
+ blocktabularlevel.add(thistabularlevel);
+
+ blockwidth.add(0.0f);
+ blockheight.add(0.0f);
+ blockdepth.add(0.0f);
+
+ return;
+ }
+
+ public void insert(int tid, int blocknumber1, int blocknumber2 , Float width, Float height, Float depth) {
+
+ int index1=blocknumber1;
+ int index2=blocknumber2;
+ int l=subblock.get(index1).size();
+ for (int i=0;i<=l-1;i++){
+ subblock.get(index2).add(subblock.get(index1).get(i));
+ subblockwidth.get(index2).add(subblockwidth.get(index1).get(i));
+ subblockheight.get(index2).add(subblockheight.get(index1).get(i));
+ subblockdepth.get(index2).add(subblockdepth.get(index1).get(i));
+ subblockxpos.get(index2).add(subblockxpos.get(index1).get(i));
+ subblockypos.get(index2).add(subblockypos.get(index1).get(i));
+ subblockattribute.get(index2).add(subblockattribute.get(index1).get(i));
+ }
+
+ float maxtop=Math.max(blockheight.get(blocknumber2)-blockdepth.get(blocknumber2), height-depth);
+ blockdepth.set(blocknumber2, Math.max(blockdepth.get(blocknumber2),depth));
+ blockheight.set(blocknumber2, maxtop+blockdepth.get(blocknumber2));
+ blockwidth.set(blocknumber2, blockwidth.get(blocknumber2)+width);
+ return;
+ }
+
+ public void adjustfraction(int tid, int blocknumber, int maxblocknumber, ArrayList<Integer> blocklist, ArrayList<Integer> openblock,ArrayList<Integer> closeblock,int thisfractionlevel, int thisblocklevel, int thisenclosurelevel, int thissuperscriptlevel, int thissubscriptlevel, Float off, Float linewidth) {
+
+ ArrayList<Float> liney= new ArrayList<Float>();
+ ArrayList<Integer> line = new ArrayList<Integer>();
+ int numfrac=0;
+
+ int index2=blocknumber;
+ int index = openblock.get(blocknumber);
+ for (int i=index;i<=closeblock.get(blocknumber);i++){
+ if(blockenclosurelevel.get(blocklist.get(i)) == thisenclosurelevel &&
+ blocksuperscriptlevel.get(blocklist.get(i)) == thissuperscriptlevel &&
+ blocksubscriptlevel.get(blocklist.get(i)) == thissubscriptlevel &&
+ blockfractionlevel.get(blocklist.get(i))==thisfractionlevel+1 &&
+ subblock.get(index2).get(i-index).equals("!hlin ")){
+ numfrac++;
+ liney.add(subblockypos.get(index2).get(i-index));
+ line.add(i-index);
+ }
+ }
+
+ ArrayList<Integer> adjustedblock = new ArrayList<Integer>();
+ ArrayList<Integer> adjustedfrac = new ArrayList<Integer>();
+ int numblock=0;
+ for (int i=0;i<=numfrac-1;i++){
+ adjustedblock.add(blocklist.get(line.get(i)+index)-1);
+ adjustedfrac.add(i);
+ numblock++;
+ }
+
+ float minliney=10000;
+ for (int i=0;i<=numfrac-1;i++){
+ minliney=Math.min(minliney, liney.get(i));
+ }
+
+ Float maxtop1=0.0f;
+ Float maxbottom1=0.0f;
+ int i=0;
+ Float top1=0.0f;
+ Float bottom1 =0.0f;
+ for (i=0;i<numblock;i++){
+ float diff = liney.get(adjustedfrac.get(i))-minliney;
+ bottom1=blockdepth.get(adjustedblock.get(i))-diff;
+ top1=blockheight.get(adjustedblock.get(i))-bottom1;
+ maxtop1=Math.max(maxtop1, top1);
+ maxbottom1=Math.max(maxbottom1, bottom1);
+ blockfractionlevel.set(adjustedfrac.get(i), 0);
+ }
+
+ int lengthofblock=closeblock.get(blocknumber)-openblock.get(blocknumber);
+ ArrayList<Boolean> adjusted = new ArrayList<Boolean>();
+ for (i=0;i<=lengthofblock;i++){
+ adjusted.add(false);
+ }
+
+ for (i=0;i<numblock;i++){
+ float diff = liney.get(adjustedfrac.get(i))-minliney;
+ for (int ii=openblock.get(adjustedblock.get(i));ii<=closeblock.get(adjustedblock.get(i));ii++){
+ index=ii-openblock.get(blocknumber);
+ subblockypos.get(index2).set(index,subblockypos.get(index2).get(index)-diff);
+ adjusted.set(index, true);
+ }
+ }
+ Float diff=subblockypos.get(index2).get(0)-minliney-off;
+ Float maxtop2=0.0f;
+ Float maxbottom2=0.0f;
+ for (i=1;i<=lengthofblock;i++){
+ Float top2=0.0f;
+ Float bottom2 = 0.0f;
+ if(!adjusted.get(i)){
+ subblockypos.get(index2).set(i, subblockypos.get(index2).get(i)-diff);
+ bottom2=subblockdepth.get(index2).get(i)-diff;
+ top2=subblockheight.get(index2).get(i)-bottom2;
+ maxtop2=Math.max(maxtop2, top2);
+ maxbottom2=Math.max(maxbottom2, bottom2);
+ }
+ }
+ Float maxtop=Math.max(maxtop1, maxtop2);
+ Float maxbottom=Math.max(maxbottom1, maxbottom2);
+ blockheight.set(blocknumber, maxtop+maxbottom);
+ blockdepth.set(blocknumber, maxbottom);
+
+ maxtop1=0.0f;maxbottom1=0.0f;maxtop2=0.0f;maxbottom2=0.0f;maxtop=0.0f;maxbottom=0.0f;
+ liney.clear();line.clear();
+ return;
+ }
+ } \ No newline at end of file
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsedocument.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsedocument.java
new file mode 100644
index 0000000000..fcd9b8cbd7
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsedocument.java
@@ -0,0 +1,633 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.util.SparseArray;
+import android.util.SparseBooleanArray;
+import android.graphics.Canvas;
+import android.graphics.Typeface;
+import android.util.SparseIntArray;
+
+public class Parsedocument{
+
+ public static SparseBooleanArray error = new SparseBooleanArray();
+ public static SparseArray<String> errormessage = new SparseArray<String>();
+
+ public void parsedocument(Canvas canvas, Header header, Symbol symbol2, SuperBlock superblock, Block block, ParagraphBlock paragraphblock, Integer tid, Integer startline, Integer endline, Integer containerwidth, Integer containerheight, Boolean twocolumns, Float ypos, ArrayList<Typeface> tf) {
+
+ ArrayList<String> superblocktype = new ArrayList<String>();
+ SparseIntArray superblocknumline = new SparseIntArray();
+ SparseIntArray superblockstartline = new SparseIntArray();
+ SparseIntArray superblockendline = new SparseIntArray();
+ SparseArray<ArrayList<String>> superblockline = new SparseArray<ArrayList<String>>();
+
+ int totalline=-1;
+ int superblocknumber=-1;
+ int centerstartline=0;
+ int alignrightstartline=0;
+ int centerendline=0;
+ int alignrightendline=0;
+
+ int ii = 0;
+ int i=0;
+ int j=0;
+ int fontsize=0;
+ int tid2=tid*1000;
+
+ int viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin;
+ int tablelinenumber=-1;
+
+ float indent=Header.indent;
+
+ String line;
+
+ error.put(tid,false);
+ errormessage.put(tid,"");
+
+ ArrayList<Integer> tablehlinecounter = new ArrayList<Integer>();
+
+ Boolean dohyphenation=true;
+ String columnspec ="";
+
+ ArrayList<String> tblockline = new ArrayList<String>();
+
+ String sfontsize=Integer.toString(Header.fontsize);
+ String attribute1="";
+ String attribute0="";
+ String attribute2="";
+
+ if (sfontsize.length()==1){
+ attribute0 = "000"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000";
+ attribute1 = "000"+sfontsize+"0010xff00000000+0.000xFF0000xFF000000";
+ attribute2 = "100"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000";
+ } else if (sfontsize.length()==2){
+ attribute0 = "00"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000";
+ attribute1 = "00"+sfontsize+"0010xff00000000+0.000xFF0000xFF000000";
+ attribute2 = "10"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000";
+ } else if (sfontsize.length()==3){
+ attribute0 = "0"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000";
+ attribute1 = "0"+sfontsize+"0010xff00000000+0.000xFF0000xFF000000";
+ attribute2 = "1"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000";
+ }
+
+ for (int iii=startline;iii<=endline;iii++){
+
+ line=Source.lineblock.get(iii);
+ line.trim();
+ if (line.substring(0,17).equals("!begin{lineblock}")){line=line.substring(17); line.trim();};
+ j=line.indexOf("!end{lineblock}");
+ if(j==-1){error.put(tid,true);errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+"The !end{lineblock} command missing, parse failed!!");return;}
+
+ for (ii=0;j != 0; ii++){
+ if (line.length()>=16 && line.substring(0,16).equals("!begin{eqnarray}") && (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) {
+
+ i=line.indexOf("}",16);
+ columnspec=line.substring(17,i);
+ line=line.substring(i+1); line=line.trim();
+ superblocknumber++;superblocktype.add("eqnarray");superblocknumline.put(superblocknumber,0);
+ superblockstartline.put(superblocknumber, totalline);
+
+ } else if (line.length()>=14 && line.substring(0,14).equals("!end{eqnarray}")&& !superblocktype.get(superblocknumber).equals("verbatim")){
+
+ superblockendline.put(superblocknumber,totalline);
+ if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){
+ superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1);
+
+ Parseeqnarray eqnarray = new Parseeqnarray();
+ eqnarray.parseeqnarray(canvas, block, tid, containerwidth, containerheight, superblocknumber, superblock, superblockline, superblocknumline, superblockstartline, superblockendline,tf, columnspec, ypos, attribute1);
+ synchronized(this){error.put(tid, Parseeqnarray.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parseeqnarray.errormessage.get(tid)); return;};}
+ ypos=Parseeqnarray.thisypos.get(tid);
+ }
+
+ line=line.substring(14); line=line.trim();superblocktype.set(superblocknumber,"text");
+ j=line.indexOf("!end{lineblock}");
+ tblockline.clear();
+
+ } else if (line.length()>=13 && line.substring(0,13).equals("!begin{table}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) {
+ synchronized(this){superblock.addtable(tid);}
+ i=line.indexOf("}",13);
+ columnspec=line.substring(14,i);
+ line=line.substring(i+1); line=line.trim();
+
+ superblocknumber++;superblocktype.add("table");superblocknumline.put(superblocknumber,0);
+ superblockstartline.put(superblocknumber, totalline);
+
+ tablehlinecounter.add(-1);tablelinenumber++;
+
+ boolean noline=false;
+ for (int k=0;noline==false && k < 1000;k++){
+ if (line.substring(0,6).equals("!hline")){tablehlinecounter.set(tablelinenumber, tablehlinecounter.get(tablelinenumber)+1); line=line.substring(6); line=line.trim();}
+ else {noline=true;};
+ }
+
+ } else if (line.length()>=11 && line.substring(0,11).equals("!end{table}")&& !superblocktype.get(superblocknumber).equals("verbatim")){
+
+ superblockendline.put(superblocknumber,totalline);
+ if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){
+ superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1);
+
+ Parsetable table = new Parsetable();
+
+ table.parsetable(canvas, block, paragraphblock, tid, containerwidth, containerheight, tablelinenumber, tablehlinecounter, superblocknumber, superblock, superblockline, superblocknumline, superblockstartline, superblockendline,tf, columnspec, ypos, attribute2, attribute0);
+ error.put(tid, Parsetable.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parsetable.errormessage.get(tid)); return;};
+ ypos=Parsetable.thisypos.get(tid);
+ tablelinenumber=-1;
+ tablehlinecounter.clear();
+ }
+ synchronized(this){totalline=SuperBlock.superblocklinenumber.get(tid);}
+ line=line.substring(11); line=line.trim();;superblocktype.set(superblocknumber,"text");
+ j=line.indexOf("!end{lineblock}");
+ tblockline.clear();tablehlinecounter.clear();tablelinenumber=-1;
+
+ } else if (line.length()>=21 && line.substring(0,21).equals("!begin{graphicstable}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) {
+ synchronized(this){superblock.addtable(tid);}
+ i=line.indexOf("}",21);
+ columnspec=line.substring(22,i);
+ line=line.substring(i+1); line=line.trim();
+
+ superblocknumber++;superblocktype.add("graphicstable");superblocknumline.put(superblocknumber,0);
+ superblockstartline.put(superblocknumber, totalline);
+
+ tablehlinecounter.add(-1);tablelinenumber++;
+
+ boolean noline=false;
+ for (int k=0;noline==false && k < 1000;k++){
+ if (line.substring(0,6).equals("!hline")){tablehlinecounter.set(tablelinenumber, tablehlinecounter.get(tablelinenumber)+1); line=line.substring(6); line=line.trim();}
+ else {noline=true;};
+ }
+
+ } else if (line.length()>=19 && line.substring(0,19).equals("!end{graphicstable}")&& !superblocktype.get(superblocknumber).equals("verbatim")){
+
+ superblockendline.put(superblocknumber,totalline);
+ if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){
+ superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1);
+
+ Parsegraphicstable graphicstable = new Parsegraphicstable();
+
+ graphicstable.parsegraphicstable(canvas, block, paragraphblock, tid, containerwidth, containerheight, tablelinenumber, tablehlinecounter, superblocknumber, superblock, superblockline, superblocknumline, superblockstartline, superblockendline,tf, columnspec, ypos, attribute2, attribute0);
+ error.put(tid, Parsegraphicstable.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parsegraphicstable.errormessage.get(tid)); return;};
+ ypos=Parsegraphicstable.thisypos.get(tid);
+ tablelinenumber=-1;
+ tablehlinecounter.clear();
+ }
+ synchronized(this){totalline=SuperBlock.superblocklinenumber.get(tid);}
+ line=line.substring(19); line=line.trim();;superblocktype.set(superblocknumber,"text");
+ j=line.indexOf("!end{lineblock}");
+ tblockline.clear();tablehlinecounter.clear();tablelinenumber=-1;
+
+ } else if (line.length()>=16 && line.substring(0,16).equals("!begin{equation}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) {
+
+ line=line.substring(16); line=line.trim();
+ superblocknumber++;superblocktype.add("equation");superblocknumline.put(superblocknumber,0);
+ superblockstartline.put(superblocknumber, totalline);
+
+ } else if (line.length()>=14 && line.substring(0,14).equals("!end{equation}")&& !superblocktype.get(superblocknumber).equals("verbatim")){
+
+ superblockendline.put(superblocknumber,totalline);
+ if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){
+ superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1);
+ Parseequation equation = new Parseequation();
+ equation.parseequation(canvas, block, tid, containerwidth, containerheight, superblocknumber, superblock, superblockline, superblocknumline, superblockstartline, superblockendline,tf, columnspec, ypos, attribute1);
+ error.put(tid, Parseequation.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parseequation.errormessage.get(tid)); return;};
+ ypos=Parseequation.thisypos.get(tid);
+ }
+
+ line=line.substring(14); line=line.trim();superblocktype.set(superblocknumber,"text");
+ j=line.indexOf("!end{lineblock}");
+ tblockline.clear();
+ } else if (line.length()>=15 && line.substring(0,15).equals("!begin{caption}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) {
+ if (superblockline.indexOfKey(superblocknumber)>=0){
+ tblockline=superblockline.get(superblocknumber);
+ tblockline.add(line.substring(0,15));}
+ else {
+ tblockline.add(line.substring(0,15));
+ }
+ totalline++;
+ superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1);
+ line=line.substring(15); line=line.trim();
+
+
+ }else if (line.length()>=13 && line.substring(0,13).equals("!end{caption}")&& !superblocktype.get(superblocknumber).equals("verbatim")) {
+ if (superblockline.indexOfKey(superblocknumber)>=0){
+ tblockline=superblockline.get(superblocknumber);
+ tblockline.add(line.substring(0,13));}
+ else {
+ tblockline.add(line.substring(0,13));
+ }
+ totalline++;
+ superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1);
+ line=line.substring(13); line=line.trim();
+
+ }else if (line.length()>=10 && line.substring(0,10).equals("!pagebreak")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))){
+
+ synchronized(this){SuperBlock.pagebreak.get(tid).add(SuperBlock.superblocklinenumber.get(tid)+1);}
+ line=line.substring(10); line=line.trim();
+
+ }else if (line.length()>=16 && line.substring(0,16).equals("!begin{verbatim}")) {
+ indent=0;
+ line=line.substring(16);
+ superblocknumber++;superblocktype.add("verbatim");superblocknumline.put(superblocknumber,0);
+ superblockstartline.put(superblocknumber, totalline);
+
+ } else if (line.length()>=14 && line.substring(0,14).equals("!end{verbatim}")){
+ superblockendline.put(superblocknumber,totalline);
+ if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){
+ superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1);
+ Parseverbatim verbatim = new Parseverbatim();
+ verbatim.parseverbatim(canvas, block, tid, containerwidth, containerheight, superblocknumber, superblock, superblockline,(float)Header.leftsidemargin , ypos,tf, attribute2);
+ error.put(tid, Parseverbatim.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parseverbatim.errormessage.get(tid)); return;};
+ ypos=Parseverbatim.thisypos.get(tid);
+ }
+ line=line.substring(14); line=line.trim();;superblocktype.set(superblocknumber,"text");
+ j=line.indexOf("!end{lineblock}");
+ tblockline.clear();
+ } else if (line.length()>=13 && line.substring(0,13).equals("!begin{title}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) {
+ synchronized(this){superblock.addtitle(tid);}
+ indent=0;
+ line=line.substring(13);
+ superblocknumber++;superblocktype.add("title");superblocknumline.put(superblocknumber,0);
+ superblockstartline.put(superblocknumber, totalline);
+
+ } else if (line.length()>=11 && line.substring(0,11).equals("!end{title}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))){
+ superblockendline.put(superblocknumber,totalline);
+ if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){
+ superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1);
+ }
+ Parsetitle title = new Parsetitle();
+ if (twocolumns){Integer containerwidth2=containerwidth*2-Header.rightsidemargin;
+ title.parsetitle(canvas, block, paragraphblock, tid, containerwidth2, containerheight, superblocknumber, superblock, superblockline, superblocknumline,superblockstartline,superblockendline, ypos, tf, attribute1);
+ } else {
+ title.parsetitle(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, superblockline, superblocknumline,superblockstartline,superblockendline, ypos, tf, attribute1);
+ }
+ error.put(tid, Parsetitle.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parsetitle.errormessage.get(tid)); return;};
+ synchronized(this){totalline=SuperBlock.superblocklinenumber.get(tid);}
+ superblockendline.put(superblocknumber, totalline);
+ superblocktype.set(superblocknumber,"text");
+ ypos=Parsetitle.thisypos.get(tid);
+ line=line.substring(11); line=line.trim();
+ j=line.indexOf("!end{lineblock}");
+ tblockline.clear();
+ } else if (line.length()>=16 && line.substring(0,16).equals("!begin{graphics}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) {
+ synchronized(this){superblock.addtable(tid);}
+ indent=0;
+ line=line.substring(16);
+ superblocknumber++;superblocktype.add("graphics");superblocknumline.put(superblocknumber,0);
+ superblockstartline.put(superblocknumber, totalline);
+
+ } else if (line.length()>=14 && line.substring(0,14).equals("!end{graphics}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))){
+ superblockendline.put(superblocknumber,totalline);
+ if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){
+ superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1);
+ }
+ Parsegraphics graphics = new Parsegraphics();
+ graphics.parsegraphics(canvas, block, paragraphblock, tid, containerwidth, containerheight, tablelinenumber, tablehlinecounter, superblocknumber, superblock, superblockline, superblocknumline, superblockstartline, superblockendline,tf, ypos, attribute2, attribute0);
+ error.put(tid, Parsegraphics.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parsegraphics.errormessage.get(tid)); return;};
+ superblockendline.put(superblocknumber, totalline);
+ superblocktype.set(superblocknumber,"text");
+ ypos=Parsegraphics.thisypos.get(tid);
+ synchronized(this){totalline=SuperBlock.superblocklinenumber.get(tid);}
+ line=line.substring(14); line=line.trim();
+ j=line.indexOf("!end{lineblock}");
+ tblockline.clear();
+ } else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("eqnarray")){
+ i=line.indexOf("!!");totalline++;
+ if (superblockline.indexOfKey(superblocknumber)>=0){
+ tblockline=superblockline.get(superblocknumber);
+ tblockline.add(" "+line.substring(0,i+2));}
+ else {
+ tblockline.add(" "+line.substring(0,i+2));
+ }
+ superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1);
+ line=line.substring(i+2); line=line.trim();
+
+ }else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("table")){
+ i=line.indexOf("!!");totalline++;
+
+ if (superblockline.indexOfKey(superblocknumber)>=0){
+ tblockline=superblockline.get(superblocknumber);
+ tblockline.add(" "+line.substring(0,i+2));}
+ else {
+ tblockline.add(" "+line.substring(0,i+2));
+ }
+ superblockline.put(superblocknumber, tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1);
+ line=line.substring(i+2); line=line.trim();
+ tablelinenumber++;
+ tablehlinecounter.add(-1);
+ boolean noline=false;
+ for (int k=0;noline==false && k < 1000;k++){
+ if (line.substring(0,6).equals("!hline")){tablehlinecounter.set(tablelinenumber, tablehlinecounter.get(tablelinenumber)+1); line=line.substring(6); line=line.trim();}
+ else {noline=true;};
+ }
+ }else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("graphicstable")){
+ i=line.indexOf("!!");totalline++;
+
+ if (superblockline.indexOfKey(superblocknumber)>=0){
+ tblockline=superblockline.get(superblocknumber);
+ tblockline.add(" "+line.substring(0,i+2));}
+ else {
+ tblockline.add(" "+line.substring(0,i+2));
+ }
+ superblockline.put(superblocknumber, tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1);
+ line=line.substring(i+2); line=line.trim();
+ tablelinenumber++;
+ tablehlinecounter.add(-1);
+ boolean noline=false;
+ for (int k=0;noline==false && k < 1000;k++){
+ if (line.substring(0,6).equals("!hline")){tablehlinecounter.set(tablelinenumber, tablehlinecounter.get(tablelinenumber)+1); line=line.substring(6); line=line.trim();}
+ else {noline=true;};
+ }
+ }else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("equation")){
+ i=line.indexOf("!!");totalline++;
+ if (superblockline.indexOfKey(superblocknumber)>=0){
+ tblockline=superblockline.get(superblocknumber);
+ tblockline.add(" "+line.substring(0,i+2));}
+ else {
+ tblockline.add(" "+line.substring(0,i+2));
+ }
+ superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1);
+ line=line.substring(i+2); line=line.trim();
+
+ }else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("graphics")){
+ i=line.indexOf("!!");totalline++;
+ if (superblockline.indexOfKey(superblocknumber)>=0){
+ tblockline=superblockline.get(superblocknumber);
+ tblockline.add(line.substring(0,i+2));}
+ else {
+ tblockline.add(line.substring(0,i+2));
+ }
+ superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1);
+ line=line.substring(i+2);
+ } else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("title")){
+ i=line.indexOf("!!");totalline++;
+ if (superblockline.indexOfKey(superblocknumber)>=0){
+ tblockline=superblockline.get(superblocknumber);
+ tblockline.add(line.substring(0,i+2));}
+ else {
+ tblockline.add(line.substring(0,i+2));
+ }
+ superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1);
+ line=line.substring(i+2);
+ } else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("verbatim")){
+ i=line.indexOf("!!");totalline++;
+ if (superblockline.indexOfKey(superblocknumber)>=0){
+ tblockline=superblockline.get(superblocknumber);
+ tblockline.add(line.substring(0,i+2));}
+ else {
+ tblockline.add(line.substring(0,i+2));
+ }
+ superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1);
+ line=line.substring(i+2);
+ } else if (line.length()>=3 && line.substring(0,3).equals("!mo")){
+
+ attribute2=attribute2.substring(0,4)+"003"+attribute2.substring(7);
+ line=line.substring(3); line=line.trim();
+ j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=3 && line.substring(0,3).equals("!bf")){
+
+ attribute2=attribute2.substring(0,4)+"002"+attribute2.substring(7);
+ line=line.substring(3); line=line.trim();
+ j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=3 && line.substring(0,3).equals("!it")){
+
+ attribute2=attribute2.substring(0,4)+"001"+attribute2.substring(7);
+ line=line.substring(3); line=line.trim();
+ j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=3 && line.substring(0,3).equals("!ss")){
+
+ attribute2=attribute2.substring(0,4)+"000"+attribute2.substring(7);
+ line=line.substring(3); line=line.trim();
+ j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=5 && line.substring(0,5).equals("!Huge")){
+ fontsize=(int)(Header.fontsize*Header.sizefactor.get("Huge"));if (fontsize>Header.maxfontsize){fontsize=Header.maxfontsize;};
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute0 = "000"+sfontsize+attribute0.substring(4);
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==2){
+ attribute0 = "00"+sfontsize+attribute0.substring(4);
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==3){
+ attribute0 = "0"+sfontsize+attribute0.substring(4);
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+attribute2.substring(4);
+ }
+ line=line.substring(5); line=line.trim();j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=5 && line.substring(0,5).equals("!huge")){
+
+ fontsize=(int)(Header.fontsize*Header.sizefactor.get("huge"));if (fontsize>Header.maxfontsize){fontsize=Header.maxfontsize;};
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute0 = "000"+sfontsize+attribute0.substring(4);
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==2){
+ attribute0 = "00"+sfontsize+attribute0.substring(4);
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==3){
+ attribute0 = "0"+sfontsize+attribute0.substring(4);
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+attribute2.substring(4);
+ }
+ line=line.substring(5); line=line.trim();j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=6 && line.substring(0,6).equals("!Large")){
+
+ fontsize=(int)(Header.fontsize*Header.sizefactor.get("Large"));if (fontsize>Header.maxfontsize){fontsize=Header.maxfontsize;};
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute0 = "000"+sfontsize+attribute0.substring(4);
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==2){
+ attribute0 = "00"+sfontsize+attribute0.substring(4);
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==3){
+ attribute0 = "0"+sfontsize+attribute0.substring(4);
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+attribute2.substring(4);
+ }
+ line=line.substring(6); line=line.trim();j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=6 && line.substring(0,6).equals("!large")){
+
+ fontsize=(int)(Header.fontsize*Header.sizefactor.get("large"));if (fontsize>Header.maxfontsize){fontsize=Header.maxfontsize;};
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute0 = "000"+sfontsize+attribute0.substring(4);
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==2){
+ attribute0 = "00"+sfontsize+attribute0.substring(4);
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==3){
+ attribute0 = "0"+sfontsize+attribute0.substring(4);
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+attribute2.substring(4);
+ }
+ line=line.substring(6); line=line.trim();j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=6 && line.substring(0,6).equals("!small")){
+
+ fontsize=(int)(Header.fontsize*Header.sizefactor.get("small"));if (fontsize<Header.minfontsize){fontsize=Header.minfontsize;};
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute0 = "000"+sfontsize+attribute0.substring(4);
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==2){
+ attribute0 = "00"+sfontsize+attribute0.substring(4);
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==3){
+ attribute0 = "0"+sfontsize+attribute0.substring(4);
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+attribute2.substring(4);
+ }
+ line=line.substring(6); line=line.trim();j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=11 && line.substring(0,11).equals("!scriptsize")){
+
+ fontsize=(int)(Header.fontsize*Header.sizefactor.get("scriptsize"));if (fontsize<Header.minfontsize){fontsize=Header.minfontsize;};
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute0 = "000"+sfontsize+attribute0.substring(4);
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==2){
+ attribute0 = "00"+sfontsize+attribute0.substring(4);
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==3){
+ attribute0 = "0"+sfontsize+attribute0.substring(4);
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+attribute2.substring(4);
+ }
+ line=line.substring(11); line=line.trim();j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=5 && line.substring(0,5).equals("!tiny")){
+
+ fontsize=(int)(Header.fontsize*Header.sizefactor.get("tiny")); if (fontsize<Header.minfontsize){fontsize=Header.minfontsize;};
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute0 = "000"+sfontsize+attribute0.substring(4);
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==2){
+ attribute0 = "00"+sfontsize+attribute0.substring(4);
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==3){
+ attribute0 = "0"+sfontsize+attribute0.substring(4);
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+attribute2.substring(4);
+ }
+ line=line.substring(5); line=line.trim();j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=11 && line.substring(0,11).equals("!normalsize")){
+
+ sfontsize=Integer.toString(Header.fontsize);
+ if (sfontsize.length()==1){
+ attribute0 = "000"+sfontsize+attribute0.substring(4);
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==2){
+ attribute0 = "00"+sfontsize+attribute0.substring(4);
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+attribute2.substring(4);
+ } else if (sfontsize.length()==3){
+ attribute0 = "0"+sfontsize+attribute0.substring(4);
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+attribute2.substring(4);
+ }
+ line=line.substring(11); line=line.trim();j=line.indexOf("!end{lineblock}");
+ } else if (line.length()>=7 && line.substring(0,7).equals("!vspace")){
+
+ int ij=line.indexOf("}",7);
+ float vspace=Integer.parseInt(line.substring(8,ij));
+ ypos=ypos+vspace;
+ line=line.substring(ij+1); line=line.trim();
+
+ } else if (line.length()>=14 && line.substring(0,14).equals("!begin{center}")){
+ synchronized(this){centerstartline=SuperBlock.superblocklinenumber.get(tid);}
+ dohyphenation=false;
+ line=line.substring(14); line=line.trim();j=line.indexOf("!end{lineblock}");
+ indent=0;
+ } else if (line.length()>=12 && line.substring(0,12).equals("!end{center}")){
+ synchronized(this){
+ viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin;
+ centerendline=SuperBlock.superblocklinenumber.get(tid);
+
+ if (centerendline > centerstartline){centerstartline=centerstartline+1;};
+ for (i=centerstartline;i<=centerendline;i++){
+ float adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(i))/2;
+ for (ii=0;ii<=SuperBlock.blockxpos.get(i+tid2).size()-1;ii++){
+ SuperBlock.blockxpos.get(i+tid2).set(ii,SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx);
+ }
+ }
+ dohyphenation=true;
+ line=line.substring(12); line=line.trim();j=line.indexOf("!end{lineblock}");
+ indent=Header.indent;
+ }
+ } else if (line.length()>=17 && line.substring(0,17).equals("!begin{alignleft}")){
+ indent=0;
+ dohyphenation=false;
+ line=line.substring(17); line=line.trim();
+
+ } else if (line.length()>=15 && line.substring(0,15).equals("!end{alignleft}")){
+ dohyphenation=true;
+ line=line.substring(15); line=line.trim();j=line.indexOf("!end{lineblock}");
+
+ } else if (line.length()>=18 && line.substring(0,18).equals("!begin{alignright}")){
+ indent=0;
+ synchronized(this){alignrightstartline=SuperBlock.superblocklinenumber.get(tid);}
+ dohyphenation=false;
+ line=line.substring(18); line=line.trim();
+ indent=0;
+ } else if (line.length()>=16 && line.substring(0,16).equals("!end{alignright}")){
+ synchronized(this){
+ viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin;
+ alignrightendline=SuperBlock.superblocklinenumber.get(tid);
+
+ if (alignrightendline > alignrightstartline){alignrightstartline=alignrightstartline+1;};
+ for (i=alignrightstartline;i<=alignrightendline;i++){
+ float adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(i));
+ for (ii=0;ii<=SuperBlock.blockxpos.get(i+tid2).size()-1;ii++){
+ SuperBlock.blockxpos.get(i+tid2).set(ii,SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx);
+ }
+ }
+ dohyphenation=true;
+ line=line.substring(16); line=line.trim();j=line.indexOf("!end{lineblock}");
+ indent=Header.indent;
+ }
+ } else {
+ i=line.indexOf("!!");
+
+ tblockline.add(line.substring(0,i));
+ totalline++;
+ superblocknumber++;superblockline.put(superblocknumber,tblockline);superblocktype.add("text");superblocknumline.put(superblocknumber,0);
+ superblockstartline.put(superblocknumber, totalline);
+ Parsetext text = new Parsetext();
+ text.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, tblockline.get(0), (float)Header.leftsidemargin , ypos, tf, attribute2, attribute1, dohyphenation, indent);
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parsetext.errormessage.get(tid)); return;};
+ synchronized(this){totalline=SuperBlock.superblocklinenumber.get(tid);}
+ superblockendline.put(superblocknumber, totalline);
+ ypos=Parsetext.thisypos.get(tid);
+
+ tblockline.clear();
+ line=line.substring(i+2); line=line.trim();
+ }
+ j=line.indexOf("!end{lineblock}");
+ if (j==0 && !superblocktype.get(superblocknumber).equals("text")){error.put(tid,true);errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+"The !end{"+superblocktype.get(superblocknumber)+"} "+"command missing, parse failed!!");return;}
+ }
+ }
+
+ synchronized(this){SuperBlock.ypos.put(tid, ypos);}
+ return;
+
+ }}
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseeqnarray.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseeqnarray.java
new file mode 100644
index 0000000000..05d44a63ed
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseeqnarray.java
@@ -0,0 +1,139 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.SparseBooleanArray;
+
+public class Parseeqnarray {
+
+ public static volatile SparseArray<Float> thisypos = new SparseArray<Float>();
+ public static volatile SparseBooleanArray error = new SparseBooleanArray();
+ public static volatile SparseArray<String> errormessage = new SparseArray<String>();
+
+ public void parseeqnarray(Canvas canvas, Block block, Integer tid, Integer containerwidth, Integer containerheight, int superblocknumber, SuperBlock superblock ,SparseArray<ArrayList<String>> superblockline,SparseIntArray superblocknumline,SparseIntArray superblockstartline, SparseIntArray superblockendline, ArrayList<Typeface> tf , String columnspec, Float ypos, String attribute) {
+
+ int i,j,ii;
+ int numcolumn = columnspec.length();
+ int tid2=tid*1000;
+
+ float linegap = Header.linegap;
+ float columngap=Header.columngap;
+ float totalwidth=0;
+ float adjusty=ypos;
+ float adjustx=0;
+ float adjustx2=0;
+ float shiftx=0;
+
+ String blockline = new String();
+ String rawblockline = new String();
+ String thisattribute=attribute;
+
+ ArrayList<Float> columnwidth = new ArrayList<Float>();
+ ArrayList<Float> lineheight = new ArrayList<Float>();
+ ArrayList<Float> linedepth = new ArrayList<Float>();
+
+ ArrayList<Float> blockwidth = new ArrayList<Float>();
+ ArrayList<Float> blockheight = new ArrayList<Float>();
+ ArrayList<Float> blockdepth = new ArrayList<Float>();
+
+ columnwidth.clear();lineheight.clear();linedepth.clear();
+ error.put(tid,false);
+ errormessage.put(tid,"");
+
+ Paint textpaint = new Paint();
+ Rect textbounds = new Rect();
+ textpaint.setTextSize(Integer.parseInt(attribute.substring(1,4)));
+ textpaint.setTypeface(tf.get(Integer.parseInt(attribute.substring(4,7))));
+ textpaint.getTextBounds("Aj",0,"Aj".length(),textbounds);
+ float spacewidth=textpaint.measureText(" ");
+ float spaceheight=textbounds.height();
+ float spacedepth=textbounds.bottom;
+
+ for (i=0;i<=superblockendline.get(superblocknumber)-superblockstartline.get(superblocknumber);i++){
+ lineheight.add(0.0f);
+ linedepth.add(0.0f);
+ synchronized(this){superblock.create(tid);}
+
+ String currentsuperblockline=superblockline.get(superblocknumber).get(i);
+
+ for (ii=0;ii<=numcolumn-1;ii++){ // First parse
+ if (i==0) columnwidth.add(0.0f);
+ if (ii<=numcolumn-2){
+ j=currentsuperblockline.indexOf("&");
+ if (j<0){error.put(tid, true);errormessage.put(tid, "Format error in eqnarray, parse failed !!");return;};
+ rawblockline=currentsuperblockline.substring(0,j); currentsuperblockline=currentsuperblockline.substring(j+1);
+
+ if (rawblockline.equals("")){rawblockline="!dno ";};
+ } else {
+ rawblockline=currentsuperblockline;
+ if (rawblockline.equals("")){rawblockline="!dno ";};
+ }
+
+ Parsepreparation prepareblockline = new Parsepreparation();
+ blockline=prepareblockline.parsepreparation(rawblockline,Symbol.symboltype,Symbol.matchsymbol);
+
+ Parseblock parseblockline = new Parseblock();
+ parseblockline.parseblock(tid,canvas,block,blockline,tf,thisattribute);
+ if (Block.error.get(tid)==true){error.put(tid, true); errormessage.put(tid,Block.errormessage.get(tid)); return;};
+ blockwidth.add(Math.max(Block.blockwidth2.get(tid),spacewidth));
+ blockheight.add(Math.max(Block.blockheight2.get(tid),spaceheight));
+ blockdepth.add(Math.max(Block.blockdepth2.get(tid),spacedepth));
+
+ synchronized(this){superblock.add(tid,Block.subblock2, Block.subblockxpos2, Block.subblockypos2, Block.subblockattribute2, blockwidth.get(blockwidth.size()-1), blockheight.get(blockheight.size()-1), blockdepth.get(blockdepth.size()-1),'e',ii);}
+ columnwidth.set(ii,Math.max(columnwidth.get(ii), blockwidth.get(blockwidth.size()-1)));
+ }
+ }
+
+ i=superblockstartline.get(superblocknumber);
+ int index=tid2+i;
+ adjusty=adjusty+SuperBlock.superblocklineheight.get(tid).get(i)-SuperBlock.superblocklinedepth.get(tid).get(i);
+ for (ii=0;ii<=SuperBlock.blockatom.get(index).size()-1;ii++){
+ SuperBlock.blockypos.get(index).set(ii, SuperBlock.blockypos.get(index).get(ii)+adjusty);
+ }
+ thisypos.put(tid, adjusty+SuperBlock.superblocklinedepth.get(tid).get(i)+linegap);
+ for (i=superblockstartline.get(superblocknumber)+1;i<=superblockstartline.get(superblocknumber)+superblocknumline.get(superblocknumber)-1;i++){
+ index=tid2+i;
+ adjusty=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i-1)+linegap+SuperBlock.superblocklineheight.get(tid).get(i)-SuperBlock.superblocklinedepth.get(tid).get(i);
+ for (ii=0;ii<=SuperBlock.blockatom.get(index).size()-1;ii++){
+ SuperBlock.blockypos.get(index).set(ii, SuperBlock.blockypos.get(index).get(ii)+adjusty);
+ }
+ thisypos.put(tid, adjusty+SuperBlock.superblocklinedepth.get(tid).get(i)+linegap);
+ }
+
+ for (ii=0;ii<=numcolumn-1;ii++){
+ totalwidth=totalwidth+columnwidth.get(ii)+columngap;
+ }
+ int viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin;
+
+ if (viewportwidth>totalwidth){shiftx=(viewportwidth-totalwidth)/2;}
+ else {shiftx=0;};
+
+ for (i=superblockstartline.get(superblocknumber);i<=superblockendline.get(superblocknumber);i++){
+ adjustx=shiftx+Header.leftsidemargin;
+ int columnnum=0;
+ index=tid2+i;
+ for (ii=0;ii<=SuperBlock.blockatom.get(index).size()-1;ii++){
+ if (columnnum != SuperBlock.blockcolumnnum.get(index).get(ii)){
+ columnnum=SuperBlock.blockcolumnnum.get(index).get(ii);
+ adjustx=adjustx+columngap+columnwidth.get(columnnum-1);
+ };
+
+ if (columnspec.charAt(columnnum)=='l'){SuperBlock.blockxpos.get(index).set(ii, SuperBlock.blockxpos.get(index).get(ii)+adjustx);}
+ else if (columnspec.charAt(columnnum)=='c'){adjustx2=(columnwidth.get(columnnum)-blockwidth.get((i-superblockstartline.get(superblocknumber))*numcolumn+columnnum))/2; SuperBlock.blockxpos.get(index).set(ii, SuperBlock.blockxpos.get(index).get(ii)+adjustx+adjustx2);}
+ else if (columnspec.charAt(columnnum)=='r'){adjustx2=columnwidth.get(columnnum)-blockwidth.get((i-superblockstartline.get(superblocknumber))*numcolumn+columnnum);SuperBlock.blockxpos.get(index).set(ii, SuperBlock.blockxpos.get(index).get(ii)+adjustx+adjustx2);};}
+ }
+
+}}
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseequation.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseequation.java
new file mode 100644
index 0000000000..b81daea42d
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseequation.java
@@ -0,0 +1,89 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Typeface;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.SparseBooleanArray;
+
+public class Parseequation {
+
+ public static volatile SparseArray<Float> thisypos = new SparseArray<Float>();
+ public static volatile SparseBooleanArray error = new SparseBooleanArray();
+ public static volatile SparseArray<String> errormessage = new SparseArray<String>();
+
+ public void parseequation(Canvas canvas, Block block, Integer tid, Integer containerwidth, Integer containerheight, Integer superblocknumber, SuperBlock superblock ,SparseArray<ArrayList<String>> superblockline,SparseIntArray superblocknumline,SparseIntArray superblockstartline, SparseIntArray superblockendline, ArrayList<Typeface> tf ,String columnspec, Float ypos, String attribute) {
+
+ int ii;
+
+ float linegap = Header.linegap;
+ float adjusty=ypos;
+ float shiftx=0;
+ float columnwidth=0;
+
+ String blockline = new String();
+ String rawblockline = new String();
+ String thisattribute=attribute;
+
+ ArrayList<Float> lineheight = new ArrayList<Float>();
+ ArrayList<Float> linedepth = new ArrayList<Float>();
+
+ error.put(tid,false);
+ errormessage.put(tid,"");
+
+ float blockwidth = 0.0f;
+ float blockheight = 0.0f;
+ float blockdepth = 0.0f;
+
+ lineheight.clear();linedepth.clear();
+
+ lineheight.add(0.0f);
+ linedepth.add(0.0f);
+ synchronized(this){superblock.create(tid);}
+
+ String currentsuperblockline=superblockline.get(superblocknumber).get(0);
+
+ rawblockline=currentsuperblockline;
+ if (rawblockline.equals("")){rawblockline=" ";};
+
+ Parsepreparation prepareblockline = new Parsepreparation();
+ blockline=prepareblockline.parsepreparation(rawblockline,Symbol.symboltype,Symbol.matchsymbol);
+ Parseblock parseblockline = new Parseblock();
+ parseblockline.parseblock(tid,canvas,block, blockline,tf,thisattribute);
+
+ if (Block.error.get(tid)==true){error.put(tid, true); errormessage.put(tid, Block.errormessage.get(tid)); }
+ columnwidth=Block.blockwidth2.get(tid);
+ blockwidth=Block.blockwidth2.get(tid);
+ blockheight=Block.blockheight2.get(tid)+linegap;
+ blockdepth=Block.blockdepth2.get(tid)+linegap;
+
+
+ adjusty=adjusty+blockheight-blockdepth;
+ thisypos.put(tid, adjusty+blockdepth+linegap);
+ for (ii=0;ii<=Block.subblock2.get(tid).size()-1;ii++){
+ Block.subblockypos2.get(tid).set(ii, Block.subblockypos2.get(tid).get(ii)+adjusty);
+ }
+
+ int viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin;
+
+ if (viewportwidth>columnwidth){shiftx=(viewportwidth-columnwidth)/2;}
+ else {shiftx=0;};
+
+ for (ii=0;ii<=Block.subblock2.get(tid).size()-1;ii++){
+ Block.subblockxpos2.get(tid).set(ii, Block.subblockxpos2.get(tid).get(ii)+shiftx+Header.leftsidemargin);
+ }
+ synchronized(this){
+ superblock.add(tid,Block.subblock2,Block.subblockxpos2, Block.subblockypos2, Block.subblockattribute2, blockwidth, blockheight, blockdepth,'e',0);
+ }
+}}
+
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsegraphics.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsegraphics.java
new file mode 100644
index 0000000000..0fb5b3108e
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsegraphics.java
@@ -0,0 +1,162 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.SparseBooleanArray;
+
+public class Parsegraphics {
+
+ public static volatile SparseArray<Float> thisypos = new SparseArray<Float>();
+ public static volatile SparseBooleanArray error = new SparseBooleanArray();
+ public static volatile SparseArray<String> errormessage = new SparseArray<String>();
+
+ public void parsegraphics(Canvas canvas, Block block, ParagraphBlock paragraphblock, Integer tid, Integer containerwidth, Integer containerheight, Integer tablelinenumber, ArrayList<Integer> tablehlinecounter, Integer superblocknumber, SuperBlock superblock ,SparseArray<ArrayList<String>> superblockline,SparseIntArray superblocknumline, SparseIntArray superblockstartline, SparseIntArray superblockendline, ArrayList<Typeface> tf , Float ypos, String attribute2, String attribute) {
+
+ int i,j;
+ int tid2=tid*1000;
+ int captionnumline=-1;
+ int viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin;
+
+ float adjusty=ypos;
+ float adjustx=0.0f;
+ float thisypos2=0;
+
+ String currentline="";
+ String bitmapname="";
+
+
+ ArrayList<String> captionline = new ArrayList<String>();
+
+ error.put(tid,false);
+ errormessage.put(tid,"");
+
+ Paint textpaint = new Paint();
+ Rect textbounds = new Rect();
+ textpaint.setTextSize(Integer.parseInt(attribute.substring(1,4)));
+ textpaint.setTypeface(tf.get(Integer.parseInt(attribute.substring(4,7))));
+ textpaint.getTextBounds("Aj",0,"Aj".length(),textbounds);
+
+ Boolean captionattop=false;
+ int tablefirstline=superblockstartline.get(superblocknumber);
+ int lastline=superblockendline.get(superblocknumber)-superblockstartline.get(superblocknumber);
+ String sfontsize;
+
+ for (i=0;i<=lastline;i++){
+
+ currentline=superblockline.get(superblocknumber).get(i);
+ String line=currentline.trim();
+
+ if (line.length() >=15 && line.substring(0,15).equals("!begin{caption}")){
+ if (i==0){captionattop=true;} else {captionattop=false;};
+
+ Boolean caption=true;
+ i++;
+ currentline=superblockline.get(superblocknumber).get(i);
+ line=currentline.trim();
+ if (line.length() >=13 && line.substring(0,13).equals("!end{caption}")){caption=false;i++;captionnumline++;}
+
+ while(caption){
+ j=line.indexOf("!!");
+ line=line.substring(0,j);
+
+ captionline.add(line);
+ i++;captionnumline++;
+ currentline=superblockline.get(superblocknumber).get(i);
+ line=currentline.trim();
+ if (line.length() >=13 && line.substring(0,13).equals("!end{caption}")){caption=false;i++;}
+ }
+ tablelinenumber=tablelinenumber-captionnumline-1;
+ if(captionattop){tablefirstline=i+tablefirstline;
+ currentline=superblockline.get(superblocknumber).get(i);}
+ } }
+
+// Add top caption
+ SuperBlock.tablestartline.put(tid2+SuperBlock.tablenumber.get(tid), SuperBlock.superblocklinenumber.get(tid)+1);
+ if (captionattop){
+ Parsetext caption = new Parsetext();
+ for (i=0;i<=captionnumline;i++){
+ sfontsize=Integer.toString(Header.fontsize);
+ if (sfontsize.length()==1){
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ caption.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, captionline.get(i), Header.leftsidemargin , adjusty, tf, attribute2, attribute, false, 0.0f);
+ thisypos2=Parsetext.thisypos.get(tid);
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(SuperBlock.superblocklinewidth.get(tid).size()-1))/2;
+ for (int ij=0;ij<=SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).size()-1;ij++){
+ SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(ij,SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).get(ij)+adjustx);
+ }
+ adjusty=Parsetext.thisypos.get(tid);
+ thisypos.put(tid,adjusty);
+ }}
+
+ if (!captionattop){
+ currentline=superblockline.get(superblocknumber).get(0);
+ } else {
+ currentline=superblockline.get(superblocknumber).get(i+captionnumline+1);
+ }
+
+ currentline=currentline.trim();
+ j=currentline.indexOf("!!");
+ bitmapname=currentline.substring(0,j);
+ if (!DocumentBitmap.usedbitmap.contains(bitmapname)){
+ DocumentBitmap.usedbitmap.add(bitmapname);}
+ ArrayList<String> tsubblock = new ArrayList<String>();
+ ArrayList<Float> tsubblockxpos = new ArrayList<Float>();
+ ArrayList<Float> tsubblockypos = new ArrayList<Float>();
+ ArrayList<String> tsubblockattribute = new ArrayList<String>();
+
+ tsubblock.add(bitmapname);
+ tsubblockxpos.add((containerwidth-DocumentBitmap.bitmapwidth.get(bitmapname))/2);
+ tsubblockypos.add(adjusty);
+ tsubblockattribute.add("g");
+
+ synchronized(this){
+ superblock.create(tid);
+ superblock.add(tid,tsubblock,tsubblockxpos,tsubblockypos,tsubblockattribute,DocumentBitmap.bitmapwidth.get(bitmapname) , DocumentBitmap.bitmapheight.get(bitmapname), 0.0f,'t',0);
+ }
+ thisypos2 = adjusty+DocumentBitmap.bitmapheight.get(bitmapname)+Header.linegap;
+ thisypos.put(tid,thisypos2);
+
+ if (!captionattop){
+ Parsetext caption = new Parsetext();
+ for (i=0;i<=captionnumline;i++){
+ sfontsize=Integer.toString(Header.fontsize);
+ if (sfontsize.length()==1){
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ caption.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, captionline.get(i), Header.leftsidemargin , thisypos2, tf, attribute2, attribute, false, 0.0f);
+ thisypos2=Parsetext.thisypos.get(tid);
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(SuperBlock.superblocklinewidth.get(tid).size()-1))/2;
+ for (int ij=0;ij<=SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).size()-1;ij++){
+ SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(ij,SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).get(ij)+adjustx);
+ }
+ thisypos.put(tid,Parsetext.thisypos.get(tid));
+ }}
+ SuperBlock.tableendline.put(tid2+SuperBlock.tablenumber.get(tid), SuperBlock.superblocklinenumber.get(tid));
+ SuperBlock.tableheight.put(tid2+SuperBlock.tablenumber.get(tid),thisypos.get(tid)-ypos);
+}}
+
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsegraphicstable.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsegraphicstable.java
new file mode 100644
index 0000000000..881a3ee285
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsegraphicstable.java
@@ -0,0 +1,505 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.SparseBooleanArray;
+
+public class Parsegraphicstable {
+
+ public static volatile SparseArray<Float> thisypos = new SparseArray<Float>();
+ public static volatile SparseBooleanArray error = new SparseBooleanArray();
+ public static volatile SparseArray<String> errormessage = new SparseArray<String>();
+
+ public void parsegraphicstable(Canvas canvas, Block block, ParagraphBlock paragraphblock, Integer tid, Integer containerwidth, Integer containerheight, Integer tablelinenumber, ArrayList<Integer> tablehlinecounter, Integer superblocknumber, SuperBlock superblock ,SparseArray<ArrayList<String>> superblockline,SparseIntArray superblocknumline,SparseIntArray superblockstartline, SparseIntArray superblockendline, ArrayList<Typeface> tf , String columnspec, Float ypos, String attribute2, String attribute) {
+
+ int i,j,ii;
+ int k=0;
+ int tid2=tid*1000;
+ int captionnumline=-1;
+ int viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin;
+ int adjustline=0;
+
+ float linegap = Header.linegap;
+ float columngap=Header.columngap;
+ float totalwidth=0.0f;
+ float adjusty=ypos;
+ float adjustx=0.0f;
+ float adjustx2=0.0f;
+ float shiftx=0.0f;
+ float thisypos2=0;
+
+ String rawblockline = new String();
+ String thisattribute=attribute;
+ String columnspec2=new String();
+ String currentline="";
+ String bitmapname="";
+
+ ArrayList<Float> columnwidth = new ArrayList<Float>();
+ ArrayList<Float> lineheight = new ArrayList<Float>();
+ ArrayList<Float> linedepth = new ArrayList<Float>();
+
+ ArrayList<Float> blockwidth = new ArrayList<Float>();
+ ArrayList<Float> blockheight = new ArrayList<Float>();
+ ArrayList<Float> blockdepth = new ArrayList<Float>();
+ ArrayList<Integer> tablevlinecounter = new ArrayList<Integer>();
+ ArrayList<String> captionline = new ArrayList<String>();
+
+ ArrayList<String> tatom = new ArrayList<String>();
+ ArrayList<Float> txpos = new ArrayList<Float>();
+ ArrayList<Float> typos = new ArrayList<Float>();
+ ArrayList<String> tattribute = new ArrayList<String>();
+
+ error.put(tid,false);
+ errormessage.put(tid,"");
+
+ columnspec2="";
+ int tablehlinenumber=-1;
+ for (i=0;i<=tablelinenumber;i++){
+ tablehlinenumber=tablehlinenumber+(tablehlinecounter.get(i)+1);
+ }
+ tablevlinecounter.add(-1);
+ for (i=0;i<=columnspec.length()-1;i++){
+ if (columnspec.charAt(i)=='|') {tablevlinecounter.set(tablevlinecounter.size()-1,tablevlinecounter.get(tablevlinecounter.size()-1)+1);}
+ else if (columnspec.charAt(i)=='l' || columnspec.charAt(i)=='r' || columnspec.charAt(i)=='c'){columnspec2=columnspec2+columnspec.charAt(i); tablevlinecounter.add(-1);}
+ }
+ int numcolumn = columnspec2.length();
+
+
+ columnwidth.clear();lineheight.clear();linedepth.clear();
+ Paint textpaint = new Paint();
+ Rect textbounds = new Rect();
+ textpaint.setTextSize(Integer.parseInt(attribute.substring(1,4)));
+ textpaint.setTypeface(tf.get(Integer.parseInt(attribute.substring(4,7))));
+ textpaint.getTextBounds("Aj",0,"Aj".length(),textbounds);
+ float spacewidth=textpaint.measureText(" ");
+ float spaceheight=textbounds.height();
+ Boolean captionattop=false;
+ int tablefirstline=superblockstartline.get(superblocknumber);
+ int tablelastline=superblockendline.get(superblocknumber);
+ int lastline=superblockendline.get(superblocknumber)-superblockstartline.get(superblocknumber);
+ String sfontsize;
+
+ for (i=0;i<=lastline;i++){
+
+ currentline=superblockline.get(superblocknumber).get(i);
+ String line=currentline.trim();
+
+ if (line.length() >=15 && line.substring(0,15).equals("!begin{caption}")){
+ if (i==0){captionattop=true;adjustline=2;} else {captionattop=false;adjustline=0;};
+
+ Boolean caption=true;
+ i++;
+ currentline=superblockline.get(superblocknumber).get(i);
+ line=currentline.trim();
+ if (line.length() >=13 && line.substring(0,13).equals("!end{caption}")){caption=false;i++;captionnumline++;}
+
+ while(caption){
+ j=line.indexOf("!!");
+ line=line.substring(0,j);
+
+ captionline.add(line);
+ i++;captionnumline++;
+ currentline=superblockline.get(superblocknumber).get(i);
+ line=currentline.trim();
+ if (line.length() >=13 && line.substring(0,13).equals("!end{caption}")){caption=false;i++;}
+ }
+ tablelinenumber=tablelinenumber-captionnumline-1;
+ if(captionattop){tablefirstline=i+tablefirstline;
+ currentline=superblockline.get(superblocknumber).get(i);}
+ else {tablelastline=tablefirstline+tablelinenumber-1;}
+ } }
+
+// Add top caption
+// SuperBlock.graphicsstartline.put(tid2+SuperBlock.graphicsnumber.get(tid), SuperBlock.superblocklinenumber.get(tid)+1);
+ SuperBlock.tablestartline.put(tid2+SuperBlock.tablenumber.get(tid), SuperBlock.superblocklinenumber.get(tid)+1);
+ if (captionattop){
+ Parsetext table = new Parsetext();
+ for (i=0;i<=captionnumline;i++){
+ sfontsize=Integer.toString(Header.fontsize);
+ if (sfontsize.length()==1){
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ table.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, captionline.get(i), Header.leftsidemargin , adjusty, tf, attribute2, attribute, false, 0.0f);
+ thisypos2=Parsetext.thisypos.get(tid);
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(SuperBlock.superblocklinewidth.get(tid).size()-1))/2;
+ for (int ij=0;ij<=SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).size()-1;ij++){
+ SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(ij,SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).get(ij)+adjustx);
+ }
+ adjusty=Parsetext.thisypos.get(tid);
+ thisypos.put(tid,adjusty);
+ }}
+ Boolean firstline=true;
+ for (i=tablefirstline;i<=tablelastline;i++){
+
+ if (!captionattop){
+ currentline=superblockline.get(superblocknumber).get(i-tablefirstline);
+ j=currentline.indexOf("!!");
+ if (j!=-1){currentline=currentline.substring(0,j);}
+ } else {
+ currentline=superblockline.get(superblocknumber).get(i-tablefirstline+captionnumline+3);
+ j=currentline.indexOf("!!");
+ if (j!=-1){currentline=currentline.substring(0,j);}
+ }
+
+ lineheight.add(0.0f);
+ linedepth.add(0.0f);
+ synchronized(this){superblock.create(tid); }
+ for (ii=0;ii<=numcolumn-1;ii++){ // First parse
+ if (firstline) columnwidth.add(0.0f);
+ if (ii<=numcolumn-2){
+ j=currentline.indexOf("&");
+
+ if (j<0){error.put(tid, true);errormessage.put(tid, "Format error in table, parse failed !!");return;};
+ rawblockline=currentline.substring(0,j); currentline=currentline.substring(j+1);
+
+ if (rawblockline.equals("")){rawblockline="!dno ";};
+ } else {
+ rawblockline=currentline;
+ if (rawblockline.equals("")){rawblockline="!dno ";};
+ }
+
+ rawblockline=rawblockline.trim();
+ bitmapname=rawblockline;
+
+ ArrayList<String> tsubblock = new ArrayList<String>();
+ ArrayList<Float> tsubblockxpos = new ArrayList<Float>();
+ ArrayList<Float> tsubblockypos = new ArrayList<Float>();
+ ArrayList<String> tsubblockattribute = new ArrayList<String>();
+
+
+ if (!bitmapname.equals("!dno")){
+ if (!DocumentBitmap.usedbitmap.contains(bitmapname)){
+ DocumentBitmap.usedbitmap.add(bitmapname);}
+
+ tsubblock.add(bitmapname);
+ tsubblockxpos.add(0.0f);
+ tsubblockypos.add(-DocumentBitmap.bitmapheight.get(bitmapname));
+ tsubblockattribute.add("g");
+ float width=Math.max(DocumentBitmap.bitmapwidth.get(bitmapname), spacewidth);
+ float height=Math.max(DocumentBitmap.bitmapheight.get(bitmapname), spaceheight);
+ blockwidth.add(width);
+ blockheight.add(height);
+ blockdepth.add(0.0f);
+ columnwidth.set(ii,Math.max(columnwidth.get(ii), width));
+ superblock.add(tid,tsubblock,tsubblockxpos,tsubblockypos,tsubblockattribute,width , height, 0.0f,'t',ii);
+ } else {
+ tsubblock.add(bitmapname);
+ tsubblockxpos.add(0.0f);
+ tsubblockypos.add(0.0f);
+ tsubblockattribute.add(Header.defaultattribute);
+ columnwidth.set(ii,Math.max(columnwidth.get(ii), spacewidth));
+ synchronized(this){
+ superblock.add(tid,tsubblock,tsubblockxpos,tsubblockypos,tsubblockattribute,spacewidth ,spaceheight, 0.0f,'t',0);}
+ }
+ }
+ }
+ firstline=false;
+
+// add vertical lines
+ int totalvline=0;
+ for (ii=0;ii<=numcolumn;ii++){
+ tatom = new ArrayList<String>();
+ txpos = new ArrayList<Float>();
+ typos = new ArrayList<Float>();
+ tattribute = new ArrayList<String>();
+ for (k=0;k<=tablevlinecounter.get(ii);k++){
+ tatom.add("!vlin ");
+ txpos.add(0.0f);
+ typos.add(0.0f);
+ tattribute.add(attribute);
+ totalvline++;
+ }
+ synchronized(this){
+ superblock.add(tid,tatom,txpos, typos, tattribute,0.0f,0.0f,0.0f,'t',numcolumn-1);}
+ tatom.clear();
+ txpos.clear();
+ typos.clear();
+ tattribute.clear();
+ }
+// add horizontal lines
+ int totalhline=0;
+ if (!captionattop){
+ for (ii=0; ii<=tablelastline-tablefirstline+1;ii++){
+ tatom = new ArrayList<String>();
+ txpos = new ArrayList<Float>();
+ typos = new ArrayList<Float>();
+ tattribute = new ArrayList<String>();
+ for (k=0;k<=tablehlinecounter.get(ii);k++){
+ totalhline++;
+ tatom.add("!hlin ");
+ txpos.add(0.0f);
+ typos.add(0.0f);
+ tattribute.add(attribute);
+ }
+ synchronized(this){
+ superblock.add(tid,tatom,txpos, typos, tattribute,0.0f,0.0f,0.0f,'t',numcolumn-1);}
+ tatom.clear();
+ txpos.clear();
+ typos.clear();
+ tattribute.clear();
+ }
+ } else {
+ for (ii=0;ii<=tablelastline-tablefirstline+captionnumline+2 ;ii++){
+ if (!(ii>=1 && ii <=captionnumline+1)){
+ tatom = new ArrayList<String>();
+ txpos = new ArrayList<Float>();
+ typos = new ArrayList<Float>();
+ tattribute = new ArrayList<String>();
+ for (k=0;k<=tablehlinecounter.get(ii);k++){
+ totalhline++;
+ tatom.add("!hlin ");
+ txpos.add(0.0f);
+ typos.add(0.0f);
+ tattribute.add(attribute);
+ }
+ synchronized(this){
+ superblock.add(tid,tatom,txpos, typos, tattribute,0.0f,0.0f,0.0f,'t',numcolumn-1);}
+ tatom.clear();
+ txpos.clear();
+ typos.clear();
+ tattribute.clear();
+ } }
+ for (i=1;i<=tablelastline-tablefirstline+1;i++){tablehlinecounter.set(i,tablehlinecounter.get(i+captionnumline+1));}
+ }
+
+// determine vertical height of table and assign ypos of horizontal lines
+
+// first line
+ i=tablefirstline-adjustline;
+ int index=SuperBlock.blockypos.get(tablelastline+tid2-adjustline).size()-(tablehlinenumber+1);
+ for (k=0;k<=tablehlinecounter.get(0);k++){
+ SuperBlock.blockypos.get(tablelastline+tid2-adjustline).set(index+k, adjusty);
+
+ adjusty=adjusty+linegap;
+ }
+ adjusty=adjusty+SuperBlock.superblocklineheight.get(tid).get(i)-SuperBlock.superblocklinedepth.get(tid).get(i);
+ int l=0;
+ if(tablefirstline==tablelastline){
+ l=totalhline+totalvline;
+ }
+ for (ii=0;ii<=SuperBlock.blockatom.get(i+tid2).size()-1-l;ii++){
+ SuperBlock.blockypos.get(i+tid2).set(ii, SuperBlock.blockypos.get(i+tid2).get(ii)+adjusty);
+ }
+ thisypos2=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i)+linegap;
+ // middle line
+
+ for (i=tablefirstline+1;i<=tablelastline-1;i++){
+ index=index+k;
+
+ for (k=0;k<=tablehlinecounter.get(i-tablefirstline);k++){
+ SuperBlock.blockypos.get(tablelastline+tid2-adjustline).set(index+k, thisypos2);
+ thisypos2=thisypos2+linegap;
+ adjusty=adjusty+linegap;
+ }
+
+ adjusty=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i-1-adjustline)+linegap+SuperBlock.superblocklineheight.get(tid).get(i-adjustline)-SuperBlock.superblocklinedepth.get(tid).get(i-adjustline);
+ for (ii=0;ii<=SuperBlock.blockatom.get(i+tid2-adjustline).size()-1;ii++){
+ SuperBlock.blockypos.get(i+tid2-adjustline).set(ii, SuperBlock.blockypos.get(i+tid2-adjustline).get(ii)+adjusty);
+ }
+ thisypos2=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i-adjustline)+linegap;
+ }
+// last line
+ if (tablelastline > tablefirstline){
+ i=tablelastline-adjustline;
+ index=index+k;
+
+ for (k=0;k<=tablehlinecounter.get(i-tablefirstline+adjustline);k++){
+ SuperBlock.blockypos.get(tablelastline+tid2-adjustline).set(index+k, thisypos2);
+ thisypos2=thisypos2+linegap;
+ adjusty=adjusty+linegap;
+ }
+
+ adjusty=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i-1)+linegap+SuperBlock.superblocklineheight.get(tid).get(i)-SuperBlock.superblocklinedepth.get(tid).get(i);
+ for (ii=0;ii<=SuperBlock.blockatom.get(i+tid2).size()-1-(tablehlinenumber+1)-(columnspec.length()-columnspec2.length());ii++){
+ SuperBlock.blockypos.get(i+tid2).set(ii, SuperBlock.blockypos.get(i+tid2).get(ii)+adjusty);
+ }
+ thisypos2=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i);
+
+ if (tablehlinecounter.get(tablelinenumber)>=0)
+ {
+ thisypos2=thisypos2+linegap;
+ index=index+k;
+ for (k=0;k<=tablehlinecounter.get(tablelinenumber);k++){
+ SuperBlock.blockypos.get(tablelastline+tid2-adjustline).set(index+k, thisypos2);
+ thisypos2=thisypos2+linegap;
+ }
+ } else {
+ thisypos2=thisypos2+linegap;
+ }
+ thisypos2=thisypos2-linegap;
+ }
+
+// assign vertical lines height
+
+ index=SuperBlock.blockatom.get(SuperBlock.superblocklinenumber.get(tid)+tid2).size()-(tablehlinenumber+1)-(columnspec.length()-columnspec2.length());
+ float temp=thisypos2-adjusty;
+ sfontsize=Integer.toString((int)temp);
+ int is=sfontsize.length();
+ for (k=0;k<=columnspec.length()-columnspec2.length()-1;k++){
+ if (is==1){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+ }
+
+
+// determine total width of table
+
+ for (ii=0;ii<=numcolumn-1;ii++){
+ totalwidth=totalwidth+columnwidth.get(ii)+columngap+(columngap*(tablevlinecounter.get(ii)+1));
+ }
+ if (tablevlinecounter.get(numcolumn)>=0){
+ totalwidth=totalwidth+(columngap*(tablevlinecounter.get(numcolumn)));
+ }
+
+ if (viewportwidth>totalwidth){shiftx=(viewportwidth-totalwidth)/2;}
+ else {shiftx=0;};
+
+ for (i=tablefirstline-adjustline;i<=tablelastline-adjustline;i++){
+
+// assign xpos of first column
+
+ adjustx=shiftx+Header.leftsidemargin;
+ int columnnum=0;
+ int iistart=0;
+
+ index=SuperBlock.blockatom.get(SuperBlock.superblocklinenumber.get(tid)+tid2).size()-(tablehlinenumber+1)-(columnspec.length()-columnspec2.length());
+ for (k=0; k<=tablevlinecounter.get(0);k++){
+ if (i==tablelastline-adjustline){SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index,adjustx);SuperBlock.blockypos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisypos2);}
+ adjustx=adjustx+columngap;
+ }
+ index=index+tablevlinecounter.get(0)+1;
+
+ int index2=i+tid2;
+ l=0;
+ if (i==tablelastline-adjustline){l=totalvline+totalhline;}
+ for (ii=0;SuperBlock.blockcolumnnum.get(index2).size()>= ii+1+l && SuperBlock.blockcolumnnum.get(index2).get(ii)==0;ii++){
+ if (columnspec2.charAt(columnnum)=='l'){SuperBlock.blockxpos.get(index2).set(ii, SuperBlock.blockxpos.get(index2).get(ii)+adjustx);}
+ else if (columnspec2.charAt(columnnum)=='c'){adjustx2=(columnwidth.get(columnnum)-blockwidth.get((i-tablefirstline+adjustline)*numcolumn+columnnum))/2;
+ SuperBlock.blockxpos.get(index2).set(ii, SuperBlock.blockxpos.get(index2).get(ii)+adjustx+adjustx2);}
+ else if (columnspec2.charAt(columnnum)=='r'){adjustx2=columnwidth.get(columnnum)-blockwidth.get((i-tablefirstline+adjustline)*numcolumn+columnnum);
+ SuperBlock.blockxpos.get(index2).set(ii, SuperBlock.blockxpos.get(index2).get(ii)+adjustx+adjustx2);};
+ columnnum=0;
+ }
+ iistart=ii;
+
+ // assign xpos of all columns
+
+ for (columnnum=1;columnnum<=numcolumn-1;columnnum++){
+
+ boolean endofcolumn=false;
+ adjustx=adjustx+columngap+columnwidth.get(columnnum-1);
+
+// assign xpos and ypos of vertical lines
+
+ for (k=0; k<=tablevlinecounter.get(columnnum);k++){
+ if (i==tablelastline-adjustline){SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index,adjustx);SuperBlock.blockypos.get(SuperBlock.superblocklinenumber.get(tid)+tid*100).set(k+index, thisypos2);}
+ adjustx=adjustx+columngap;
+ }
+ index=index+tablevlinecounter.get(columnnum)+1;
+ index2=0;
+ if (i==SuperBlock.superblocklinenumber.get(tid)){
+ index2=SuperBlock.blockcolumnnum.get(i+tid2).size()-1-(tablehlinenumber+1)-(columnspec.length()-columnspec2.length());
+ } else {
+ index2=SuperBlock.blockcolumnnum.get(i+tid2).size()-1;
+ }
+ for (ii=iistart;endofcolumn==false && ii <=index2;ii++){
+ if (columnnum == SuperBlock.blockcolumnnum.get(i+tid2).get(ii)){
+
+ if (columnspec2.charAt(columnnum)=='l'){SuperBlock.blockxpos.get(i+tid2).set(ii, SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx);}
+ else if (columnspec2.charAt(columnnum)=='c'){adjustx2=(columnwidth.get(columnnum)-blockwidth.get((i-tablefirstline+adjustline)*numcolumn+columnnum))/2;
+ SuperBlock.blockxpos.get(i+tid2).set(ii, SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx+adjustx2);}
+ else if (columnspec2.charAt(columnnum)=='r'){adjustx2=columnwidth.get(columnnum)-blockwidth.get((i-tablefirstline+adjustline)*numcolumn+columnnum);
+ SuperBlock.blockxpos.get(i+tid2).set(ii, SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx+adjustx2);};
+ } else {
+ endofcolumn=true;
+ iistart=ii;
+ }
+ }
+ }
+
+// assign xpos and ypos of last vertical lines
+// if (numcolumn > 1){
+ adjustx=adjustx+columngap+columnwidth.get(numcolumn-1);
+ for (k=0; k<=tablevlinecounter.get(numcolumn);k++){
+ if (i==tablelastline-adjustline){SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index,adjustx);SuperBlock.blockypos.get(SuperBlock.superblocklinenumber.get(tid)+tid*100).set(k+index, thisypos2);}
+ adjustx=adjustx+columngap;
+ }
+// }
+// assign xpos and width of all horizontal lines
+ index=SuperBlock.blockcolumnnum.get(i+tid2).size()-(tablehlinenumber+1);
+
+ sfontsize=Integer.toString((int)totalwidth);
+ is=sfontsize.length();
+ for (k=0; k<=tablehlinenumber;k++){
+ if (i==tablelastline-adjustline){
+ SuperBlock.blockxpos.get(tablelastline+tid2-adjustline).set(index+k,shiftx+Header.leftsidemargin);
+ if (is==1){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+ }
+ }
+ }
+ thisypos2=thisypos2+linegap;
+ thisypos.put(tid, thisypos2);
+ columnwidth.clear();
+ lineheight.clear();
+ linedepth.clear();;
+
+ blockwidth.clear();;
+ blockheight.clear();
+ blockdepth.clear();
+ tablevlinecounter.clear();
+
+ if (!captionattop){
+ Parsetext table = new Parsetext();
+ for (i=0;i<=captionnumline;i++){
+ sfontsize=Integer.toString(Header.fontsize);
+ if (sfontsize.length()==1){
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ table.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, captionline.get(i), Header.leftsidemargin , thisypos2, tf, attribute2, attribute, false, 0.0f);
+ thisypos2=Parsetext.thisypos.get(tid);
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+
+ adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(SuperBlock.superblocklinewidth.get(tid).size()-1))/2;
+ for (int ij=0;ij<=SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).size()-1;ij++){
+ SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(ij,SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).get(ij)+adjustx);
+ }
+ adjusty=Parsetext.thisypos.get(tid);
+ thisypos.put(tid,adjusty);
+ }}
+ SuperBlock.tableendline.put(tid2+SuperBlock.tablenumber.get(tid), SuperBlock.superblocklinenumber.get(tid));
+ SuperBlock.tableheight.put(tid2+SuperBlock.tablenumber.get(tid),thisypos.get(tid)-ypos);
+}}
+
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsepreparation.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsepreparation.java
new file mode 100644
index 0000000000..c88ec5a914
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsepreparation.java
@@ -0,0 +1,143 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class Parsepreparation {
+
+ public String parsepreparation(String molecule2, HashMap<String, Integer> symboltype, HashMap<String, String> matchsymbol) {
+
+ char temp1,temp2;
+ int length=0;
+ int i=0;
+ int j=-1;
+ int ii=0;
+ boolean insidetabular=false;
+ String molecule = "";
+ String key="";
+ length = molecule2.length();
+ Fontfile font = new Fontfile();
+ font.fontfile();
+ Textattributefile text = new Textattributefile();
+ text.textattributefile();
+ Colorfile color = new Colorfile();
+ color.colorfile();
+
+ ArrayList<String> atom = new ArrayList<String>();
+ int i2=0;
+ molecule2 = molecule2+"!!!!";
+ for (i=0;i2<=length;i++){
+
+ temp1=molecule2.charAt(i2);
+ temp2=molecule2.charAt(i2+1);
+
+ if (temp1=='!' && temp2=='!'){i2=length+1;}
+ else if (temp1!='!' && temp1 !='}' && temp1 !='{'){molecule=molecule+temp1; i2++;}
+ else if (temp1=='!'){
+ key="";
+ for (ii=i2+1;!(molecule2.charAt(ii)==' ' ||molecule2.charAt(ii)=='}' || molecule2.charAt(ii)=='{'|| molecule2.charAt(ii)=='!'|| molecule2.charAt(ii)=='('|| molecule2.charAt(ii)==')');ii++){
+ key = key + molecule2.charAt(ii);
+ }
+ if (key.equals("frac")){molecule = molecule + "!fra!onb{"; j++; atom.add("onb"); i2=i2+key.length()+2;}
+ else if (key.equals("odb")){molecule = molecule + "!odb{"; j++; atom.add("odb"); i2=i2+key.length()+2;}
+ else if (key.equals("tabular")){
+ molecule = molecule + "!bta{"; j++; atom.add("bta"); i2=i2+key.length()+2;
+ int i4=molecule2.indexOf("{",i2);
+ molecule=molecule+molecule2.substring(i2,i4+1);
+ for (i=i2;i<=i4-2;i++){
+ if (molecule2.charAt(i)=='l' || molecule2.charAt(i)=='c' || molecule2.charAt(i)=='r'){
+ }
+ }
+ i2=i4+1;
+ insidetabular=true;
+ }
+ else if (key.equals("line")){
+ molecule = molecule + "!bln{"; j++; atom.add("bln"); i2=i2+key.length()+2; if (molecule2.charAt(i2)=='}'){molecule=molecule+"!dno"; i2++;};
+ }
+ else if (key.equals("block")){molecule = molecule +"!openblock ";j++; atom.add("block"); i2=i2+key.length()+2;}
+ else if (key.equals("vspace")){molecule = molecule + "!vsp{"; i2=i2+key.length()+2;
+ key="";
+ for (ii=i2;!(molecule2.charAt(ii)=='}');ii++){
+ key = key + molecule2.charAt(ii);}
+ molecule = molecule + key+"}";
+ i2=i2+key.length()+1;
+ }
+ else if (key.equals("hspace")){molecule = molecule + "!hsp{" ; i2=i2+key.length()+2;
+ key="";
+ for (ii=i2;!(molecule2.charAt(ii)=='}');ii++){
+ key = key + molecule2.charAt(ii);}
+ molecule = molecule + key+"}";
+ i2=i2+key.length()+1;
+ }
+ else if (key.equals("^")){molecule = molecule + "!osp{" ; j++; atom.add(key); i2=i2+key.length()+2;}
+ else if (key.equals("_")){molecule = molecule + "!osu{"; j++; atom.add(key); i2=i2+key.length()+2;}
+ else if (key.equals("mbox")){molecule = molecule + "!obx{"; j++; atom.add(key); i2=i2+key.length()+2;}
+ else if (key.equals("dno")){molecule = molecule + "!dno ";i2=i2+key.length()+2;}
+ else if (key.equals("noindent")){i2=i2+key.length()+2;}
+ else if (symboltype.containsKey(key) && symboltype.get(key) < 10 ){
+ molecule = molecule + "!V" + key +"{"; j++; atom.add(key); i2=i2+key.length()+2;
+ temp1=molecule2.charAt(i2);
+ temp2=molecule2.charAt(i2+1);
+ if (temp1 == '!' && temp2 == '.'){molecule = molecule +"!."; i2=i2+2;};
+ }
+ else if (symboltype.containsKey(key) && symboltype.get(key) >= 10 ){
+ i2=i2+key.length()+1; if (molecule2.charAt(i2)==' '){i2++; molecule = molecule + "!" + key +" ";} else if (molecule2.charAt(i2)=='!' || molecule2.charAt(i2)=='}' ){molecule = molecule + "!" + key;} }
+ else if (text.attribute.contains(key)){
+ if (molecule2.charAt(i2+key.length()+1)=='('){molecule = molecule + "!Ao"+key+molecule2.substring(i2+key.length()+1,molecule2.indexOf(")",i2+key.length()+1)+2); j++; atom.add(key); i2=molecule2.indexOf(")",i2+key.length()+1)+2;
+ } else {molecule = molecule + "!Ao"+key+"{"; j++; atom.add(key); i2=i2+key.length()+2;};
+ }
+ else if (Header.sizefactor.containsKey(key)){molecule = molecule + "!Xo"+key+"{"; j++; atom.add(key); i2=i2+key.length()+2;}
+ else if (font.fontname.contains(key)){molecule = molecule + "!Fo"+key+"{"; j++; atom.add(key); i2=i2+key.length()+2;}
+ else if (color.colorinteger.containsKey(key)){molecule = molecule + "!Co"+key+"{"; j++; atom.add(key); i2=i2+key.length()+2;}
+ } else if (temp1=='{' && insidetabular){
+ molecule=molecule+"!olb{"; j++; atom.add("olb"); i2++;
+ }else if (temp1=='}'){
+ key = atom.get(j); atom.remove(j); j--;
+ if (symboltype.containsKey(key) && symboltype.get(key) == 1){
+ molecule = molecule + "!V" + matchsymbol.get(key) +"}"; i2=i2+1;
+ temp1=molecule2.charAt(i2);
+ temp2=molecule2.charAt(i2+1);
+ if (temp1 == '!' && temp2 == '.'){molecule = molecule +"!."; i2=i2+2;};
+ } else if (symboltype.containsKey(key) &&
+ symboltype.get(key) < 10){
+ molecule = molecule + "!V" + key +"}"; i2=i2+1;
+ } else if (key.equals("onb")){
+ molecule = molecule + "!cnb}!odb{"; j++; atom.add("odb"); i2=i2+2;
+ } else if (key.equals("odb")){
+ molecule = molecule + "!cdb}"; i2=i2+1;
+ } else if (key.equals("bta")){
+ molecule = molecule + "!eta}"; i2=i2+1; insidetabular=false;
+ } else if (key.equals("bln")){
+ molecule = molecule + "!eln}"; i2=i2+1;
+ } else if (key.equals("^")){
+ molecule = molecule + "!csp}"; i2=i2+1;
+ } else if (key.equals("_")){
+ molecule = molecule + "!csu}"; i2=i2+1;
+ } else if (key.equals("olb")){
+ molecule = molecule + "!clb}"; i2=i2+1;
+ } else if (key.equals("mbox")){
+ molecule = molecule + "!cbx}"; i2=i2+1;
+ } else if (key.equals("block")){
+ molecule = molecule +"!closeblock "; i2=i2+1;
+ } else if (text.attribute.contains(key)){
+ molecule = molecule + "!Ac"+key+"}"; i2=i2+1;
+ } else if (Header.sizefactor.containsKey(key)){
+ molecule = molecule + "!Xc"+key+"}"; i2=i2+1;
+ } else if (font.fontname.contains(key)){
+ molecule = molecule + "!Fc"+key+"}"; i2=i2+1;
+ } else if (color.colorinteger.containsKey(key)){
+ molecule = molecule + "!Cc"+key+"}"; i2=i2+1;
+ }
+ }
+ }
+ return molecule;
+ }}
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetable.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetable.java
new file mode 100644
index 0000000000..9b298daadf
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetable.java
@@ -0,0 +1,464 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.SparseBooleanArray;
+
+public class Parsetable {
+
+ public static volatile SparseArray<Float> thisypos = new SparseArray<Float>();
+ public static volatile SparseBooleanArray error = new SparseBooleanArray();
+ public static volatile SparseArray<String> errormessage = new SparseArray<String>();
+
+ public void parsetable(Canvas canvas, Block block, ParagraphBlock paragraphblock, Integer tid, Integer containerwidth, Integer containerheight, Integer tablelinenumber, ArrayList<Integer> tablehlinecounter, Integer superblocknumber, SuperBlock superblock ,SparseArray<ArrayList<String>> superblockline,SparseIntArray superblocknumline,SparseIntArray superblockstartline, SparseIntArray superblockendline, ArrayList<Typeface> tf , String columnspec, Float ypos, String attribute2, String attribute) {
+
+ int i,j,ii;
+ int k=0;
+ int tid2=tid*1000;
+ int captionnumline=-1;
+ int viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin;
+ int adjustline=0;
+
+ float linegap = Header.linegap;
+ float columngap=Header.columngap;
+ float totalwidth=0.0f;
+ float adjusty=ypos;
+ float adjustx=0.0f;
+ float adjustx2=0.0f;
+ float shiftx=0.0f;
+ float thisypos2=0;
+
+ String blockline = new String();
+ String rawblockline = new String();
+ String thisattribute=attribute;
+ String columnspec2=new String();
+ String currentline="";
+
+ ArrayList<Float> columnwidth = new ArrayList<Float>();
+ ArrayList<Float> lineheight = new ArrayList<Float>();
+ ArrayList<Float> linedepth = new ArrayList<Float>();
+
+ ArrayList<Float> blockwidth = new ArrayList<Float>();
+ ArrayList<Float> blockheight = new ArrayList<Float>();
+ ArrayList<Float> blockdepth = new ArrayList<Float>();
+ ArrayList<Integer> tablevlinecounter = new ArrayList<Integer>();
+ ArrayList<String> captionline = new ArrayList<String>();
+
+ ArrayList<String> tatom = new ArrayList<String>();
+ ArrayList<Float> txpos = new ArrayList<Float>();
+ ArrayList<Float> typos = new ArrayList<Float>();
+ ArrayList<String> tattribute = new ArrayList<String>();
+
+ error.put(tid,false);
+ errormessage.put(tid,"");
+ thisypos.put(tid,ypos);
+ columnspec2="";
+ int tablehlinenumber=-1;
+ for (i=0;i<=tablelinenumber;i++){
+ tablehlinenumber=tablehlinenumber+(tablehlinecounter.get(i)+1);
+ }
+ tablevlinecounter.add(-1);
+ for (i=0;i<=columnspec.length()-1;i++){
+ if (columnspec.charAt(i)=='|') {tablevlinecounter.set(tablevlinecounter.size()-1,tablevlinecounter.get(tablevlinecounter.size()-1)+1);}
+ else if (columnspec.charAt(i)=='l' || columnspec.charAt(i)=='r' || columnspec.charAt(i)=='c'){columnspec2=columnspec2+columnspec.charAt(i); tablevlinecounter.add(-1);}
+ }
+ int numcolumn = columnspec2.length();
+
+ columnwidth.clear();lineheight.clear();linedepth.clear();
+ Paint textpaint = new Paint();
+ Rect textbounds = new Rect();
+ textpaint.setTextSize(Integer.parseInt(attribute.substring(1,4)));
+ textpaint.setTypeface(tf.get(Integer.parseInt(attribute.substring(4,7))));
+ textpaint.getTextBounds("Aj",0,"Aj".length(),textbounds);
+ float spacewidth=textpaint.measureText(" ");
+ float spaceheight=textbounds.height();
+ float spacedepth=textbounds.bottom;
+ Boolean captionattop=false;
+ int tablefirstline=superblockstartline.get(superblocknumber);
+ int tablelastline=superblockendline.get(superblocknumber);
+ int lastline=superblockendline.get(superblocknumber)-superblockstartline.get(superblocknumber);
+ String sfontsize;
+
+ for (i=0;i<=lastline;i++){
+
+ currentline=superblockline.get(superblocknumber).get(i);
+ String line=currentline.trim();
+
+ if (line.length() >=15 && line.substring(0,15).equals("!begin{caption}")){
+ if (i==0){captionattop=true;adjustline=2;} else {captionattop=false;adjustline=0;};
+
+ Boolean caption=true;
+ i++;
+ currentline=superblockline.get(superblocknumber).get(i);
+ line=currentline.trim();
+ if (line.length() >=13 && line.substring(0,13).equals("!end{caption}")){caption=false;i++;captionnumline++;}
+
+ while(caption){
+ j=line.indexOf("!!");
+ line=line.substring(0,j);
+ captionline.add(line);
+ i++;captionnumline++;
+ currentline=superblockline.get(superblocknumber).get(i);
+ line=currentline.trim();
+ if (line.length() >=13 && line.substring(0,13).equals("!end{caption}")){caption=false;i++;}
+ }
+ tablelinenumber=tablelinenumber-captionnumline-1;
+ if(captionattop){tablefirstline=i+tablefirstline;
+ currentline=superblockline.get(superblocknumber).get(i);}
+ else {tablelastline=tablefirstline+tablelinenumber-1;}
+ } }
+
+// Add top caption
+
+ SuperBlock.tablestartline.put(tid2+SuperBlock.tablenumber.get(tid), SuperBlock.superblocklinenumber.get(tid)+1);
+ if (captionattop){
+ Parsetext table = new Parsetext();
+ for (i=0;i<=captionnumline;i++){
+ sfontsize=Integer.toString(Header.fontsize);
+ if (sfontsize.length()==1){
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ table.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, captionline.get(i), Header.leftsidemargin , adjusty, tf, attribute2, attribute, false, 0.0f);
+ thisypos2=Parsetext.thisypos.get(tid);
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(SuperBlock.superblocklinewidth.get(tid).size()-1))/2;
+ for (int ij=0;ij<=SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).size()-1;ij++){
+ SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(ij,SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).get(ij)+adjustx);
+ }
+ adjusty=Parsetext.thisypos.get(tid);
+ thisypos.put(tid,adjusty);
+ }}
+ Boolean firstline=true;
+ for (i=tablefirstline;i<=tablelastline;i++){
+
+ if (!captionattop){
+ currentline=superblockline.get(superblocknumber).get(i-tablefirstline);
+ } else {
+ currentline=superblockline.get(superblocknumber).get(i-tablefirstline+captionnumline+3);
+ }
+
+ lineheight.add(0.0f);
+ linedepth.add(0.0f);
+ synchronized(this){superblock.create(tid);}
+ for (ii=0;ii<=numcolumn-1;ii++){ // First parse
+ if (firstline) columnwidth.add(0.0f);
+ if (ii<=numcolumn-2){
+ j=currentline.indexOf("&");
+
+ if (j<0){error.put(tid, true);errormessage.put(tid, "Format error in table, parse failed !!");return;};
+ rawblockline=currentline.substring(0,j); currentline=currentline.substring(j+1);
+
+ if (rawblockline.equals("")){rawblockline="!dno ";};
+ } else {
+ rawblockline=currentline;
+ if (rawblockline.equals("")){rawblockline="!dno ";};
+ }
+
+ Parsepreparation prepareblockline = new Parsepreparation();
+ blockline=prepareblockline.parsepreparation(rawblockline,Symbol.symboltype,Symbol.matchsymbol);
+
+ Parseblock parseblockline = new Parseblock();
+ parseblockline.parseblock(tid,canvas,block, blockline,tf,thisattribute);
+ if (Block.error.get(tid)==true){error.put(tid, true); errormessage.put(tid, Block.errormessage.get(tid)); return;};
+
+ blockwidth.add(Math.max(Block.blockwidth2.get(tid),spacewidth));
+ blockheight.add(Math.max(Block.blockheight2.get(tid),spaceheight));
+ blockdepth.add(Math.max(Block.blockdepth2.get(tid),spacedepth));
+ superblock.add(tid,Block.subblock2,Block.subblockxpos2, Block.subblockypos2, Block.subblockattribute2, blockwidth.get(blockwidth.size()-1), blockheight.get(blockheight.size()-1), blockdepth.get(blockdepth.size()-1),'t',ii);
+ columnwidth.set(ii,Math.max(columnwidth.get(ii), blockwidth.get(blockwidth.size()-1)));
+ }
+ }
+ firstline=false;
+
+// add vertical lines
+ int totalvline=0;
+ for (ii=0;ii<=numcolumn;ii++){
+ for (k=0;k<=tablevlinecounter.get(ii);k++){
+ tatom.add("!vlin ");
+ txpos.add(0.0f);
+ typos.add(0.0f);
+ tattribute.add(attribute);
+ totalvline++;
+ }
+ synchronized(this){
+ superblock.add(tid,tatom,txpos, typos, tattribute,0.0f,0.0f,0.0f,'t',numcolumn-1);}
+ tatom.clear();
+ txpos.clear();
+ typos.clear();
+ tattribute.clear();
+ }
+
+// add horizontal lines
+ int totalhline=0;
+ if (!captionattop){
+ for (ii=0; ii<=tablelastline-tablefirstline+1;ii++){
+ for (k=0;k<=tablehlinecounter.get(ii);k++){
+ totalhline++;
+ tatom.add("!hlin ");
+ txpos.add(0.0f);
+ typos.add(0.0f);
+ tattribute.add(attribute);
+ }
+ synchronized(this){
+ superblock.add(tid,tatom,txpos, typos, tattribute,0.0f,0.0f,0.0f,'t',numcolumn-1);}
+ tatom.clear();
+ txpos.clear();
+ typos.clear();
+ tattribute.clear();
+ }
+ } else {
+ for (ii=0;ii<=tablelastline-tablefirstline+captionnumline+2 ;ii++){
+ if (!(ii>=1 && ii <=captionnumline+1)){
+ for (k=0;k<=tablehlinecounter.get(ii);k++){
+ totalhline++;
+ tatom.add("!hlin ");
+ txpos.add(0.0f);
+ typos.add(0.0f);
+ tattribute.add(attribute);
+ }
+ synchronized(this){
+ superblock.add(tid,tatom,txpos, typos, tattribute,0.0f,0.0f,0.0f,'t',numcolumn-1);}
+ tatom.clear();
+ txpos.clear();
+ typos.clear();
+ tattribute.clear();
+ } }
+ for (i=1;i<=tablelastline-tablefirstline+1;i++){tablehlinecounter.set(i,tablehlinecounter.get(i+captionnumline+1));}
+ }
+
+// determine vertical height of table and assign ypos of horizontal lines
+
+// first line
+ i=tablefirstline-adjustline;
+ int index=SuperBlock.blockypos.get(tablelastline+tid2-adjustline).size()-(tablehlinenumber+1);
+ for (k=0;k<=tablehlinecounter.get(0);k++){
+ SuperBlock.blockypos.get(tablelastline+tid2-adjustline).set(index+k, adjusty);
+
+ adjusty=adjusty+linegap;
+ }
+ adjusty=adjusty+SuperBlock.superblocklineheight.get(tid).get(i)-SuperBlock.superblocklinedepth.get(tid).get(i);
+ int l=0;
+ if(tablefirstline==tablelastline){
+ l=totalhline+totalvline;
+ }
+ for (ii=0;ii<=SuperBlock.blockatom.get(i+tid2).size()-1-l;ii++){
+ SuperBlock.blockypos.get(i+tid2).set(ii, SuperBlock.blockypos.get(i+tid2).get(ii)+adjusty);
+ }
+ thisypos2=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i)+linegap;
+ // middle line
+
+ for (i=tablefirstline+1;i<=tablelastline-1;i++){
+ index=index+k;
+
+ for (k=0;k<=tablehlinecounter.get(i-tablefirstline);k++){
+ SuperBlock.blockypos.get(tablelastline+tid2-adjustline).set(index+k, thisypos2);
+ thisypos2=thisypos2+linegap;
+ adjusty=adjusty+linegap;
+ }
+
+ adjusty=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i-1-adjustline)+linegap+SuperBlock.superblocklineheight.get(tid).get(i-adjustline)-SuperBlock.superblocklinedepth.get(tid).get(i-adjustline);
+ for (ii=0;ii<=SuperBlock.blockatom.get(i+tid2-adjustline).size()-1;ii++){
+ SuperBlock.blockypos.get(i+tid2-adjustline).set(ii, SuperBlock.blockypos.get(i+tid2-adjustline).get(ii)+adjusty);
+ }
+ thisypos2=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i-adjustline)+linegap;
+ }
+// last line
+
+ if (tablelastline > tablefirstline){
+ i=tablelastline-adjustline;
+ index=index+k;
+ for (k=0;k<=tablehlinecounter.get(i-tablefirstline+adjustline);k++){
+ SuperBlock.blockypos.get(tablelastline+tid2-adjustline).set(index+k, thisypos2);
+ thisypos2=thisypos2+linegap;
+ adjusty=adjusty+linegap;
+ }
+
+ adjusty=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i-1)+linegap+SuperBlock.superblocklineheight.get(tid).get(i)-SuperBlock.superblocklinedepth.get(tid).get(i);
+ for (ii=0;ii<=SuperBlock.blockatom.get(i+tid2).size()-1-(tablehlinenumber+1)-(columnspec.length()-columnspec2.length());ii++){
+ SuperBlock.blockypos.get(i+tid2).set(ii, SuperBlock.blockypos.get(i+tid2).get(ii)+adjusty);
+ }
+ thisypos2=adjusty+SuperBlock.superblocklinedepth.get(tid).get(i);
+ thisypos2=thisypos2+linegap;
+ }
+
+ if (tablehlinecounter.get(tablelinenumber)>=0)
+ {
+ index=index+k;
+ for (k=0;k<=tablehlinecounter.get(tablelinenumber);k++){
+ SuperBlock.blockypos.get(tablelastline+tid2-adjustline).set(index+k, thisypos2);
+ thisypos2=thisypos2+linegap;
+ }
+ } else {
+ thisypos2=thisypos2+linegap;
+ }
+ thisypos2=thisypos2-linegap;
+
+
+// assign vertical lines height
+
+ index=SuperBlock.blockatom.get(SuperBlock.superblocklinenumber.get(tid)+tid2).size()-(tablehlinenumber+1)-(columnspec.length()-columnspec2.length());
+ float temp=thisypos2-thisypos.get(tid);
+ sfontsize=Integer.toString((int)temp);
+ int is=sfontsize.length();
+ for (k=0;k<=columnspec.length()-columnspec2.length()-1;k++){
+ if (is==1){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+ }
+
+
+// determine total width of table
+
+ for (ii=0;ii<=numcolumn-1;ii++){
+ totalwidth=totalwidth+columnwidth.get(ii)+columngap+(columngap*(tablevlinecounter.get(ii)+1));
+ }
+ if (tablevlinecounter.get(numcolumn)>=0){
+ totalwidth=totalwidth+(columngap*(tablevlinecounter.get(numcolumn)));
+ }
+
+ if (viewportwidth>totalwidth){shiftx=(viewportwidth-totalwidth)/2;}
+ else {shiftx=(viewportwidth-totalwidth)/2;};
+
+ for (i=tablefirstline-adjustline;i<=tablelastline-adjustline;i++){
+
+// assign xpos of first column
+
+ adjustx=shiftx+Header.leftsidemargin;
+ int columnnum=0;
+ int iistart=0;
+ index=SuperBlock.blockatom.get(SuperBlock.superblocklinenumber.get(tid)+tid2).size()-(tablehlinenumber+1)-(columnspec.length()-columnspec2.length());
+ for (k=0; k<=tablevlinecounter.get(0);k++){
+ if (i==tablelastline-adjustline){SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index,adjustx);SuperBlock.blockypos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisypos2);}
+ adjustx=adjustx+columngap;
+ }
+ index=index+tablevlinecounter.get(0)+1;
+ int index2=i+tid2;
+ l=0;
+ if (i==tablelastline-adjustline){l=totalvline+totalhline;}
+ for (ii=0;SuperBlock.blockcolumnnum.get(index2).size()>= ii+1+l && SuperBlock.blockcolumnnum.get(index2).get(ii)==0;ii++){
+ if (columnspec2.charAt(columnnum)=='l'){SuperBlock.blockxpos.get(index2).set(ii, SuperBlock.blockxpos.get(index2).get(ii)+adjustx);}
+ else if (columnspec2.charAt(columnnum)=='c'){adjustx2=(columnwidth.get(columnnum)-blockwidth.get((i-tablefirstline+adjustline)*numcolumn+columnnum))/2;
+ SuperBlock.blockxpos.get(index2).set(ii, SuperBlock.blockxpos.get(index2).get(ii)+adjustx+adjustx2);}
+ else if (columnspec2.charAt(columnnum)=='r'){adjustx2=columnwidth.get(columnnum)-blockwidth.get((i-tablefirstline+adjustline)*numcolumn+columnnum);
+ SuperBlock.blockxpos.get(index2).set(ii, SuperBlock.blockxpos.get(index2).get(ii)+adjustx+adjustx2);};
+ columnnum=0;
+ }
+ iistart=ii;
+
+ // assign xpos of all columns
+ for (columnnum=1;columnnum<=numcolumn-1;columnnum++){
+
+ boolean endofcolumn=false;
+ adjustx=adjustx+columngap+columnwidth.get(columnnum-1);
+
+// assign xpos and ypos of vertical lines
+
+ for (k=0; k<=tablevlinecounter.get(columnnum);k++){
+ if (i==tablelastline-adjustline){SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index,adjustx);SuperBlock.blockypos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisypos2);}
+ adjustx=adjustx+columngap;
+ }
+ index=index+tablevlinecounter.get(columnnum)+1;
+ index2=0;
+ if (i==SuperBlock.superblocklinenumber.get(tid)){
+ index2=SuperBlock.blockcolumnnum.get(i+tid2).size()-1-(tablehlinenumber+1)-(columnspec.length()-columnspec2.length());
+ } else {
+ index2=SuperBlock.blockcolumnnum.get(i+tid2).size()-1;
+ }
+ for (ii=iistart;endofcolumn==false && ii <=index2;ii++){
+ if (columnnum == SuperBlock.blockcolumnnum.get(i+tid2).get(ii)){
+
+ if (columnspec2.charAt(columnnum)=='l'){SuperBlock.blockxpos.get(i+tid2).set(ii, SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx);}
+ else if (columnspec2.charAt(columnnum)=='c'){adjustx2=(columnwidth.get(columnnum)-blockwidth.get((i-tablefirstline+adjustline)*numcolumn+columnnum))/2;
+ SuperBlock.blockxpos.get(i+tid2).set(ii, SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx+adjustx2);}
+ else if (columnspec2.charAt(columnnum)=='r'){adjustx2=columnwidth.get(columnnum)-blockwidth.get((i-tablefirstline+adjustline)*numcolumn+columnnum);
+ SuperBlock.blockxpos.get(i+tid2).set(ii, SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx+adjustx2);};
+ } else {
+ endofcolumn=true;
+ iistart=ii;
+ }
+ }
+ }
+
+// assign xpos and ypos of last vertical lines
+
+ adjustx=adjustx+columngap+columnwidth.get(numcolumn-1);
+ for (k=0; k<=tablevlinecounter.get(numcolumn);k++){
+ if (i==tablelastline-adjustline){SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index,adjustx);SuperBlock.blockypos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisypos2);}
+ adjustx=adjustx+columngap;
+ }
+
+// assign xpos and width of all horizontal lines
+ index=SuperBlock.blockcolumnnum.get(i+tid2).size()-(tablehlinenumber+1);
+
+ sfontsize=Integer.toString((int)totalwidth);
+ is=sfontsize.length();
+ for (k=0; k<=tablehlinenumber;k++){
+ if (i==tablelastline-adjustline){
+ SuperBlock.blockxpos.get(tablelastline+tid2-adjustline).set(index+k,shiftx+Header.leftsidemargin);
+ if (is==1){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+"00"+sfontsize+thisattribute.substring(4));
+ } else if (is==2){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+"0"+sfontsize+thisattribute.substring(4));
+ } else if (is==3){
+ SuperBlock.blockattribute.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(k+index, thisattribute.substring(0,1)+sfontsize+thisattribute.substring(4));
+ }
+ }
+ }
+ }
+ thisypos2=thisypos2+linegap;
+ thisypos.put(tid, thisypos2);
+ columnwidth.clear();
+ lineheight.clear();
+ linedepth.clear();;
+
+ blockwidth.clear();;
+ blockheight.clear();
+ blockdepth.clear();
+ tablevlinecounter.clear();
+
+ if (!captionattop){
+ Parsetext table = new Parsetext();
+ for (i=0;i<=captionnumline;i++){
+ sfontsize=Integer.toString(Header.fontsize);
+ if (sfontsize.length()==1){
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ table.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, captionline.get(i), Header.leftsidemargin , thisypos2, tf, attribute2, attribute, false, 0.0f);
+ thisypos2=Parsetext.thisypos.get(tid);
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(SuperBlock.superblocklinewidth.get(tid).size()-1))/2;
+ for (int ij=0;ij<=SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).size()-1;ij++){
+ SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).set(ij,SuperBlock.blockxpos.get(SuperBlock.superblocklinenumber.get(tid)+tid2).get(ij)+adjustx);
+ }
+ thisypos.put(tid,Parsetext.thisypos.get(tid));
+ }}
+ SuperBlock.tableendline.put(tid2+SuperBlock.tablenumber.get(tid), SuperBlock.superblocklinenumber.get(tid));
+ SuperBlock.tableheight.put(tid2+SuperBlock.tablenumber.get(tid),thisypos.get(tid)-ypos);
+ }}
+
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetext.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetext.java
new file mode 100644
index 0000000000..d61a27701d
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetext.java
@@ -0,0 +1,221 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.util.SparseArray;
+import android.util.SparseBooleanArray;
+
+
+public class Parsetext {
+
+ public static volatile SparseArray<Float> thisypos = new SparseArray<Float>();
+ public static volatile SparseBooleanArray error = new SparseBooleanArray();
+ public static volatile SparseArray<String> errormessage = new SparseArray<String>();
+
+ public void parsetext(Canvas canvas, Block block, ParagraphBlock paragraphblock, Integer tid, Integer containerwidth, Integer containerheight, int superblocknumber, SuperBlock superblock, String line,
+ float referencex, float referencey,
+ ArrayList<Typeface> tf ,String attribute0, String attribute1, Boolean dohyphenation, float indent){
+
+ float pagewidth = containerwidth-Header.rightsidemargin-Header.leftsidemargin;
+ float maxheight = 0.0f;
+ float maxdepth = 0.0f;
+
+ int i,ii;
+ int nummolecule = 0;
+ int fontsize = Integer.parseInt(attribute0.substring(1,4));
+
+ error.put(tid,false);
+ errormessage.put(tid,"");
+
+ Boolean newline=false;
+
+ String molecule = "";
+
+ Paint textpaint = new Paint();
+ Rect textbounds = new Rect();
+ textpaint.setTextSize(Integer.parseInt(attribute0.substring(1,4)));
+ textpaint.setTypeface(tf.get(Integer.parseInt(attribute0.substring(4,7))));
+ textpaint.getTextBounds("Aj",0,"Aj".length(),textbounds);
+ referencey=referencey+textbounds.height()-textbounds.bottom;
+ Float sizeofblank=textpaint.measureText(" ");
+
+ Separatetext line2superblock = new Separatetext();
+
+ line2superblock = new Separatetext();
+ line2superblock.separatetext(line);
+ nummolecule = line2superblock.nummolecule;
+
+ Float blockheight = 0.0f;
+ Float blockwidth = 0.0f;
+ Float blockdepth = 0.0f;
+ ArrayList<String> subblock = new ArrayList<String>();
+ ArrayList<Float> subblockxpos = new ArrayList<Float>();
+ ArrayList<Float> subblockypos = new ArrayList<Float>();
+ ArrayList<String> subblockattribute = new ArrayList<String>();
+
+ maxheight = 0.0f;
+ maxdepth = 0.0f;
+ synchronized(this){superblock.create(tid);}
+
+ for (ii=0;ii<=nummolecule-1;ii++){ // First parse
+ molecule = line2superblock.molecule.get(ii);
+ if (ii==0) {molecule=molecule.trim();
+ if (molecule.length()>=9 && molecule.substring(0,9).equals("!noindent")){indent = 0; molecule=molecule.substring(9); molecule=molecule.trim();}}
+
+ if (!line2superblock.text.get(ii)){
+ Parsepreparation newmolecule = new Parsepreparation();
+ molecule=newmolecule.parsepreparation(molecule,Symbol.symboltype,Symbol.matchsymbol);
+
+ Parseblock superblock2block = new Parseblock();
+ molecule=molecule.trim();
+
+ superblock2block.parseblock(tid,canvas, block, molecule,tf,attribute1);
+ if (Block.error.get(tid)==true){error.put(tid, true); errormessage.put(tid, Block.errormessage.get(tid)); return;};
+ blockheight=Block.blockheight2.get(tid);
+ blockwidth=Block.blockwidth2.get(tid);
+ blockdepth=Block.blockdepth2.get(tid);
+ maxheight = Math.max(maxheight,Block.blockheight2.get(tid) );
+ maxdepth = Math.max(maxdepth, Block.blockdepth2.get(tid));
+ int numatom=Block.subblock2.get(tid).size();
+ for (i=0;i<=numatom-1;i++){
+ Block.subblockxpos2.get(tid).set(i,Block.subblockxpos2.get(tid).get(i)+referencex+indent);
+ Block.subblockypos2.get(tid).set(i,Block.subblockypos2.get(tid).get(i)+referencey);
+ subblock.add(Block.subblock2.get(tid).get(i));
+ subblockxpos.add(Block.subblockxpos2.get(tid).get(i));
+ subblockypos.add(Block.subblockypos2.get(tid).get(i));
+ subblockattribute.add(Block.subblockattribute2.get(tid).get(i));
+ }
+ synchronized(this){
+ if (newline && SuperBlock.blockatom.get(tid*1000+SuperBlock.superblocklinenumber.get(tid)).size()>0){
+ if (subblock.size()>0){
+ superblock.create(tid);
+ superblock.add(tid,subblock,subblockxpos, subblockypos,subblockattribute, blockwidth, blockheight, blockdepth, 'x',0);
+ }
+ }else {
+ superblock.add(tid,subblock,subblockxpos, subblockypos,subblockattribute,blockwidth, blockheight, blockdepth,'x', 0);
+ }
+ }
+
+ if (numatom>0){
+ indent =subblockxpos.get(0)+blockwidth-referencex+sizeofblank;
+ if (indent >= pagewidth && ii<nummolecule-1){
+ referencey=subblockypos.get(numatom-1)+(float)fontsize;
+ indent=0;
+ }else {
+ referencey=subblockypos.get(numatom-1);
+ }}
+
+ subblock.clear();
+ subblockxpos.clear();subblockypos.clear();subblockattribute.clear();
+ }else if (!molecule.equals("")){
+ if (dohyphenation && Header.dohyphenation){
+
+ ParagraphFormatting paragraph = new ParagraphFormatting();
+ ParagraphBlock.newfirstline.put(tid, false);
+ paragraph.paragraphformatting(canvas,paragraphblock, pagewidth, molecule, tid, indent, attribute0, tf.get(Integer.parseInt(attribute0.substring(4,7))));
+ blockheight=(float)ParagraphBlock.line.size()*(float)fontsize;
+ blockwidth=ParagraphBlock.linelength.get(tid);
+ blockdepth=0.0f;
+ maxheight = Math.max(maxheight,(float)ParagraphBlock.line.get(tid).size()*(float)fontsize );
+ int numline=ParagraphBlock.line.get(tid).size();
+ for (i=0;i<=numline-1;i++){
+
+ if (!(ParagraphBlock.line.get(tid).get(i).equals(""))){
+ subblock.add(ParagraphBlock.line.get(tid).get(i));
+ subblockxpos.add(ParagraphBlock.xpos.get(tid).get(i)+referencex);
+ subblockypos.add(ParagraphBlock.ypos.get(tid).get(i)+referencey);
+ subblockattribute.add(ParagraphBlock.attribute.get(tid).get(i));
+ ParagraphBlock.xpos.get(tid).set(i,ParagraphBlock.xpos.get(tid).get(i)+referencex);
+ ParagraphBlock.ypos.get(tid).set(i,ParagraphBlock.ypos.get(tid).get(i)+referencey);
+
+ if (i==0 && !ParagraphBlock.newfirstline.get(tid)){
+ synchronized(this){ superblock.add(tid,subblock,subblockxpos, subblockypos, subblockattribute, ParagraphBlock.linelength.get(tid), (float) fontsize, 0.0f, 'x',0);}
+ }else {
+ synchronized(this){
+ if (subblock.size()>0 && SuperBlock.blockatom.get(tid*1000+SuperBlock.superblocklinenumber.get(tid)).size()>0){
+ superblock.create(tid);
+ superblock.add(tid,subblock,subblockxpos, subblockypos, subblockattribute, ParagraphBlock.linelength.get(tid), (float) fontsize, 0.0f, 'x',0);
+ } else if (subblock.size()>0) {
+ superblock.add(tid,subblock,subblockxpos, subblockypos, subblockattribute, ParagraphBlock.linelength.get(tid), (float) fontsize, 0.0f, 'x',0);
+ }
+ }
+ }
+ subblock.clear();
+ subblockxpos.clear();subblockypos.clear();subblockattribute.clear();
+ }
+ }
+ if (numline > 0){indent=ParagraphBlock.xpos.get(tid).get(numline-1)+ParagraphBlock.xpos.get(tid).get(numline-1)-referencex;
+ if (indent >= pagewidth && ii<nummolecule-1){
+ referencey=ParagraphBlock.ypos.get(tid).get(numline-1)+(float)fontsize;
+ indent=0;
+ }else {
+ referencey=ParagraphBlock.ypos.get(tid).get(numline-1);
+ }};
+ }
+ else {
+
+ ParagraphFormatting2 paragraph2 = new ParagraphFormatting2();
+ paragraph2.paragraphformatting2(canvas, paragraphblock, pagewidth, molecule, tid, indent, attribute0, tf.get(Integer.parseInt(attribute0.substring(4,7))));
+ blockheight=(float)ParagraphBlock.line.get(tid).size()*(float)fontsize;
+ blockwidth=ParagraphBlock.linelength.get(tid);
+ blockdepth=0.0f;
+
+ maxheight = Math.max(maxheight,(float)ParagraphBlock.line.get(tid).size()*(float)fontsize );
+ int numline=ParagraphBlock.line.get(tid).size();
+ for (i=0;i<=numline-1;i++){
+ if (!(ParagraphBlock.line.get(tid).get(i).equals(""))){
+ subblock.add(ParagraphBlock.line.get(tid).get(i));
+ subblockxpos.add(ParagraphBlock.xpos.get(tid).get(i)+referencex);
+ subblockypos.add(ParagraphBlock.ypos.get(tid).get(i)+referencey);
+ subblockattribute.add(ParagraphBlock.attribute.get(tid).get(i));
+ ParagraphBlock.xpos.get(tid).set(i,ParagraphBlock.xpos.get(tid).get(i)+referencex);
+ ParagraphBlock.ypos.get(tid).set(i,ParagraphBlock.ypos.get(tid).get(i)+referencey);
+
+ if (i==0 && !ParagraphBlock.newfirstline.get(tid)){
+ synchronized(this){superblock.add(tid,subblock,subblockxpos, subblockypos, subblockattribute, ParagraphBlock.tlinelength.get(tid).get(i), (float) fontsize, 0.0f,'x', 0);}
+ }else {
+ synchronized(this){
+ if (subblock.size()>0 && SuperBlock.blockatom.get(tid*1000+SuperBlock.superblocklinenumber.get(tid)).size()>0){
+ superblock.create(tid);
+ superblock.add(tid,subblock,subblockxpos, subblockypos, subblockattribute, ParagraphBlock.linelength.get(tid), (float) fontsize, 0.0f, 'x',0);
+ } else if (subblock.size()>0) {
+ superblock.add(tid,subblock,subblockxpos, subblockypos, subblockattribute, ParagraphBlock.linelength.get(tid), (float) fontsize, 0.0f, 'x',0);
+ }
+ }
+ }
+
+ subblock.clear();
+ subblockxpos.clear();subblockypos.clear();subblockattribute.clear();
+ }
+ }
+ if (numline > 0) {indent=ParagraphBlock.xpos.get(tid).get(numline-1)+ParagraphBlock.width.get(tid).get(numline-1)-referencex;
+ if (indent >= pagewidth && ii<nummolecule-1){
+ referencey=ParagraphBlock.ypos.get(tid).get(numline-1)+(float)fontsize;
+ indent=0;
+ newline=true;
+
+ }else {
+ referencey=ParagraphBlock.ypos.get(tid).get(numline-1);
+ newline=false;
+ }};
+ }
+ }}
+ thisypos.put(tid, referencey+maxdepth+Header.linegap);
+ error.put(tid, false);
+ errormessage.put(tid, "");
+ };
+ }
+
+
+ \ No newline at end of file
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetitle.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetitle.java
new file mode 100644
index 0000000000..7736a52a90
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsetitle.java
@@ -0,0 +1,221 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Typeface;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.SparseBooleanArray;
+
+public class Parsetitle {
+
+ public static volatile SparseArray<Float> thisypos = new SparseArray<Float>();
+ public static volatile SparseBooleanArray error = new SparseBooleanArray();
+ public static volatile SparseArray<String> errormessage = new SparseArray<String>();
+
+ public void parsetitle(Canvas canvas, Block block, ParagraphBlock paragraphblock, Integer tid, Integer containerwidth, Integer containerheight, int superblocknumber, SuperBlock superblock,
+ SparseArray<ArrayList<String>> superblockline, SparseIntArray superblocknumline, SparseIntArray superblockstartline, SparseIntArray superblockendline, float ypos, ArrayList<Typeface> tf , String attribute1){
+
+ Parsetext title = new Parsetext();
+ Character type=null;
+ int j=-1;
+ int fontsize=Header.fontsize;
+ int tid2=tid*1000;
+ int viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin;
+ float ypos2=ypos;
+ Boolean endofline=false;
+ String sfontsize="";
+
+ String attribute2="1"+attribute1.substring(1);
+
+
+ for (int i=0;i<=superblockline.get(superblocknumber).size()-1;i++){
+ endofline=false;
+ String line=superblockline.get(superblocknumber).get(i);
+ line=line.trim();
+ while(!endofline){
+ if (line.substring(0,6).equals("!title")){type='t';line=line.substring(6).trim();j=line.indexOf("!!");}
+ else if (line.substring(0,7).equals("!author")){type='a';line=line.substring(7).trim();j=line.indexOf("!!");ypos=ypos+5;thisypos.put(tid,ypos);}
+ else if (line.substring(0,12).equals("!affiliation")){type='f';line=line.substring(12).trim();j=line.indexOf("!!");ypos=ypos+0;thisypos.put(tid,ypos);}
+ else if (line.substring(0,6).equals("!email")){type='e';line=line.substring(6).trim();j=line.indexOf("!!");ypos=ypos+0;thisypos.put(tid,ypos);}
+ else if (line.substring(0,5).equals("!date")){type='d';line=line.substring(5).trim();j=line.indexOf("!!");ypos=ypos+0;thisypos.put(tid,ypos);}
+ else if (line.substring(0,5).equals("!text")){type='x';line=line.substring(5).trim();j=line.indexOf("!!");ypos=ypos+0;thisypos.put(tid,ypos);}
+ else if (line.substring(0,7).equals("!vspace")){
+ int ij=line.indexOf("}",7);
+ float vspace=Integer.parseInt(line.substring(8,ij));
+ ypos=ypos+vspace;
+ line=line.substring(ij+1); line=line.trim();
+ thisypos.put(tid,ypos);
+ }
+ else if (type=='t'){
+ fontsize=(int)(Header.fontsize*Header.sizefactor.get("Huge"));if (fontsize>Header.maxfontsize){fontsize=Header.maxfontsize;};
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ line=line.trim();
+ line="$!shadow{!mbox{"+line+"}}$";
+ title.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, line, Header.leftsidemargin , ypos, tf, attribute2, attribute1, false, 0.0f);
+
+ float adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(i))/2;
+ for (int ii=0;ii<=SuperBlock.blockxpos.get(i+tid2).size()-1;ii++){
+ SuperBlock.blockxpos.get(i+tid2).set(ii,SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx);
+ }
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ ypos=Parsetext.thisypos.get(tid);
+ thisypos.put(tid,ypos);
+ endofline=true;
+ }
+ else if (type=='a'){
+ fontsize=(int)(Header.fontsize*Header.sizefactor.get("Large"));if (fontsize>Header.maxfontsize){fontsize=Header.maxfontsize;};
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ line=line.trim();
+ line="$!bf{!mbox{"+line+"}}$";
+ title.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, line, Header.leftsidemargin , ypos, tf, attribute2, attribute1, false, 0.0f);
+
+ float adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(i))/2;
+ for (int ii=0;ii<=SuperBlock.blockxpos.get(i+tid2).size()-1;ii++){
+ SuperBlock.blockxpos.get(i+tid2).set(ii,SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx);
+ }
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ ypos=Parsetext.thisypos.get(tid);
+ thisypos.put(tid,ypos);
+ endofline=true;
+ }
+ else if (type=='f'){
+ fontsize=Header.fontsize;
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ line=line.trim();
+ line="$!it{!mbox{"+line+"}}$";
+ title.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, line, Header.leftsidemargin , ypos, tf, attribute2, attribute1, false, 0.0f);
+
+ float adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(i))/2;
+ for (int ii=0;ii<=SuperBlock.blockxpos.get(i+tid2).size()-1;ii++){
+ SuperBlock.blockxpos.get(i+tid2).set(ii,SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx);
+ }
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ ypos=Parsetext.thisypos.get(tid);
+ thisypos.put(tid,ypos);
+ endofline=true;
+ }
+ else if (type=='e'){
+ fontsize=Header.fontsize;
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ line=line.trim();
+ line="$!mo{!mbox{"+line+"}}$";
+ title.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, line, Header.leftsidemargin , ypos, tf, attribute2, attribute1, false, 0.0f);
+
+ float adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(i))/2;
+ for (int ii=0;ii<=SuperBlock.blockxpos.get(i+tid2).size()-1;ii++){
+ SuperBlock.blockxpos.get(i+tid2).set(ii,SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx);
+ }
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ ypos=Parsetext.thisypos.get(tid);
+ thisypos.put(tid,ypos);
+ endofline=true;
+ }
+ else if (type=='d'){
+ fontsize=Header.fontsize;
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ line=line.trim();
+ line="$!mo{!mbox{"+line+"}}$";
+ title.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, line, Header.leftsidemargin , ypos, tf, attribute2, attribute1, false, 0.0f);
+
+ float adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(i))/2;
+ for (int ii=0;ii<=SuperBlock.blockxpos.get(i+tid2).size()-1;ii++){
+ SuperBlock.blockxpos.get(i+tid2).set(ii,SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx);
+ }
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ ypos=Parsetext.thisypos.get(tid);
+ thisypos.put(tid,ypos);
+ endofline=true;
+ }
+ else if (type=='x'){
+ fontsize=Header.fontsize;
+ sfontsize=Integer.toString(fontsize);
+ if (sfontsize.length()==1){
+ attribute1 = "000"+sfontsize+attribute1.substring(4);
+ attribute2 = "100"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==2){
+ attribute1 = "00"+sfontsize+attribute1.substring(4);
+ attribute2 = "10"+sfontsize+"002"+attribute2.substring(7);
+ } else if (sfontsize.length()==3){
+ attribute1 = "0"+sfontsize+attribute1.substring(4);
+ attribute2 = "1"+sfontsize+"002"+attribute2.substring(7);
+ }
+ line=line.trim();
+ line="$!mbox{"+line+"}$";
+ title.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, line, Header.leftsidemargin , ypos, tf, attribute2, attribute1, false, 0.0f);
+
+ float adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(i))/2;
+ for (int ii=0;ii<=SuperBlock.blockxpos.get(i+tid2).size()-1;ii++){
+ SuperBlock.blockxpos.get(i+tid2).set(ii,SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx);
+ }
+ error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, Parsetext.errormessage.get(tid)); return;};
+ ypos=Parsetext.thisypos.get(tid);
+ thisypos.put(tid,ypos);
+ endofline=true;
+ }
+ if(j==0){endofline=true;}
+ }
+ thisypos.put(tid,ypos+20);
+ }
+ SuperBlock.titleendline.put(tid, SuperBlock.superblocklinenumber.get(tid));
+ SuperBlock.titleheight.put(tid,thisypos.get(tid)-ypos2+SuperBlock.superblocklineheight.get(0).get(0)-SuperBlock.superblocklinedepth.get(0).get(0));
+ }
+ }
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseverbatim.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseverbatim.java
new file mode 100644
index 0000000000..1d4004b592
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parseverbatim.java
@@ -0,0 +1,68 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.util.SparseArray;
+import android.util.SparseBooleanArray;
+
+public class Parseverbatim {
+
+ public static volatile SparseArray<Float> thisypos = new SparseArray<Float>();
+ public static volatile SparseBooleanArray error = new SparseBooleanArray();
+ public static volatile SparseArray<String> errormessage = new SparseArray<String>();
+
+ public void parseverbatim(Canvas canvas, Block block, Integer tid, Integer containerwidth, Integer containerheight, int superblocknumber, SuperBlock superblock, SparseArray<ArrayList<String>> superblockline,float referencex, float referencey, ArrayList<Typeface> tf ,String attribute1) {
+
+ int fontsize = Header.fontsize;
+
+ int ii;
+ error.put(tid,false);
+ errormessage.put(tid,"");
+
+ Paint textpaint = new Paint();
+ Rect textbounds = new Rect();
+ textpaint.setTextSize(Header.fontsize);
+ textpaint.setTypeface(tf.get(Header.defaultfont));
+ textpaint.getTextBounds("A",0,"A".length(),textbounds);
+ referencey=referencey+textbounds.height()+Header.linegap;
+
+ ArrayList<String> subblock = new ArrayList<String>();
+ ArrayList<Float> subblockxpos = new ArrayList<Float>();
+ ArrayList<Float> subblockypos = new ArrayList<Float>();
+ ArrayList<String> subblockattribute = new ArrayList<String>();
+
+ textpaint.getTextBounds("j",0,"j".length(),textbounds);
+ for (ii=0;ii<=superblockline.get(superblocknumber).size()-1;ii++){ // First parse
+ synchronized(this){superblock.create(tid);}
+ subblock.add(superblockline.get(superblocknumber).get(ii).substring(0,superblockline.get(superblocknumber).get(ii).length()-2));
+ textpaint.getTextBounds(subblock.get(0),0,subblock.get(0).length(),textbounds);
+ subblockxpos.add((float) Header.leftsidemargin);
+ subblockypos.add(referencey);
+ subblockattribute.add(attribute1);
+
+ referencey=referencey+(float)fontsize;
+ synchronized(this){
+ superblock.add(tid,subblock,subblockxpos, subblockypos, subblockattribute,(float) textbounds.width() , (float) fontsize, (float)textbounds.bottom, 'v',0);}
+ subblock.clear();
+ subblockxpos.clear();subblockypos.clear();subblockattribute.clear();
+ }
+
+ thisypos.put(tid, referencey-(float)fontsize+textbounds.bottom);
+ error.put(tid, false);
+ errormessage.put(tid, "");
+ };
+}
+
+
+ \ No newline at end of file
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Separatetext.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Separatetext.java
new file mode 100644
index 0000000000..2a0e6534a0
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Separatetext.java
@@ -0,0 +1,48 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+
+public class Separatetext {
+
+ int nummolecule = 0;
+
+ ArrayList<String> molecule = new ArrayList<String>();
+ ArrayList<Integer> moleculelength = new ArrayList<Integer>();
+ ArrayList<Boolean> text = new ArrayList<Boolean>();
+ boolean tabular = false;
+ boolean equation = false;
+ boolean eqnarray = false;
+ boolean center = false;
+ boolean graphics = false;
+
+ public void separatetext(String line) {
+
+
+ boolean endofline = false;
+
+ int i2=0;
+ int i=0;
+
+ line=line.trim();
+
+ endofline=false;
+ for (int j=0; !endofline && j < 1000; j++){
+ i=line.indexOf('$');
+ if(i==-1){molecule.add(line); text.add(true); nummolecule++; endofline=true;}
+ else {
+ i2=line.indexOf('$',i+1);
+ if (i > 0) {molecule.add(line.substring(0,i)); text.add(true); nummolecule++; };
+ molecule.add(line.substring(i+1,i2)); text.add(false); nummolecule++;
+ line=line.substring(i2+1);line=line.trim();
+ if (line.length()==0){ endofline=true;};
+ }
+ }}
+ }
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Source.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Source.java
new file mode 100644
index 0000000000..96d2aa9c54
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Source.java
@@ -0,0 +1,290 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+
+public class Source {
+
+
+ public static final ArrayList<String> lineblock = new ArrayList<String>();
+
+ public void content (){
+
+ lineblock.add("!begin{title}"
+ + "!title Brief Introduction to HKtex (Version 2.03)!!"
+ + "!author by Kwanleung Tse!!"
+ + "!email email: worker4math@gmail.com!!"
+ + "http://www.worker4math.fatcow.com!!"
+ + "!date 25th September, 2014!!"
+ + "!text (Notice : This brief introduction is taken from Version 2.00.!!"
+ + "Updated introduction will be released afterward.)!!"
+ + "!end{title}"
+ + "!end{lineblock}");
+ lineblock.add("!ss"
+ + "!noindent $!underlinetext{!large{!bf{!navy{1. Introduction}}}}$ HKtex is a formula parsing software written"
+ + " for mobile phones and tablets using Android operating system. It is developed using Google Eclipse and thus"
+ + " allows app developers and book writers to import the files easily. There is now a clear distinction"
+ + " between books and apps. It is difficult to add interactive elements into books written with"
+ + " Tex/Latex and, in creating apps, there is no comprehensive formula parsing software easily"
+ + " imported by Eclipse. The purpose of HKtex is to remove this distinction. HKtex will, intentionally and eventually, enable"
+ + " developers to create apps which are also complete books by themself, and writers to write books which contain interactive examples, exercises and graphics. In writing HKtex, i understand"
+ + " the popularity of Tex/Latex and thus make HKtex as compatible to Tex/Latex as possible. However,"
+ + " some differences exist. I will try to explain them in this document. Before moving to next section,"
+ + " i wish to emphasize that this is an ongoing endeavour and is by no mean a completed work. However,"
+ + " i feel that it is presentable and thus release it to solicit feedback to make it better. !! "
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{20}"
+ + "!noindent $!underlinetext{!large{!bf{!navy{2. Program structure}}}}$ HKtex is written with java. Since there are"
+ + " many situations to consider, this program is inherently difficult. Avoid"
+ + " changing the files, except the four input files: MainActivity.java"
+ + " ,Header.java, Source.java, and Symbol.java. !!"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{10}"
+ + " The content of the document is stored in Content.java. The content is broken up into blocks. Your document can be contained inside one"
+ + " huge block or many small blocks. Breaking up into smaller blocks allow you to parse a particular"
+ + " block. Each block begins with !begin{blockline} and ends with !end{blockline}. The !begin{blockline}"
+ + " command can be omitted but the !end{blockline} command must be there. Besides, you can not begin an"
+ + " environment, e.g. eqnarray, in one block and end the environment in another block. "
+ + " The Header.java file contains page layout informations, for example, margins, gap width between lines, etc."
+ + " You can have more than one Header.java file and use different one in different situation."
+ + " The Symbol.java file contains symbols. Comment out those symbols that are not used for the purpose of efficiency. !!"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{20}"
+ + "!noindent $!underlinetext{!large{!bf{!navy{3. Environment}}}}$ There are seven different environments in HKtex: text, eqnarray,"
+ + " equation, table, verbatim, graphics and graphicstable. By default, the environment is text and no further specification is needed. To enclose"
+ + " a different environment within text, use the begin and end commands. For example, the following lines : !!"
+ + "!vspace{10}"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!begin{verbatim}"
+ + "!begin{eqnarray}{rcl}!!"
+ + "y&=&!int!^{x!_{2}}!_{x!_{1}} 2xdx !!"
+ + "&=& x!_{2}!^{2} - x!_{1}!^{2} !!"
+ + "!end{eqnarray}!!"
+ + "!end{verbatim}"
+ + "!vspace{10}"
+ + "!noindent will give : !!"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!begin{eqnarray}{rcl}"
+ + "y&=&!int!^{x!_{2}}!_{x!_{1}} 2xdx !!"
+ + "&=& x!_{2}!^{2} - x!_{1}!^{2} !!"
+ + "!end{eqnarray}"
+ + "!vspace{10}"
+ + "Inside eqnarray, equation and table environment, the lines are automatically centered. HKtex does not provide"
+ + " other alignment. However, for text environment, the following alignment are possible : !!"
+ + "!vspace{10}"
+ + "!begin{center}"
+ + "centered text !!"
+ + "!end{center}"
+ + "!noindent left-aligned text !!"
+ + "!begin{alignright}"
+ + "right-aligned text!!"
+ + "!end{alignright}"
+ + "!noindent HKtex does not hyphenate the center-aligned or right-aligned text.!!"
+ + "!vspace{10}"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "To change the fontsize, type !Huge, !huge, !Large, !large, !normalsize, !small, !scriptsize or !tiny at the"
+ + " beginning of line, as in the following :!!"
+ + "!Huge"
+ + "!noindent Huge text!!"
+ + "!huge"
+ + "!noindent huge text!!"
+ + "!Large"
+ + "!noindent Large text!!"
+ + "!large"
+ + "!noindent large text!!"
+ + "!normalsize"
+ + "!noindent normalsize text!!"
+ + "!small"
+ + "!noindent small text!!"
+ + "!scriptsize"
+ + "!noindent scriptsize text!!"
+ + "!tiny"
+ + "!noindent tiny text!!"
+ + "!normalsize"
+ + "The default font size is defined in header.java. It cannot be bigger than the maximum size, also specified in"
+ + " header.java. However, since the maximum can be adjusted. The size is in fact not bounded.!!"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{10}"
+ + "The font type can be specified by the command !ss, !it, !bf, !mo, also at the beginning of the line. They stand for"
+ + " serif, italic, bold, and mono. The next one is !asana, used for typing symbol. The last one is !rm used only for"
+ + " trigonometric, logarithmic and hyperbolic functions. Do not specify the last two.!!"
+ + "!it"
+ + "!noindent italic text!!"
+ + "!bf"
+ + "!noindent bold text!!"
+ + "!mo"
+ + "!noindent monospace text!!"
+ + "!ss"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{20}"
+ + "!noindent $!underlinetext{!large{!bf{!navy{4. Table}}}}$ The command for constructing a table is similar to Tex/Latex. However,"
+ + " the table in HKtex is more primitive. It does not provide table within table. The following is a simple example :!!"
+ + "!vspace{10}"
+ + "!begin{table}{|r|c|l|}!hline"
+ + "!begin{caption}"
+ + "Table 1. Infinite products of hyperbolic functions!!"
+ + "!end{caption}"
+ + "&Hyperbolic functions& Infinite Products!!!hline!hline"
+ + "1&!sinh z& z!bigprod!^{!infty}!_{k=1}!lparen{1 + !frac{z!^{2}}{k!^{2}!pi!_{2}}}!!!hline "
+ + "2&!cosh z&!bigprod!^{!infty}!_{k=1}!lbrack{1 + !frac{4z!^{2}}{(2k-1)!^{2}!pi!_{2}}}!!!hline"
+ + "!end{table}"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{10}"
+ + "!noindent Using tabular within table is allowed, as demonstrated in the following example:!!"
+ + "!vspace{10}"
+ + "!begin{table}{|r|l|}!hline"
+ + "& Laplace's equations!!!hline!hline"
+ + "Cartesian Coordinates& !tabular{l}{!line{{!frac{!partial!^{2}u}{!partial x!^{2}} + !frac{!partial!^{2}u}{!partial y!^{2}} "
+ + "=}}!line{{!hspace{10} !frac{!partial!^{2}v}{!partial x!^{2}} + !frac{!partial!^{2}v}{!partial y!^{2}} = 0}}} !!!hline"
+ + "Polar Coordinates& !tabular{l}{!line{{r!frac{!partial}{!partial r}!lparen{r!frac{!partial u}{!partial r}}+"
+ + "!frac{!partial!^{2}u}{!partial!vartheta!^{2}} =}}!line{{!hspace{10}r!frac{!partial}{!partial r}"
+ + "!lparen{r!frac{!partial v}{!partial r}}+!frac{!partial!^{2}v}{!partial!vartheta!^{2}} = 0}}}!!!hline"
+ + "!begin{caption}"
+ + "Table 2. Laplace's equations!!"
+ + "!end{caption}"
+ + "!end{table}"
+ + "!noindent Note that there is also no tabular within tabular. !!"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "HKtex does not have fbox, this can be compensated somewhat by using table and draws only the lines on the outer boundaries. For example:!!"
+ + "!begin{table}{|c|}!hline"
+ + "The Jacobian of a transformation is :!!"
+ + "!frac{!partial(x,y)}{!partial(u,v)}=!vert{!tabular{cc}{!line{{!frac{!partial x}{!partial u}}{!frac{!partial x}{!partial v}}}!line{{!frac{!partial y}{!partial u}}{!frac{!partial y}{!partial v}}}}}!!!hline"
+ + "!end{table}"
+ + "Inside table, the default is symbol mode. If text mode is needed, enclosed it within a mbox.!!"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{10}"
+ + "!noindent $!underlinetext{!large{!bf{!navy{5. Eqnarray and equation}}}}$ Equation array is like table except that the font"
+ + " is italic by default. Besides, neither vertical line nor horizontal line will be drawn. Equation is an eqnarray"
+ + " with just one line. You can specified an equation just like an eqnarray. This is allowed in HKtex. The following"
+ + " provides a few examples of equation and eqnarray. !!"
+ + "!vspace{10}"
+ + "!noindent Lagrange's Expansion Formula :!!"
+ + "!begin{equation}"
+ + "x=x!_{0}+!bigbigsum!^{!infty}!_{k=1}!frac{(y-y!_{0})!^{k}}{k!exclam}!lbrace{!frac{d!^{k-1}}{dx!^{k-1}}"
+ + "!lparen{g'(x)!lbrace{!frac{x-x!_{0}}{f(x)-y!_{0}}}!^{k}}}!_{x=x!_{0}}!!"
+ + "!end{equation}"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{10}"
+ + "!noindent Continued fraction :!!"
+ + "!Large"
+ + "!begin{equation}"
+ + "f=b!_{0}+!frac{a!_{1}}{b!_{1}+!frac{a!_{2}}{b!_{2}+!frac{a!_{3}}{b!_{3}+!frac{a!_{4}}{b!_{4}+...}}}}!!"
+ + "!end{equation}"
+ + "!normalsize"
+ + "!begin{center}"
+ + "(arbitrary pagebreak here !)!!"
+ + "!end{center}"
+ + "!pagebreak"
+ + "!noindent Algebraic equation :!!"
+ + "!huge"
+ + "!begin{equation}"
+ + "y= !lbrace{!tabular{lr}{!line{{0}{!hspace{20}x = 1}}!line{{!frac{!vert{x-1}}{!fourthroot{!vert{x-1}!^{3}}}}{x !ne 1}}}}!.!!"
+ + "!end{equation}"
+ + "!normalsize"
+ + "!noindent Fluid equations :!!"
+ + "!begin{eqnarray}{rclr}"
+ + "!nabla !cdot !bf{U} &=& 0 & !hspace{50} !mbox{continuity}!!"
+ + "!underbrace{!frac{DU!_{j}}{Dt}}!_{!tiny{!lparen{!tabular{c}{!line{{time}}!line{{derivative}}}}}} &=&"
+ + "-!overbrace{!frac{1}{!rho}!nabla p}!^{!tiny{!lparen{!tabular{c}{!line{{pressure}}!line{{term}}}}}} +"
+ + "!underbrace{!nu!nabla!^{2}!bf{U}}!_{!tiny{!lparen{!tabular{c}{!line{{diffusion}}!line{{term}}}}}} & !mbox{momentum}!!"
+ + "!end{eqnarray}"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{10}"
+ + "!noindent $!underlinetext{!large{!bf{!navy{6. Graphics and Graphicstable}}}}$ Figures can be included within the !begin{graphics} and !end{graphics} commands.!!"
+ + "!begin{graphics}"
+ + "leftarrow.png!!"
+ + "!begin{caption}"
+ + "Figure 1. The left arrow. !!"
+ + "!end{caption}"
+ + "!end{graphics}"
+ + "!vspace{10}"
+ + " If there are more than one figures, then the !begin{graphicstable} and !end{graphicstable} commands can be used. !!"
+ + "!begin{graphicstable}{cc}"
+ + "!begin{caption}"
+ + "Figure 2. The left arrow, the right arrow, !!"
+ + " the left end arrow and the right end arrow. !!"
+ + "!end{caption}"
+ + "leftarrow.png & rightarrow.png!!"
+ + "leftendarrow.png & rightendarrow.png!!"
+ + "!end{graphicstable}"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{10}"
+ + "!noindent $!underlinetext{!large{!bf{!navy{7. Color}}}}$ Color can only be specified within each environment (except verbatim)."
+ + " The following table is a list of color predefined in HKtex. You can easily add another color by adding another entry in the Color.java file."
+ + " The name should not be the same as any other command name. For example the color tan is missing because it has the same name as the "
+ + " trignometric function tan.!!"
+ + "!tiny"
+ + "!vspace{10}"
+ + "!begin{table}{|c|c|c|c|c|c|}!hline"
+ + "!begin{caption}"
+ + "Table 3. Color table!!"
+ + "!end{caption}"
+ + "!aliceblue{aliceblue}&!antiquewhite{antiquewhite}&!aquamarine{aquamarine}&!aure{aure}&!banana{banana}&!beige{beige} !!!hline"
+ + "!blanchedalmond{blanchedalmond} &!blueviolet{blueviolet}&!blue{blue}&!brick{brick}&!brown{brown}&!burlywood{burlywood}!!!hline"
+ + "!cadetblue{cadetblue}&!cadmiumorange{cadmiumorange}&!cadmiumyellow{cadmiumyellow}&!carrot{carrot}&!black{black}&!burntumber{burntumber}!!!hline"
+ + "!chocolate{chocolate}&!cobalt{cobalt}&!cobaltgreen{cobaltgreen}&!coldgrey{coldgrey}&!cornflowerblue{cornflowerblue} &!cornsilk{cornsilk} !!!hline"
+ + "!crimson{crimson}&!cyan{cyan}&!darkgoldenrod{darkgoldenrod}&!darkgray{darkgray}&!darkgreen{darkgreen}&!darkkhaki{darkkhaki}!!!hline"
+ + "!bisque{bisque}&!burntsienna{burntsienna}&!chartreuse{chartreuse}&!coral{coral}&!darkolivegreen{darkolivegreen} &!darkorange{darkorange} !!!hline"
+ + "!darkorchid{darkorchid} &!darksalmon{darksalmon}&!darkseagreen{darkseagreen}&!darkslateblue{darkslateblue}&!darkslategray{darkslategray}&!darkturquoise{darkturquoise}!!!hline "
+ + "!ddarkviolet{ddarkviolet}&!deeppink{deeppink}&!deepskyblue{deepskyblue}&!dimgray{dimgray}&!dodgerblue{dodgerblue}&!eggshell{eggshell}!!!hline"
+ + "!emeraldgreen{emeraldgreen}&!firebrick{firebrick}&!flesh{flesh}&!floralwhite{floralwhite}&!forestgreen{forestgreen}&!gainsboro{gainsboro}!!!hline"
+ + "!ghostwhite{ghostwhite}&!gold{gold}&!goldenrod{goldenrod}&!gray{gray}&!green{green}&!greenyellow{greenyellow}!!!hline"
+ + "!honeydew{honeydew}&!hotpink{hotpink}&!indianred{indianred}&!indigo{indigo}&!ivory{ivory}&!ivoryblack{ivoryblack}!!!hline"
+ + "!khaki{khaki}&!lavender{lavender}&!lavenderblush{lavenderblush}&!lawngreen{lawngreen}&!lemonchiffon{lemonchiffon}&!lightblue{lightblue}!!!hline"
+ + "!lightcoral{lightcoral}&!lightcyan{lightcyan}&!lightgrey{lightgrey}&!lightgoldenrod{lightgoldenrod}&!lightgoldenrodyellow{lightgoldenrodyellow}&!lightpink{lightpink}!!!hline"
+ + "!lightsalmon{lightsalmon}&!lightseagreen{lightseagreen}&!lightskyblue{lightskyblue}&!lightslateblue{lightslateblue}&!lightslategray{lightslategray}&!lightsteelblue{lightsteelblue}!!!hline"
+ + "!lightyellow{lightyellow}&!limegreen{limegreen}&!linen{linen}&!magenta{magenta}&!manganeseblue{manganeseblue}&!maroon{maroon}!!!hline"
+ + "!mediumorchid{mediumorchid}&!mediumpurple{mediumpurple}&!mediumseagreen{mediumseagreen}&!mediumslateblue{mediumslateblue}&!mediumspringgreen{mediumspringgreen}&!mediumturquoise{mediumturquoise}!!!hline"
+ + "!mediumvioletred{mediumvioletred}&!melon{melon}&!midnightblue{midnightblue}&!mint{mint}&!mintcream{mintcream}&!mistyrose{mistyrose}!!!hline"
+ + "!moccasin{moccasin}&!navajowhite{navajowhite}&!navy{navy}&!oldlace{oldlace}&!olivedrab{olivedrab}&!olive{olive}!!!hline"
+ + "!orange{orange}&!orangered{orangered}&!orchid{orchid}&!palegoldenrod{palegoldenrod}&!palegreen{palegreen}&!palevioletred{palevioletred}!!!hline"
+ + "!paleturquoise{paleturquoise}&!papayawhip{papayawhip}&!peachpuff{peachpuff}&!peacock{peacock}&!pink{pink}&!plum{plum}!!!hline"
+ + "!powderblue{powderblue}&!purple{purple}&!raspberry{raspberry}&!rawsienna{rawsienna}&!red{red}&!royalblue{royalblue}!!!hline"
+ + "!rosybrown{rosybrown}&!salmon{salmon}&!sandybrown{sandybrown}&!sapgreen{sapgreen}&!seashell{seashell}&!sepia{sepia}!!!hline"
+ + "!sienna{sienna}&!silver{silver}&!skyblue{skyblue}&!slateblue{slateblue}&!slategray{slategray}&!snow{snow}!!!hline"
+ + "!springgreen{springgreen}&!steelblue{steelblue}&!teal{teal}&!thistle{thistle}&!tomato{tomato}&!turquoise{turquoise}!!!hline"
+ + "!turquoiseblue{turquoiseblue}&!violet{violet}&!violetred{violetred}&!warmgrey{warmgrey}&!wheat{wheat}&!white{white}!!!hline"
+ + "!whitesmoke{whitesmoke}&!yellow{yellow}&&&&!!!hline"
+ + "!end{table}"
+ + "!normalsize"
+ + "!vspace{10}"
+ + "!noindent If table pass beyond the bottom of the view container, it will be move to the next one. However, if"
+ + " the scrollview in Header.java is specified as true, the table will not be moved.!!"
+ + "!end{lineblock}");
+ lineblock.add("!begin{lineblock}"
+ + "!vspace{10}"
+ + "!noindent $!underlinetext{!large{!bf{!navy{8. Math Symbols}}}}$ There are over one thousand symbols in HKtex corresponding to"
+ + " the asana-math font with four unicode digits. Besides, common trigonometric, logarithmic, hyperbolic functions"
+ + " and limit are regarded as symbol. They are classified in different types for the purpose of putting the superscript"
+ + " and subscript. Not every symbol has superscript nor subscript. For example, if you assign a superscript to underbrace,"
+ + " the program will stop parsing and an error message will be shown. Refer to symbol.java for the avialable symbols."
+ + " For optimization, uncomment any symbol that is needed, and comment out any symbol that is not needed. !!"
+ + "!vspace{10}"
+ + "!noindent $!underlinetext{!large{!bf{!navy{9. Final Comment}}}}$ HKtex is very much an ongoing endeavour. A huge amount"
+ + " of work is waiting to be done, e.g. increasing its efficiency and making it more compatible with Tex/Latex."
+ + " If you have any comment that are helpful to this course, please"
+ + " don't hesitate to contact me. I hope my effort is helpful to you and thank you for your attention. !!"
+ + "!end{lineblock}");
+ }
+ }
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/SuperBlock.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/SuperBlock.java
new file mode 100644
index 0000000000..c51f20ead6
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/SuperBlock.java
@@ -0,0 +1,134 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.ArrayList;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+
+public final class SuperBlock {
+
+ public static volatile SparseArray<ArrayList<Float>> superblocklinewidth = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> superblocklineheight = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> superblocklinedepth = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Character>> superblocktype = new SparseArray<ArrayList<Character>>();
+ public static volatile SparseArray<ArrayList<String>> blockatom = new SparseArray<ArrayList<String>>();
+ public static volatile SparseArray<ArrayList<Float>> blockxpos = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<Float>> blockypos = new SparseArray<ArrayList<Float>>();
+ public static volatile SparseArray<ArrayList<String>> blockattribute = new SparseArray<ArrayList<String>>();
+ public static volatile SparseArray<ArrayList<Integer>> blockcolumnnum = new SparseArray<ArrayList<Integer>>();
+ public static volatile SparseArray<Float> ypos = new SparseArray<Float>();
+ public static volatile SparseIntArray superblocklinenumber = new SparseIntArray();
+
+ public static volatile SparseIntArray tablenumber = new SparseIntArray();
+ public static volatile SparseIntArray tablestartline = new SparseIntArray();
+ public static volatile SparseIntArray tableendline = new SparseIntArray();
+ public static volatile SparseArray<Float> tableheight = new SparseArray<Float>();
+ public static volatile SparseIntArray titlenumber = new SparseIntArray();
+ public static volatile SparseIntArray titlestartline = new SparseIntArray();
+ public static volatile SparseIntArray titleendline = new SparseIntArray();
+ public static volatile SparseArray<Float> titleheight = new SparseArray<Float>();
+ public static volatile SparseArray<ArrayList<Integer>> pagebreak = new SparseArray<ArrayList<Integer>>();
+
+ public void init(int tid){
+ synchronized(this){
+ superblocklinewidth.put(tid,new ArrayList<Float>());
+ superblocklineheight.put(tid,new ArrayList<Float>());
+ superblocklinedepth.put(tid,new ArrayList<Float>());
+ superblocktype.put(tid, new ArrayList<Character>());
+ superblocklinenumber.put(tid, -1);
+
+ tablenumber.put(tid, 0);
+
+ pagebreak.put(tid, new ArrayList<Integer>());
+ return;
+ }
+}
+
+
+ public void create(int tid){
+ synchronized(this){
+
+ superblocklinenumber.put(tid,superblocklinenumber.get(tid)+1);
+
+ int tid2=tid*1000+superblocklinenumber.get(tid);
+ blockatom.put(tid2,new ArrayList<String>());
+ blockxpos.put(tid2,new ArrayList<Float>());
+ blockypos.put(tid2,new ArrayList<Float>());
+ blockattribute.put(tid2,new ArrayList<String>());
+ blockcolumnnum.put(tid2,new ArrayList<Integer>());
+ superblocklinewidth.get(tid).add(0.0f);
+ superblocklineheight.get(tid).add(0.0f);
+ superblocklinedepth.get(tid).add(0.0f);
+
+ return;
+ }
+}
+
+ public void addtable(int tid){
+ synchronized(this){
+ tablenumber.put(tid, tablenumber.get(tid)+1);
+ tablestartline.put(tid*1000+tablenumber.get(tid), -1);
+ tableendline.put(tid*1000+tablenumber.get(tid), -1);
+ tableheight.put(tid*1000+tablenumber.get(tid), 0.0f);
+ }
+ }
+
+ public void addtitle(int tid){
+ synchronized(this){
+ titlenumber.put(tid, 1);
+ titlestartline.put(tid, 0);
+ titleendline.put(tid, -1);
+ titleheight.put(tid, 0.0f);
+ }
+ }
+
+ public void add(int tid, SparseArray<ArrayList<String>> atom,
+ SparseArray<ArrayList<Float>> xpos,SparseArray<ArrayList<Float>> ypos,SparseArray<ArrayList<String>> attribute, Float tsuperblockwidth, Float tsuperblockheight, Float tsuperblockdepth, Character type, Integer columnnum) {
+ synchronized(this){
+ int tid2=tid*1000+superblocklinenumber.get(tid);
+ int i=0;
+ for (i=0;i<=atom.get(tid).size()-1;i++){
+ blockatom.get(tid2).add(atom.get(tid).get(i));
+ blockxpos.get(tid2).add(xpos.get(tid).get(i));
+ blockypos.get(tid2).add(ypos.get(tid).get(i));
+ blockattribute.get(tid2).add(attribute.get(tid).get(i));
+ blockcolumnnum.get(tid2).add(columnnum);
+ }
+ superblocklinewidth.get(tid).set(superblocklinenumber.get(tid), superblocklinewidth.get(tid).get(superblocklinenumber.get(tid))+tsuperblockwidth);
+ float maxtop=Math.max(superblocklineheight.get(tid).get(superblocklinenumber.get(tid))-superblocklinedepth.get(tid).get(superblocklinenumber.get(tid)), tsuperblockheight-tsuperblockdepth);
+ superblocklinedepth.get(tid).set(superblocklinenumber.get(tid), Math.max(superblocklinedepth.get(tid).get(superblocklinenumber.get(tid)),tsuperblockdepth));
+ superblocklineheight.get(tid).set(superblocklinenumber.get(tid),maxtop+superblocklinedepth.get(tid).get(superblocklinenumber.get(tid)));
+ superblocktype.get(tid).add(type);
+ return;
+ }
+ }
+
+ public void add(int tid, ArrayList<String> atom,
+ ArrayList<Float> xpos,ArrayList<Float> ypos,ArrayList<String> attribute, Float tsuperblockwidth, Float tsuperblockheight, Float tsuperblockdepth, Character type, Integer columnnum) {
+ synchronized(this){
+ int tid2=tid*1000+superblocklinenumber.get(tid);
+
+ for (int i=0;i<=atom.size()-1;i++){
+ blockatom.get(tid2).add(atom.get(i));
+ blockxpos.get(tid2).add(xpos.get(i));
+ blockypos.get(tid2).add(ypos.get(i));
+ blockattribute.get(tid2).add(attribute.get(i));
+ blockcolumnnum.get(tid2).add(columnnum);
+ }
+ superblocklinewidth.get(tid).set(superblocklinenumber.get(tid), superblocklinewidth.get(tid).get(superblocklinenumber.get(tid))+tsuperblockwidth);
+ float maxtop=Math.max(superblocklineheight.get(tid).get(superblocklinenumber.get(tid))-superblocklinedepth.get(tid).get(superblocklinenumber.get(tid)), tsuperblockheight-tsuperblockdepth);
+ superblocklinedepth.get(tid).set(superblocklinenumber.get(tid), Math.max(superblocklinedepth.get(tid).get(superblocklinenumber.get(tid)),tsuperblockdepth));
+ superblocklineheight.get(tid).set(superblocklinenumber.get(tid),maxtop+superblocklinedepth.get(tid).get(superblocklinenumber.get(tid)));
+ superblocktype.get(tid).add(type);
+ return;
+ }
+ }
+
+} \ No newline at end of file
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Symbol.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Symbol.java
new file mode 100644
index 0000000000..3f2c892bf4
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Symbol.java
@@ -0,0 +1,2861 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+import java.util.HashMap;
+
+public class Symbol {
+
+ public static HashMap<String, Integer> symboltype = new HashMap<String, Integer>();
+ public static HashMap<String, Integer> symbolsubtype = new HashMap<String, Integer>();
+ public static HashMap<String, String> symbolunicode = new HashMap<String, String>();
+ public static HashMap<String, String> matchsymbol = new HashMap<String, String>();
+
+public void symbol() {
+
+
+ matchsymbol.put("lparen","rparen");
+ matchsymbol.put("lbrack","rbrack");
+ matchsymbol.put("lbrace","rbrace");
+/* matchsymbol.put("lceil","rceil");
+ matchsymbol.put("lfloor","rfloor");
+ matchsymbol.put("ulcorner","urcorner");
+ matchsymbol.put("llcorner","rlcorner");
+ matchsymbol.put("lbag","rbag");
+ matchsymbol.put("lBrack","rBrack");
+ matchsymbol.put("langle","rangle");
+ matchsymbol.put("lAngle","rAngle");
+ matchsymbol.put("Lbrbrak","Rbrbrak");
+ matchsymbol.put("lgroup","rgroup");
+ matchsymbol.put("lBrace","rBrace");
+ matchsymbol.put("lParen","rParen");
+ matchsymbol.put("llparenthesis","rlparenthesis");
+ matchsymbol.put("llangle","rlangle");
+ matchsymbol.put("lbrackubar","rbrackubar");
+ matchsymbol.put("lbrackultick","rbrackultick");
+ matchsymbol.put("lbracklltick","rbracklltick");
+ matchsymbol.put("langledot","rangledot");
+ matchsymbol.put("lparenless","rparenless");
+ matchsymbol.put("lparengtr","rparengtr");
+ matchsymbol.put("lblkbrbrak","rblkbrbrak");
+ matchsymbol.put("lvzigzag","rvzigzag");
+ matchsymbol.put("Lvzigzag","Rvzigzag");
+ matchsymbol.put("lcurvyangle","rcurvyangle");
+ matchsymbol.put("lbrbrak","rbrbrak"); */
+
+
+ symboltype.put("lparen",1);
+ symboltype.put("lbrack",1);
+ symboltype.put("lbrace",1);
+/* symboltype.put("lceil",1);
+ symboltype.put("lfloor",1);
+ symboltype.put("ulcorner",1);
+ symboltype.put("llcorner",1);
+ symboltype.put("lbag",1);
+ symboltype.put("lBrack",1);
+ symboltype.put("langle",1);
+ symboltype.put("lAngle",1);
+ symboltype.put("Lbrbrak",1);
+ symboltype.put("lgroup",1);
+ symboltype.put("lBrace",1);
+ symboltype.put("lParen",1);
+ symboltype.put("llparenthesis",1);
+ symboltype.put("llangle",1);
+ symboltype.put("lbrackubar",1);
+ symboltype.put("lbrackultick",1);
+ symboltype.put("lbracklltick",1);
+ symboltype.put("langledot",1);
+ symboltype.put("lparenless",1);
+ symboltype.put("lparengtr",1);
+ symboltype.put("lblkbrbrak",1);
+ symboltype.put("lvzigzag",1);
+ symboltype.put("Lvzigzag",1);
+ symboltype.put("lcurvyangle",1);
+ symboltype.put("lbrbrak",1); */
+ symboltype.put("rparen",2);
+ symboltype.put("rbrack",2);
+ symboltype.put("rbrace",2);
+/* symboltype.put("rceil",2);
+ symboltype.put("rfloor",2);
+ symboltype.put("urcorner",2);
+ symboltype.put("lrcorner",2);
+ symboltype.put("rbag",2);
+ symboltype.put("rBrack",2);
+ symboltype.put("rangle",2);
+ symboltype.put("rAngle",2);
+ symboltype.put("Rbrbrak",2);
+ symboltype.put("rgroup",2);
+ symboltype.put("rBrace",2);
+ symboltype.put("rParen",2);
+ symboltype.put("rrparenthesis",2);
+ symboltype.put("rrangle",2);
+ symboltype.put("rbrackubar",2);
+ symboltype.put("rbrackurtick",2);
+ symboltype.put("rbracklrtick",2);
+ symboltype.put("rangledot",2);
+ symboltype.put("rparenless",2);
+ symboltype.put("rparengtr",2);
+ symboltype.put("rblkbrbrak",2);
+ symboltype.put("rvzigzag",2);
+ symboltype.put("Rvzigzag",2);
+ symboltype.put("rcurvyangle",2);
+ symboltype.put("rbrbrak",2); */
+ symboltype.put("vert",3);
+ /* symboltype.put("Vert",3);
+ symboltype.put("Vvert",3); */
+
+ // symboltype.put("overbracket",5);
+ // symboltype.put("overparen",5);
+ symboltype.put("overbrace",5);
+ // symboltype.put("underbracket",6);
+ // symboltype.put("underparen",6);
+ symboltype.put("underbrace",6);
+ symboltype.put("grave",7); symbolsubtype.put("grave",1);
+ symboltype.put("acute",7); symbolsubtype.put("acute",1);
+ symboltype.put("hat",7); symbolsubtype.put("hat",1);
+ symboltype.put("tilde",7); symbolsubtype.put("tilde",1);
+ symboltype.put("overbar",7); symbolsubtype.put("overbar",1);
+ symboltype.put("breve",7); symbolsubtype.put("breve",1);
+ symboltype.put("dot",7); symbolsubtype.put("dot",1);
+/* symboltype.put("ddot",7); symbolsubtype.put("ddot",1);
+ symboltype.put("ocirc",7); symbolsubtype.put("ocirc",1);
+ symboltype.put("check",7);symbolsubtype.put("check",1);
+ symboltype.put("not",7); symbolsubtype.put("not",1);
+ symboltype.put("leftharpoonaccent",7);symbolsubtype.put("leftharpoonaccent",2);
+ symboltype.put("rightharpoonaccent",7); symbolsubtype.put("rightharpoonaccent",2);
+ symboltype.put("vertoverlay",7); // cancel
+ symboltype.put("overleftarrow",7); symbolsubtype.put("overleftarrow",2); */
+ symboltype.put("vec",7);symbolsubtype.put("vec",2);
+ symboltype.put("dddot",7); symbolsubtype.put("dddot",2);
+/* symboltype.put("ddddot",7);symbolsubtype.put("ddddot",2);
+ symboltype.put("overleftrightarrow",7); symbolsubtype.put("overleftrightarrow",2);
+ symboltype.put("widebridgeabove",7); symbolsubtype.put("widebridgeabove",2);
+ symboltype.put("threeunderdot",8);
+ symboltype.put("underrightharpoondown",8);
+ symboltype.put("underleftharpoondown",8);
+ symboltype.put("underleftarrow",8);
+ symboltype.put("underrightarrow",8); */
+
+ symboltype.put("sqrt",9);
+ symboltype.put("cuberoot",9);
+ symboltype.put("fourthroot",9);
+
+ symboltype.put("plus",10);
+ symboltype.put("pm",10);
+ /* symboltype.put("cdotp",10);
+ symboltype.put("times",10);
+ symboltype.put("div",10);
+ symboltype.put("dagger",10);
+ symboltype.put("ddagger",10);
+ symboltype.put("smblkcircle",10);
+ symboltype.put("tieconcat",10);
+ symboltype.put("fracslash",10);
+ symboltype.put("upand",10);
+ symboltype.put("minus",10);
+ symboltype.put("mp",10);
+ symboltype.put("dotplus",10);
+ symboltype.put("divslash",10);
+ symboltype.put("smallsetminus",10);
+ symboltype.put("ast",10);
+ symboltype.put("vysmwhtcircle",10);
+ symboltype.put("vysmblkcircle",10);
+ symboltype.put("wedge",10);
+ symboltype.put("vee",10);
+ symboltype.put("cap",10);
+ symboltype.put("cup",10);
+ symboltype.put("dotminus",10);
+ symboltype.put("invlazys",10);
+ symboltype.put("wr",10);
+ symboltype.put("cupleftarrow",10);
+ symboltype.put("cupdot",10);
+ symboltype.put("uplus",10);
+ symboltype.put("sqcap",10);
+ symboltype.put("sqcup",10);
+ symboltype.put("oplus",10);
+ symboltype.put("ominus",10);
+ symboltype.put("otimes",10);
+ symboltype.put("oslash",10);
+ symboltype.put("odot",10);
+ symboltype.put("circledcirc",10);
+ symboltype.put("circleddast",10);
+ symboltype.put("circledequal",10);
+ symboltype.put("circleddash",10);
+ symboltype.put("boxplus",10);
+ symboltype.put("boxminus",10);
+ symboltype.put("boxtimes",10);
+ symboltype.put("boxdot",10);
+ symboltype.put("intercal",10);
+ symboltype.put("veebar",10);
+ symboltype.put("barwedge",10);
+ symboltype.put("barvee",10);
+ symboltype.put("smwhtdiamond",10); */
+ symboltype.put("cdot",10);
+ /* symboltype.put("star",10);
+ symboltype.put("divideontimes",10);
+ symboltype.put("ltimes",10);
+ symboltype.put("rtimes",10);
+ symboltype.put("leftthreetimes",10);
+ symboltype.put("rightthreetimes",10);
+ symboltype.put("curlyvee",10);
+ symboltype.put("curlywedge",10);
+ symboltype.put("Cap",10);
+ symboltype.put("Cup",10);
+ symboltype.put("varbarwedge",10);
+ symboltype.put("vardoublewedge",10);
+ symboltype.put("obar",10);
+ symboltype.put("bigtriangleup",10);
+ symboltype.put("triangleright",10);
+ symboltype.put("triangleleft",10);
+ symboltype.put("mdlgwhtcircle",10);
+ symboltype.put("boxbar",10);
+ symboltype.put("veedot",10);
+ symboltype.put("wedgedot",10);
+ symboltype.put("lozengeminus",10);
+ symboltype.put("concavediamond",10);
+ symboltype.put("concavediamondtickleft",10);
+ symboltype.put("concavediamondtickright",10);
+ symboltype.put("whitesquaretickleft",10);
+ symboltype.put("whitesquaretickright",10);
+ symboltype.put("typecolon",10);
+ symboltype.put("circlehbar",10);
+ symboltype.put("circledvert",10);
+ symboltype.put("circledparallel",10);
+ symboltype.put("obslash",10);
+ symboltype.put("operp",10);
+ symboltype.put("olessthan",10);
+ symboltype.put("ogreaterthan",10);
+ symboltype.put("boxdiag",10);
+ symboltype.put("boxbslash",10);
+ symboltype.put("boxast",10);
+ symboltype.put("boxcicle",10);
+ symboltype.put("boxbox",10);
+ symboltype.put("triangleserifs",10);
+ symboltype.put("hourglass",10);
+ symboltype.put("blackhourglass",10);
+ symboltype.put("shuffle",10);
+ symboltype.put("mdlgblkozenge",10);
+ symboltype.put("setminus",10);
+ symboltype.put("dsol",10);
+ symboltype.put("rsolbar",10);
+ symboltype.put("doubleplus",10);
+ symboltype.put("tripleplus",10);
+ symboltype.put("tplus",10);
+ symboltype.put("tminus",10);
+ symboltype.put("ringplus",10);
+ symboltype.put("plushat",10);
+ symboltype.put("simplus",10);
+ symboltype.put("plusdot",10);
+ symboltype.put("plussim",10);
+ symboltype.put("plussubtwo",10);
+ symboltype.put("plustrif",10);
+ symboltype.put("commaminus",10);
+ symboltype.put("minusdot",10);
+ symboltype.put("minusfdots",10);
+ symboltype.put("minusrdots",10);
+ symboltype.put("opluslhrim",10);
+ symboltype.put("oplusrhrim",10);
+ symboltype.put("vectimes",10);
+ symboltype.put("dottimes",10);
+ symboltype.put("timesbar",10);
+ symboltype.put("btimes",10);
+ symboltype.put("smashtimes",10);
+ symboltype.put("otimeslhrim",10);
+ symboltype.put("otimesrhrim",10);
+ symboltype.put("otimeshat",10);
+ symboltype.put("Otimes",10);
+ symboltype.put("odiv",10);
+ symboltype.put("triangleplus",10);
+ symboltype.put("triangleminus",10);
+ symboltype.put("triangletimes",10);
+ symboltype.put("intprod",10);
+ symboltype.put("intprodr",10);
+ symboltype.put("fcmp",10);
+ symboltype.put("amalg",10);
+ symboltype.put("capdot",10);
+ symboltype.put("barcup",10);
+ symboltype.put("barcap",10);
+ symboltype.put("capwedge",10);
+ symboltype.put("cupvee",10);
+ symboltype.put("cupovercap",10);
+ symboltype.put("cupovercup",10);
+ symboltype.put("cupbarcap",10);
+ symboltype.put("capbarcup",10);
+ symboltype.put("twocups",10);
+ symboltype.put("twocaps",10);
+ symboltype.put("closedvarcup",10);
+ symboltype.put("closedvarcap",10);
+ symboltype.put("Sqcap",10);
+ symboltype.put("Sqcup",10);
+ symboltype.put("closedvarcupsmashprod",10);
+ symboltype.put("wedgeodot",10);
+ symboltype.put("veeodot",10);
+ symboltype.put("Wedge",10);
+ symboltype.put("Vee",10);
+ symboltype.put("wedgeonwedge",10);
+ symboltype.put("veeonvee",10);
+ symboltype.put("bigslopedvee",10);
+ symboltype.put("bigslopedwedge",10);
+ symboltype.put("wedgemidvert",10);
+ symboltype.put("veemidvert",10);
+ symboltype.put("midbarwedge",10);
+ symboltype.put("midbarvee",10);
+ symboltype.put("doublebarwedge",10);
+ symboltype.put("wedgebar",10);
+ symboltype.put("wedgedoublebar",10);
+ symboltype.put("varveebar",10);
+ symboltype.put("doublebarvee",10);
+ symboltype.put("veedoublebar",10);
+ symboltype.put("dsub",10);
+ symboltype.put("rsub",10);
+ symboltype.put("eqqplus",10);
+ symboltype.put("pluseqq",10);
+ symboltype.put("interleave",10);
+ symboltype.put("nhVvert",10);
+ symboltype.put("threedotcolon",10);
+ symboltype.put("trslash",10);
+ symboltype.put("sslash",10);
+ symboltype.put("talloblong",10); */
+/* symboltype.put("octothorpe",11);
+ symboltype.put("mathdollar",11);
+ symboltype.put("percent",11);
+ symboltype.put("ampersand",11);
+ symboltype.put("period",11);
+ symboltype.put("mathslash",11);
+ symboltype.put("question",11);
+ symboltype.put("atsign",11); */
+ symboltype.put("backslash",11);
+ /* symboltype.put("sterling",11);
+ symboltype.put("yen",11);
+ symboltype.put("neg",11);
+ symboltype.put("horizbar",11);
+ symboltype.put("twolowline",11);
+ symboltype.put("enleadertwodots",11);
+ symboltype.put("unicodeellipsis",11);
+ symboltype.put("prime",11);
+ symboltype.put("dprime",11);
+ symboltype.put("trprime",11);
+ symboltype.put("backprime",11);
+ symboltype.put("backdprime",11);
+ symboltype.put("backtrprime",11);
+ symboltype.put("Exclam",11);
+ symboltype.put("qprime",11);
+ symboltype.put("euro",11);
+ symboltype.put("enclosecircle",11);
+ symboltype.put("enclosesquare",11);
+ symboltype.put("enclosediamond",11);
+ symboltype.put("enclosetriangle",11);
+ symboltype.put("Eulerconst",11);
+ symboltype.put("Planckconst",11);
+ symboltype.put("mho",11);
+ symboltype.put("Finv",11);
+ symboltype.put("Bbbpi",11);
+ symboltype.put("Game",11);
+ symboltype.put("sansLturned",11);
+ symboltype.put("sansLmirrored",11);
+ symboltype.put("Yup",11);
+ symboltype.put("mitBbbD",11);
+ symboltype.put("mitBbbd",11);
+ symboltype.put("mitBbbe",11);
+ symboltype.put("mitBbbi",11);
+ symboltype.put("mitBbbj",11);
+ symboltype.put("updownarrowbar",11);
+ symboltype.put("linefeed",11);
+ symboltype.put("carriagereturn",11);
+ symboltype.put("barovernorthwestarrow",11);
+ symboltype.put("barleftarrowrightarrowbar",11);
+ symboltype.put("acwopencirclearrow",11);
+ symboltype.put("cwopencirclearrow",11);
+ symboltype.put("nHuparrow",11);
+ symboltype.put("nHdownarrow",11);
+ symboltype.put("leftdasharrow",11);
+ symboltype.put("updasharrow",11);
+ symboltype.put("rightdasharrow",11);
+ symboltype.put("downdasharrow",11);
+ symboltype.put("leftwhitearrow",11);
+ symboltype.put("upwhitearrow",11);
+ symboltype.put("rightwhitearrow",11);
+ symboltype.put("downwhitearrow",11);
+ symboltype.put("whitearrowupfrombar",11); */
+ symboltype.put("forall",11);
+ symboltype.put("complement",11);
+ symboltype.put("exists",11);
+ symboltype.put("nexists",11);
+ symboltype.put("varnothing",11);
+ symboltype.put("increment",11);
+ symboltype.put("QED",11);
+ symboltype.put("infty",11);
+ symboltype.put("rightangle",11);
+ symboltype.put("angle",11);
+ symboltype.put("measuredangle",11);
+ symboltype.put("sphericalangle",11);
+ symboltype.put("therefore",11);
+ symboltype.put("because",11);
+/* symboltype.put("sinewave",11);
+ symboltype.put("top",11);
+ symboltype.put("bot",11);
+ symboltype.put("hermitmatrix",11);
+ symboltype.put("measuredrightangle",11);
+ symboltype.put("varlrtriangle",11);
+ symboltype.put("unicodecdots",11);
+ symboltype.put("diameter",11);
+ symboltype.put("invnot",11);
+ symboltype.put("turnednot",11);
+ symboltype.put("inttop",11);
+ symboltype.put("intbottom",11);
+ symboltype.put("lparenuend",11);
+ symboltype.put("lparenextender",11);
+ symboltype.put("lparenlend",11);
+ symboltype.put("rparenuend",11);
+ symboltype.put("rparenextender",11);
+ symboltype.put("rparenlend",11);
+ symboltype.put("lbrackuend",11);
+ symboltype.put("lbrackextender",11);
+ symboltype.put("lbracklend",11);
+ symboltype.put("rbrackuend",11);
+ symboltype.put("rbrackextender",11);
+ symboltype.put("rbracklend",11);
+ symboltype.put("lbraceuend",11);
+ symboltype.put("lbracemid",11);
+ symboltype.put("lbracelend",11);
+ symboltype.put("vbraceextender",11);
+ symboltype.put("rbraceuend",11);
+ symboltype.put("rbracemid",11);
+ symboltype.put("rbracelend",11);
+ symboltype.put("intextender",11);
+ symboltype.put("harrowextender",11);
+ symboltype.put("sumtop",11);
+ symboltype.put("sumbottom",11);
+ symboltype.put("sqrtbottom",11);
+ symboltype.put("obrbrak",11);
+ symboltype.put("ubrbrak",11);
+ symboltype.put("blanksymbol",11);
+ symboltype.put("mathvisiblespace",11);
+ symboltype.put("mdlgblksquare",11);
+ symboltype.put("mdlgwhtsquare",11);
+ symboltype.put("bigblacktriangleup",11);
+ symboltype.put("blacktriangleright",11);
+ symboltype.put("blackpointerright",11);
+ symboltype.put("whitepointerright",11);
+ symboltype.put("bigblacktriangledown",11);
+ symboltype.put("bigtriangledown",11);
+ symboltype.put("blacktriangleleft",11);
+ symboltype.put("blackpointerleft",11);
+ symboltype.put("whitepointerleft",11);
+ symboltype.put("bullseye",11);
+ symboltype.put("mdlgblkcircle",11);
+ symboltype.put("smwhtcircle",11);
+ symboltype.put("squareleftblack",11);
+ symboltype.put("squarerightblack",11);
+ symboltype.put("mdwhtsquare",11);
+ symboltype.put("mdblksquare",11);
+ symboltype.put("bigstar",11);
+ symboltype.put("bigwhitestar",11);
+ symboltype.put("spadesuit",11);
+ symboltype.put("heartsuit",11);
+ symboltype.put("diamondsuit",11);
+ symboltype.put("clubsuit",11);
+ symboltype.put("varspadesuit",11);
+ symboltype.put("varheartsuit",11);
+ symboltype.put("vardiamondsuit",11);
+ symboltype.put("varclubsuit",11);
+ symboltype.put("quarternote",11);
+ symboltype.put("eighthnote",11);
+ symboltype.put("flat",11);
+ symboltype.put("natural",11);
+ symboltype.put("sharp",11);
+ symboltype.put("dicei",11);
+ symboltype.put("diceii",11);
+ symboltype.put("diceiii",11);
+ symboltype.put("diceiv",11);
+ symboltype.put("dicev",11);
+ symboltype.put("dicevi",11);
+ symboltype.put("checkmark",11);
+ symboltype.put("maltese",11);
+ symboltype.put("varstar",11);
+ symboltype.put("threedangle",11);
+ symboltype.put("whiteinwhitetriangle",11);
+ symboltype.put("subsetcirc",11);
+ symboltype.put("supsetcirc",11);
+ symboltype.put("diamondcdot",11);
+ symboltype.put("rdiagovfdiag",11);
+ symboltype.put("fdiagovrdiag",11);
+ symboltype.put("seovnearrow",11);
+ symboltype.put("neovsearrow",11);
+ symboltype.put("fdiagovnearrow",11);
+ symboltype.put("rdiagovsearrow",11);
+ symboltype.put("neovnwarrow",11);
+ symboltype.put("nwovnearrow",11);
+ symboltype.put("uprightcurvearrow",11);
+ symboltype.put("downrightcurvedarrow",11);
+ symboltype.put("mdsmblkcircle",11);
+ symboltype.put("fourvdots",11);
+ symboltype.put("vzigzag",11);
+ symboltype.put("measuredangleleft",11);
+ symboltype.put("rightanglesqr",11);
+ symboltype.put("rightanglemdot",11);
+ symboltype.put("angles",11);
+ symboltype.put("angdnr",11);
+ symboltype.put("gtlpar",11);
+ symboltype.put("sphericalangleup",11);
+ symboltype.put("turnangle",11);
+ symboltype.put("revangle",11);
+ symboltype.put("angleubar",11);
+ symboltype.put("revangleubar",11);
+ symboltype.put("wideangledown",11);
+ symboltype.put("wideangleup",11);
+ symboltype.put("measanglerutone",11);
+ symboltype.put("measanglelutonw",11);
+ symboltype.put("measanglerdtose",11);
+ symboltype.put("measangleldtosw",11);
+ symboltype.put("measangleurtone",11);
+ symboltype.put("measangleultonw",11);
+ symboltype.put("measangledrtose",11);
+ symboltype.put("measangledltosw",11);
+ symboltype.put("revemptyset",11);
+ symboltype.put("emptysetobar",11);
+ symboltype.put("emptysetocirc",11);
+ symboltype.put("emptysetoarr",11);
+ symboltype.put("emptysetoarrl",11);
+ symboltype.put("obot",11);
+ symboltype.put("olcross",11);
+ symboltype.put("odotslashdot",11);
+ symboltype.put("uparrowoncircle",11);
+ symboltype.put("circledwhitebullet",11);
+ symboltype.put("circledbullet",11);
+ symboltype.put("cirscir",11);
+ symboltype.put("cirE",11);
+ symboltype.put("boxonbox",11);
+ symboltype.put("triangleodot",11);
+ symboltype.put("triangleubar",11);
+ symboltype.put("triangles",11);
+ symboltype.put("iinfin",11);
+ symboltype.put("tieinfty",11);
+ symboltype.put("nvinfty",11);
+ symboltype.put("laplac",11);
+ symboltype.put("thermod",11);
+ symboltype.put("downtriangleleftblack",11);
+ symboltype.put("downtrianglerightblack",11);
+ symboltype.put("blackdiamonddownarrow",11);
+ symboltype.put("circledownarrow",11);
+ symboltype.put("blackcircledownarrow",11);
+ symboltype.put("errbarsquare",11);
+ symboltype.put("errbarblacksquare",11);
+ symboltype.put("errbardiamond",11);
+ symboltype.put("errbarblackdiamond",11);
+ symboltype.put("errbarcircle",11);
+ symboltype.put("errbarblackcircle",11);
+ symboltype.put("perps",11);
+ symboltype.put("topcir",11);
+ symboltype.put("dottedsquare",11);
+ symboltype.put("lgblksquare",11);
+ symboltype.put("lgwhtsquare",11);
+ symboltype.put("medwhitestar",11);
+ symboltype.put("medblackstar",11);
+ symboltype.put("smwhitestar",11); */
+ symboltype.put("less",12);
+ symboltype.put("equal",12);
+ symboltype.put("greater",12);
+/* symboltype.put("closure",12);
+ symboltype.put("leftarrow",12);
+ symboltype.put("uparrow",12);
+ symboltype.put("rightarrow",12);
+ symboltype.put("downarrow",12);
+ symboltype.put("leftrightarrow",12);
+ symboltype.put("updownarrow",12);
+ symboltype.put("nwarrow",12);
+ symboltype.put("nearrow",12);
+ symboltype.put("searrow",12);
+ symboltype.put("swarrow",12);
+ symboltype.put("nleftarrow",12);
+ symboltype.put("nrightarrow",12);
+ symboltype.put("leftwavearrow",12);
+ symboltype.put("rightwavearrow",12);
+ symboltype.put("twoheadleftarrow",12);
+ symboltype.put("twoheaduparrow",12);
+ symboltype.put("twoheadrightarrow",12);
+ symboltype.put("twoheaddownarrow",12);
+ symboltype.put("leftarrowtail",12);
+ symboltype.put("rightarrowtail",12);
+ symboltype.put("mapsfrom",12);
+ symboltype.put("mapsup",12);
+ symboltype.put("mapsto(",12);
+ symboltype.put("mapsdown",12);
+ symboltype.put("hookleftarrow",12);
+ symboltype.put("hookrightarrow",12);
+ symboltype.put("looparrowleft",12);
+ symboltype.put("looparrowright",12);
+ symboltype.put("leftrightsquigarrow",12);
+ symboltype.put("nleftrightarrow",12);
+ symboltype.put("downzigzagarrow",12);
+ symboltype.put("Lsh",12);
+ symboltype.put("Rsh",12);
+ symboltype.put("Ldsh",12);
+ symboltype.put("Rdsh",12);
+ symboltype.put("curvearrowleft",12);
+ symboltype.put("curvearrowright",12);
+ symboltype.put("leftharpoonup",12);
+ symboltype.put("leftharpoondown",12);
+ symboltype.put("upharpoonright",12);
+ symboltype.put("upharpoonleft",12);
+ symboltype.put("rightharpoonup",12);
+ symboltype.put("rightharpoondown",12);
+ symboltype.put("downharpoonright",12);
+ symboltype.put("downharpoonleft",12);
+ symboltype.put("rightleftarrows",12);
+ symboltype.put("updownarrows",12);
+ symboltype.put("leftrightarrows",12);
+ symboltype.put("leftleftarrows",12);
+ symboltype.put("upuparrows",12);
+ symboltype.put("rightrightarrows",12);
+ symboltype.put("downdownarrows",12);
+ symboltype.put("leftrightharpoons",12);
+ symboltype.put("rightleftharpoons",12);
+ symboltype.put("nLeftarrow",12);
+ symboltype.put("nLeftrightarrow",12);
+ symboltype.put("nRightarrow",12);
+ symboltype.put("Leftarrow",12);
+ symboltype.put("Uparrow",12);
+ symboltype.put("Rightarrow",12);
+ symboltype.put("Downarrow",12);
+ symboltype.put("Leftrightarrow",12);
+ symboltype.put("Updownarrow",12);
+ symboltype.put("Nwarrow",12);
+ symboltype.put("Nearrow",12);
+ symboltype.put("Searrow",12);
+ symboltype.put("Swarrow",12);
+ symboltype.put("Lleftarrow",12);
+ symboltype.put("Rrightarrow",12);
+ symboltype.put("leftsquigarrow",12);
+ symboltype.put("rightsquigarrow",12);
+ symboltype.put("barleftarrow",12);
+ symboltype.put("rightarrowbar",12);
+ symboltype.put("circleonrightarrow",12);
+ symboltype.put("downuparrows",12);
+ symboltype.put("rightthreearrows",12);
+ symboltype.put("nvleftarrow",12);
+ symboltype.put("nvrightarrow",12);
+ symboltype.put("nvleftrightarrow",12);
+ symboltype.put("nVleftarrow",12);
+ symboltype.put("nVrightarrow",12);
+ symboltype.put("nVleftrightarrow",12);
+ symboltype.put("leftarrowtriangle",12);
+ symboltype.put("rightarrowtriangle",12);
+ symboltype.put("leftrightarrowtriangle",12);
+ symboltype.put("in",12);
+ symboltype.put("notin",12);
+ symboltype.put("smallin",12);
+ symboltype.put("ni",12);
+ symboltype.put("nni",12);
+ symboltype.put("smallni",12);
+ symboltype.put("propto",12);
+ symboltype.put("mid",12);
+ symboltype.put("nmid",12);
+ symboltype.put("parallel",12);
+ symboltype.put("nparallel",12);
+ symboltype.put("mathratio",12);
+ symboltype.put("Colon",12);
+ symboltype.put("dashcolon",12);
+ symboltype.put("dotsminusdots",12);
+ symboltype.put("kernelcontraction",12); */
+ symboltype.put("sim",12);
+// symboltype.put("backsim",12);
+ symboltype.put("nsim",12);
+ symboltype.put("eqsim",12);
+ symboltype.put("simeq",12);
+ symboltype.put("nsime",12);
+ // symboltype.put("cong",12);
+ // symboltype.put("simneqq",12);
+ // symboltype.put("ncong",12);
+ symboltype.put("approx",12);
+ symboltype.put("napprox",12);
+ symboltype.put("approxeq",12);
+ /* symboltype.put("approxident",12);
+ symboltype.put("backcong",12);
+ symboltype.put("asymp",12);
+ symboltype.put("Bumpeq",12);
+ symboltype.put("bumpeq",12);
+ symboltype.put("doteq",12);
+ symboltype.put("Doteq",12);
+ symboltype.put("fallingdotseq",12);
+ symboltype.put("risingdotseq",12);
+ symboltype.put("coloneq",12);
+ symboltype.put("eqcolon",12);
+ symboltype.put("eqcirc",12);
+ symboltype.put("circeq",12);
+ symboltype.put("arceq",12);
+ symboltype.put("wedgeq",12);
+ symboltype.put("veeeq",12);
+ symboltype.put("stareq",12);
+ symboltype.put("triangleq",12);
+ symboltype.put("eqdef",12);
+ symboltype.put("measeq",12);
+ symboltype.put("questeq",12); */
+ symboltype.put("ne",12);
+ symboltype.put("equiv",12);
+ symboltype.put("nequiv",12);
+ symboltype.put("Equiv",12);
+ symboltype.put("leq",12);
+ symboltype.put("geq",12);
+ symboltype.put("leqq",12);
+ symboltype.put("geqq",12);
+ symboltype.put("lneqq",12);
+ symboltype.put("gneqq",12);
+ symboltype.put("ll",12);
+ symboltype.put("gg",12);
+ /* symboltype.put("between",12);
+ symboltype.put("nasymp",12);
+ symboltype.put("nless",12);
+ symboltype.put("ngtr",12);
+ symboltype.put("nleq",12);
+ symboltype.put("ngeq",12);
+ symboltype.put("lesssim",12);
+ symboltype.put("gtrsim",12);
+ symboltype.put("nlesssim",12);
+ symboltype.put("ngtrsim",12);
+ symboltype.put("lessgtr",12);
+ symboltype.put("gtrless",12);
+ symboltype.put("nlessgtr",12);
+ symboltype.put("ngtrless",12);
+ symboltype.put("prec",12);
+ symboltype.put("succ",12);
+ symboltype.put("preccurlyeq",12);
+ symboltype.put("succcurlyeq",12);
+ symboltype.put("precsim",12);
+ symboltype.put("succsim",12);
+ symboltype.put("nprec",12);
+ symboltype.put("nsucc",12);
+ symboltype.put("subset",12);
+ symboltype.put("supset",12);
+ symboltype.put("nsubset",12);
+ symboltype.put("nsupset",12);
+ symboltype.put("subseteq",12);
+ symboltype.put("supseteq",12);
+ symboltype.put("nsubseteq",12);
+ symboltype.put("nsupseteq",12);
+ symboltype.put("subsetneq",12);
+ symboltype.put("supsetneq",12);
+ symboltype.put("sqsubset",12);
+ symboltype.put("sqsupset",12);
+ symboltype.put("sqsubseteq",12);
+ symboltype.put("sqsupseteq",12);
+ symboltype.put("vdash",12);
+ symboltype.put("dashv",12);
+ symboltype.put("assert",12);
+ symboltype.put("models",12);
+ symboltype.put("vDash",12);
+ symboltype.put("Vdash",12);
+ symboltype.put("Vvdash",12);
+ symboltype.put("VDash",12);
+ symboltype.put("nvdash",12);
+ symboltype.put("nvDash",12);
+ symboltype.put("nVdash",12);
+ symboltype.put("nVDash",12);
+ symboltype.put("prurel",12);
+ symboltype.put("scurel",12);
+ symboltype.put("vartriangleleft",12);
+ symboltype.put("vartriangleright",12);
+ symboltype.put("trianglelefteq",12);
+ symboltype.put("trianglerighteq",12);
+ symboltype.put("origof",12);
+ symboltype.put("imageof",12);
+ symboltype.put("multimap",12);
+ symboltype.put("bowtie",12);
+ symboltype.put("backsimeq",12);
+ symboltype.put("Subset",12);
+ symboltype.put("Supset",12);
+ symboltype.put("pitchfork",12);
+ symboltype.put("equalparallel",12);
+ symboltype.put("lessdot",12);
+ symboltype.put("gtrdot",12);
+ symboltype.put("lll",12);
+ symboltype.put("ggg",12);
+ symboltype.put("lesseqgtr",12);
+ symboltype.put("gtreqless",12);
+ symboltype.put("eqless",12);
+ symboltype.put("eqgtr",12);
+ symboltype.put("curlyeqprec",12);
+ symboltype.put("curlyeqsucc",12);
+ symboltype.put("npreccurlyeq",12);
+ symboltype.put("nsucccurlyeq",12);
+ symboltype.put("nsqsubseteq",12);
+ symboltype.put("nsqsupseteq",12);
+ symboltype.put("sqsubsetneq",12);
+ symboltype.put("sqsupsetneq",12);
+ symboltype.put("lnsim",12);
+ symboltype.put("gnsim",12);
+ symboltype.put("precnsim",12);
+ symboltype.put("succnsim",12);
+ symboltype.put("nvartriangleleft",12);
+ symboltype.put("nvartriangleright",12);
+ symboltype.put("ntrianglelefteq",12);
+ symboltype.put("ntrianglerighteq",12);
+ symboltype.put("vdots",12);
+ symboltype.put("adots",12);
+ symboltype.put("ddots",12);
+ symboltype.put("disin",12);
+ symboltype.put("varisins",12);
+ symboltype.put("isins",12);
+ symboltype.put("isindot",12);
+ symboltype.put("varisinobar",12);
+ symboltype.put("isinobar",12);
+ symboltype.put("isinvb",12);
+ symboltype.put("isinE",12);
+ symboltype.put("nisd",12);
+ symboltype.put("varnis",12);
+ symboltype.put("nis",12);
+ symboltype.put("varniobar",12);
+ symboltype.put("niobar",12);
+ symboltype.put("bagmember",12);
+ symboltype.put("frown",12);
+ symboltype.put("smile",12);
+ symboltype.put("perp",12);
+ symboltype.put("bsolhsub",12);
+ symboltype.put("suphsol",12);
+ symboltype.put("upin",12);
+ symboltype.put("pullback",12);
+ symboltype.put("pushout",12);
+ symboltype.put("DashVDash",12);
+ symboltype.put("dashVdash",12);
+ symboltype.put("multimapinv",12);
+ symboltype.put("vlongdash",12);
+ symboltype.put("longdashv",12);
+ symboltype.put("cirbot",12);
+ symboltype.put("UUparrow",12);
+ symboltype.put("DDownarrow",12);
+ symboltype.put("acwgapcirclearrow",12);
+ symboltype.put("cwgapcirclearrow",12);
+ symboltype.put("rightarrowonoplus",12);
+ symboltype.put("longleftarrow",12);
+ symboltype.put("longrightarrow",12);
+ symboltype.put("longleftrightarrow",12);
+ symboltype.put("Longleftarrow",12);
+ symboltype.put("Longrightarrow",12);
+ symboltype.put("Longleftrightarrow",12);
+ symboltype.put("longmapsfrom",12);
+ symboltype.put("longmapsto",12);
+ symboltype.put("Longmapsfrom",12);
+ symboltype.put("Longmapsto",12);
+ symboltype.put("longrightsquigarrow",12);
+ symboltype.put("nvtwoheadrightarrow",12);
+ symboltype.put("nVtwoheadrightarrow",12);
+ symboltype.put("nvLeftarrow",12);
+ symboltype.put("nvRightarrow",12);
+ symboltype.put("nvLeftrightarrow",12);
+ symboltype.put("twoheadmapsto",12);
+ symboltype.put("Mapsfrom",12);
+ symboltype.put("Mapsto",12);
+ symboltype.put("downarrowbarred",12);
+ symboltype.put("uparrowbarred",12);
+ symboltype.put("Uuparrow",12);
+ symboltype.put("Ddownarrow",12);
+ symboltype.put("leftbkarrow",12);
+ symboltype.put("rightbkarrow",12);
+ symboltype.put("leftdbkarrow",12);
+ symboltype.put("dbkarow",12);
+ symboltype.put("drbkarow",12);
+ symboltype.put("rightdotarrow",12);
+ symboltype.put("baruparrow",12);
+ symboltype.put("downarrowbar",12);
+ symboltype.put("nvrightarrowtail",12);
+ symboltype.put("nVrightarrowtail",12);
+ symboltype.put("twoheadrightarrowtail",12);
+ symboltype.put("nvtwoheadrightarrowtail",12);
+ symboltype.put("nVtwoheadrightarrowtail",12);
+ symboltype.put("lefttail",12);
+ symboltype.put("righttail",12);
+ symboltype.put("leftdbltail",12);
+ symboltype.put("rightdbltail",12);
+ symboltype.put("diamondleftarrow",12);
+ symboltype.put("rightarrowdiamond",12);
+ symboltype.put("diamondleftarrowbar",12);
+ symboltype.put("barrightarrowdiamond",12);
+ symboltype.put("nwsearrow",12);
+ symboltype.put("neswarrow",12);
+ symboltype.put("hknwarrow",12);
+ symboltype.put("hknearrow",12);
+ symboltype.put("hksearow",12);
+ symboltype.put("hkswarow",12);
+ symboltype.put("tona",12);
+ symboltype.put("toea",12);
+ symboltype.put("tosa",12);
+ symboltype.put("towa",12);
+ symboltype.put("rightcurvedarrow",12);
+ symboltype.put("leftdowncurvedarrow",12);
+ symboltype.put("rightdowncurvedarrow",12);
+ symboltype.put("cwrightarcarrow",12);
+ symboltype.put("acwleftarcarrow",12);
+ symboltype.put("acwoverarcarrow",12);
+ symboltype.put("acwunderarcarrow",12);
+ symboltype.put("curvearrowrightminus",12);
+ symboltype.put("curvearrowleftplus",12);
+ symboltype.put("cwundercurvearrow",12);
+ symboltype.put("ccwundercurvearrow",12);
+ symboltype.put("acwcirclearrow",12);
+ symboltype.put("cwcirclearrow",12);
+ symboltype.put("rightarrowshortleftarrow",12);
+ symboltype.put("leftarrowshortrightarrow",12);
+ symboltype.put("shortrightarrowleftarrow",12);
+ symboltype.put("rightarrowplus",12);
+ symboltype.put("leftarrowplus",12);
+ symboltype.put("rightarrowx",12);
+ symboltype.put("leftrightarrowcircle",12);
+ symboltype.put("twoheaduparrowcircle",12);
+ symboltype.put("leftrightharpoonupdown",12);
+ symboltype.put("leftrightharpoondownup",12);
+ symboltype.put("updownharpoonrightleft",12);
+ symboltype.put("updownharpoonleftright",12);
+ symboltype.put("leftrightharpoonupup",12);
+ symboltype.put("updownharpoonrightright",12);
+ symboltype.put("leftrightharpoondowndown",12);
+ symboltype.put("updownharpoonleftleft",12);
+ symboltype.put("barleftharpoonup",12);
+ symboltype.put("rightharpoonupbar",12);
+ symboltype.put("barupharpoonright",12);
+ symboltype.put("downharpoonrightbar",12);
+ symboltype.put("barleftharpoondown",12);
+ symboltype.put("rightharpoondownbar",12);
+ symboltype.put("barupharpoonleft",12);
+ symboltype.put("downharpoonleftbar",12);
+ symboltype.put("leftharpoonupbar",12);
+ symboltype.put("barrightharpoonup",12);
+ symboltype.put("upharpoonrightbar",12);
+ symboltype.put("bardownharpoonright",12);
+ symboltype.put("leftharpoondownbar",12);
+ symboltype.put("barrightharpoondown",12);
+ symboltype.put("upharpoonleftbar",12);
+ symboltype.put("bardownharpoonleft",12);
+ symboltype.put("leftharpoonsupdown",12);
+ symboltype.put("upharpoonsleftright",12);
+ symboltype.put("rightharpoonsupdown",12);
+ symboltype.put("downharpoonsleftright",12);
+ symboltype.put("leftrightharpoonsup",12);
+ symboltype.put("leftrightharpoonsdown",12);
+ symboltype.put("rightleftharpoonsup",12);
+ symboltype.put("rightleftharpoonsdown",12);
+ symboltype.put("leftharpoonupdash",12);
+ symboltype.put("dashleftharpoondown",12);
+ symboltype.put("rightharpoonupdash",12);
+ symboltype.put("dashrightharpoondown",12);
+ symboltype.put("updownharpoonsleftright",12);
+ symboltype.put("downupharpoonsleftright",12);
+ symboltype.put("rightimply",12);
+ symboltype.put("equalrightarrow",12);
+ symboltype.put("similarrightarrow",12);
+ symboltype.put("leftarrowsimilar",12);
+ symboltype.put("rightarrowsimilar",12);
+ symboltype.put("rightarrowapprox",12);
+ symboltype.put("ltlarr",12);
+ symboltype.put("leftarrowless",12);
+ symboltype.put("gtrarr",12);
+ symboltype.put("subrarr",12);
+ symboltype.put("leftarrowsubset",12);
+ symboltype.put("suplarr",12);
+ symboltype.put("leftfishtail",12);
+ symboltype.put("rightfishtail",12);
+ symboltype.put("upfishtail",12);
+ symboltype.put("downfishtail",12);
+ symboltype.put("rtriltri",12);
+ symboltype.put("ltrivb",12);
+ symboltype.put("vbrtri",12);
+ symboltype.put("lfbowtie",12);
+ symboltype.put("rfbowtie",12);
+ symboltype.put("fbowtie",12);
+ symboltype.put("lftimes",12);
+ symboltype.put("rftimes",12);
+ symboltype.put("dualmap",12);
+ symboltype.put("lrtriangleeq",12);
+ symboltype.put("eparsl",12);
+ symboltype.put("smeparsl",12);
+ symboltype.put("eqvparsl",12);
+ symboltype.put("gleichstark",12);
+ symboltype.put("ruledelayed",12);
+ symboltype.put("veeonwedge",12);
+ symboltype.put("eqdot",12);
+ symboltype.put("dotequiv",12);
+ symboltype.put("equivVert",12);
+ symboltype.put("equivVvert",12);
+ symboltype.put("dotsim",12);
+ symboltype.put("simrdots",12);
+ symboltype.put("simminussim",12);
+ symboltype.put("congdot",12);
+ symboltype.put("asteq",12);
+ symboltype.put("hatapprox",12);
+ symboltype.put("approxeqq",12);
+ symboltype.put("eqqsim",12);
+ symboltype.put("Coloneq",12);
+ symboltype.put("eqeq",12);
+ symboltype.put("eqeqeq",12);
+ symboltype.put("ddotseq",12);
+ symboltype.put("equivDD",12);
+ symboltype.put("ltcir",12);
+ symboltype.put("gtcir",12);
+ symboltype.put("ltquest",12);
+ symboltype.put("gtquest",12);
+ symboltype.put("leqslant",12);
+ symboltype.put("geqslant",12);
+ symboltype.put("lesdot",12);
+ symboltype.put("gesdot",12);
+ symboltype.put("lesdoto",12);
+ symboltype.put("gesdoto",12);
+ symboltype.put("lesdotor",12);
+ symboltype.put("gesdotol",12);
+ symboltype.put("lessapprox",12);
+ symboltype.put("gtrapprox",12);
+ symboltype.put("lneq",12);
+ symboltype.put("gneq",12);
+ symboltype.put("lnapprox",12);
+ symboltype.put("gnapprox",12);
+ symboltype.put("lesseqqgtr",12);
+ symboltype.put("gtreqqless",12);
+ symboltype.put("lsime",12);
+ symboltype.put("gsime",12);
+ symboltype.put("lsimg",12);
+ symboltype.put("gsiml",12);
+ symboltype.put("lgE",12);
+ symboltype.put("glE",12);
+ symboltype.put("lesges",12);
+ symboltype.put("gesles",12);
+ symboltype.put("eqslantless",12);
+ symboltype.put("eqslantgtr",12);
+ symboltype.put("elsdot",12);
+ symboltype.put("egsdot",12);
+ symboltype.put("eqqless",12);
+ symboltype.put("eqqgtr",12);
+ symboltype.put("eqqslantless",12);
+ symboltype.put("eqqslantgtr",12);
+ symboltype.put("simless",12);
+ symboltype.put("simgtr",12);
+ symboltype.put("simlE",12);
+ symboltype.put("simgE",12);
+ symboltype.put("Lt",12);
+ symboltype.put("Gt",12);
+ symboltype.put("partialmeetcontraction",12);
+ symboltype.put("glj",12);
+ symboltype.put("gla",12);
+ symboltype.put("ltcc",12);
+ symboltype.put("gtcc",12);
+ symboltype.put("lescc",12);
+ symboltype.put("gescc",12);
+ symboltype.put("smt",12);
+ symboltype.put("lat",12);
+ symboltype.put("smte",12);
+ symboltype.put("late",12);
+ symboltype.put("bumpeqq",12);
+ symboltype.put("preceq",12);
+ symboltype.put("succeq",12);
+ symboltype.put("precneq",12);
+ symboltype.put("succneq",12);
+ symboltype.put("preceqq",12);
+ symboltype.put("succeqq",12);
+ symboltype.put("precneqq",12);
+ symboltype.put("succneqq",12);
+ symboltype.put("precapprox",12);
+ symboltype.put("succapprox",12);
+ symboltype.put("precnapprox",12);
+ symboltype.put("succnapprox",12);
+ symboltype.put("Prec",12);
+ symboltype.put("Succ",12);
+ symboltype.put("subsetdot",12);
+ symboltype.put("supsetdot",12);
+ symboltype.put("subsetplus",12);
+ symboltype.put("supsetplus",12);
+ symboltype.put("submult",12);
+ symboltype.put("supmult",12);
+ symboltype.put("subedot",12);
+ symboltype.put("supedot",12);
+ symboltype.put("subseteqq",12);
+ symboltype.put("supseteqq",12);
+ symboltype.put("subsim",12);
+ symboltype.put("supsim",12);
+ symboltype.put("subsetapprox",12);
+ symboltype.put("supsetapprox",12);
+ symboltype.put("subsetneqq",12);
+ symboltype.put("supsetneqq",12);
+ symboltype.put("lsqhook",12);
+ symboltype.put("rsqhook",12);
+ symboltype.put("csub",12);
+ symboltype.put("csup",12);
+ symboltype.put("csube",12);
+ symboltype.put("csupe",12);
+ symboltype.put("subsup",12);
+ symboltype.put("supsub",12);
+ symboltype.put("subsub",12);
+ symboltype.put("supsup",12);
+ symboltype.put("suphsub",12);
+ symboltype.put("supdsub",12);
+ symboltype.put("forkv",12);
+ symboltype.put("topfork",12);
+ symboltype.put("mlcp",12);
+ symboltype.put("forks",12);
+ symboltype.put("forksnot",12);
+ symboltype.put("shortlefttack",12);
+ symboltype.put("shortdowntack",12);
+ symboltype.put("shortuptack",12);
+ symboltype.put("vDdash",12);
+ symboltype.put("dashV",12);
+ symboltype.put("Dashv",12);
+ symboltype.put("DashV",12);
+ symboltype.put("varVdash",12);
+ symboltype.put("Barv",12);
+ symboltype.put("vBar",12);
+ symboltype.put("vBarv",12);
+ symboltype.put("barV",12);
+ symboltype.put("Vbar",12);
+ symboltype.put("Not",12);
+ symboltype.put("bNot",12);
+ symboltype.put("revnmid",12);
+ symboltype.put("cirmid",12);
+ symboltype.put("midcir",12);
+ symboltype.put("nhpar",12);
+ symboltype.put("parsim",12);
+ symboltype.put("lllnest",12);
+ symboltype.put("gggnest",12);
+ symboltype.put("leqqslant",12);
+ symboltype.put("geqqslant",12);
+ symboltype.put("circleonleftarrow",12);
+ symboltype.put("leftthreearrows",12);
+ symboltype.put("leftarrowonoplus",12);
+ symboltype.put("longleftsquigarrow",12);
+ symboltype.put("nvtwoheadleftarrow",12);
+ symboltype.put("nVtwoheadleftarrow",12);
+ symboltype.put("twoheadmapsfrom",12);
+ symboltype.put("twoheadleftdbkarrow",12);
+ symboltype.put("leftdotarrow",12);
+ symboltype.put("nvleftarrowtail",12);
+ symboltype.put("nVleftarrowtail",12);
+ symboltype.put("twoheadleftarrowtail",12);
+ symboltype.put("nvtwoheadleftarrowtail",12);
+ symboltype.put("nVtwoheadleftarrowtail",12);
+ symboltype.put("leftarrowx",12);
+ symboltype.put("leftcurvedarrow",12);
+ symboltype.put("equalleftarrow",12);
+ symboltype.put("bsimilarleftarrow",12);
+ symboltype.put("leftarrowbackapprox",12);
+ symboltype.put("rightarrowgtr",12);
+ symboltype.put("rightarrowsupset",12);
+ symboltype.put("LLeftarrow",12);
+ symboltype.put("RRightarrow",12);
+ symboltype.put("bsimilarrightarrow",12);
+ symboltype.put("rightarrowbackapprox",12);
+ symboltype.put("similarleftarrow",12);
+ symboltype.put("leftarrowapprox",12);
+ symboltype.put("leftarrowbsimilar",12);
+ symboltype.put("rightarrowbsimilar",12); */
+ symboltype.put("Alpha",13);
+ symboltype.put("Beta",13);
+ symboltype.put("Gamma",13);
+ symboltype.put("Delta",13);
+ symboltype.put("Epsilon",13);
+ symboltype.put("Zeta",13);
+ symboltype.put("Eta",13);
+ symboltype.put("Theta",13);
+ symboltype.put("Iota",13);
+ symboltype.put("Kappa",13);
+ symboltype.put("Lambda",13);
+ symboltype.put("Mu",13);
+ symboltype.put("Nu",13);
+ symboltype.put("Xi",13);
+ symboltype.put("Omicron",13);
+ symboltype.put("Pi",13);
+ symboltype.put("Rho",13);
+ symboltype.put("Sigma",13);
+ symboltype.put("Tau",13);
+ symboltype.put("Upsilon",13);
+ symboltype.put("Phi",13);
+ symboltype.put("Chi",13);
+ symboltype.put("Psi",13);
+ symboltype.put("Omega",13);
+ symboltype.put("alpha",13);
+ symboltype.put("beta",13);
+ symboltype.put("gamma",13);
+ symboltype.put("delta",13);
+ symboltype.put("epsilon",13);
+ symboltype.put("zeta",13);
+ symboltype.put("eta",13);
+ symboltype.put("theta",13);
+ symboltype.put("iota",13);
+ symboltype.put("kappa",13);
+ symboltype.put("lambda",13);
+ symboltype.put("mu",13);
+ symboltype.put("nu",13);
+ symboltype.put("xi",13);
+ symboltype.put("omicron",13);
+ symboltype.put("pi",13);
+ symboltype.put("rho",13);
+ symboltype.put("varsigma",13);
+ symboltype.put("sigma",13);
+ symboltype.put("tau",13);
+ symboltype.put("upsilon",13);
+ symboltype.put("varphi",13);
+ symboltype.put("chi",13);
+ symboltype.put("psi",13);
+ symboltype.put("omega",13);
+ symboltype.put("varbeta",13);
+ symboltype.put("vartheta",13);
+ symboltype.put("phi",13);
+ symboltype.put("varpi",13);
+ symboltype.put("Digamma",13);
+ symboltype.put("digamma",13);
+ symboltype.put("varkappa",13);
+ symboltype.put("varrho",13);
+ symboltype.put("varTheta",13);
+ symboltype.put("varepsilon",13);
+/* symboltype.put("matheth",13);
+ symboltype.put("BbbC",13);
+ symboltype.put("mscrg",13);
+ symboltype.put("mscrH",13);
+ symboltype.put("mfrakH",13);
+ symboltype.put("BbbH",13);
+ symboltype.put("hslash",13);
+ symboltype.put("mscrI",13); */
+ symboltype.put("Im",13);
+/* symboltype.put("mscrL",13);
+ symboltype.put("ell",13);
+ symboltype.put("BbbN",13);
+ symboltype.put("wp",13);
+ symboltype.put("BbbP",13);
+ symboltype.put("BbbQ",13);
+ symboltype.put("mscrR",13); */
+ symboltype.put("Re",13);
+/* symboltype.put("BbbR",13);
+ symboltype.put("BbbZ",13);
+ symboltype.put("mfrakZ",13);
+ symboltype.put("turnediota",13);
+ symboltype.put("Angstrom",13);
+ symboltype.put("mscrB",13);
+ symboltype.put("mfrakC",13);
+ symboltype.put("mscre",13);
+ symboltype.put("mscrE",13);
+ symboltype.put("mscrF",13);
+ symboltype.put("mscrM",13);
+ symboltype.put("mscro",13);
+ symboltype.put("aleph",13);
+ symboltype.put("beth",13);
+ symboltype.put("gimel",13);
+ symboltype.put("daleth",13);
+ symboltype.put("Bbbgamma",13);
+ symboltype.put("BbbGamma",13);
+ symboltype.put("BbbPi",13); */
+ symboltype.put("partial",13);
+ symboltype.put("nabla",13);
+ symboltype.put("log",14);
+ symboltype.put("ln",14);
+ symboltype.put("sin",14);
+ symboltype.put("cos",14);
+ symboltype.put("tan",14);
+ symboltype.put("sec",14);
+ symboltype.put("csc",14);
+ symboltype.put("cot",14);
+ symboltype.put("sinh",14);
+ symboltype.put("cosh",14);
+ symboltype.put("tanh",14);
+ symboltype.put("coth",14);
+ symboltype.put("sech",14);
+ symboltype.put("csch",14);
+ symboltype.put("lim",15);
+
+ symboltype.put("exclam",17);
+ symboltype.put("comma",17);
+ // symboltype.put("mathcolon",17);
+ // symboltype.put("semicolon",17);
+
+ // symboltype.put("Bbbsum",19);
+ symboltype.put("prod",19);
+ // symboltype.put("coprod",19);
+ symboltype.put("sum",19);
+ /* symboltype.put("intclockwise",19);
+ symboltype.put("varointclockwise",19);
+ symboltype.put("ointctrclockwise",19);
+ symboltype.put("bigwedge",19);
+ symboltype.put("bigvee",19);
+ symboltype.put("bigcap",19);
+ symboltype.put("bigcup",19);
+ symboltype.put("leftouterjoin",19);
+ symboltype.put("rightouterjoin",19);
+ symboltype.put("fullouterjoin",19);
+ symboltype.put("bigbot",19);
+ symboltype.put("bigtop",19);
+ symboltype.put("xsol",19);
+ symboltype.put("xbsol",19);
+ symboltype.put("bigodot",19);
+ symboltype.put("bigoplus",19);
+ symboltype.put("bigotimes",19);
+ symboltype.put("bigcupdot",19);
+ symboltype.put("biguplus",19);
+ symboltype.put("bigsqcap",19);
+ symboltype.put("bigsqcup",19);
+ symboltype.put("conjquant",19);
+ symboltype.put("disjquant",19);
+ symboltype.put("bigtimes",19);
+ symboltype.put("modtwosum",19);
+ symboltype.put("intbar",19);
+ symboltype.put("intBar",19);
+ symboltype.put("intlarhk",19);
+ symboltype.put("intx",19);
+ symboltype.put("intcap",19);
+ symboltype.put("intcup",19);
+ symboltype.put("Join",19);
+ symboltype.put("bigtriangleleft",19);
+ symboltype.put("zcmp",19);
+ symboltype.put("zpipe",19);
+ symboltype.put("zproject",19);
+ symboltype.put("biginterleave",19);
+ symboltype.put("bigtalloblong",19); */
+
+
+// symboltype.put("bigBbbsum",20);
+ symboltype.put("bigprod",20);
+// symboltype.put("bigcoprod",20);
+ symboltype.put("bigsum",20);
+ /* symboltype.put("bigintclockwise",20);
+ symboltype.put("bigvarointclockwise",20);
+ symboltype.put("bigointctrclockwise",20);
+ symboltype.put("bigbigwedge",20);
+ symboltype.put("bigbigvee",20);
+ symboltype.put("bigbigcap",20);
+ symboltype.put("bigbigcup",20);
+ symboltype.put("bigleftouterjoin",20);
+ symboltype.put("bigrightouterjoin",20);
+ symboltype.put("bigfullouterjoin",20);
+ symboltype.put("bigbigbot",20);
+ symboltype.put("bigbigtop",20);
+ symboltype.put("bigxsol",20);
+ symboltype.put("bigxbsol",20);
+ symboltype.put("bigbigodot",20);
+ symboltype.put("bigbigoplus",20);
+ symboltype.put("bigbigotimes",20);
+ symboltype.put("bigbigcupdot",20);
+ symboltype.put("bigbiguplus",20);
+ symboltype.put("bigbigsqcap",20);
+ symboltype.put("bigbigsqcup",20);
+ symboltype.put("bigconjquant",20);
+ symboltype.put("bigdisjquant",20);
+ symboltype.put("bigbigtimes",20);
+ symboltype.put("bigmodtwosum",20);
+ symboltype.put("bigintbar",20);
+ symboltype.put("bigintBar",20);
+ symboltype.put("bigintlarhk",20);
+ symboltype.put("bigintx",20);
+ symboltype.put("bigintcap",20);
+ symboltype.put("bigintcup",20);
+ symboltype.put("bigJoin",20);
+ symboltype.put("bigbigtriangleleft",20);
+ symboltype.put("bigzcmp",20);
+ symboltype.put("bigzpipe",20);
+ symboltype.put("bigzproject",20);
+ symboltype.put("bigbiginterleave",20);
+ symboltype.put("bigbigtalloblong",20); */
+
+// symboltype.put("bigbigBbbsum",21);
+ symboltype.put("bigbigprod",21);
+ // symboltype.put("bigbigcoprod",21);
+ symboltype.put("bigbigsum",21);
+ /* symboltype.put("bigbigintclockwise",21);
+ symboltype.put("bigbigvarointclockwise",21);
+ symboltype.put("bigbigointctrclockwise",21);
+ symboltype.put("bigbigbigwedge",21);
+ symboltype.put("bigbigbigvee",21);
+ symboltype.put("bigbigbigcap",21);
+ symboltype.put("bigbigbigcup",21);
+ symboltype.put("bigbigleftouterjoin",21);
+ symboltype.put("bigbigrightouterjoin",21);
+ symboltype.put("bigbigfullouterjoin",21);
+ symboltype.put("bigbigbigbot",21);
+ symboltype.put("bigbigbigtop",21);
+ symboltype.put("bigbigxsol",21);
+ symboltype.put("bigbigxbsol",21);
+ symboltype.put("bigbigbigodot",21);
+ symboltype.put("bigbigbigoplus",21);
+ symboltype.put("bigbigbigotimes",21);
+ symboltype.put("bigbigbigcupdot",21);
+ symboltype.put("bigbigbiguplus",21);
+ symboltype.put("bigbigbigsqcap",21);
+ symboltype.put("bigbigbigsqcup",21);
+ symboltype.put("bigbigconjquant",21);
+ symboltype.put("bigbigdisjquant",21);
+ symboltype.put("bigbigbigtimes",21);
+ symboltype.put("bigbigmodtwosum",21);
+ symboltype.put("bigbigintbar",21);
+ symboltype.put("bigbigintBar",21);
+ symboltype.put("bigbigintlarhk",21);
+ symboltype.put("bigbigintx",21);
+ symboltype.put("bigbigintcap",21);
+ symboltype.put("bigbigintcup",21);
+ symboltype.put("bigbigJoin",21);
+ symboltype.put("bigbigbigtriangleleft",21);
+ symboltype.put("bigbigzcmp",21);
+ symboltype.put("bigbigzpipe",21);
+ symboltype.put("bigbigzproject",21);
+ symboltype.put("bigbigbiginterleave",21);
+ symboltype.put("bigbigbigtalloblong",21); */
+
+ symboltype.put("int",22);
+ symboltype.put("iint",22);
+ symboltype.put("iiint",22);
+ symboltype.put("oint",22);
+ symboltype.put("oiint",22);
+ symboltype.put("oiiint",22);
+ /* symboltype.put("sumint",22);
+ symboltype.put("iiiint",22);
+ symboltype.put("fint",22);
+ symboltype.put("cirfint",22);
+ symboltype.put("awint",22);
+ symboltype.put("rppolint",22);
+ symboltype.put("scpolint",22);
+ symboltype.put("npolint",22);
+ symboltype.put("pointint",22);
+ symboltype.put("sqint",22);
+ symboltype.put("upint",22);
+ symboltype.put("lowint",22); */
+
+
+ symboltype.put("bigint",23);
+ symboltype.put("bigiint",23);
+ symboltype.put("bigiiint",23);
+ symboltype.put("bigoint",23);
+ symboltype.put("bigoiint",23);
+ symboltype.put("bigoiiint",23);
+ /* symboltype.put("bigsumint",23);
+ symboltype.put("bigiiiint",23);
+ symboltype.put("bigfint",23);
+ symboltype.put("bigcirfint",23);
+ symboltype.put("bigawint",23);
+ symboltype.put("bigrppolint",23);
+ symboltype.put("bigscpolint",23);
+ symboltype.put("bignpolint",23);
+ symboltype.put("bigpointint",23);
+ symboltype.put("bigsqint",23);
+ symboltype.put("bigupint",23);
+ symboltype.put("biglowint",23); */
+
+ symboltype.put("bigbigint",24);
+ symboltype.put("bigbigiint",24);
+ symboltype.put("bigbigiiint",24);
+ symboltype.put("bigbigoint",24);
+ symboltype.put("bigbigoiint",24);
+ symboltype.put("bigbigoiiint",24);
+ /* symboltype.put("bigbigsumint",24);
+ symboltype.put("bigbigiiiint",24);
+ symboltype.put("bigbigfint",24);
+ symboltype.put("bigbigcirfint",24);
+ symboltype.put("bigbigawint",24);
+ symboltype.put("bigbigrppolint",24);
+ symboltype.put("bigbigscpolint",24);
+ symboltype.put("bigbignpolint",24);
+ symboltype.put("bigbigpointint",24);
+ symboltype.put("bigbigsqint",24);
+ symboltype.put("bigbigupint",24);
+ symboltype.put("bigbiglowint",24); */
+
+/************************************************************************************/
+
+ symbolunicode.put("lparen","\u0028");
+ symbolunicode.put("lbrack","\u005B");
+ symbolunicode.put("lbrace","\u007B");
+/* symbolunicode.put("lceil","\u2308");
+ symbolunicode.put("lfloor","\u230A");
+ symbolunicode.put("ulcorner","\u231C");
+ symbolunicode.put("llcorner","\u231E");
+ symbolunicode.put("lbag","\u27C5");
+ symbolunicode.put("lBrack","\u27E6");
+ symbolunicode.put("langle","\u27E8");
+ symbolunicode.put("lAngle","\u27EA");
+ symbolunicode.put("Lbrbrak","\u27EC");
+ symbolunicode.put("lgroup","\u27EE");
+ symbolunicode.put("lBrace","\u2983");
+ symbolunicode.put("lParen","\u2985");
+ symbolunicode.put("llparenthesis","\u2987");
+ symbolunicode.put("llangle","\u2989");
+ symbolunicode.put("lbrackubar","\u298B");
+ symbolunicode.put("lbrackultick","\u298D");
+ symbolunicode.put("lbracklltick","\u298F");
+ symbolunicode.put("langledot","\u2991");
+ symbolunicode.put("lparenless","\u2993");
+ symbolunicode.put("lparengtr","\u2995");
+ symbolunicode.put("lblkbrbrak","\u2997");
+ symbolunicode.put("lvzigzag","\u29D8");
+ symbolunicode.put("Lvzigzag","\u29DA");
+ symbolunicode.put("lcurvyangle","\u29FC");
+ symbolunicode.put("lbrbrak","\u3014"); */
+ symbolunicode.put("rparen","\u0029");
+ symbolunicode.put("rbrack","\u005D");
+ symbolunicode.put("rbrace","\u007D");
+/* symbolunicode.put("rceil","\u2309");
+ symbolunicode.put("rfloor","\u230B");
+ symbolunicode.put("urcorner","\u231D");
+ symbolunicode.put("lrcorner","\u231F");
+ symbolunicode.put("rbag","\u27C6");
+ symbolunicode.put("rBrack","\u27E7");
+ symbolunicode.put("rangle","\u27E9");
+ symbolunicode.put("rAngle","\u27EB");
+ symbolunicode.put("Rbrbrak","\u27ED");
+ symbolunicode.put("rgroup","\u27EF");
+ symbolunicode.put("rBrace","\u2984");
+ symbolunicode.put("rParen","\u2986");
+ symbolunicode.put("rrparenthesis","\u2988");
+ symbolunicode.put("rrangle","\u298A");
+ symbolunicode.put("rbrackubar","\u298C");
+ symbolunicode.put("rbrackurtick","\u2990");
+ symbolunicode.put("rbracklrtick","\u298E");
+ symbolunicode.put("rangledot","\u2992");
+ symbolunicode.put("rparenless","\u2996");
+ symbolunicode.put("rparengtr","\u2994");
+ symbolunicode.put("rblkbrbrak","\u2998");
+ symbolunicode.put("rvzigzag","\u29D9");
+ symbolunicode.put("Rvzigzag","\u29DB");
+ symbolunicode.put("rcurvyangle","\u29FD");
+ symbolunicode.put("rbrbrak","\u3015"); */
+ symbolunicode.put("vert","\u007C");
+ /* symbolunicode.put("Vert","\u2016");
+ symbolunicode.put("Vvert","\u2980"); */
+ symbolunicode.put("exclam","\u0021");
+ /* symbolunicode.put("comma","\u002C");
+ symbolunicode.put("mathcolon","\u003A");
+ symbolunicode.put("semicolon","\u003B");
+ symbolunicode.put("overbracket","\u23B4");
+ symbolunicode.put("overparen","\u23DC"); */
+ symbolunicode.put("overbrace","\u23DE");
+ // symbolunicode.put("underbracket","\u23B5");
+ // symbolunicode.put("underparen","\u23DD");
+ symbolunicode.put("underbrace","\u23DF");
+ symbolunicode.put("grave","\u0300");
+ symbolunicode.put("acute","\u0301");
+ symbolunicode.put("hat","\u0302");
+ symbolunicode.put("tilde","\u0303");
+ symbolunicode.put("bar","\u0304");
+ symbolunicode.put("overbar","\u0305");
+ symbolunicode.put("breve","\u0306");
+ symbolunicode.put("dot","\u0307");
+ /* symbolunicode.put("ddot","\u0308");
+ symbolunicode.put("ovhook","\u0309");
+ symbolunicode.put("ocirc","\u030A");
+ symbolunicode.put("check","\u030C");
+ symbolunicode.put("not","\u0338");
+ symbolunicode.put("leftharpoonaccent","\u20D0");
+ symbolunicode.put("rightharpoonaccent","\u20D1");
+ symbolunicode.put("vertoverlay","\u20D2");
+ symbolunicode.put("overleftarrow","\u20D6"); */
+ symbolunicode.put("vec","\u20D7");
+ symbolunicode.put("dddot","\u20DB");
+ /* symbolunicode.put("ddddot","\u20DC");
+ symbolunicode.put("overleftrightarrow","\u20E1");
+ symbolunicode.put("annuity","\u20E7");
+ symbolunicode.put("widebridgeabove","\u20E9");
+ symbolunicode.put("threeunderdot","\u20E8");
+ symbolunicode.put("underrightharpoondown","\u20EC");
+ symbolunicode.put("underleftharpoondown","\u20ED");
+ symbolunicode.put("underleftarrow","\u20EE");
+ symbolunicode.put("underrightarrow","\u20EF");*/
+ // symbolunicode.put("Bbbsum","\u2140");
+ symbolunicode.put("prod","\u220F");
+ // symbolunicode.put("coprod","\u2210");
+ symbolunicode.put("sum","\u2211");
+ symbolunicode.put("int","\u222B");
+ symbolunicode.put("iint","\u222C");
+ symbolunicode.put("iiint","\u222D");
+ symbolunicode.put("oint","\u222E");
+ symbolunicode.put("oiint","\u222F");
+ symbolunicode.put("oiiint","\u2230");
+ /* symbolunicode.put("intclockwise","\u2231");
+ symbolunicode.put("varointclockwise","\u2232");
+ symbolunicode.put("ointctrclockwise","\u2233");
+ symbolunicode.put("bigwedge","\u22C0");
+ symbolunicode.put("bigvee","\u22C1");
+ symbolunicode.put("bigcap","\u22C2");
+ symbolunicode.put("bigcup","\u22C3");
+ symbolunicode.put("leftouterjoin","\u27D5");
+ symbolunicode.put("rightouterjoin","\u27D6");
+ symbolunicode.put("fullouterjoin","\u27D7");
+ symbolunicode.put("bigbot","\u27D8");
+ symbolunicode.put("bigtop","\u27D9");
+ symbolunicode.put("xsol","\u29F8");
+ symbolunicode.put("xbsol","\u29F9");
+ symbolunicode.put("bigodot","\u2A00");
+ symbolunicode.put("bigoplus","\u2A01");
+ symbolunicode.put("bigotimes","\u2A02");
+ symbolunicode.put("bigcupdot","\u2A03");
+ symbolunicode.put("biguplus","\u2A04");
+ symbolunicode.put("bigsqcap","\u2A05");
+ symbolunicode.put("bigsqcup","\u2A06");
+ symbolunicode.put("conjquant","\u2A07");
+ symbolunicode.put("disjquant","\u2A08");
+ symbolunicode.put("bigtimes","\u2A09");
+ symbolunicode.put("modtwosum","\u2A0A");
+ symbolunicode.put("sumint","\u2A0B");
+ symbolunicode.put("iiiint","\u2A0C");
+ symbolunicode.put("intbar","\u2A0D");
+ symbolunicode.put("intBar","\u2A0E");
+ symbolunicode.put("fint","\u2A0F");
+ symbolunicode.put("cirfint","\u2A10");
+ symbolunicode.put("awint","\u2A11");
+ symbolunicode.put("rppolint","\u2A12");
+ symbolunicode.put("scpolint","\u2A13");
+ symbolunicode.put("npolint","\u2A14");
+ symbolunicode.put("pointint","\u2A15");
+ symbolunicode.put("sqint","\u2A16");
+ symbolunicode.put("intlarhk","\u2A17");
+ symbolunicode.put("intx","\u2A18");
+ symbolunicode.put("intcap","\u2A19");
+ symbolunicode.put("intcup","\u2A1A");
+ symbolunicode.put("upint","\u2A1B");
+ symbolunicode.put("lowint","\u2A1C");
+ symbolunicode.put("Join","\u2A1D");
+ symbolunicode.put("bigtriangleleft","\u2A1E");
+ symbolunicode.put("zcmp","\u2A1F");
+ symbolunicode.put("zpipe","\u2A20");
+ symbolunicode.put("zproject","\u2A21");
+ symbolunicode.put("biginterleave","\u2AFc");
+ symbolunicode.put("bigtalloblong","\u2AFF"); */
+ // symbolunicode.put("bigBbbsum","\u2140");
+ symbolunicode.put("bigprod","\u220F");
+ // symbolunicode.put("bigcoprod","\u2210");
+ symbolunicode.put("bigsum","\u2211");
+ symbolunicode.put("bigint","\u222B");
+ symbolunicode.put("bigiint","\u222C");
+ symbolunicode.put("bigiiint","\u222D");
+ symbolunicode.put("bigoint","\u222E");
+ symbolunicode.put("bigoiint","\u222F");
+ symbolunicode.put("bigoiiint","\u2230");
+ /* symbolunicode.put("bigintclockwise","\u2231");
+ symbolunicode.put("bigvarointclockwise","\u2232");
+ symbolunicode.put("bigointctrclockwise","\u2233");
+ symbolunicode.put("bigbigwedge","\u22C0");
+ symbolunicode.put("bigbigvee","\u22C1");
+ symbolunicode.put("bigbigcap","\u22C2");
+ symbolunicode.put("bigbigcup","\u22C3");
+ symbolunicode.put("bigleftouterjoin","\u27D5");
+ symbolunicode.put("bigrightouterjoin","\u27D6");
+ symbolunicode.put("bigfullouterjoin","\u27D7");
+ symbolunicode.put("bigbigbot","\u27D8");
+ symbolunicode.put("bigbigtop","\u27D9");
+ symbolunicode.put("bigxsol","\u29F8");
+ symbolunicode.put("bigxbsol","\u29F9");
+ symbolunicode.put("bigbigodot","\u2A00");
+ symbolunicode.put("bigbigoplus","\u2A01");
+ symbolunicode.put("bigbigotimes","\u2A02");
+ symbolunicode.put("bigbigcupdot","\u2A03");
+ symbolunicode.put("bigbiguplus","\u2A04");
+ symbolunicode.put("bigbigsqcap","\u2A05");
+ symbolunicode.put("bigbigsqcup","\u2A06");
+ symbolunicode.put("bigconjquant","\u2A07");
+ symbolunicode.put("bigdisjquant","\u2A08");
+ symbolunicode.put("bigbigtimes","\u2A09");
+ symbolunicode.put("bigmodtwosum","\u2A0A");
+ symbolunicode.put("bigsumint","\u2A0B");
+ symbolunicode.put("bigiiiint","\u2A0C");
+ symbolunicode.put("bigintbar","\u2A0D");
+ symbolunicode.put("bigintBar","\u2A0E");
+ symbolunicode.put("bigfint","\u2A0F");
+ symbolunicode.put("bigcirfint","\u2A10");
+ symbolunicode.put("bigawint","\u2A11");
+ symbolunicode.put("bigrppolint","\u2A12");
+ symbolunicode.put("bigscpolint","\u2A13");
+ symbolunicode.put("bignpolint","\u2A14");
+ symbolunicode.put("bigpointint","\u2A15");
+ symbolunicode.put("bigsqint","\u2A16");
+ symbolunicode.put("bigintlarhk","\u2A17");
+ symbolunicode.put("bigintx","\u2A18");
+ symbolunicode.put("bigintcap","\u2A19");
+ symbolunicode.put("bigintcup","\u2A1A");
+ symbolunicode.put("bigupint","\u2A1B");
+ symbolunicode.put("biglowint","\u2A1C");
+ symbolunicode.put("bigJoin","\u2A1D");
+ symbolunicode.put("bigbigtriangleleft","\u2A1E");
+ symbolunicode.put("bigzcmp","\u2A1F");
+ symbolunicode.put("bigzpipe","\u2A20");
+ symbolunicode.put("bigzproject","\u2A21");
+ symbolunicode.put("bigbiginterleave","\u2AFc");
+ symbolunicode.put("bigbigtalloblong","\u2AFF"); */
+ // symbolunicode.put("bigbigBbbsum","\u2140");
+ symbolunicode.put("bigbigprod","\u220F");
+ // symbolunicode.put("bigbigcoprod","\u2210");
+ symbolunicode.put("bigbigsum","\u2211");
+ symbolunicode.put("bigbigint","\u222B");
+ symbolunicode.put("bigbigiint","\u222C");
+ symbolunicode.put("bigbigiiint","\u222D");
+ symbolunicode.put("bigbigoint","\u222E");
+ symbolunicode.put("bigbigoiint","\u222F");
+ symbolunicode.put("bigbigoiiint","\u2230");
+/* symbolunicode.put("bigbigintclockwise","\u2231");
+ symbolunicode.put("bigbigvarointclockwise","\u2232");
+ symbolunicode.put("bigbigointctrclockwise","\u2233");
+ symbolunicode.put("bigbigbigwedge","\u22C0");
+ symbolunicode.put("bigbigbigvee","\u22C1");
+ symbolunicode.put("bigbigbigcap","\u22C2");
+ symbolunicode.put("bigbigbigcup","\u22C3");
+ symbolunicode.put("bigbigleftouterjoin","\u27D5");
+ symbolunicode.put("bigbigrightouterjoin","\u27D6");
+ symbolunicode.put("bigbigfullouterjoin","\u27D7");
+ symbolunicode.put("bigbigbigbot","\u27D8");
+ symbolunicode.put("bigbigbigtop","\u27D9");
+ symbolunicode.put("bigbigxsol","\u29F8");
+ symbolunicode.put("bigbigxbsol","\u29F9");
+ symbolunicode.put("bigbigbigodot","\u2A00");
+ symbolunicode.put("bigbigbigoplus","\u2A01");
+ symbolunicode.put("bigbigbigotimes","\u2A02");
+ symbolunicode.put("bigbigbigcupdot","\u2A03");
+ symbolunicode.put("bigbigbiguplus","\u2A04");
+ symbolunicode.put("bigbigbigsqcap","\u2A05");
+ symbolunicode.put("bigbigbigsqcup","\u2A06");
+ symbolunicode.put("bigbigconjquant","\u2A07");
+ symbolunicode.put("bigbigdisjquant","\u2A08");
+ symbolunicode.put("bigbigbigtimes","\u2A09");
+ symbolunicode.put("bigbigmodtwosum","\u2A0A");
+ symbolunicode.put("bigbigsumint","\u2A0B");
+ symbolunicode.put("bigbigiiiint","\u2A0C");
+ symbolunicode.put("bigbigintbar","\u2A0D");
+ symbolunicode.put("bigbigintBar","\u2A0E");
+ symbolunicode.put("bigbigfint","\u2A0F");
+ symbolunicode.put("bigbigcirfint","\u2A10");
+ symbolunicode.put("bigbigawint","\u2A11");
+ symbolunicode.put("bigbigrppolint","\u2A12");
+ symbolunicode.put("bigbigscpolint","\u2A13");
+ symbolunicode.put("bigbignpolint","\u2A14");
+ symbolunicode.put("bigbigpointint","\u2A15");
+ symbolunicode.put("bigbigsqint","\u2A16");
+ symbolunicode.put("bigbigintlarhk","\u2A17");
+ symbolunicode.put("bigbigintx","\u2A18");
+ symbolunicode.put("bigbigintcap","\u2A19");
+ symbolunicode.put("bigbigintcup","\u2A1A");
+ symbolunicode.put("bigbigupint","\u2A1B");
+ symbolunicode.put("bigbiglowint","\u2A1C");
+ symbolunicode.put("bigbigJoin","\u2A1D");
+ symbolunicode.put("bigbigbigtriangleleft","\u2A1E");
+ symbolunicode.put("bigbigzcmp","\u2A1F");
+ symbolunicode.put("bigbigzpipe","\u2A20");
+ symbolunicode.put("bigbigzproject","\u2A21");
+ symbolunicode.put("bigbigbiginterleave","\u2AFc");
+ symbolunicode.put("bigbigbigtalloblong","\u2AFF"); */
+
+ symbolunicode.put("plus","\u002B");
+ symbolunicode.put("pm","\u00B1");
+ /* symbolunicode.put("cdotp","\u00B7");
+ symbolunicode.put("times","\u00D7");
+ symbolunicode.put("div","\u00F7");
+ symbolunicode.put("dagger","\u2020");
+ symbolunicode.put("ddagger","\u2021");
+ symbolunicode.put("smblkcircle","\u2022");
+ symbolunicode.put("tieconcat","\u2040");
+ symbolunicode.put("fracslash","\u2044");
+ symbolunicode.put("upand","\u214B");
+ symbolunicode.put("minus","\u2212");
+ symbolunicode.put("mp","\u2213");
+ symbolunicode.put("dotplus","\u2214");
+ symbolunicode.put("divslash","\u2215");
+ symbolunicode.put("smallsetminus","\u2216");
+ symbolunicode.put("ast","\u2217");
+ symbolunicode.put("vysmwhtcircle","\u2218");
+ symbolunicode.put("vysmblkcircle","\u2219");
+ symbolunicode.put("wedge","\u2227");
+ symbolunicode.put("vee","\u2228");
+ symbolunicode.put("cap","\u2229");
+ symbolunicode.put("cup","\u222A");
+ symbolunicode.put("dotminus","\u2238");
+ symbolunicode.put("invlazys","\u223E");
+ symbolunicode.put("wr","\u2240");
+ symbolunicode.put("cupleftarrow","\u228C");
+ symbolunicode.put("cupdot","\u228D");
+ symbolunicode.put("uplus","\u228E");
+ symbolunicode.put("sqcap","\u2293");
+ symbolunicode.put("sqcup","\u2294");
+ symbolunicode.put("oplus","\u2295");
+ symbolunicode.put("ominus","\u2296");
+ symbolunicode.put("otimes","\u2297");
+ symbolunicode.put("oslash","\u2298");
+ symbolunicode.put("odot","\u2299");
+ symbolunicode.put("circledcirc","\u229A");
+ symbolunicode.put("circleddast","\u229B");
+ symbolunicode.put("circledequal","\u229C");
+ symbolunicode.put("circleddash","\u229D");
+ symbolunicode.put("boxplus","\u229E");
+ symbolunicode.put("boxminus","\u229F");
+ symbolunicode.put("boxtimes","\u22A0");
+ symbolunicode.put("boxdot","\u22A1");
+ symbolunicode.put("intercal","\u22BA");
+ symbolunicode.put("veebar","\u22BB");
+ symbolunicode.put("barwedge","\u22BC");
+ symbolunicode.put("barvee","\u22BD");
+ symbolunicode.put("smwhtdiamond","\u22C4"); */
+ symbolunicode.put("cdot","\u22C5");
+ /* symbolunicode.put("star","\u22C6");
+ symbolunicode.put("divideontimes","\u22C7");
+ symbolunicode.put("ltimes","\u22C9");
+ symbolunicode.put("rtimes","\u22CA");
+ symbolunicode.put("leftthreetimes","\u22CB");
+ symbolunicode.put("rightthreetimes","\u22CC");
+ symbolunicode.put("curlyvee","\u22CE");
+ symbolunicode.put("curlywedge","\u22CF");
+ symbolunicode.put("Cap","\u22D2");
+ symbolunicode.put("Cup","\u22D3");
+ symbolunicode.put("varbarwedge","\u2305");
+ symbolunicode.put("vardoublewedge","\u2306");
+ symbolunicode.put("obar","\u233D");
+ symbolunicode.put("bigtriangleup","\u25B3");
+ symbolunicode.put("triangleright","\u25B7");
+ symbolunicode.put("triangleleft","\u25C1");
+ symbolunicode.put("mdlgwhtcircle","\u25CB");
+ symbolunicode.put("boxbar","\u25EB");
+ symbolunicode.put("veedot","\u27C7");
+ symbolunicode.put("wedgedot","\u27D1");
+ symbolunicode.put("lozengeminus","\u27E0");
+ symbolunicode.put("concavediamond","\u27E1");
+ symbolunicode.put("concavediamondtickleft","\u27E2");
+ symbolunicode.put("concavediamondtickright","\u27E3");
+ symbolunicode.put("whitesquaretickleft","\u27E4");
+ symbolunicode.put("whitesquaretickright","\u27E5");
+ symbolunicode.put("typecolon","\u2982");
+ symbolunicode.put("circlehbar","\u29B5");
+ symbolunicode.put("circledvert","\u29B6");
+ symbolunicode.put("circledparallel","\u29B7");
+ symbolunicode.put("obslash","\u29B8");
+ symbolunicode.put("operp","\u29B9");
+ symbolunicode.put("olessthan","\u29C0");
+ symbolunicode.put("ogreaterthan","\u29C1");
+ symbolunicode.put("boxdiag","\u29C4");
+ symbolunicode.put("boxbslash","\u29C5");
+ symbolunicode.put("boxast","\u29C6");
+ symbolunicode.put("boxcicle","\u29C7");
+ symbolunicode.put("boxbox","\u29C8");
+ symbolunicode.put("triangleserifs","\u29CD");
+ symbolunicode.put("hourglass","\u29D6");
+ symbolunicode.put("blackhourglass","\u29D7");
+ symbolunicode.put("shuffle","\u29E2");
+ symbolunicode.put("mdlgblkozenge","\u29EB");
+ symbolunicode.put("setminus","\u29F5");
+ symbolunicode.put("dsol","\u29F6");
+ symbolunicode.put("rsolbar","\u29F7");
+ symbolunicode.put("doubleplus","\u29FA");
+ symbolunicode.put("tripleplus","\u29FB");
+ symbolunicode.put("tplus","\u29FE");
+ symbolunicode.put("tminus","\u29FF");
+ symbolunicode.put("ringplus","\u2A22");
+ symbolunicode.put("plushat","\u2A23");
+ symbolunicode.put("simplus","\u2A24");
+ symbolunicode.put("plusdot","\u2A25");
+ symbolunicode.put("plussim","\u2A26");
+ symbolunicode.put("plussubtwo","\u2A27");
+ symbolunicode.put("plustrif","\u2A28");
+ symbolunicode.put("commaminus","\u2A29");
+ symbolunicode.put("minusdot","\u2A2A");
+ symbolunicode.put("minusfdots","\u2A2B");
+ symbolunicode.put("minusrdots","\u2A2C");
+ symbolunicode.put("opluslhrim","\u2A2D");
+ symbolunicode.put("oplusrhrim","\u2A2E");
+ symbolunicode.put("vectimes","\u2A2F");
+ symbolunicode.put("dottimes","\u2A30");
+ symbolunicode.put("timesbar","\u2A31");
+ symbolunicode.put("btimes","\u2A32");
+ symbolunicode.put("smashtimes","\u2A33");
+ symbolunicode.put("otimeslhrim","\u2A34");
+ symbolunicode.put("otimesrhrim","\u2A35");
+ symbolunicode.put("otimeshat","\u2A36");
+ symbolunicode.put("Otimes","\u2A37");
+ symbolunicode.put("odiv","\u2A38");
+ symbolunicode.put("triangleplus","\u2A39");
+ symbolunicode.put("triangleminus","\u2A3A");
+ symbolunicode.put("triangletimes","\u2A3B");
+ symbolunicode.put("intprod","\u2A3C");
+ symbolunicode.put("intprodr","\u2A3D");
+ symbolunicode.put("fcmp","\u2A3E");
+ symbolunicode.put("amalg","\u2A3F");
+ symbolunicode.put("capdot","\u2A40");
+ symbolunicode.put("barcup","\u2A42");
+ symbolunicode.put("barcap","\u2A43");
+ symbolunicode.put("capwedge","\u2A44");
+ symbolunicode.put("cupvee","\u2A45");
+ symbolunicode.put("cupovercap","\u2A46");
+ symbolunicode.put("cupovercup","\u2A47");
+ symbolunicode.put("cupbarcap","\u2A48");
+ symbolunicode.put("capbarcup","\u2A49");
+ symbolunicode.put("twocups","\u2A4A");
+ symbolunicode.put("twocaps","\u2A4B");
+ symbolunicode.put("closedvarcup","\u2A4C");
+ symbolunicode.put("closedvarcap","\u2A4D");
+ symbolunicode.put("Sqcap","\u2A4E");
+ symbolunicode.put("Sqcup","\u2A4F");
+ symbolunicode.put("closedvarcupsmashprod","\u2A50");
+ symbolunicode.put("wedgeodot","\u2A51");
+ symbolunicode.put("veeodot","\u2A52");
+ symbolunicode.put("Wedge","\u2A53");
+ symbolunicode.put("Vee","\u2A54");
+ symbolunicode.put("wedgeonwedge","\u2A55");
+ symbolunicode.put("veeonvee","\u2A56");
+ symbolunicode.put("bigslopedvee","\u2A57");
+ symbolunicode.put("bigslopedwedge","\u2A58");
+ symbolunicode.put("wedgemidvert","\u2A5A");
+ symbolunicode.put("veemidvert","\u2A5B");
+ symbolunicode.put("midbarwedge","\u2A5C");
+ symbolunicode.put("midbarvee","\u2A5D");
+ symbolunicode.put("doublebarwedge","\u2A5E");
+ symbolunicode.put("wedgebar","\u2A5F");
+ symbolunicode.put("wedgedoublebar","\u2A60");
+ symbolunicode.put("varveebar","\u2A61");
+ symbolunicode.put("doublebarvee","\u2A62");
+ symbolunicode.put("veedoublebar","\u2A63");
+ symbolunicode.put("dsub","\u2A64");
+ symbolunicode.put("rsub","\u2A65");
+ symbolunicode.put("eqqplus","\u2A71");
+ symbolunicode.put("pluseqq","\u2A72");
+ symbolunicode.put("interleave","\u2AF4");
+ symbolunicode.put("nhVvert","\u2AF5");
+ symbolunicode.put("threedotcolon","\u2AF6");
+ symbolunicode.put("trslash","\u2AFB");
+ symbolunicode.put("sslash","\u2AFD");
+ symbolunicode.put("talloblong","\u2AFE");*/
+/* symbolunicode.put("octothrope", "\u0023");
+ symbolunicode.put("mathdollar","\u0024");
+ symbolunicode.put("percent","\u0025");
+ symbolunicode.put("ampersand","\u0026");
+ symbolunicode.put("period","\u002E");
+ symbolunicode.put("mathslash","\u002F");
+ symbolunicode.put("question","\u003F");
+ symbolunicode.put("atsign","\u0040");*/
+ symbolunicode.put("backslash","\\");
+ /* symbolunicode.put("sterling","\u00A3");
+ symbolunicode.put("yen","\u00A5");
+ symbolunicode.put("neg","\u00AC");
+ symbolunicode.put("horizbar","\u2015");
+ symbolunicode.put("twolowline","\u2017");
+ symbolunicode.put("enleadertwodots","\u2025");
+ symbolunicode.put("unicodeellipsis","\u2026");
+ symbolunicode.put("prime","\u2032");
+ symbolunicode.put("dprime","\u2033");
+ symbolunicode.put("trprime","\u2034");
+ symbolunicode.put("backprime","\u2035");
+ symbolunicode.put("backdprime","\u2036");
+ symbolunicode.put("backtrprime","\u2037");
+ symbolunicode.put("Exclam","\u203C");
+ symbolunicode.put("qprime","\u2057");
+ symbolunicode.put("euro","\u20AC");
+ symbolunicode.put("enclosecircle","\u20DD");
+ symbolunicode.put("enclosesquare","\u20DE");
+ symbolunicode.put("enclosediamond","\u20DF");
+ symbolunicode.put("enclosetriangle","\u20E4");
+ symbolunicode.put("Eulerconst","\u2017");
+ symbolunicode.put("Planckconst","\u210E");
+ symbolunicode.put("mho","\u2127");
+ symbolunicode.put("Finv","\u2132");
+ symbolunicode.put("Bbbpi","\u213C");
+ symbolunicode.put("Game","\u2141");
+ symbolunicode.put("sansLturned","\u2142");
+ symbolunicode.put("sansLmirrored","\u2143");
+ symbolunicode.put("Yup","\u2144");
+ symbolunicode.put("mitBbbD","\u2145");
+ symbolunicode.put("mitBbbd","\u2146");
+ symbolunicode.put("mitBbbe","\u2147");
+ symbolunicode.put("mitBbbi","\u2148");
+ symbolunicode.put("mitBbbj","\u2149");
+ symbolunicode.put("updownarrowbar","\u21A8");
+ symbolunicode.put("linefeed","\u21B4");
+ symbolunicode.put("carriagereturn","\u21B5");
+ symbolunicode.put("barovernorthwestarrow","\u21B8");
+ symbolunicode.put("barleftarrowrightarrowbar","\u21B9");
+ symbolunicode.put("acwopencirclearrow","\u21BA");
+ symbolunicode.put("cwopencirclearrow","\u21BB");
+ symbolunicode.put("nHuparrow","\u21DE");
+ symbolunicode.put("nHdownarrow","\u21DF");
+ symbolunicode.put("leftdasharrow","\u21E0");
+ symbolunicode.put("updasharrow","\u21E1");
+ symbolunicode.put("rightdasharrow","\u21E2");
+ symbolunicode.put("downdasharrow","\u21E3");
+ symbolunicode.put("leftwhitearrow","\u21E6");
+ symbolunicode.put("upwhitearrow","\u21E7");
+ symbolunicode.put("rightwhitearrow","\u21E8");
+ symbolunicode.put("downwhitearrow","\u21E9");
+ symbolunicode.put("whitearrowupfrombar","\u21EA"); */
+ symbolunicode.put("forall","\u2200");
+ symbolunicode.put("complement","\u2201");
+ symbolunicode.put("exists","\u2203");
+ symbolunicode.put("nexists","\u2204");
+ symbolunicode.put("varnothing","\u2205");
+ symbolunicode.put("increment","\u2206");
+ symbolunicode.put("QED","\u220E");
+ symbolunicode.put("infty","\u221E");
+ symbolunicode.put("rightangle","\u221F");
+ symbolunicode.put("angle","\u2220");
+ symbolunicode.put("measuredangle","\u2221");
+ symbolunicode.put("sphericalangle","\u2222");
+ symbolunicode.put("therefore","\u2234");
+ symbolunicode.put("because","\u2235");
+ /* symbolunicode.put("sinewave","\u223F");
+ symbolunicode.put("top","\u22A4");
+ symbolunicode.put("bot","\u22A5");
+ symbolunicode.put("hermitmatrix","\u22B9");
+ symbolunicode.put("measuredrightangle","\u22BE");
+ symbolunicode.put("varlrtriangle","\u22BF");
+ symbolunicode.put("unicodecdots","\u22EF");
+ symbolunicode.put("diameter","\u2300");
+ symbolunicode.put("invnot","\u2310");
+ symbolunicode.put("turnednot","\u2319");
+ symbolunicode.put("inttop","\u2320");
+ symbolunicode.put("intbottom","\u2321");
+ symbolunicode.put("lparenuend","\u239B");
+ symbolunicode.put("lparenextender","\u239C");
+ symbolunicode.put("lparenlend","\u239D");
+ symbolunicode.put("rparenuend","\u239E");
+ symbolunicode.put("rparenextender","\u239F");
+ symbolunicode.put("rparenlend","\u23A0");
+ symbolunicode.put("lbrackuend","\u23A1");
+ symbolunicode.put("lbrackextender","\u23A2");
+ symbolunicode.put("lbracklend","\u23A3");
+ symbolunicode.put("rbrackuend","\u23A4");
+ symbolunicode.put("rbrackextender","\u23A5");
+ symbolunicode.put("rbracklend","\u23A6");
+ symbolunicode.put("lbraceuend","\u23A7");
+ symbolunicode.put("lbracemid","\u23A8");
+ symbolunicode.put("lbracelend","\u23A9");
+ symbolunicode.put("vbraceextender","\u23AA");
+ symbolunicode.put("rbraceuend","\u23AB");
+ symbolunicode.put("rbracemid","\u23AC");
+ symbolunicode.put("rbracelend","\u23AD");
+ symbolunicode.put("intextender","\u23AE");
+ symbolunicode.put("harrowextender","\u23AF");
+ symbolunicode.put("sumtop","\u23B2");
+ symbolunicode.put("sumbottom","\u23B3");
+ symbolunicode.put("sqrtbottom","\u23B7");
+ symbolunicode.put("obrbrak","\u23E0");
+ symbolunicode.put("ubrbrak","\u23E1");
+ symbolunicode.put("blanksymbol","\u2422");
+ symbolunicode.put("mathvisiblespace","\u2423");
+ symbolunicode.put("mdlgblksquare","\u25A0");
+ symbolunicode.put("mdlgwhtsquare","\u25A1");
+ symbolunicode.put("bigblacktriangleup","\u25B2");
+ symbolunicode.put("blacktriangleright","\u25B6");
+ symbolunicode.put("blackpointerright","\u25BA");
+ symbolunicode.put("whitepointerright","\u25BB");
+ symbolunicode.put("bigblacktriangledown","\u25BC");
+ symbolunicode.put("bigtriangledown","\u25BD");
+ symbolunicode.put("blacktriangleleft","\u25C0");
+ symbolunicode.put("blackpointerleft","\u25C4");
+ symbolunicode.put("whitepointerleft","\u25C5");
+ symbolunicode.put("bullseye","\u25CE");
+ symbolunicode.put("mdlgblkcircle","\u25CF");
+ symbolunicode.put("smwhtcircle","\u25E6");
+ symbolunicode.put("squareleftblack","\u25E7");
+ symbolunicode.put("squarerightblack","\u25E8");
+ symbolunicode.put("mdwhtsquare","\u25FB");
+ symbolunicode.put("mdblksquare","\u25FC");
+ symbolunicode.put("bigstar","\u2605");
+ symbolunicode.put("bigwhitestar","\u2606");
+ symbolunicode.put("spadesuit","\u2660");
+ symbolunicode.put("heartsuit","\u2661");
+ symbolunicode.put("diamondsuit","\u2662");
+ symbolunicode.put("clubsuit","\u2663");
+ symbolunicode.put("varspadesuit","\u2664");
+ symbolunicode.put("varheartsuit","\u2665");
+ symbolunicode.put("vardiamondsuit","\u2666");
+ symbolunicode.put("varclubsuit","\u2667");
+ symbolunicode.put("quarternote","\u2669");
+ symbolunicode.put("eighthnote","\u266A");
+ symbolunicode.put("flat","\u266D");
+ symbolunicode.put("natural","\u266E");
+ symbolunicode.put("sharp","\u266F");
+ symbolunicode.put("dicei","\u2680");
+ symbolunicode.put("diceii","\u2681");
+ symbolunicode.put("diceiii","\u2682");
+ symbolunicode.put("diceiv","\u2683");
+ symbolunicode.put("dicev","\u2684");
+ symbolunicode.put("dicevi","\u2685");
+ symbolunicode.put("checkmark","\u2713");
+ symbolunicode.put("maltese","\u2720");
+ symbolunicode.put("varstar","\u2736");
+ symbolunicode.put("threedangle","\u27C0");
+ symbolunicode.put("whiteinwhitetriangle","\u27C1");
+ symbolunicode.put("subsetcirc","\u27C3");
+ symbolunicode.put("supsetcirc","\u27C4");
+ symbolunicode.put("diamondcdot","\u27D0");
+ symbolunicode.put("rdiagovfdiag","\u292B");
+ symbolunicode.put("fdiagovrdiag","\u292C");
+ symbolunicode.put("seovnearrow","\u292D");
+ symbolunicode.put("neovsearrow","\u292E");
+ symbolunicode.put("fdiagovnearrow","\u292F");
+ symbolunicode.put("rdiagovsearrow","\u2930");
+ symbolunicode.put("neovnwarrow","\u2931");
+ symbolunicode.put("nwovnearrow","\u2932");
+ symbolunicode.put("uprightcurvearrow","\u2934");
+ symbolunicode.put("downrightcurvedarrow","\u2935");
+ symbolunicode.put("mdsmblkcircle","\u2981");
+ symbolunicode.put("fourvdots","\u2999");
+ symbolunicode.put("vzigzag","\u299A");
+ symbolunicode.put("measuredangleleft","\u299B");
+ symbolunicode.put("rightanglesqr","\u299C");
+ symbolunicode.put("rightanglemdot","\u299D");
+ symbolunicode.put("angles","\u299E");
+ symbolunicode.put("angdnr","\u299F");
+ symbolunicode.put("gtlpar","\u29A0");
+ symbolunicode.put("sphericalangleup","\u29A1");
+ symbolunicode.put("turnangle","\u29A2");
+ symbolunicode.put("revangle","\u29A3");
+ symbolunicode.put("angleubar","\u29A4");
+ symbolunicode.put("revangleubar","\u29A5");
+ symbolunicode.put("wideangledown","\u29A6");
+ symbolunicode.put("wideangleup","\u29A7");
+ symbolunicode.put("measanglerutone","\u29A8");
+ symbolunicode.put("measanglelutonw","\u29A9");
+ symbolunicode.put("measanglerdtose","\u29AA");
+ symbolunicode.put("measangleldtosw","\u29AB");
+ symbolunicode.put("measangleurtone","\u29AC");
+ symbolunicode.put("measangleultonw","\u29AD");
+ symbolunicode.put("measangledrtose","\u29AE");
+ symbolunicode.put("measangledltosw","\u29AF");
+ symbolunicode.put("revemptyset","\u29B0");
+ symbolunicode.put("emptysetobar","\u29B1");
+ symbolunicode.put("emptysetocirc","\u29B2");
+ symbolunicode.put("emptysetoarr","\u29B3");
+ symbolunicode.put("emptysetoarrl","\u29B4");
+ symbolunicode.put("obot","\u29BA");
+ symbolunicode.put("olcross","\u29BB");
+ symbolunicode.put("odotslashdot","\u29BC");
+ symbolunicode.put("uparrowoncircle","\u29BD");
+ symbolunicode.put("circledwhitebullet","\u29BE");
+ symbolunicode.put("circledbullet","\u29BF");
+ symbolunicode.put("cirscir","\u29C2");
+ symbolunicode.put("cirE","\u29C3");
+ symbolunicode.put("boxonbox","\u29C9");
+ symbolunicode.put("triangleodot","\u29CA");
+ symbolunicode.put("triangleubar","\u29CB");
+ symbolunicode.put("triangles","\u29CC");
+ symbolunicode.put("iinfin","\u29DC");
+ symbolunicode.put("tieinfty","\u29DD");
+ symbolunicode.put("nvinfty","\u29DE");
+ symbolunicode.put("laplac","\u29E0");
+ symbolunicode.put("thermod","\u29E7");
+ symbolunicode.put("downtriangleleftblack","\u29E8");
+ symbolunicode.put("downtrianglerightblack","\u29E9");
+ symbolunicode.put("blackdiamonddownarrow","\u29EA");
+ symbolunicode.put("circledownarrow","\u29EC");
+ symbolunicode.put("blackcircledownarrow","\u29ED");
+ symbolunicode.put("errbarsquare","\u29EE");
+ symbolunicode.put("errbarblacksquare","\u29EF");
+ symbolunicode.put("errbardiamond","\u29F0");
+ symbolunicode.put("errbarblackdiamond","\u29F1");
+ symbolunicode.put("errbarcircle","\u29F2");
+ symbolunicode.put("errbarblackcircle","\u29F3");
+ symbolunicode.put("perps","\u2AE1");
+ symbolunicode.put("topcir","\u2AF1");
+ symbolunicode.put("dottedsquare","\u2B1A");
+ symbolunicode.put("lgblksquare","\u2B1B");
+ symbolunicode.put("lgwhtsquare","\u2B1C");
+ symbolunicode.put("medwhitestar","\u2B50");
+ symbolunicode.put("medblackstar","\u2B51");
+ symbolunicode.put("smwhitestar","\u2B52"); */
+ symbolunicode.put("less","\u003C");
+ symbolunicode.put("equal","\u003D");
+ symbolunicode.put("greater","\u003E");
+ /* symbolunicode.put("closure","\u2050");
+ symbolunicode.put("leftarrow","\u2190");
+ symbolunicode.put("uparrow","\u2191");
+ symbolunicode.put("rightarrow","\u2192");
+ symbolunicode.put("downarrow","\u2193");
+ symbolunicode.put("leftrightarrow","\u2194");
+ symbolunicode.put("updownarrow","\u2195");
+ symbolunicode.put("nwarrow","\u2196");
+ symbolunicode.put("nearrow","\u2197");
+ symbolunicode.put("searrow","\u2198");
+ symbolunicode.put("swarrow","\u2199");
+ symbolunicode.put("nleftarrow","\u219A");
+ symbolunicode.put("nrightarrow","\u219B");
+ symbolunicode.put("leftwavearrow","\u219C");
+ symbolunicode.put("rightwavearrow","\u219D");
+ symbolunicode.put("twoheadleftarrow","\u219E");
+ symbolunicode.put("twoheaduparrow","\u219F");
+ symbolunicode.put("twoheadrightarrow","\u21A0");
+ symbolunicode.put("twoheaddownarrow","\u21A1");
+ symbolunicode.put("leftarrowtail","\u21A2");
+ symbolunicode.put("rightarrowtail","\u21A3");
+ symbolunicode.put("mapsfrom","\u21A4");
+ symbolunicode.put("mapsup","\u21A5");
+ symbolunicode.put("mapsto(","\u21A6");
+ symbolunicode.put("mapsdown","\u21A7");
+ symbolunicode.put("hookleftarrow","\u21A9");
+ symbolunicode.put("hookrightarrow","\u21AA");
+ symbolunicode.put("looparrowleft","\u21AB");
+ symbolunicode.put("looparrowright","\u21AC");
+ symbolunicode.put("leftrightsquigarrow","\u21AD");
+ symbolunicode.put("nleftrightarrow","\u21AE");
+ symbolunicode.put("downzigzagarrow","\u21AF");
+ symbolunicode.put("Lsh","\u21B0");
+ symbolunicode.put("Rsh","\u21B1");
+ symbolunicode.put("Ldsh","\u21B2");
+ symbolunicode.put("Rdsh","\u21B3");
+ symbolunicode.put("curvearrowleft","\u21B6");
+ symbolunicode.put("curvearrowright","\u21B7");
+ symbolunicode.put("leftharpoonup","\u21BC");
+ symbolunicode.put("leftharpoondown","\u21BD");
+ symbolunicode.put("upharpoonright","\u21BE");
+ symbolunicode.put("upharpoonleft","\u21BF");
+ symbolunicode.put("rightharpoonup","\u21C0");
+ symbolunicode.put("rightharpoondown","\u21C1");
+ symbolunicode.put("downharpoonright","\u21C2");
+ symbolunicode.put("downharpoonleft","\u21C3");
+ symbolunicode.put("rightleftarrows","\u21C4");
+ symbolunicode.put("updownarrows","\u21C5");
+ symbolunicode.put("leftrightarrows","\u21C6");
+ symbolunicode.put("leftleftarrows","\u21C7");
+ symbolunicode.put("upuparrows","\u21C8");
+ symbolunicode.put("rightrightarrows","\u21C9");
+ symbolunicode.put("downdownarrows","\u21CA");
+ symbolunicode.put("leftrightharpoons","\u21CB");
+ symbolunicode.put("rightleftharpoons","\u21CC");
+ symbolunicode.put("nLeftarrow","\u21CD");
+ symbolunicode.put("nLeftrightarrow","\u21CE");
+ symbolunicode.put("nRightarrow","\u21CF");
+ symbolunicode.put("Leftarrow","\u21D0");
+ symbolunicode.put("Uparrow","\u21D1");
+ symbolunicode.put("Rightarrow","\u21D2");
+ symbolunicode.put("Downarrow","\u21D3");
+ symbolunicode.put("Leftrightarrow","\u21D4");
+ symbolunicode.put("Updownarrow","\u21D5");
+ symbolunicode.put("Nwarrow","\u21D6");
+ symbolunicode.put("Nearrow","\u21D7");
+ symbolunicode.put("Searrow","\u21D8");
+ symbolunicode.put("Swarrow","\u21D9");
+ symbolunicode.put("Lleftarrow","\u21DA");
+ symbolunicode.put("Rrightarrow","\u21DB");
+ symbolunicode.put("leftsquigarrow","\u21DC");
+ symbolunicode.put("rightsquigarrow","\u21DD");
+ symbolunicode.put("barleftarrow","\u21E4");
+ symbolunicode.put("rightarrowbar","\u21E5");
+ symbolunicode.put("circleonrightarrow","\u21F4");
+ symbolunicode.put("downuparrows","\u21F5");
+ symbolunicode.put("rightthreearrows","\u21F6");
+ symbolunicode.put("nvleftarrow","\u21F7");
+ symbolunicode.put("nvrightarrow","\u21F8");
+ symbolunicode.put("nvleftrightarrow","\u21F9");
+ symbolunicode.put("nVleftarrow","\u21FA");
+ symbolunicode.put("nVrightarrow","\u21FB");
+ symbolunicode.put("nVleftrightarrow","\u21FC");
+ symbolunicode.put("leftarrowtriangle","\u21FD");
+ symbolunicode.put("rightarrowtriangle","\u21FE");
+ symbolunicode.put("leftrightarrowtriangle","\u21FF");
+ symbolunicode.put("in","\u2208");
+ symbolunicode.put("notin","\u2209");
+ symbolunicode.put("smallin","\u220A");
+ symbolunicode.put("ni","\u220B");
+ symbolunicode.put("nni","\u220C");
+ symbolunicode.put("smallni","\u220D");
+ symbolunicode.put("propto","\u221D");
+ symbolunicode.put("mid","\u2223");
+ symbolunicode.put("nmid","\u2224");
+ symbolunicode.put("parallel","\u2225");
+ symbolunicode.put("nparallel","\u2226");
+ symbolunicode.put("mathratio","\u2236");
+ symbolunicode.put("Colon","\u2237");
+ symbolunicode.put("dashcolon","\u2239");
+ symbolunicode.put("dotsminusdots","\u223A");
+ symbolunicode.put("kernelcontraction","\u223B"); */
+ symbolunicode.put("sim","\u223C");
+// symbolunicode.put("backsim","\u223D");
+ symbolunicode.put("nsim","\u2241");
+ symbolunicode.put("eqsim","\u2242");
+ symbolunicode.put("simeq","\u2243");
+ symbolunicode.put("nsime","\u2244");
+ // symbolunicode.put("cong","\u2245");
+ // symbolunicode.put("simneqq","\u2246");
+ // symbolunicode.put("ncong","\u2247");
+ symbolunicode.put("approx","\u2248");
+ symbolunicode.put("napprox","\u2249");
+ symbolunicode.put("approxeq","\u224A");
+ /* symbolunicode.put("approxident","\u224B");
+ symbolunicode.put("backcong","\u224C");
+ symbolunicode.put("asymp","\u224D");
+ symbolunicode.put("Bumpeq","\u224E");
+ symbolunicode.put("bumpeq","\u224F");
+ symbolunicode.put("doteq","\u2250");
+ symbolunicode.put("Doteq","\u2251");
+ symbolunicode.put("fallingdotseq","\u2252");
+ symbolunicode.put("risingdotseq","\u2253");
+ symbolunicode.put("coloneq","\u2254");
+ symbolunicode.put("eqcolon","\u2255");
+ symbolunicode.put("eqcirc","\u2256");
+ symbolunicode.put("circeq","\u2257");
+ symbolunicode.put("arceq","\u2258");
+ symbolunicode.put("wedgeq","\u2259");
+ symbolunicode.put("veeeq","\u225A");
+ symbolunicode.put("stareq","\u225B");
+ symbolunicode.put("triangleq","\u225C");
+ symbolunicode.put("eqdef","\u225D");
+ symbolunicode.put("measeq","\u225E");
+ symbolunicode.put("questeq","\u225F"); */
+ symbolunicode.put("ne","\u2260");
+ symbolunicode.put("equiv","\u2261");
+ symbolunicode.put("nequiv","\u2262");
+ symbolunicode.put("Equiv","\u2263");
+ symbolunicode.put("leq","\u2264");
+ symbolunicode.put("geq","\u2265");
+ symbolunicode.put("leqq","\u2266");
+ symbolunicode.put("geqq","\u2267");
+ symbolunicode.put("lneqq","\u2268");
+ symbolunicode.put("gneqq","\u2269");
+ symbolunicode.put("ll","\u226A");
+ symbolunicode.put("gg","\u226B");
+ /* symbolunicode.put("between","\u226C");
+ symbolunicode.put("nasymp","\u226D");
+ symbolunicode.put("nless","\u226E");
+ symbolunicode.put("ngtr","\u226F");
+ symbolunicode.put("nleq","\u2270");
+ symbolunicode.put("ngeq","\u2271");
+ symbolunicode.put("lesssim","\u2272");
+ symbolunicode.put("gtrsim","\u2273");
+ symbolunicode.put("nlesssim","\u2274");
+ symbolunicode.put("ngtrsim","\u2275");
+ symbolunicode.put("lessgtr","\u2276");
+ symbolunicode.put("gtrless","\u2277");
+ symbolunicode.put("nlessgtr","\u2278");
+ symbolunicode.put("ngtrless","\u2279");
+ symbolunicode.put("prec","\u227A");
+ symbolunicode.put("succ","\u227B");
+ symbolunicode.put("preccurlyeq","\u227C");
+ symbolunicode.put("succcurlyeq","\u227D");
+ symbolunicode.put("precsim","\u227E");
+ symbolunicode.put("succsim","\u227F");
+ symbolunicode.put("nprec","\u2280");
+ symbolunicode.put("nsucc","\u2281");
+ symbolunicode.put("subset","\u2282");
+ symbolunicode.put("supset","\u2283");
+ symbolunicode.put("nsubset","\u2284");
+ symbolunicode.put("nsupset","\u2285");
+ symbolunicode.put("subseteq","\u2286");
+ symbolunicode.put("supseteq","\u2287");
+ symbolunicode.put("nsubseteq","\u2288");
+ symbolunicode.put("nsupseteq","\u2289");
+ symbolunicode.put("subsetneq","\u228A");
+ symbolunicode.put("supsetneq","\u228B");
+ symbolunicode.put("sqsubset","\u228F");
+ symbolunicode.put("sqsupset","\u2290");
+ symbolunicode.put("sqsubseteq","\u2291");
+ symbolunicode.put("sqsupseteq","\u2292");
+ symbolunicode.put("vdash","\u22A2");
+ symbolunicode.put("dashv","\u22A3");
+ symbolunicode.put("assert","\u22A6");
+ symbolunicode.put("models","\u22A7");
+ symbolunicode.put("vDash","\u22A8");
+ symbolunicode.put("Vdash","\u22A9");
+ symbolunicode.put("Vvdash","\u22AA");
+ symbolunicode.put("VDash","\u22AB");
+ symbolunicode.put("nvdash","\u22AC");
+ symbolunicode.put("nvDash","\u22AD");
+ symbolunicode.put("nVdash","\u22AE");
+ symbolunicode.put("nVDash","\u22AF");
+ symbolunicode.put("prurel","\u22B0");
+ symbolunicode.put("scurel","\u22B1");
+ symbolunicode.put("vartriangleleft","\u22B2");
+ symbolunicode.put("vartriangleright","\u22B3");
+ symbolunicode.put("trianglelefteq","\u22B4");
+ symbolunicode.put("trianglerighteq","\u22B5");
+ symbolunicode.put("origof","\u22B6");
+ symbolunicode.put("imageof","\u22B7");
+ symbolunicode.put("multimap","\u22B8");
+ symbolunicode.put("bowtie","\u22C8");
+ symbolunicode.put("backsimeq","\u22CD");
+ symbolunicode.put("Subset","\u22D0");
+ symbolunicode.put("Supset","\u22D1");
+ symbolunicode.put("pitchfork","\u22D4");
+ symbolunicode.put("equalparallel","\u22D5");
+ symbolunicode.put("lessdot","\u22D6");
+ symbolunicode.put("gtrdot","\u22D7");
+ symbolunicode.put("lll","\u22D8");
+ symbolunicode.put("ggg","\u22D9");
+ symbolunicode.put("lesseqgtr","\u22DA");
+ symbolunicode.put("gtreqless","\u22DB");
+ symbolunicode.put("eqless","\u22DC");
+ symbolunicode.put("eqgtr","\u22DD");
+ symbolunicode.put("curlyeqprec","\u22DE");
+ symbolunicode.put("curlyeqsucc","\u22DF");
+ symbolunicode.put("npreccurlyeq","\u22E0");
+ symbolunicode.put("nsucccurlyeq","\u22E1");
+ symbolunicode.put("nsqsubseteq","\u22E2");
+ symbolunicode.put("nsqsupseteq","\u22E3");
+ symbolunicode.put("sqsubsetneq","\u22E4");
+ symbolunicode.put("sqsupsetneq","\u22E5");
+ symbolunicode.put("lnsim","\u22E6");
+ symbolunicode.put("gnsim","\u22E7");
+ symbolunicode.put("precnsim","\u22E8");
+ symbolunicode.put("succnsim","\u22E9");
+ symbolunicode.put("nvartriangleleft","\u22EA");
+ symbolunicode.put("nvartriangleright","\u22EB");
+ symbolunicode.put("ntrianglelefteq","\u22EC");
+ symbolunicode.put("ntrianglerighteq","\u22ED");
+ symbolunicode.put("vdots","\u22EE");
+ symbolunicode.put("adots","\u22F0");
+ symbolunicode.put("ddots","\u22F1");
+ symbolunicode.put("disin","\u22F2");
+ symbolunicode.put("varisins","\u22F3");
+ symbolunicode.put("isins","\u22F4");
+ symbolunicode.put("isindot","\u22F5");
+ symbolunicode.put("varisinobar","\u22F6");
+ symbolunicode.put("isinobar","\u22F7");
+ symbolunicode.put("isinvb","\u22F8");
+ symbolunicode.put("isinE","\u22F9");
+ symbolunicode.put("nisd","\u22FA");
+ symbolunicode.put("varnis","\u22FB");
+ symbolunicode.put("nis","\u22FC");
+ symbolunicode.put("varniobar","\u22FD");
+ symbolunicode.put("niobar","\u22FE");
+ symbolunicode.put("bagmember","\u22FF");
+ symbolunicode.put("frown","\u2322");
+ symbolunicode.put("smile","\u2323");
+ symbolunicode.put("perp","\u27C2");
+ symbolunicode.put("bsolhsub","\u27C8");
+ symbolunicode.put("suphsol","\u27C9");
+ symbolunicode.put("upin","\u27D2");
+ symbolunicode.put("pullback","\u27D3");
+ symbolunicode.put("pushout","\u27D4");
+ symbolunicode.put("DashVDash","\u27DA");
+ symbolunicode.put("dashVdash","\u27DB");
+ symbolunicode.put("multimapinv","\u27DC");
+ symbolunicode.put("vlongdash","\u27DD");
+ symbolunicode.put("longdashv","\u27DE");
+ symbolunicode.put("cirbot","\u27DF");
+ symbolunicode.put("UUparrow","\u27F0");
+ symbolunicode.put("DDownarrow","\u27F1");
+ symbolunicode.put("acwgapcirclearrow","\u27F2");
+ symbolunicode.put("cwgapcirclearrow","\u27F3");
+ symbolunicode.put("rightarrowonoplus","\u27F4");
+ symbolunicode.put("longleftarrow","\u27F5");
+ symbolunicode.put("longrightarrow","\u27F6");
+ symbolunicode.put("longleftrightarrow","\u27F7");
+ symbolunicode.put("Longleftarrow","\u27F8");
+ symbolunicode.put("Longrightarrow","\u27F9");
+ symbolunicode.put("Longleftrightarrow","\u27FA");
+ symbolunicode.put("longmapsfrom","\u27FB");
+ symbolunicode.put("longmapsto","\u27FC");
+ symbolunicode.put("Longmapsfrom","\u27FD");
+ symbolunicode.put("Longmapsto","\u27FE");
+ symbolunicode.put("longrightsquigarrow","\u27FF");
+ symbolunicode.put("nvtwoheadrightarrow","\u2900");
+ symbolunicode.put("nVtwoheadrightarrow","\u2901");
+ symbolunicode.put("nvLeftarrow","\u2902");
+ symbolunicode.put("nvRightarrow","\u2903");
+ symbolunicode.put("nvLeftrightarrow","\u2904");
+ symbolunicode.put("twoheadmapsto","\u2905");
+ symbolunicode.put("Mapsfrom","\u2906");
+ symbolunicode.put("Mapsto","\u2907");
+ symbolunicode.put("downarrowbarred","\u2908");
+ symbolunicode.put("uparrowbarred","\u2909");
+ symbolunicode.put("Uuparrow","\u290A");
+ symbolunicode.put("Ddownarrow","\u290B");
+ symbolunicode.put("leftbkarrow","\u290C");
+ symbolunicode.put("rightbkarrow","\u290D");
+ symbolunicode.put("leftdbkarrow","\u290E");
+ symbolunicode.put("dbkarow","\u290F");
+ symbolunicode.put("drbkarow","\u2910");
+ symbolunicode.put("rightdotarrow","\u2911");
+ symbolunicode.put("baruparrow","\u2912");
+ symbolunicode.put("downarrowbar","\u2913");
+ symbolunicode.put("nvrightarrowtail","\u2914");
+ symbolunicode.put("nVrightarrowtail","\u2915");
+ symbolunicode.put("twoheadrightarrowtail","\u2916");
+ symbolunicode.put("nvtwoheadrightarrowtail","\u2917");
+ symbolunicode.put("nVtwoheadrightarrowtail","\u2918");
+ symbolunicode.put("lefttail","\u2919");
+ symbolunicode.put("righttail","\u291A");
+ symbolunicode.put("leftdbltail","\u291B");
+ symbolunicode.put("rightdbltail","\u291C");
+ symbolunicode.put("diamondleftarrow","\u291D");
+ symbolunicode.put("rightarrowdiamond","\u291E");
+ symbolunicode.put("diamondleftarrowbar","\u291F");
+ symbolunicode.put("barrightarrowdiamond","\u2920");
+ symbolunicode.put("nwsearrow","\u2921");
+ symbolunicode.put("neswarrow","\u2922");
+ symbolunicode.put("hknwarrow","\u2923");
+ symbolunicode.put("hknearrow","\u2924");
+ symbolunicode.put("hksearow","\u2925");
+ symbolunicode.put("hkswarow","\u2926");
+ symbolunicode.put("tona","\u2927");
+ symbolunicode.put("toea","\u2928");
+ symbolunicode.put("tosa","\u2929");
+ symbolunicode.put("towa","\u292A");
+ symbolunicode.put("rightcurvedarrow","\u2933");
+ symbolunicode.put("leftdowncurvedarrow","\u2936");
+ symbolunicode.put("rightdowncurvedarrow","\u2937");
+ symbolunicode.put("cwrightarcarrow","\u2938");
+ symbolunicode.put("acwleftarcarrow","\u2939");
+ symbolunicode.put("acwoverarcarrow","\u293A");
+ symbolunicode.put("acwunderarcarrow","\u293B");
+ symbolunicode.put("curvearrowrightminus","\u293C");
+ symbolunicode.put("curvearrowleftplus","\u293D");
+ symbolunicode.put("cwundercurvearrow","\u293E");
+ symbolunicode.put("ccwundercurvearrow","\u293F");
+ symbolunicode.put("acwcirclearrow","\u2940");
+ symbolunicode.put("cwcirclearrow","\u2941");
+ symbolunicode.put("rightarrowshortleftarrow","\u2942");
+ symbolunicode.put("leftarrowshortrightarrow","\u2943");
+ symbolunicode.put("shortrightarrowleftarrow","\u2944");
+ symbolunicode.put("rightarrowplus","\u2945");
+ symbolunicode.put("leftarrowplus","\u2946");
+ symbolunicode.put("rightarrowx","\u2947");
+ symbolunicode.put("leftrightarrowcircle","\u2948");
+ symbolunicode.put("twoheaduparrowcircle","\u2949");
+ symbolunicode.put("leftrightharpoonupdown","\u294A");
+ symbolunicode.put("leftrightharpoondownup","\u294B");
+ symbolunicode.put("updownharpoonrightleft","\u294C");
+ symbolunicode.put("updownharpoonleftright","\u294D");
+ symbolunicode.put("leftrightharpoonupup","\u294E");
+ symbolunicode.put("updownharpoonrightright","\u294F");
+ symbolunicode.put("leftrightharpoondowndown","\u2950");
+ symbolunicode.put("updownharpoonleftleft","\u2951");
+ symbolunicode.put("barleftharpoonup","\u2952");
+ symbolunicode.put("rightharpoonupbar","\u2953");
+ symbolunicode.put("barupharpoonright","\u2954");
+ symbolunicode.put("downharpoonrightbar","\u2955");
+ symbolunicode.put("barleftharpoondown","\u2956");
+ symbolunicode.put("rightharpoondownbar","\u2957");
+ symbolunicode.put("barupharpoonleft","\u2958");
+ symbolunicode.put("downharpoonleftbar","\u2959");
+ symbolunicode.put("leftharpoonupbar","\u295A");
+ symbolunicode.put("barrightharpoonup","\u295B");
+ symbolunicode.put("upharpoonrightbar","\u295C");
+ symbolunicode.put("bardownharpoonright","\u295D");
+ symbolunicode.put("leftharpoondownbar","\u295E");
+ symbolunicode.put("barrightharpoondown","\u295F");
+ symbolunicode.put("upharpoonleftbar","\u2960");
+ symbolunicode.put("bardownharpoonleft","\u2961");
+ symbolunicode.put("leftharpoonsupdown","\u2962");
+ symbolunicode.put("upharpoonsleftright","\u2963");
+ symbolunicode.put("rightharpoonsupdown","\u2964");
+ symbolunicode.put("downharpoonsleftright","\u2965");
+ symbolunicode.put("leftrightharpoonsup","\u2966");
+ symbolunicode.put("leftrightharpoonsdown","\u2967");
+ symbolunicode.put("rightleftharpoonsup","\u2968");
+ symbolunicode.put("rightleftharpoonsdown","\u2969");
+ symbolunicode.put("leftharpoonupdash","\u296A");
+ symbolunicode.put("dashleftharpoondown","\u296B");
+ symbolunicode.put("rightharpoonupdash","\u296C");
+ symbolunicode.put("dashrightharpoondown","\u296D");
+ symbolunicode.put("updownharpoonsleftright","\u296E");
+ symbolunicode.put("downupharpoonsleftright","\u296F");
+ symbolunicode.put("rightimply","\u2970");
+ symbolunicode.put("equalrightarrow","\u2971");
+ symbolunicode.put("similarrightarrow","\u2972");
+ symbolunicode.put("leftarrowsimilar","\u2973");
+ symbolunicode.put("rightarrowsimilar","\u2974");
+ symbolunicode.put("rightarrowapprox","\u2975");
+ symbolunicode.put("ltlarr","\u2976");
+ symbolunicode.put("leftarrowless","\u2977");
+ symbolunicode.put("gtrarr","\u2978");
+ symbolunicode.put("subrarr","\u2979");
+ symbolunicode.put("leftarrowsubset","\u297A");
+ symbolunicode.put("suplarr","\u297B");
+ symbolunicode.put("leftfishtail","\u297C");
+ symbolunicode.put("rightfishtail","\u297D");
+ symbolunicode.put("upfishtail","\u297E");
+ symbolunicode.put("downfishtail","\u297F");
+ symbolunicode.put("rtriltri","\u29CE");
+ symbolunicode.put("ltrivb","\u29CF");
+ symbolunicode.put("vbrtri","\u29D0");
+ symbolunicode.put("lfbowtie","\u29D1");
+ symbolunicode.put("rfbowtie","\u29D2");
+ symbolunicode.put("fbowtie","\u29D3");
+ symbolunicode.put("lftimes","\u29D4");
+ symbolunicode.put("rftimes","\u29D5");
+ symbolunicode.put("dualmap","\u29DF");
+ symbolunicode.put("lrtriangleeq","\u29E1");
+ symbolunicode.put("eparsl","\u29E3");
+ symbolunicode.put("smeparsl","\u29E4");
+ symbolunicode.put("eqvparsl","\u29E5");
+ symbolunicode.put("gleichstark","\u29E6");
+ symbolunicode.put("ruledelayed","\u29F4");
+ symbolunicode.put("veeonwedge","\u2A59");
+ symbolunicode.put("eqdot","\u2A66");
+ symbolunicode.put("dotequiv","\u2A67");
+ symbolunicode.put("equivVert","\u2A68");
+ symbolunicode.put("equivVvert","\u2A69");
+ symbolunicode.put("dotsim","\u2A6A");
+ symbolunicode.put("simrdots","\u2A6B");
+ symbolunicode.put("simminussim","\u2A6C");
+ symbolunicode.put("congdot","\u2A6D");
+ symbolunicode.put("asteq","\u2A6E");
+ symbolunicode.put("hatapprox","\u2A6F");
+ symbolunicode.put("approxeqq","\u2A70");
+ symbolunicode.put("eqqsim","\u2A73");
+ symbolunicode.put("Coloneq","\u2A74");
+ symbolunicode.put("eqeq","\u2A75");
+ symbolunicode.put("eqeqeq","\u2A76");
+ symbolunicode.put("ddotseq","\u2A77");
+ symbolunicode.put("equivDD","\u2A78");
+ symbolunicode.put("ltcir","\u2A79");
+ symbolunicode.put("gtcir","\u2A7A");
+ symbolunicode.put("ltquest","\u2A7B");
+ symbolunicode.put("gtquest","\u2A7C");
+ symbolunicode.put("leqslant","\u2A7D");
+ symbolunicode.put("geqslant","\u2A7E");
+ symbolunicode.put("lesdot","\u2A7F");
+ symbolunicode.put("gesdot","\u2A80");
+ symbolunicode.put("lesdoto","\u2A81");
+ symbolunicode.put("gesdoto","\u2A82");
+ symbolunicode.put("lesdotor","\u2A83");
+ symbolunicode.put("gesdotol","\u2A84");
+ symbolunicode.put("lessapprox","\u2A85");
+ symbolunicode.put("gtrapprox","\u2A86");
+ symbolunicode.put("lneq","\u2A87");
+ symbolunicode.put("gneq","\u2A88");
+ symbolunicode.put("lnapprox","\u2A89");
+ symbolunicode.put("gnapprox","\u2A8A");
+ symbolunicode.put("lesseqqgtr","\u2A8B");
+ symbolunicode.put("gtreqqless","\u2A8C");
+ symbolunicode.put("lsime","\u2A8D");
+ symbolunicode.put("gsime","\u2A8E");
+ symbolunicode.put("lsimg","\u2A8F");
+ symbolunicode.put("gsiml","\u2A90");
+ symbolunicode.put("lgE","\u2A91");
+ symbolunicode.put("glE","\u2A92");
+ symbolunicode.put("lesges","\u2A93");
+ symbolunicode.put("gesles","\u2A94");
+ symbolunicode.put("eqslantless","\u2A95");
+ symbolunicode.put("eqslantgtr","\u2A96");
+ symbolunicode.put("elsdot","\u2A97");
+ symbolunicode.put("egsdot","\u2A98");
+ symbolunicode.put("eqqless","\u2A99");
+ symbolunicode.put("eqqgtr","\u2A9A");
+ symbolunicode.put("eqqslantless","\u2A9B");
+ symbolunicode.put("eqqslantgtr","\u2A9C");
+ symbolunicode.put("simless","\u2A9D");
+ symbolunicode.put("simgtr","\u2A9E");
+ symbolunicode.put("simlE","\u2A9F");
+ symbolunicode.put("simgE","\u2AA0");
+ symbolunicode.put("Lt","\u2AA1");
+ symbolunicode.put("Gt","\u2AA2");
+ symbolunicode.put("partialmeetcontraction","\u2AA3");
+ symbolunicode.put("glj","\u2AA4");
+ symbolunicode.put("gla","\u2AA5");
+ symbolunicode.put("ltcc","\u2AA6");
+ symbolunicode.put("gtcc","\u2AA7");
+ symbolunicode.put("lescc","\u2AA8");
+ symbolunicode.put("gescc","\u2AA9");
+ symbolunicode.put("smt","\u2AAA");
+ symbolunicode.put("lat","\u2AAB");
+ symbolunicode.put("smte","\u2AAC");
+ symbolunicode.put("late","\u2AAD");
+ symbolunicode.put("bumpeqq","\u2AAE");
+ symbolunicode.put("preceq","\u2AAF");
+ symbolunicode.put("succeq","\u2AB0");
+ symbolunicode.put("precneq","\u2AB1");
+ symbolunicode.put("succneq","\u2AB2");
+ symbolunicode.put("preceqq","\u2AB3");
+ symbolunicode.put("succeqq","\u2AB4");
+ symbolunicode.put("precneqq","\u2AB5");
+ symbolunicode.put("succneqq","\u2AB6");
+ symbolunicode.put("precapprox","\u2AB7");
+ symbolunicode.put("succapprox","\u2AB8");
+ symbolunicode.put("precnapprox","\u2AB9");
+ symbolunicode.put("succnapprox","\u2ABA");
+ symbolunicode.put("Prec","\u2ABB");
+ symbolunicode.put("Succ","\u2ABC");
+ symbolunicode.put("subsetdot","\u2ABD");
+ symbolunicode.put("supsetdot","\u2ABE");
+ symbolunicode.put("subsetplus","\u2ABF");
+ symbolunicode.put("supsetplus","\u2AC0");
+ symbolunicode.put("submult","\u2AC1");
+ symbolunicode.put("supmult","\u2AC2");
+ symbolunicode.put("subedot","\u2AC3");
+ symbolunicode.put("supedot","\u2AC4");
+ symbolunicode.put("subseteqq","\u2AC5");
+ symbolunicode.put("supseteqq","\u2AC6");
+ symbolunicode.put("subsim","\u2AC7");
+ symbolunicode.put("supsim","\u2AC8");
+ symbolunicode.put("subsetapprox","\u2AC9");
+ symbolunicode.put("supsetapprox","\u2ACA");
+ symbolunicode.put("subsetneqq","\u2ACB");
+ symbolunicode.put("supsetneqq","\u2ACC");
+ symbolunicode.put("lsqhook","\u2ACD");
+ symbolunicode.put("rsqhook","\u2ACE");
+ symbolunicode.put("csub","\u2ACF");
+ symbolunicode.put("csup","\u2AD0");
+ symbolunicode.put("csube","\u2AD1");
+ symbolunicode.put("csupe","\u2AD2");
+ symbolunicode.put("subsup","\u2AD3");
+ symbolunicode.put("supsub","\u2AD4");
+ symbolunicode.put("subsub","\u2AD5");
+ symbolunicode.put("supsup","\u2AD6");
+ symbolunicode.put("suphsub","\u2AD7");
+ symbolunicode.put("supdsub","\u2AD8");
+ symbolunicode.put("forkv","\u2AD9");
+ symbolunicode.put("topfork","\u2ADA");
+ symbolunicode.put("mlcp","\u2ADB");
+ symbolunicode.put("forks","\u2ADC");
+ symbolunicode.put("forksnot","\u2ADD");
+ symbolunicode.put("shortlefttack","\u2ADE");
+ symbolunicode.put("shortdowntack","\u2ADF");
+ symbolunicode.put("shortuptack","\u2AE0");
+ symbolunicode.put("vDdash","\u2AE2");
+ symbolunicode.put("dashV","\u2AE3");
+ symbolunicode.put("Dashv","\u2AE4");
+ symbolunicode.put("DashV","\u2AE5");
+ symbolunicode.put("varVdash","\u2AE6");
+ symbolunicode.put("Barv","\u2AE7");
+ symbolunicode.put("vBar","\u2AE8");
+ symbolunicode.put("vBarv","\u2AE9");
+ symbolunicode.put("barV","\u2AEA");
+ symbolunicode.put("Vbar","\u2AEB");
+ symbolunicode.put("Not","\u2AEC");
+ symbolunicode.put("bNot","\u2AED");
+ symbolunicode.put("revnmid","\u2AEE");
+ symbolunicode.put("cirmid","\u2AEF");
+ symbolunicode.put("midcir","\u2AF0");
+ symbolunicode.put("nhpar","\u2AF2");
+ symbolunicode.put("parsim","\u2AF3");
+ symbolunicode.put("lllnest","\u2AF7");
+ symbolunicode.put("gggnest","\u2AF8");
+ symbolunicode.put("leqqslant","\u2AF9");
+ symbolunicode.put("geqqslant","\u2AFA");
+ symbolunicode.put("circleonleftarrow","\u2B30");
+ symbolunicode.put("leftthreearrows","\u2B31");
+ symbolunicode.put("leftarrowonoplus","\u2B32");
+ symbolunicode.put("longleftsquigarrow","\u2B33");
+ symbolunicode.put("nvtwoheadleftarrow","\u2B34");
+ symbolunicode.put("nVtwoheadleftarrow","\u2B35");
+ symbolunicode.put("twoheadmapsfrom","\u2B36");
+ symbolunicode.put("twoheadleftdbkarrow","\u2B37");
+ symbolunicode.put("leftdotarrow","\u2B38");
+ symbolunicode.put("nvleftarrowtail","\u2B39");
+ symbolunicode.put("nVleftarrowtail","\u2B3A");
+ symbolunicode.put("twoheadleftarrowtail","\u2B3B");
+ symbolunicode.put("nvtwoheadleftarrowtail","\u2B3C");
+ symbolunicode.put("nVtwoheadleftarrowtail","\u2B3D");
+ symbolunicode.put("leftarrowx","\u2B3E");
+ symbolunicode.put("leftcurvedarrow","\u2B3F");
+ symbolunicode.put("equalleftarrow","\u2B40");
+ symbolunicode.put("bsimilarleftarrow","\u2B41");
+ symbolunicode.put("leftarrowbackapprox","\u2B42");
+ symbolunicode.put("rightarrowgtr","\u2B43");
+ symbolunicode.put("rightarrowsupset","\u2B44");
+ symbolunicode.put("LLeftarrow","\u2B45");
+ symbolunicode.put("RRightarrow","\u2B46");
+ symbolunicode.put("bsimilarrightarrow","\u2B47");
+ symbolunicode.put("rightarrowbackapprox","\u2B48");
+ symbolunicode.put("similarleftarrow","\u2B49");
+ symbolunicode.put("leftarrowapprox","\u2B4A");
+ symbolunicode.put("leftarrowbsimilar","\u2B4B");
+ symbolunicode.put("rightarrowbsimilar","\u2B4C"); */
+ symbolunicode.put("Alpha","\u0391");
+ symbolunicode.put("Beta","\u0392");
+ symbolunicode.put("Gamma","\u0393");
+ symbolunicode.put("Delta","\u0394");
+ symbolunicode.put("Epsilon","\u0395");
+ symbolunicode.put("Zeta","\u0396");
+ symbolunicode.put("Eta","\u0397");
+ symbolunicode.put("Theta","\u0398");
+ symbolunicode.put("Iota","\u0399");
+ symbolunicode.put("Kappa","\u039A");
+ symbolunicode.put("Lambda","\u039B");
+ symbolunicode.put("Mu","\u039C");
+ symbolunicode.put("Nu","\u039D");
+ symbolunicode.put("Xi","\u039E");
+ symbolunicode.put("Omicron","\u039F");
+ symbolunicode.put("Pi","\u03A0");
+ symbolunicode.put("Rho","\u03A1");
+ symbolunicode.put("Sigma","\u03A3");
+ symbolunicode.put("Tau","\u03A4");
+ symbolunicode.put("Upsilon","\u03A5");
+ symbolunicode.put("Phi","\u03A6");
+ symbolunicode.put("Chi","\u03A7");
+ symbolunicode.put("Psi","\u03A8");
+ symbolunicode.put("Omega","\u03A9");
+ symbolunicode.put("alpha","\u03B1");
+ symbolunicode.put("beta","\u03B2");
+ symbolunicode.put("gamma","\u03B3");
+ symbolunicode.put("delta","\u03B4");
+ symbolunicode.put("epsilon","\u03B5");
+ symbolunicode.put("zeta","\u03B6");
+ symbolunicode.put("eta","\u03B7");
+ symbolunicode.put("theta","\u03B8");
+ symbolunicode.put("iota","\u03B9");
+ symbolunicode.put("kappa","\u03BA");
+ symbolunicode.put("lambda","\u03BB");
+ symbolunicode.put("mu","\u03BC");
+ symbolunicode.put("nu","\u03BD");
+ symbolunicode.put("xi","\u03BE");
+ symbolunicode.put("omicron","\u03BF");
+ symbolunicode.put("pi","\u03C0");
+ symbolunicode.put("rho","\u03C1");
+ symbolunicode.put("varsigma","\u03C2");
+ symbolunicode.put("sigma","\u03C3");
+ symbolunicode.put("tau","\u03C4");
+ symbolunicode.put("upsilon","\u03C5");
+ symbolunicode.put("varphi","\u03C6");
+ symbolunicode.put("chi","\u03C7");
+ symbolunicode.put("psi","\u03C8");
+ symbolunicode.put("omega","\u03C9");
+ symbolunicode.put("varbeta","\u03D0");
+ symbolunicode.put("vartheta","\u03D1");
+ symbolunicode.put("phi","\u03D5");
+ symbolunicode.put("varpi","\u03D6");
+ symbolunicode.put("Digamma","\u03DC");
+ symbolunicode.put("digamma","\u03DD");
+ symbolunicode.put("varkappa","\u03F0");
+ symbolunicode.put("varrho","\u03F1");
+ symbolunicode.put("varTheta","\u03F4");
+ symbolunicode.put("varepsilon","\u03F5");
+ symbolunicode.put("matheth","\u00F0");
+ symbolunicode.put("BbbC","\u2102");
+ symbolunicode.put("mscrg","\u210A");
+ symbolunicode.put("mscrH","\u210B");
+ symbolunicode.put("mfrakH","\u210C");
+ symbolunicode.put("BbbH","\u210D");
+ symbolunicode.put("hslash","\u210F");
+ symbolunicode.put("mscrI","\u2110");
+ symbolunicode.put("Im","\u2111");
+ symbolunicode.put("mscrL","\u2112");
+ symbolunicode.put("ell","\u2113");
+ symbolunicode.put("BbbN","\u2115");
+ symbolunicode.put("wp","\u2118");
+ symbolunicode.put("BbbP","\u2119");
+ symbolunicode.put("BbbQ","\u211A");
+ symbolunicode.put("mscrR","\u211B");
+ symbolunicode.put("Re","\u211C");
+ symbolunicode.put("BbbR","\u211D");
+ symbolunicode.put("BbbZ","\u2124");
+ symbolunicode.put("mfrakZ","\u2128");
+ symbolunicode.put("turnediota","\u2129");
+ symbolunicode.put("Angstrom","\u212B");
+ symbolunicode.put("mscrB","\u212C");
+ symbolunicode.put("mfrakC","\u212D");
+ symbolunicode.put("mscre","\u212F");
+ symbolunicode.put("mscrE","\u2130");
+ symbolunicode.put("mscrF","\u2131");
+ symbolunicode.put("mscrM","\u2133");
+ symbolunicode.put("mscro","\u2134");
+ symbolunicode.put("aleph","\u2135");
+ symbolunicode.put("beth","\u2136");
+ symbolunicode.put("gimel","\u2137");
+ symbolunicode.put("daleth","\u2138");
+ symbolunicode.put("Bbbgamma","\u213D");
+ symbolunicode.put("BbbGamma","\u213E");
+ symbolunicode.put("BbbPi","\u213F");
+ symbolunicode.put("partial","\u2202");
+ symbolunicode.put("nabla","\u2207");
+ symbolunicode.put("log","log");
+ symbolunicode.put("ln","ln");
+ symbolunicode.put("sin","sin");
+ symbolunicode.put("cos","cos");
+ symbolunicode.put("tan","tan");
+ symbolunicode.put("sec","sec");
+ symbolunicode.put("csc","csc");
+ symbolunicode.put("cot","cot");
+ symbolunicode.put("sinh","sinh");
+ symbolunicode.put("cosh","cosh");
+ symbolunicode.put("tanh","tanh");
+ symbolunicode.put("coth","coth");
+ symbolunicode.put("sech","sech");
+ symbolunicode.put("csch","csch");
+ symbolunicode.put("lim","lim");
+ symbolunicode.put("sqrt","\u221A");
+ symbolunicode.put("cuberoot","\u221B");
+ symbolunicode.put("fourthroot","\u221C");
+
+
+}}
+
+
+
+
+
+
+
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Textattributefile.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Textattributefile.java
new file mode 100644
index 0000000000..01649b21d8
--- /dev/null
+++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Textattributefile.java
@@ -0,0 +1,25 @@
+//
+// Latex Project Public Licence (lppl1.3) applies
+// Originally written by Kwanleung Tse
+// First Release : 1st July, 2014
+// Last Update : 25th September, 2014
+//
+//
+
+package worker4math.hktex2;
+
+
+import java.util.ArrayList;
+
+public class Textattributefile{
+ ArrayList<String> attribute = new ArrayList<String>();
+
+ public void textattributefile (){
+
+ attribute.add("underlinetext");
+ attribute.add("strikethru");
+ attribute.add("skew");
+ attribute.add("alpha");
+ attribute.add("shadow");
+
+}}
diff --git a/systems/android/hktex/HKtexdoc.pdf b/systems/android/hktex/HKtexdoc.pdf
new file mode 100644
index 0000000000..e69037c892
--- /dev/null
+++ b/systems/android/hktex/HKtexdoc.pdf
Binary files differ
diff --git a/systems/android/hktex/LicenceGuaranteeWarranty.txt b/systems/android/hktex/LicenceGuaranteeWarranty.txt
new file mode 100644
index 0000000000..331033a447
--- /dev/null
+++ b/systems/android/hktex/LicenceGuaranteeWarranty.txt
@@ -0,0 +1,12 @@
+
+Licence :
+
+Latex project public licence lppl1.3 applies. If lppl1.3 is observed, HKtex2
+is free for all personal, educational or commercial use. The licence never expire.
+
+Guarantee and Warranty:
+
+There is no guarantee or warranty for HKtex2. Use it at your own risk.
+
+Licence Holder : Kwanleung Tse
+Date 25th September, 2014
diff --git a/systems/android/hktex/README b/systems/android/hktex/README
new file mode 100644
index 0000000000..f41184cdb9
--- /dev/null
+++ b/systems/android/hktex/README
@@ -0,0 +1,11 @@
+
+This directory contains the HKtex2 (Version 2.04) Eclipse project.
+
+
+HKtex2 is an intermediate product for the bigger HKtex project.
+Please visit http://www.worker4math.fatcow.com for more details before installation.
+
+Open Google's Eclipse program to launch the project.
+
+Licence Holder : Kwanleung Tse
+Date : 1st October, 2014