mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2024-06-26 14:34:53 +02:00
120 lines
2.9 KiB
Java
120 lines
2.9 KiB
Java
/*
|
|
* WorldGuard, a suite of tools for Minecraft
|
|
* Copyright (C) sk89q <http://www.sk89q.com>
|
|
* Copyright (C) WorldGuard team and contributors
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU Lesser General Public License as published by the
|
|
* Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
* for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
package com.sk89q.worldguard.util;
|
|
|
|
import javax.annotation.Nullable;
|
|
import java.text.Normalizer;
|
|
import java.text.Normalizer.Form;
|
|
|
|
import static com.google.common.base.Preconditions.checkNotNull;
|
|
|
|
/**
|
|
* Normal names are strings that are considered equal after they have been
|
|
* normalized using Unicode's NFC form and made lowercase.
|
|
*/
|
|
public final class Normal {
|
|
|
|
private final String name;
|
|
@Nullable
|
|
private final String normal;
|
|
|
|
/**
|
|
* Create a new instance.
|
|
*
|
|
* @param name a new instance
|
|
*/
|
|
private Normal(String name) {
|
|
checkNotNull(name);
|
|
|
|
this.name = name;
|
|
String normal = normalize(name);
|
|
if (!normal.equals(name)) { // Simple comparison
|
|
this.normal = normal;
|
|
} else {
|
|
this.normal = null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the original name before normalization.
|
|
*
|
|
* @return the original name before normalization
|
|
*/
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
/**
|
|
* Get the normalized name.
|
|
*
|
|
* @return the normal name
|
|
*/
|
|
public String getNormal() {
|
|
return normal != null ? normal : name;
|
|
}
|
|
|
|
/**
|
|
* Normalize a string according to the rules of this class.
|
|
*
|
|
* @param name an string
|
|
* @return the normalized string
|
|
*/
|
|
public static String normalize(String name) {
|
|
return Normalizer.normalize(name.toLowerCase(), Form.NFC);
|
|
}
|
|
|
|
/**
|
|
* Create a new instance.
|
|
*
|
|
* @param name the name
|
|
* @return an instance
|
|
*/
|
|
public static Normal normal(String name) {
|
|
return new Normal(name);
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (this == o) return true;
|
|
if (o == null || getClass() != o.getClass()) return false;
|
|
|
|
Normal that = (Normal) o;
|
|
|
|
return getNormal().equals(that.getNormal());
|
|
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return getNormal().hashCode();
|
|
}
|
|
|
|
/**
|
|
* Return the un-normalized name.
|
|
*
|
|
* @return the un-normalized name
|
|
*/
|
|
@Override
|
|
public String toString() {
|
|
return name;
|
|
}
|
|
|
|
}
|