UNPKG

@sahabaplus/mushaf-engine

Version:

TypeScript implementation of a Quran Mushaf navigation engine

95 lines (94 loc) 3.5 kB
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; }