Skip to content

Releases: jayeshmepani/indic-script-converter

lipimala v1.2.0 — Natural Brahmic Readable Latin

Choose a tag to compare

@jayeshmepani jayeshmepani released this 14 Oct 11:54

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 NATURAL readable style for Devanagari and Gujarati across Dart, JavaScript, Python, and PHP. LEGACY remains the default, so an existing 1.1 call keeps its previous output.
  • Choose vowel length per call: doubled letters (brahmaand), collapsed letters (brahmand), or SMART syllable spelling (aaj, swaroop, dharan, chaar). Sanskrit SMART keeps phonemic length (dharma, shvetadveepa).
  • Set pronunciation independently of the script. Hindi ऋतु is ritu; the same sign in Gujarati pronunciation is rutu. Natural spellings include श्वेतद्वीप / શ્વેતદ્વીપ → shwetdweep, स्वरूप / સ્વરૂપ → swaroop, and राष्ट्रपति → rashtrapati.
  • Keep Plain English and Hunterian distinct unless NATURAL and SMART are 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 BrahmicPlainEnglishOptions fields 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/lipimala

See the README for runtime-specific examples and options.

lipimala v1.1.0 — Brahmic Transcription & Unicode 18 Coverage

Choose a tag to compare

@jayeshmepani jayeshmepani released this 13 Oct 12:54

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/lipimala

See the README for runtime-specific examples and options.

lipimala v1.0.2 — Complete Bulk Transliteration API & 160/160 Pub Points

Choose a tag to compare

@jayeshmepani jayeshmepani released this 08 Aug 11:04

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()
    • 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.
  • Pub.dev Score Maxing (160 / 160 Points):

    • Added primary package examples example/example.dart and example/lipimala_example.dart to 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.
  • 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.md files, package.json, pubspec.yaml, pyproject.toml, composer.json, and docs/index.html to 1.0.2.

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

Choose a tag to compare

@jayeshmepani jayeshmepani released this 08 Aug 10:03

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.dart
    • node javascript/examples/public-api-examples.js
    • PYTHONPATH=python python3 python/examples/public_api_examples.py
    • php 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

Choose a tag to compare

@jayeshmepani jayeshmepani released this 07 Aug 12:55

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:
    • strictIast
    • iso15919Core
    • extendedIndic
  • 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.