154 lines
5.0 KiB
Java
154 lines
5.0 KiB
Java
package com.mojang.realmsclient.util;
|
|
|
|
import java.util.Objects;
|
|
import java.util.Iterator;
|
|
import com.google.common.collect.Lists;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
public class TextRenderingUtils {
|
|
static List<String> lineBreak(final String string) {
|
|
return Arrays.<String>asList(string.split("\\n"));
|
|
}
|
|
|
|
public static List<Line> decompose(final String string, final LineSegment... arr) {
|
|
return decompose(string, Arrays.<LineSegment>asList(arr));
|
|
}
|
|
|
|
private static List<Line> decompose(final String string, final List<LineSegment> list) {
|
|
final List<String> list2 = lineBreak(string);
|
|
return insertLinks(list2, list);
|
|
}
|
|
|
|
private static List<Line> insertLinks(final List<String> list1, final List<LineSegment> list2) {
|
|
int integer3 = 0;
|
|
final List<Line> list3 = Lists.newArrayList();
|
|
for (final String string6 : list1) {
|
|
final List<LineSegment> list4 = Lists.newArrayList();
|
|
final List<String> list5 = split(string6, "%link");
|
|
for (final String string7 : list5) {
|
|
if (string7.equals("%link")) {
|
|
list4.add(list2.get(integer3++));
|
|
}
|
|
else {
|
|
list4.add(LineSegment.text(string7));
|
|
}
|
|
}
|
|
list3.add(new Line(list4));
|
|
}
|
|
return list3;
|
|
}
|
|
|
|
public static List<String> split(final String string1, final String string2) {
|
|
if (string2.isEmpty()) {
|
|
throw new IllegalArgumentException("Delimiter cannot be the empty string");
|
|
}
|
|
final List<String> list3 = Lists.newArrayList();
|
|
int integer4;
|
|
int integer5;
|
|
for (integer4 = 0; (integer5 = string1.indexOf(string2, integer4)) != -1; integer4 = integer5 + string2.length()) {
|
|
if (integer5 > integer4) {
|
|
list3.add(string1.substring(integer4, integer5));
|
|
}
|
|
list3.add(string2);
|
|
}
|
|
if (integer4 < string1.length()) {
|
|
list3.add(string1.substring(integer4));
|
|
}
|
|
return list3;
|
|
}
|
|
|
|
public static class Line {
|
|
public final List<LineSegment> segments;
|
|
|
|
Line(final List<LineSegment> list) {
|
|
this.segments = list;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "Line{segments=" + this.segments + '}';
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(final Object object) {
|
|
if (this == object) {
|
|
return true;
|
|
}
|
|
if (object == null || this.getClass() != object.getClass()) {
|
|
return false;
|
|
}
|
|
final Line a3 = (Line)object;
|
|
return Objects.equals(this.segments, a3.segments);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hash(this.segments);
|
|
}
|
|
}
|
|
|
|
public static class LineSegment {
|
|
final String fullText;
|
|
final String linkTitle;
|
|
final String linkUrl;
|
|
|
|
private LineSegment(final String string) {
|
|
this.fullText = string;
|
|
this.linkTitle = null;
|
|
this.linkUrl = null;
|
|
}
|
|
|
|
private LineSegment(final String string1, final String string2, final String string3) {
|
|
this.fullText = string1;
|
|
this.linkTitle = string2;
|
|
this.linkUrl = string3;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(final Object object) {
|
|
if (this == object) {
|
|
return true;
|
|
}
|
|
if (object == null || this.getClass() != object.getClass()) {
|
|
return false;
|
|
}
|
|
final LineSegment b3 = (LineSegment)object;
|
|
return Objects.equals(this.fullText, b3.fullText) && Objects.equals(this.linkTitle, b3.linkTitle) && Objects.equals(this.linkUrl, b3.linkUrl);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hash(this.fullText, this.linkTitle, this.linkUrl);
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "Segment{fullText='" + this.fullText + '\'' + ", linkTitle='" + this.linkTitle + '\'' + ", linkUrl='" + this.linkUrl + '\'' + '}';
|
|
}
|
|
|
|
public String renderedText() {
|
|
return this.isLink() ? this.linkTitle : this.fullText;
|
|
}
|
|
|
|
public boolean isLink() {
|
|
return this.linkTitle != null;
|
|
}
|
|
|
|
public String getLinkUrl() {
|
|
if (!this.isLink()) {
|
|
throw new IllegalStateException("Not a link: " + this);
|
|
}
|
|
return this.linkUrl;
|
|
}
|
|
|
|
public static LineSegment link(final String string1, final String string2) {
|
|
return new LineSegment(null, string1, string2);
|
|
}
|
|
|
|
static LineSegment text(final String string) {
|
|
return new LineSegment(string);
|
|
}
|
|
}
|
|
}
|