Skip to content

vyasa-patha CLI & API Reference

vyasa-patha is the recitation engine in vyutils for generating Vedic and Classical Sanskrit recitation modes (Prakṛti and Vikṛti pāṭhas). It parses Pada-pāṭha texts, detects Pāṇinian Pragṛhya vowels, formats Parigraha (iti) clauses, applies forward Sandhi, and outputs multi-script recitations.


Terminal window
cargo build --release -p vyasa-patha
cargo install --path crates/vyasa-patha

Binary location: ~/.cargo/bin/vyasa-patha


Terminal window
vyasa-patha [OPTIONS] [TEXT]
cat <pada_file.txt> | vyasa-patha [OPTIONS]

If [TEXT] is provided as an argument, it is processed directly. If omitted, vyasa-patha reads Pada-pāṭha from stdin until EOF.


Flag Long Option Values Default Description
-m --mode krama | pada | jata | ghana krama Recitation mode to generate.
-t --to <SCRIPT> devanagari Target script format (e.g. telugu, kannada, grantha, iast, iso15919).
-s --steps flag off Emit numbered steps line-by-line rather than continuous text.
-h --help — — Print help information and exit.
-V --version — — Print version information and exit.

Terminal window
vyasa-patha "अ॒ग्निम् । ई॒ळे॒ । पु॒रो-हि॑तम् । य॒ज्ञस्य॑ । दे॒वम् । ऋ॒त्विज॑म् ।"

Output:

अ॒ग्निमी॑ळे । ई॒ळे॒ पु॒रोहि॑तम् । पु॒रो-हि॑तम् । पु॒रोहि॑तमिति॑ पु॒रो-हि॑तम् । पु॒रोहि॑तं य॒ज्ञस्य॑ । य॒ज्ञस्य॑ दे॒वम् । दे॒वमृ॒त्विज॑म् । ऋ॒त्विज॒मित्यृ॒त्विज॑म् ॥
Terminal window
vyasa-patha "अ॒ग्निम् । ई॒ळे॒ । पु॒रो-हि॑तम् ।" --steps

Output:

1. (1-2) अ॒ग्निमी॑ळे
2. (2-3) ई॒ळे॒ पु॒रोहि॑तम्
3. (3) पु॒रो-हि॑तम्
4. (3-Par) पु॒रोहि॑तमिति॑ पु॒रो-हि॑तम्

Generate Krama-pāṭha directly in Telugu script:

Terminal window
vyasa-patha "अ॒ग्निम् । ई॒ळे॒ । पु॒रो-हि॑तम् ।" --to telugu --steps

Output:

1. (1-2) అ॒గ్నిమీ॑ళే
2. (2-3) ఈ॒ళే॒ పు॒రోహితమ్
3. (3) పు॒రో-హితమ్
4. (3-Par) పు॒రోహితమితి॑ పు॒రో-హితమ్

Generate in Western Academic Roman (IAST):

Terminal window
vyasa-patha "अ॒ग्निम् । ई॒ळे॒ ।" --to iast

Output:

a̱gnimī̱ḷe̱ | ī̱ḷe̱ ití ī̱ḷe̱ ||

Add vyasa-patha and vyasa-lipi to your Cargo.toml:

[dependencies]
vyasa-patha = { version = "0.1.0" }
vyasa-lipi = { version = "0.1.0" }

Generates continuous Krama-pāṭha text in Devanagari with daṇḍa delimiters.

use vyasa_patha::generate_krama;
let output = generate_krama("अ॒ग्निम् । ई॒ळे॒ । पु॒रो-हि॑तम् ।");

generate_krama_in_script(pada_text: &str, script: Script) -> String

Section titled “generate_krama_in_script(pada_text: &str, script: Script) -> String”

Generates continuous Krama-pāṭha in any target script supported by vyasa-lipi.

