lipimala · v1.0.0

Technical API Reference

Exact round-trip Indic transliteration across Dart, JavaScript, Python, and PHP. Same conversion tables, profiles, Vedic handling, metadata trailer format, and result envelopes on every runtime.

  • lipimala
  • lipimala
  • lipimala
  • jayeshmepani/lipimala
  • PHP ns Lipimala
  • Default profile extendedIndic
toDevanagariFromIast() live
Devanagari कृष्ण आत्मन्
Gujarati કૃષ્ણ આત્મન્
  • profile: extendedIndic
  • in: nfd → out: nfc
  • renderingIsInjective: false

1. What lipimala does

Converts between scholarly Latin (IAST / extended Indic / ISO-style tables), Devanagari, Gujarati, and plain-English / Hunterian views. Visible Brahmic rendering is many-to-one—case, aliases, and normalization collapse—so exact recovery uses an envelope or an invisible metadata trailer.

Supported directions

  • Latin/IAST → Devanagari
  • Latin/IAST → Gujarati
  • Latin/IAST → plain English / Hunterian
  • Devanagari → IAST (canonical / smart / exact)
  • Gujarati → IAST (canonical / smart / exact)
  • Devanagari ↔ Gujarati (canonical / smart / exact)

Two recovery strategies

  1. TransliterationResult — keep the object / JSON and call restoreOriginal().
  2. Exact-source trailer — set embedExactSourceMetadata: true so the string carries a checksummed Unicode-Tag payload (LIT1:).

2. Installation & imports

Install commands and primary import paths
Language Install Import / use
Python (opens in new tab) pip install lipimala from lipimala import to_devanagari, to_devanagari_from_gujarati, ...
JavaScript (opens in new tab) npm install lipimala import { toDevanagari, toDevanagariFromGujarati } from 'lipimala'
Dart (opens in new tab) dart pub add lipimala import 'package:lipimala/lipimala.dart';
Extensions on String
PHP (opens in new tab) composer require jayeshmepani/lipimala use function Lipimala\toDevanagari;
use Lipimala\IastToDevanagariOptions;

3. Core concepts

3.1 Two API layers

String converters versus envelope converters
Layer Returns When to use
String converters
toDevanagariFromIast
string Rendered text only; optional invisible trailer for later exact reverse.
Envelope converters
toDevanagari
TransliterationResult Structured output, issues, profile metadata, JSON, restoreOriginal().

3.2 Smart vs exact vs canonical reverse

Reverse recovery modes (Devanagari → IAST example)
Variant Behavior Fails when
toIastFromDevanagari Exact trailer if present, else canonical reverse Never throws for missing trailer
toExactIastFromDevanagari Requires valid embedded metadata Throws if trailer missing/corrupt (empty → empty)
toCanonicalIastFromDevanagari Always visible-script reverse Does not throw for missing trailer

Same pattern for Gujarati→IAST and Deva↔Gujr with typed markers ISC:D: / ISC:G:.

3.3 Unicode normalization

Enum UnicodeNormalizationForm: preserve nfc nfd

Envelope defaults: input nfd, output nfc. Reverse APIs use ScriptToIastOptions.

4. Cross-language naming map

The table below maps all primary public functions, envelope APIs, reverse converters, script-to-script transformers, and metadata helpers across Dart, JavaScript, Python, and PHP environments.

