diff options
-rw-r--r-- | build.properties | 3 | ||||
-rw-r--r-- | build.xml | 52 | ||||
-rw-r--r-- | src/java/org/apache/fop/hyphenation/PatternParser.java | 72 | ||||
-rw-r--r-- | src/java/org/apache/fop/hyphenation/SerializeHyphPattern.java | 132 | ||||
-rw-r--r-- | src/java/org/apache/fop/hyphenation/UnicodeClasses.java | 317 | ||||
-rw-r--r-- | src/java/org/apache/fop/hyphenation/classes.xml | 7628 | ||||
-rw-r--r-- | src/java/org/apache/fop/tools/anttasks/SerializeHyphPattern.java | 178 |
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 @@ -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 +ĵĴ +ķĶ +ĸ +ĺĹ +ļĻ +ľĽ +ŀĿ +łŁ +ńŃ +ņŅ +ňŇ +ʼn +ŋŊ +ōŌ +ŏŎ +őŐ +œŒ +ŕŔ +ŗŖ +řŘ +śŚ +ŝŜ +şŞ +šŠ +ţŢ +ťŤ +ŧŦ +ũŨ +ūŪ +ŭŬ +ůŮ +űŰ +ųŲ +ŵŴ +ŷŶ +źŹ +żŻ +žŽ +ſ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(); - * } - */ - - -} |