use vyasa_patha::generate_krama_in_script;
use vyasa_lipi::Script;
let telugu = generate_krama_in_script("अ॒ग्निम् । ई॒ळे॒ ।", Script::Telugu);

Generates continuous Jaṭā-pāṭha text ($1\text{-}2, 2\text{-}1, 1\text{-}2$) in Devanagari with forward and reverse Sandhi.

use vyasa_patha::generate_jata;
let jata = generate_jata("अ॒ग्निम् । ई॒ळे॒ । पु॒रो-हि॑तम् ।");

generate_jata_in_script(pada_text: &str, script: Script) -> String

Section titled “generate_jata_in_script(pada_text: &str, script: Script) -> String”

Generates continuous Jaṭā-pāṭha in any target script supported by vyasa-lipi.

Generates continuous Ghana-pāṭha text. Each window of three padas is Jaṭā plus triples (1-2, 2-1, 1-2-3, 3-2-1, 1-2-3); the last pair falls back to Jaṭā.

use vyasa_patha::generate_ghana;
let ghana = generate_ghana("अ॒ग्निम् । ई॒ळे॒ । पु॒रो-हि॑तम् ।");

generate_ghana_in_script(pada_text: &str, script: Script) -> String

Section titled “generate_ghana_in_script(pada_text: &str, script: Script) -> String”

Generates continuous Ghana-pāṭha in any target script supported by vyasa-lipi.


2. Verse-Level & Mid-Level Prakṛti / Vikṛti Functions

Section titled “2. Verse-Level & Mid-Level Prakṛti / Vikṛti Functions”

generate_krama_for_verse(pada_verse: &str) -> Vec<KramaStep>

Section titled “generate_krama_for_verse(pada_verse: &str) -> Vec<KramaStep>”

Generates complete Krama steps for a multi-hemistich verse. Strictly respects ardharca boundaries (daṇḍa । pauses): hemistichs are never chained across ।, terminal padas before । receive Parigraha, and compounds receive Parigraha.

generate_jata_for_verse(pada_verse: &str) -> Vec<JataStep>

Section titled “generate_jata_for_verse(pada_verse: &str) -> Vec<JataStep>”

Generates complete Jaṭā steps for a multi-hemistich verse ($1\text{-}2, 2\text{-}1, 1\text{-}2$), respecting ardharca boundaries and compound Parigrahas.

generate_jata_patha(padas: &[Pada]) -> Vec<JataStep>

Section titled “generate_jata_patha(padas: &[Pada]) -> Vec<JataStep>”

Permutes a slice of Pada elements into canonical JataStep tokens with forward and reverse Sandhi.

generate_ghana_for_verse(pada_verse: &str) -> Vec<GhanaStep>

Section titled “generate_ghana_for_verse(pada_verse: &str) -> Vec<GhanaStep>”

Generates complete Ghana steps for a multi-hemistich verse, respecting ardharca boundaries. GhanaStep is Jaṭā plus third_index / forward_triple / reverse_triple.

generate_ghana_patha(padas: &[Pada]) -> Vec<GhanaStep>

Section titled “generate_ghana_patha(padas: &[Pada]) -> Vec<GhanaStep>”

Permutes a slice of Pada elements into canonical GhanaStep tokens.

parse_verse_hemistichs(input: &str) -> Vec<Vec<Pada>>

Section titled “parse_verse_hemistichs(input: &str) -> Vec<Vec<Pada>>”

Splits a Pada-pāṭha verse by hemistich daṇḍas (। or ॥) and parses each hemistich into its own Vec<Pada>.

parse_pada_patha(input: &str) -> Vec<Pada>

Section titled “parse_pada_patha(input: &str) -> Vec<Pada>”

Parses a raw Pada-pāṭha string into individual Pada structs, resolving accents and compound hyphenation.

generate_krama_patha(padas: &[Pada]) -> Vec<KramaStep>

Section titled “generate_krama_patha(padas: &[Pada]) -> Vec<KramaStep>”

