@finbheara/domain 0.58.0 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/age.js +1 -1
- package/dist/chunks/{place-w6d4xfzc.js → place-5zyfq5xy.js} +8 -3
- package/dist/chunks/{place-dn6qk21g.js → place-by6eeyjt.js} +1 -1
- package/dist/code.js +2 -2
- package/dist/schedule.js +2 -2
- package/dist/school.js +44 -37
- package/dist/title.js +2 -2
- package/dist/types/school-mojibake.d.ts +1 -0
- package/package.json +1 -1
package/dist/age.js
CHANGED
|
@@ -27,7 +27,8 @@ function adultPatterns(keywords) {
|
|
|
27
27
|
|
|
28
28
|
var LEAD_ID = /^\s*(?:comp(?:etition)?\.?\s*)?\d+[a-z]*(?:[/-]\d*[a-z]*)*\s*[-:.]?\s*/i;
|
|
29
29
|
var PAREN = /\(([^)]*)\)/g;
|
|
30
|
-
var
|
|
30
|
+
var AND_OVER_ZERO = String.raw`(?<=&)0(?![a-z0-9])`;
|
|
31
|
+
var AND_OVER = new RegExp(String.raw`(?<![0-9])(?<![0-9][a-z]*)(?<!(?:^|[^a-z0-9])[a-z])(\d{1,2})\s*(?:years?\s*)?(?:&|\+|\band\b)\s*(?:(?:over|older|up|o)(?![a-z])|${AND_OVER_ZERO})`, "i");
|
|
31
32
|
var OVER_WORD = /(?:\bover\s*|\bos\s+cionn\s*|(?<![a-z0-9])o[./]?\s*)(\d{1,2})(?![a-z0-9])/i;
|
|
32
33
|
var OVER_GLUED = /(?<![a-z0-9])(\d{1,2})\s*o(?![a-z'’])/i;
|
|
33
34
|
var OVER_PLUS = /(?<![a-z0-9])(\d{1,2})\s*\+/;
|
|
@@ -36,7 +37,7 @@ var UNDER = new RegExp(String.raw`${UNDER_WORD}(\d{1,2})(?![0-9])(?![a-z][a-z0-9
|
|
|
36
37
|
var JOINED_CAPS = new RegExp(String.raw`${UNDER_WORD}\d{1,2}(?![0-9])(?:(?:\s*(?:&|,|\/|\band\b)\s*(?:${UNDER_WORD})?|\s+${UNDER_WORD})\d{1,2}(?![0-9]))+`, "i");
|
|
37
38
|
var JOINED_NOT = /^(?:\s*(?:yrs?|years?|-?\s*hand)\b|[a-z])/i;
|
|
38
39
|
var JOINED_OPEN = /^(?:\s*\+|\s*(?:&|and)\s*(?:o|over|older|up)\b)/i;
|
|
39
|
-
var UNDER_OPEN = new RegExp(String.raw`${UNDER_WORD}\d{1,2}(?![0-9])\s*(?:&|\band\b)\s*(?:o|over|older|up)\b`, "i");
|
|
40
|
+
var UNDER_OPEN = new RegExp(String.raw`${UNDER_WORD}\d{1,2}(?![0-9])\s*(?:(?:&|\band\b)\s*(?:o|over|older|up)\b|&${AND_OVER_ZERO})`, "i");
|
|
40
41
|
var printsUnderOpen2 = (print) => UNDER_OPEN.test(print);
|
|
41
42
|
var UNDER_STRIDE = /^\s*\/\s*0*([1-9]\d?)\s*yrs?(?![a-z0-9])/i;
|
|
42
43
|
var AND_UNDER = /(?<![a-z0-9])(\d{1,2})\s*(?:years?\s*)?(?:&|\/|\band\b)\s*u(?:nder)?(?![a-z])(?!\s*\d)/i;
|
|
@@ -44,6 +45,7 @@ var AND_UNDER_RANGE = /(?<![a-z0-9])(\d{1,2})\s*(?:&|\band\b)\s*under\s*(\d{1,2}
|
|
|
44
45
|
var AND_RANGE = /(?<![a-z0-9])(?<!\b(?:under|und|over|faoi|cionn|u|o)\.?\s*)(?<!\d\s*,\s*)(?<!\(\s*)(\d{1,2})\s*(?:&|\band\b)\s*(\d{1,2})(?![a-z0-9])(?!\s*-?\s*hand)(?!\s*(?:&|\+|\/|,|\)|\band\b|\bor\b))/i;
|
|
45
46
|
var SLASH_RANGE = /(?<![a-z0-9/])(\d{1,2})\s*\/\s*(\d{1,2})(?=\s*(?:years?|yrs?|boys?|girls?|ladies|men)\b)/i;
|
|
46
47
|
var AGE_N = /(?<!\b(?:under|over)\s*)\bage\s*(\d{1,2})(?![a-z0-9])(?!\s*-?\s*hand)/i;
|
|
48
|
+
var AGE_RANGE = /(?<!\b(?:under|over)\s*)\bage\s*(\d{1,2})\s+(\d{1,2})(?![a-z0-9])(?!\s*-?\s*hand)/i;
|
|
47
49
|
var YEARS = /(?<![a-z0-9])(?<!\d\s*(?:&|\/|\band\b|[-\u0096–—]|\bto\b)\s*)(\d{1,2})\s*(?:years?|yrs?)(?![a-z0-9])(?!\s*(?:&|\+|\/|\band\b|\bor\b|old))/i;
|
|
48
50
|
var RANGE_DASH = String.raw`(?:\u00c2?[-\u0096–—]|\bto\b)`;
|
|
49
51
|
var RANGE = new RegExp(String.raw`(?<![0-9])(?<![0-9][a-z]*)(?<!(?:^|[^a-z0-9])[a-z])(?:u\s*)?(\d{1,2})\s*${RANGE_DASH}\s*(\d{1,2})(?![a-z0-9])`, "i");
|
|
@@ -126,6 +128,9 @@ function readAnchored(title, s, offset, adultWord, aside = false) {
|
|
|
126
128
|
const r = RANGE.exec(stripped);
|
|
127
129
|
if (r?.[1] !== undefined && r[2] !== undefined && inFence(r[1], r[2]))
|
|
128
130
|
return at(title, offset + shift, r.index, r.index + r[0].length, `${Number(r[1])}-${Number(r[2])}`);
|
|
131
|
+
const ar = AGE_RANGE.exec(s);
|
|
132
|
+
if (ar?.[1] !== undefined && ar[2] !== undefined && inFence(ar[1], ar[2]))
|
|
133
|
+
return at(title, offset, ar.index, ar.index + ar[0].length, `${Number(ar[1])}-${Number(ar[2])}`);
|
|
129
134
|
const au = AND_UNDER.exec(s);
|
|
130
135
|
if (au?.[1] !== undefined)
|
|
131
136
|
return at(title, offset, au.index, au.index + au[0].length, `u${Number(au[1]) + 1}`);
|
|
@@ -242,7 +247,7 @@ var ageOnJanuary12 = (year, born) => year - born - 1;
|
|
|
242
247
|
var yearsSinceBirth2 = (year, born) => year - born;
|
|
243
248
|
var UNDER2 = /^(?:u|under\s*)(\d+)(?:\/([1-9]\d*)yr)?$/i;
|
|
244
249
|
var OVER = /^(?:o|over\s*)(\d+)$/i;
|
|
245
|
-
var AND_OVER2 = /^(\d+)\s*(?:&|and\b)\s*(?:over|o)$/i;
|
|
250
|
+
var AND_OVER2 = /^(\d+)\s*(?:(?:&|and\b)\s*(?:over|o)|&0)$/i;
|
|
246
251
|
var RANGE2 = /^u?(\d+)\s*[-–]\s*(\d+)$/i;
|
|
247
252
|
var LEVEL_WORDS = "first[\\s-]*feis|(?:advanced[\\s-]+)?beginners?(?:[\\s-]*(?:1|2|i|ii))?|novice|prizewinners?|intermediate|advanced|open|prelim(?:inary)?|champions?(?:hip)?s?|champs?";
|
|
248
253
|
var NO_ADULT_WORDS = Object.freeze({
|
package/dist/code.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Age2
|
|
3
|
-
} from "./chunks/place-
|
|
3
|
+
} from "./chunks/place-5zyfq5xy.js";
|
|
4
4
|
import {
|
|
5
5
|
populationIn2,
|
|
6
6
|
compTitle2
|
|
7
|
-
} from "./chunks/place-
|
|
7
|
+
} from "./chunks/place-by6eeyjt.js";
|
|
8
8
|
import {
|
|
9
9
|
validity
|
|
10
10
|
} from "./chunks/place-q9kwsmzd.js";
|
package/dist/schedule.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import"./chunks/place-
|
|
1
|
+
import"./chunks/place-5zyfq5xy.js";
|
|
2
2
|
import {
|
|
3
3
|
compTitle2,
|
|
4
4
|
matchTitle2
|
|
5
|
-
} from "./chunks/place-
|
|
5
|
+
} from "./chunks/place-by6eeyjt.js";
|
|
6
6
|
|
|
7
7
|
function hallKey(hall) {
|
|
8
8
|
return hall.normalize("NFKD").replace(/\p{M}/gu, "").toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
|
package/dist/school.js
CHANGED
|
@@ -999,6 +999,48 @@ var MATCH_KEY_INSTITUTION_WORDS = [
|
|
|
999
999
|
].sort();
|
|
1000
1000
|
|
|
1001
1001
|
import { normalizeApostrophes } from "@finbheara/names/lexicon";
|
|
1002
|
+
|
|
1003
|
+
var CP1252_HIGH = "€‚ƒ„…†‡ˆ‰Š‹Œ" + "Ž‘’“”•–—˜™š›" + "œžŸ";
|
|
1004
|
+
var BYTE_OF_CP1252 = new Map([...CP1252_HIGH].map((ch, i) => [ch.codePointAt(0), 128 + i]));
|
|
1005
|
+
var MOJIBAKE = /[Â-ßà-ï][-¿‚-›ŒŠŽ]/u;
|
|
1006
|
+
var MOJIBAKE_ALL = new RegExp(MOJIBAKE.source, "gu");
|
|
1007
|
+
var FLATTENED_NBSP = /(?<=\S)[Â-Å] /u;
|
|
1008
|
+
function isNbspLead(code) {
|
|
1009
|
+
return code >= 194 && code <= 197;
|
|
1010
|
+
}
|
|
1011
|
+
var NON_LATIN_LETTER = /(?!\p{Script=Latin})\p{L}/u;
|
|
1012
|
+
function isRepair(before, after) {
|
|
1013
|
+
if (!NON_LATIN_LETTER.test(after))
|
|
1014
|
+
return true;
|
|
1015
|
+
return (before.match(MOJIBAKE_ALL)?.length ?? 0) >= 2;
|
|
1016
|
+
}
|
|
1017
|
+
function undoMojibake(s) {
|
|
1018
|
+
const bytes = new Uint8Array(s.length);
|
|
1019
|
+
for (let i = 0;i < s.length; i++) {
|
|
1020
|
+
const code = s.charCodeAt(i);
|
|
1021
|
+
const flattened = code === 32 && i > 1 && isNbspLead(s.charCodeAt(i - 1)) && /\S/u.test(s[i - 2]);
|
|
1022
|
+
const byte = flattened ? 160 : BYTE_OF_CP1252.get(code) ?? code;
|
|
1023
|
+
if (byte > 255)
|
|
1024
|
+
return;
|
|
1025
|
+
bytes[i] = byte;
|
|
1026
|
+
}
|
|
1027
|
+
try {
|
|
1028
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
1029
|
+
} catch {
|
|
1030
|
+
return;
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
function repairSchoolMojibake(print) {
|
|
1034
|
+
let s = print;
|
|
1035
|
+
for (let round = 0;round < 3 && (MOJIBAKE.test(s) || FLATTENED_NBSP.test(s)); round++) {
|
|
1036
|
+
const undone = undoMojibake(s);
|
|
1037
|
+
if (undone === undefined || undone === s || !isRepair(s, undone))
|
|
1038
|
+
return s;
|
|
1039
|
+
s = undone;
|
|
1040
|
+
}
|
|
1041
|
+
return s;
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1002
1044
|
var SCHOOL_FLUFF_WORDS = new Set([
|
|
1003
1045
|
...[...SCHOOL_FLUFF_VOCABULARY.values()].filter((entry) => entry.tokenFluff).map((entry) => entry.canonical),
|
|
1004
1046
|
...MATCH_KEY_INSTITUTION_WORDS
|
|
@@ -1039,7 +1081,7 @@ function distinctiveTokens(tokens) {
|
|
|
1039
1081
|
return tokens.filter((t) => t.length > 2 && !SCHOOL_FLUFF_WORDS.has(t));
|
|
1040
1082
|
}
|
|
1041
1083
|
function foldSchoolName(raw) {
|
|
1042
|
-
let s = raw.toLowerCase();
|
|
1084
|
+
let s = repairSchoolMojibake(raw).toLowerCase();
|
|
1043
1085
|
s = s.normalize("NFD").replace(/[̀-ͯ]/g, "");
|
|
1044
1086
|
s = s.replace(/ß/g, "ss").replace(/æ/g, "ae").replace(/œ/g, "oe").replace(/ø/g, "o");
|
|
1045
1087
|
s = normalizeApostrophes(s);
|
|
@@ -1124,41 +1166,6 @@ function createSchoolNameReader(options = {}) {
|
|
|
1124
1166
|
...options.garbage ?? [],
|
|
1125
1167
|
...options.refusals ?? NOT_A_SCHOOL
|
|
1126
1168
|
]);
|
|
1127
|
-
const CP1252_HIGH = "€‚ƒ„…†‡ˆ‰Š‹Œ" + "Ž‘’“”•–—˜™š›" + "œžŸ";
|
|
1128
|
-
const BYTE_OF_CP1252 = new Map([...CP1252_HIGH].map((ch, i) => [ch.codePointAt(0), 128 + i]));
|
|
1129
|
-
const MOJIBAKE = /[Â-ßà-ï][-¿‚-›ŒŠŽ]/u;
|
|
1130
|
-
const MOJIBAKE_ALL = new RegExp(MOJIBAKE.source, "gu");
|
|
1131
|
-
const NON_LATIN_LETTER = /(?!\p{Script=Latin})\p{L}/u;
|
|
1132
|
-
function isRepair(before, after) {
|
|
1133
|
-
if (!NON_LATIN_LETTER.test(after))
|
|
1134
|
-
return true;
|
|
1135
|
-
return (before.match(MOJIBAKE_ALL)?.length ?? 0) >= 2;
|
|
1136
|
-
}
|
|
1137
|
-
function undoMojibake(s) {
|
|
1138
|
-
const bytes = new Uint8Array(s.length);
|
|
1139
|
-
for (let i = 0;i < s.length; i++) {
|
|
1140
|
-
const code = s.charCodeAt(i);
|
|
1141
|
-
const byte = BYTE_OF_CP1252.get(code) ?? code;
|
|
1142
|
-
if (byte > 255)
|
|
1143
|
-
return;
|
|
1144
|
-
bytes[i] = byte;
|
|
1145
|
-
}
|
|
1146
|
-
try {
|
|
1147
|
-
return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
1148
|
-
} catch {
|
|
1149
|
-
return;
|
|
1150
|
-
}
|
|
1151
|
-
}
|
|
1152
|
-
function repairMojibake(print) {
|
|
1153
|
-
let s = print;
|
|
1154
|
-
for (let round = 0;round < 3 && MOJIBAKE.test(s); round++) {
|
|
1155
|
-
const undone = undoMojibake(s);
|
|
1156
|
-
if (undone === undefined || undone === s || !isRepair(s, undone))
|
|
1157
|
-
return s;
|
|
1158
|
-
s = undone;
|
|
1159
|
-
}
|
|
1160
|
-
return s;
|
|
1161
|
-
}
|
|
1162
1169
|
const SPACING_ACUTE_AFTER_VOWEL = /((?<=\p{L})[AEIOUaeiou]|[AEIUaeiu])[´ˊ](?![sS]\b)/gu;
|
|
1163
1170
|
const SPACING_ACUTE = /[´ˊ]/gu;
|
|
1164
1171
|
function readSpacingAcute(print) {
|
|
@@ -1166,7 +1173,7 @@ function createSchoolNameReader(options = {}) {
|
|
|
1166
1173
|
}
|
|
1167
1174
|
const INJECTED_LINK = /(?<=^|[\s([])(?:https?:\/\/|www\.)[^\s)\]]+/giu;
|
|
1168
1175
|
function renderSn1(print) {
|
|
1169
|
-
return normalizeApostrophes2(readSpacingAcute(
|
|
1176
|
+
return normalizeApostrophes2(readSpacingAcute(repairSchoolMojibake(print)).normalize("NFKC")).replace(/\p{Cf}+/gu, "").replace(/\p{Cc}+/gu, " ").replace(INJECTED_LINK, " ").replace(/\s+/gu, " ").trim();
|
|
1170
1177
|
}
|
|
1171
1178
|
const COMPOUND_OPENERS = new Set([
|
|
1172
1179
|
"hyphen",
|
package/dist/title.js
CHANGED
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
titleRelation2,
|
|
10
10
|
ladderOf2,
|
|
11
11
|
matchTitle2
|
|
12
|
-
} from "./chunks/place-
|
|
13
|
-
import"./chunks/place-
|
|
12
|
+
} from "./chunks/place-by6eeyjt.js";
|
|
13
|
+
import"./chunks/place-5zyfq5xy.js";
|
|
14
14
|
export {
|
|
15
15
|
codePopulation2 as codePopulation,
|
|
16
16
|
compTitle2 as compTitle,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function repairSchoolMojibake(print: string): string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@finbheara/domain",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.60.0",
|
|
4
4
|
"description": "Places, CLRG regions and events, school names and the links between schools, ages, dances, competition titles, codes and schedules, and a person's print in its role, as they are printed: read, compared and told apart",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"places",
|