Table of Contents

Namespace ModernLrc.Model

Classes

EquatableArray

Static factory invoked by CollectionBuilderAttribute for collection-expression construction.

LrcDocumentExtensions

Extension helpers for traversing and querying an LrcDocument. These are the playback hot path — a karaoke / lyric-display consumer typically calls FindLineAt(LrcDocument, TimeSpan) per video frame.

LrcEnhancedLine

An Enhanced LRC line carrying word-level timing. Each word's Text includes trailing whitespace up to the next < marker so concatenation reproduces the source line exactly.

LrcLine

A single lyric line. Sealed hierarchy: every LrcLine is exactly one of LrcPlainLine or LrcEnhancedLine.

LrcMetadata

Parsed document metadata: strongly-typed accessors for known ID tags (last-wins on conflict in source order) plus the verbatim RawTags collection containing every tag the parser encountered, in source order.

LrcPlainLine

A simple LRC line with a single text body verbatim from after the last ] to the line terminator (no trim).

Structs

EquatableArray<T>

Wraps an ImmutableArray<T> with element-wise content equality so records that contain it auto-generate correct equality. The default struct value normalizes to Empty for read operations.

LrcTag

An ID tag in source order. Key is normalized to lowercase invariant by the parser; Value is verbatim.

LrcTimestamp

Non-negative monotonic time offset within an LRC document, stored as 100ns ticks (matching Ticks). LRC syntax has no negative form, so every factory enforces ≥ 0; LrcDocumentExtensions.GetEffectiveTime returns TimeSpan (signed) for offset application.

LrcWord

One word in an Enhanced LRC line. Text includes any trailing whitespace up to the next < marker or line end so that string.Concat(words.Select(w => w.Text)) reproduces the line text exactly.

Enums

LrcVoice

Walaoke voice marker carried on lyric lines.