Comprehensive API names across runtimes
Concept / Functionality Dart (package:lipimala/lipimala.dart) JavaScript (lipimala) Python (lipimala) PHP (IndicScriptConverter\*)
Devanagari Envelope toDevanagari()
text.toDevanagari()
toDevanagari()
to_devanagari()
to_devanagari()
toDevanagari()
toDevanagari()
to_devanagari()
Gujarati Envelope toGujarati()
text.toGujarati()
toGujarati()
to_gujarati()
to_gujarati()
toGujarati()
toGujarati()
to_gujarati()
Plain English Envelope toPlainEnglish()
text.toPlainEnglish()
toPlainEnglish()
to_plain_english()
to_plain_english()
toPlainEnglish()
toPlainEnglish()
to_plain_english()
IAST → Devanagari String toDevanagariFromIast()
text.toDevanagariFromIast()
toDevanagariFromIast()
to_devanagari_from_iast()
to_devanagari_from_iast()
toDevanagariFromIast()
toDevanagariFromIast()
to_devanagari_from_iast()
IAST → Gujarati String toGujaratiFromIast()
text.toGujaratiFromIast()
toGujaratiFromIast()
to_gujarati_from_iast()
to_gujarati_from_iast()
toGujaratiFromIast()
toGujaratiFromIast()
to_gujarati_from_iast()
IAST → Plain English String toPlainEnglishFromIast()
text.toPlainEnglishFromIast()
toPlainEnglishFromIast()
to_plain_english_from_iast()
to_plain_english_from_iast()
toPlainEnglishFromIast()
toPlainEnglishFromIast()
to_plain_english_from_iast()
Bulk Array / List Transliteration items.toDevanagariFromIast()
toDevanagariFromIastList()
toDevanagariFromIastList() to_devanagari_from_iast_list() toDevanagariFromIastList()
Devanagari → Smart IAST toIastFromDevanagari() toIastFromDevanagari()
to_iast_from_devanagari()
to_iast_from_devanagari()
toIastFromDevanagari()
toIastFromDevanagari()
to_iast_from_devanagari()
Devanagari → Canonical IAST toCanonicalIastFromDevanagari() toCanonicalIastFromDevanagari()
to_canonical_iast_from_devanagari()
to_canonical_iast_from_devanagari()
toCanonicalIastFromDevanagari()
toCanonicalIastFromDevanagari()
to_canonical_iast_from_devanagari()
Devanagari → Exact IAST toExactIastFromDevanagari() toExactIastFromDevanagari()
to_exact_iast_from_devanagari()
to_exact_iast_from_devanagari()
toExactIastFromDevanagari()
toExactIastFromDevanagari()
to_exact_iast_from_devanagari()
Gujarati → Smart IAST toIastFromGujarati() toIastFromGujarati()
to_iast_from_gujarati()
to_iast_from_gujarati()
toIastFromGujarati()
toIastFromGujarati()
to_iast_from_gujarati()
Gujarati → Canonical IAST toCanonicalIastFromGujarati() toCanonicalIastFromGujarati()
to_canonical_iast_from_gujarati()
to_canonical_iast_from_gujarati()
toCanonicalIastFromGujarati()
toCanonicalIastFromGujarati()
to_canonical_iast_from_gujarati()
Gujarati → Exact IAST toExactIastFromGujarati() toExactIastFromGujarati()
to_exact_iast_from_gujarati()
to_exact_iast_from_gujarati()
toExactIastFromGujarati()
toExactIastFromGujarati()
to_exact_iast_from_gujarati()
Devanagari → Smart Gujarati toGujaratiFromDevanagari() toGujaratiFromDevanagari()
to_gujarati_from_devanagari()
to_gujarati_from_devanagari()
toGujaratiFromDevanagari()
toGujaratiFromDevanagari()
to_gujarati_from_devanagari()
Devanagari → Canonical Gujarati toCanonicalGujaratiFromDevanagari() toCanonicalGujaratiFromDevanagari()
to_canonical_gujarati_from_devanagari()
to_canonical_gujarati_from_devanagari()
toCanonicalGujaratiFromDevanagari()
toCanonicalGujaratiFromDevanagari()
to_canonical_gujarati_from_devanagari()
Devanagari → Exact Gujarati toExactGujaratiFromDevanagari() toExactGujaratiFromDevanagari()
to_exact_gujarati_from_devanagari()
to_exact_gujarati_from_devanagari()
toExactGujaratiFromDevanagari()
toExactGujaratiFromDevanagari()
to_exact_gujarati_from_devanagari()
Gujarati → Smart Devanagari toDevanagariFromGujarati() toDevanagariFromGujarati()
to_devanagari_from_gujarati()
to_devanagari_from_gujarati()
toDevanagariFromGujarati()
toDevanagariFromGujarati()
to_devanagari_from_gujarati()
Gujarati → Canonical Devanagari toCanonicalDevanagariFromGujarati() toCanonicalDevanagariFromGujarati()
to_canonical_devanagari_from_gujarati()
to_canonical_devanagari_from_gujarati()
toCanonicalDevanagariFromGujarati()
toCanonicalDevanagariFromGujarati()
to_canonical_devanagari_from_gujarati()
Gujarati → Exact Devanagari toExactDevanagariFromGujarati() toExactDevanagariFromGujarati()
to_exact_devanagari_from_gujarati()
to_exact_devanagari_from_gujarati()
toExactDevanagariFromGujarati()
toExactDevanagariFromGujarati()
to_exact_devanagari_from_gujarati()
Check IAST Source Metadata hasExactGujaratiIastSourceMetadata
hasExactDevanagariIastSourceMetadata
hasExactGujaratiIastSourceMetadata
hasExactDevanagariIastSourceMetadata
has_exact_gujarati_iast_source_metadata
has_exact_devanagari_iast_source_metadata
hasExactGujaratiIastSourceMetadata()
hasExactDevanagariIastSourceMetadata()
Check Direct Metadata hasExactGujaratiSourceMetadata()
hasExactDevanagariSourceMetadata()
hasExactGujaratiSourceMetadata()
hasExactDevanagariSourceMetadata()
has_exact_gujarati_source_metadata()
has_exact_devanagari_source_metadata()
hasExactGujaratiSourceMetadata()
hasExactDevanagariSourceMetadata()
Strip Direct Metadata visibleWithoutExactSourceMetadata() visibleWithoutExactSourceMetadata() visible_without_exact_source_metadata() visibleWithoutExactSourceMetadata()
Embed Source Metadata embedExactSourceMetadata() embedExactSourceMetadata()
embed_exact_source_metadata()
embed_exact_source_metadata()
embedExactSourceMetadata()
embedExactSourceMetadata()
embed_exact_source_metadata()
Decode Metadata tryDecodeExactSourceMetadata() tryDecodeExactSourceMetadata()
try_decode_exact_source_metadata()
try_decode_exact_source_metadata()
tryDecodeExactSourceMetadata()
tryDecodeExactSourceMetadata()
try_decode_exact_source_metadata()
Strip Tag Metadata stripExactSourceMetadata() stripExactSourceMetadata()
strip_exact_source_metadata()
strip_exact_source_metadata()
stripExactSourceMetadata()
stripExactSourceMetadata()
strip_exact_source_metadata()
Recover Original Source recoverEmbeddedExactSource() recoverEmbeddedExactSource()
recover_embedded_exact_source()
recover_embedded_exact_source()
recoverEmbeddedExactSource()
recoverEmbeddedExactSource()
recover_embedded_exact_source()
Check Tag Metadata hasEmbeddedExactSource() hasEmbeddedExactSource()
has_embedded_exact_source()
has_embedded_exact_source()
hasEmbeddedExactSource()
hasEmbeddedExactSource()
has_embedded_exact_source()
Unicode Normalization normalizeUnicode() normalizeUnicode()
normalize_unicode()
normalize_unicode()
normalizeUnicode()
Unicode::normalize()

