/// <summary> /// Odczytuje i zwraca kolejny wpis z timingiem, z edytowanej zawartości tekstowej napisów. /// </summary> /// <returns>Zwraca kolejną wpis, a jeśli nie ma już więcej wpisów to null.</returns> public override TimedEntry NextTimedEntry() { if (entryReadingDirection == ReadingDirection.Backward) { UpdateContent(); } entryReadingDirection = ReadingDirection.Forward; //(Optymalizacja) Kolejne wpisy są dopasowywane w orygianlnym content, aby zapobiec każdorazowemu wywoływaniu //ToString() zmiennej modifiedContent. Jedak aby wpisy zawierały poprawne informacje o pozycji w rzeczywistej zmodyfikowanej zawartości (modifiedContent), //konieczne jest dodanie delty długości (modifiedContentLengthDelta) do pozycji zwaracanego wpisu. AssEventEntry nextEntry = null; Match entryMatch = timedEntryExpressionForward.Match(content, nextEntryIndex); if (entryMatch.Success) { nextEntry = new AssEventEntry(entryMatch.Value, entryMatch.Index + modifiedContentLengthDelta); currentEntryInitialStart = entryMatch.Index; currentEntryInitialLength = entryMatch.Value.Length; currentEntryNumber++; } CurrentEntry = nextEntry; if (CurrentEntry != null) { nextEntryIndex = currentEntryInitialStart + currentEntryInitialLength; } return(nextEntry); }
/// <summary> /// Odczytuje i zwraca poprzedni wpis z timingiem, w stosunku do bieżącego, z edytowanej zawartości tekstowej napisów. /// </summary> /// <returns>Zwraca poprzedni wpis, a jeśli nie ma już więcej wpisów to null.</returns> public override TimedEntry PreviousTimedEntry() { if (entryReadingDirection == ReadingDirection.Forward) { UpdateContent(); } entryReadingDirection = ReadingDirection.Backward; AssEventEntry previousEntry = null; Match entryMatch = timedEntryExpressionBackward.Match(content, nextEntryIndex); if (entryMatch.Success) { previousEntry = new AssEventEntry(entryMatch.Value, entryMatch.Index + modifiedContentLengthDelta); currentEntryInitialStart = entryMatch.Index; currentEntryInitialLength = entryMatch.Value.Length; currentEntryNumber--; } CurrentEntry = previousEntry; if (CurrentEntry != null) { nextEntryIndex = currentEntryInitialStart; } return(previousEntry); }