Hyphen

pub package License: MIT + MPL 2.0

Hyphen is a cross-platform Flutter plugin that provides high-quality word hyphenation.
It uses the hunspell/hyphen C library under the hood (via FFI) on native platforms, and a WebAssembly/JS runtime on the Web.

With Hyphen, you can automatically insert hyphenation marks into words based on language-specific rules. By default, the plugin uses "=" as the separator, but you can configure it to use any custom separator you want.


✨ Features

  • Works on all Flutter platforms: Android, iOS, macOS, Windows, Linux, Web
  • Uses battle-tested hyphen dictionaries
  • Two hyphenation APIs available:
    • hnjHyphenate2 – classic hyphenation
    • hnjHyphenate3 – extended API with additional options
  • Unified API – always use the same Hyphen class, no matter the platform

πŸ“¦ Installing

Add to your pubspec.yaml:

dependencies:
  hyphen: ^0.1.4

Then run:

flutter pub get

πŸ“š Dictionaries

Hyphen requires a .dic file for the language you want to hyphenate.
These are not bundled due to licensing reasons.

πŸ‘‰ You need to generate or obtain these .dic files yourself.

Where to get dictionary files

Hyphenation dictionaries are created from TeX hyphenation pattern files (commonly available on CTAN and other TeX distribution sources).


πŸ”¨ Step-by-step Example: English (US)

  1. Download the pattern file hyphen-en-us.tex

  2. Run the substrings.pl script (from hunspell/hyphen):

    perl substrings.pl hyphen-en-us.tex hyph_en_US.dic UTF-8
    

    This generates a file called hyph_en_US.dic.

  3. Add the file to your Flutter project:

    assets/hyph_en_US.dic
    
  4. Declare it in pubspec.yaml:

    flutter:
      assets:
        - assets/hyph_en_US.dic
    

πŸš€ Usage

import 'package:hyphen/hyphen.dart';

Future<void> main() async {
  // Load a dictionary from assets
  final hyphen = await Hyphen.fromDictionaryPath('assets/hyph_en_US.dic');

  // Hyphenate a word
  final result = hyphen.hnjHyphenate2('hyphenation', separator: '-');
  print(result); // "hy-phen-ation"

  // Using the extended API
  final result2 = hyphen.hnjHyphenate3(
    'hyphenation',
    separator: '=',
    lhmin: 3,
    rhmin: 3,
  );
  print(result2); // "hyphen=ation"
}

πŸ–₯ Platform Notes

  • Android/iOS/macOS/Linux/Windows: Uses the native hyphen lib via FFI.
  • Web: Uses a WASM build of the hyphen lib via hyphen.js.
  • On all platforms, you must provide your own .dic file.

⚠️ License

This package is dual-licensed:

Hyphenation dictionaries come with their own licenses – check the
hunspell/hyphen repo before redistributing.


🀝 Contributing

Issues and pull requests are welcome!

Libraries

hyphen