package jetbrains.mps.core.tool.environment.common; /*Generated by MPS */ import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.ArrayList; import java.io.UnsupportedEncodingException; public class URLUtil { public URLUtil() { } @NotNull public static String unescapePercentSequences(@NotNull String s) { if (s.indexOf('%') == -1) { return s; } StringBuilder decoded = new StringBuilder(); final int len = s.length(); int i = 0; while (i < len) { char c = s.charAt(i); if (c == '%') { List<Integer> bytes = new ArrayList<Integer>(); while (i + 2 < len && s.charAt(i) == '%') { final int d1 = decode(s.charAt(i + 1)); final int d2 = decode(s.charAt(i + 2)); if (d1 != -1 && d2 != -1) { bytes.add(((d1 & 15) << 4 | d2 & 15)); i += 3; } else { break; } } if (!(bytes.isEmpty())) { final byte[] bytesArray = new byte[bytes.size()]; for (int j = 0; j < bytes.size(); j++) { bytesArray[j] = (byte) bytes.get(j).intValue(); } try { decoded.append(new String(bytesArray, "UTF-8")); continue; } catch (UnsupportedEncodingException ignored) { } } } decoded.append(c); i++; } return decoded.toString(); } private static int decode(char c) { if ((c >= '0') && (c <= '9')) { return c - '0'; } if ((c >= 'a') && (c <= 'f')) { return c - 'a' + 10; } if ((c >= 'A') && (c <= 'F')) { return c - 'A' + 10; } return -1; } }