Hyphenation

Hyphenation class

Предоставляет методы для работы со словарями расстановки переносов. Эти словари предписывают, где слова определенного языка могут быть расставлены через дефис.

Чтобы узнать больше, посетитеРабота с переносами статья документации.

public static class Hyphenation

Характеристики

ИмяОписание
static Callback { get; set; }Получает или задает интерфейс обратного вызова, используемый для запроса словарей при построении макета страницы документа. Это позволяет задерживать загрузку словарей, что может быть полезно при обработке документов на многих языках.
static WarningCallback { get; set; }Вызывается во время загрузки шаблонов расстановки переносов, когда обнаруживается проблема, которая может привести к потере точности форматирования.

Методы

ИмяОписание
static IsDictionaryRegistered(string)ВозвращаетЛОЖЬ если для указанного языка не зарегистрирован словарь или зарегистрирован пустой словарь,истинный иначе.
static RegisterDictionary(string, Stream)Регистрирует и загружает словарь расстановки переносов для указанного языка из потока. Выдает, если словарь не может быть прочитан или имеет неверный формат.
static RegisterDictionary(string, string)Регистрирует и загружает словарь расстановки переносов для указанного языка из файла. Выдает, если словарь не может быть прочитан или имеет неверный формат.
static UnregisterDictionary(string)Отменяет регистрацию словаря переносов для указанного языка.

Примеры

Показывает, как открыть и зарегистрировать словарь из файла.

public void RegisterDictionary()
{
    // Настраиваем обратный вызов, который отслеживает предупреждения, возникающие во время регистрации словаря расстановки переносов.
    WarningInfoCollection warningInfoCollection = new WarningInfoCollection();
    Hyphenation.WarningCallback = warningInfoCollection;

    // Регистрируем английский (США) словарь расстановки переносов по потоку.
    Stream dictionaryStream = new FileStream(MyDir + "hyph_en_US.dic", FileMode.Open);
    Hyphenation.RegisterDictionary("en-US", dictionaryStream);

    Assert.AreEqual(0, warningInfoCollection.Count);

    // Откройте документ с языковым стандартом, в котором Microsoft Word не может расставлять переносы на английской машине, например, на немецком.
    Document doc = new Document(MyDir + "German text.docx");

    // Чтобы расставить переносы в этом документе при сохранении, нам нужен словарь расстановки переносов для кода языка "de-CH".
    // Этот обратный вызов будет обрабатывать автоматический запрос этого словаря.
    Hyphenation.Callback = new CustomHyphenationDictionaryRegister();

    // Когда мы сохраним документ, вступят в силу немецкие переносы.
    doc.Save(ArtifactsDir + "Hyphenation.RegisterDictionary.pdf");

    // Этот словарь содержит два одинаковых шаблона, которые вызовут предупреждение.
    Assert.AreEqual(1, warningInfoCollection.Count);
    Assert.AreEqual(WarningType.MinorFormattingLoss, warningInfoCollection[0].WarningType);
    Assert.AreEqual(WarningSource.Layout, warningInfoCollection[0].Source);
    Assert.AreEqual("Hyphenation dictionary contains duplicate patterns. The only first found pattern will be used. " +
                    "Content can be wrapped differently.", warningInfoCollection[0].Description);
}

/// <summary>
/// Связывает языковые коды ISO с именами локальных системных файлов для файлов словаря расстановки переносов.
/// </summary>
private class CustomHyphenationDictionaryRegister : IHyphenationCallback
{
    public CustomHyphenationDictionaryRegister()
    {
        mHyphenationDictionaryFiles = new Dictionary<string, string>
        {
            { "en-US", MyDir + "hyph_en_US.dic" },
            { "de-CH", MyDir + "hyph_de_CH.dic" }
        };
    }

    public void RequestDictionary(string language)
    {
        Console.Write("Hyphenation dictionary requested: " + language);

        if (Hyphenation.IsDictionaryRegistered(language))
        {
            Console.WriteLine(", is already registered.");
            return;
        }

        if (mHyphenationDictionaryFiles.ContainsKey(language))
        {
            Hyphenation.RegisterDictionary(language, mHyphenationDictionaryFiles[language]);
            Console.WriteLine(", successfully registered.");
            return;
        }

        Console.WriteLine(", no respective dictionary file known by this Callback.");
    }

    private readonly Dictionary<string, string> mHyphenationDictionaryFiles;
}

Смотрите также