protected LinkedHashMap<Pattern, String> load(File propertyFile) {
        LinkedHashMap<Pattern, String> result = new LinkedHashMap<Pattern, String>();
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new InputStreamReader(
                    new FileInputStream(propertyFile), "UTF-8"));
            String line;
            while ((line = reader.readLine()) != null) {
                if (line.length() == 0) {
                    continue;
                }
                char firstChar = line.charAt(0);
                if (firstChar == '#' || firstChar == '!') {
                    continue;
                }
                int pos = line.indexOf('=');
                if (pos < 0) {
                    continue;
                }
                String key = line.substring(0, pos);
                String value = line.substring(pos + 1, line.length());
                int pos2 = line.indexOf('@');
                if (pos2 == 0) {
                    key = key.substring(1);
                } else if (pos2 > 0) {
                    key = Pattern.quote(key.substring(0, pos2))
                            + key.substring(pos2);
                }
                result.put(Pattern.compile(key), value);
            }
        } catch (IOException e) {
            throw new GenException(Message.DOMAGEN9001, e, e);
        } finally {
            IOUtil.close(reader);
        }
        return result;
    }