Permutes a slice of Pada elements into canonical KramaStep tokens with compound Parigraha and terminal Parigraha clauses.

format_krama_patha(steps: &[KramaStep]) -> String

Section titled “format_krama_patha(steps: &[KramaStep]) -> String”

Formats a slice of KramaStep tokens into continuous recitation text separated by single daṇḍas (।) and terminated by a double daṇḍa (॥).


detect_pragrhya(pada: &Pada) -> Option<PragrhyaType>

Section titled “detect_pragrhya(pada: &Pada) -> Option<PragrhyaType>”

Evaluates whether a word is Pragṛhya according to Pāṇinian sūtras:

  • DualEnding (Pāṇini 1.1.11)
  • PronounAdas (Pāṇini 1.1.12)
  • ArchaicPronoun (Pāṇini 1.1.13)
  • ParticleU (Pāṇini 1.1.13–14)
  • ParticleO (Pāṇini 1.1.15)

Constructs a canonical Parigraha (iti) clause for a Pada:

  • Simple pada: पदम् + इति॑ + पदम्
  • Terminal m assimilation: पदम् → पदमिति॑ पदम्
  • Compound decomposition: रत्न॒-धात॑मम् → रत्न॒धात॑ममिति॑ रत्न॒-धात॑मम्
  • Particle u: ऊँ॒ इति॑ उ

apply_forward_sandhi(p1: &Pada, p2: &Pada) -> String

Section titled “apply_forward_sandhi(p1: &Pada, p2: &Pada) -> String”

Applies authentic Vedic euphonic combination across adjacent padas:

  • Pāṇini 8.4.66 (udāttād anudāttasya svaritaḥ): Shifts initial anudātta of p2 to svarita if p1 ends in udātta (अ॒ग्निम् + ई॒ळे॒ $\to$ अ॒ग्निमी॑ळे).
  • Pāṇini 8.4.67 Exception: Suppresses the svarita shift if p2 contains a following udātta/svarita (दे॒वम् + ऋ॒त्विज॑म् $\to$ दे॒वमृ॒त्विज॑म्).
  • Pronoun Visarga Dropping: Pronoun सः drops visarga before consonants (Pāṇini 6.1.132).
  • Pragṛhya Immunity: Sandhi blocked if p1.is_pragrhya().
  • Final m Assimilation: Merges into vowels, becomes Anusvāra before consonants.
  • Unicode Accent Sequences: Guarantees Anusvāra precedes combining pitch marks (\u0902\u0951).

pub struct Pada {
pub raw: String,
pub clean: String,
pub compound_parts: Vec<String>,
pub pragrhya: Option<PragrhyaType>,
}
  • raw: The original pada text preserving all Vedic pitch accents and hyphens.
  • clean: Punctuation- and accent-stripped Devanagari text for dictionary lookup and grammatical classification.
  • compound_parts: Individual members if the pada is an analyzed compound (samāsa).
  • pragrhya: Some(PragrhyaType) if the word has Pragṛhya status.
pub struct KramaStep {
pub first_index: usize,
pub second_index: Option<usize>,
pub text: String,
pub is_parigraha: bool,
}
  • first_index: 1-based index of the first pada.
  • second_index: 1-based index of the second pada (None for Parigraha steps).
  • text: Sandhi-joined recitation text for this step.
  • is_parigraha: true if this step represents an iti closure clause.

Jaṭā fields plus optional triples for the third pada:

pub struct GhanaStep {
pub first_index: usize,
pub second_index: Option<usize>,
pub third_index: Option<usize>,
pub forward_text: String,
pub reverse_text: String,
pub forward_triple: String,
pub reverse_triple: String,
pub text: String,
pub is_parigraha: bool,
}
  • third_index: 1-based index of the third pada (None for Jaṭā fallback of the last pair, and for Parigraha).
  • forward_triple / reverse_triple: sequential sandhi for 1-2-3 and 3-2-1 (empty when there is no third pada).