5. Envelope APIs

Return TransliterationResult. Always set renderingIsInjective = false for script/plain views.

toDevanagari / to_devanagari

  • IAST → Devanagari
  • TransliterationResult
Parameters
Parameter Type Default Description
text string required Latin/IAST (or extended) source
options IastToDevanagariOptions defaults Profile + policies — see §13
inputNormalization UnicodeNormalizationForm nfd Applied before conversion
outputNormalization UnicodeNormalizationForm nfc Applied to visible rendered text

Issue attached: SOURCE_METADATA_REQUIRED_FOR_EXACT_REVERSE (info).

Dart: method on String. JS: second arg is { options, inputNormalization, outputNormalization }.

toGujarati / to_gujarati

  • IAST → Gujarati
  • TransliterationResult

Same shape as toDevanagari with IastToGujaratiOptions.

toPlainEnglish / to_plain_english

  • IAST → plain English
  • TransliterationResult

Uses IastPlainEnglishOptions. Result profile is hunterian or plainEnglish.

Issue: HUNTERIAN_VIEW_IS_INTRINSICALLY_LOSSY or PLAIN_ENGLISH_VIEW_IS_INTRINSICALLY_LOSSY (info).

Minimal multi-language example

import 'package:lipimala/lipimala.dart';

final r = 'Kṛṣṇa ā́tman'.toDevanagari();
print(r.rendered);          // कृष्ण आ॑त्मन्
print(r.restoreOriginal()); // Kṛṣṇa ā́tman

6. IAST → Devanagari (string API)

toDevanagariFromIast / to_devanagari_from_iast

  • string
  • optional metadata trailer
Parameters
Parameter Type Default
text string required
options IastToDevanagariOptions all defaults (§13)

When: you only need the rendered script string, or you will reverse later via metadata.

How exact reverse works: pass embedExactSourceMetadata: true, then call toExactIastFromDevanagari(tagged).

7. IAST → Gujarati (string API)

toGujaratiFromIast / to_gujarati_from_iast

Mirror of the Devanagari string API with IastToGujaratiOptions and Gujarati profile/policy enums.

Exact reverse: toExactIastFromGujarati.

8. IAST → plain English / Hunterian

toPlainEnglishFromIast / to_plain_english_from_iast

  • string
  • intrinsically lossy

ASCII-friendly transcription. Keep the envelope for exact Latin recovery. Options control final-a, jñ, ñ, glottal stop, Hunterian features — see §14.

