org.languagetool.tools.ArabicUnitsHelper Maven / Gradle / Ivy
The newest version!
/* LanguageTool, a natural language style checker
* Copyright (C) 2022 Sohaib Afifi, Taha Zerrouki
*
* This library 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 2.1 of the License, or (at your option) any later version.
*
* This library 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 library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA
*/
package org.languagetool.tools;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*
Used to generate and handle units for numbers(Tamyeez)
The main task is to get agreement with numeric phrase
like
سبعة عشر رجلا
ثلاثة رجال
*/
public class ArabicUnitsHelper {
// map of unit cases
static final Map> unitsMap2 = new HashMap<>();
static final Map> unitsMap = new HashMap<>();
// cases will be indexed by numeric values
final short ONE_POS_RAF3 = 0;
final short ONE_POS_NASB = 1;
final short ONE_POS_JAR = 2;
final short TWO_POS_RAF3 = 3;
final short TWO_POS_NASB = 4;
final short TWO_POS_JAR = 5;
final short PLURAL_POS_RAF3 = 6;
final short PLURAL_POS_NASB = 7;
final short PLURAL_POS_JAR = 8;
static {
Map unitsEntry = new HashMap<>();
unitsEntry.put("feminin", "no");
unitsEntry.put("one_raf3", "دينار");
unitsEntry.put("one_nasb", "دينارًا");
unitsEntry.put("one_jar", "دينارٍ");
unitsEntry.put("two_raf3", "ديناران");
unitsEntry.put("two_nasb", "دينارين");
unitsEntry.put("two_jar", "دينارين");
unitsEntry.put("plural_raf3", "دنانيرُ");
unitsEntry.put("plural_nasb", "دنانيرَ");
unitsEntry.put("plural_jar", "دنانيرَ");
unitsMap.put("دينار", unitsEntry);
unitsEntry = new HashMap<>();
unitsEntry.put("feminin", "no");
unitsEntry.put("one_raf3", "درهم");
unitsEntry.put("one_nasb", "درهمًا");
unitsEntry.put("one_jar", "درهمٍ");
unitsEntry.put("two_raf3", "درهمان");
unitsEntry.put("two_nasb", "درهمين");
unitsEntry.put("two_jar", "درهمين");
unitsEntry.put("plural_raf3", "دراهمُ");
unitsEntry.put("plural_nasb", "دراهمَ");
unitsEntry.put("plural_jar", "دراهمَ");
unitsMap.put("درهم", unitsEntry);
unitsEntry = new HashMap<>();
unitsEntry.put("feminin", "no");
unitsEntry.put("one_raf3", "دولار");
unitsEntry.put("one_nasb", "دولارًا");
unitsEntry.put("one_jar", "دولارٍ");
unitsEntry.put("two_raf3", "دولاران");
unitsEntry.put("two_nasb", "دولارين");
unitsEntry.put("two_jar", "دولارين");
unitsEntry.put("plural_raf3", "دولاراتٌ");
unitsEntry.put("plural_nasb", "دولاراتٍ");
unitsEntry.put("plural_jar", "دولاراتٍ");
unitsMap.put("دولار", unitsEntry);
unitsEntry = new HashMap<>();
unitsEntry.put("feminin", "yes");
unitsEntry.put("one_raf3", "ليرة");
unitsEntry.put("one_nasb", "ليرةً");
unitsEntry.put("one_jar", "ليرةٍ");
unitsEntry.put("two_raf3", "ليرتان");
unitsEntry.put("two_nasb", "ليرتين");
unitsEntry.put("two_jar", "ليرتين");
unitsEntry.put("plural_raf3", "ليراتٌ");
unitsEntry.put("plural_nasb", "ليراتٍ");
unitsEntry.put("plural_jar", "ليراتٍ");
unitsMap.put("ليرة", unitsEntry);
}
/* test if the unit is feminin */
public static boolean isFeminin(String unit) {
return (unitsMap.containsKey(unit) && unitsMap.get(unit).getOrDefault("feminin", "no").equals("yes"));
}
public static boolean isUnit(String unit) {
return unitsMap.containsKey(unit);
}
/* return the suitable form of units according to inflection */
public static String getForm(String unit, String category, String inflection) {
if (inflection.isEmpty()) {
inflection = "raf3";
}
String key = category + "_" + inflection;
if (unitsMap.containsKey(unit)) {
return unitsMap.get(unit).getOrDefault(key, "[" + unit + "]");
}
return "[[" + unit + "]]";
}
/* return the suitable form of units according to inflection */
public static String getOneForm(String unit, String inflection) {
return getForm(unit, "one", inflection);
}
/* return the suitable form of units according to inflection */
public static String getTwoForm(String unit, String inflection) {
return getForm(unit, "two", inflection);
} /* return the suitable form of units according to inflection */
public static String getPluralForm(String unit, String inflection) {
return getForm(unit, "plural", inflection);
}
}