Files
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

69 lines
1.7 KiB
C#

// RichTextKit
// Copyright © 2019-2020 Topten Software. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this product except in compliance with the License. You may obtain
// a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.
using System;
using System.Collections.Generic;
using System.Text;
using Topten.RichTextKit.Utils;
namespace Topten.RichTextKit
{
internal struct BidiRun
{
public Directionality Direction;
public int Start;
public int Length;
public int End => Start + Length;
public override string ToString()
{
return $"{Start} - {End} - {Direction}";
}
public static IEnumerable<BidiRun> CoalescLevels( Slice<sbyte> levels )
{
if ( levels.Length == 0 )
yield break;
int startRun = 0;
sbyte runLevel = levels[0];
for ( int i = 1; i < levels.Length; i++ )
{
if ( levels[i] == runLevel )
continue;
// End of this run
yield return new BidiRun()
{
Direction = (runLevel & 0x01) == 0 ? Directionality.L : Directionality.R,
Start = startRun,
Length = i - startRun,
};
// Move to next run
startRun = i;
runLevel = levels[i];
}
yield return new BidiRun()
{
Direction = (runLevel & 0x01) == 0 ? Directionality.L : Directionality.R,
Start = startRun,
Length = levels.Length - startRun,
};
}
}
}