aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.properties3
-rw-r--r--build.xml52
-rw-r--r--src/java/org/apache/fop/hyphenation/PatternParser.java72
-rw-r--r--src/java/org/apache/fop/hyphenation/SerializeHyphPattern.java132
-rw-r--r--src/java/org/apache/fop/hyphenation/UnicodeClasses.java317
-rw-r--r--src/java/org/apache/fop/hyphenation/classes.xml7628
-rw-r--r--src/java/org/apache/fop/tools/anttasks/SerializeHyphPattern.java178
7 files changed, 8181 insertions, 201 deletions
diff --git a/build.properties b/build.properties
index c5e483204..9c6472cee 100644
--- a/build.properties
+++ b/build.properties
@@ -50,5 +50,6 @@
# layoutengine.disabled = test/layoutengine/disabled-testcases.txt
## Specify an alternate directory to scan for user supplied
-## hyphenation pattern files.
+## hyphenation pattern files and Unicode data files.
# user.hyph.dir = /home/bart/offo
+# unidata.dir = /usr/share/doc/Unicode/UNIDATA
diff --git a/build.xml b/build.xml
index f3803843f..cf1900461 100644
--- a/build.xml
+++ b/build.xml
@@ -157,6 +157,8 @@ list of possible build targets.
<property name="fo.examples.force" value="false"/>
<property name="lib.dir" value="${basedir}/lib"/>
<property name="user.hyph.dir" value="${basedir}/hyph"/>
+ <property name="unidata.dir" value="${basedir}/UNIDATA"/>
+ <property name="hyph.stacksize" value="512k"/>
<property name="build.dir" value="${basedir}/build"/>
<property name="build.gensrc.dir" value="${build.dir}/gensrc"/>
<property name="build.classes.dir" value="${build.dir}/classes"/>
@@ -425,21 +427,51 @@ list of possible build targets.
</copy>
</target>
<target name="compile" depends="compile-java, compile-copy-resources" description="Compiles the source code"/>
-<!-- =================================================================== -->
-<!-- compiles hyphenation patterns -->
-<!-- =================================================================== -->
- <target name="compile-hyphenation" depends="compile">
+ <!-- =================================================================== -->
+ <!-- Helper task to generate source files that have already been checked -->
+ <!-- into the repository. This task uses Unicode Character Database -->
+ <!-- files. This task need only be run when the latter files have been -->
+ <!-- updated. This target should never be part of the normal build -->
+ <!-- process. Output is UnicodeClasses.CLASSES_XML -->
+ <!-- (src/java/org/apache/fop/hyphenation/classes.xml). -->
+ <!-- =================================================================== -->
+ <target name="codegen-hyphenation-classes">
+ <java classname="org.apache.fop.hyphenation.UnicodeClasses" resultproperty="classes.result" classpath="${build.classes.dir}">
+ <arg value="${unidata.dir}"/>
+ </java>
+ <condition property="classes.result.message" value="Generation of classes successful">
+ <not>
+ <isfailure code="${classes.result}"/>
+ </not>
+ </condition>
+ <condition property="classes.result.message" value="Generation of classes failed">
+ <isfailure code="${classes.result}"/>
+ </condition>
+ <echo message="${classes.result.message}"/>
+ </target>
+ <!-- =================================================================== -->
+ <!-- compiles hyphenation patterns -->
+ <!-- =================================================================== -->
+ <target name="compile-hyphenation" depends="compile" description="Compiles the hyphenation pattern files">
<path id="hyph-classpath">
<path refid="libs-build-classpath"/>
<pathelement location="${build.classes.dir}"/>
</path>
- <taskdef name="serHyph" classname="org.apache.fop.tools.anttasks.SerializeHyphPattern" classpathref="hyph-classpath"/>
<mkdir dir="${build.classes.dir}/hyph"/>
- <serHyph targetDir="${build.classes.dir}/hyph">
- <fileset dir="${user.hyph.dir}">
- <include name="*.xml"/>
- </fileset>
- </serHyph>
+ <java classname="org.apache.fop.hyphenation.SerializeHyphPattern" fork="true" resultproperty="hyph.result" classpathref="hyph-classpath">
+ <arg value="${user.hyph.dir}"/>
+ <arg value="${build.classes.dir}/hyph"/>
+ <jvmarg value="-Xss${hyph.stacksize}"/>
+ </java>
+ <condition property="hyph.result.message" value="Hyphenation successful">
+ <not>
+ <isfailure code="${hyph.result}"/>
+ </not>
+ </condition>
+ <condition property="hyph.result.message" value="Hyphenation failed">
+ <isfailure code="${hyph.result}"/>
+ </condition>
+ <echo message="${hyph.result.message}"/>
</target>
<target name="uptodate-jar-hyphenation" depends="compile-hyphenation">
<uptodate property="jar.hyphenation.uptodate" targetfile="${build.dir}/fop-hyph.jar">
diff --git a/src/java/org/apache/fop/hyphenation/PatternParser.java b/src/java/org/apache/fop/hyphenation/PatternParser.java
index 6bd423a26..a067d4c36 100644
--- a/src/java/org/apache/fop/hyphenation/PatternParser.java
+++ b/src/java/org/apache/fop/hyphenation/PatternParser.java
@@ -30,7 +30,10 @@ import org.xml.sax.Attributes;
// Java
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
import java.net.MalformedURLException;
import java.util.ArrayList;
@@ -51,6 +54,7 @@ public class PatternParser extends DefaultHandler implements PatternConsumer {
ArrayList exception;
char hyphenChar;
String errMsg;
+ boolean hasClasses = false;
static final int ELEM_CLASSES = 1;
static final int ELEM_EXCEPTIONS = 2;
@@ -58,24 +62,19 @@ public class PatternParser extends DefaultHandler implements PatternConsumer {
static final int ELEM_HYPHEN = 4;
public PatternParser() throws HyphenationException {
+ this.consumer = this;
token = new StringBuffer();
parser = createParser();
parser.setContentHandler(this);
parser.setErrorHandler(this);
hyphenChar = '-'; // default
-
}
- public PatternParser(PatternConsumer consumer)
- throws HyphenationException {
+ public PatternParser(PatternConsumer consumer) throws HyphenationException {
this();
this.consumer = consumer;
}
- public void setConsumer(PatternConsumer consumer) {
- this.consumer = consumer;
- }
-
/**
* Parses a hyphenation pattern file.
* @param filename the filename
@@ -249,15 +248,32 @@ public class PatternParser extends DefaultHandler implements PatternConsumer {
return il.toString();
}
+ protected void getExternalClasses() throws SAXException {
+ XMLReader mainParser = parser;
+ parser = createParser();
+ parser.setContentHandler(this);
+ parser.setErrorHandler(this);
+ InputStream stream = this.getClass().getResourceAsStream("classes.xml");
+ InputSource source = new InputSource(stream);
+ try {
+ parser.parse(source);
+ } catch (IOException ioe) {
+ throw new SAXException(ioe.getMessage());
+ } finally {
+ parser = mainParser;
+ }
+ }
+
//
// ContentHandler methods
//
/**
* {@inheritDoc}
+ * @throws SAXException
*/
public void startElement(String uri, String local, String raw,
- Attributes attrs) {
+ Attributes attrs) throws SAXException {
if (local.equals("hyphen-char")) {
String h = attrs.getValue("value");
if (h != null && h.length() == 1) {
@@ -266,8 +282,14 @@ public class PatternParser extends DefaultHandler implements PatternConsumer {
} else if (local.equals("classes")) {
currElement = ELEM_CLASSES;
} else if (local.equals("patterns")) {
+ if (!hasClasses) {
+ getExternalClasses();
+ }
currElement = ELEM_PATTERNS;
} else if (local.equals("exceptions")) {
+ if (!hasClasses) {
+ getExternalClasses();
+ }
currElement = ELEM_EXCEPTIONS;
exception = new ArrayList();
} else if (local.equals("hyphen")) {
@@ -311,6 +333,9 @@ public class PatternParser extends DefaultHandler implements PatternConsumer {
token.setLength(0);
}
}
+ if (currElement == ELEM_CLASSES) {
+ hasClasses = true;
+ }
if (currElement == ELEM_HYPHEN) {
currElement = ELEM_EXCEPTIONS;
} else {
@@ -403,23 +428,46 @@ public class PatternParser extends DefaultHandler implements PatternConsumer {
// PatternConsumer implementation for testing purposes
public void addClass(String c) {
- System.out.println("class: " + c);
+ testOut.println("class: " + c);
}
public void addException(String w, ArrayList e) {
- System.out.println("exception: " + w + " : " + e.toString());
+ testOut.println("exception: " + w + " : " + e.toString());
}
public void addPattern(String p, String v) {
- System.out.println("pattern: " + p + " : " + v);
+ testOut.println("pattern: " + p + " : " + v);
+ }
+
+ private PrintStream testOut = System.out;
+
+ /**
+ * @param testOut the testOut to set
+ */
+ public void setTestOut(PrintStream testOut) {
+ this.testOut = testOut;
+ }
+
+ public void closeTestOut() {
+ testOut.flush();
+ testOut.close();
}
public static void main(String[] args) throws Exception {
if (args.length > 0) {
PatternParser pp = new PatternParser();
- pp.setConsumer(pp);
+ PrintStream p = null;
+ if (args.length > 1) {
+ FileOutputStream f = new FileOutputStream(args[1]);
+ p = new PrintStream(f, false, "utf-8");
+ pp.setTestOut(p);
+ }
pp.parse(args[0]);
+ if (pp != null) {
+ pp.closeTestOut();
+ }
}
}
+
}
diff --git a/src/java/org/apache/fop/hyphenation/SerializeHyphPattern.java b/src/java/org/apache/fop/hyphenation/SerializeHyphPattern.java
new file mode 100644
index 000000000..2ae2c93b9
--- /dev/null
+++ b/src/java/org/apache/fop/hyphenation/SerializeHyphPattern.java
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.hyphenation;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+
+/**
+ * Serialize hyphenation patterns
+ * For all xml files in the source directory a pattern file is built in the target directory
+ * This class may be called from the ant build file in a java task
+ */
+public class SerializeHyphPattern {
+
+ private boolean errorDump = false;
+
+ /**
+ * Controls the amount of error information dumped.
+ * @param errorDump True if more error info should be provided
+ */
+ public void setErrorDump(boolean errorDump) {
+ this.errorDump = errorDump;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serializeDir(File sourceDir, File targetDir) {
+ final String extension = ".xml";
+ String[] sourceFiles = sourceDir.list(new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return(name.endsWith(extension));
+ }
+ });
+ for (int j = 0; j < sourceFiles.length; j++) {
+ File infile = new File(sourceDir, sourceFiles[j]);
+ String outfilename =
+ sourceFiles[j].substring(0, sourceFiles[j].length() - extension.length()) + ".hyp";
+ File outfile = new File(targetDir, outfilename);
+ serializeFile(infile, outfile);
+ }
+ }
+
+ /*
+ * checks whether input or output files exists or the latter is older than input file
+ * and start build if necessary
+ */
+ private void serializeFile(File infile, File outfile) {
+ boolean startProcess;
+ startProcess = rebuild(infile, outfile);
+ if (startProcess) {
+ HyphenationTree hTree = buildPatternFile(infile);
+ // serialize class
+ try {
+ ObjectOutputStream out = new ObjectOutputStream(
+ new java.io.BufferedOutputStream(
+ new java.io.FileOutputStream(outfile)));
+ out.writeObject(hTree);
+ out.close();
+ } catch (IOException ioe) {
+ System.err.println("Can't write compiled pattern file: "
+ + outfile);
+ System.err.println(ioe);
+ }
+ }
+ }
+
+ /*
+ * serializes pattern files
+ */
+ private HyphenationTree buildPatternFile(File infile) {
+ System.out.println("Processing " + infile);
+ HyphenationTree hTree = new HyphenationTree();
+ try {
+ hTree.loadPatterns(infile.toString());
+ if (errorDump) {
+ System.out.println("Stats: ");
+ hTree.printStats();
+ }
+ } catch (HyphenationException ex) {
+ System.err.println("Can't load patterns from xml file " + infile
+ + " - Maybe hyphenation.dtd is missing?");
+ if (errorDump) {
+ System.err.println(ex.toString());
+ }
+ }
+ return hTree;
+ }
+
+ /**
+ * Checks for existence of output file and compares
+ * dates with input and stylesheet file
+ */
+ private boolean rebuild(File infile, File outfile) {
+ if (outfile.exists()) {
+ // checks whether output file is older than input file
+ if (outfile.lastModified() < infile.lastModified()) {
+ return true;
+ }
+ } else {
+ // if output file does not exist, start process
+ return true;
+ }
+ return false;
+ } // end rebuild
+
+
+ public static void main (String args[]) {
+ SerializeHyphPattern ser = new SerializeHyphPattern();
+ ser.serializeDir(new File(args[0]), new File(args[1]));
+ }
+
+}
diff --git a/src/java/org/apache/fop/hyphenation/UnicodeClasses.java b/src/java/org/apache/fop/hyphenation/UnicodeClasses.java
new file mode 100644
index 000000000..bbaa391a8
--- /dev/null
+++ b/src/java/org/apache/fop/hyphenation/UnicodeClasses.java
@@ -0,0 +1,317 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.hyphenation;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Create the default classes file classes.xml,
+ * for use in building hyphenation patterns
+ * from pattern files which do not contain their own classes
+ */
+public class UnicodeClasses {
+
+ // default path relative to the FOP base directory
+ static String CLASSES_XML = "src/java/org/apache/fop/hyphenation/classes.xml";
+
+ /**
+ * Generate classes.xml from Java's compiled-in Unicode Character Database
+ * @param hexcode whether to prefix each class with the hexcode (only for debugging purposes)
+ * @param outfilePath output file
+ * @throws IOException
+ */
+ public static void fromJava(boolean hexcode, String outfilePath) throws IOException {
+ File f = new File(outfilePath);
+ if (f.exists()) {
+ f.delete();
+ }
+ f.createNewFile();
+ FileOutputStream fw = new FileOutputStream(f);
+ OutputStreamWriter ow = new OutputStreamWriter(fw, "utf-8");
+ int maxChar;
+ maxChar = Character.MAX_VALUE;
+
+ ow.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
+ "<classes>\n");
+ // loop over the first Unicode plane
+ for (int code = Character.MIN_VALUE; code <= maxChar; ++code) {
+
+ // skip surrogate area
+ if (code == Character.MIN_SURROGATE) {
+ code = Character.MAX_SURROGATE;
+ continue;
+ }
+
+ // we are only interested in LC, UC and TC letters which are their own LC, and in 'other letters'
+ if (!(((Character.isLowerCase(code) || Character.isUpperCase(code) || Character.isTitleCase(code))
+ && code == Character.toLowerCase(code))
+ || Character.getType(code) == Character.OTHER_LETTER)) {
+ continue;
+ }
+
+ // skip a number of blocks
+ Character.UnicodeBlock ubi = Character.UnicodeBlock.of(code);
+ if (ubi.equals(Character.UnicodeBlock.SUPERSCRIPTS_AND_SUBSCRIPTS)
+ || ubi.equals(Character.UnicodeBlock.LETTERLIKE_SYMBOLS)
+ || ubi.equals(Character.UnicodeBlock.ALPHABETIC_PRESENTATION_FORMS)
+ || ubi.equals(Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS)
+ || ubi.equals(Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS)
+ || ubi.equals(Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A)
+ || ubi.equals(Character.UnicodeBlock.HANGUL_SYLLABLES)) {
+ continue;
+ }
+
+ int uppercode = Character.toUpperCase(code);
+ int titlecode = Character.toTitleCase(code);
+ StringBuilder s = new StringBuilder();
+ if (hexcode) {
+ s.append("0x" + Integer.toHexString(code) + " ");
+ }
+ s.append(Character.toChars(code));
+ if (uppercode != code) {
+ s.append(Character.toChars(uppercode));
+ }
+ if (titlecode != code && titlecode != uppercode) {
+ s.append(Character.toChars(titlecode));
+ }
+ ow.write(s.toString() + "\n");
+ }
+ ow.write("</classes>\n");
+ ow.flush();
+ ow.close();
+ }
+
+ static public int UNICODE = 0, GENERAL_CATEGORY = 2, SIMPLE_UPPERCASE_MAPPING = 12,
+ SIMPLE_LOWERCASE_MAPPING = 13, SIMPLE_TITLECASE_MAPPING = 14, NUM_FIELDS = 15;
+
+ /**
+ * Generate classes.xml from Unicode Character Database files
+ * @param hexcode whether to prefix each class with the hexcode (only for debugging purposes)
+ * @param unidataPath path to the directory with UCD files
+ * @param outfilePath output file
+ * @throws IOException
+ */
+ public static void fromUCD(boolean hexcode, String unidataPath, String outfilePath) throws IOException {
+ File unidata = new File(unidataPath);
+
+ File f = new File(outfilePath);
+ if (f.exists()) {
+ f.delete();
+ }
+ f.createNewFile();
+ FileOutputStream fw = new FileOutputStream(f);
+ OutputStreamWriter ow = new OutputStreamWriter(fw, "utf-8");
+
+ File in = new File(unidata, "Blocks.txt");
+ FileInputStream inis = new FileInputStream(in);
+ InputStreamReader insr = new InputStreamReader(inis, "utf-8");
+ BufferedReader inbr = new BufferedReader(insr);
+ Map blocks = new HashMap();
+ for (String line = inbr.readLine(); line != null; line = inbr.readLine()) {
+ if (line.startsWith("#") || line.matches("^\\s*$")) {
+ continue;
+ }
+ String[] parts = line.split(";");
+ String block = parts[1].trim();
+ String[] indices = parts[0].split("\\.\\.");
+ int[] ind = {Integer.parseInt(indices[0], 16), Integer.parseInt(indices[1], 16)};
+ blocks.put(block, ind);
+ }
+ inbr.close();
+
+ in = new File(unidata, "UnicodeData.txt");
+ inis = new FileInputStream(in);
+ insr = new InputStreamReader(inis, "utf-8");
+ inbr = new BufferedReader(insr);
+ int maxChar;
+ maxChar = Character.MAX_VALUE;
+
+ ow.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
+ "<classes>\n");
+ for (String line = inbr.readLine(); line != null; line = inbr.readLine()) {
+ String[] fields = line.split(";", NUM_FIELDS);
+ int code = Integer.parseInt(fields[UNICODE], 16);
+ if (code > maxChar) {
+ break;
+ }
+ if (((fields[GENERAL_CATEGORY].equals("Ll") || fields[GENERAL_CATEGORY].equals("Lu")
+ || fields[GENERAL_CATEGORY].equals("Lt"))
+ && ("".equals(fields[SIMPLE_LOWERCASE_MAPPING])
+ || fields[UNICODE].equals(fields[SIMPLE_LOWERCASE_MAPPING])))
+ || fields[GENERAL_CATEGORY].equals("Lo")) {
+ String[] blockNames = {"Superscripts and Subscripts", "Letterlike Symbols",
+ "Alphabetic Presentation Forms", "Halfwidth and Fullwidth Forms",
+ "CJK Unified Ideographs", "CJK Unified Ideographs Extension A",
+ "Hangul Syllables"};
+ int j;
+ for (j = 0; j < blockNames.length; ++j) {
+ int[] ind = (int[]) blocks.get(blockNames[j]);
+ if (code >= ind[0] && code <= ind[1]) {
+ break;
+ }
+ }
+ if (j < blockNames.length) {
+ continue;
+ }
+
+ int uppercode = -1, titlecode = -1;
+ if (!"".equals(fields[SIMPLE_UPPERCASE_MAPPING])) {
+ uppercode = Integer.parseInt(fields[SIMPLE_UPPERCASE_MAPPING], 16);
+ }
+ if (!"".equals(fields[SIMPLE_TITLECASE_MAPPING])) {
+ titlecode = Integer.parseInt(fields[SIMPLE_TITLECASE_MAPPING], 16);
+ }
+ StringBuilder s = new StringBuilder();
+ if (hexcode) {
+ s.append("0x" + fields[UNICODE].replaceFirst("^0+", "").toLowerCase() + " ");
+ }
+ s.append(Character.toChars(code));
+ if (uppercode != -1 && uppercode != code) {
+ s.append(Character.toChars(uppercode));
+ }
+ if (titlecode != -1 && titlecode != code && titlecode != uppercode) {
+ s.append(Character.toChars(titlecode));
+ }
+ ow.write(s.toString() + "\n");
+ }
+ }
+ ow.write("</classes>\n");
+ ow.flush();
+ ow.close();
+ inbr.close();
+ }
+
+ /**
+ * Generate classes.xml from XeTeX's Unicode letters file
+ * @param hexcode whether to prefix each class with the hexcode (only for debugging purposes)
+ * @param lettersPath path to XeTeX's Unicode letters file unicode-letters-XeTeX.tex
+ * @param outfilePath output file
+ * @throws IOException
+ */
+ public static void fromTeX(boolean hexcode, String lettersPath, String outfilePath) throws IOException {
+ File in = new File(lettersPath);
+
+ File f = new File(outfilePath);
+ if (f.exists()) {
+ f.delete();
+ }
+ f.createNewFile();
+ FileOutputStream fw = new FileOutputStream(f);
+ OutputStreamWriter ow = new OutputStreamWriter(fw, "utf-8");
+
+ FileInputStream inis = new FileInputStream(in);
+ InputStreamReader insr = new InputStreamReader(inis, "utf-8");
+ BufferedReader inbr = new BufferedReader(insr);
+
+ ow.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
+ "<classes>\n");
+ for (String line = inbr.readLine(); line != null; line = inbr.readLine()) {
+ String[] codes = line.split("\\s+");
+ if (!(codes[0].equals("\\L") || codes[0].equals("\\l"))) {
+ continue;
+ }
+ if (codes.length == 3) {
+ ow.write("\"" + line + "\" has two codes");
+ continue;
+ }
+ if (codes[0].equals("\\l") && codes.length != 2) {
+ ow.write("\"" + line + "\" should have one code");
+ continue;
+ }
+ else if (codes[0].equals("\\L") && codes.length != 4) {
+ ow.write("\"" + line + "\" should have three codes");
+ continue;
+ }
+ if (codes[0].equals("\\l") || (codes[0].equals("\\L") && codes[1].equals(codes[3]))) {
+ StringBuilder s = new StringBuilder();
+ if (hexcode) {
+ s.append("0x" + codes[1].replaceFirst("^0+", "").toLowerCase() + " ");
+ }
+ s.append(Character.toChars(Integer.parseInt(codes[1], 16)));
+ if (codes[0].equals("\\L")) {
+ s.append(Character.toChars(Integer.parseInt(codes[2], 16)));
+ }
+ ow.write(s.toString() + "\n");
+ }
+ }
+ ow.write("</classes>\n");
+ ow.flush();
+ ow.close();
+ inbr.close();
+ }
+
+
+ public static void main(String[] args) throws IOException {
+ String type = "ucd", prefix = "--", infile = null, outfile = CLASSES_XML;
+ boolean hexcode = false;
+ for (int i = 0; i < args.length; ++i) {
+ if (args[i].startsWith(prefix)) {
+ String option = args[i].substring(prefix.length());
+ if (option.equals("java") || option.equals("ucd") || option.equals("tex")) {
+ type = option;
+ } else if (option.equals("hexcode")) {
+ hexcode = true;
+ } else if (option.equals("out")) {
+ outfile = args[++i];
+ } else {
+ System.err.println("Unknown option: " + option);
+ System.exit(1);
+ }
+ } else {
+ if (infile != null) {
+ System.err.println("Only one non-option argument can be given, for infile");
+ System.exit(1);
+ }
+ infile = args[i];
+ }
+ }
+
+ if (type.equals("java")) {
+ if (infile != null) {
+ System.err.println("Type java does not allow an infile");
+ System.exit(1);
+ }
+ } else {
+ if (infile == null) {
+ System.err.println("Types ucd and tex require an infile");
+ System.exit(1);
+ }
+ }
+ if (type.equals("java")) {
+ fromJava(hexcode, outfile);
+ } else if (type.equals("ucd")) {
+ fromUCD(hexcode, infile, outfile);
+ } else if (type.equals("tex")) {
+ fromTeX(hexcode, infile, outfile);
+ } else {
+ System.err.println("Unknown type: " + type + ", nothing done");
+ System.exit(1);
+ }
+ }
+
+}
diff --git a/src/java/org/apache/fop/hyphenation/classes.xml b/src/java/org/apache/fop/hyphenation/classes.xml
new file mode 100644
index 000000000..bf5c29758
--- /dev/null
+++ b/src/java/org/apache/fop/hyphenation/classes.xml
@@ -0,0 +1,7628 @@
+<?xml version="1.0" encoding="utf-8"?>
+<classes>
+aA
+bB
+cC
+dD
+eE
+fF
+gG
+hH
+iI
+jJ
+kK
+lL
+mM
+nN
+oO
+pP
+qQ
+rR
+sS
+tT
+uU
+vV
+wW
+xX
+yY
+zZ
+µΜ
+àÀ
+áÁ
+âÂ
+ãÃ
+äÄ
+åÅ
+æÆ
+çÇ
+èÈ
+éÉ
+êÊ
+ëË
+ìÌ
+íÍ
+îÎ
+ïÏ
+ðÐ
+ñÑ
+òÒ
+óÓ
+ôÔ
+õÕ
+öÖ
+øØ
+ùÙ
+úÚ
+ûÛ
+üÜ
+ýÝ
+þÞ
+ÿŸ
+āĀ
+ăĂ
+ąĄ
+ćĆ
+ĉĈ
+ċĊ
+čČ
+ďĎ
+đĐ
+ēĒ
+ĕĔ
+ėĖ
+ęĘ
+ěĚ
+ĝĜ
+ğĞ
+ġĠ
+ģĢ
+ĥĤ
+ħĦ
+ĩĨ
+īĪ
+ĭĬ
+įĮ
+ıI
+ijIJ
+ĵĴ
+ķĶ
+ĺĹ
+ļĻ
+ľĽ
+ŀĿ
+łŁ
+ńŃ
+ņŅ
+ňŇ
+ŋŊ
+ōŌ
+ŏŎ
+őŐ
+œŒ
+ŕŔ
+ŗŖ
+řŘ
+śŚ
+ŝŜ
+şŞ
+šŠ
+ţŢ
+ťŤ
+ŧŦ
+ũŨ
+ūŪ
+ŭŬ
+ůŮ
+űŰ
+ųŲ
+ŵŴ
+ŷŶ
+źŹ
+żŻ
+žŽ
+ſS
+ƀɃ
+ƃƂ
+ƅƄ
+ƈƇ
+ƌƋ
+ƒƑ
+ƕǶ
+ƙƘ
+ƚȽ
+ƞȠ
+ơƠ
+ƣƢ
+ƥƤ
+ƨƧ
+ƭƬ
+ưƯ
+ƴƳ
+ƶƵ
+ƹƸ
+ƽƼ
+ƿǷ
+džDŽDž
+ljLJLj
+njNJNj
+ǎǍ
+ǐǏ
+ǒǑ
+ǔǓ
+ǖǕ
+ǘǗ
+ǚǙ
+ǜǛ
+ǝƎ
+ǟǞ
+ǡǠ
+ǣǢ
+ǥǤ
+ǧǦ
+ǩǨ
+ǫǪ
+ǭǬ
+ǯǮ
+dzDZDz
+ǵǴ
+ǹǸ
+ǻǺ
+ǽǼ
+ǿǾ
+ȁȀ
+ȃȂ
+ȅȄ
+ȇȆ
+ȉȈ
+ȋȊ
+ȍȌ
+ȏȎ
+ȑȐ
+ȓȒ
+ȕȔ
+ȗȖ
+șȘ
+țȚ
+ȝȜ
+ȟȞ
+ȣȢ
+ȥȤ
+ȧȦ
+ȩȨ
+ȫȪ
+ȭȬ
+ȯȮ
+ȱȰ
+ȳȲ
+ȼȻ
+ȿ
+ɂɁ
+ɇɆ
+ɉɈ
+ɋɊ
+ɍɌ
+ɏɎ
+ɐⱯ
+ɑⱭ
+ɓƁ
+ɔƆ
+ɖƉ
+ɗƊ
+əƏ
+ɛƐ
+ɠƓ
+ɣƔ
+ɨƗ
+ɩƖ
+ɫⱢ
+ɯƜ
+ɱⱮ
+ɲƝ
+ɵƟ
+ɽⱤ
+ɿ
+ʀƦ
+ʃƩ
+ʈƮ
+ʉɄ
+ʊƱ
+ʋƲ
+ʌɅ
+ʒƷ
+ͱͰ
+ͳͲ
+ͷͶ
+ͻϽ
+ͼϾ
+ͽϿ
+άΆ
+έΈ
+ήΉ
+ίΊ
+αΑ
+βΒ
+γΓ
+δΔ
+εΕ
+ζΖ
+ηΗ
+θΘ
+ιΙ
+κΚ
+λΛ
+μΜ
+νΝ
+ξΞ
+οΟ
+πΠ
+ρΡ
+ςΣ
+σΣ
+τΤ
+υΥ
+φΦ
+χΧ
+ψΨ
+ωΩ
+ϊΪ
+ϋΫ
+όΌ
+ύΎ
+ώΏ
+ϐΒ
+ϑΘ
+ϕΦ
+ϖΠ
+ϗϏ
+ϙϘ
+ϛϚ
+ϝϜ
+ϟϞ
+ϡϠ
+ϣϢ
+ϥϤ
+ϧϦ
+ϩϨ
+ϫϪ
+ϭϬ
+ϯϮ
+ϰΚ
+ϱΡ
+ϲϹ
+ϵΕ
+ϸϷ
+ϻϺ
+аА
+бБ
+вВ
+гГ
+дД
+еЕ
+жЖ
+зЗ
+иИ
+йЙ
+кК
+лЛ
+мМ
+нН
+оО
+пП
+рР
+сС
+тТ
+уУ
+фФ
+хХ
+цЦ
+чЧ
+шШ
+щЩ
+ъЪ
+ыЫ
+ьЬ
+эЭ
+юЮ
+яЯ
+ѐЀ
+ёЁ
+ђЂ
+ѓЃ
+єЄ
+ѕЅ
+іІ
+їЇ
+јЈ
+љЉ
+њЊ
+ћЋ
+ќЌ
+ѝЍ
+ўЎ
+џЏ
+ѡѠ
+ѣѢ
+ѥѤ
+ѧѦ
+ѩѨ
+ѫѪ
+ѭѬ
+ѯѮ
+ѱѰ
+ѳѲ
+ѵѴ
+ѷѶ
+ѹѸ
+ѻѺ
+ѽѼ
+ѿѾ
+ҁҀ
+ҋҊ
+ҍҌ
+ҏҎ
+ґҐ
+ғҒ
+ҕҔ
+җҖ
+ҙҘ
+қҚ
+ҝҜ
+ҟҞ
+ҡҠ
+ңҢ
+ҥҤ
+ҧҦ
+ҩҨ
+ҫҪ
+ҭҬ
+үҮ
+ұҰ
+ҳҲ
+ҵҴ
+ҷҶ
+ҹҸ
+һҺ
+ҽҼ
+ҿҾ
+ӂӁ
+ӄӃ
+ӆӅ
+ӈӇ
+ӊӉ
+ӌӋ
+ӎӍ
+ӏӀ
+ӑӐ
+ӓӒ
+ӕӔ
+ӗӖ
+әӘ
+ӛӚ
+ӝӜ
+ӟӞ
+ӡӠ
+ӣӢ
+ӥӤ
+ӧӦ
+өӨ
+ӫӪ
+ӭӬ
+ӯӮ
+ӱӰ
+ӳӲ
+ӵӴ
+ӷӶ
+ӹӸ
+ӻӺ
+ӽӼ
+ӿӾ
+ԁԀ
+ԃԂ
+ԅԄ
+ԇԆ
+ԉԈ
+ԋԊ
+ԍԌ
+ԏԎ
+ԑԐ
+ԓԒ
+ԕԔ
+ԗԖ
+ԙԘ
+ԛԚ
+ԝԜ
+ԟԞ
+ԡԠ
+ԣԢ
+աԱ
+բԲ
+գԳ
+դԴ
+եԵ
+զԶ
+էԷ
+ըԸ
+թԹ
+ժԺ
+իԻ
+լԼ
+խԽ
+ծԾ
+կԿ
+հՀ
+ձՁ
+ղՂ
+ճՃ
+մՄ
+յՅ
+նՆ
+շՇ
+ոՈ
+չՉ
+պՊ
+ջՋ
+ռՌ
+սՍ
+վՎ
+տՏ
+րՐ
+ցՑ
+ւՒ
+փՓ
+քՔ
+օՕ
+ֆՖ
+ؿ
+ٿ
+ڿ
+ۿ
+ݿ
+ऄ
+अ
+आ
+इ
+ई
+उ
+ऊ
+ऋ
+ऌ
+ऍ
+ऎ
+ए
+ऐ
+ऑ
+ऒ
+ओ
+औ
+क
+ख
+ग
+घ
+ङ
+च
+छ
+ज
+झ
+ञ
+ट
+ठ
+ड
+ढ
+ण
+त
+थ
+द
+ध
+न
+ऩ
+प
+फ
+ब
+भ
+म
+य
+र
+ऱ
+ल
+ळ
+ऴ
+व
+श
+ष
+स
+ह
+ऽ
+ॐ
+क़
+ख़
+ग़
+ज़
+ड़
+ढ़
+फ़
+य़
+ॠ
+ॡ
+ॲ
+ॻ
+ॼ
+ॽ
+ॾ
+ॿ
+অ
+আ
+ই
+ঈ
+উ
+ঊ
+ঋ
+ঌ
+এ
+ঐ
+ও
+ঔ
+ক
+খ
+গ
+ঘ
+ঙ
+চ
+ছ
+জ
+ঝ
+ঞ
+ট
+ঠ
+ড
+ঢ
+ণ
+ত
+থ
+দ
+ধ
+ন
+প
+ফ
+ব
+ভ
+ম
+য
+র
+ল
+শ
+ষ
+স
+হ
+ঽ
+ৎ
+ড়
+ঢ়
+য়
+ৠ
+ৡ
+ৰ
+ৱ
+ਅ
+ਆ
+ਇ
+ਈ
+ਉ
+ਊ
+ਏ
+ਐ
+ਓ
+ਔ
+ਕ
+ਖ
+ਗ
+ਘ
+ਙ
+ਚ
+ਛ
+ਜ
+ਝ
+ਞ
+ਟ
+ਠ
+ਡ
+ਢ
+ਣ
+ਤ
+ਥ
+ਦ
+ਧ
+ਨ
+ਪ
+ਫ
+ਬ
+ਭ
+ਮ
+ਯ
+ਰ
+ਲ
+ਲ਼
+ਵ
+ਸ਼
+ਸ
+ਹ
+ਖ਼
+ਗ਼
+ਜ਼
+ੜ
+ਫ਼
+ੲ
+ੳ
+ੴ
+અ
+આ
+ઇ
+ઈ
+ઉ
+ઊ
+ઋ
+ઌ
+ઍ
+એ
+ઐ
+ઑ
+ઓ
+ઔ
+ક
+ખ
+ગ
+ઘ
+ઙ
+ચ
+છ
+જ
+ઝ
+ઞ
+ટ
+ઠ
+ડ
+ઢ
+ણ
+ત
+થ
+દ
+ધ
+ન
+પ
+ફ
+બ
+ભ
+મ
+ય
+ર
+લ
+ળ
+વ
+શ
+ષ
+સ
+હ
+ઽ
+ૐ
+ૠ
+ૡ
+ଅ
+ଆ
+ଇ
+ଈ
+ଉ
+ଊ
+ଋ
+ଌ
+ଏ
+ଐ
+ଓ
+ଔ
+କ
+ଖ
+ଗ
+ଘ
+ଙ
+ଚ
+ଛ
+ଜ
+ଝ
+ଞ
+ଟ
+ଠ
+ଡ
+ଢ
+ଣ
+ତ
+ଥ
+ଦ
+ଧ
+ନ
+ପ
+ଫ
+ବ
+ଭ
+ମ
+ଯ
+ର
+ଲ
+ଳ
+ଵ
+ଶ
+ଷ
+ସ
+ହ
+ଽ
+ଡ଼
+ଢ଼
+ୟ
+ୠ
+ୡ
+ୱ
+ஃ
+அ
+ஆ
+இ
+ஈ
+உ
+ஊ
+எ
+ஏ
+ஐ
+ஒ
+ஓ
+ஔ
+க
+ங
+ச
+ஜ
+ஞ
+ட
+ண
+த
+ந
+ன
+ப
+ம
+ய
+ர
+ற
+ல
+ள
+ழ
+வ
+ஶ
+ஷ
+ஸ
+ஹ
+ௐ
+అ
+ఆ
+ఇ
+ఈ
+ఉ
+ఊ
+ఋ
+ఌ
+ఎ
+ఏ
+ఐ
+ఒ
+ఓ
+ఔ
+క
+ఖ
+గ
+ఘ
+ఙ
+చ
+ఛ
+జ
+ఝ
+ఞ
+ట
+ఠ
+డ
+ఢ
+ణ
+త
+థ
+ద
+ధ
+న
+ప
+ఫ
+బ
+భ
+మ
+య
+ర
+ఱ
+ల
+ళ
+వ
+శ
+ష
+స
+హ
+ఽ
+ౘ
+ౙ
+ౠ
+ౡ
+ಅ
+ಆ
+ಇ
+ಈ
+ಉ
+ಊ
+ಋ
+ಌ
+ಎ
+ಏ
+ಐ
+ಒ
+ಓ
+ಔ
+ಕ
+ಖ
+ಗ
+ಘ
+ಙ
+ಚ
+ಛ
+ಜ
+ಝ
+ಞ
+ಟ
+ಠ
+ಡ
+ಢ
+ಣ
+ತ
+ಥ
+ದ
+ಧ
+ನ
+ಪ
+ಫ
+ಬ
+ಭ
+ಮ
+ಯ
+ರ
+ಱ
+ಲ
+ಳ
+ವ
+ಶ
+ಷ
+ಸ
+ಹ
+ಽ
+ೞ
+ೠ
+ೡ
+അ
+ആ
+ഇ
+ഈ
+ഉ
+ഊ
+ഋ
+ഌ
+എ
+ഏ
+ഐ
+ഒ
+ഓ
+ഔ
+ക
+ഖ
+ഗ
+ഘ
+ങ
+ച
+ഛ
+ജ
+ഝ
+ഞ
+ട
+ഠ
+ഡ
+ഢ
+ണ
+ത
+ഥ
+ദ
+ധ
+ന
+പ
+ഫ
+ബ
+ഭ
+മ
+യ
+ര
+റ
+ല
+ള
+ഴ
+വ
+ശ
+ഷ
+സ
+ഹ
+ഽ
+ൠ
+ൡ
+ൺ
+ൻ
+ർ
+ൽ
+ൾ
+ൿ
+අ
+ආ
+ඇ
+ඈ
+ඉ
+ඊ
+උ
+ඌ
+ඍ
+ඎ
+ඏ
+ඐ
+එ
+ඒ
+ඓ
+ඔ
+ඕ
+ඖ
+ක
+ඛ
+ග
+ඝ
+ඞ
+ඟ
+ච
+ඡ
+ජ
+ඣ
+ඤ
+ඥ
+ඦ
+ට
+ඨ
+ඩ
+ඪ
+ණ
+ඬ
+ත
+ථ
+ද
+ධ
+න
+ඳ
+ප
+ඵ
+බ
+භ
+ම
+ඹ
+ය
+ර
+ල
+ව
+ශ
+ෂ
+ස
+හ
+ළ
+ෆ
+ก
+ข
+ฃ
+ค
+ฅ
+ฆ
+ง
+จ
+ฉ
+ช
+ซ
+ฌ
+ญ
+ฎ
+ฏ
+ฐ
+ฑ
+ฒ
+ณ
+ด
+ต
+ถ
+ท
+ธ
+น
+บ
+ป
+ผ
+ฝ
+พ
+ฟ
+ภ
+ม
+ย
+ร
+ฤ
+ล
+ฦ
+ว
+ศ
+ษ
+ส
+ห
+ฬ
+อ
+ฮ
+ฯ
+ะ
+า
+ำ
+เ
+แ
+โ
+ใ
+ไ
+ๅ
+ກ
+ຂ
+ຄ
+ງ
+ຈ
+ຊ
+ຍ
+ດ
+ຕ
+ຖ
+ທ
+ນ
+ບ
+ປ
+ຜ
+ຝ
+ພ
+ຟ
+ມ
+ຢ
+ຣ
+ລ
+ວ
+ສ
+ຫ
+ອ
+ຮ
+ຯ
+ະ
+າ
+ຳ
+ຽ
+ເ
+ແ
+ໂ
+ໃ
+ໄ
+ໜ
+ໝ
+ༀ
+ཀ
+ཁ
+ག
+གྷ
+ང
+ཅ
+ཆ
+ཇ
+ཉ
+ཊ
+ཋ
+ཌ
+ཌྷ
+ཎ
+ཏ
+ཐ
+ད
+དྷ
+ན
+པ
+ཕ
+བ
+བྷ
+མ
+ཙ
+ཚ
+ཛ
+ཛྷ
+ཝ
+ཞ
+ཟ
+འ
+ཡ
+ར
+ལ
+ཤ
+ཥ
+ས
+ཧ
+ཨ
+ཀྵ
+ཪ
+ཫ
+ཬ
+ྈ
+ྉ
+ྊ
+ྋ
+က
+ခ
+ဂ
+ဃ
+င
+စ
+ဆ
+ဇ
+ဈ
+ဉ
+ည
+ဋ
+ဌ
+ဍ
+ဎ
+ဏ
+တ
+ထ
+ဒ
+ဓ
+န
+ပ
+ဖ
+ဗ
+ဘ
+မ
+ယ
+ရ
+လ
+ဝ
+သ
+ဟ
+ဠ
+အ
+ဢ
+ဣ
+ဤ
+ဥ
+ဦ
+ဧ
+ဨ
+ဩ
+ဪ
+ဿ
+ၐ
+ၑ
+ၒ
+ၓ
+ၔ
+ၕ
+ၚ
+ၛ
+ၜ
+ၝ
+ၡ
+ၥ
+ၦ
+ၮ
+ၯ
+ၰ
+ၵ
+ၶ
+ၷ
+ၸ
+ၹ
+ၺ
+ၻ
+ၼ
+ၽ
+ၾ
+ၿ
+ႀ
+ႁ
+ႎ
+ა
+ბ
+გ
+დ
+ე
+ვ
+ზ
+თ
+ი
+კ
+ლ
+მ
+ნ
+ო
+პ
+ჟ
+რ
+ს
+ტ
+უ
+ფ
+ქ
+ღ
+ყ
+შ
+ჩ
+ც
+ძ
+წ
+ჭ
+ხ
+ჯ
+ჰ
+ჱ
+ჲ
+ჳ
+ჴ
+ჵ
+ჶ
+ჷ
+ჸ
+ჹ
+ჺ
+ᄀ
+ᄁ
+ᄂ
+ᄃ
+ᄄ
+ᄅ
+ᄆ
+ᄇ
+ᄈ
+ᄉ
+ᄊ
+ᄋ
+ᄌ
+ᄍ
+ᄎ
+ᄏ
+ᄐ
+ᄑ
+ᄒ
+ᄓ
+ᄔ
+ᄕ
+ᄖ
+ᄗ
+ᄘ
+ᄙ
+ᄚ
+ᄛ
+ᄜ
+ᄝ
+ᄞ
+ᄟ
+ᄠ
+ᄡ
+ᄢ
+ᄣ
+ᄤ
+ᄥ
+ᄦ
+ᄧ
+ᄨ
+ᄩ
+ᄪ
+ᄫ
+ᄬ
+ᄭ
+ᄮ
+ᄯ
+ᄰ
+ᄱ
+ᄲ
+ᄳ
+ᄴ
+ᄵ
+ᄶ
+ᄷ
+ᄸ
+ᄹ
+ᄺ
+ᄻ
+ᄼ
+ᄽ
+ᄾ
+ᄿ
+ᅀ
+ᅁ
+ᅂ
+ᅃ
+ᅄ
+ᅅ
+ᅆ
+ᅇ
+ᅈ
+ᅉ
+ᅊ
+ᅋ
+ᅌ
+ᅍ
+ᅎ
+ᅏ
+ᅐ
+ᅑ
+ᅒ
+ᅓ
+ᅔ
+ᅕ
+ᅖ
+ᅗ
+ᅘ
+ᅙ
+ᅟ
+ᅠ
+ᅡ
+ᅢ
+ᅣ
+ᅤ
+ᅥ
+ᅦ
+ᅧ
+ᅨ
+ᅩ
+ᅪ
+ᅫ
+ᅬ
+ᅭ
+ᅮ
+ᅯ
+ᅰ
+ᅱ
+ᅲ
+ᅳ
+ᅴ
+ᅵ
+ᅶ
+ᅷ
+ᅸ
+ᅹ
+ᅺ
+ᅻ
+ᅼ
+ᅽ
+ᅾ
+ᅿ
+ᆀ
+ᆁ
+ᆂ
+ᆃ
+ᆄ
+ᆅ
+ᆆ
+ᆇ
+ᆈ
+ᆉ
+ᆊ
+ᆋ
+ᆌ
+ᆍ
+ᆎ
+ᆏ
+ᆐ
+ᆑ
+ᆒ
+ᆓ
+ᆔ
+ᆕ
+ᆖ
+ᆗ
+ᆘ
+ᆙ
+ᆚ
+ᆛ
+ᆜ
+ᆝ
+ᆞ
+ᆟ
+ᆠ
+ᆡ
+ᆢ
+ᆨ
+ᆩ
+ᆪ
+ᆫ
+ᆬ
+ᆭ
+ᆮ
+ᆯ
+ᆰ
+ᆱ
+ᆲ
+ᆳ
+ᆴ
+ᆵ
+ᆶ
+ᆷ
+ᆸ
+ᆹ
+ᆺ
+ᆻ
+ᆼ
+ᆽ
+ᆾ
+ᆿ
+ᇀ
+ᇁ
+ᇂ
+ᇃ
+ᇄ
+ᇅ
+ᇆ
+ᇇ
+ᇈ
+ᇉ
+ᇊ
+ᇋ
+ᇌ
+ᇍ
+ᇎ
+ᇏ
+ᇐ
+ᇑ
+ᇒ
+ᇓ
+ᇔ
+ᇕ
+ᇖ
+ᇗ
+ᇘ
+ᇙ
+ᇚ
+ᇛ
+ᇜ
+ᇝ
+ᇞ
+ᇟ
+ᇠ
+ᇡ
+ᇢ
+ᇣ
+ᇤ
+ᇥ
+ᇦ
+ᇧ
+ᇨ
+ᇩ
+ᇪ
+ᇫ
+ᇬ
+ᇭ
+ᇮ
+ᇯ
+ᇰ
+ᇱ
+ᇲ
+ᇳ
+ᇴ
+ᇵ
+ᇶ
+ᇷ
+ᇸ
+ᇹ
+ሀ
+ሁ
+ሂ
+ሃ
+ሄ
+ህ
+ሆ
+ሇ
+ለ
+ሉ
+ሊ
+ላ
+ሌ
+ል
+ሎ
+ሏ
+ሐ
+ሑ
+ሒ
+ሓ
+ሔ
+ሕ
+ሖ
+ሗ
+መ
+ሙ
+ሚ
+ማ
+ሜ
+ም
+ሞ
+ሟ
+ሠ
+ሡ
+ሢ
+ሣ
+ሤ
+ሥ
+ሦ
+ሧ
+ረ
+ሩ
+ሪ
+ራ
+ሬ
+ር
+ሮ
+ሯ
+ሰ
+ሱ
+ሲ
+ሳ
+ሴ
+ስ
+ሶ
+ሷ
+ሸ
+ሹ
+ሺ
+ሻ
+ሼ
+ሽ
+ሾ
+ሿ
+ቀ
+ቁ
+ቂ
+ቃ
+ቄ
+ቅ
+ቆ
+ቇ
+ቈ
+ቊ
+ቋ
+ቌ
+ቍ
+ቐ
+ቑ
+ቒ
+ቓ
+ቔ
+ቕ
+ቖ
+ቘ
+ቚ
+ቛ
+ቜ
+ቝ
+በ
+ቡ
+ቢ
+ባ
+ቤ
+ብ
+ቦ
+ቧ
+ቨ
+ቩ
+ቪ
+ቫ
+ቬ
+ቭ
+ቮ
+ቯ
+ተ
+ቱ
+ቲ
+ታ
+ቴ
+ት
+ቶ
+ቷ
+ቸ
+ቹ
+ቺ
+ቻ
+ቼ
+ች
+ቾ
+ቿ
+ኀ
+ኁ
+ኂ
+ኃ
+ኄ
+ኅ
+ኆ
+ኇ
+ኈ
+ኊ
+ኋ
+ኌ
+ኍ
+ነ
+ኑ
+ኒ
+ና
+ኔ
+ን
+ኖ
+ኗ
+ኘ
+ኙ
+ኚ
+ኛ
+ኜ
+ኝ
+ኞ
+ኟ
+አ
+ኡ
+ኢ
+ኣ
+ኤ
+እ
+ኦ
+ኧ
+ከ
+ኩ
+ኪ
+ካ
+ኬ
+ክ
+ኮ
+ኯ
+ኰ
+ኲ
+ኳ
+ኴ
+ኵ
+ኸ
+ኹ
+ኺ
+ኻ
+ኼ
+ኽ
+ኾ
+ዀ
+ዂ
+ዃ
+ዄ
+ዅ
+ወ
+ዉ
+ዊ
+ዋ
+ዌ
+ው
+ዎ
+ዏ
+ዐ
+ዑ
+ዒ
+ዓ
+ዔ
+ዕ
+ዖ
+ዘ
+ዙ
+ዚ
+ዛ
+ዜ
+ዝ
+ዞ
+ዟ
+ዠ
+ዡ
+ዢ
+ዣ
+ዤ
+ዥ
+ዦ
+ዧ
+የ
+ዩ
+ዪ
+ያ
+ዬ
+ይ
+ዮ
+ዯ
+ደ
+ዱ
+ዲ
+ዳ
+ዴ
+ድ
+ዶ
+ዷ
+ዸ
+ዹ
+ዺ
+ዻ
+ዼ
+ዽ
+ዾ
+ዿ
+ጀ
+ጁ
+ጂ
+ጃ
+ጄ
+ጅ
+ጆ
+ጇ
+ገ
+ጉ
+ጊ
+ጋ
+ጌ
+ግ
+ጎ
+ጏ
+ጐ
+ጒ
+ጓ
+ጔ
+ጕ
+ጘ
+ጙ
+ጚ
+ጛ
+ጜ
+ጝ
+ጞ
+ጟ
+ጠ
+ጡ
+ጢ
+ጣ
+ጤ
+ጥ
+ጦ
+ጧ
+ጨ
+ጩ
+ጪ
+ጫ
+ጬ
+ጭ
+ጮ
+ጯ
+ጰ
+ጱ
+ጲ
+ጳ
+ጴ
+ጵ
+ጶ
+ጷ
+ጸ
+ጹ
+ጺ
+ጻ
+ጼ
+ጽ
+ጾ
+ጿ
+ፀ
+ፁ
+ፂ
+ፃ
+ፄ
+ፅ
+ፆ
+ፇ
+ፈ
+ፉ
+ፊ
+ፋ
+ፌ
+ፍ
+ፎ
+ፏ
+ፐ
+ፑ
+ፒ
+ፓ
+ፔ
+ፕ
+ፖ
+ፗ
+ፘ
+ፙ
+ፚ
+ᎀ
+ᎁ
+ᎂ
+ᎃ
+ᎄ
+ᎅ
+ᎆ
+ᎇ
+ᎈ
+ᎉ
+ᎊ
+ᎋ
+ᎌ
+ᎍ
+ᎎ
+ᎏ
+Ꭰ
+Ꭱ
+Ꭲ
+Ꭳ
+Ꭴ
+Ꭵ
+Ꭶ
+Ꭷ
+Ꭸ
+Ꭹ
+Ꭺ
+Ꭻ
+Ꭼ
+Ꭽ
+Ꭾ
+Ꭿ
+Ꮀ
+Ꮁ
+Ꮂ
+Ꮃ
+Ꮄ
+Ꮅ
+Ꮆ
+Ꮇ
+Ꮈ
+Ꮉ
+Ꮊ
+Ꮋ
+Ꮌ
+Ꮍ
+Ꮎ
+Ꮏ
+Ꮐ
+Ꮑ
+Ꮒ
+Ꮓ
+Ꮔ
+Ꮕ
+Ꮖ
+Ꮗ
+Ꮘ
+Ꮙ
+Ꮚ
+Ꮛ
+Ꮜ
+Ꮝ
+Ꮞ
+Ꮟ
+Ꮠ
+Ꮡ
+Ꮢ
+Ꮣ
+Ꮤ
+Ꮥ
+Ꮦ
+Ꮧ
+Ꮨ
+Ꮩ
+Ꮪ
+Ꮫ
+Ꮬ
+Ꮭ
+Ꮮ
+Ꮯ
+Ꮰ
+Ꮱ
+Ꮲ
+Ꮳ
+Ꮴ
+Ꮵ
+Ꮶ
+Ꮷ
+Ꮸ
+Ꮹ
+Ꮺ
+Ꮻ
+Ꮼ
+Ꮽ
+Ꮾ
+Ꮿ
+Ᏸ
+Ᏹ
+Ᏺ
+Ᏻ
+Ᏼ
+ᐁ
+ᐂ
+ᐃ
+ᐄ
+ᐅ
+ᐆ
+ᐇ
+ᐈ
+ᐉ
+ᐊ
+ᐋ
+ᐌ
+ᐍ
+ᐎ
+ᐏ
+ᐐ
+ᐑ
+ᐒ
+ᐓ
+ᐔ
+ᐕ
+ᐖ
+ᐗ
+ᐘ
+ᐙ
+ᐚ
+ᐛ
+ᐜ
+ᐝ
+ᐞ
+ᐟ
+ᐠ
+ᐡ
+ᐢ
+ᐣ
+ᐤ
+ᐥ
+ᐦ
+ᐧ
+ᐨ
+ᐩ
+ᐪ
+ᐫ
+ᐬ
+ᐭ
+ᐮ
+ᐯ
+ᐰ
+ᐱ
+ᐲ
+ᐳ
+ᐴ
+ᐵ
+ᐶ
+ᐷ
+ᐸ
+ᐹ
+ᐺ
+ᐻ
+ᐼ
+ᐽ
+ᐾ
+ᐿ
+ᑀ
+ᑁ
+ᑂ
+ᑃ
+ᑄ
+ᑅ
+ᑆ
+ᑇ
+ᑈ
+ᑉ
+ᑊ
+ᑋ
+ᑌ
+ᑍ
+ᑎ
+ᑏ
+ᑐ
+ᑑ
+ᑒ
+ᑓ
+ᑔ
+ᑕ
+ᑖ
+ᑗ
+ᑘ
+ᑙ
+ᑚ
+ᑛ
+ᑜ
+ᑝ
+ᑞ
+ᑟ
+ᑠ
+ᑡ
+ᑢ
+ᑣ
+ᑤ
+ᑥ
+ᑦ
+ᑧ
+ᑨ
+ᑩ
+ᑪ
+ᑫ
+ᑬ
+ᑭ
+ᑮ
+ᑯ
+ᑰ
+ᑱ
+ᑲ
+ᑳ
+ᑴ
+ᑵ
+ᑶ
+ᑷ
+ᑸ
+ᑹ
+ᑺ
+ᑻ
+ᑼ
+ᑽ
+ᑾ
+ᑿ
+ᒀ
+ᒁ
+ᒂ
+ᒃ
+ᒄ
+ᒅ
+ᒆ
+ᒇ
+ᒈ
+ᒉ
+ᒊ
+ᒋ
+ᒌ
+ᒍ
+ᒎ
+ᒏ
+ᒐ
+ᒑ
+ᒒ
+ᒓ
+ᒔ
+ᒕ
+ᒖ
+ᒗ
+ᒘ
+ᒙ
+ᒚ
+ᒛ
+ᒜ
+ᒝ
+ᒞ
+ᒟ
+ᒠ
+ᒡ
+ᒢ
+ᒣ
+ᒤ
+ᒥ
+ᒦ
+ᒧ
+ᒨ
+ᒩ
+ᒪ
+ᒫ
+ᒬ
+ᒭ
+ᒮ
+ᒯ
+ᒰ
+ᒱ
+ᒲ
+ᒳ
+ᒴ
+ᒵ
+ᒶ
+ᒷ
+ᒸ
+ᒹ
+ᒺ
+ᒻ
+ᒼ
+ᒽ
+ᒾ
+ᒿ
+ᓀ
+ᓁ
+ᓂ
+ᓃ
+ᓄ
+ᓅ
+ᓆ
+ᓇ
+ᓈ
+ᓉ
+ᓊ
+ᓋ
+ᓌ
+ᓍ
+ᓎ
+ᓏ
+ᓐ
+ᓑ
+ᓒ
+ᓓ
+ᓔ
+ᓕ
+ᓖ
+ᓗ
+ᓘ
+ᓙ
+ᓚ
+ᓛ
+ᓜ
+ᓝ
+ᓞ
+ᓟ
+ᓠ
+ᓡ
+ᓢ
+ᓣ
+ᓤ
+ᓥ
+ᓦ
+ᓧ
+ᓨ
+ᓩ
+ᓪ
+ᓫ
+ᓬ
+ᓭ
+ᓮ
+ᓯ
+ᓰ
+ᓱ
+ᓲ
+ᓳ
+ᓴ
+ᓵ
+ᓶ
+ᓷ
+ᓸ
+ᓹ
+ᓺ
+ᓻ
+ᓼ
+ᓽ
+ᓾ
+ᓿ
+ᔀ
+ᔁ
+ᔂ
+ᔃ
+ᔄ
+ᔅ
+ᔆ
+ᔇ
+ᔈ
+ᔉ
+ᔊ
+ᔋ
+ᔌ
+ᔍ
+ᔎ
+ᔏ
+ᔐ
+ᔑ
+ᔒ
+ᔓ
+ᔔ
+ᔕ
+ᔖ
+ᔗ
+ᔘ
+ᔙ
+ᔚ
+ᔛ
+ᔜ
+ᔝ
+ᔞ
+ᔟ
+ᔠ
+ᔡ
+ᔢ
+ᔣ
+ᔤ
+ᔥ
+ᔦ
+ᔧ
+ᔨ
+ᔩ
+ᔪ
+ᔫ
+ᔬ
+ᔭ
+ᔮ
+ᔯ
+ᔰ
+ᔱ
+ᔲ
+ᔳ
+ᔴ
+ᔵ
+ᔶ
+ᔷ
+ᔸ
+ᔹ
+ᔺ
+ᔻ
+ᔼ
+ᔽ
+ᔾ
+ᔿ
+ᕀ
+ᕁ
+ᕂ
+ᕃ
+ᕄ
+ᕅ
+ᕆ
+ᕇ
+ᕈ
+ᕉ
+ᕊ
+ᕋ
+ᕌ
+ᕍ
+ᕎ
+ᕏ
+ᕐ
+ᕑ
+ᕒ
+ᕓ
+ᕔ
+ᕕ
+ᕖ
+ᕗ
+ᕘ
+ᕙ
+ᕚ
+ᕛ
+ᕜ
+ᕝ
+ᕞ
+ᕟ
+ᕠ
+ᕡ
+ᕢ
+ᕣ
+ᕤ
+ᕥ
+ᕦ
+ᕧ
+ᕨ
+ᕩ
+ᕪ
+ᕫ
+ᕬ
+ᕭ
+ᕮ
+ᕯ
+ᕰ
+ᕱ
+ᕲ
+ᕳ
+ᕴ
+ᕵ
+ᕶ
+ᕷ
+ᕸ
+ᕹ
+ᕺ
+ᕻ
+ᕼ
+ᕽ
+ᕾ
+ᕿ
+ᖀ
+ᖁ
+ᖂ
+ᖃ
+ᖄ
+ᖅ
+ᖆ
+ᖇ
+ᖈ
+ᖉ
+ᖊ
+ᖋ
+ᖌ
+ᖍ
+ᖎ
+ᖏ
+ᖐ
+ᖑ
+ᖒ
+ᖓ
+ᖔ
+ᖕ
+ᖖ
+ᖗ
+ᖘ
+ᖙ
+ᖚ
+ᖛ
+ᖜ
+ᖝ
+ᖞ
+ᖟ
+ᖠ
+ᖡ
+ᖢ
+ᖣ
+ᖤ
+ᖥ
+ᖦ
+ᖧ
+ᖨ
+ᖩ
+ᖪ
+ᖫ
+ᖬ
+ᖭ
+ᖮ
+ᖯ
+ᖰ
+ᖱ
+ᖲ
+ᖳ
+ᖴ
+ᖵ
+ᖶ
+ᖷ
+ᖸ
+ᖹ
+ᖺ
+ᖻ
+ᖼ
+ᖽ
+ᖾ
+ᖿ
+ᗀ
+ᗁ
+ᗂ
+ᗃ
+ᗄ
+ᗅ
+ᗆ
+ᗇ
+ᗈ
+ᗉ
+ᗊ
+ᗋ
+ᗌ
+ᗍ
+ᗎ
+ᗏ
+ᗐ
+ᗑ
+ᗒ
+ᗓ
+ᗔ
+ᗕ
+ᗖ
+ᗗ
+ᗘ
+ᗙ
+ᗚ
+ᗛ
+ᗜ
+ᗝ
+ᗞ
+ᗟ
+ᗠ
+ᗡ
+ᗢ
+ᗣ
+ᗤ
+ᗥ
+ᗦ
+ᗧ
+ᗨ
+ᗩ
+ᗪ
+ᗫ
+ᗬ
+ᗭ
+ᗮ
+ᗯ
+ᗰ
+ᗱ
+ᗲ
+ᗳ
+ᗴ
+ᗵ
+ᗶ
+ᗷ
+ᗸ
+ᗹ
+ᗺ
+ᗻ
+ᗼ
+ᗽ
+ᗾ
+ᗿ
+ᘀ
+ᘁ
+ᘂ
+ᘃ
+ᘄ
+ᘅ
+ᘆ
+ᘇ
+ᘈ
+ᘉ
+ᘊ
+ᘋ
+ᘌ
+ᘍ
+ᘎ
+ᘏ
+ᘐ
+ᘑ
+ᘒ
+ᘓ
+ᘔ
+ᘕ
+ᘖ
+ᘗ
+ᘘ
+ᘙ
+ᘚ
+ᘛ
+ᘜ
+ᘝ
+ᘞ
+ᘟ
+ᘠ
+ᘡ
+ᘢ
+ᘣ
+ᘤ
+ᘥ
+ᘦ
+ᘧ
+ᘨ
+ᘩ
+ᘪ
+ᘫ
+ᘬ
+ᘭ
+ᘮ
+ᘯ
+ᘰ
+ᘱ
+ᘲ
+ᘳ
+ᘴ
+ᘵ
+ᘶ
+ᘷ
+ᘸ
+ᘹ
+ᘺ
+ᘻ
+ᘼ
+ᘽ
+ᘾ
+ᘿ
+ᙀ
+ᙁ
+ᙂ
+ᙃ
+ᙄ
+ᙅ
+ᙆ
+ᙇ
+ᙈ
+ᙉ
+ᙊ
+ᙋ
+ᙌ
+ᙍ
+ᙎ
+ᙏ
+ᙐ
+ᙑ
+ᙒ
+ᙓ
+ᙔ
+ᙕ
+ᙖ
+ᙗ
+ᙘ
+ᙙ
+ᙚ
+ᙛ
+ᙜ
+ᙝ
+ᙞ
+ᙟ
+ᙠ
+ᙡ
+ᙢ
+ᙣ
+ᙤ
+ᙥ
+ᙦ
+ᙧ
+ᙨ
+ᙩ
+ᙪ
+ᙫ
+ᙬ
+ᙯ
+ᙰ
+ᙱ
+ᙲ
+ᙳ
+ᙴ
+ᙵ
+ᙶ
+ᚁ
+ᚂ
+ᚃ
+ᚄ
+ᚅ
+ᚆ
+ᚇ
+ᚈ
+ᚉ
+ᚊ
+ᚋ
+ᚌ
+ᚍ
+ᚎ
+ᚏ
+ᚐ
+ᚑ
+ᚒ
+ᚓ
+ᚔ
+ᚕ
+ᚖ
+ᚗ
+ᚘ
+ᚙ
+ᚚ
+ᚠ
+ᚡ
+ᚢ
+ᚣ
+ᚤ
+ᚥ
+ᚦ
+ᚧ
+ᚨ
+ᚩ
+ᚪ
+ᚫ
+ᚬ
+ᚭ
+ᚮ
+ᚯ
+ᚰ
+ᚱ
+ᚲ
+ᚳ
+ᚴ
+ᚵ
+ᚶ
+ᚷ
+ᚸ
+ᚹ
+ᚺ
+ᚻ
+ᚼ
+ᚽ
+ᚾ
+ᚿ
+ᛀ
+ᛁ
+ᛂ
+ᛃ
+ᛄ
+ᛅ
+ᛆ
+ᛇ
+ᛈ
+ᛉ
+ᛊ
+ᛋ
+ᛌ
+ᛍ
+ᛎ
+ᛏ
+ᛐ
+ᛑ
+ᛒ
+ᛓ
+ᛔ
+ᛕ
+ᛖ
+ᛗ
+ᛘ
+ᛙ
+ᛚ
+ᛛ
+ᛜ
+ᛝ
+ᛞ
+ᛟ
+ᛠ
+ᛡ
+ᛢ
+ᛣ
+ᛤ
+ᛥ
+ᛦ
+ᛧ
+ᛨ
+ᛩ
+ᛪ
+ᜀ
+ᜁ
+ᜂ
+ᜃ
+ᜄ
+ᜅ
+ᜆ
+ᜇ
+ᜈ
+ᜉ
+ᜊ
+ᜋ
+ᜌ
+ᜎ
+ᜏ
+ᜐ
+ᜑ
+ᜠ
+ᜡ
+ᜢ
+ᜣ
+ᜤ
+ᜥ
+ᜦ
+ᜧ
+ᜨ
+ᜩ
+ᜪ
+ᜫ
+ᜬ
+ᜭ
+ᜮ
+ᜯ
+ᜰ
+ᜱ
+ᝀ
+ᝁ
+ᝂ
+ᝃ
+ᝄ
+ᝅ
+ᝆ
+ᝇ
+ᝈ
+ᝉ
+ᝊ
+ᝋ
+ᝌ
+ᝍ
+ᝎ
+ᝏ
+ᝐ
+ᝑ
+ᝠ
+ᝡ
+ᝢ
+ᝣ
+ᝤ
+ᝥ
+ᝦ
+ᝧ
+ᝨ
+ᝩ
+ᝪ
+ᝫ
+ᝬ
+ᝮ
+ᝯ
+ᝰ
+ក
+ខ
+គ
+ឃ
+ង
+ច
+ឆ
+ជ
+ឈ
+ញ
+ដ
+ឋ
+ឌ
+ឍ
+ណ
+ត
+ថ
+ទ
+ធ
+ន
+ប
+ផ
+ព
+ភ
+ម
+យ
+រ
+ល
+វ
+ឝ
+ឞ
+ស
+ហ
+ឡ
+អ
+ឣ
+ឤ
+ឥ
+ឦ
+ឧ
+ឨ
+ឩ
+ឪ
+ឫ
+ឬ
+ឭ
+ឮ
+ឯ
+ឰ
+ឱ
+ឲ
+ឳ
+ៜ
+ᠠ
+ᠡ
+ᠢ
+ᠣ
+ᠤ
+ᠥ
+ᠦ
+ᠧ
+ᠨ
+ᠩ
+ᠪ
+ᠫ
+ᠬ
+ᠭ
+ᠮ
+ᠯ
+ᠰ
+ᠱ
+ᠲ
+ᠳ
+ᠴ
+ᠵ
+ᠶ
+ᠷ
+ᠸ
+ᠹ
+ᠺ
+ᠻ
+ᠼ
+ᠽ
+ᠾ
+ᠿ
+ᡀ
+ᡁ
+ᡂ
+ᡄ
+ᡅ
+ᡆ
+ᡇ
+ᡈ
+ᡉ
+ᡊ
+ᡋ
+ᡌ
+ᡍ
+ᡎ
+ᡏ
+ᡐ
+ᡑ
+ᡒ
+ᡓ
+ᡔ
+ᡕ
+ᡖ
+ᡗ
+ᡘ
+ᡙ
+ᡚ
+ᡛ
+ᡜ
+ᡝ
+ᡞ
+ᡟ
+ᡠ
+ᡡ
+ᡢ
+ᡣ
+ᡤ
+ᡥ
+ᡦ
+ᡧ
+ᡨ
+ᡩ
+ᡪ
+ᡫ
+ᡬ
+ᡭ
+ᡮ
+ᡯ
+ᡰ
+ᡱ
+ᡲ
+ᡳ
+ᡴ
+ᡵ
+ᡶ
+ᡷ
+ᢀ
+ᢁ
+ᢂ
+ᢃ
+ᢄ
+ᢅ
+ᢆ
+ᢇ
+ᢈ
+ᢉ
+ᢊ
+ᢋ
+ᢌ
+ᢍ
+ᢎ
+ᢏ
+ᢐ
+ᢑ
+ᢒ
+ᢓ
+ᢔ
+ᢕ
+ᢖ
+ᢗ
+ᢘ
+ᢙ
+ᢚ
+ᢛ
+ᢜ
+ᢝ
+ᢞ
+ᢟ
+ᢠ
+ᢡ
+ᢢ
+ᢣ
+ᢤ
+ᢥ
+ᢦ
+ᢧ
+ᢨ
+ᢪ
+ᤀ
+ᤁ
+ᤂ
+ᤃ
+ᤄ
+ᤅ
+ᤆ
+ᤇ
+ᤈ
+ᤉ
+ᤊ
+ᤋ
+ᤌ
+ᤍ
+ᤎ
+ᤏ
+ᤐ
+ᤑ
+ᤒ
+ᤓ
+ᤔ
+ᤕ
+ᤖ
+ᤗ
+ᤘ
+ᤙ
+ᤚ
+ᤛ
+ᤜ
+ᥐ
+ᥑ
+ᥒ
+ᥓ
+ᥔ
+ᥕ
+ᥖ
+ᥗ
+ᥘ
+ᥙ
+ᥚ
+ᥛ
+ᥜ
+ᥝ
+ᥞ
+ᥟ
+ᥠ
+ᥡ
+ᥢ
+ᥣ
+ᥤ
+ᥥ
+ᥦ
+ᥧ
+ᥨ
+ᥩ
+ᥪ
+ᥫ
+ᥬ
+ᥭ
+ᥰ
+ᥱ
+ᥲ
+ᥳ
+ᥴ
+ᦀ
+ᦁ
+ᦂ
+ᦃ
+ᦄ
+ᦅ
+ᦆ
+ᦇ
+ᦈ
+ᦉ
+ᦊ
+ᦋ
+ᦌ
+ᦍ
+ᦎ
+ᦏ
+ᦐ
+ᦑ
+ᦒ
+ᦓ
+ᦔ
+ᦕ
+ᦖ
+ᦗ
+ᦘ
+ᦙ
+ᦚ
+ᦛ
+ᦜ
+ᦝ
+ᦞ
+ᦟ
+ᦠ
+ᦡ
+ᦢ
+ᦣ
+ᦤ
+ᦥ
+ᦦ
+ᦧ
+ᦨ
+ᦩ
+ᧁ
+ᧂ
+ᧃ
+ᧄ
+ᧅ
+ᧆ
+ᧇ
+ᨀ
+ᨁ
+ᨂ
+ᨃ
+ᨄ
+ᨅ
+ᨆ
+ᨇ
+ᨈ
+ᨉ
+ᨊ
+ᨋ
+ᨌ
+ᨍ
+ᨎ
+ᨏ
+ᨐ
+ᨑ
+ᨒ
+ᨓ
+ᨔ
+ᨕ
+ᨖ
+ᬅ
+ᬆ
+ᬇ
+ᬈ
+ᬉ
+ᬊ
+ᬋ
+ᬌ
+ᬍ
+ᬎ
+ᬏ
+ᬐ
+ᬑ
+ᬒ
+ᬓ
+ᬔ
+ᬕ
+ᬖ
+ᬗ
+ᬘ
+ᬙ
+ᬚ
+ᬛ
+ᬜ
+ᬝ
+ᬞ
+ᬟ
+ᬠ
+ᬡ
+ᬢ
+ᬣ
+ᬤ
+ᬥ
+ᬦ
+ᬧ
+ᬨ
+ᬩ
+ᬪ
+ᬫ
+ᬬ
+ᬭ
+ᬮ
+ᬯ
+ᬰ
+ᬱ
+ᬲ
+ᬳ
+ᭅ
+ᭆ
+ᭇ
+ᭈ
+ᭉ
+ᭊ
+ᭋ
+ᮃ
+ᮄ
+ᮅ
+ᮆ
+ᮇ
+ᮈ
+ᮉ
+ᮊ
+ᮋ
+ᮌ
+ᮍ
+ᮎ
+ᮏ
+ᮐ
+ᮑ
+ᮒ
+ᮓ
+ᮔ
+ᮕ
+ᮖ
+ᮗ
+ᮘ
+ᮙ
+ᮚ
+ᮛ
+ᮜ
+ᮝ
+ᮞ
+ᮟ
+ᮠ
+ᮮ
+ᮯ
+ᰀ
+ᰁ
+ᰂ
+ᰃ
+ᰄ
+ᰅ
+ᰆ
+ᰇ
+ᰈ
+ᰉ
+ᰊ
+ᰋ
+ᰌ
+ᰍ
+ᰎ
+ᰏ
+ᰐ
+ᰑ
+ᰒ
+ᰓ
+ᰔ
+ᰕ
+ᰖ
+ᰗ
+ᰘ
+ᰙ
+ᰚ
+ᰛ
+ᰜ
+ᰝ
+ᰞ
+ᰟ
+ᰠ
+ᰡ
+ᰢ
+ᰣ
+ᱍ
+ᱎ
+ᱏ
+ᱚ
+ᱛ
+ᱜ
+ᱝ
+ᱞ
+ᱟ
+ᱠ
+ᱡ
+ᱢ
+ᱣ
+ᱤ
+ᱥ
+ᱦ
+ᱧ
+ᱨ
+ᱩ
+ᱪ
+ᱫ
+ᱬ
+ᱭ
+ᱮ
+ᱯ
+ᱰ
+ᱱ
+ᱲ
+ᱳ
+ᱴ
+ᱵ
+ᱶ
+ᱷ
+ᴀ
+ᴁ
+ᴂ
+ᴃ
+ᴄ
+ᴅ
+ᴆ
+ᴇ
+ᴈ
+ᴉ
+ᴊ
+ᴋ
+ᴌ
+ᴍ
+ᴎ
+ᴏ
+ᴐ
+ᴑ
+ᴒ
+ᴓ
+ᴔ
+ᴕ
+ᴖ
+ᴗ
+ᴘ
+ᴙ
+ᴚ
+ᴛ
+ᴜ
+ᴝ
+ᴞ
+ᴟ
+ᴠ
+ᴡ
+ᴢ
+ᴣ
+ᴤ
+ᴥ
+ᴦ
+ᴧ
+ᴨ
+ᴩ
+ᴪ
+ᴫ
+ᵢ
+ᵣ
+ᵤ
+ᵥ
+ᵦ
+ᵧ
+ᵨ
+ᵩ
+ᵪ
+ᵫ
+ᵬ
+ᵭ
+ᵮ
+ᵯ
+ᵰ
+ᵱ
+ᵲ
+ᵳ
+ᵴ
+ᵵ
+ᵶ
+ᵷ
+ᵹꝽ
+ᵺ
+ᵻ
+ᵼ
+ᵽⱣ
+ᵾ
+ᵿ
+ᶀ
+ᶁ
+ᶂ
+ᶃ
+ᶄ
+ᶅ
+ᶆ
+ᶇ
+ᶈ
+ᶉ
+ᶊ
+ᶋ
+ᶌ
+ᶍ
+ᶎ
+ᶏ
+ᶐ
+ᶑ
+ᶒ
+ᶓ
+ᶔ
+ᶕ
+ᶖ
+ᶗ
+ᶘ
+ᶙ
+ᶚ
+ḁḀ
+ḃḂ
+ḅḄ
+ḇḆ
+ḉḈ
+ḋḊ
+ḍḌ
+ḏḎ
+ḑḐ
+ḓḒ
+ḕḔ
+ḗḖ
+ḙḘ
+ḛḚ
+ḝḜ
+ḟḞ
+ḡḠ
+ḣḢ
+ḥḤ
+ḧḦ
+ḩḨ
+ḫḪ
+ḭḬ
+ḯḮ
+ḱḰ
+ḳḲ
+ḵḴ
+ḷḶ
+ḹḸ
+ḻḺ
+ḽḼ
+ḿḾ
+ṁṀ
+ṃṂ
+ṅṄ
+ṇṆ
+ṉṈ
+ṋṊ
+ṍṌ
+ṏṎ
+ṑṐ
+ṓṒ
+ṕṔ
+ṗṖ
+ṙṘ
+ṛṚ
+ṝṜ
+ṟṞ
+ṡṠ
+ṣṢ
+ṥṤ
+ṧṦ
+ṩṨ
+ṫṪ
+ṭṬ
+ṯṮ
+ṱṰ
+ṳṲ
+ṵṴ
+ṷṶ
+ṹṸ
+ṻṺ
+ṽṼ
+ṿṾ
+ẁẀ
+ẃẂ
+ẅẄ
+ẇẆ
+ẉẈ
+ẋẊ
+ẍẌ
+ẏẎ
+ẑẐ
+ẓẒ
+ẕẔ
+ẖ
+ẗ
+ẘ
+ẙ
+ẚ
+ẛṠ
+ẜ
+ẝ
+ẟ
+ạẠ
+ảẢ
+ấẤ
+ầẦ
+ẩẨ
+ẫẪ
+ậẬ
+ắẮ
+ằẰ
+ẳẲ
+ẵẴ
+ặẶ
+ẹẸ
+ẻẺ
+ẽẼ
+ếẾ
+ềỀ
+ểỂ
+ễỄ
+ệỆ
+ỉỈ
+ịỊ
+ọỌ
+ỏỎ
+ốỐ
+ồỒ
+ổỔ
+ỗỖ
+ộỘ
+ớỚ
+ờỜ
+ởỞ
+ỡỠ
+ợỢ
+ụỤ
+ủỦ
+ứỨ
+ừỪ
+ửỬ
+ữỮ
+ựỰ
+ỳỲ
+ỵỴ
+ỷỶ
+ỹỸ
+ỻỺ
+ỽỼ
+ỿỾ
+ἀἈ
+ἁἉ
+ἂἊ
+ἃἋ
+ἄἌ
+ἅἍ
+ἆἎ
+ἇἏ
+ἐἘ
+ἑἙ
+ἒἚ
+ἓἛ
+ἔἜ
+ἕἝ
+ἠἨ
+ἡἩ
+ἢἪ
+ἣἫ
+ἤἬ
+ἥἭ
+ἦἮ
+ἧἯ
+ἰἸ
+ἱἹ
+ἲἺ
+ἳἻ
+ἴἼ
+ἵἽ
+ἶἾ
+ἷἿ
+ὀὈ
+ὁὉ
+ὂὊ
+ὃὋ
+ὄὌ
+ὅὍ
+ὐ
+ὑὙ
+ὒ
+ὓὛ
+ὔ
+ὕὝ
+ὖ
+ὗὟ
+ὠὨ
+ὡὩ
+ὢὪ
+ὣὫ
+ὤὬ
+ὥὭ
+ὦὮ
+ὧὯ
+ὰᾺ
+άΆ
+ὲῈ
+έΈ
+ὴῊ
+ήΉ
+ὶῚ
+ίΊ
+ὸῸ
+όΌ
+ὺῪ
+ύΎ
+ὼῺ
+ώΏ
+ᾀᾈ
+ᾁᾉ
+ᾂᾊ
+ᾃᾋ
+ᾄᾌ
+ᾅᾍ
+ᾆᾎ
+ᾇᾏ
+ᾐᾘ
+ᾑᾙ
+ᾒᾚ
+ᾓᾛ
+ᾔᾜ
+ᾕᾝ
+ᾖᾞ
+ᾗᾟ
+ᾠᾨ
+ᾡᾩ
+ᾢᾪ
+ᾣᾫ
+ᾤᾬ
+ᾥᾭ
+ᾦᾮ
+ᾧᾯ
+ᾰᾸ
+ᾱᾹ
+ᾲ
+ᾳᾼ
+ᾴ
+ᾶ
+ᾷ
+ιΙ
+ῂ
+ῃῌ
+ῄ
+ῆ
+ῇ
+ῐῘ
+ῑῙ
+ῒ
+ΐ
+ῖ
+ῗ
+ῠῨ
+ῡῩ
+ῢ
+ΰ
+ῤ
+ῥῬ
+ῦ
+ῧ
+ῲ
+ῳῼ
+ῴ
+ῶ
+ῷ
+ↄↃ
+ⰰⰀ
+ⰱⰁ
+ⰲⰂ
+ⰳⰃ
+ⰴⰄ
+ⰵⰅ
+ⰶⰆ
+ⰷⰇ
+ⰸⰈ
+ⰹⰉ
+ⰺⰊ
+ⰻⰋ
+ⰼⰌ
+ⰽⰍ
+ⰾⰎ
+ⰿⰏ
+ⱀⰐ
+ⱁⰑ
+ⱂⰒ
+ⱃⰓ
+ⱄⰔ
+ⱅⰕ
+ⱆⰖ
+ⱇⰗ
+ⱈⰘ
+ⱉⰙ
+ⱊⰚ
+ⱋⰛ
+ⱌⰜ
+ⱍⰝ
+ⱎⰞ
+ⱏⰟ
+ⱐⰠ
+ⱑⰡ
+ⱒⰢ
+ⱓⰣ
+ⱔⰤ
+ⱕⰥ
+ⱖⰦ
+ⱗⰧ
+ⱘⰨ
+ⱙⰩ
+ⱚⰪ
+ⱛⰫ
+ⱜⰬ
+ⱝⰭ
+ⱞⰮ
+ⱡⱠ
+ⱥȺ
+ⱦȾ
+ⱨⱧ
+ⱪⱩ
+ⱬⱫ
+ⱱ
+ⱳⱲ
+ⱴ
+ⱶⱵ
+ⱷ
+ⱸ
+ⱹ
+ⱺ
+ⱻ
+ⱼ
+ⲁⲀ
+ⲃⲂ
+ⲅⲄ
+ⲇⲆ
+ⲉⲈ
+ⲋⲊ
+ⲍⲌ
+ⲏⲎ
+ⲑⲐ
+ⲓⲒ
+ⲕⲔ
+ⲗⲖ
+ⲙⲘ
+ⲛⲚ
+ⲝⲜ
+ⲟⲞ
+ⲡⲠ
+ⲣⲢ
+ⲥⲤ
+ⲧⲦ
+ⲩⲨ
+ⲫⲪ
+ⲭⲬ
+ⲯⲮ
+ⲱⲰ
+ⲳⲲ
+ⲵⲴ
+ⲷⲶ
+ⲹⲸ
+ⲻⲺ
+ⲽⲼ
+ⲿⲾ
+ⳁⳀ
+ⳃⳂ
+ⳅⳄ
+ⳇⳆ
+ⳉⳈ
+ⳋⳊ
+ⳍⳌ
+ⳏⳎ
+ⳑⳐ
+ⳓⳒ
+ⳕⳔ
+ⳗⳖ
+ⳙⳘ
+ⳛⳚ
+ⳝⳜ
+ⳟⳞ
+ⳡⳠ
+ⳣⳢ
+ⳤ
+ⴀႠ
+ⴁႡ
+ⴂႢ
+ⴃႣ
+ⴄႤ
+ⴅႥ
+ⴆႦ
+ⴇႧ
+ⴈႨ
+ⴉႩ
+ⴊႪ
+ⴋႫ
+ⴌႬ
+ⴍႭ
+ⴎႮ
+ⴏႯ
+ⴐႰ
+ⴑႱ
+ⴒႲ
+ⴓႳ
+ⴔႴ
+ⴕႵ
+ⴖႶ
+ⴗႷ
+ⴘႸ
+ⴙႹ
+ⴚႺ
+ⴛႻ
+ⴜႼ
+ⴝႽ
+ⴞႾ
+ⴟႿ
+ⴠჀ
+ⴡჁ
+ⴢჂ
+ⴣჃ
+ⴤჄ
+ⴥჅ
+ⴰ
+ⴱ
+ⴲ
+ⴳ
+ⴴ
+ⴵ
+ⴶ
+ⴷ
+ⴸ
+ⴹ
+ⴺ
+ⴻ
+ⴼ
+ⴽ
+ⴾ
+ⴿ
+ⵀ
+ⵁ
+ⵂ
+ⵃ
+ⵄ
+ⵅ
+ⵆ
+ⵇ
+ⵈ
+ⵉ
+ⵊ
+ⵋ
+ⵌ
+ⵍ
+ⵎ
+ⵏ
+ⵐ
+ⵑ
+ⵒ
+ⵓ
+ⵔ
+ⵕ
+ⵖ
+ⵗ
+ⵘ
+ⵙ
+ⵚ
+ⵛ
+ⵜ
+ⵝ
+ⵞ
+ⵟ
+ⵠ
+ⵡ
+ⵢ
+ⵣ
+ⵤ
+ⵥ
+ⶀ
+ⶁ
+ⶂ
+ⶃ
+ⶄ
+ⶅ
+ⶆ
+ⶇ
+ⶈ
+ⶉ
+ⶊ
+ⶋ
+ⶌ
+ⶍ
+ⶎ
+ⶏ
+ⶐ
+ⶑ
+ⶒ
+ⶓ
+ⶔ
+ⶕ
+ⶖ
+ⶠ
+ⶡ
+ⶢ
+ⶣ
+ⶤ
+ⶥ
+ⶦ
+ⶨ
+ⶩ
+ⶪ
+ⶫ
+ⶬ
+ⶭ
+ⶮ
+ⶰ
+ⶱ
+ⶲ
+ⶳ
+ⶴ
+ⶵ
+ⶶ
+ⶸ
+ⶹ
+ⶺ
+ⶻ
+ⶼ
+ⶽ
+ⶾ
+ⷀ
+ⷁ
+ⷂ
+ⷃ
+ⷄ
+ⷅ
+ⷆ
+ⷈ
+ⷉ
+ⷊ
+ⷋ
+ⷌ
+ⷍ
+ⷎ
+ⷐ
+ⷑ
+ⷒ
+ⷓ
+ⷔ
+ⷕ
+ⷖ
+ⷘ
+ⷙ
+ⷚ
+ⷛ
+ⷜ
+ⷝ
+ⷞ
+〆
+〼
+ぁ
+あ
+ぃ
+い
+ぅ
+う
+ぇ
+え
+ぉ
+お
+か
+が
+き
+ぎ
+く
+ぐ
+け
+げ
+こ
+ご
+さ
+ざ
+し
+じ
+す
+ず
+せ
+ぜ
+そ
+ぞ
+た
+だ
+ち
+ぢ
+っ
+つ
+づ
+て
+で
+と
+ど
+な
+に
+ぬ
+ね
+の
+は
+ば
+ぱ
+ひ
+び
+ぴ
+ふ
+ぶ
+ぷ
+へ
+べ
+ぺ
+ほ
+ぼ
+ぽ
+ま
+み
+む
+め
+も
+ゃ
+や
+ゅ
+ゆ
+ょ
+よ
+ら
+り
+る
+れ
+ろ
+ゎ
+わ
+ゐ
+ゑ
+を
+ん
+ゔ
+ゕ
+ゖ
+ゟ
+ァ
+ア
+ィ
+イ
+ゥ
+ウ
+ェ
+エ
+ォ
+オ
+カ
+ガ
+キ
+ギ
+ク
+グ
+ケ
+ゲ
+コ
+ゴ
+サ
+ザ
+シ
+ジ
+ス
+ズ
+セ
+ゼ
+ソ
+ゾ
+タ
+ダ
+チ
+ヂ
+ッ
+ツ
+ヅ
+テ
+デ
+ト
+ド
+ナ
+ニ
+ヌ
+ネ
+ノ
+ハ
+バ
+パ
+ヒ
+ビ
+ピ
+フ
+ブ
+プ
+ヘ
+ベ
+ペ
+ホ
+ボ
+ポ
+マ
+ミ
+ム
+メ
+モ
+ャ
+ヤ
+ュ
+ユ
+ョ
+ヨ
+ラ
+リ
+ル
+レ
+ロ
+ヮ
+ワ
+ヰ
+ヱ
+ヲ
+ン
+ヴ
+ヵ
+ヶ
+ヷ
+ヸ
+ヹ
+ヺ
+ヿ
+ㄅ
+ㄆ
+ㄇ
+ㄈ
+ㄉ
+ㄊ
+ㄋ
+ㄌ
+ㄍ
+ㄎ
+ㄏ
+ㄐ
+ㄑ
+ㄒ
+ㄓ
+ㄔ
+ㄕ
+ㄖ
+ㄗ
+ㄘ
+ㄙ
+ㄚ
+ㄛ
+ㄜ
+ㄝ
+ㄞ
+ㄟ
+ㄠ
+ㄡ
+ㄢ
+ㄣ
+ㄤ
+ㄥ
+ㄦ
+ㄧ
+ㄨ
+ㄩ
+ㄪ
+ㄫ
+ㄬ
+ㄭ
+ㄱ
+ㄲ
+ㄳ
+ㄴ
+ㄵ
+ㄶ
+ㄷ
+ㄸ
+ㄹ
+ㄺ
+ㄻ
+ㄼ
+ㄽ
+ㄾ
+ㄿ
+ㅀ
+ㅁ
+ㅂ
+ㅃ
+ㅄ
+ㅅ
+ㅆ
+ㅇ
+ㅈ
+ㅉ
+ㅊ
+ㅋ
+ㅌ
+ㅍ
+ㅎ
+ㅏ
+ㅐ
+ㅑ
+ㅒ
+ㅓ
+ㅔ
+ㅕ
+ㅖ
+ㅗ
+ㅘ
+ㅙ
+ㅚ
+ㅛ
+ㅜ
+ㅝ
+ㅞ
+ㅟ
+ㅠ
+ㅡ
+ㅢ
+ㅣ
+ㅤ
+ㅥ
+ㅦ
+ㅧ
+ㅨ
+ㅩ
+ㅪ
+ㅫ
+ㅬ
+ㅭ
+ㅮ
+ㅯ
+ㅰ
+ㅱ
+ㅲ
+ㅳ
+ㅴ
+ㅵ
+ㅶ
+ㅷ
+ㅸ
+ㅹ
+ㅺ
+ㅻ
+ㅼ
+ㅽ
+ㅾ
+ㅿ
+ㆀ
+ㆁ
+ㆂ
+ㆃ
+ㆄ
+ㆅ
+ㆆ
+ㆇ
+ㆈ
+ㆉ
+ㆊ
+ㆋ
+ㆌ
+ㆍ
+ㆎ
+ㆠ
+ㆡ
+ㆢ
+ㆣ
+ㆤ
+ㆥ
+ㆦ
+ㆧ
+ㆨ
+ㆩ
+ㆪ
+ㆫ
+ㆬ
+ㆭ
+ㆮ
+ㆯ
+ㆰ
+ㆱ
+ㆲ
+ㆳ
+ㆴ
+ㆵ
+ㆶ
+ㆷ
+ㇰ
+ㇱ
+ㇲ
+ㇳ
+ㇴ
+ㇵ
+ㇶ
+ㇷ
+ㇸ
+ㇹ
+ㇺ
+ㇻ
+ㇼ
+ㇽ
+ㇾ
+ㇿ
+ꀀ
+ꀁ
+ꀂ
+ꀃ
+ꀄ
+ꀅ
+ꀆ
+ꀇ
+ꀈ
+ꀉ
+ꀊ
+ꀋ
+ꀌ
+ꀍ
+ꀎ
+ꀏ
+ꀐ
+ꀑ
+ꀒ
+ꀓ
+ꀔ
+ꀖ
+ꀗ
+ꀘ
+ꀙ
+ꀚ
+ꀛ
+ꀜ
+ꀝ
+ꀞ
+ꀟ
+ꀠ
+ꀡ
+ꀢ
+ꀣ
+ꀤ
+ꀥ
+ꀦ
+ꀧ
+ꀨ
+ꀩ
+ꀪ
+ꀫ
+ꀬ
+ꀭ
+ꀮ
+ꀯ
+ꀰ
+ꀱ
+ꀲ
+ꀳ
+ꀴ
+ꀵ
+ꀶ
+ꀷ
+ꀸ
+ꀹ
+ꀺ
+ꀻ
+ꀼ
+ꀽ
+ꀾ
+ꀿ
+ꁀ
+ꁁ
+ꁂ
+ꁃ
+ꁄ
+ꁅ
+ꁆ
+ꁇ
+ꁈ
+ꁉ
+ꁊ
+ꁋ
+ꁌ
+ꁍ
+ꁎ
+ꁏ
+ꁐ
+ꁑ
+ꁒ
+ꁓ
+ꁔ
+ꁕ
+ꁖ
+ꁗ
+ꁘ
+ꁙ
+ꁚ
+ꁛ
+ꁜ
+ꁝ
+ꁞ
+ꁟ
+ꁠ
+ꁡ
+ꁢ
+ꁣ
+ꁤ
+ꁥ
+ꁦ
+ꁧ
+ꁨ
+ꁩ
+ꁪ
+ꁫ
+ꁬ
+ꁭ
+ꁮ
+ꁯ
+ꁰ
+ꁱ
+ꁲ
+ꁳ
+ꁴ
+ꁵ
+ꁶ
+ꁷ
+ꁸ
+ꁹ
+ꁺ
+ꁻ
+ꁼ
+ꁽ
+ꁾ
+ꁿ
+ꂀ
+ꂁ
+ꂂ
+ꂃ
+ꂄ
+ꂅ
+ꂆ
+ꂇ
+ꂈ
+ꂉ
+ꂊ
+ꂋ
+ꂌ
+ꂍ
+ꂎ
+ꂏ
+ꂐ
+ꂑ
+ꂒ
+ꂓ
+ꂔ
+ꂕ
+ꂖ
+ꂗ
+ꂘ
+ꂙ
+ꂚ
+ꂛ
+ꂜ
+ꂝ
+ꂞ
+ꂟ
+ꂠ
+ꂡ
+ꂢ
+ꂣ
+ꂤ
+ꂥ
+ꂦ
+ꂧ
+ꂨ
+ꂩ
+ꂪ
+ꂫ
+ꂬ
+ꂭ
+ꂮ
+ꂯ
+ꂰ
+ꂱ
+ꂲ
+ꂳ
+ꂴ
+ꂵ
+ꂶ
+ꂷ
+ꂸ
+ꂹ
+ꂺ
+ꂻ
+ꂼ
+ꂽ
+ꂾ
+ꂿ
+ꃀ
+ꃁ
+ꃂ
+ꃃ
+ꃄ
+ꃅ
+ꃆ
+ꃇ
+ꃈ
+ꃉ
+ꃊ
+ꃋ
+ꃌ
+ꃍ
+ꃎ
+ꃏ
+ꃐ
+ꃑ
+ꃒ
+ꃓ
+ꃔ
+ꃕ
+ꃖ
+ꃗ
+ꃘ
+ꃙ
+ꃚ
+ꃛ
+ꃜ
+ꃝ
+ꃞ
+ꃟ
+ꃠ
+ꃡ
+ꃢ
+ꃣ
+ꃤ
+ꃥ
+ꃦ
+ꃧ
+ꃨ
+ꃩ
+ꃪ
+ꃫ
+ꃬ
+ꃭ
+ꃮ
+ꃯ
+ꃰ
+ꃱ
+ꃲ
+ꃳ
+ꃴ
+ꃵ
+ꃶ
+ꃷ
+ꃸ
+ꃹ
+ꃺ
+ꃻ
+ꃼ
+ꃽ
+ꃾ
+ꃿ
+ꄀ
+ꄁ
+ꄂ
+ꄃ
+ꄄ
+ꄅ
+ꄆ
+ꄇ
+ꄈ
+ꄉ
+ꄊ
+ꄋ
+ꄌ
+ꄍ
+ꄎ
+ꄏ
+ꄐ
+ꄑ
+ꄒ
+ꄓ
+ꄔ
+ꄕ
+ꄖ
+ꄗ
+ꄘ
+ꄙ
+ꄚ
+ꄛ
+ꄜ
+ꄝ
+ꄞ
+ꄟ
+ꄠ
+ꄡ
+ꄢ
+ꄣ
+ꄤ
+ꄥ
+ꄦ
+ꄧ
+ꄨ
+ꄩ
+ꄪ
+ꄫ
+ꄬ
+ꄭ
+ꄮ
+ꄯ
+ꄰ
+ꄱ
+ꄲ
+ꄳ
+ꄴ
+ꄵ
+ꄶ
+ꄷ
+ꄸ
+ꄹ
+ꄺ
+ꄻ
+ꄼ
+ꄽ
+ꄾ
+ꄿ
+ꅀ
+ꅁ
+ꅂ
+ꅃ
+ꅄ
+ꅅ
+ꅆ
+ꅇ
+ꅈ
+ꅉ
+ꅊ
+ꅋ
+ꅌ
+ꅍ
+ꅎ
+ꅏ
+ꅐ
+ꅑ
+ꅒ
+ꅓ
+ꅔ
+ꅕ
+ꅖ
+ꅗ
+ꅘ
+ꅙ
+ꅚ
+ꅛ
+ꅜ
+ꅝ
+ꅞ
+ꅟ
+ꅠ
+ꅡ
+ꅢ
+ꅣ
+ꅤ
+ꅥ
+ꅦ
+ꅧ
+ꅨ
+ꅩ
+ꅪ
+ꅫ
+ꅬ
+ꅭ
+ꅮ
+ꅯ
+ꅰ
+ꅱ
+ꅲ
+ꅳ
+ꅴ
+ꅵ
+ꅶ
+ꅷ
+ꅸ
+ꅹ
+ꅺ
+ꅻ
+ꅼ
+ꅽ
+ꅾ
+ꅿ
+ꆀ
+ꆁ
+ꆂ
+ꆃ
+ꆄ
+ꆅ
+ꆆ
+ꆇ
+ꆈ
+ꆉ
+ꆊ
+ꆋ
+ꆌ
+ꆍ
+ꆎ
+ꆏ
+ꆐ
+ꆑ
+ꆒ
+ꆓ
+ꆔ
+ꆕ
+ꆖ
+ꆗ
+ꆘ
+ꆙ
+ꆚ
+ꆛ
+ꆜ
+ꆝ
+ꆞ
+ꆟ
+ꆠ
+ꆡ
+ꆢ
+ꆣ
+ꆤ
+ꆥ
+ꆦ
+ꆧ
+ꆨ
+ꆩ
+ꆪ
+ꆫ
+ꆬ
+ꆭ
+ꆮ
+ꆯ
+ꆰ
+ꆱ
+ꆲ
+ꆳ
+ꆴ
+ꆵ
+ꆶ
+ꆷ
+ꆸ
+ꆹ
+ꆺ
+ꆻ
+ꆼ
+ꆽ
+ꆾ
+ꆿ
+ꇀ
+ꇁ
+ꇂ
+ꇃ
+ꇄ
+ꇅ
+ꇆ
+ꇇ
+ꇈ
+ꇉ
+ꇊ
+ꇋ
+ꇌ
+ꇍ
+ꇎ
+ꇏ
+ꇐ
+ꇑ
+ꇒ
+ꇓ
+ꇔ
+ꇕ
+ꇖ
+ꇗ
+ꇘ
+ꇙ
+ꇚ
+ꇛ
+ꇜ
+ꇝ
+ꇞ
+ꇟ
+ꇠ
+ꇡ
+ꇢ
+ꇣ
+ꇤ
+ꇥ
+ꇦ
+ꇧ
+ꇨ
+ꇩ
+ꇪ
+ꇫ
+ꇬ
+ꇭ
+ꇮ
+ꇯ
+ꇰ
+ꇱ
+ꇲ
+ꇳ
+ꇴ
+ꇵ
+ꇶ
+ꇷ
+ꇸ
+ꇹ
+ꇺ
+ꇻ
+ꇼ
+ꇽ
+ꇾ
+ꇿ
+ꈀ
+ꈁ
+ꈂ
+ꈃ
+ꈄ
+ꈅ
+ꈆ
+ꈇ
+ꈈ
+ꈉ
+ꈊ
+ꈋ
+ꈌ
+ꈍ
+ꈎ
+ꈏ
+ꈐ
+ꈑ
+ꈒ
+ꈓ
+ꈔ
+ꈕ
+ꈖ
+ꈗ
+ꈘ
+ꈙ
+ꈚ
+ꈛ
+ꈜ
+ꈝ
+ꈞ
+ꈟ
+ꈠ
+ꈡ
+ꈢ
+ꈣ
+ꈤ
+ꈥ
+ꈦ
+ꈧ
+ꈨ
+ꈩ
+ꈪ
+ꈫ
+ꈬ
+ꈭ
+ꈮ
+ꈯ
+ꈰ
+ꈱ
+ꈲ
+ꈳ
+ꈴ
+ꈵ
+ꈶ
+ꈷ
+ꈸ
+ꈹ
+ꈺ
+ꈻ
+ꈼ
+ꈽ
+ꈾ
+ꈿ
+ꉀ
+ꉁ
+ꉂ
+ꉃ
+ꉄ
+ꉅ
+ꉆ
+ꉇ
+ꉈ
+ꉉ
+ꉊ
+ꉋ
+ꉌ
+ꉍ
+ꉎ
+ꉏ
+ꉐ
+ꉑ
+ꉒ
+ꉓ
+ꉔ
+ꉕ
+ꉖ
+ꉗ
+ꉘ
+ꉙ
+ꉚ
+ꉛ
+ꉜ
+ꉝ
+ꉞ
+ꉟ
+ꉠ
+ꉡ
+ꉢ
+ꉣ
+ꉤ
+ꉥ
+ꉦ
+ꉧ
+ꉨ
+ꉩ
+ꉪ
+ꉫ
+ꉬ
+ꉭ
+ꉮ
+ꉯ
+ꉰ
+ꉱ
+ꉲ
+ꉳ
+ꉴ
+ꉵ
+ꉶ
+ꉷ
+ꉸ
+ꉹ
+ꉺ
+ꉻ
+ꉼ
+ꉽ
+ꉾ
+ꉿ
+ꊀ
+ꊁ
+ꊂ
+ꊃ
+ꊄ
+ꊅ
+ꊆ
+ꊇ
+ꊈ
+ꊉ
+ꊊ
+ꊋ
+ꊌ
+ꊍ
+ꊎ
+ꊏ
+ꊐ
+ꊑ
+ꊒ
+ꊓ
+ꊔ
+ꊕ
+ꊖ
+ꊗ
+ꊘ
+ꊙ
+ꊚ
+ꊛ
+ꊜ
+ꊝ
+ꊞ
+ꊟ
+ꊠ
+ꊡ
+ꊢ
+ꊣ
+ꊤ
+ꊥ
+ꊦ
+ꊧ
+ꊨ
+ꊩ
+ꊪ
+ꊫ
+ꊬ
+ꊭ
+ꊮ
+ꊯ
+ꊰ
+ꊱ
+ꊲ
+ꊳ
+ꊴ
+ꊵ
+ꊶ
+ꊷ
+ꊸ
+ꊹ
+ꊺ
+ꊻ
+ꊼ
+ꊽ
+ꊾ
+ꊿ
+ꋀ
+ꋁ
+ꋂ
+ꋃ
+ꋄ
+ꋅ
+ꋆ
+ꋇ
+ꋈ
+ꋉ
+ꋊ
+ꋋ
+ꋌ
+ꋍ
+ꋎ
+ꋏ
+ꋐ
+ꋑ
+ꋒ
+ꋓ
+ꋔ
+ꋕ
+ꋖ
+ꋗ
+ꋘ
+ꋙ
+ꋚ
+ꋛ
+ꋜ
+ꋝ
+ꋞ
+ꋟ
+ꋠ
+ꋡ
+ꋢ
+ꋣ
+ꋤ
+ꋥ
+ꋦ
+ꋧ
+ꋨ
+ꋩ
+ꋪ
+ꋫ
+ꋬ
+ꋭ
+ꋮ
+ꋯ
+ꋰ
+ꋱ
+ꋲ
+ꋳ
+ꋴ
+ꋵ
+ꋶ
+ꋷ
+ꋸ
+ꋹ
+ꋺ
+ꋻ
+ꋼ
+ꋽ
+ꋾ
+ꋿ
+ꌀ
+ꌁ
+ꌂ
+ꌃ
+ꌄ
+ꌅ
+ꌆ
+ꌇ
+ꌈ
+ꌉ
+ꌊ
+ꌋ
+ꌌ
+ꌍ
+ꌎ
+ꌏ
+ꌐ
+ꌑ
+ꌒ
+ꌓ
+ꌔ
+ꌕ
+ꌖ
+ꌗ
+ꌘ
+ꌙ
+ꌚ
+ꌛ
+ꌜ
+ꌝ
+ꌞ
+ꌟ
+ꌠ
+ꌡ
+ꌢ
+ꌣ
+ꌤ
+ꌥ
+ꌦ
+ꌧ
+ꌨ
+ꌩ
+ꌪ
+ꌫ
+ꌬ
+ꌭ
+ꌮ
+ꌯ
+ꌰ
+ꌱ
+ꌲ
+ꌳ
+ꌴ
+ꌵ
+ꌶ
+ꌷ
+ꌸ
+ꌹ
+ꌺ
+ꌻ
+ꌼ
+ꌽ
+ꌾ
+ꌿ
+ꍀ
+ꍁ
+ꍂ
+ꍃ
+ꍄ
+ꍅ
+ꍆ
+ꍇ
+ꍈ
+ꍉ
+ꍊ
+ꍋ
+ꍌ
+ꍍ
+ꍎ
+ꍏ
+ꍐ
+ꍑ
+ꍒ
+ꍓ
+ꍔ
+ꍕ
+ꍖ
+ꍗ
+ꍘ
+ꍙ
+ꍚ
+ꍛ
+ꍜ
+ꍝ
+ꍞ
+ꍟ
+ꍠ
+ꍡ
+ꍢ
+ꍣ
+ꍤ
+ꍥ
+ꍦ
+ꍧ
+ꍨ
+ꍩ
+ꍪ
+ꍫ
+ꍬ
+ꍭ
+ꍮ
+ꍯ
+ꍰ
+ꍱ
+ꍲ
+ꍳ
+ꍴ
+ꍵ
+ꍶ
+ꍷ
+ꍸ
+ꍹ
+ꍺ
+ꍻ
+ꍼ
+ꍽ
+ꍾ
+ꍿ
+ꎀ
+ꎁ
+ꎂ
+ꎃ
+ꎄ
+ꎅ
+ꎆ
+ꎇ
+ꎈ
+ꎉ
+ꎊ
+ꎋ
+ꎌ
+ꎍ
+ꎎ
+ꎏ
+ꎐ
+ꎑ
+ꎒ
+ꎓ
+ꎔ
+ꎕ
+ꎖ
+ꎗ
+ꎘ
+ꎙ
+ꎚ
+ꎛ
+ꎜ
+ꎝ
+ꎞ
+ꎟ
+ꎠ
+ꎡ
+ꎢ
+ꎣ
+ꎤ
+ꎥ
+ꎦ
+ꎧ
+ꎨ
+ꎩ
+ꎪ
+ꎫ
+ꎬ
+ꎭ
+ꎮ
+ꎯ
+ꎰ
+ꎱ
+ꎲ
+ꎳ
+ꎴ
+ꎵ
+ꎶ
+ꎷ
+ꎸ
+ꎹ
+ꎺ
+ꎻ
+ꎼ
+ꎽ
+ꎾ
+ꎿ
+ꏀ
+ꏁ
+ꏂ
+ꏃ
+ꏄ
+ꏅ
+ꏆ
+ꏇ
+ꏈ
+ꏉ
+ꏊ
+ꏋ
+ꏌ
+ꏍ
+ꏎ
+ꏏ
+ꏐ
+ꏑ
+ꏒ
+ꏓ
+ꏔ
+ꏕ
+ꏖ
+ꏗ
+ꏘ
+ꏙ
+ꏚ
+ꏛ
+ꏜ
+ꏝ
+ꏞ
+ꏟ
+ꏠ
+ꏡ
+ꏢ
+ꏣ
+ꏤ
+ꏥ
+ꏦ
+ꏧ
+ꏨ
+ꏩ
+ꏪ
+ꏫ
+ꏬ
+ꏭ
+ꏮ
+ꏯ
+ꏰ
+ꏱ
+ꏲ
+ꏳ
+ꏴ
+ꏵ
+ꏶ
+ꏷ
+ꏸ
+ꏹ
+ꏺ
+ꏻ
+ꏼ
+ꏽ
+ꏾ
+ꏿ
+ꐀ
+ꐁ
+ꐂ
+ꐃ
+ꐄ
+ꐅ
+ꐆ
+ꐇ
+ꐈ
+ꐉ
+ꐊ
+ꐋ
+ꐌ
+ꐍ
+ꐎ
+ꐏ
+ꐐ
+ꐑ
+ꐒ
+ꐓ
+ꐔ
+ꐕ
+ꐖ
+ꐗ
+ꐘ
+ꐙ
+ꐚ
+ꐛ
+ꐜ
+ꐝ
+ꐞ
+ꐟ
+ꐠ
+ꐡ
+ꐢ
+ꐣ
+ꐤ
+ꐥ
+ꐦ
+ꐧ
+ꐨ
+ꐩ
+ꐪ
+ꐫ
+ꐬ
+ꐭ
+ꐮ
+ꐯ
+ꐰ
+ꐱ
+ꐲ
+ꐳ
+ꐴ
+ꐵ
+ꐶ
+ꐷ
+ꐸ
+ꐹ
+ꐺ
+ꐻ
+ꐼ
+ꐽ
+ꐾ
+ꐿ
+ꑀ
+ꑁ
+ꑂ
+ꑃ
+ꑄ
+ꑅ
+ꑆ
+ꑇ
+ꑈ
+ꑉ
+ꑊ
+ꑋ
+ꑌ
+ꑍ
+ꑎ
+ꑏ
+ꑐ
+ꑑ
+ꑒ
+ꑓ
+ꑔ
+ꑕ
+ꑖ
+ꑗ
+ꑘ
+ꑙ
+ꑚ
+ꑛ
+ꑜ
+ꑝ
+ꑞ
+ꑟ
+ꑠ
+ꑡ
+ꑢ
+ꑣ
+ꑤ
+ꑥ
+ꑦ
+ꑧ
+ꑨ
+ꑩ
+ꑪ
+ꑫ
+ꑬ
+ꑭ
+ꑮ
+ꑯ
+ꑰ
+ꑱ
+ꑲ
+ꑳ
+ꑴ
+ꑵ
+ꑶ
+ꑷ
+ꑸ
+ꑹ
+ꑺ
+ꑻ
+ꑼ
+ꑽ
+ꑾ
+ꑿ
+ꒀ
+ꒁ
+ꒂ
+ꒃ
+ꒄ
+ꒅ
+ꒆ
+ꒇ
+ꒈ
+ꒉ
+ꒊ
+ꒋ
+ꒌ
+ꔀ
+ꔁ
+ꔂ
+ꔃ
+ꔄ
+ꔅ
+ꔆ
+ꔇ
+ꔈ
+ꔉ
+ꔊ
+ꔋ
+ꔌ
+ꔍ
+ꔎ
+ꔏ
+ꔐ
+ꔑ
+ꔒ
+ꔓ
+ꔔ
+ꔕ
+ꔖ
+ꔗ
+ꔘ
+ꔙ
+ꔚ
+ꔛ
+ꔜ
+ꔝ
+ꔞ
+ꔟ
+ꔠ
+ꔡ
+ꔢ
+ꔣ
+ꔤ
+ꔥ
+ꔦ
+ꔧ
+ꔨ
+ꔩ
+ꔪ
+ꔫ
+ꔬ
+ꔭ
+ꔮ
+ꔯ
+ꔰ
+ꔱ
+ꔲ
+ꔳ
+ꔴ
+ꔵ
+ꔶ
+ꔷ
+ꔸ
+ꔹ
+ꔺ
+ꔻ
+ꔼ
+ꔽ
+ꔾ
+ꔿ
+ꕀ
+ꕁ
+ꕂ
+ꕃ
+ꕄ
+ꕅ
+ꕆ
+ꕇ
+ꕈ
+ꕉ
+ꕊ
+ꕋ
+ꕌ
+ꕍ
+ꕎ
+ꕏ
+ꕐ
+ꕑ
+ꕒ
+ꕓ
+ꕔ
+ꕕ
+ꕖ
+ꕗ
+ꕘ
+ꕙ
+ꕚ
+ꕛ
+ꕜ
+ꕝ
+ꕞ
+ꕟ
+ꕠ
+ꕡ
+ꕢ
+ꕣ
+ꕤ
+ꕥ
+ꕦ
+ꕧ
+ꕨ
+ꕩ
+ꕪ
+ꕫ
+ꕬ
+ꕭ
+ꕮ
+ꕯ
+ꕰ
+ꕱ
+ꕲ
+ꕳ
+ꕴ
+ꕵ
+ꕶ
+ꕷ
+ꕸ
+ꕹ
+ꕺ
+ꕻ
+ꕼ
+ꕽ
+ꕾ
+ꕿ
+ꖀ
+ꖁ
+ꖂ
+ꖃ
+ꖄ
+ꖅ
+ꖆ
+ꖇ
+ꖈ
+ꖉ
+ꖊ
+ꖋ
+ꖌ
+ꖍ
+ꖎ
+ꖏ
+ꖐ
+ꖑ
+ꖒ
+ꖓ
+ꖔ
+ꖕ
+ꖖ
+ꖗ
+ꖘ
+ꖙ
+ꖚ
+ꖛ
+ꖜ
+ꖝ
+ꖞ
+ꖟ
+ꖠ
+ꖡ
+ꖢ
+ꖣ
+ꖤ
+ꖥ
+ꖦ
+ꖧ
+ꖨ
+ꖩ
+ꖪ
+ꖫ
+ꖬ
+ꖭ
+ꖮ
+ꖯ
+ꖰ
+ꖱ
+ꖲ
+ꖳ
+ꖴ
+ꖵ
+ꖶ
+ꖷ
+ꖸ
+ꖹ
+ꖺ
+ꖻ
+ꖼ
+ꖽ
+ꖾ
+ꖿ
+ꗀ
+ꗁ
+ꗂ
+ꗃ
+ꗄ
+ꗅ
+ꗆ
+ꗇ
+ꗈ
+ꗉ
+ꗊ
+ꗋ
+ꗌ
+ꗍ
+ꗎ
+ꗏ
+ꗐ
+ꗑ
+ꗒ
+ꗓ
+ꗔ
+ꗕ
+ꗖ
+ꗗ
+ꗘ
+ꗙ
+ꗚ
+ꗛ
+ꗜ
+ꗝ
+ꗞ
+ꗟ
+ꗠ
+ꗡ
+ꗢ
+ꗣ
+ꗤ
+ꗥ
+ꗦ
+ꗧ
+ꗨ
+ꗩ
+ꗪ
+ꗫ
+ꗬ
+ꗭ
+ꗮ
+ꗯ
+ꗰ
+ꗱ
+ꗲ
+ꗳ
+ꗴ
+ꗵ
+ꗶ
+ꗷ
+ꗸ
+ꗹ
+ꗺ
+ꗻ
+ꗼ
+ꗽ
+ꗾ
+ꗿ
+ꘀ
+ꘁ
+ꘂ
+ꘃ
+ꘄ
+ꘅ
+ꘆ
+ꘇ
+ꘈ
+ꘉ
+ꘊ
+ꘋ
+ꘐ
+ꘑ
+ꘒ
+ꘓ
+ꘔ
+ꘕ
+ꘖ
+ꘗ
+ꘘ
+ꘙ
+ꘚ
+ꘛ
+ꘜ
+ꘝ
+ꘞ
+ꘟ
+ꘪ
+ꘫ
+ꙁꙀ
+ꙃꙂ
+ꙅꙄ
+ꙇꙆ
+ꙉꙈ
+ꙋꙊ
+ꙍꙌ
+ꙏꙎ
+ꙑꙐ
+ꙓꙒ
+ꙕꙔ
+ꙗꙖ
+ꙙꙘ
+ꙛꙚ
+ꙝꙜ
+ꙟꙞ
+ꙣꙢ
+ꙥꙤ
+ꙧꙦ
+ꙩꙨ
+ꙫꙪ
+ꙭꙬ
+ꙮ
+ꚁꚀ
+ꚃꚂ
+ꚅꚄ
+ꚇꚆ
+ꚉꚈ
+ꚋꚊ
+ꚍꚌ
+ꚏꚎ
+ꚑꚐ
+ꚓꚒ
+ꚕꚔ
+ꚗꚖ
+ꜣꜢ
+ꜥꜤ
+ꜧꜦ
+ꜩꜨ
+ꜫꜪ
+ꜭꜬ
+ꜯꜮ
+ꜰ
+ꜱ
+ꜳꜲ
+ꜵꜴ
+ꜷꜶ
+ꜹꜸ
+ꜻꜺ
+ꜽꜼ
+ꜿꜾ
+ꝁꝀ
+ꝃꝂ
+ꝅꝄ
+ꝇꝆ
+ꝉꝈ
+ꝋꝊ
+ꝍꝌ
+ꝏꝎ
+ꝑꝐ
+ꝓꝒ
+ꝕꝔ
+ꝗꝖ
+ꝙꝘ
+ꝛꝚ
+ꝝꝜ
+ꝟꝞ
+ꝡꝠ
+ꝣꝢ
+ꝥꝤ
+ꝧꝦ
+ꝩꝨ
+ꝫꝪ
+ꝭꝬ
+ꝯꝮ
+ꝱ
+ꝲ
+ꝳ
+ꝴ
+ꝵ
+ꝶ
+ꝷ
+ꝸ
+ꝺꝹ
+ꝼꝻ
+ꝿꝾ
+ꞁꞀ
+ꞃꞂ
+ꞅꞄ
+ꞇꞆ
+ꞌꞋ
+ꟻ
+ꟼ
+ꟽ
+ꟾ
+ꟿ
+ꠀ
+ꠁ
+ꠃ
+ꠄ
+ꠅ
+ꠇ
+ꠈ
+ꠉ
+ꠊ
+ꠌ
+ꠍ
+ꠎ
+ꠏ
+ꠐ
+ꠑ
+ꠒ
+ꠓ
+ꠔ
+ꠕ
+ꠖ
+ꠗ
+ꠘ
+ꠙ
+ꠚ
+ꠛ
+ꠜ
+ꠝ
+ꠞ
+ꠟ
+ꠠ
+ꠡ
+ꠢ
+ꡀ
+ꡁ
+ꡂ
+ꡃ
+ꡄ
+ꡅ
+ꡆ
+ꡇ
+ꡈ
+ꡉ
+ꡊ
+ꡋ
+ꡌ
+ꡍ
+ꡎ
+ꡏ
+ꡐ
+ꡑ
+ꡒ
+ꡓ
+ꡔ
+ꡕ
+ꡖ
+ꡗ
+ꡘ
+ꡙ
+ꡚ
+ꡛ
+ꡜ
+ꡝ
+ꡞ
+ꡟ
+ꡠ
+ꡡ
+ꡢ
+ꡣ
+ꡤ
+ꡥ
+ꡦ
+ꡧ
+ꡨ
+ꡩ
+ꡪ
+ꡫ
+ꡬ
+ꡭ
+ꡮ
+ꡯ
+ꡰ
+ꡱ
+ꡲ
+ꡳ
+ꢂ
+ꢃ
+ꢄ
+ꢅ
+ꢆ
+ꢇ
+ꢈ
+ꢉ
+ꢊ
+ꢋ
+ꢌ
+ꢍ
+ꢎ
+ꢏ
+ꢐ
+ꢑ
+ꢒ
+ꢓ
+ꢔ
+ꢕ
+ꢖ
+ꢗ
+ꢘ
+ꢙ
+ꢚ
+ꢛ
+ꢜ
+ꢝ
+ꢞ
+ꢟ
+ꢠ
+ꢡ
+ꢢ
+ꢣ
+ꢤ
+ꢥ
+ꢦ
+ꢧ
+ꢨ
+ꢩ
+ꢪ
+ꢫ
+ꢬ
+ꢭ
+ꢮ
+ꢯ
+ꢰ
+ꢱ
+ꢲ
+ꢳ
+ꤊ
+ꤋ
+ꤌ
+ꤍ
+ꤎ
+ꤏ
+ꤐ
+ꤑ
+ꤒ
+ꤓ
+ꤔ
+ꤕ
+ꤖ
+ꤗ
+ꤘ
+ꤙ
+ꤚ
+ꤛ
+ꤜ
+ꤝ
+ꤞ
+ꤟ
+ꤠ
+ꤡ
+ꤢ
+ꤣ
+ꤤ
+ꤥ
+ꤰ
+ꤱ
+ꤲ
+ꤳ
+ꤴ
+ꤵ
+ꤶ
+ꤷ
+ꤸ
+ꤹ
+ꤺ
+ꤻ
+ꤼ
+ꤽ
+ꤾ
+ꤿ
+ꥀ
+ꥁ
+ꥂ
+ꥃ
+ꥄ
+ꥅ
+ꥆ
+ꨀ
+ꨁ
+ꨂ
+ꨃ
+ꨄ
+ꨅ
+ꨆ
+ꨇ
+ꨈ
+ꨉ
+ꨊ
+ꨋ
+ꨌ
+ꨍ
+ꨎ
+ꨏ
+ꨐ
+ꨑ
+ꨒ
+ꨓ
+ꨔ
+ꨕ
+ꨖ
+ꨗ
+ꨘ
+ꨙ
+ꨚ
+ꨛ
+ꨜ
+ꨝ
+ꨞ
+ꨟ
+ꨠ
+ꨡ
+ꨢ
+ꨣ
+ꨤ
+ꨥ
+ꨦ
+ꨧ
+ꨨ
+ꩀ
+ꩁ
+ꩂ
+ꩄ
+ꩅ
+ꩆ
+ꩇ
+ꩈ
+ꩉ
+ꩊ
+ꩋ
+豈
+更
+車
+賈
+滑
+串
+句
+龜
+龜
+契
+金
+喇
+奈
+懶
+癩
+羅
+蘿
+螺
+裸
+邏
+樂
+洛
+烙
+珞
+落
+酪
+駱
+亂
+卵
+欄
+爛
+蘭
+鸞
+嵐
+濫
+藍
+襤
+拉
+臘
+蠟
+廊
+朗
+浪
+狼
+郎
+來
+冷
+勞
+擄
+櫓
+爐
+盧
+老
+蘆
+虜
+路
+露
+魯
+鷺
+碌
+祿
+綠
+菉
+錄
+鹿
+論
+壟
+弄
+籠
+聾
+牢
+磊
+賂
+雷
+壘
+屢
+樓
+淚
+漏
+累
+縷
+陋
+勒
+肋
+凜
+凌
+稜
+綾
+菱
+陵
+讀
+拏
+樂
+諾
+丹
+寧
+怒
+率
+異
+北
+磻
+便
+復
+不
+泌
+數
+索
+參
+塞
+省
+葉
+說
+殺
+辰
+沈
+拾
+若
+掠
+略
+亮
+兩
+凉
+梁
+糧
+良
+諒
+量
+勵
+呂
+女
+廬
+旅
+濾
+礪
+閭
+驪
+麗
+黎
+力
+曆
+歷
+轢
+年
+憐
+戀
+撚
+漣
+煉
+璉
+秊
+練
+聯
+輦
+蓮
+連
+鍊
+列
+劣
+咽
+烈
+裂
+說
+廉
+念
+捻
+殮
+簾
+獵
+令
+囹
+寧
+嶺
+怜
+玲
+瑩
+羚
+聆
+鈴
+零
+靈
+領
+例
+禮
+醴
+隸
+惡
+了
+僚
+寮
+尿
+料
+樂
+燎
+療
+蓼
+遼
+龍
+暈
+阮
+劉
+杻
+柳
+流
+溜
+琉
+留
+硫
+紐
+類
+六
+戮
+陸
+倫
+崙
+淪
+輪
+律
+慄
+栗
+率
+隆
+利
+吏
+履
+易
+李
+梨
+泥
+理
+痢
+罹
+裏
+裡
+里
+離
+匿
+溺
+吝
+燐
+璘
+藺
+隣
+鱗
+麟
+林
+淋
+臨
+立
+笠
+粒
+狀
+炙
+識
+什
+茶
+刺
+切
+度
+拓
+糖
+宅
+洞
+暴
+輻
+行
+降
+見
+廓
+兀
+嗀
+﨎
+﨏
+塚
+﨑
+晴
+﨓
+﨔
+凞
+猪
+益
+礼
+神
+祥
+福
+靖
+精
+羽
+﨟
+蘒
+﨡
+諸
+﨣
+﨤
+逸
+都
+﨧
+﨨
+﨩
+飯
+飼
+館
+鶴
+侮
+僧
+免
+勉
+勤
+卑
+喝
+嘆
+器
+塀
+墨
+層
+屮
+悔
+慨
+憎
+懲
+敏
+既
+暑
+梅
+海
+渚
+漢
+煮
+爫
+琢
+碑
+社
+祉
+祈
+祐
+祖
+祝
+禍
+禎
+穀
+突
+節
+練
+縉
+繁
+署
+者
+臭
+艹
+艹
+著
+褐
+視
+謁
+謹
+賓
+贈
+辶
+逸
+難
+響
+頻
+並
+况
+全
+侀
+充
+冀
+勇
+勺
+喝
+啕
+喙
+嗢
+塚
+墳
+奄
+奔
+婢
+嬨
+廒
+廙
+彩
+徭
+惘
+慎
+愈
+憎
+慠
+懲
+戴
+揄
+搜
+摒
+敖
+晴
+朗
+望
+杖
+歹
+殺
+流
+滛
+滋
+漢
+瀞
+煮
+瞧
+爵
+犯
+猪
+瑱
+甆
+画
+瘝
+瘟
+益
+盛
+直
+睊
+着
+磌
+窱
+節
+类
+絛
+練
+缾
+者
+荒
+華
+蝹
+襁
+覆
+視
+調
+諸
+請
+謁
+諾
+諭
+謹
+變
+贈
+輸
+遲
+醙
+鉶
+陼
+難
+靖
+韛
+響
+頋
+頻
+鬒
+龜
+𢡊
+𢡄
+𣏕
+㮝
+䀘
+䀹
+𥉉
+𥳐
+𧻓
+齃
+龎
+ﭐ
+ﭑ
+ﭒ
+ﭓ
+ﭔ
+ﭕ
+ﭖ
+ﭗ
+ﭘ
+ﭙ
+ﭚ
+ﭛ
+ﭜ
+ﭝ
+ﭞ
+ﭟ
+ﭠ
+ﭡ
+ﭢ
+ﭣ
+ﭤ
+ﭥ
+ﭦ
+ﭧ
+ﭨ
+ﭩ
+ﭪ
+ﭫ
+ﭬ
+ﭭ
+ﭮ
+ﭯ
+ﭰ
+ﭱ
+ﭲ
+ﭳ
+ﭴ
+ﭵ
+ﭶ
+ﭷ
+ﭸ
+ﭹ
+ﭺ
+ﭻ
+ﭼ
+ﭽ
+ﭾ
+ﭿ
+ﮀ
+ﮁ
+ﮂ
+ﮃ
+ﮄ
+ﮅ
+ﮆ
+ﮇ
+ﮈ
+ﮉ
+ﮊ
+ﮋ
+ﮌ
+ﮍ
+ﮎ
+ﮏ
+ﮐ
+ﮑ
+ﮒ
+ﮓ
+ﮔ
+ﮕ
+ﮖ
+ﮗ
+ﮘ
+ﮙ
+ﮚ
+ﮛ
+ﮜ
+ﮝ
+ﮞ
+ﮟ
+ﮠ
+ﮡ
+ﮢ
+ﮣ
+ﮤ
+ﮥ
+ﮦ
+ﮧ
+ﮨ
+ﮩ
+ﮪ
+ﮫ
+ﮬ
+ﮭ
+ﮮ
+ﮯ
+ﮰ
+ﮱ
+ﯓ
+ﯔ
+ﯕ
+ﯖ
+ﯗ
+ﯘ
+ﯙ
+ﯚ
+ﯛ
+ﯜ
+ﯝ
+ﯞ
+ﯟ
+ﯠ
+ﯡ
+ﯢ
+ﯣ
+ﯤ
+ﯥ
+ﯦ
+ﯧ
+ﯨ
+ﯩ
+ﯪ
+ﯫ
+ﯬ
+ﯭ
+ﯮ
+ﯯ
+ﯰ
+ﯱ
+ﯲ
+ﯳ
+ﯴ
+ﯵ
+ﯶ
+ﯷ
+ﯸ
+ﯹ
+ﯺ
+ﯻ
+ﯼ
+ﯽ
+ﯾ
+ﯿ
+ﰀ
+ﰁ
+ﰂ
+ﰃ
+ﰄ
+ﰅ
+ﰆ
+ﰇ
+ﰈ
+ﰉ
+ﰊ
+ﰋ
+ﰌ
+ﰍ
+ﰎ
+ﰏ
+ﰐ
+ﰑ
+ﰒ
+ﰓ
+ﰔ
+ﰕ
+ﰖ
+ﰗ
+ﰘ
+ﰙ
+ﰚ
+ﰛ
+ﰜ
+ﰝ
+ﰞ
+ﰟ
+ﰠ
+ﰡ
+ﰢ
+ﰣ
+ﰤ
+ﰥ
+ﰦ
+ﰧ
+ﰨ
+ﰩ
+ﰪ
+ﰫ
+ﰬ
+ﰭ
+ﰮ
+ﰯ
+ﰰ
+ﰱ
+ﰲ
+ﰳ
+ﰴ
+ﰵ
+ﰶ
+ﰷ
+ﰸ
+ﰹ
+ﰺ
+ﰻ
+ﰼ
+ﰽ
+ﰾ
+ﰿ
+ﱀ
+ﱁ
+ﱂ
+ﱃ
+ﱄ
+ﱅ
+ﱆ
+ﱇ
+ﱈ
+ﱉ
+ﱊ
+ﱋ
+ﱌ
+ﱍ
+ﱎ
+ﱏ
+ﱐ
+ﱑ
+ﱒ
+ﱓ
+ﱔ
+ﱕ
+ﱖ
+ﱗ
+ﱘ
+ﱙ
+ﱚ
+ﱛ
+ﱜ
+ﱝ
+ﱞ
+ﱟ
+ﱠ
+ﱡ
+ﱢ
+ﱣ
+ﱤ
+ﱥ
+ﱦ
+ﱧ
+ﱨ
+ﱩ
+ﱪ
+ﱫ
+ﱬ
+ﱭ
+ﱮ
+ﱯ
+ﱰ
+ﱱ
+ﱲ
+ﱳ
+ﱴ
+ﱵ
+ﱶ
+ﱷ
+ﱸ
+ﱹ
+ﱺ
+ﱻ
+ﱼ
+ﱽ
+ﱾ
+ﱿ
+ﲀ
+ﲁ
+ﲂ
+ﲃ
+ﲄ
+ﲅ
+ﲆ
+ﲇ
+ﲈ
+ﲉ
+ﲊ
+ﲋ
+ﲌ
+ﲍ
+ﲎ
+ﲏ
+ﲐ
+ﲑ
+ﲒ
+ﲓ
+ﲔ
+ﲕ
+ﲖ
+ﲗ
+ﲘ
+ﲙ
+ﲚ
+ﲛ
+ﲜ
+ﲝ
+ﲞ
+ﲟ
+ﲠ
+ﲡ
+ﲢ
+ﲣ
+ﲤ
+ﲥ
+ﲦ
+ﲧ
+ﲨ
+ﲩ
+ﲪ
+ﲫ
+ﲬ
+ﲭ
+ﲮ
+ﲯ
+ﲰ
+ﲱ
+ﲲ
+ﲳ
+ﲴ
+ﲵ
+ﲶ
+ﲷ
+ﲸ
+ﲹ
+ﲺ
+ﲻ
+ﲼ
+ﲽ
+ﲾ
+ﲿ
+ﳀ
+ﳁ
+ﳂ
+ﳃ
+ﳄ
+ﳅ
+ﳆ
+ﳇ
+ﳈ
+ﳉ
+ﳊ
+ﳋ
+ﳌ
+ﳍ
+ﳎ
+ﳏ
+ﳐ
+ﳑ
+ﳒ
+ﳓ
+ﳔ
+ﳕ
+ﳖ
+ﳗ
+ﳘ
+ﳙ
+ﳚ
+ﳛ
+ﳜ
+ﳝ
+ﳞ
+ﳟ
+ﳠ
+ﳡ
+ﳢ
+ﳣ
+ﳤ
+ﳥ
+ﳦ
+ﳧ
+ﳨ
+ﳩ
+ﳪ
+ﳫ
+ﳬ
+ﳭ
+ﳮ
+ﳯ
+ﳰ
+ﳱ
+ﳲ
+ﳳ
+ﳴ
+ﳵ
+ﳶ
+ﳷ
+ﳸ
+ﳹ
+ﳺ
+ﳻ
+ﳼ
+ﳽ
+ﳾ
+ﳿ
+ﴀ
+ﴁ
+ﴂ
+ﴃ
+ﴄ
+ﴅ
+ﴆ
+ﴇ
+ﴈ
+ﴉ
+ﴊ
+ﴋ
+ﴌ
+ﴍ
+ﴎ
+ﴏ
+ﴐ
+ﴑ
+ﴒ
+ﴓ
+ﴔ
+ﴕ
+ﴖ
+ﴗ
+ﴘ
+ﴙ
+ﴚ
+ﴛ
+ﴜ
+ﴝ
+ﴞ
+ﴟ
+ﴠ
+ﴡ
+ﴢ
+ﴣ
+ﴤ
+ﴥ
+ﴦ
+ﴧ
+ﴨ
+ﴩ
+ﴪ
+ﴫ
+ﴬ
+ﴭ
+ﴮ
+ﴯ
+ﴰ
+ﴱ
+ﴲ
+ﴳ
+ﴴ
+ﴵ
+ﴶ
+ﴷ
+ﴸ
+ﴹ
+ﴺ
+ﴻ
+ﴼ
+ﴽ
+ﵐ
+ﵑ
+ﵒ
+ﵓ
+ﵔ
+ﵕ
+ﵖ
+ﵗ
+ﵘ
+ﵙ
+ﵚ
+ﵛ
+ﵜ
+ﵝ
+ﵞ
+ﵟ
+ﵠ
+ﵡ
+ﵢ
+ﵣ
+ﵤ
+ﵥ
+ﵦ
+ﵧ
+ﵨ
+ﵩ
+ﵪ
+ﵫ
+ﵬ
+ﵭ
+ﵮ
+ﵯ
+ﵰ
+ﵱ
+ﵲ
+ﵳ
+ﵴ
+ﵵ
+ﵶ
+ﵷ
+ﵸ
+ﵹ
+ﵺ
+ﵻ
+ﵼ
+ﵽ
+ﵾ
+ﵿ
+ﶀ
+ﶁ
+ﶂ
+ﶃ
+ﶄ
+ﶅ
+ﶆ
+ﶇ
+ﶈ
+ﶉ
+ﶊ
+ﶋ
+ﶌ
+ﶍ
+ﶎ
+ﶏ
+ﶒ
+ﶓ
+ﶔ
+ﶕ
+ﶖ
+ﶗ
+ﶘ
+ﶙ
+ﶚ
+ﶛ
+ﶜ
+ﶝ
+ﶞ
+ﶟ
+ﶠ
+ﶡ
+ﶢ
+ﶣ
+ﶤ
+ﶥ
+ﶦ
+ﶧ
+ﶨ
+ﶩ
+ﶪ
+ﶫ
+ﶬ
+ﶭ
+ﶮ
+ﶯ
+ﶰ
+ﶱ
+ﶲ
+ﶳ
+ﶴ
+ﶵ
+ﶶ
+ﶷ
+ﶸ
+ﶹ
+ﶺ
+ﶻ
+ﶼ
+ﶽ
+ﶾ
+ﶿ
+ﷀ
+ﷁ
+ﷂ
+ﷃ
+ﷄ
+ﷅ
+ﷆ
+ﷇ
+ﷰ
+ﷱ
+ﷲ
+ﷳ
+ﷴ
+ﷵ
+ﷶ
+ﷷ
+ﷸ
+ﷹ
+ﷺ
+ﷻ
+ﹰ
+ﹱ
+ﹲ
+ﹳ
+ﹴ
+ﹶ
+ﹷ
+ﹸ
+ﹹ
+ﹺ
+ﹻ
+ﹼ
+ﹽ
+ﹾ
+ﹿ
+ﺀ
+ﺁ
+ﺂ
+ﺃ
+ﺄ
+ﺅ
+ﺆ
+ﺇ
+ﺈ
+ﺉ
+ﺊ
+ﺋ
+ﺌ
+ﺍ
+ﺎ
+ﺏ
+ﺐ
+ﺑ
+ﺒ
+ﺓ
+ﺔ
+ﺕ
+ﺖ
+ﺗ
+ﺘ
+ﺙ
+ﺚ
+ﺛ
+ﺜ
+ﺝ
+ﺞ
+ﺟ
+ﺠ
+ﺡ
+ﺢ
+ﺣ
+ﺤ
+ﺥ
+ﺦ
+ﺧ
+ﺨ
+ﺩ
+ﺪ
+ﺫ
+ﺬ
+ﺭ
+ﺮ
+ﺯ
+ﺰ
+ﺱ
+ﺲ
+ﺳ
+ﺴ
+ﺵ
+ﺶ
+ﺷ
+ﺸ
+ﺹ
+ﺺ
+ﺻ
+ﺼ
+ﺽ
+ﺾ
+ﺿ
+ﻀ
+ﻁ
+ﻂ
+ﻃ
+ﻄ
+ﻅ
+ﻆ
+ﻇ
+ﻈ
+ﻉ
+ﻊ
+ﻋ
+ﻌ
+ﻍ
+ﻎ
+ﻏ
+ﻐ
+ﻑ
+ﻒ
+ﻓ
+ﻔ
+ﻕ
+ﻖ
+ﻗ
+ﻘ
+ﻙ
+ﻚ
+ﻛ
+ﻜ
+ﻝ
+ﻞ
+ﻟ
+ﻠ
+ﻡ
+ﻢ
+ﻣ
+ﻤ
+ﻥ
+ﻦ
+ﻧ
+ﻨ
+ﻩ
+ﻪ
+ﻫ
+ﻬ
+ﻭ
+ﻮ
+ﻯ
+ﻰ
+ﻱ
+ﻲ
+ﻳ
+ﻴ
+ﻵ
+ﻶ
+ﻷ
+ﻸ
+ﻹ
+ﻺ
+ﻻ
+ﻼ
+</classes>
diff --git a/src/java/org/apache/fop/tools/anttasks/SerializeHyphPattern.java b/src/java/org/apache/fop/tools/anttasks/SerializeHyphPattern.java
deleted file mode 100644
index 778c39f9a..000000000
--- a/src/java/org/apache/fop/tools/anttasks/SerializeHyphPattern.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* $Id$ */
-
-package org.apache.fop.tools.anttasks;
-
-// Java
-import java.io.File;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.util.List;
-
-// Ant
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.types.FileSet;
-
-// FOP
-import org.apache.fop.hyphenation.HyphenationTree;
-import org.apache.fop.hyphenation.HyphenationException;
-
-/**
- * SerializeHyphPattern
- */
-
-
-public class SerializeHyphPattern extends Task {
- private List filesets = new java.util.ArrayList();
- private File targetDir;
- private boolean errorDump = false;
-
- /**
- * {@inheritDoc}
- */
- public void execute() throws org.apache.tools.ant.BuildException {
- // deal with the filesets
- for (int i = 0; i < getFilesets().size(); i++) {
- FileSet fs = (FileSet) getFilesets().get(i);
- DirectoryScanner ds = fs.getDirectoryScanner(getProject());
- File basedir = ds.getBasedir();
- String[] files = ds.getIncludedFiles();
- for (int j = 0; j < files.length; j++) {
- processFile(basedir, files[j].substring(0, files[j].length() - 4));
- }
- }
- } // end execute
-
-
- /**
- * Adds a set of pattern files (nested fileset attribute).
- * @param set a fileset
- */
- public void addFileset(FileSet set) {
- filesets.add(set);
- }
-
- /**
- * Returns the current list of filesets.
- * @return the filesets
- */
- public List getFilesets() {
- return this.filesets;
- }
-
- /**
- * Sets the target directory
- * @param targetDir target directory
- */
- public void setTargetDir(String targetDir) {
- File dir = new File(targetDir);
- this.targetDir = dir;
- }
-
- /**
- * Controls the amount of error information dumped.
- * @param errorDump True if more error info should be provided
- */
- public void setErrorDump(boolean errorDump) {
- this.errorDump = errorDump;
- }
-
-
- /*
- * checks whether input or output files exists or the latter is older than input file
- * and start build if necessary
- */
- private void processFile(File basedir, String filename) {
- File infile = new File(basedir, filename + ".xml");
- File outfile = new File(targetDir, filename + ".hyp");
- //long outfileLastModified = outfile.lastModified();
- boolean startProcess = true;
-
- startProcess = rebuild(infile, outfile);
- if (startProcess) {
- buildPatternFile(infile, outfile);
- }
- }
-
- /*
- * serializes pattern files
- */
- private void buildPatternFile(File infile, File outfile) {
- System.out.println("Processing " + infile);
- HyphenationTree hTree = new HyphenationTree();
- try {
- hTree.loadPatterns(infile.toString());
- if (errorDump) {
- System.out.println("Stats: ");
- hTree.printStats();
- }
- } catch (HyphenationException ex) {
- System.err.println("Can't load patterns from xml file " + infile
- + " - Maybe hyphenation.dtd is missing?");
- if (errorDump) {
- System.err.println(ex.toString());
- }
- }
- // serialize class
- try {
- ObjectOutputStream out = new ObjectOutputStream(
- new java.io.BufferedOutputStream(
- new java.io.FileOutputStream(outfile)));
- out.writeObject(hTree);
- out.close();
- } catch (IOException ioe) {
- System.err.println("Can't write compiled pattern file: "
- + outfile);
- System.err.println(ioe);
- }
- }
-
- /**
- * Checks for existence of output file and compares
- * dates with input and stylesheet file
- */
- private boolean rebuild(File infile, File outfile) {
- if (outfile.exists()) {
- // checks whether output file is older than input file
- if (outfile.lastModified() < infile.lastModified()) {
- return true;
- }
- } else {
- // if output file does not exist, start process
- return true;
- }
- return false;
- } // end rebuild
-
- /*
- * //quick access for debugging
- * public static void main (String args[]) {
- * SerializeHyphPattern ser = new SerializeHyphPattern();
- * FileSet set = new FileSet();
- * set.setDir(new File("src/hyph"));
- * set.setIncludes("*.xml");
- * ser.addFileset(set);
- * ser.setTargetDir("build/hyph");
- * ser.execute();
- * }
- */
-
-
-}