in binding/HarfBuzzSharp/Buffer.cs [293:344]
public void ReverseRange (int start, int end) =>
HarfBuzzApi.hb_buffer_reverse_range (Handle, (uint)start, (uint)(end == -1 ? Length : end));
public void ReverseClusters () => HarfBuzzApi.hb_buffer_reverse_clusters (Handle);
public string SerializeGlyphs () =>
SerializeGlyphs (0, -1, null, SerializeFormat.Text, SerializeFlag.Default);
public string SerializeGlyphs (int start, int end) =>
SerializeGlyphs (start, end, null, SerializeFormat.Text, SerializeFlag.Default);
public string SerializeGlyphs (Font font) =>
SerializeGlyphs (0, -1, font, SerializeFormat.Text, SerializeFlag.Default);
public string SerializeGlyphs (Font font, SerializeFormat format, SerializeFlag flags) =>
SerializeGlyphs (0, -1, font, format, flags);
public unsafe string SerializeGlyphs (int start, int end, Font font, SerializeFormat format, SerializeFlag flags)
{
if (Length == 0)
throw new InvalidOperationException ("Buffer should not be empty.");
if (ContentType != ContentType.Glyphs)
throw new InvalidOperationException ("ContentType should be of type Glyphs.");
if (end == -1)
end = Length;
using var buffer = MemoryPool<byte>.Shared.Rent ();
using var pinned = buffer.Memory.Pin ();
var bufferSize = buffer.Memory.Length;
var currentPosition = (uint)start;
var builder = new StringBuilder (bufferSize);
while (currentPosition < end) {
uint consumed;
currentPosition += HarfBuzzApi.hb_buffer_serialize_glyphs (
Handle,
(uint)currentPosition,
(uint)end,
pinned.Pointer,
(uint)bufferSize,
&consumed,
font?.Handle ?? IntPtr.Zero,
format,
flags);
builder.Append (Marshal.PtrToStringAnsi ((IntPtr)pinned.Pointer, (int)consumed));
}
return builder.ToString ();
}