⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hyphenationtree.java

📁 一个java操作pdf文件的开发包,很好用的.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            } else                p = d < 0 ? lo[p] : hi[p];        }    }    /**     * Hyphenate word and return a Hyphenation object.     * @param word the word to be hyphenated     * @param remainCharCount Minimum number of characters allowed     * before the hyphenation point.     * @param pushCharCount Minimum number of characters allowed after     * the hyphenation point.     * @return a {@link Hyphenation Hyphenation} object representing     * the hyphenated word or null if word is not hyphenated.     */    public Hyphenation hyphenate(String word, int remainCharCount,                                 int pushCharCount) {        char[] w = word.toCharArray();        return hyphenate(w, 0, w.length, remainCharCount, pushCharCount);    }    /**     * Hyphenate word and return an array of hyphenation points.     * @param w char array that contains the word     * @param offset Offset to first character in word     * @param len Length of word     * @param remainCharCount Minimum number of characters allowed     * before the hyphenation point.     * @param pushCharCount Minimum number of characters allowed after     * the hyphenation point.     * @return a {@link Hyphenation Hyphenation} object representing     * the hyphenated word or null if word is not hyphenated.     */    public Hyphenation hyphenate(char[] w, int offset, int len,                                 int remainCharCount, int pushCharCount) {        int i;        char[] word = new char[len + 3];        // normalize word        char[] c = new char[2];        for (i = 1; i <= len; i++) {            c[0] = w[offset + i - 1];            int nc = classmap.find(c, 0);            if (nc < 0) {    // found a non-letter character, abort                return null;            }            word[i] = (char)nc;        }        int[] result = new int[len + 1];        int k = 0;        // check exception list first        String sw = new String(word, 1, len);        if (stoplist.containsKey(sw)) {            // assume only simple hyphens (Hyphen.pre="-", Hyphen.post = Hyphen.no = null)            Vector hw = (Vector)stoplist.get(sw);            int j = 0;            for (i = 0; i < hw.size(); i++) {                Object o = hw.elementAt(i);                if (o instanceof String) {                    j += ((String)o).length();                    if (j >= remainCharCount && j < (len - pushCharCount))                        result[k++] = j;                }            }        } else {            // use algorithm to get hyphenation points            word[0] = '.';                    // word start marker            word[len + 1] = '.';              // word end marker            word[len + 2] = 0;                // null terminated            byte[] il = new byte[len + 3];    // initialized to zero            for (i = 0; i < len + 1; i++) {                searchPatterns(word, i, il);            }            // hyphenation points are located where interletter value is odd            for (i = 0; i < len; i++) {                if (((il[i + 1] & 1) == 1) && i >= remainCharCount                        && i < (len - pushCharCount)) {                    result[k++] = i;                }            }        }        if (k > 0) {            // trim result array            int[] res = new int[k];            System.arraycopy(result, 0, res, 0, k);            return new Hyphenation(new String(w, offset, len), res);        } else {            return null;        }    }    /**     * Add a character class to the tree. It is used by     * PatternParser as callback to     * add character classes. Character classes define the     * valid word characters for hyphenation. If a word contains     * a character not defined in any of the classes, it is not hyphenated.     * It also defines a way to normalize the characters in order     * to compare them with the stored patterns. Usually pattern     * files use only lower case characters, in this case a class     * for letter 'a', for example, should be defined as "aA", the first     * character being the normalization char.     */    public void addClass(String chargroup) {        if (chargroup.length() > 0) {            char equivChar = chargroup.charAt(0);            char[] key = new char[2];            key[1] = 0;            for (int i = 0; i < chargroup.length(); i++) {                key[0] = chargroup.charAt(i);                classmap.insert(key, 0, equivChar);            }        }    }    /**     * Add an exception to the tree. It is used by     * PatternParser class as callback to     * store the hyphenation exceptions.     * @param word normalized word     * @param hyphenatedword a vector of alternating strings and     * {@link Hyphen hyphen} objects.     */    public void addException(String word, Vector hyphenatedword) {        stoplist.put(word, hyphenatedword);    }    /**     * Add a pattern to the tree. Mainly, to be used by     * PatternParser class as callback to     * add a pattern to the tree.     * @param pattern the hyphenation pattern     * @param ivalue interletter weight values indicating the     * desirability and priority of hyphenating at a given point     * within the pattern. It should contain only digit characters.     * (i.e. '0' to '9').     */    public void addPattern(String pattern, String ivalue) {        int k = ivalues.find(ivalue);        if (k <= 0) {            k = packValues(ivalue);            ivalues.insert(ivalue, (char)k);        }        insert(pattern, (char)k);    }    public void printStats() {        System.out.println("Value space size = "                           + Integer.toString(vspace.length()));        super.printStats();    }/*    public static void main(String[] argv) throws Exception {        HyphenationTree ht = null;        int minCharCount = 2;        BufferedReader in =            new BufferedReader(new InputStreamReader(System.in));        for (; ; ) {            System.out.print("l:\tload patterns from XML\nL:\tload patterns from serialized object\ns:\tset minimun character count\nw:\twrite hyphenation tree to object file\nh:\thyphenate\nf:\tfind pattern\nb:\tbenchmark\nq:\tquit\n\nCommand:");            String token = in.readLine().trim();            if (token.equals("f")) {                System.out.print("Pattern: ");                token = in.readLine().trim();                System.out.println("Values: " + ht.findPattern(token));            } else if (token.equals("s")) {                System.out.print("Minimun value: ");                token = in.readLine().trim();                minCharCount = Integer.parseInt(token);            } else if (token.equals("l")) {                ht = new HyphenationTree();                System.out.print("XML file name: ");                token = in.readLine().trim();                ht.loadPatterns(token);            } else if (token.equals("L")) {                ObjectInputStream ois = null;                System.out.print("Object file name: ");                token = in.readLine().trim();                try {                    ois = new ObjectInputStream(new FileInputStream(token));                    ht = (HyphenationTree)ois.readObject();                } catch (Exception e) {                    e.printStackTrace();                }                finally {                    if (ois != null) {                        try {                            ois.close();                        } catch (IOException e) {}                    }                }            } else if (token.equals("w")) {                System.out.print("Object file name: ");                token = in.readLine().trim();                ObjectOutputStream oos = null;                try {                    oos = new ObjectOutputStream(new FileOutputStream(token));                    oos.writeObject(ht);                } catch (Exception e) {                    e.printStackTrace();                }                finally {                    if (oos != null) {                        try {                            oos.flush();                        } catch (IOException e) {}                        try {                            oos.close();                        } catch (IOException e) {}                    }                }            } else if (token.equals("h")) {                System.out.print("Word: ");                token = in.readLine().trim();                System.out.print("Hyphenation points: ");                System.out.println(ht.hyphenate(token, minCharCount,                                                minCharCount));            } else if (token.equals("b")) {                if (ht == null) {                    System.out.println("No patterns has been loaded.");                    break;                }                System.out.print("Word list filename: ");                token = in.readLine().trim();                long starttime = 0;                int counter = 0;                ;                try {                    BufferedReader reader =                        new BufferedReader(new FileReader(token));                    String line;                    starttime = System.currentTimeMillis();                    while ((line = reader.readLine()) != null) {                        // System.out.print("\nline: ");                        Hyphenation hyp = ht.hyphenate(line, minCharCount,                                                       minCharCount);                        if (hyp != null) {                            String hword = hyp.toString();                            // System.out.println(line);                            // System.out.println(hword);                        } else {                            // System.out.println("No hyphenation");                        }                        counter++;                    }                } catch (Exception ioe) {                    System.out.println("Exception " + ioe);                    ioe.printStackTrace();                }                long endtime = System.currentTimeMillis();                long result = endtime - starttime;                System.out.println(counter + " words in " + result                                   + " Millisekunden hyphenated");            } else if (token.equals("q"))                break;        }    }*/}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -