com.aspose.words

Interface IHyphenationCallback

  • public interface IHyphenationCallback 

Implemented by classes which can register hyphenation dictionaries.

Example:

Shows how to open and register a dictionary from a file.
public void registerDictionary() throws Exception {
    // Set up a callback that tracks warnings that occur during hyphenation dictionary registration
    WarningInfoCollection warningInfoCollection = new WarningInfoCollection();
    Hyphenation.setWarningCallback(warningInfoCollection);

    // Register an English (US) hyphenation dictionary by stream
    InputStream dictionaryStream = new FileInputStream(getMyDir() + "hyph_en_US.dic");
    Hyphenation.registerDictionary("en-US", dictionaryStream);

    // No warnings detectedß
    Assert.assertEquals(warningInfoCollection.getCount(), 0);

    // Open a document with a German locale that might not get automatically hyphenated by Microsoft Word on an English machine
    Document doc = new Document(getMyDir() + "German text.docx");

    // To hyphenate that document upon saving, we need a hyphenation dictionary for the "de-CH" language code
    // This callback will handle the automatic request for that dictionary
    Hyphenation.setCallback(new CustomHyphenationDictionaryRegister());

    // When we save the document, it will be hyphenated according to rules defined by the dictionary known by our callback
    doc.save(getArtifactsDir() + "Hyphenation.RegisterDictionary.pdf");

    // This dictionary contains two identical patterns, which will trigger a warning
    Assert.assertEquals(warningInfoCollection.getCount(), 1);
    Assert.assertEquals(warningInfoCollection.get(0).getWarningType(), WarningType.MINOR_FORMATTING_LOSS);
    Assert.assertEquals(warningInfoCollection.get(0).getSource(), WarningSource.LAYOUT);
    Assert.assertEquals(warningInfoCollection.get(0).getDescription(), "Hyphenation dictionary contains duplicate patterns. " +
            "The only first found pattern will be used. Content can be wrapped differently.");
}

/// <summary>
/// Associates ISO language codes with custom local system dictionary files for their respective languages.
/// </summary>
private static class CustomHyphenationDictionaryRegister implements IHyphenationCallback {
    public CustomHyphenationDictionaryRegister() {
        mHyphenationDictionaryFiles = new HashMap<>();
        {
            mHyphenationDictionaryFiles.put("en-US", getMyDir() + "hyph_en_US.dic");
            mHyphenationDictionaryFiles.put("de-CH", getMyDir() + "hyph_de_CH.dic");
        }
    }

    public void requestDictionary(String language) throws Exception {
        System.out.print("Hyphenation dictionary requested: " + language);

        if (Hyphenation.isDictionaryRegistered(language)) {
            System.out.println(", is already registered.");
            return;
        }

        if (mHyphenationDictionaryFiles.containsKey(language)) {
            Hyphenation.registerDictionary(language, mHyphenationDictionaryFiles.get(language));
            System.out.println(", successfully registered.");
            return;
        }

        System.out.println(", no respective dictionary file known by this Callback.");
    }

    private HashMap<String, String> mHyphenationDictionaryFiles;
}

Method Summary
abstract voidrequestDictionary(java.lang.String language)
Notifies application that hyphenation dictionary for the specified language wasn't found and may need to be registered.

Implementation should find a dictionary and register it using Hyphenation.registerDictionary(java.lang.String,java.io.InputStream) methods.

If dictionary is unavailable for the specified language implementation can opt out of further calls for the same language using Hyphenation.registerDictionary(java.lang.String,java.lang.String) with null value.
 

    • Method Detail

      • requestDictionary

        public abstract void requestDictionary(java.lang.String language)
                                            throws java.lang.Exception
        Notifies application that hyphenation dictionary for the specified language wasn't found and may need to be registered.

        Implementation should find a dictionary and register it using Hyphenation.registerDictionary(java.lang.String,java.io.InputStream) methods.

        If dictionary is unavailable for the specified language implementation can opt out of further calls for the same language using Hyphenation.registerDictionary(java.lang.String,java.lang.String) with null value.
        Exceptions thrown by this method will abort execution of page layout process.
        Parameters:
        language - A language name, e.g. "en-US". See .NET documentation for "culture name" and RFC 4646 for details.

        Example:

        Shows how to open and register a dictionary from a file.
        public void registerDictionary() throws Exception {
            // Set up a callback that tracks warnings that occur during hyphenation dictionary registration
            WarningInfoCollection warningInfoCollection = new WarningInfoCollection();
            Hyphenation.setWarningCallback(warningInfoCollection);
        
            // Register an English (US) hyphenation dictionary by stream
            InputStream dictionaryStream = new FileInputStream(getMyDir() + "hyph_en_US.dic");
            Hyphenation.registerDictionary("en-US", dictionaryStream);
        
            // No warnings detectedß
            Assert.assertEquals(warningInfoCollection.getCount(), 0);
        
            // Open a document with a German locale that might not get automatically hyphenated by Microsoft Word on an English machine
            Document doc = new Document(getMyDir() + "German text.docx");
        
            // To hyphenate that document upon saving, we need a hyphenation dictionary for the "de-CH" language code
            // This callback will handle the automatic request for that dictionary
            Hyphenation.setCallback(new CustomHyphenationDictionaryRegister());
        
            // When we save the document, it will be hyphenated according to rules defined by the dictionary known by our callback
            doc.save(getArtifactsDir() + "Hyphenation.RegisterDictionary.pdf");
        
            // This dictionary contains two identical patterns, which will trigger a warning
            Assert.assertEquals(warningInfoCollection.getCount(), 1);
            Assert.assertEquals(warningInfoCollection.get(0).getWarningType(), WarningType.MINOR_FORMATTING_LOSS);
            Assert.assertEquals(warningInfoCollection.get(0).getSource(), WarningSource.LAYOUT);
            Assert.assertEquals(warningInfoCollection.get(0).getDescription(), "Hyphenation dictionary contains duplicate patterns. " +
                    "The only first found pattern will be used. Content can be wrapped differently.");
        }
        
        /// <summary>
        /// Associates ISO language codes with custom local system dictionary files for their respective languages.
        /// </summary>
        private static class CustomHyphenationDictionaryRegister implements IHyphenationCallback {
            public CustomHyphenationDictionaryRegister() {
                mHyphenationDictionaryFiles = new HashMap<>();
                {
                    mHyphenationDictionaryFiles.put("en-US", getMyDir() + "hyph_en_US.dic");
                    mHyphenationDictionaryFiles.put("de-CH", getMyDir() + "hyph_de_CH.dic");
                }
            }
        
            public void requestDictionary(String language) throws Exception {
                System.out.print("Hyphenation dictionary requested: " + language);
        
                if (Hyphenation.isDictionaryRegistered(language)) {
                    System.out.println(", is already registered.");
                    return;
                }
        
                if (mHyphenationDictionaryFiles.containsKey(language)) {
                    Hyphenation.registerDictionary(language, mHyphenationDictionaryFiles.get(language));
                    System.out.println(", successfully registered.");
                    return;
                }
        
                System.out.println(", no respective dictionary file known by this Callback.");
            }
        
            private HashMap<String, String> mHyphenationDictionaryFiles;
        }