in ExampleGallery/CustomTextLayouts.xaml.cs [332:368]
public void MoveNext()
{
int fontRunBoundary = GetBoundary(fontRuns[fontRunIndex].Key);
int scriptRunBoundary = GetBoundary(scriptRuns[scriptRunIndex].Key);
int bidiRunBoundary = GetBoundary(bidiRuns[bidiRunIndex].Key);
int soonestBoundary = characterRange.CharacterIndex + characterRange.CharacterCount;
if (soonestBoundary == fontRunBoundary)
{
fontRunIndex++;
if (fontRunIndex < fontRuns.Count)
fontRunBoundary = GetBoundary(fontRuns[fontRunIndex].Key);
}
if (soonestBoundary == scriptRunBoundary)
{
scriptRunIndex++;
if (scriptRunIndex < scriptRuns.Count)
scriptRunBoundary = GetBoundary(scriptRuns[scriptRunIndex].Key);
}
if (soonestBoundary == bidiRunBoundary)
{
bidiRunIndex++;
if (bidiRunIndex < bidiRuns.Count)
bidiRunBoundary = GetBoundary(bidiRuns[bidiRunIndex].Key);
}
int nextBoundary = Min(fontRunBoundary, scriptRunBoundary, bidiRunBoundary);
characterRange.CharacterIndex += characterRange.CharacterCount;
characterRange.CharacterCount = nextBoundary - characterRange.CharacterIndex;
}