8b. Bulk Array / List Transliteration API

Bulk Array / List Conversion Functions Across All 4 Ecosystems

Bulk convert an array, list, or sequence of text values (["Kṛṣṇa", "Rāma", "jñāna"]) in a single operation without manual iteration loops across all conversion directions:

  • Latin (IAST) → Devanagari / Gujarati / Plain English: toDevanagariFromIastList(), toGujaratiFromIastList(), toPlainEnglishFromIastList()
  • Brahmic (Devanagari / Gujarati) → Latin IAST: toCanonicalIastFromDevanagariList(), toCanonicalIastFromGujaratiList(), toIastFromDevanagariList(), toIastFromGujaratiList()
  • Direct Devanagari ↔ Gujarati: toCanonicalGujaratiFromDevanagariList(), toCanonicalDevanagariFromGujaratiList(), toGujaratiFromDevanagariList(), toDevanagariFromGujaratiList()
  • Result Envelopes: toDevanagariList(), toGujaratiList(), toPlainEnglishList()

Code Examples Across Languages

// Dart List Extension
final devaList = ['Kṛṣṇa', 'Rāma', 'jñāna'].toDevanagariFromIast();
// -> ['कृष्ण', 'राम', 'ज्ञान']

// JavaScript / Node.js
import { toDevanagariFromIastList, toCanonicalGujaratiFromDevanagariList } from 'lipimala';
const deva = toDevanagariFromIastList(['Kṛṣṇa', 'Rāma', 'jñāna']);
const gujr = toCanonicalGujaratiFromDevanagariList(deva);

# Python
from lipimala import to_devanagari_from_iast_list, to_canonical_iast_from_devanagari_list
deva = to_devanagari_from_iast_list(['Kṛṣṇa', 'Rāma', 'jñāna'])
iast = to_canonical_iast_from_devanagari_list(deva)

// PHP
use function Lipimala\toDevanagariFromIastList;
$deva = toDevanagariFromIastList(['Kṛṣṇa', 'Rāma', 'jñāna']);

9. Brahmic → IAST reverse

Lipimala provides three distinct reverse conversion strategies for translating Devanagari or Gujarati text back into Latin IAST. Choose between smart metadata-aware recovery, pure canonical visible reverse, or strict metadata verification.

Reverse IAST conversion functions
Function Signature Expected Parameters Output Type Behavior & Strategy
toIastFromDevanagari(text, options?)
to_iast_from_devanagari(text, options?)
text: string
options: ScriptToIastOptions?
string Smart Reverse: If an embedded exact-source metadata trailer is present and valid, recovers exact original Latin. Otherwise, performs canonical visible reverse transliteration.
toCanonicalIastFromDevanagari(text, options?)
to_canonical_iast_from_devanagari(text, options?)
text: string
options: ScriptToIastOptions?
string Canonical Reverse: Always performs deterministic visible reverse conversion from Devanagari to lower-case IAST, completely ignoring any embedded metadata trailer.
toExactIastFromDevanagari(text)
to_exact_iast_from_devanagari(text)
text: string string Strict Exact Recovery: Decodes and verifies the embedded metadata trailer. Returns exact original Latin input (with original casing/aliases). Throws/raises an exception if metadata is missing or checksum validation fails.
toIastFromGujarati(text, options?)
to_iast_from_gujarati(text, options?)
text: string
options: ScriptToIastOptions?
string Smart Reverse: Recovers exact original Latin if embedded metadata trailer is valid; falls back to canonical Gujarati → IAST visible reverse.
toCanonicalIastFromGujarati(text, options?)
to_canonical_iast_from_gujarati(text, options?)
text: string
options: ScriptToIastOptions?
string Canonical Reverse: Always performs visible reverse conversion from Gujarati to lower-case IAST, ignoring metadata trailers.
toExactIastFromGujarati(text)
to_exact_iast_from_gujarati(text)
text: string string Strict Exact Recovery: Decodes and verifies the Gujarati metadata trailer. Returns exact original Latin input. Throws/raises an error if trailer is missing or corrupted.

ScriptToIastOptions

Options object controlling reverse transliteration behavior. Parameter fields, default values, and effects are detailed in §15 Reverse options.

10. Direct Devanagari ↔ Gujarati

Direct script conversion maps characters natively between Devanagari and Gujarati. Because the two scripts have unequal Unicode repertoires, Lipimala supports direct-script metadata trailers (using markers DEV1 and GUJ1) for 100% exact round-trip source script recovery.

