Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }