Skip to content

Commit 3c8820d

Browse files
committed
add extraction of cardinality data
1 parent d69a7a0 commit 3c8820d

File tree

2 files changed

+2890
-5
lines changed

2 files changed

+2890
-5
lines changed

DownloadDefinitions.java

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,26 @@ static void printStringArrayCode(Iterable<String> toPrint, String name, PrintWri
1616
}
1717
out.println(" };");
1818
}
19+
static void printBooleanArrayCode(Iterable<Boolean> toPrint, String name, PrintWriter out) {
20+
out.println(" private static final boolean[] "+name+" =");
21+
char before = '{';
22+
for(boolean val : toPrint) {
23+
out.println(" "+before+val);
24+
before = ',';
25+
}
26+
out.println(" };");
27+
}
28+
static void printStringArrayArrayCode(Iterable<? extends Iterable<String>> toPrint, String name, PrintWriter out) {
29+
out.println(" private static final String[][] "+name+" =");
30+
char before = '{';
31+
for(Iterable<String> val : toPrint) {
32+
out.println(" "+before+"{\""+String.join("\",\"", val)+"\"}");
33+
before = ',';
34+
}
35+
out.println(" };");
36+
}
37+
38+
1939
static TreeMap<String,String> readTSV(Scanner src) {
2040
TreeMap<String,String> ans = new TreeMap<String,String>();
2141
while(src.hasNext()) {
@@ -145,6 +165,46 @@ public static void main(String[] args) throws IOException {
145165
dest.println(" if (idx < 0) return null;");
146166
dest.println(" return payloadVals[idx];");
147167
dest.println(" }");
168+
169+
dest.println();
170+
171+
// cardinalities
172+
s = new Scanner(new URL("https://github.com/FamilySearch/GEDCOM/raw/main/extracted-files/cardinalities.tsv").openStream());
173+
known = readTSV(s);
174+
TreeMap<String, TreeSet<String>> required = new TreeMap<String,TreeSet<String>>();
175+
TreeMap<String, Boolean> singular = new TreeMap<String,Boolean>();
176+
known.forEach((k,v) -> {
177+
if (v.charAt(1) == '1') {
178+
String[] k2 = k.split("\t");
179+
required.putIfAbsent(k2[0], new TreeSet<String>());
180+
required.get(k2[0]).add(k2[1]);
181+
}
182+
singular.put(k, v.charAt(3) == '1');
183+
});
184+
printStringArrayCode(required.keySet(), "reqKeys", dest);
185+
printStringArrayArrayCode(required.values(), "reqVals", dest);
186+
printStringArrayCode(singular.keySet(), "singleKeys", dest);
187+
printBooleanArrayCode(singular.values(), "singleVals", dest);
188+
189+
dest.println(" public static String[] requiredSubstructures(String struct) {");
190+
dest.println(" if (struct == null) return new String[0];");
191+
dest.println(" int idx = binarySearch(reqKeys, struct);");
192+
dest.println(" if (idx < 0) return new String[0];");
193+
dest.println(" return reqVals[idx];");
194+
dest.println(" }");
195+
196+
dest.println(" public static boolean justOne(String ctx, String uri) {");
197+
dest.println(" if (ctx == null) return false;");
198+
dest.println(" String key = ctx+'\\t'+uri;");
199+
dest.println(" int idx = binarySearch(singleKeys, key);");
200+
dest.println(" if (idx < 0) return false;");
201+
dest.println(" return singleVals[idx];");
202+
dest.println(" }");
203+
204+
205+
206+
dest.println();
207+
148208

149209
// FHISO's language mapping
150210
s = new Scanner(new URL("https://github.com/fhiso/legacy-format/raw/master/languages.tsv").openStream());
@@ -162,10 +222,6 @@ public static void main(String[] args) throws IOException {
162222
dest.println(" return langVals[idx].replace(\"*\",\"\");");
163223
dest.println(" }");
164224

165-
166-
167-
168-
169225
dest.println("}");
170226
}
171227
}

0 commit comments

Comments
 (0)