Direct script conversion & metadata helper functions
Function Signature Parameters Output Type Behavior & Description
toGujaratiFromDevanagari(input, options?)
to_gujarati_from_devanagari()
input: string
options: IndicScriptConversionOptions?
string Smart Direct Conversion: Converts Devanagari to Gujarati. If an exact Gujarati source trailer (GUJ1) is present, recovers original Gujarati; otherwise performs canonical conversion.
toCanonicalGujaratiFromDevanagari(input, options?)
to_canonical_gujarati_from_devanagari()
input: string
options: IndicScriptConversionOptions?
string Canonical Conversion: Maps Devanagari code points directly to Gujarati equivalents, ignoring any metadata trailers.
toExactGujaratiFromDevanagari(input)
to_exact_gujarati_from_devanagari()
input: string string Strict Exact Recovery: Decodes exact Gujarati source trailer (GUJ1). Returns exact original Gujarati input text. Throws/raises an error if trailer is missing or invalid.
hasExactGujaratiSourceMetadata(input)
has_exact_gujarati_source_metadata()
input: string bool Returns true if the input text contains a valid direct Gujarati exact-source metadata trailer (GUJ1).
toDevanagariFromGujarati(input, options?)
to_devanagari_from_gujarati()
input: string
options: IndicScriptConversionOptions?
string Smart Direct Conversion: Converts Gujarati to Devanagari. Recovers exact Devanagari if a DEV1 trailer is present; otherwise performs canonical conversion.
toCanonicalDevanagariFromGujarati(input, options?)
to_canonical_devanagari_from_gujarati()
input: string
options: IndicScriptConversionOptions?
string Canonical Conversion: Maps Gujarati code points directly to Devanagari equivalents, ignoring metadata trailers.
toExactDevanagariFromGujarati(input)
to_exact_devanagari_from_gujarati()
input: string string Strict Exact Recovery: Decodes exact Devanagari source trailer (DEV1). Returns exact original Devanagari text. Throws/raises an error if trailer is missing or invalid.
hasExactDevanagariSourceMetadata(input)
has_exact_devanagari_source_metadata()
input: string bool Returns true if the input text contains a valid direct Devanagari exact-source metadata trailer (DEV1).
visibleWithoutExactSourceMetadata(input)
visible_without_exact_source_metadata()
input: string string Strips any embedded metadata trailer (whether Latin LIT1, Devanagari DEV1, or Gujarati GUJ1) and returns clean visible script text.

11. Metadata & Unicode helpers

Low-level functions for manually manipulating embedded Unicode tag trailers, decoding checksummed metadata payloads, and performing Unicode 17.0.0 normalization and mark classification.

Shared metadata & Unicode utility functions
Function Signature Parameters & Types Output Type Usage & Behavior
embedExactSourceMetadata(rendered, originalSource)
embed_exact_source_metadata()
rendered: string
originalSource: string
string Manually attaches an invisible Unicode tag trailer encoding originalSource onto the end of rendered visible script string.
tryDecodeExactSourceMetadata(text)
try_decode_exact_source_metadata()
text: string EmbeddedExactSource | null Parses and verifies checksums of any embedded metadata trailer. Returns an EmbeddedExactSource object if valid, or null if missing/corrupted.
stripExactSourceMetadata(text)
strip_exact_source_metadata()
text: string string Strips any trailing invisible Unicode tag metadata sequence from text, returning pure display-only visible script string.
recoverEmbeddedExactSource(text)
recover_embedded_exact_source()
text: string string Decodes embedded metadata trailer and returns original source text. Throws/raises an exception if metadata is missing or invalid.
hasEmbeddedExactSource(text)
has_embedded_exact_source()
text: string bool Returns true if text ends with a valid, checksum-verified embedded exact-source metadata trailer.
normalizeUnicode(input, form)
normalize_unicode()
input: string
form: UnicodeNormalizationForm
string Performs canonical Unicode normalization (NFC, NFD, NFKC, or NFKD) using Unicode 17.0.0 rules.
isUnicodeCombiningMark(value)
is_unicode_combining_mark()
value: string | int (char/code point) bool Returns true if the specified character or code point is classified as a Unicode combining mark (Mn, Mc, or Me).
isEncodedVedicMark(value)
is_encoded_vedic_mark()
value: string | int (char/code point) bool Returns true if the specified character or code point is a recognized Vedic accent mark (e.g., svara, anudātta, svarita).

12. Result structures

TransliterationResult

