Skip to content

Commit

Permalink
CLDR-5854 First attempt with examples for two cases per item
Browse files Browse the repository at this point in the history
  • Loading branch information
haytenf committed Aug 27, 2024
1 parent 67afecd commit a0c63da
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,19 @@ public void setCachingEnabled(boolean enabled) {
}
};

// map relativeTimePattern counts to numeric examples
public static final Map<String, String> COUNTS =
new HashMap<String, String>() {
{
put("zero", "0");
put("one", "1");
put("two", "2");
put("few", "3");
put("many", "5");
put("other", "10");
}
};

public CLDRFile getCldrFile() {
return cldrFile;
}
Expand Down Expand Up @@ -517,6 +530,10 @@ private String constructExampleHtml(String xpath, String value, boolean nonTrivi
result = handleEras(parts, value);
} else if (parts.contains("quarters")) {
result = handleQuarters(parts, value);
} else if (parts.contains("relative")
|| parts.contains("relativeTime")
|| parts.contains("relativePeriod")) {
result = handleRelative(xpath, parts, value);
} else if (parts.contains("dayPeriods")) {
result = handleDayPeriod(parts, value);
} else if (parts.contains("monthContext")) {
Expand Down Expand Up @@ -3008,6 +3025,48 @@ private String handleQuarters(XPathParts parts, String value) {
return sdf.format(sample);
}

/* Add relative date/time examples, choosing appropriate
* patterns as needed for relative dates vs relative times.
* Additionally, for relativeTimePattern items, ensure that
* numeric example corresponds to the count represented by the item.
*/
private String handleRelative(String xpath, XPathParts parts, String value) {
List<String> examples = new ArrayList<>();
String skeleton;
String type = parts.findAttributeValue("field", "type");
if (type.startsWith("hour")) {
skeleton = "Hm";
} else if (type.startsWith("minute") || type.startsWith("second")) {
skeleton = "ms";
} else if (type.startsWith("year")
|| type.startsWith("month")
|| type.startsWith("quarter")) {
skeleton = "yMMMM";
} else {
skeleton = "MMMMd";
}
String checkPath =
"//ldml/dates/calendars/calendar[@type=\"gregorian\"]/dateTimeFormats/availableFormats/dateFormatItem[@id=\""
+ skeleton
+ "\"]";
String dateFormat = cldrFile.getWinningValue(checkPath);
SimpleDateFormat sdf = icuServiceBuilder.getDateFormat("gregorian", dateFormat);
String sampleDate = sdf.format(DATE_SAMPLE);
String example1 =
value.substring(0, 1).toUpperCase() + value.substring(1) + " (" + sampleDate + ")";
String example2 = sampleDate + " (" + value + ")";
if (parts.contains("relativeTimePattern")) { // has placeholder
String count = parts.getAttributeValue(-1, "count");
String exampleCount = COUNTS.get(count);
examples.add(invertBackground(format(setBackground(example1), exampleCount)));
examples.add(invertBackground(format(setBackground(example2), exampleCount)));
} else {
examples.add(format(example1));
examples.add(format(example2));
}
return formatExampleList(examples);
}

/**
* @param elementToOverride the element that is to be overridden
* @param element the overriding element
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1799,6 +1799,25 @@ public void TestQuarterFormats() {
"//ldml/dates/calendars/calendar[@type=\"gregorian\"]/quarters/quarterContext[@type=\"stand-alone\"]/quarterWidth[@type=\"abbreviated\"]/quarter[@type=\"4\"]");
}

public void TestRelative() {
ExampleGenerator exampleGenerator = getExampleGenerator("it");
checkValue(
"it relative day type 2",
"〖Dopodomani (5 settembre)〗〖5 settembre (dopodomani)〗",
exampleGenerator,
"//ldml/dates/fields/field[@type=\"day\"]/relative[@type=\"2\"]");
checkValue(
"it relative hour future-other",
"〖Tra ❬10❭ ore (18:25)〗〖18:25 (tra ❬10❭ ore)〗",
exampleGenerator,
"//ldml/dates/fields/field[@type=\"hour\"]/relativeTime[@type=\"future\"]/relativeTimePattern[@count=\"other\"]");
checkValue(
"it relative year past-one",
"〖❬1❭ anno fa (settembre 1999)〗〖settembre 1999 (❬1❭ anno fa)〗",
exampleGenerator,
"//ldml/dates/fields/field[@type=\"year\"]/relativeTime[@type=\"past\"]/relativeTimePattern[@count=\"one\"]");
}

static final class MissingKey implements Comparable<MissingKey> {
final SectionId sectionId;
final PageId pageId;
Expand Down

0 comments on commit a0c63da

Please sign in to comment.