public function testLineNumber2VerseNumber() { $usfm = <<<EOD \\id MIC EOD; $this->assertEquals(0, Filter_Usfm::lineNumber2VerseNumber($usfm, 0)); $usfm = <<<EOD \\id MIC \\v 1 Verse EOD; $this->assertEquals(1, Filter_Usfm::lineNumber2VerseNumber($usfm, 1)); $usfm = <<<EOD \\v 1 Verse EOD; $this->assertEquals(1, Filter_Usfm::lineNumber2VerseNumber($usfm, 0)); $usfm = <<<EOD \\p \\v 3 Verse 3 (out of order). \\v 1 Verse 1. \\v 2 Verse 1. EOD; $this->assertEquals(0, Filter_Usfm::lineNumber2VerseNumber($usfm, 0)); $this->assertEquals(3, Filter_Usfm::lineNumber2VerseNumber($usfm, 1)); $this->assertEquals(1, Filter_Usfm::lineNumber2VerseNumber($usfm, 2)); $this->assertEquals(2, Filter_Usfm::lineNumber2VerseNumber($usfm, 3)); }
public static function offset2verseNumber($usfm, $offset) { $totalOffset = 0; $lines = explode("\n", $usfm); foreach ($lines as $lineNumber => $line) { $totalOffset += mb_strlen($line); if ($totalOffset >= $offset) { return Filter_Usfm::lineNumber2VerseNumber($usfm, $lineNumber); } // Add 1 for new line. $totalOffset += 1; } return 0; }