Envelope fields and methods
Field / method Type Description
original string Exact source string from caller
normalizedInput string Source after input normalization
rendered string Converted view (may include trailer)
profile TransliterationProfile Profile used for this conversion
inputNormalization / outputNormalization UnicodeNormalizationForm Forms applied
renderingIsInjective bool Always false for these views
issues list of TransliterationIssue Diagnostics
originalCodePoints list<int> Integrity codes of original
restoreOriginal() string Returns original
hasErrors bool Any issue with severity error
toJson() / fromJson object / factory Serialize / rebuild with integrity check
toJsonText / fromJsonText string / factory JSON text form

JSON envelope shape

{
  "schema": "indic-script-converter/1" | "exact round-trip-indic-transliteration/1",
  "original": "Kṛṣṇa",
  "originalCodePoints": [75, 7771, 7779, 7751, 97],
  "normalizedInput": "...",
  "rendered": "कृष्ण",
  "profile": "extendedIndic",
  "inputNormalization": "nfd",
  "outputNormalization": "nfc",
  "renderingIsInjective": false,
  "issues": [
    { "code": "...", "message": "...", "severity": "info", "sourceRuneOffset": null }
  ]
}

TransliterationIssue

Issue object fields
Field Type Default
code string required
message string required
severity info | warning | error warning
sourceRuneOffset int | null null

EmbeddedExactSource

Fields: visibleText, originalSource.

13. Forward options (IAST → Deva / Gujr)

IastToDevanagariOptions / IastToGujaratiOptions

Forward conversion option fields
Field Values Default Effect
profile strictIast | iso15919Core | extendedIndic extendedIndic Accepted Latin inventory
unknownLatinPolicy passThrough | bracket | throwError passThrough Unknown Latin handling
digitPolicy preserveAscii | convertToScript preserveAscii ASCII vs script digits
punctuationPolicy preserve | indicDanda preserve Period → danda
omPolicy transliterateLetters | useOmSign transliterateLetters oṃ → letters vs ॐ/ૐ
ambiguousLPolicy context | preferVocalic | preferConsonant context Resolve ḷ
acceptAsciiLongVowels bool false Allow aa/ii/uu
acceptPlainSh bool true Plain sh
acceptPlainXAsKha bool true Compatibility for x
acceptWAsVa bool true Treat w as v
preserveVedicAccentMarks bool true Keep svara marks
collapseWhitespace bool false Collapse whitespace runs
embedExactSourceMetadata bool false Append exact-source trailer

Gujarati types mirror the same fields with Gujarati-prefixed enum type names.

14. Plain-English options

IastPlainEnglishOptions

Plain-English / Hunterian option fields
Field Values Default Effect
finalA keep | drop | smart smart Trailing inherent a
jna gya | jnya | jna gya jñ conjunct
nya na | nya | gna na Standalone ñ
profile strictIast | extendedIndic | hunterian extendedIndic Input inventory / style
glottalStop remove | apostrophe remove ʔ handling
convertCToCh bool true c → ch style
assimilateAnusvara bool true Anusvara assimilation
removeAvagraha bool true Strip avagraha-like marks
collapseWhitespace bool false Whitespace collapse
enableInternalSchwaSyncope bool false Hunterian schwa drop
useWForVAfterConsonants bool false Hunterian v/w
preserveVedicAccentMarks bool false Usually stripped
keepFinalAForWords set/list empty Force keep final a

15. Reverse options

ScriptToIastOptions

Options class controlling Brahmic → IAST reverse transliteration (Devanagari → IAST and Gujarati → IAST).

ScriptToIastOptions parameter fields & defaults
Field Name Type / Allowed Values Default Value Description & Behavior
targetProfile TransliterationProfile
(strictIast | extendedIndic)
strictIast Target character inventory profile for visible reverse mapping. strictIast uses standard academic IAST diacritics.
preserveVedicAccents bool true When true, preserves Vedic accent marks (svara, anudātta, svarita) in the reversed IAST output.
unknownPolicy passThrough | bracket | throwError passThrough Policy for unmapped input characters. passThrough keeps them as-is; bracket wraps them in [...]; throwError raises an exception.
digitPolicy preserveScriptDigits | convertToAsciiDigits preserveScriptDigits Determines whether Indic script digits (e.g. ०-९ or ૦-૯) are converted to ASCII digits (0-9) or preserved.
punctuationPolicy preserveDanda | convertToPeriod preserveDanda Determines whether Indic dandas (, ) are converted to standard periods (.) or preserved.
collapseWhitespace bool false When true, collapses multiple consecutive whitespace characters into a single space.
ignoreEmbeddedMetadata bool false When true, forces toIastFromDevanagari() / toIastFromGujarati() to ignore any embedded metadata trailer and execute canonical visible reverse.

