lipilekhika 1.1.0

A transliteration library for Indian Brahmic scripts
docs.rs failed to build lipilekhika-1.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: lipilekhika-1.0.8

Lipi Lekhika โ€” Rust

A high-performance transliteration library for Indian Brahmic scripts

crates.io crates.io Tests License: MIT

๐ŸŒ Website โ€ข ๐Ÿ“– Documentation โ€ข ๐Ÿฆ€ Crates.io โ€ข ๐Ÿ“ Changelog


โœจ Features

  • ๐Ÿ”„ Bidirectional Transliteration โ€” Convert between 15+ Indian Brahmic scripts
  • โšก High Performance โ€” Zero-overhead abstractions and optimized algorithms
  • ๐Ÿ›ก๏ธ Type Safe โ€” Leverages Rust's type system for safety and correctness
  • ๐ŸŽฏ Customizable Options โ€” Fine-tune transliteration and typing behaviour
  • โŒจ๏ธ Typing Mode โ€” Stateful context for real-time character-by-character input
  • ๐Ÿ“ฆ Embedded Script Data โ€” All script data bundled at compile time

โšก Performance

The fastest Lipi Lekhika implementationโ€”about 7.3ร— faster than pure JavaScript on the shared benchmark suite. See the full benchmark table โ†’

๐Ÿ“ฅ Installation

cargo add lipilekhika

๐Ÿš€ Quick Start

Basic Transliteration

use lipilekhika::{transliterate, Script};

fn main() {
    let result = transliterate(
        "namaskAraH",
        Script::Normal,
        Script::Devanagari,
        None
    );
    
    println!("{}", result); // เคจเคฎเคธเฅเค•เคพเคฐเคƒ
}

With Custom Options

use lipilekhika::{transliterate, Script};
use std::collections::HashMap;

fn main() {
    let mut options = HashMap::new();
    options.insert(
        "brahmic_to_brahmic:replace_pancham_varga_varna_with_anusvAra".to_string(),
        true
    );
    
    let result = transliterate(
        "เฐ—เฐ‚เฐ—เฐพ",
        Script::Telugu,
        Script::Gujarati,
        Some(&options)
    );
    
    println!("{}", result); // เช—เช‚เช—เชพ (instead of เช—เช™เซเช—เชพ)
}

๐Ÿ“š API

Core Functions

Script Enum

All script/language parameters use the Script enum instead of strings. You can use full names or shorthand aliases:

use lipilekhika::Script;

// Full names
Script::Devanagari
Script::Telugu
Script::Normal

// Language names
Script::Hindi      // resolves to Devanagari
Script::Sanskrit   // resolves to Devanagari
Script::English    // resolves to Normal

// Shorthand aliases
Script::Dev        // Devanagari
Script::Tel        // Telugu
Script::Tam        // Tamil

Convert to string with to_string(). Parse from string with FromStr:

use std::str::FromStr;
use lipilekhika::Script;

let s = Script::Devanagari.to_string(); // "Devanagari"
let parsed = Script::from_str("dev").unwrap(); // Script::Dev

Get the normalized/resolved script using .into():

use lipilekhika::{Script, ScriptListEnum};

let resolved: ScriptListEnum = Script::Hindi.into();    // ScriptListEnum::Devanagari
let resolved: ScriptListEnum = Script::Dev.into();      // ScriptListEnum::Devanagari
let resolved: ScriptListEnum = Script::English.into();  // ScriptListEnum::Normal

transliterate

pub fn transliterate<'a>(
    text: &'a (impl AsRef<str> + ?Sized),
    from: Script,
    to: Script,
    trans_options: Option<&HashMap<String, bool>>,
) -> Cow<'a, str>

Transliterates text from one script to another.

Parameters:

  • text โ€” Text to transliterate
  • from โ€” Source script (Script enum)
  • to โ€” Target script (Script enum)
  • trans_options โ€” Optional custom transliteration options

Returns: Cow<'a, str> โ€” Transliterated text (borrows input when from == to)

get_all_options

pub fn get_all_options(
    from_script: Script,
    to_script: Script,
) -> Vec<String>

Gets all available custom options for a script pair.

Parameters:

  • from_script โ€” Source script
  • to_script โ€” Target script

Returns: Vec<String> โ€” List of option keys

get_script_typing_data_map

pub fn get_script_typing_data_map(
    typing_script: Script,
) -> ScriptTypingDataMap

Gets typing data mappings for a script (for building custom input methods).

Parameters:

  • typing_script โ€” Script (Script enum)

Returns: ScriptTypingDataMap โ€” Typing data

Typing Module

For character-by-character real-time input:

use lipilekhika::Script;
use lipilekhika::typing::{TypingContext, TypingContextOptions};

fn main() {
    let mut ctx = TypingContext::new(Script::Devanagari, None);
    
    // Process character-by-character input
    let diff = ctx.take_key_input("n");
    println!("Delete: {}, Add: '{}'", diff.to_delete_chars_count, diff.diff_add_text);
    
    let diff = ctx.take_key_input("a");
    println!("Delete: {}, Add: '{}'", diff.to_delete_chars_count, diff.diff_add_text);
    
    // Clear context when needed
    ctx.clear_context();
}

Types

  • TypingContext โ€” Stateful context for typing mode

    • new(typing_script: Script, options: Option<TypingContextOptions>) โ€” Create new context
    • take_key_input(&mut self, key: &str) โ€” Process single character input
    • clear_context(&mut self) โ€” Clear internal state
  • TypingContextOptions โ€” Configuration for typing behavior

    • auto_context_clear_time_ms: u64 โ€” Auto-clear timeout (default: 4500ms)
    • use_native_numerals: bool โ€” Use script-native numerals (default: true)
    • include_inherent_vowel: bool โ€” Include inherent vowel/schwa (default: false)
  • TypingDiff โ€” Result of processing a key input

    • to_delete_chars_count: usize โ€” Characters to delete from current state
    • diff_add_text: String โ€” Text to insert
  • ScriptTypingDataMap โ€” Typing data for a script (from get_script_typing_data_map)

    • common_krama_map: Vec<TypingDataMapItem> โ€” Common character mappings
    • script_specific_krama_map: Vec<TypingDataMapItem> โ€” Script-specific mappings
  • ListType โ€” Character type enum: Anya, Vyanjana, Matra, Svara

  • TypingDataMapItem โ€” Type alias for (String, ListType, Vec<String>)

๐ŸŽฏ Supported Scripts

Devanagari, Bengali, Tamil, Telugu, Kannada, Malayalam, Gujarati, Odia, Gurmukhi, Sinhala, Tamil-Extended, Myanmar, Tibetan, Limbu, and more.

๐Ÿ“– Full list: lipilekhika.in/reference/supported_scripts

๐Ÿ”ง Custom Options

See the full list of custom transliteration options:

๐Ÿ“– lipilekhika.in/reference/custom_trans_options

๐Ÿ“– Resources

๐Ÿ“ License

MIT License โ€” See LICENSE for details