A simple, lightweight Rust crate for Persian text shaping and RTL layout handling.
Designed primarily for GUI frameworks (like egui) that lack native support for Right-to-Left (RTL) text ordering and Persian character joining.
⚠️ Font Requirement: Make sure to load a font that supports Persian characters (e.g., Vazirmatn) in your UI framework; otherwise, shaped text will not render correctly.
Run in your terminal:
cargo add fa-shaper
Or add it directly to Cargo.toml:
[dependencies]
fa-shaper = "0.1.0"
Bring everything into scope using use fa_shaper::*; to gain access to functions and extension methods.
use fa_shaper::*;
fn main() {
// Using the function directly
let text1 = reshape("درود 123");
// Or using the extension method
let text2 = "درود بر شما".reshape_fa();
}use fa_shaper::*;
fn main() {
// Convert ASCII digits to Persian digits
let fa_num = "کد: 1234".to_fa_digits(); // کد: ۱۲۳۴
// Convert Persian/Arabic digits to ASCII digits (useful for parsing)
let en_num = "۱۲۳۴".to_en_digits(); // "1234"
let parsed: i32 = "۱۲۳۴".to_en_digits().parse().unwrap();
}ابزاری ساده و سبک برای پردازش متون فارسی و اصلاح RTL در Rust.
این ابزار برای محیطهای گرافیکی (مانند egui) که از چیدمان راستبهچپ (RTL) و اتصال حروف پشتیبانی نمیکنند، طراحی شده است.
⚠️ نکته درباره فونت: برای نمایش درست حروف پس از پردازش، حتماً باید یک فونت فارسی (مانند Vazirmatn) در فریمورک خود بارگذاری کرده باشید.
در ترمینال:
cargo add fa-shaper
یا افزودن به Cargo.toml:
[dependencies]
fa-shaper = "0.1.0"
با اضافه کردن use fa_shaper::*; به توابع و Extension متدها دسترسی خواهید داشت.
use fa_shaper::*;
fn main() {
// استفاده از تابع
let text1 = reshape("درود 123");
// یا استفاده به صورت Extension متد
let text2 = "درود بر شما".reshape_fa();
}use fa_shaper::*;
fn main() {
// تبدیل اعداد انگلیسی به فارسی
let fa_num = "کد: 1234".to_fa_digits(); // کد: ۱۲۳۴
// تبدیل اعداد فارسی/عربی به انگلیسی (مثلاً برای پارس کردن به عدد)
let en_num = "۱۲۳۴".to_en_digits(); // "1234"
let parsed: i32 = "۱۲۳۴".to_en_digits().parse().unwrap();
}