16. Direct-script options

IndicScriptConversionOptions

Direct Devanagari ↔ Gujarati options
Field Values Default Effect
inputNormalization preserve | nfc | nfd nfd Input normalize
outputNormalization preserve | nfc | nfd nfc Output normalize
unknownPolicy preserve | throwError preserve Unmapped chars
digitPolicy convertToTarget | preserveSource convertToTarget Digit block conversion
collapseWhitespace bool false Whitespace collapse
embedExactSourceMetadata bool false Typed exact source trailer

17. Dart-specific notes

The Dart implementation (package:lipimala) targets Dart 3.0+ and Flutter. It exposes both functional APIs and natural extensions on String.

  • Primary Barrel Import: import 'package:lipimala/lipimala.dart'; (exports all converters, options, enums, and result models).
  • String Extension APIs: Call 'Kṛṣṇa'.toDevanagari(), 'Kṛṣṇa'.toGujarati(), 'Kṛṣṇa'.toPlainEnglish() directly on String instances.
  • String Subclass Returns: Forward string converters return IastToDevanagariString, IastToGujaratiString, and IastToPlainEnglish subclasses which provide .toExactIast() and .restoreOriginal() helper methods.
  • Option Constructors: Options use named parameters with defaults: IastToDevanagariOptions(profile: DevanagariRomanizationProfile.extendedIndic, embedExactSourceMetadata: true).
  • Error Handling: Throws ArgumentError on invalid options or corrupted metadata trailers.

Complete Runnable Dart Example

import 'package:lipimala/lipimala.dart';

void main() {
  const input = 'Kṛṣṇa / Kr̥ṣṇa / ḫāna';

  // 1. Extension method envelope conversion
  final result = input.toDevanagari(
    options: const IastToDevanagariOptions(embedExactSourceMetadata: true),
  );
  print('Rendered: ${result.rendered}');
  print('Restored: ${result.restoreOriginal()}');

  // 2. Direct script conversion
  final gujarati = toGujaratiFromDevanagari(
    result.rendered,
    options: const IndicScriptConversionOptions(embedExactSourceMetadata: true),
  );
  print('Gujarati: $gujarati');

  // 3. Exact recovery from Gujarati
  final exactDeva = toExactDevanagariFromGujarati(gujarati);
  assert(exactDeva == result.rendered);
}

18. JavaScript-specific notes

The JavaScript implementation supports Node.js ≥ 20 and modern browsers via ES Modules (ESM) and CommonJS (CJS).

  • Module Imports: ESM: import { toDevanagari, toDevanagariFromIast } from 'lipimala';
    CommonJS: const { toDevanagari, toDevanagariFromIast } = require('lipimala');
  • Dual Export Naming: Exports both camelCase (toDevanagariFromIast) and snake_case (to_devanagari_from_iast) aliases for all functions.
  • Flexible Options: Option parameters accept instantiated class objects (new IastToDevanagariOptions({...})) or plain JS objects ({ embedExactSourceMetadata: true }). Both camelCase and snake_case keys are supported.
  • String Subclasses: String converters return instances of IastToDevanagariString, IastToGujaratiString, or IastToPlainEnglish extending native String, offering .toExactIast().
  • Error Handling: Throws standard TypeError or Error on bad arguments or metadata decoding failures.

Complete Runnable JavaScript Example

import {
  toDevanagari,
  toGujaratiFromDevanagari,
  toExactDevanagariFromGujarati,
  IastToDevanagariOptions
} from 'lipimala';

const input = 'Kṛṣṇa / Kr̥ṣṇa / ḫāna';

// 1. Envelope conversion
const result = toDevanagari(input, { embedExactSourceMetadata: true });
console.log('Rendered:', result.rendered);
console.log('Restored:', result.restoreOriginal());

// 2. Direct script conversion Devanagari -> Gujarati
const guj = toGujaratiFromDevanagari(result.rendered, { embedExactSourceMetadata: true });
console.log('Gujarati:', guj);

// 3. Exact source recovery
const exactDeva = toExactDevanagariFromGujarati(guj);
console.assert(exactDeva === result.rendered);

19. Python-specific notes

