@natlibfi/marc-record-validators-melinda 12.0.0-alpha.7 → 12.0.0-alpha.9
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/ending-punctuation-conf.js +3 -2
- package/dist/ending-punctuation-conf.js.map +2 -2
- package/dist/ending-punctuation.js +48 -9
- package/dist/ending-punctuation.js.map +3 -3
- package/dist/ending-punctuation.test.js +31 -9
- package/dist/ending-punctuation.test.js.map +2 -2
- package/dist/indicator-fixes.js +10 -0
- package/dist/indicator-fixes.js.map +2 -2
- package/dist/isbn-issn.js +7 -4
- package/dist/isbn-issn.js.map +2 -2
- package/dist/merge-fields/dataProvenance.js +1 -1
- package/dist/merge-fields/dataProvenance.js.map +2 -2
- package/dist/punctuation2.js +11 -5
- package/dist/punctuation2.js.map +2 -2
- package/dist/translate-terms.test.js +12 -2
- package/dist/translate-terms.test.js.map +2 -2
- package/dist/utils.js.map +2 -2
- package/package.json +8 -7
- package/src/ending-punctuation-conf.js +3 -3
- package/src/ending-punctuation.js +62 -11
- package/src/ending-punctuation.test.js +33 -9
- package/src/indicator-fixes.js +13 -0
- package/src/isbn-issn.js +10 -5
- package/src/merge-fields/dataProvenance.js +1 -1
- package/src/punctuation2.js +14 -5
- package/src/translate-terms.test.js +25 -2
- package/src/utils.js +6 -0
- package/test-fixtures/indicator-fixes/10/expectedResult.json +11 -0
- package/test-fixtures/indicator-fixes/10/metadata.json +4 -0
- package/test-fixtures/indicator-fixes/10/record.json +11 -0
- package/test-fixtures/translate-terms-data.js +42 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const finnishTerms = [
|
|
2
2
|
/^(?:allars|bella|fast|juho|jupo|kassu|kauno|kaunokki|keko|koko|kulo|liiko|liito|local|mero|mts|musa|oiko|puho|seko|woto|valo|ysa|yso)$/u,
|
|
3
3
|
/^(?:kauno|slm|yso)\//u
|
|
4
|
+
// <= yso/* etc
|
|
4
5
|
];
|
|
5
6
|
const validPuncMarks = "?-!.";
|
|
6
7
|
const validQuoteChars = `"'`;
|
|
@@ -654,7 +655,7 @@ const confSpec = [
|
|
|
654
655
|
index: null,
|
|
655
656
|
punc: false,
|
|
656
657
|
special: {
|
|
657
|
-
|
|
658
|
+
termSubfieldCode: "2",
|
|
658
659
|
finnishTerms,
|
|
659
660
|
else: true
|
|
660
661
|
}
|
|
@@ -674,7 +675,7 @@ const confSpec = [
|
|
|
674
675
|
index: null,
|
|
675
676
|
punc: false,
|
|
676
677
|
special: {
|
|
677
|
-
|
|
678
|
+
termSubfieldCode: "2",
|
|
678
679
|
finnishTerms,
|
|
679
680
|
else: true
|
|
680
681
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/ending-punctuation-conf.js"],
|
|
4
|
-
"sourcesContent": ["// Const finnishTerms = ['ysa', 'yso', 'kassu', 'seko', 'valo', 'kulo', 'puho', 'oiko', 'mero', 'liito', 'fast', 'allars', 'kaunokki'];\nconst finnishTerms = [\n /^(?:allars|bella|fast|juho|jupo|kassu|kauno|kaunokki|keko|koko|kulo|liiko|liito|local|mero|mts|musa|oiko|puho|seko|woto|valo|ysa|yso)$/u,\n /^(?:kauno|slm|yso)\\//u\n];\n\nconst validPuncMarks = '?-!.'; // NB! ')' and ']' are only valid for some fields!\nconst validQuoteChars = \"\\\"'\";\n// Configuration specification\nconst confSpec = [\n { // 010-035 EI\n rangeStart: 10,\n rangeEnd: 35,\n index: null,\n punc: false,\n special: null\n }, { // 036 KYLL\u00C4 vain osakent\u00E4n $b j\u00E4lkeen\n rangeStart: null,\n rangeEnd: null,\n index: 36,\n punc: true,\n special: {\n afterOnly: 'b',\n strict: true // Punctuation only after $b, because $a is register number\n }\n }, { // 037-050 EI\n rangeStart: 37,\n rangeEnd: 50,\n index: null,\n punc: false,\n special: null\n }, { // 051 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 51,\n punc: true,\n special: null\n }, { // 052-09X EI\n rangeStart: 52,\n rangeEnd: 99,\n index: null,\n punc: false,\n special: null\n }, { // 100 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 100,\n punc: true,\n special: null\n }, { // 110 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 110,\n punc: true,\n special: null\n }, { // 111 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 111,\n punc: true,\n special: null\n }, { // 130 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 130,\n punc: true,\n special: null\n }, { // 210 EI\n rangeStart: null,\n rangeEnd: null,\n index: 210,\n punc: false,\n special: null\n }, { // 222 EI\n rangeStart: null,\n rangeEnd: null,\n index: 222,\n punc: false,\n special: null\n }, { // 240 EI\n rangeStart: null,\n rangeEnd: null,\n index: 240,\n punc: false,\n special: null\n }, { // 242 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $y, piste on ennen sit\u00E4\n rangeStart: null,\n rangeEnd: null,\n index: 242,\n punc: true,\n special: {\n secondLastIfLast: 'y',\n last: false\n }\n }, { // 243 EI\n rangeStart: null,\n rangeEnd: null,\n index: 243,\n punc: false,\n special: null\n }, { // 245 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 245,\n punc: true,\n special: null\n }, { // 246-247 EI\n rangeStart: 246,\n rangeEnd: 247,\n index: null,\n punc: false,\n special: null\n }, { // 250 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 250,\n punc: true,\n special: null\n }, { // 251 EI\n rangeStart: null,\n rangeEnd: null,\n index: 251,\n punc: false,\n special: null\n }, { // 254-256 KYLL\u00C4\n rangeStart: 254,\n rangeEnd: 256,\n index: null,\n punc: true,\n special: null\n }, { // 257\n rangeStart: null,\n rangeEnd: null,\n index: 257,\n punc: true,\n special: {\n noPuncIfField: '2'\n }\n }, { // 258 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 258,\n punc: true,\n special: null\n }, { // 260 KYLL\u00C4 P\u00E4\u00E4s\u00E4\u00E4nt\u00F6: $a : $b, $c. Tarkista eri poikkeukset ja v\u00E4limerkitys MARC 21 Full -versiosta\n rangeStart: null,\n rangeEnd: null,\n index: 260,\n punc: true,\n special: {\n afterOnly: 'c',\n strict: false // Others fields may contain abbreviation\n }\n }, { // 263 EI\n rangeStart: null,\n rangeEnd: null,\n index: 263,\n punc: false,\n special: null\n }, { // 264 KYLL\u00C4 Tarkista poikkeukset MARC 21 -sovellusohjeesta\n rangeStart: null,\n rangeEnd: null,\n index: 264,\n punc: true,\n special: {\n ifBoth: true,\n puncSubField: 'c',\n ifInd2: ['0', '1', '2', '3'],\n ifLastCharNot: ']-)?',\n noPuncIfInd2: ['4']\n }\n }, { // 270 EI\n rangeStart: null,\n rangeEnd: null,\n index: 270,\n punc: false,\n special: null\n }, { // 300 EI\n rangeStart: null,\n rangeEnd: null,\n index: 300,\n punc: false,\n special: null\n }, { // 306 EI\n rangeStart: null,\n rangeEnd: null,\n index: 306,\n punc: false,\n special: null\n }, { // 307 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 307,\n punc: true,\n special: null\n }, { // 310 EI\n rangeStart: null,\n rangeEnd: null,\n index: 310,\n punc: false,\n special: null\n }, { // 321 EI\n rangeStart: null,\n rangeEnd: null,\n index: 321,\n punc: false,\n special: null\n }, { // 335-338 EI\n rangeStart: 335,\n rangeEnd: 338,\n index: null,\n punc: false,\n special: null\n }, { // 340 KYLL\u00C4 Vain joidenkin osakenttien j\u00E4lkeen. Tarkista osakent\u00E4t MARC 21 Full -versiosta\n rangeStart: null,\n rangeEnd: null,\n index: 340,\n punc: true,\n special: {\n lastOf: ['a', 'd', 'e', 'f', 'h', 'i'],\n mandatory: ['b']\n }\n }, { // 341-342 EI\n rangeStart: 341,\n rangeEnd: 342,\n index: null,\n punc: false,\n special: null\n }, { // 343 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 343,\n punc: true,\n special: null\n }, { // 344-348 EI\n rangeStart: 344,\n rangeEnd: 348,\n index: null,\n punc: false,\n special: null\n }, { // 351-352 KYLL\u00C4\n rangeStart: 351,\n rangeEnd: 352,\n index: null,\n punc: true,\n special: null\n }, { // 355 EI\n rangeStart: null,\n rangeEnd: null,\n index: 355,\n punc: false,\n special: null\n }, { // 357 EI\n rangeStart: null,\n rangeEnd: null,\n index: 357,\n punc: false,\n special: null\n }, { // 362 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 362,\n punc: true,\n special: null\n }, { // 363 EI\n rangeStart: null,\n rangeEnd: null,\n index: 363,\n punc: false,\n special: null\n }, { // 365-366 EI\n rangeStart: 365,\n rangeEnd: 366,\n index: null,\n punc: false,\n special: null\n }, { // 370 EI\n rangeStart: null,\n rangeEnd: null,\n index: 370,\n punc: false,\n special: null\n }, { // 377 EI\n rangeStart: null,\n rangeEnd: null,\n index: 377,\n punc: false,\n special: null\n }, { // 380-388 EI\n rangeStart: 380,\n rangeEnd: 388,\n index: null,\n punc: false,\n special: null\n }, { // 490 EI\n rangeStart: null,\n rangeEnd: null,\n index: 490,\n punc: false,\n special: null\n }, { // 500-505 KYLL\u00C4\n rangeStart: 500,\n rangeEnd: 505,\n index: null,\n punc: true,\n special: null\n }, { // 506 KYLL\u00C4\n index: 506,\n punc: true,\n special: {\n noPuncIfField: 'f'\n }\n }, { // 507-509 KYLL\u00C4\n rangeStart: 507,\n rangeEnd: 509,\n index: null,\n punc: true,\n special: null\n }, { // 510 EI\n rangeStart: null,\n rangeEnd: null,\n index: 510,\n punc: false,\n special: null\n }, { // 511-518 KYLL\u00C4\n rangeStart: 511,\n rangeEnd: 518,\n index: null,\n punc: true,\n special: null\n }, { // 520 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $u, piste on ennen sit\u00E4\n rangeStart: null,\n rangeEnd: null,\n index: 520,\n punc: true,\n special: {\n secondLastIfLast: 'u'\n // Last: false //$u is URL and hence should not be checked as URL's can have '.' at end\n }\n }, { // 521-526 KYLL\u00C4\n rangeStart: 521,\n rangeEnd: 526,\n index: null,\n punc: true,\n special: null\n }, { // 530 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 530,\n punc: true,\n special: null\n }, { // 532 EI\n rangeStart: null,\n rangeEnd: null,\n index: 532,\n punc: false,\n special: null\n }, { // 533-534 KYLL\u00C4\n rangeStart: 533,\n rangeEnd: 534,\n index: null,\n punc: true,\n special: null\n }, { // 535-536 EI\n rangeStart: 535,\n rangeEnd: 536,\n index: null,\n punc: false,\n special: null\n }, { // 538 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $u, piste on ennen sit\u00E4\n rangeStart: null,\n rangeEnd: null,\n index: 538,\n punc: true,\n special: {\n secondLastIfLast: 'u'\n // Last: false //$u is URL and hence should not be checked as URL's can have '.' at end\n }\n }, { // 540-541 KYLL\u00C4\n rangeStart: 540,\n rangeEnd: 541,\n index: null,\n punc: true,\n special: {\n noPuncIfField: 'u'\n }\n }, { // 542 EI\n rangeStart: null,\n rangeEnd: null,\n index: 542,\n punc: false,\n special: null\n }, { // 544-547 KYLL\u00C4\n rangeStart: 544,\n rangeEnd: 547,\n index: null,\n punc: true,\n special: null\n }, { // 550 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 550,\n punc: true,\n special: null\n }, { // 552 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 552,\n punc: true,\n special: null\n }, { // 555-556 KYLL\u00C4\n rangeStart: 555,\n rangeEnd: 556,\n index: null,\n punc: true,\n special: null\n }, { // 561-563 KYLL\u00C4\n rangeStart: 561,\n rangeEnd: 563,\n index: null,\n punc: true,\n special: null\n }, { // 565 EI\n rangeStart: null,\n rangeEnd: null,\n index: 565,\n punc: false,\n special: null\n }, { // 567 KYLL\u00C4 osakent\u00E4n $a j\u00E4lkeen, EI muiden osakenttien j\u00E4lkeen\n rangeStart: null,\n rangeEnd: null,\n index: 567,\n punc: true,\n special: {\n afterOnly: 'a',\n strict: true // $b can only be controlled term\n }\n }, { // 580-581 KYLL\u00C4\n rangeStart: 580,\n rangeEnd: 581,\n index: null,\n punc: true,\n special: null\n }, { // 583 EI\n rangeStart: null,\n rangeEnd: null,\n index: 583,\n punc: false,\n special: null\n }, { // 584-585 KYLL\u00C4\n rangeStart: 584,\n rangeEnd: 585,\n index: null,\n punc: true,\n special: null\n }, { // 586 EI\n rangeStart: null,\n rangeEnd: null,\n index: 586,\n punc: false,\n special: null\n }, { // 588 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: null,\n punc: true,\n special: null\n }, { // 59X EI\n rangeStart: 590,\n rangeEnd: 599,\n index: null,\n punc: false,\n special: null\n }, { // 600 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 600,\n punc: true,\n special: null\n }, { // 610 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 610,\n punc: true,\n special: null\n }, { // 611 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 611,\n punc: true,\n special: null\n }, { // 630 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 630,\n punc: true,\n special: null\n }, { // 647-651 EI suomalaisten sanastojen termeihin, muihin sanaston k\u00E4yt\u00E4nn\u00F6n mukaan, yleens\u00E4 KYLL\u00C4\n rangeStart: 647,\n rangeEnd: 651,\n index: null,\n punc: false,\n special: {\n termField: '2',\n finnishTerms,\n else: true\n }\n }, { // 653 EI\n rangeStart: null,\n rangeEnd: null,\n index: 653,\n punc: false,\n special: null\n }, { // 654-662 EI suomalaisten sanastojen termeihin, muihin sanaston k\u00E4yt\u00E4nn\u00F6n mukaan, yleens\u00E4 KYLL\u00C4\n rangeStart: 654,\n rangeEnd: 662,\n index: null,\n punc: false,\n special: {\n termField: '2',\n finnishTerms,\n else: true\n }\n }, { // 69X EI\n rangeStart: 690,\n rangeEnd: 699,\n index: null,\n punc: false,\n special: null\n }, { // 700 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 700,\n punc: true,\n special: null\n }, { // 710 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 710,\n punc: true,\n special: null\n }, { // 711 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 711,\n punc: true,\n special: null\n }, { // 720 EI\n rangeStart: null,\n rangeEnd: null,\n index: 720,\n punc: false,\n special: null\n }, { // 730 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 730,\n punc: true,\n special: null\n }, { // 740 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 740,\n punc: true,\n special: null\n }, { // 751 EI\n rangeStart: null,\n rangeEnd: null,\n index: 751,\n punc: false,\n special: null\n }, { // 752 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 752,\n punc: true,\n special: null\n }, { // 753 EI\n rangeStart: null,\n rangeEnd: null,\n index: 753,\n punc: false,\n special: null\n }, { // 754 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 754,\n punc: true,\n special: null\n }, { // 758 EI\n rangeStart: null,\n rangeEnd: null,\n index: 758,\n punc: false,\n special: null\n }, { // 760-787 KYLL\u00C4 osakent\u00E4n $a j\u00E4lkeen, EI muiden osakenttien j\u00E4lkeen\n rangeStart: 760,\n rangeEnd: 787,\n index: null,\n punc: true,\n special: {\n afterOnly: 'a',\n strict: false\n }\n }, { // 800 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 800,\n punc: true,\n special: null\n }, { // 810 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 810,\n punc: true,\n special: null\n }, { // 811 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 811,\n punc: true,\n special: null\n }, { // 830 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 830,\n punc: true,\n special: null\n }, { // 850 EI\n rangeStart: null,\n rangeEnd: null,\n index: 850,\n punc: false,\n special: null\n }, { // 852 EI\n rangeStart: null,\n rangeEnd: null,\n index: 852,\n punc: false,\n special: null\n }, { // 856 EI\n rangeStart: null,\n rangeEnd: null,\n index: 856,\n punc: false,\n special: null\n }, { // 880 Samoin kuin vastaavat kent\u00E4t\n rangeStart: null,\n rangeEnd: null,\n index: 880,\n punc: null,\n special: {\n linked: '6'\n }\n }, { // 882-887 EI\n rangeStart: 882,\n rangeEnd: 887,\n index: null,\n punc: false,\n special: null\n }, { // 9XX EI\n rangeStart: 900,\n rangeEnd: 999,\n index: null,\n punc: false,\n special: null\n }\n];\n\nexport {finnishTerms, validPuncMarks, validQuoteChars, confSpec};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["// Const finnishTerms = ['ysa', 'yso', 'kassu', 'seko', 'valo', 'kulo', 'puho', 'oiko', 'mero', 'liito', 'fast', 'allars', 'kaunokki'];\nconst finnishTerms = [\n /^(?:allars|bella|fast|juho|jupo|kassu|kauno|kaunokki|keko|koko|kulo|liiko|liito|local|mero|mts|musa|oiko|puho|seko|woto|valo|ysa|yso)$/u,\n /^(?:kauno|slm|yso)\\//u // <= yso/* etc\n];\n\nconst validPuncMarks = '?-!.'; // NB! ')' and ']' are only valid for some fields!\nconst validQuoteChars = \"\\\"'\";\n// Configuration specification\nconst confSpec = [\n { // 010-035 EI\n rangeStart: 10,\n rangeEnd: 35,\n index: null,\n punc: false,\n special: null\n }, { // 036 KYLL\u00C4 vain osakent\u00E4n $b j\u00E4lkeen\n rangeStart: null,\n rangeEnd: null,\n index: 36,\n punc: true,\n special: {\n afterOnly: 'b',\n strict: true // Punctuation only after $b, because $a is register number\n }\n }, { // 037-050 EI\n rangeStart: 37,\n rangeEnd: 50,\n index: null,\n punc: false,\n special: null\n }, { // 051 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 51,\n punc: true,\n special: null\n }, { // 052-09X EI\n rangeStart: 52,\n rangeEnd: 99,\n index: null,\n punc: false,\n special: null\n }, { // 100 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 100,\n punc: true,\n special: null\n }, { // 110 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 110,\n punc: true,\n special: null\n }, { // 111 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 111,\n punc: true,\n special: null\n }, { // 130 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 130,\n punc: true,\n special: null\n }, { // 210 EI\n rangeStart: null,\n rangeEnd: null,\n index: 210,\n punc: false,\n special: null\n }, { // 222 EI\n rangeStart: null,\n rangeEnd: null,\n index: 222,\n punc: false,\n special: null\n }, { // 240 EI\n rangeStart: null,\n rangeEnd: null,\n index: 240,\n punc: false,\n special: null\n }, { // 242 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $y, piste on ennen sit\u00E4\n rangeStart: null,\n rangeEnd: null,\n index: 242,\n punc: true,\n special: {\n secondLastIfLast: 'y',\n last: false\n }\n }, { // 243 EI\n rangeStart: null,\n rangeEnd: null,\n index: 243,\n punc: false,\n special: null\n }, { // 245 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 245,\n punc: true,\n special: null\n }, { // 246-247 EI\n rangeStart: 246,\n rangeEnd: 247,\n index: null,\n punc: false,\n special: null\n }, { // 250 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 250,\n punc: true,\n special: null\n }, { // 251 EI\n rangeStart: null,\n rangeEnd: null,\n index: 251,\n punc: false,\n special: null\n }, { // 254-256 KYLL\u00C4\n rangeStart: 254,\n rangeEnd: 256,\n index: null,\n punc: true,\n special: null\n }, { // 257\n rangeStart: null,\n rangeEnd: null,\n index: 257,\n punc: true,\n special: {\n noPuncIfField: '2'\n }\n }, { // 258 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 258,\n punc: true,\n special: null\n }, { // 260 KYLL\u00C4 P\u00E4\u00E4s\u00E4\u00E4nt\u00F6: $a : $b, $c. Tarkista eri poikkeukset ja v\u00E4limerkitys MARC 21 Full -versiosta\n rangeStart: null,\n rangeEnd: null,\n index: 260,\n punc: true,\n special: {\n afterOnly: 'c',\n strict: false // Others fields may contain abbreviation\n }\n }, { // 263 EI\n rangeStart: null,\n rangeEnd: null,\n index: 263,\n punc: false,\n special: null\n }, { // 264 KYLL\u00C4 Tarkista poikkeukset MARC 21 -sovellusohjeesta\n rangeStart: null,\n rangeEnd: null,\n index: 264,\n punc: true,\n special: {\n ifBoth: true,\n puncSubField: 'c',\n ifInd2: ['0', '1', '2', '3'],\n ifLastCharNot: ']-)?',\n noPuncIfInd2: ['4']\n }\n }, { // 270 EI\n rangeStart: null,\n rangeEnd: null,\n index: 270,\n punc: false,\n special: null\n }, { // 300 EI\n rangeStart: null,\n rangeEnd: null,\n index: 300,\n punc: false,\n special: null\n }, { // 306 EI\n rangeStart: null,\n rangeEnd: null,\n index: 306,\n punc: false,\n special: null\n }, { // 307 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 307,\n punc: true,\n special: null\n }, { // 310 EI\n rangeStart: null,\n rangeEnd: null,\n index: 310,\n punc: false,\n special: null\n }, { // 321 EI\n rangeStart: null,\n rangeEnd: null,\n index: 321,\n punc: false,\n special: null\n }, { // 335-338 EI\n rangeStart: 335,\n rangeEnd: 338,\n index: null,\n punc: false,\n special: null\n }, { // 340 KYLL\u00C4 Vain joidenkin osakenttien j\u00E4lkeen. Tarkista osakent\u00E4t MARC 21 Full -versiosta\n rangeStart: null,\n rangeEnd: null,\n index: 340,\n punc: true,\n special: {\n lastOf: ['a', 'd', 'e', 'f', 'h', 'i'],\n mandatory: ['b']\n }\n }, { // 341-342 EI\n rangeStart: 341,\n rangeEnd: 342,\n index: null,\n punc: false,\n special: null\n }, { // 343 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 343,\n punc: true,\n special: null\n }, { // 344-348 EI\n rangeStart: 344,\n rangeEnd: 348,\n index: null,\n punc: false,\n special: null\n }, { // 351-352 KYLL\u00C4\n rangeStart: 351,\n rangeEnd: 352,\n index: null,\n punc: true,\n special: null\n }, { // 355 EI\n rangeStart: null,\n rangeEnd: null,\n index: 355,\n punc: false,\n special: null\n }, { // 357 EI\n rangeStart: null,\n rangeEnd: null,\n index: 357,\n punc: false,\n special: null\n }, { // 362 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 362,\n punc: true,\n special: null\n }, { // 363 EI\n rangeStart: null,\n rangeEnd: null,\n index: 363,\n punc: false,\n special: null\n }, { // 365-366 EI\n rangeStart: 365,\n rangeEnd: 366,\n index: null,\n punc: false,\n special: null\n }, { // 370 EI\n rangeStart: null,\n rangeEnd: null,\n index: 370,\n punc: false,\n special: null\n }, { // 377 EI\n rangeStart: null,\n rangeEnd: null,\n index: 377,\n punc: false,\n special: null\n }, { // 380-388 EI\n rangeStart: 380,\n rangeEnd: 388,\n index: null,\n punc: false,\n special: null\n }, { // 490 EI\n rangeStart: null,\n rangeEnd: null,\n index: 490,\n punc: false,\n special: null\n }, { // 500-505 KYLL\u00C4\n rangeStart: 500,\n rangeEnd: 505,\n index: null,\n punc: true,\n special: null\n }, { // 506 KYLL\u00C4\n index: 506,\n punc: true,\n special: {\n noPuncIfField: 'f'\n }\n }, { // 507-509 KYLL\u00C4\n rangeStart: 507,\n rangeEnd: 509,\n index: null,\n punc: true,\n special: null\n }, { // 510 EI\n rangeStart: null,\n rangeEnd: null,\n index: 510,\n punc: false,\n special: null\n }, { // 511-518 KYLL\u00C4\n rangeStart: 511,\n rangeEnd: 518,\n index: null,\n punc: true,\n special: null\n }, { // 520 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $u, piste on ennen sit\u00E4\n rangeStart: null,\n rangeEnd: null,\n index: 520,\n punc: true,\n special: {\n secondLastIfLast: 'u'\n // Last: false //$u is URL and hence should not be checked as URL's can have '.' at end\n }\n }, { // 521-526 KYLL\u00C4\n rangeStart: 521,\n rangeEnd: 526,\n index: null,\n punc: true,\n special: null\n }, { // 530 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 530,\n punc: true,\n special: null\n }, { // 532 EI\n rangeStart: null,\n rangeEnd: null,\n index: 532,\n punc: false,\n special: null\n }, { // 533-534 KYLL\u00C4\n rangeStart: 533,\n rangeEnd: 534,\n index: null,\n punc: true,\n special: null\n }, { // 535-536 EI\n rangeStart: 535,\n rangeEnd: 536,\n index: null,\n punc: false,\n special: null\n }, { // 538 KYLL\u00C4 Jos viimeinen osakentt\u00E4 on $u, piste on ennen sit\u00E4\n rangeStart: null,\n rangeEnd: null,\n index: 538,\n punc: true,\n special: {\n secondLastIfLast: 'u'\n // Last: false //$u is URL and hence should not be checked as URL's can have '.' at end\n }\n }, { // 540-541 KYLL\u00C4\n rangeStart: 540,\n rangeEnd: 541,\n index: null,\n punc: true,\n special: {\n noPuncIfField: 'u'\n }\n }, { // 542 EI\n rangeStart: null,\n rangeEnd: null,\n index: 542,\n punc: false,\n special: null\n }, { // 544-547 KYLL\u00C4\n rangeStart: 544,\n rangeEnd: 547,\n index: null,\n punc: true,\n special: null\n }, { // 550 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 550,\n punc: true,\n special: null\n }, { // 552 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 552,\n punc: true,\n special: null\n }, { // 555-556 KYLL\u00C4\n rangeStart: 555,\n rangeEnd: 556,\n index: null,\n punc: true,\n special: null\n }, { // 561-563 KYLL\u00C4\n rangeStart: 561,\n rangeEnd: 563,\n index: null,\n punc: true,\n special: null\n }, { // 565 EI\n rangeStart: null,\n rangeEnd: null,\n index: 565,\n punc: false,\n special: null\n }, { // 567 KYLL\u00C4 osakent\u00E4n $a j\u00E4lkeen, EI muiden osakenttien j\u00E4lkeen\n rangeStart: null,\n rangeEnd: null,\n index: 567,\n punc: true,\n special: {\n afterOnly: 'a',\n strict: true // $b can only be controlled term\n }\n }, { // 580-581 KYLL\u00C4\n rangeStart: 580,\n rangeEnd: 581,\n index: null,\n punc: true,\n special: null\n }, { // 583 EI\n rangeStart: null,\n rangeEnd: null,\n index: 583,\n punc: false,\n special: null\n }, { // 584-585 KYLL\u00C4\n rangeStart: 584,\n rangeEnd: 585,\n index: null,\n punc: true,\n special: null\n }, { // 586 EI\n rangeStart: null,\n rangeEnd: null,\n index: 586,\n punc: false,\n special: null\n }, { // 588 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: null,\n punc: true,\n special: null\n }, { // 59X EI\n rangeStart: 590,\n rangeEnd: 599,\n index: null,\n punc: false,\n special: null\n }, { // 600 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 600,\n punc: true,\n special: null\n }, { // 610 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 610,\n punc: true,\n special: null\n }, { // 611 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 611,\n punc: true,\n special: null\n }, { // 630 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 630,\n punc: true,\n special: null\n }, { // 647-651 EI suomalaisten sanastojen termeihin, muihin sanaston k\u00E4yt\u00E4nn\u00F6n mukaan, yleens\u00E4 KYLL\u00C4\n rangeStart: 647,\n rangeEnd: 651,\n index: null,\n punc: false,\n special: {\n termSubfieldCode: '2',\n finnishTerms,\n else: true\n }\n }, { // 653 EI\n rangeStart: null,\n rangeEnd: null,\n index: 653,\n punc: false,\n special: null\n }, { // 654-662 EI suomalaisten sanastojen termeihin, muihin sanaston k\u00E4yt\u00E4nn\u00F6n mukaan, yleens\u00E4 KYLL\u00C4\n rangeStart: 654,\n rangeEnd: 662,\n index: null,\n punc: false,\n special: {\n termSubfieldCode: '2',\n finnishTerms,\n else: true\n }\n }, { // 69X EI\n rangeStart: 690,\n rangeEnd: 699,\n index: null,\n punc: false,\n special: null\n }, { // 700 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 700,\n punc: true,\n special: null\n }, { // 710 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 710,\n punc: true,\n special: null\n }, { // 711 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 711,\n punc: true,\n special: null\n }, { // 720 EI\n rangeStart: null,\n rangeEnd: null,\n index: 720,\n punc: false,\n special: null\n }, { // 730 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 730,\n punc: true,\n special: null\n }, { // 740 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 740,\n punc: true,\n special: null\n }, { // 751 EI\n rangeStart: null,\n rangeEnd: null,\n index: 751,\n punc: false,\n special: null\n }, { // 752 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 752,\n punc: true,\n special: null\n }, { // 753 EI\n rangeStart: null,\n rangeEnd: null,\n index: 753,\n punc: false,\n special: null\n }, { // 754 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 754,\n punc: true,\n special: null\n }, { // 758 EI\n rangeStart: null,\n rangeEnd: null,\n index: 758,\n punc: false,\n special: null\n }, { // 760-787 KYLL\u00C4 osakent\u00E4n $a j\u00E4lkeen, EI muiden osakenttien j\u00E4lkeen\n rangeStart: 760,\n rangeEnd: 787,\n index: null,\n punc: true,\n special: {\n afterOnly: 'a',\n strict: false\n }\n }, { // 800 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 800,\n punc: true,\n special: null\n }, { // 810 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 810,\n punc: true,\n special: null\n }, { // 811 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 811,\n punc: true,\n special: null\n }, { // 830 KYLL\u00C4\n rangeStart: null,\n rangeEnd: null,\n index: 830,\n punc: true,\n special: null\n }, { // 850 EI\n rangeStart: null,\n rangeEnd: null,\n index: 850,\n punc: false,\n special: null\n }, { // 852 EI\n rangeStart: null,\n rangeEnd: null,\n index: 852,\n punc: false,\n special: null\n }, { // 856 EI\n rangeStart: null,\n rangeEnd: null,\n index: 856,\n punc: false,\n special: null\n }, { // 880 Samoin kuin vastaavat kent\u00E4t\n rangeStart: null,\n rangeEnd: null,\n index: 880,\n punc: null,\n special: {\n linked: '6'\n }\n }, { // 882-887 EI\n rangeStart: 882,\n rangeEnd: 887,\n index: null,\n punc: false,\n special: null\n }, { // 9XX EI\n rangeStart: 900,\n rangeEnd: 999,\n index: null,\n punc: false,\n special: null\n }\n];\n\nexport {finnishTerms, validPuncMarks, validQuoteChars, confSpec};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -25,10 +25,6 @@ export default function() {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
function validateField(field, linkedTag, fix, message) {
|
|
28
|
-
function findLastSubfield(field2) {
|
|
29
|
-
const subfields = field2.subfields.filter((sf) => isNaN(sf.code) && "value" in sf);
|
|
30
|
-
return subfields.slice(-1).shift();
|
|
31
|
-
}
|
|
32
28
|
function getDefaultPuncMarks(tag2) {
|
|
33
29
|
if (tag2.match(/^[1678](?:00|10|11|30)/u) || tag2 === "740") {
|
|
34
30
|
return `${validPuncMarks})`;
|
|
@@ -49,7 +45,6 @@ function validateField(field, linkedTag, fix, message) {
|
|
|
49
45
|
const penultimateCharacter = subfield.value.length >= 2 ? subfield.value.charAt(subfield.value.length - 2) : void 0;
|
|
50
46
|
const antePenultimateCharacter = subfield.value.length >= 3 ? subfield.value.charAt(subfield.value.length - 3) : void 0;
|
|
51
47
|
if (punc && !(lastPuncMark || lastPuncDot)) {
|
|
52
|
-
console.log(puncMarks);
|
|
53
48
|
if (penultimateCharacter && validQuoteChars.includes(lastChar) && puncMarks.includes(penultimateCharacter)) {
|
|
54
49
|
} else {
|
|
55
50
|
message.message.push(`Field ${tag2} requires ending punctuation, ends in '${lastChar}'`);
|
|
@@ -118,11 +113,12 @@ function validateField(field, linkedTag, fix, message) {
|
|
|
118
113
|
}
|
|
119
114
|
});
|
|
120
115
|
normalPuncRules(lastSubField2, res2.punc, tag2, false, false);
|
|
121
|
-
} else if (res2.special.
|
|
116
|
+
} else if (res2.special.termSubfieldCode) {
|
|
122
117
|
lastSubField2 = findLastSubfield(field2);
|
|
123
118
|
if (lastSubField2) {
|
|
124
|
-
const
|
|
125
|
-
|
|
119
|
+
const lexicon = getLexicon(field2, res2.special.termSubfieldCode);
|
|
120
|
+
const proceed = !finnishException(field2, res2.special.termSubfieldCode, false);
|
|
121
|
+
if (lexicon && finnishTerms.some((p) => p.test(lexicon)) && proceed) {
|
|
126
122
|
normalPuncRules(lastSubField2, res2.punc, tag2, true, false);
|
|
127
123
|
} else {
|
|
128
124
|
normalPuncRules(lastSubField2, res2.special.else, tag2, false, false);
|
|
@@ -182,7 +178,11 @@ function validateField(field, linkedTag, fix, message) {
|
|
|
182
178
|
message.message.push(`Field ${field.tag} has invalid ending punctuation`);
|
|
183
179
|
return;
|
|
184
180
|
}
|
|
185
|
-
|
|
181
|
+
const forceNormal = res.special ? finnishException(field, res.special.termSubfieldCode, true) : false;
|
|
182
|
+
if (typeof res.special === "undefined" || res.special === null || forceNormal) {
|
|
183
|
+
if (forceNormal) {
|
|
184
|
+
console.info("EXCEPTION. SKIP FINNISH RULES");
|
|
185
|
+
}
|
|
186
186
|
lastSubField = findLastSubfield(field);
|
|
187
187
|
if (lastSubField) {
|
|
188
188
|
normalPuncRules(lastSubField, res.punc, field.tag, false, false, fix, message);
|
|
@@ -205,4 +205,43 @@ export function validateSingleField(field, linkedTag, fix) {
|
|
|
205
205
|
message.valid = !(message.message.length >= 1);
|
|
206
206
|
return message;
|
|
207
207
|
}
|
|
208
|
+
function getLexicon(field, subfieldCode) {
|
|
209
|
+
const languageSubfield = field.subfields.find(({ code }) => code === subfieldCode);
|
|
210
|
+
if (!languageSubfield || !languageSubfield.value) {
|
|
211
|
+
return void 0;
|
|
212
|
+
}
|
|
213
|
+
if (finnishTerms.find((p) => p.test(languageSubfield.value))) {
|
|
214
|
+
return languageSubfield.value;
|
|
215
|
+
}
|
|
216
|
+
return void 0;
|
|
217
|
+
}
|
|
218
|
+
function finnishException(field, termSubfieldCode, hasDot = true) {
|
|
219
|
+
const lexicon = getLexicon(field, termSubfieldCode);
|
|
220
|
+
if (!lexicon) {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
const lastSubfield = findLastSubfield(field);
|
|
224
|
+
if (!lastSubfield || !lastSubfield.value) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
if (field.tag === "648") {
|
|
228
|
+
if (lexicon === "yso/fin") {
|
|
229
|
+
if (hasDot) {
|
|
230
|
+
return lastSubfield.value.match(/ (?:eaa|[ej]Kr|jaa)\.$/u);
|
|
231
|
+
}
|
|
232
|
+
return lastSubfield.value.match(/ (?:eaa|[ej]Kr)|jaa$/u);
|
|
233
|
+
}
|
|
234
|
+
if (lexicon === "yso/swe") {
|
|
235
|
+
if (hasDot) {
|
|
236
|
+
return lastSubfield.value.match(/ (?:[ef]\.Kr|f\.v\.t)\.$/u);
|
|
237
|
+
}
|
|
238
|
+
return lastSubfield.value.match(/ (?:[ef]\.Kr|f\.v\.t)$/u);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
function findLastSubfield(field) {
|
|
244
|
+
const subfields = field.subfields.filter((sf) => isNaN(sf.code) && "value" in sf);
|
|
245
|
+
return subfields.slice(-1).shift();
|
|
246
|
+
}
|
|
208
247
|
//# sourceMappingURL=ending-punctuation.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/ending-punctuation.js"],
|
|
4
|
-
"sourcesContent": ["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* MARC record validators used in Melinda\n*\n* Copyright (c) 2014-2021 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of marc-record-validators-melinda\n*\n* marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Lesser General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* marc-record-validators-melinda is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Lesser General Public License for more details.\n*\n* You should have received a copy of the GNU Lesser General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\n// Import {validPuncMarks, finnishTerms, confSpec} from './ending-punctuation-conf.js';\nimport {validPuncMarks, validQuoteChars, finnishTerms, confSpec} from './ending-punctuation-conf.js';\nimport createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validator-melinda/ending-punctuation');\n\nexport default function () {\n return {\n description:\n 'Handles invalid ending punctuation',\n validate: record => validatePunc(record, false), // Record (Object), fix (boolean)\n fix: record => validatePunc(record, true) // Record (Object), fix (boolean)\n\n };\n\n // This is used to validate record against configuration\n function validatePunc(record, fix) {\n const message = {message: []};\n\n if (fix) {\n message.fix = [];\n }\n\n // Actual parsing of all fields\n if (!record.fields) {\n return false;\n }\n\n record.fields.forEach(field => {\n validateField(field, false, fix, message);\n });\n\n message.valid = !(message.message.length >= 1);\n return message;\n }\n}\n\n// Field validation with punctuation rules for normal and special cases in subfunction (to reduce complexity to please travisci)\nfunction validateField(field, linkedTag, fix, message) {\n // This is used to find last subfield that should have punctuation\n function findLastSubfield(field) {\n const subfields = field.subfields.filter(sf => isNaN(sf.code) && 'value' in sf);\n return subfields.slice(-1).shift();\n }\n\n function getDefaultPuncMarks(tag) {\n if (tag.match(/^[1678](?:00|10|11|30)/u) || tag === '740') { // As defined in Loppupisteohje\n return `${validPuncMarks})`;\n }\n // We don't want ').' here either. However, Loppupisteohje is a bit iffy here.\n // BUG: Note that our generic rules will remove dot from Finnish terms such as https://finto.fi/yso-aika/fi/page/p1069910600\n if (['647', '648', '650', '651', '654', '655', '656', '657', '658', '662'].includes(tag)) {\n return `${validPuncMarks})`;\n }\n if(['260'].includes(tag)) {\n return `${validPuncMarks})]`;\n }\n return validPuncMarks;\n }\n\n // Punctuation rule (Boolean), Check no ending dot strict (Boolean)\n function normalPuncRules(subfield, punc, tag, checkEnd, overrideValidPuncMarks) {\n const puncMarks = overrideValidPuncMarks || getDefaultPuncMarks(tag);\n const lastChar = subfield.value.slice(-1);\n const lastPuncMark = puncMarks.includes(lastChar); // If string ends to punctuation char\n const lastPuncDot = '.'.includes(lastChar); // If string ends to dot\n const penultimateCharacter = subfield.value.length >= 2 ? subfield.value.charAt(subfield.value.length - 2) : undefined;\n const antePenultimateCharacter = subfield.value.length >= 3 ? subfield.value.charAt(subfield.value.length - 3) : undefined;\n\n\n // Last char should be punc, but it's not one of listed punctuation marks nor dot\n if (punc && !(lastPuncMark || lastPuncDot)) {\n console.log(puncMarks)\n if (penultimateCharacter && validQuoteChars.includes(lastChar) && puncMarks.includes(penultimateCharacter)) {\n // Exception: do nothing! Ending in punc+quote combo is all right, and does not imply a missing punc\n }\n else {\n // Console.log(\"1. Invalid punctuation - missing\")\n message.message.push(`Field ${tag} requires ending punctuation, ends in '${lastChar}'`);\n if (fix) {\n subfield.value = subfield.value.concat('.');\n message.fix.push(`Field ${tag} - Added punctuation to $${subfield.code}`);\n }\n }\n\n // Last char is dot, but previous char is one of punc marks, like 'Question?.'\n } else if (lastPuncDot && penultimateCharacter && puncMarks.includes(penultimateCharacter)) {\n // Console.log(\"2. Invalid punctuation - duplicate, like '?.'\")\n message.message.push(`Field ${tag} has an extra dot after '${penultimateCharacter}'`);\n if (fix) {\n subfield.value = subfield.value.slice(0, -1);\n message.fix.push(`Field ${tag} - Removed dot after punctuation from $${subfield.code}`);\n }\n // Last char is dot, but previous two cars are punc+quote, like 'Lorum \"Ipsum.\".'\n } else if (lastPuncDot && antePenultimateCharacter && validQuoteChars.includes(penultimateCharacter) && puncMarks.includes(antePenultimateCharacter)) {\n message.message.push(`Field ${tag} has an extra dot in '${antePenultimateCharacter}${penultimateCharacter}${lastChar}'`);\n if (fix) {\n subfield.value = subfield.value.slice(0, -1);\n message.fix.push(`Field ${tag} - Removed '${lastChar}' after '${antePenultimateCharacter}${penultimateCharacter}'`);\n }\n // Last char shouldn't be dot !! This is behind checkEnd boolean, because of dots at end of abbreviations, so this is checked only in special cases !!//\n } else if (checkEnd && (!punc && lastPuncDot)) {\n // Console.log(\"3. Invalid punctuation - Shouldn't be dot, is\")\n message.message.push(`Field ${tag} has unwanted ending punctuation '${lastChar}'`);\n if (fix) {\n subfield.value = subfield.value.slice(0, -1);\n message.fix.push(`Field ${tag} - Removed punctuation from $${subfield.code}`);\n }\n }\n }\n\n // Special cases from here on\n function specialCases(res, field, tag) {\n let lastSubField = null;\n // Punctuation should be only after specific field\n if (res.special.afterOnly) {\n lastSubField = findLastSubfield(field);\n\n if (lastSubField) {\n if (typeof res.special.strict === 'undefined') {\n res.special.strict = true;\n }\n\n if (lastSubField.code === res.special.afterOnly) {\n normalPuncRules(lastSubField, res.punc, tag, res.special.strict, false);\n } else {\n normalPuncRules(lastSubField, !res.punc, tag, true, false);\n }\n }\n } else if (res.special.noPuncIfField) {\n if (field.subfields.some(subField => subField.code === res.special.noPuncIfField) === false) {\n lastSubField = findLastSubfield(field);\n normalPuncRules(lastSubField, res.punc, tag, true, false);\n }\n } else if (res.special.ifBoth) {\n lastSubField = findLastSubfield(field);\n if (lastSubField && lastSubField.code === res.special.puncSubField) {\n // Ind2 match, check second if at punc rules with special punc char override\n if (res.special.ifInd2 && res.special.ifInd2.includes(field.ind2)) {\n normalPuncRules(lastSubField, res.special.ifBoth, tag, true, res.special.ifLastCharNot);\n\n // Matches exception to special rule, noPuncIfInd2 (likely with value 4, that indicates copyright mark)\n } else if (res.special.noPuncIfInd2 && field.ind2 && res.special.noPuncIfInd2.includes(field.ind2)) {\n normalPuncRules(lastSubField, !res.special.ifBoth, tag, true, res.special.ifLastCharNot);\n\n // Does not match rules -> shouldn't have punc\n } else {\n normalPuncRules(lastSubField, !res.special.ifBoth, tag, true, res.special.ifLastCharNot);\n }\n }\n } else if (res.special.secondLastIfLast) {\n field.subfields.forEach(subField => {\n if (isNaN(subField.code) && res.special.secondLastIfLast !== subField.code) {\n lastSubField = subField;\n } // Not control field\n\n if (typeof res.special.last !== 'undefined' && res.special.secondLastIfLast === subField.code) {\n normalPuncRules(subField, res.special.last, tag, true, false);\n } // Strict because this field should not be abbreviation\n });\n normalPuncRules(lastSubField, res.punc, tag, false, false);\n\n // Search for Finnish terms\n } else if (res.special.termField) {\n lastSubField = findLastSubfield(field);\n\n if (lastSubField) {\n const languageField = field.subfields.find(({code}) => code === res.special.termField);\n if (languageField && languageField.value && finnishTerms.some(p => p.test(languageField.value))) {\n // If (languageField && languageField.value && finnishTerms.indexOf(languageField.value) > -1) {\n normalPuncRules(lastSubField, res.punc, tag, true, false);\n } else {\n normalPuncRules(lastSubField, res.special.else, tag, false, false); // Strict because of years etc (648, 650)\n }\n }\n // Search last of array in subfields and check if it has punc\n } else if (res.special.lastOf) {\n lastSubField = null;\n field.subfields.filter(subField => 'value' in subField).forEach(subField => {\n if (isNaN(subField.code) && res.special.lastOf.indexOf(subField.code) > -1) {\n lastSubField = subField;\n } // Not control field\n\n if (res.special.mandatory && res.special.mandatory.indexOf(subField.code) > -1) {\n normalPuncRules(subField, res.punc, tag, true, false);\n } // Strict because of mandatory\n });\n\n if (lastSubField) {\n normalPuncRules(lastSubField, res.punc, tag, false, false);\n }\n\n // If field has linked rules (tag: 880), find rules and re-validate\n } else if (res.special.linked) {\n let linkedTag = null;\n try {\n linkedTag = parseInt(field.subfields.find(({code}) => code === res.special.linked).value.substr(0, 3), 10); // Substring feels stupid, but is used in MarcRecord to extract tag.\n } catch (err) {\n debug(`Got error while parsing tag: ${err instanceof Error ? err.stack : err}`);\n return false;\n }\n\n validateField(field, linkedTag, fix, message);\n }\n // fallback\n else {\n debug(`special is definedm but no rule applies`);\n const lastSubField = findLastSubfield(field);\n\n if (lastSubField) {\n normalPuncRules(lastSubField, res.punc, field.tag, false, false, fix, message);\n }\n }\n }\n\n let res = null;\n let tag = null;\n let lastSubField = null;\n\n if (linkedTag) {\n tag = linkedTag;\n } else {\n try {\n tag = parseInt(field.tag, 10);\n } catch (err) {\n debug(`Got error while parsing tag: ${err instanceof Error ? err.stack : err}`);\n return false;\n }\n }\n\n // Find configuration object matching tag:\n res = Object.values(confSpec).find(o => {\n const rangeFine = o.rangeStart <= tag && o.rangeEnd >= tag;\n return o.index === tag || rangeFine;\n });\n\n if (!res) {\n return;\n } // Configuration not found, pass field without error\n\n // Field does not have subfields; invalid\n if (typeof field.subfields === 'undefined' || field.subfields === null) {\n message.message.push(`Field ${field.tag} has invalid ending punctuation`);\n return;\n }\n\n // Normal rules\n if (typeof res.special === 'undefined' || res.special === null) {\n lastSubField = findLastSubfield(field);\n\n if (lastSubField) {\n normalPuncRules(lastSubField, res.punc, field.tag, false, false, fix, message);\n }\n } else {\n try {\n specialCases(res, field, field.tag);\n } catch (e) {\n console.error('Catched error from special case: ', e); // eslint-disable-line no-console\n }\n }\n}\n\nexport function validateSingleField(field, linkedTag, fix) {\n const message = {};\n message.message = [];\n if (fix) {\n message.fix = [];\n }\n\n validateField(field, linkedTag, fix, message);\n message.valid = !(message.message.length >= 1);\n return message;\n}\n\n"],
|
|
5
|
-
"mappings": "AA6BA,SAAQ,gBAAgB,iBAAiB,cAAc,gBAAe;AACtE,OAAO,uBAAuB;AAE9B,MAAM,QAAQ,kBAAkB,4DAA4D;AAE5F,0BAA2B;AACzB,SAAO;AAAA,IACL,aACE;AAAA,IACF,UAAU,YAAU,aAAa,QAAQ,KAAK;AAAA;AAAA,IAC9C,KAAK,YAAU,aAAa,QAAQ,IAAI;AAAA;AAAA,EAE1C;AAGA,WAAS,aAAa,QAAQ,KAAK;AACjC,UAAM,UAAU,EAAC,SAAS,CAAC,EAAC;AAE5B,QAAI,KAAK;AACP,cAAQ,MAAM,CAAC;AAAA,IACjB;AAGA,QAAI,CAAC,OAAO,QAAQ;AAClB,aAAO;AAAA,IACT;AAEA,WAAO,OAAO,QAAQ,WAAS;AAC7B,oBAAc,OAAO,OAAO,KAAK,OAAO;AAAA,IAC1C,CAAC;AAED,YAAQ,QAAQ,EAAE,QAAQ,QAAQ,UAAU;AAC5C,WAAO;AAAA,EACT;AACF;AAGA,SAAS,cAAc,OAAO,WAAW,KAAK,SAAS;
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* MARC record validators used in Melinda\n*\n* Copyright (c) 2014-2021 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of marc-record-validators-melinda\n*\n* marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Lesser General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* marc-record-validators-melinda is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Lesser General Public License for more details.\n*\n* You should have received a copy of the GNU Lesser General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\n// Import {validPuncMarks, finnishTerms, confSpec} from './ending-punctuation-conf.js';\nimport {validPuncMarks, validQuoteChars, finnishTerms, confSpec} from './ending-punctuation-conf.js';\nimport createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validator-melinda/ending-punctuation');\n\nexport default function () {\n return {\n description:\n 'Handles invalid ending punctuation',\n validate: record => validatePunc(record, false), // Record (Object), fix (boolean)\n fix: record => validatePunc(record, true) // Record (Object), fix (boolean)\n\n };\n\n // This is used to validate record against configuration\n function validatePunc(record, fix) {\n const message = {message: []};\n\n if (fix) {\n message.fix = [];\n }\n\n // Actual parsing of all fields\n if (!record.fields) {\n return false;\n }\n\n record.fields.forEach(field => {\n validateField(field, false, fix, message);\n });\n\n message.valid = !(message.message.length >= 1);\n return message;\n }\n}\n\n// Field validation with punctuation rules for normal and special cases in subfunction (to reduce complexity to please travisci)\nfunction validateField(field, linkedTag, fix, message) {\n function getDefaultPuncMarks(tag) {\n if (tag.match(/^[1678](?:00|10|11|30)/u) || tag === '740') { // As defined in Loppupisteohje\n return `${validPuncMarks})`;\n }\n // We don't want ').' here either. However, Loppupisteohje is a bit iffy here.\n // BUG: Note that our generic rules will remove dot from Finnish terms such as https://finto.fi/yso-aika/fi/page/p1069910600\n if (['647', '648', '650', '651', '654', '655', '656', '657', '658', '662'].includes(tag)) {\n return `${validPuncMarks})`;\n }\n if(['260'].includes(tag)) {\n return `${validPuncMarks})]`;\n }\n return validPuncMarks;\n }\n\n // Punctuation rule (Boolean), Check no ending dot strict (Boolean)\n function normalPuncRules(subfield, punc, tag, checkEnd, overrideValidPuncMarks) {\n const puncMarks = overrideValidPuncMarks || getDefaultPuncMarks(tag);\n const lastChar = subfield.value.slice(-1);\n const lastPuncMark = puncMarks.includes(lastChar); // If string ends to punctuation char\n const lastPuncDot = '.'.includes(lastChar); // If string ends to dot\n const penultimateCharacter = subfield.value.length >= 2 ? subfield.value.charAt(subfield.value.length - 2) : undefined;\n const antePenultimateCharacter = subfield.value.length >= 3 ? subfield.value.charAt(subfield.value.length - 3) : undefined;\n\n\n // Last char should be punc, but it's not one of listed punctuation marks nor dot\n if (punc && !(lastPuncMark || lastPuncDot)) {\n //console.log(puncMarks)\n if (penultimateCharacter && validQuoteChars.includes(lastChar) && puncMarks.includes(penultimateCharacter)) {\n // Exception: do nothing! Ending in punc+quote combo is all right, and does not imply a missing punc\n }\n else {\n // Console.log(\"1. Invalid punctuation - missing\")\n message.message.push(`Field ${tag} requires ending punctuation, ends in '${lastChar}'`);\n if (fix) {\n subfield.value = subfield.value.concat('.');\n message.fix.push(`Field ${tag} - Added punctuation to $${subfield.code}`);\n }\n }\n\n // Last char is dot, but previous char is one of punc marks, like 'Question?.'\n } else if (lastPuncDot && penultimateCharacter && puncMarks.includes(penultimateCharacter)) {\n // Console.log(\"2. Invalid punctuation - duplicate, like '?.'\")\n message.message.push(`Field ${tag} has an extra dot after '${penultimateCharacter}'`);\n if (fix) {\n subfield.value = subfield.value.slice(0, -1);\n message.fix.push(`Field ${tag} - Removed dot after punctuation from $${subfield.code}`);\n }\n // Last char is dot, but previous two cars are punc+quote, like 'Lorum \"Ipsum.\".'\n } else if (lastPuncDot && antePenultimateCharacter && validQuoteChars.includes(penultimateCharacter) && puncMarks.includes(antePenultimateCharacter)) {\n message.message.push(`Field ${tag} has an extra dot in '${antePenultimateCharacter}${penultimateCharacter}${lastChar}'`);\n if (fix) {\n subfield.value = subfield.value.slice(0, -1);\n message.fix.push(`Field ${tag} - Removed '${lastChar}' after '${antePenultimateCharacter}${penultimateCharacter}'`);\n }\n // Last char shouldn't be dot !! This is behind checkEnd boolean, because of dots at end of abbreviations, so this is checked only in special cases !!//\n } else if (checkEnd && (!punc && lastPuncDot)) {\n // Console.log(\"3. Invalid punctuation - Shouldn't be dot, is\")\n message.message.push(`Field ${tag} has unwanted ending punctuation '${lastChar}'`);\n if (fix) {\n subfield.value = subfield.value.slice(0, -1);\n message.fix.push(`Field ${tag} - Removed punctuation from $${subfield.code}`);\n }\n }\n }\n\n // Special cases from here on\n function specialCases(res, field, tag) {\n let lastSubField = null;\n // Punctuation should be only after specific field\n if (res.special.afterOnly) {\n lastSubField = findLastSubfield(field);\n\n if (lastSubField) {\n if (typeof res.special.strict === 'undefined') {\n res.special.strict = true;\n }\n\n if (lastSubField.code === res.special.afterOnly) {\n normalPuncRules(lastSubField, res.punc, tag, res.special.strict, false);\n } else {\n normalPuncRules(lastSubField, !res.punc, tag, true, false);\n }\n }\n } else if (res.special.noPuncIfField) {\n if (field.subfields.some(subField => subField.code === res.special.noPuncIfField) === false) {\n lastSubField = findLastSubfield(field);\n normalPuncRules(lastSubField, res.punc, tag, true, false);\n }\n } else if (res.special.ifBoth) {\n lastSubField = findLastSubfield(field);\n if (lastSubField && lastSubField.code === res.special.puncSubField) {\n // Ind2 match, check second if at punc rules with special punc char override\n if (res.special.ifInd2 && res.special.ifInd2.includes(field.ind2)) {\n normalPuncRules(lastSubField, res.special.ifBoth, tag, true, res.special.ifLastCharNot);\n\n // Matches exception to special rule, noPuncIfInd2 (likely with value 4, that indicates copyright mark)\n } else if (res.special.noPuncIfInd2 && field.ind2 && res.special.noPuncIfInd2.includes(field.ind2)) {\n normalPuncRules(lastSubField, !res.special.ifBoth, tag, true, res.special.ifLastCharNot);\n\n // Does not match rules -> shouldn't have punc\n } else {\n normalPuncRules(lastSubField, !res.special.ifBoth, tag, true, res.special.ifLastCharNot);\n }\n }\n } else if (res.special.secondLastIfLast) {\n field.subfields.forEach(subField => {\n if (isNaN(subField.code) && res.special.secondLastIfLast !== subField.code) {\n lastSubField = subField;\n } // Not control field\n\n if (typeof res.special.last !== 'undefined' && res.special.secondLastIfLast === subField.code) {\n normalPuncRules(subField, res.special.last, tag, true, false);\n } // Strict because this field should not be abbreviation\n });\n normalPuncRules(lastSubField, res.punc, tag, false, false);\n\n // Search for Finnish terms\n } else if (res.special.termSubfieldCode) {\n lastSubField = findLastSubfield(field);\n\n if (lastSubField) {\n const lexicon = getLexicon(field, res.special.termSubfieldCode);\n const proceed = !finnishException(field, res.special.termSubfieldCode, false);\n\n\n //const languageField = field.subfields.find(({code}) => code === res.special.termSubfieldCode);\n //if (languageField && languageField.value && finnishTerms.some(p => p.test(languageField.value))) {\n if (lexicon && finnishTerms.some(p => p.test(lexicon)) && proceed) {\n // If (languageField && languageField.value && finnishTerms.indexOf(languageField.value) > -1) {\n normalPuncRules(lastSubField, res.punc, tag, true, false);\n } else {\n normalPuncRules(lastSubField, res.special.else, tag, false, false); // Strict because of years etc (648, 650)\n }\n }\n // Search last of array in subfields and check if it has punc\n } else if (res.special.lastOf) {\n lastSubField = null;\n field.subfields.filter(subField => 'value' in subField).forEach(subField => {\n if (isNaN(subField.code) && res.special.lastOf.indexOf(subField.code) > -1) {\n lastSubField = subField;\n } // Not control field\n\n if (res.special.mandatory && res.special.mandatory.indexOf(subField.code) > -1) {\n normalPuncRules(subField, res.punc, tag, true, false);\n } // Strict because of mandatory\n });\n\n if (lastSubField) {\n normalPuncRules(lastSubField, res.punc, tag, false, false);\n }\n\n // If field has linked rules (tag: 880), find rules and re-validate\n } else if (res.special.linked) {\n let linkedTag = null;\n try {\n linkedTag = parseInt(field.subfields.find(({code}) => code === res.special.linked).value.substr(0, 3), 10); // Substring feels stupid, but is used in MarcRecord to extract tag.\n } catch (err) {\n debug(`Got error while parsing tag: ${err instanceof Error ? err.stack : err}`);\n return false;\n }\n\n validateField(field, linkedTag, fix, message);\n }\n // fallback\n else {\n debug(`special is definedm but no rule applies`);\n const lastSubField = findLastSubfield(field);\n\n if (lastSubField) {\n normalPuncRules(lastSubField, res.punc, field.tag, false, false, fix, message);\n }\n }\n }\n\n let res = null;\n let tag = null;\n let lastSubField = null;\n\n if (linkedTag) {\n tag = linkedTag;\n } else {\n try {\n tag = parseInt(field.tag, 10);\n } catch (err) {\n debug(`Got error while parsing tag: ${err instanceof Error ? err.stack : err}`);\n return false;\n }\n }\n\n // Find configuration object matching tag:\n res = Object.values(confSpec).find(o => {\n const rangeFine = o.rangeStart <= tag && o.rangeEnd >= tag;\n return o.index === tag || rangeFine;\n });\n\n if (!res) {\n return;\n } // Configuration not found, pass field without error\n\n // Field does not have subfields; invalid\n if (typeof field.subfields === 'undefined' || field.subfields === null) {\n message.message.push(`Field ${field.tag} has invalid ending punctuation`);\n return;\n }\n\n const forceNormal = res.special ? finnishException(field, res.special.termSubfieldCode, true) : false;\n // Normal rules\n if (typeof res.special === 'undefined' || res.special === null || forceNormal) {\n if (forceNormal) {\n console.info(\"EXCEPTION. SKIP FINNISH RULES\");\n }\n lastSubField = findLastSubfield(field);\n\n if (lastSubField) {\n normalPuncRules(lastSubField, res.punc, field.tag, false, false, fix, message);\n }\n } else {\n try {\n specialCases(res, field, field.tag);\n } catch (e) {\n console.error('Catched error from special case: ', e); // eslint-disable-line no-console\n }\n }\n}\n\nexport function validateSingleField(field, linkedTag, fix) {\n const message = {};\n message.message = [];\n if (fix) {\n message.fix = [];\n }\n\n validateField(field, linkedTag, fix, message);\n message.valid = !(message.message.length >= 1);\n return message;\n}\n\nfunction getLexicon(field, subfieldCode) {\n const languageSubfield = field.subfields.find(({code}) => code === subfieldCode); // res.special.termSubfieldCode);\n if (!languageSubfield || !languageSubfield.value) {\n return undefined;\n }\n if (finnishTerms.find(p => p.test(languageSubfield.value))) {\n return languageSubfield.value;\n }\n return undefined;\n}\n\nfunction finnishException(field, termSubfieldCode, hasDot = true) {\n const lexicon = getLexicon(field, termSubfieldCode);\n if (!lexicon) {\n return false;\n }\n\n const lastSubfield = findLastSubfield(field);\n if (!lastSubfield || !lastSubfield.value) {\n return false;\n }\n // Some terms can end in '.' that we want to keep\n if (field.tag === '648') { // Yso-aika checks\n //console.log(`Finnish Exception? '${lastSubfield.value}', '${lexicon}', '${field.tag}'`);\n if (lexicon === 'yso/fin') { // 'eaa.' appears in prefLAbels and 'eKr.' in altLabels\n if (hasDot) {\n return lastSubfield.value.match(/ (?:eaa|[ej]Kr|jaa)\\.$/u); // Finnish term from which the dot is not to be removed\n }\n return lastSubfield.value.match(/ (?:eaa|[ej]Kr)|jaa$/u); // Finnish word that needs a dot\n }\n\n if (lexicon === 'yso/swe') {\n if (hasDot) {\n return lastSubfield.value.match(/ (?:[ef]\\.Kr|f\\.v\\.t)\\.$/u);\n }\n return lastSubfield.value.match(/ (?:[ef]\\.Kr|f\\.v\\.t)$/u);\n }\n }\n // yso has 'MODEL.LA.' and 'Corel R.A.V.E.' but these are so rare I'm not listing them\n\n return false;\n}\n\n // This is used to find last subfield that should have punctuation\n function findLastSubfield(field) {\n const subfields = field.subfields.filter(sf => isNaN(sf.code) && 'value' in sf);\n return subfields.slice(-1).shift();\n }"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["tag", "res", "field", "lastSubField", "linkedTag"]
|
|
7
7
|
}
|
|
@@ -1436,7 +1436,7 @@ describe("ending-punctuation", () => {
|
|
|
1436
1436
|
}
|
|
1437
1437
|
]
|
|
1438
1438
|
});
|
|
1439
|
-
const
|
|
1439
|
+
const recordValid648FinNo = new MarcRecord({
|
|
1440
1440
|
leader: "",
|
|
1441
1441
|
fields: [
|
|
1442
1442
|
{
|
|
@@ -1447,6 +1447,17 @@ describe("ending-punctuation", () => {
|
|
|
1447
1447
|
{ code: "a", value: "1900-luku" },
|
|
1448
1448
|
{ code: "2", value: "yso/swe" }
|
|
1449
1449
|
]
|
|
1450
|
+
},
|
|
1451
|
+
{
|
|
1452
|
+
// Exception: term ending in dot:
|
|
1453
|
+
tag: "648",
|
|
1454
|
+
ind1: " ",
|
|
1455
|
+
ind2: "7",
|
|
1456
|
+
subfields: [
|
|
1457
|
+
{ code: "a", value: "1200-luku eaa." },
|
|
1458
|
+
{ code: "2", value: "yso/fin" },
|
|
1459
|
+
{ code: "0", value: "http://www.yso.fi/onto/yso/p1129911200" }
|
|
1460
|
+
]
|
|
1450
1461
|
}
|
|
1451
1462
|
]
|
|
1452
1463
|
});
|
|
@@ -1514,7 +1525,7 @@ describe("ending-punctuation", () => {
|
|
|
1514
1525
|
});
|
|
1515
1526
|
it("Finds record valid - 648 Finnish, without punc", async () => {
|
|
1516
1527
|
const validator = await validatorFactory();
|
|
1517
|
-
const result = await validator.validate(
|
|
1528
|
+
const result = await validator.validate(recordValid648FinNo);
|
|
1518
1529
|
assert.equal(result.valid, true);
|
|
1519
1530
|
});
|
|
1520
1531
|
it("Finds record valid - 648 Fast, without punc", async () => {
|
|
@@ -1552,7 +1563,7 @@ describe("ending-punctuation", () => {
|
|
|
1552
1563
|
}
|
|
1553
1564
|
]
|
|
1554
1565
|
});
|
|
1555
|
-
const
|
|
1566
|
+
const recordInvalid648FinYes = new MarcRecord({
|
|
1556
1567
|
leader: "",
|
|
1557
1568
|
fields: [
|
|
1558
1569
|
{
|
|
@@ -1563,6 +1574,17 @@ describe("ending-punctuation", () => {
|
|
|
1563
1574
|
{ code: "a", value: "1900-luku." },
|
|
1564
1575
|
{ code: "2", value: "yso/swe" }
|
|
1565
1576
|
]
|
|
1577
|
+
},
|
|
1578
|
+
{
|
|
1579
|
+
// Exception:
|
|
1580
|
+
tag: "648",
|
|
1581
|
+
ind1: " ",
|
|
1582
|
+
ind2: "7",
|
|
1583
|
+
subfields: [
|
|
1584
|
+
{ code: "a", value: "1200-luku eaa" },
|
|
1585
|
+
{ code: "2", value: "yso/fin" },
|
|
1586
|
+
{ code: "0", value: "http://www.yso.fi/onto/yso/p1129911200" }
|
|
1587
|
+
]
|
|
1566
1588
|
}
|
|
1567
1589
|
]
|
|
1568
1590
|
});
|
|
@@ -1632,9 +1654,9 @@ describe("ending-punctuation", () => {
|
|
|
1632
1654
|
});
|
|
1633
1655
|
it("Finds record invalid - 648 Finnish, with punc", async () => {
|
|
1634
1656
|
const validator = await validatorFactory();
|
|
1635
|
-
const result = await validator.validate(
|
|
1657
|
+
const result = await validator.validate(recordInvalid648FinYes);
|
|
1636
1658
|
assert.deepEqual(result, {
|
|
1637
|
-
message: ["Field 648 has unwanted ending punctuation '.'"],
|
|
1659
|
+
message: ["Field 648 has unwanted ending punctuation '.'", "Field 648 requires ending punctuation, ends in 'a'"],
|
|
1638
1660
|
valid: false
|
|
1639
1661
|
});
|
|
1640
1662
|
});
|
|
@@ -1683,11 +1705,11 @@ describe("ending-punctuation", () => {
|
|
|
1683
1705
|
});
|
|
1684
1706
|
it("Repairs the invalid record - 648 Finnish, removes punc $a", async () => {
|
|
1685
1707
|
const validator = await validatorFactory();
|
|
1686
|
-
const result = await validator.fix(
|
|
1687
|
-
assert.
|
|
1708
|
+
const result = await validator.fix(recordInvalid648FinYes);
|
|
1709
|
+
assert.deepEqual(recordInvalid648FinYes, recordValid648FinNo);
|
|
1688
1710
|
assert.deepEqual(result, {
|
|
1689
|
-
message: ["Field 648 has unwanted ending punctuation '.'"],
|
|
1690
|
-
fix: ["Field 648 - Removed punctuation from $a"],
|
|
1711
|
+
message: ["Field 648 has unwanted ending punctuation '.'", "Field 648 requires ending punctuation, ends in 'a'"],
|
|
1712
|
+
fix: ["Field 648 - Removed punctuation from $a", "Field 648 - Added punctuation to $a"],
|
|
1691
1713
|
valid: false
|
|
1692
1714
|
});
|
|
1693
1715
|
});
|