@sahabaplus/mushaf-engine
Version:
TypeScript implementation of a Quran Mushaf navigation engine
95 lines (94 loc) • 3.5 kB
TypeScript
import { Mushaf, QuranMetadata, SuraInfo, Verse } from "../mushaf";
import { Direction, NavigationResult } from "../navigation";
import { IMushafEngine, NavigateParams } from "./iMushafEngine";
/**
* Basic implementation of the Mushaf navigation engine
*/
export declare class BaseMushafEngine implements IMushafEngine {
mushaf: Mushaf;
quranMetadata: QuranMetadata;
/**
* Create a new BaseMushafEngine with the given Mushaf
*
* @param mushaf - The Mushaf to navigate through
*/
constructor(mushaf: Mushaf);
/**
* Get metadata about a specific Sura
*
* @param suraNumber - Sura number (1-114)
* @returns Information about the specified Sura, or undefined if not found
*/
getSuraInfo(suraNumber: number): SuraInfo | undefined;
/**
* Find the next verse from a given verse in the specified direction
*
* @param params - Object containing sura_number, verse_number, and direction
* @returns The next verse or undefined if at the end
*/
nextVerse({ sura_number, verse_number, direction, }: {
sura_number: number;
verse_number: number;
direction: Direction;
}): Verse | undefined;
/**
* Find a verse in the mushaf and return its location (Verse, page, index_of_verse)
*
* @param suraNumber - Sura number (1-114)
* @param verseNumber - Verse number within the sura
* @returns The verse and its location, or undefined if not found
*/
private findVerse;
/**
* Calculate the lines between start and end verses
*
* @param startSura - Start sura number
* @param startVerse - Start verse number
* @param endSura - End sura number
* @param endVerse - End verse number
* @param direction - Direction of navigation
* @returns Number of lines between the two verses
*/
calculateLines(startSura: number, startVerse: number, endSura: number, endVerse: number, direction: Direction): number;
/**
* Calculate the lines taken by a verse including any sura headers
*
* @param verse - The verse to calculate lines for
* @returns The total number of lines taken by the verse
*/
private calculateVerseLines;
/**
* Check if verses are in opposite direction
*
* @param startSura - Start sura number
* @param endSura - End sura number
* @param direction - Direction of navigation
* @returns True if verses are in opposite direction
*/
private static isInOppositeDirection;
/**
* Determine which last of sura result to prefer
*
* @param lastOfSura - Existing last of sura result, if any
* @param currentVerse - Current verse being processed
* @param direction - Direction of navigation
* @returns The preferred last of sura result
*/
private preferLastOfSura;
/**
* Determine which last of page result to prefer
*
* @param lastOfPage - Existing last of page result, if any
* @param currentVerse - Current verse being processed
* @param direction - Direction of navigation
* @returns The preferred last of page result
*/
private preferLastOfPage;
/**
* Navigate from a verse by a specified number of lines in the given direction
*
* @param params - Navigation parameters
* @returns Navigation result containing the verse at the destination after navigation
*/
navigate(params: NavigateParams): NavigationResult;
}