Mercurial Hosting > nabble
diff src/nabble/view/lib/ViewUtils.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/nabble/view/lib/ViewUtils.java Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,70 @@ +package nabble.view.lib; + + +// used outside nabble, so do not use Init +public final class ViewUtils { + + private ViewUtils() {} // never + + private static char removeAccent(char c) { + int code = (int) c; + if (code >= 192 && code <= 196) return 'A'; + else if (code >= 200 && code <= 203) return 'E'; + else if (code >= 204 && code <= 207) return 'I'; + else if (code >= 210 && code <= 214) return 'O'; + else if (code >= 217 && code <= 220) return 'U'; + else if (code >= 224 && code <= 228) return 'a'; + else if (code >= 232 && code <= 235) return 'e'; + else if (code >= 236 && code <= 239) return 'i'; + else if (code >= 242 && code <= 246) return 'o'; + else if (code >= 249 && code <= 252) return 'u'; + else if (code == 231) return 'c'; + else if (code == 199) return 'C'; + else return c; + } + + public static String subjectEncode(String s) { + StringBuilder builder = new StringBuilder(); + final char[] chars = s.toCharArray(); + char lastChar = '-'; + for (char c : chars) { + c = removeAccent(c); + boolean isDigit = c >= '0' && c <= '9'; + boolean isLowerChar = c >= 'a' && c <= 'z'; + boolean isUpperChar = c >= 'A' && c <= 'Z'; + if (isDigit || isLowerChar || isUpperChar) { + builder.append(c); + lastChar = c; + } else { + if (lastChar != '-' && builder.length() > 0) + builder.append('-'); + lastChar = '-'; + } + } + // Truncate if bigger than 100 chars + if (builder.length() > 100) { + builder.delete(100, builder.length()-1); + } + + int lastPos = builder.length()-1; + if (builder.lastIndexOf("-") == lastPos && lastPos >= 0) + builder.deleteCharAt(lastPos); + return builder.toString(); + } + + public static String getDefaultBaseUrl(long siteId,String subject,String host) { + String subjectPart = subjectEncode(subject).toLowerCase(); + if (subjectPart.length() == 0) + subjectPart = "x"; + + // The max length of a domain is 255 chars, but each part (aka octet) can only + // have 63 chars (RFC 2181). So we truncate the subject if it goes beyond that size. + if (subjectPart.length() > 63) { + subjectPart = subjectPart.substring(0, 62); + } + if (subjectPart.endsWith("-")) + subjectPart = subjectPart.substring(0, subjectPart.length()-1); + return subjectPart + '.' + siteId + '.' + host; + } + +}