minecraft-src/net/minecraft/client/resources/language/FormattedBidiReorder.java
2025-07-04 01:41:11 +03:00

39 lines
1.3 KiB
Java

package net.minecraft.client.resources.language;
import com.google.common.collect.Lists;
import com.ibm.icu.lang.UCharacter;
import com.ibm.icu.text.ArabicShaping;
import com.ibm.icu.text.Bidi;
import com.ibm.icu.text.BidiRun;
import java.util.List;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.network.chat.SubStringSource;
import net.minecraft.util.FormattedCharSequence;
@Environment(EnvType.CLIENT)
public class FormattedBidiReorder {
public static FormattedCharSequence reorder(FormattedText text, boolean defaultRightToLeft) {
SubStringSource subStringSource = SubStringSource.create(text, UCharacter::getMirror, FormattedBidiReorder::shape);
Bidi bidi = new Bidi(subStringSource.getPlainText(), defaultRightToLeft ? 127 : 126);
bidi.setReorderingMode(0);
List<FormattedCharSequence> list = Lists.<FormattedCharSequence>newArrayList();
int i = bidi.countRuns();
for (int j = 0; j < i; j++) {
BidiRun bidiRun = bidi.getVisualRun(j);
list.addAll(subStringSource.substring(bidiRun.getStart(), bidiRun.getLength(), bidiRun.isOddRun()));
}
return FormattedCharSequence.composite(list);
}
private static String shape(String text) {
try {
return new ArabicShaping(8).shape(text);
} catch (Exception var2) {
return text;
}
}
}