ArabicRt 0.1.1
dotnet add package ArabicRt --version 0.1.1
NuGet\Install-Package ArabicRt -Version 0.1.1
<PackageReference Include="ArabicRt" Version="0.1.1" />
<PackageVersion Include="ArabicRt" Version="0.1.1" />
<PackageReference Include="ArabicRt" />
paket add ArabicRt --version 0.1.1
#r "nuget: ArabicRt, 0.1.1"
#:package ArabicRt@0.1.1
#addin nuget:?package=ArabicRt&version=0.1.1
#tool nuget:?package=ArabicRt&version=0.1.1
arabic-rt (.NET / Unity)
Arabic shaping, BiDi, and un-baking for games, TTS, and real-time clients — the C# engine.
📦 NuGet · 🐍 Python package · 🤗 Live demo · 📖 Article · 💻 Python source
Bake logical Arabic into visual presentation forms that render correctly even on clients that do no Arabic processing, and un-bake back to clean logical Arabic for text-to-speech, search, or logging. Output is byte-identical to the Python arabic-rt package, so text baked on one side reads on the other.
Targets netstandard2.0 + netstandard2.1 → works on .NET, .NET Framework, and Unity (Mono / IL2CPP). No dependencies.
Install (NuGet)
dotnet add package ArabicRt
Quick start
using ArabicRt;
string baked = Arabic.Fix("مرحبا بالعالم"); // visual-order presentation forms
string back = Arabic.Unfix(baked); // -> "مرحبا بالعالم" (logical, for TTS)
string forms = Arabic.Shape("سلم"); // -> "ﺳﻠﻢ" (shaping only)
bool hasAr = Arabic.ContainsArabic("hi مرحبا"); // true
bool baked2 = Arabic.IsShaped(baked); // true
// Game chat (word-by-word readers, e.g. R.E.P.O.):
string g = Arabic.Fix("مرحبا بالعالم", Options.Game);
// Custom:
var opts = new Options {
CombineAllah = true, // الله -> ﷲ
ReverseWordOrder = true, // full RTL line
WordJoiner = "\u00A0", // for naive word-by-word readers
PreventWordSplit = true,
MaxLineChars = 18, // wrap long lines (first words on top, each RTL)
};
string baked3 = Arabic.Fix("نص عربي طويل", opts);
Using it in Unity
Three ways, pick one:
- Drop the source — copy
unity/Runtime/Arabic.cs(and the.asmdef) into your project'sAssets/. Simplest; works on Mono and IL2CPP. - Unity Package Manager (git URL) — Window → Package Manager → + → Add package from git URL, pointing at this repo's
unity/folder (package.jsonis there). - NuGet in Unity — via NuGetForUnity, add the
ArabicRtpackage.
API
| Member | Purpose |
|---|---|
Arabic.Fix(text, opts=null) |
Logical Arabic → baked visual presentation forms. No-op on non-Arabic / already shaped. |
Arabic.Unfix(text) |
Baked Arabic → logical Arabic. No-op if not baked. |
Arabic.Shape(text, combineAllah=false) |
Contextual shaping only; order preserved. |
Arabic.ContainsArabic / Arabic.IsShaped |
Fast checks. |
Options / Options.Game |
Config and a ready game-chat preset. |
A note on display fonts
This produces correct text; how it looks is your font's job. For rendering shaped Arabic in a UI (TextMeshPro, etc.), a quality Naskh face such as Noto Naskh Arabic or Amiri (both SIL OFL) looks far better than a default system font.
Build & pack
dotnet build -c Release
dotnet pack -c Release # produces bin/Release/ArabicRt.0.1.0.nupkg
License & author
MPL-2.0 — see LICENSE. Free to use in closed-source games and apps; changes to arabic-rt's own files stay open. Created by Bandar AlSwyan.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
-
.NETStandard 2.1
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Initial release: Shape, Fix (bake), Unfix (un-bake), Options + Game preset. Validated byte-for-byte against the Python arabic-rt.