Repository navigation
Releases: jayeshmepani/indic-script-converter
Release list
lipimala v1.2.0 — Natural Brahmic Readable Latin
lipimala 1.2.0
This release adds an opt-in natural reading for Devanagari and Gujarati. A call that stays on the 1.1 defaults keeps its previous Plain-English and Hunterian output.
Highlights
- Opt into
NATURALreadable style for Devanagari and Gujarati across Dart, JavaScript, Python, and PHP.LEGACYremains the default, so an existing 1.1 call keeps its previous output. - Choose vowel length per call: doubled letters (
brahmaand), collapsed letters (brahmand), orSMARTsyllable spelling (aaj,swaroop,dharan,chaar). SanskritSMARTkeeps phonemic length (dharma,shvetadveepa). - Set pronunciation independently of the script. Hindi
ऋतुisritu; the same sign in Gujarati pronunciation isrutu. Natural spellings includeश्वेतद्वीप/શ્વેતદ્વીપ→shwetdweep,स्वरूप/સ્વરૂપ→swaroop, andराष्ट्रपति→rashtrapati. - Keep Plain English and Hunterian distinct unless
NATURALandSMARTare both set, in which case Gujarati Plain and Hunterian match. Hunterian is the simplified ASCII map-and-sign form (जान→jan), with no consonant dots. It does not emit the 1954 macron spelling (jān). - Add optional sentence-start capitalization and exact word overrides. New
BrahmicPlainEnglishOptionsfields are appended, so an existing positional constructor stays valid. - Keep canonical IAST, exact-source recovery, and direct Devanagari ↔ Gujarati conversion unchanged.
Install
dart pub add lipimala
npm install lipimala
pip install lipimala
composer require jayeshmepani/lipimalaSee the README for runtime-specific examples and options.
lipimala v1.1.0 — Brahmic Transcription & Unicode 18 Coverage
lipimala 1.1.0
This release adds direct, language-aware transcription from Devanagari and Gujarati to Plain English and Hunterian, alongside expanded Unicode 18 support for the two scripts.
Highlights
- Convert Devanagari and Gujarati directly to Plain-English or Hunterian output, with list and result-envelope APIs across Dart, JavaScript, Python, and PHP.
- Apply language-aware schwa deletion for Gujarati and Hindi, with a Sanskrit mode that retains inherent vowels.
- Configure readable vowel length, terminal anusvara, Gujarati ʿayn, and other pronunciation choices.
- Handle assigned Unicode 18 Devanagari and Gujarati characters and relevant auxiliary ranges, including Vedic signs, Devanagari Extended and Extended-A, Common Indic Number Forms, Gujarati Arabic-transliteration signs, and format controls.
- Keep canonical IAST conversion separate from pronunciation-oriented output. Result envelopes retain the exact original input when the displayed transcription is lossy.
Install
dart pub add lipimala
npm install lipimala
pip install lipimala
composer require jayeshmepani/lipimalaSee the README for runtime-specific examples and options.
lipimala v1.0.2 — Complete Bulk Transliteration API & 160/160 Pub Points
lipimala v1.0.2 introduces full bulk array / list transliteration across all script conversion directions (with 100% options/profile customization support), maxes out pub.dev scoring requirements to 160 / 160 pub points, standardizes target Python runtime references to Python 3.12+, and synchronizes versions across Dart, JavaScript, Python, and PHP.
What's Changed in v1.0.2
-
Complete Bulk String Array / List Transliteration API:
- Bulk convert any list, array, or sequence of strings (
["Kṛṣṇa", "Rāma", "jñāna"]) in a single call without manual loop logic. - All Conversion Directions Supported:
- Latin (IAST) → Devanagari / Gujarati / Plain English:
toDevanagariFromIastList(),toGujaratiFromIastList(),toPlainEnglishFromIastList() - Brahmic → Latin (IAST):
toCanonicalIastFromDevanagariList(),toCanonicalIastFromGujaratiList(),toIastFromDevanagariList(),toIastFromGujaratiList() - Direct Devanagari ↔ Gujarati:
toCanonicalGujaratiFromDevanagariList(),toCanonicalDevanagariFromGujaratiList(),toGujaratiFromDevanagariList(),toDevanagariFromGujaratiList() - Envelope Result Objects:
toDevanagariList(),toGujaratiList(),toPlainEnglishList()
- Latin (IAST) → Devanagari / Gujarati / Plain English:
- Full Custom Options & Profiles Support: Every bulk function accepts optional options objects (
IastToDevanagariOptions,IastPlainEnglishOptions, etc.) or profile flags to tweak digit policies, punctuation policies, OM policies, final-A policies, and normalization.
- Bulk convert any list, array, or sequence of strings (
-
Pub.dev Score Maxing (160 / 160 Points):
- Added primary package examples
example/example.dartandexample/lipimala_example.dartto hit 10/10 points for package example detection. - Added complete
///dartdoc documentation comments across options, getters, and extension classes to hit 10/10 points for documentation comments.
- Added primary package examples
-
Python Target Runtime Standardization:
- Standardized target Python version to Python 3.12+ (removed all legacy 3.8 references across documentation and READMEs).
-
Documentation & Badges:
- Removed Flutter badge from
dart/README.md. - Updated all 4 ecosystem
CHANGELOG.mdfiles,package.json,pubspec.yaml,pyproject.toml,composer.json, anddocs/index.htmlto1.0.2.
- Removed Flutter badge from
Bulk Transliteration Example Across Languages
Dart
import 'package:lipimala/lipimala.dart';
final items = ['Kṛṣṇa', 'Rāma', 'jñāna'];
// Bulk Latin -> Devanagari & Gujarati
final deva = items.toDevanagariFromIast(); // ['कृष्ण', 'राम', 'ज्ञान']
final gujr = items.toGujaratiFromIast(); // ['કૃષ્ણ', 'રામ', 'જ્ઞાન']
// Bulk Direct Devanagari -> Gujarati
final gujrDirect = deva.toCanonicalGujaratiFromDevanagari();
// Bulk with Custom Options
final devaDigits = ['Rāma 123'].toDevanagariFromIast(
options: const IastToDevanagariOptions(
digitPolicy: IastToDevanagariDigitPolicy.convertToScript,
),
); // ['राम १२३']JavaScript / Node.js
import {
toDevanagariFromIastList,
toCanonicalGujaratiFromDevanagariList,
toCanonicalIastFromDevanagariList,
} from 'lipimala';
const items = ['Kṛṣṇa', 'Rāma', 'jñāna'];
// 1. Latin -> Devanagari
const deva = toDevanagariFromIastList(items);
// 2. Devanagari -> Latin IAST
const iast = toCanonicalIastFromDevanagariList(deva);
// 3. Direct Devanagari -> Gujarati
const gujr = toCanonicalGujaratiFromDevanagariList(deva);Python
from lipimala import (
to_canonical_iast_from_devanagari_list,
to_devanagari_from_iast_list,
to_gujarati_from_iast_list,
)
items = ["Kṛṣṇa", "Rāma", "jñāna"]
# 1. Latin -> Devanagari
deva = to_devanagari_from_iast_list(items)
# 2. Devanagari -> Latin IAST
iast = to_canonical_iast_from_devanagari_list(deva)PHP
use function Lipimala\toCanonicalGujaratiFromDevanagariList;
use function Lipimala\toDevanagariFromIastList;
$items = ['Kṛṣṇa', 'Rāma', 'jñāna'];
// 1. Latin -> Devanagari
$deva = toDevanagariFromIastList($items);
// 2. Direct Devanagari -> Gujarati
$gujr = toCanonicalGujaratiFromDevanagariList($deva);lipimala v1.0.1 — Module Root Exports & Complete API Coverage
lipimala v1.0.1 brings direct root module exports, function name disambiguation for metadata helpers, expanded public API coverage, and synchronized package versions across all 4 runtimes (Dart, JavaScript, Python, PHP).
What's Changed in v1.0.1
- Root Module Exports: Direct Devanagari ↔ Gujarati conversion functions (
toDevanagariFromGujarati,toGujaratiFromDevanagari,toCanonicalGujaratiFromDevanagari,toCanonicalDevanagariFromGujarati,hasExactGujaratiSourceMetadata,hasExactDevanagariSourceMetadata,visibleWithoutExactSourceMetadata, options classes) can now be imported directly from the primary package root (lipimala) in JavaScript, Python, Dart, and PHP. - Function Disambiguation: Resolved extension conflicts between IAST-source trailers (
hasExactDevanagariIastSourceMetadata/hasExactGujaratiIastSourceMetadata) and direct script-to-script trailers (hasExactDevanagariSourceMetadata/hasExactGujaratiSourceMetadata). - Comprehensive API Example Suites: Expanded example runner scripts across all 4 runtimes exercising 100% of all 35 core APIs, options, enums, metadata decoders, and Unicode 17.0.0 classifiers:
dart run example/public_api_examples.dartnode javascript/examples/public-api-examples.jsPYTHONPATH=python python3 python/examples/public_api_examples.pyphp php/examples/public_api_examples.php
- Updated Documentation: Fully updated HTML API reference (
docs/index.html) and package README files.
Installation Commands
| Platform | Package | Install Command |
|---|---|---|
| Python | lipimala |
pip install lipimala==1.0.1 |
| JavaScript / Node.js | lipimala |
npm install lipimala@1.0.1 |
| Dart / Flutter | lipimala |
dart pub add lipimala:^1.0.1 |
| PHP | jayeshmepani/lipimala |
composer require jayeshmepani/lipimala:^1.0.1 |
Quick Example
from lipimala import (
to_devanagari_from_iast,
to_gujarati_from_devanagari,
to_exact_devanagari_from_gujarati,
IndicScriptConversionOptions,
)
# 1. Latin/IAST -> Devanagari {#1-latiniast---devanagari data-source-line="54"}
deva = to_devanagari_from_iast("Kṛṣṇa") # 'कृष्ण'
# 2. Direct Devanagari -> Gujarati with exact source metadata {#2-direct-devanagari---gujarati-with-exact-source-metadata data-source-line="57"}
gujr = to_gujarati_from_devanagari(
"ऄ ऎ ऍ",
options=IndicScriptConversionOptions(embed_exact_source_metadata=True)
)
# 3. Exact original Devanagari recovery {#3-exact-original-devanagari-recovery data-source-line="63"}
exact_deva = to_exact_devanagari_from_gujarati(gujr) # 'ऄ ऎ ऍ'
``` {data-source-line="65"}lipimala v1.0.0 — Initial Release
lipimala is a cross-language Indic transliteration library with synchronized implementations for Dart, Python, JavaScript/Node.js, and PHP.
This is the first stable release of the canonical multi-runtime project.
Install
| Platform | Command |
|---|---|
| Python | pip install lipimala |
| JavaScript / Node.js | npm install lipimala |
| Dart / Flutter | dart pub add lipimala |
| PHP | composer require jayeshmepani/lipimala |
What's included
- IAST / extended Indic → Devanagari with profile control:
strictIastiso15919CoreextendedIndic
- IAST / extended Indic → Gujarati
- Devanagari ↔ Gujarati direct canonical conversion
- Canonical reverse conversion
- Devanagari → IAST
- Gujarati → IAST
- Plain English transcription
- Hunterian transcription
- Exact source recovery through a checksummed invisible Unicode Tag trailer
- Lossless round-trip envelope with integrity verification
- NFC / NFD and combining-mark preservation
- Vedic mark preservation using Unicode-recommended storage ordering
- Shared cross-runtime verification corpus
Exact source recovery
The exact-recovery mode preserves the original Latin source, including:
- case
- NFC versus NFD representation
- precomposed versus decomposed forms
- alias choice
- combining-mark order
- punctuation
- whitespace
- supplementary Unicode characters
This allows metadata-backed round trips to recover the exact original source key even where visible transliteration mappings are intentionally many-to-one.
Supported scripts / systems
- Devanagari
- Gujarati
- IAST
- ISO 15919 core profile
- Extended Indic
- Hunterian
- Plain English
- Vedic accent marks
Runtime support
- Dart: 3.4+
- Python: 3.12+
- JavaScript / Node.js: Node.js 20+ / ES2023+
- PHP: 8.3+
Verification
The four implementations are maintained against the same transliteration behavior and verification corpus.
Verified areas include:
- Latin / IAST → Devanagari
- Latin / IAST → Gujarati
- Devanagari → canonical IAST
- Gujarati → canonical IAST
- Devanagari ↔ Gujarati
- Plain English / Hunterian transcription
- exact metadata-backed round trips
- NFC / NFD handling
- combining-mark edge cases
- Vedic fixtures
The current shared corpus contains 497 transliteration cases plus 22 Vedic fixtures.
Repository model
This repository is the canonical source repository for all four implementations.
The PHP package is additionally published from a generated PHP-only mirror repository so that composer.json is available at the repository root for Packagist. Development remains centralized in this canonical repository.
Release status
This is the first stable synchronized release of lipimala.