16 releases (9 stable)
Uses new Rust 2024
| new 1.0.8 | Apr 21, 2026 |
|---|---|
| 1.0.7 | Mar 3, 2026 |
| 1.0.6 | Feb 20, 2026 |
| 1.0.4 | Jan 29, 2026 |
| 0.0.0-alpha.0 | Dec 14, 2025 |
#376 in Text processing
62 downloads per month
170KB
4.5K
SLoC
Lipi Lekhika โ Rust
A high-performance transliteration library for Indian Brahmic scripts
๐ 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
๐ฅ Installation
cargo add lipilekhika
๐ Quick Start
Basic Transliteration
use lipilekhika::transliterate;
fn main() {
let result = transliterate(
"namaskAraH",
"Normal",
"Devanagari",
None
).unwrap();
println!("{}", result); // เคจเคฎเคธเฅเคเคพเคฐเค
}
With Custom Options
use lipilekhika::transliterate;
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(
"เฐเฐเฐเฐพ",
"Telugu",
"Gujarati",
Some(&options)
).unwrap();
println!("{}", result); // เชเชเชเชพ (instead of เชเชเซเชเชพ)
}
๐ API
Core Functions
transliterate
pub fn transliterate(
text: &str,
from: &str,
to: &str,
trans_options: Option<&HashMap<String, bool>>,
) -> Result<String, String>
Transliterates text from one script to another.
Parameters:
textโ Text to transliteratefromโ Source script/language name (e.g., "Normal", "Devanagari", "Telugu")toโ Target script/language nametrans_optionsโ Optional custom transliteration options
Returns: Result<String, String> โ Transliterated text or error message
get_all_option
pub fn get_all_option(
from_script_name: &str,
to_script_name: &str,
) -> Result<Vec<String>, String>
Gets all available custom options for a script pair.
Parameters:
from_script_nameโ Source script/language nameto_script_nameโ Target script/language name
Returns: Result<Vec<String>, String> โ List of option keys or error message
get_script_typing_data_map
pub fn get_script_typing_data_map(
script: &str,
) -> Result<ScriptTypingDataMap, String>
Gets typing data mappings for a script (for building custom input methods).
Parameters:
scriptโ Script/language name
Returns: Result<ScriptTypingDataMap, String> โ Typing data or error message
Typing Module
For character-by-character real-time input:
use lipilekhika::typing::{TypingContext, TypingContextOptions};
fn main() {
let mut ctx = TypingContext::new("Devanagari", None).unwrap();
// Process character-by-character input
let diff = ctx.take_key_input("n").unwrap();
println!("Delete: {}, Add: '{}'", diff.to_delete_chars_count, diff.diff_add_text);
let diff = ctx.take_key_input("a").unwrap();
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 modenew(typing_lang: &str, options: Option<TypingContextOptions>)โ Create new contexttake_key_input(&mut self, key: &str)โ Process single character inputclear_context(&mut self)โ Clear internal state
-
TypingContextOptionsโ Configuration for typing behaviorauto_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 inputto_delete_chars_count: usizeโ Characters to delete from current statediff_add_text: Stringโ Text to insert
-
ScriptTypingDataMapโ Typing data for a script (fromget_script_typing_data_map)common_krama_map: Vec<TypingDataMapItem>โ Common character mappingsscript_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
- Website โ Documentation and guides
- Supported Scripts โ Full list of scripts
- Custom Options โ Transliteration options reference
- GitHub Repository โ Source code and issues
๐ License
MIT License โ See LICENSE for details
Dependencies
~1.6โ2.7MB
~49K SLoC