X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2FStringUtils.java;h=9e5d654a8252ff3b2b94f4a6b610c016aa526f5c;hb=cc3e72914add9c950f563bf37c6615e8721ad32e;hp=1e9d7ed7463a6b2356677f9af0e158ff2b283820;hpb=0988831f084e27de9927c1bb29e338e9263bfa42;p=fanfix.git diff --git a/src/be/nikiroo/utils/StringUtils.java b/src/be/nikiroo/utils/StringUtils.java index 1e9d7ed..9e5d654 100644 --- a/src/be/nikiroo/utils/StringUtils.java +++ b/src/be/nikiroo/utils/StringUtils.java @@ -10,6 +10,7 @@ import java.text.Normalizer.Form; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; import java.util.Scanner; import java.util.regex.Pattern; @@ -25,15 +26,46 @@ import org.unbescape.html.HtmlEscapeType; public class StringUtils { /** * This enum type will decide the alignment of a {@link String} when padding - * is applied or if there is enough horizontal space for it to be aligned. + * or justification is applied (if there is enough horizontal space for it + * to be aligned). */ public enum Alignment { /** Aligned at left. */ - Beginning, + LEFT, /** Centered. */ - Center, + CENTER, /** Aligned at right. */ - End + RIGHT, + /** Full justified (to both left and right). */ + JUSTIFY, + + // Old Deprecated values: + + /** DEPRECATED: please use LEFT. */ + @Deprecated + Beginning, + /** DEPRECATED: please use CENTER. */ + @Deprecated + Center, + /** DEPRECATED: please use RIGHT. */ + @Deprecated + End; + + /** + * Return the non-deprecated version of this enum if needed (or return + * self if not). + * + * @return the non-deprecated value + */ + Alignment undeprecate() { + if (this == Beginning) + return LEFT; + if (this == Center) + return CENTER; + if (this == End) + return RIGHT; + return this; + } } static private Pattern marks = getMarks(); @@ -74,9 +106,11 @@ public class StringUtils { Alignment align) { if (align == null) { - align = Alignment.Beginning; + align = Alignment.LEFT; } + align = align.undeprecate(); + if (width >= 0) { if (text == null) text = ""; @@ -87,23 +121,23 @@ public class StringUtils { if (cut) text = text.substring(0, width); } else if (diff > 0) { - if (diff < 2 && align != Alignment.End) - align = Alignment.Beginning; + if (diff < 2 && align != Alignment.RIGHT) + align = Alignment.LEFT; switch (align) { - case Beginning: - text = text + new String(new char[diff]).replace('\0', ' '); - break; - case End: + case RIGHT: text = new String(new char[diff]).replace('\0', ' ') + text; break; - case Center: - default: + case CENTER: int pad1 = (diff) / 2; int pad2 = (diff + 1) / 2; text = new String(new char[pad1]).replace('\0', ' ') + text + new String(new char[pad2]).replace('\0', ' '); break; + case LEFT: + default: + text = text + new String(new char[diff]).replace('\0', ' '); + break; } } } @@ -111,6 +145,54 @@ public class StringUtils { return text; } + /** + * Justify a text into width-sized (at the maximum) lines. + * + * @param text + * the {@link String} to justify + * @param width + * the maximum size of the resulting lines + * + * @return a list of justified text lines + */ + static public List justifyText(String text, int width) { + return justifyText(text, width, null); + } + + /** + * Justify a text into width-sized (at the maximum) lines. + * + * @param text + * the {@link String} to justify + * @param width + * the maximum size of the resulting lines + * @param align + * align the lines in this position (default is + * Alignment.Beginning) + * + * @return a list of justified text lines + */ + static public List justifyText(String text, int width, + Alignment align) { + if (align == null) { + align = Alignment.LEFT; + } + + align = align.undeprecate(); + + switch (align) { + case CENTER: + return StringJustifier.center(text, width); + case RIGHT: + return StringJustifier.right(text, width); + case JUSTIFY: + return StringJustifier.full(text, width); + case LEFT: + default: + return StringJustifier.left(text, width); + } + } + /** * Sanitise the given input to make it more Terminal-friendly by removing * combining characters.