Mercurial Hosting > nabble
view src/nabble/view/lib/ViewUtils.java @ 62:4674ed7d56df default tip
remove n2
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Sep 2023 20:25:29 -0600 |
parents | 7ecd1a4ef557 |
children |
line wrap: on
line source
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; } }