The Python package (pip install lipimala) requires Python ≥ 3.12, utilizing modern type hints and dataclasses.

  • Imports: Main & direct script converters: from lipimala import to_devanagari, to_devanagari_from_iast, to_devanagari_from_gujarati
  • Function & Enum Aliases: Supports standard Python PEP 8 snake_case functions and camelCase aliases for cross-language parity. Enums inherit (str, Enum) and support both EXTENDED_INDIC and extendedIndic member access.
  • Dataclass Options: Options are Python @dataclass objects instantiated with keyword arguments: IastToDevanagariOptions(embed_exact_source_metadata=True).
  • String Subclass Returns: Returns IastToDevanagariString, IastToGujaratiString, IastToPlainEnglish subclasses of str with .to_exact_iast() / .restore_original().
  • Error Handling: Raises ValueError on invalid option configurations or corrupted metadata.

Complete Runnable Python Example

from lipimala import (
    to_devanagari,
    IastToDevanagariOptions,
    to_gujarati_from_devanagari,
    to_exact_devanagari_from_gujarati,
    IndicScriptConversionOptions
)

input_text = "Kṛṣṇa / Kr̥ṣṇa / ḫāna"

# 1. Envelope conversion
result = to_devanagari(input_text, options=IastToDevanagariOptions(embed_exact_source_metadata=True))
print("Rendered:", result.rendered)
print("Restored:", result.restore_original())

# 2. Direct script conversion
gujarati = to_gujarati_from_devanagari(
    result.rendered,
    options=IndicScriptConversionOptions(embed_exact_source_metadata=True)
)
print("Gujarati:", gujarati)

# 3. Exact recovery
exact_deva = to_exact_devanagari_from_gujarati(gujarati)
assert exact_deva == result.rendered

20. PHP-specific notes

The PHP port (composer require jayeshmepani/lipimala) requires PHP ≥ 8.3 with strict typing throughout.

  • Namespace & Autoload: Namespace Lipimala. Import functions with use function Lipimala\toDevanagariFromIast;.
  • Dual Function Aliases: Supports both toDevanagariFromIast() and to_devanagari_from_iast() namespaced functions.
  • Final Readonly Options: Options are final readonly class instances with promoted constructor properties and default values. Options parameters are nullable (pass null for defaults).
  • Zero Runtime Dependencies: Pure PHP code with bundled Unicode 17.0.0 data tables; does not require mbstring or intl extensions.
  • Error Handling: Throws InvalidArgumentException on invalid parameters or failed metadata verification.

Complete Runnable PHP Example

<?php

declare(strict_types=1);

require __DIR__ . '/vendor/autoload.php';

use IndicScriptConverter\IastToDevanagariOptions;
use IndicScriptConverter\IndicScriptConversionOptions;
use function IndicScriptConverter\toDevanagari;
use function IndicScriptConverter\toGujaratiFromDevanagari;
use function IndicScriptConverter\toExactDevanagariFromGujarati;

$input = 'Kṛṣṇa / Kr̥ṣṇa / ḫāna';

// 1. Envelope conversion
$result = toDevanagari($input, new IastToDevanagariOptions(embedExactSourceMetadata: true));
echo "Rendered: {$result->rendered}
";
echo "Restored: " . $result->restoreOriginal() . "
";

// 2. Direct script conversion
$gujarati = toGujaratiFromDevanagari(
    $result->rendered,
    new IndicScriptConversionOptions(embedExactSourceMetadata: true)
);
echo "Gujarati: {$gujarati}
";

// 3. Exact recovery
$exactDeva = toExactDevanagariFromGujarati($gujarati);
assert($exactDeva === $result->rendered);

21. Example files

Each runtime has a comprehensive example that exercises public APIs with option permutations.

Runnable public-API example entry points
Language Path Run
Python python/examples/public_api_examples.py PYTHONPATH=python python3 python/examples/public_api_examples.py
JavaScript javascript/examples/public-api-examples.js node javascript/examples/public-api-examples.js
Dart dart/example/public_api_examples.dart cd dart && dart run example/public_api_examples.dart
PHP php/examples/public_api_examples.php php php/examples/public_api_examples.php

What each example covers

  1. Envelope APIs + JSON round-trip + normalization permutations
  2. IAST→Devanagari option permutations
  3. IAST→Gujarati option permutations
  4. Plain English / Hunterian option permutations
  5. Reverse canonical / smart / exact
  6. Direct Deva↔Gujr with policies + exact recovery
  7. Metadata helper functions

22. Errors & recovery matrix

Common failure modes and outcomes
Situation Typical outcome
unknownLatinPolicy = throwError Throws / raises on unmapped Latin
unknownPolicy = throwError (direct) Throws / raises on unmapped script chars
toExact* without trailer FormatException / TypeError / ValueError / InvalidArgumentException
toExact* with empty string Returns empty string
fromJson integrity failure Throws; schema or code-point mismatch
Tampered metadata trailer Checksum fails; treated as no exact source