package org.unicode.cldr.util;

import java.io.UnsupportedEncodingException;
import java.util.Locale;

import com.ibm.icu.text.UnicodeSet;

public class EscapingUtilities {
    public static UnicodeSet OK_TO_NOT_QUOTE = new UnicodeSet("[!(-*,-\\:A-Z_a-z~]").freeze();

    public static String urlEscape(String path) {
        try {
            StringBuilder result = new StringBuilder();
            byte[] bytes = path.getBytes("utf-8");
            for (byte b : bytes) {
                char c = (char) (b & 0xFF);
                if (OK_TO_NOT_QUOTE.contains(c)) {
                    result.append(c);
                } else {
                    result.append('%');
                    if (c < 16) {
                        result.append('0');
                    }
                    result.append(Integer.toHexString(c).toUpperCase(Locale.ENGLISH));
                }
            }
            return result.toString();
        } catch (UnsupportedEncodingException e) {
            throw (IllegalArgumentException) new IllegalArgumentException().initCause(e);
        }
    }
}
