@natlibfi/marc-record-validators-melinda 11.6.6 → 11.6.7-alpha.1
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/.github/workflows/melinda-node-tests.yml +1 -1
- package/dist/access-rights.js +1 -5
- package/dist/access-rights.js.map +1 -1
- package/dist/addMissingField336.js +1 -1
- package/dist/addMissingField336.js.map +1 -1
- package/dist/cyrillux-usemarcon-replacement.js +41 -45
- package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
- package/dist/cyrillux.js +13 -17
- package/dist/cyrillux.js.map +1 -1
- package/dist/disambiguateSeriesStatements.js +3 -4
- package/dist/disambiguateSeriesStatements.js.map +1 -1
- package/dist/double-commas.js +2 -1
- package/dist/double-commas.js.map +1 -1
- package/dist/duplicates-ind1.js +1 -1
- package/dist/duplicates-ind1.js.map +1 -1
- package/dist/empty-fields.js +0 -4
- package/dist/empty-fields.js.map +1 -1
- package/dist/ending-punctuation.js +21 -49
- package/dist/ending-punctuation.js.map +1 -1
- package/dist/ending-whitespace.js +0 -4
- package/dist/ending-whitespace.js.map +1 -1
- package/dist/field-008-18-34-character-groups.js +4 -5
- package/dist/field-008-18-34-character-groups.js.map +1 -1
- package/dist/field-505-separators.js +8 -6
- package/dist/field-505-separators.js.map +1 -1
- package/dist/field-521-fix.js +5 -6
- package/dist/field-521-fix.js.map +1 -1
- package/dist/field-exclusion.js +5 -12
- package/dist/field-exclusion.js.map +1 -1
- package/dist/field-exclusion.spec.js +3 -5
- package/dist/field-exclusion.spec.js.map +1 -1
- package/dist/field-structure.js +2 -5
- package/dist/field-structure.js.map +1 -1
- package/dist/fields-present.js +1 -1
- package/dist/fields-present.js.map +1 -1
- package/dist/fields-present.spec.js +1 -1
- package/dist/fields-present.spec.js.map +1 -1
- package/dist/fix-33X.js +5 -6
- package/dist/fix-33X.js.map +1 -1
- package/dist/fix-country-codes.js +3 -4
- package/dist/fix-country-codes.js.map +1 -1
- package/dist/fix-language-codes.js +12 -9
- package/dist/fix-language-codes.js.map +1 -1
- package/dist/fixRelatorTerms.js +8 -8
- package/dist/fixRelatorTerms.js.map +1 -1
- package/dist/fixed-fields.js +1 -4
- package/dist/fixed-fields.js.map +1 -1
- package/dist/identical-fields.js +2 -3
- package/dist/identical-fields.js.map +1 -1
- package/dist/indicator-fixes.js +14 -15
- package/dist/indicator-fixes.js.map +1 -1
- package/dist/isbn-issn.js +8 -11
- package/dist/isbn-issn.js.map +1 -1
- package/dist/item-language.js +5 -12
- package/dist/item-language.js.map +1 -1
- package/dist/merge-fields/counterpartField.js +6 -8
- package/dist/merge-fields/counterpartField.js.map +1 -1
- package/dist/merge-fields/index.js +3 -3
- package/dist/merge-fields/index.js.map +1 -1
- package/dist/merge-fields/mergeConstraints.js +0 -1
- package/dist/merge-fields/mergeConstraints.js.map +1 -1
- package/dist/merge-fields/mergeField.js +12 -18
- package/dist/merge-fields/mergeField.js.map +1 -1
- package/dist/merge-fields/mergeIndicator.js +5 -5
- package/dist/merge-fields/mergeIndicator.js.map +1 -1
- package/dist/merge-fields/mergeOrAddPostprocess.js +6 -9
- package/dist/merge-fields/mergeOrAddPostprocess.js.map +1 -1
- package/dist/merge-fields/mergeOrAddSubfield.js +6 -8
- package/dist/merge-fields/mergeOrAddSubfield.js.map +1 -1
- package/dist/merge-fields/mergeSubfield.js +8 -8
- package/dist/merge-fields/mergeSubfield.js.map +1 -1
- package/dist/merge-fields/removeDuplicateSubfields.js +1 -2
- package/dist/merge-fields/removeDuplicateSubfields.js.map +1 -1
- package/dist/merge-fields/worldKnowledge.js +1 -1
- package/dist/merge-fields/worldKnowledge.js.map +1 -1
- package/dist/mergeField500Lisapainokset.js +0 -3
- package/dist/mergeField500Lisapainokset.js.map +1 -1
- package/dist/mergeRelatorTermFields.js +3 -3
- package/dist/mergeRelatorTermFields.js.map +1 -1
- package/dist/modernize-502.js +6 -6
- package/dist/modernize-502.js.map +1 -1
- package/dist/multiple-subfield-0.js +4 -4
- package/dist/multiple-subfield-0.js.map +1 -1
- package/dist/non-breaking-space.js +0 -4
- package/dist/non-breaking-space.js.map +1 -1
- package/dist/normalize-dashes.js +5 -4
- package/dist/normalize-dashes.js.map +1 -1
- package/dist/normalize-identifiers.js +6 -6
- package/dist/normalize-identifiers.js.map +1 -1
- package/dist/normalize-qualifying-information.js +4 -4
- package/dist/normalize-qualifying-information.js.map +1 -1
- package/dist/normalize-utf8-diacritics.js +7 -7
- package/dist/normalize-utf8-diacritics.js.map +1 -1
- package/dist/normalizeFieldForComparison.js +21 -20
- package/dist/normalizeFieldForComparison.js.map +1 -1
- package/dist/normalizeSubfieldValueForComparison.js +1 -2
- package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
- package/dist/prepublicationUtils.js +3 -3
- package/dist/prepublicationUtils.js.map +1 -1
- package/dist/punctuation/index.js +14 -31
- package/dist/punctuation/index.js.map +1 -1
- package/dist/punctuation2.js +9 -10
- package/dist/punctuation2.js.map +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.js +8 -9
- package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
- package/dist/removeDuplicateDataFields.js +18 -20
- package/dist/removeDuplicateDataFields.js.map +1 -1
- package/dist/removeInferiorDataFields.js +16 -19
- package/dist/removeInferiorDataFields.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.js +4 -8
- package/dist/resolvable-ext-references-melinda.js.map +1 -1
- package/dist/resolveOrphanedSubfield6s.js +9 -9
- package/dist/resolveOrphanedSubfield6s.js.map +1 -1
- package/dist/sanitize-vocabulary-source-codes.js +9 -9
- package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
- package/dist/sort-tags.js +2 -2
- package/dist/sort-tags.js.map +1 -1
- package/dist/sortFields.js +4 -9
- package/dist/sortFields.js.map +1 -1
- package/dist/sortRelatorTerms.js +4 -5
- package/dist/sortRelatorTerms.js.map +1 -1
- package/dist/sortSubfields.js +5 -6
- package/dist/sortSubfields.js.map +1 -1
- package/dist/stripPunctuation.js +2 -2
- package/dist/stripPunctuation.js.map +1 -1
- package/dist/subfield-exclusion.js +4 -11
- package/dist/subfield-exclusion.js.map +1 -1
- package/dist/subfield6Utils.js +12 -11
- package/dist/subfield6Utils.js.map +1 -1
- package/dist/subfield8Utils.js +8 -9
- package/dist/subfield8Utils.js.map +1 -1
- package/dist/subfieldValueNormalizations.js +5 -8
- package/dist/subfieldValueNormalizations.js.map +1 -1
- package/dist/sync-007-and-300.js +8 -8
- package/dist/sync-007-and-300.js.map +1 -1
- package/dist/translate-terms.js +5 -6
- package/dist/translate-terms.js.map +1 -1
- package/dist/typeOfDate-008.js +3 -4
- package/dist/typeOfDate-008.js.map +1 -1
- package/dist/unicode-decomposition.js +1 -1
- package/dist/unicode-decomposition.js.map +1 -1
- package/dist/update-field-540.js +5 -6
- package/dist/update-field-540.js.map +1 -1
- package/dist/urn.js +4 -9
- package/dist/urn.js.map +1 -1
- package/dist/utils.js +5 -9
- package/dist/utils.js.map +1 -1
- package/eslint.config.mjs +53 -0
- package/package.json +12 -13
- package/src/access-rights.js +4 -4
- package/src/addMissingField336.js +1 -1
- package/src/cyrillux-usemarcon-replacement.js +38 -38
- package/src/cyrillux.js +14 -14
- package/src/disambiguateSeriesStatements.js +3 -3
- package/src/double-commas.js +2 -2
- package/src/duplicates-ind1.js +1 -1
- package/src/empty-fields.js +4 -4
- package/src/ending-punctuation.js +46 -49
- package/src/ending-whitespace.js +0 -2
- package/src/field-008-18-34-character-groups.js +5 -5
- package/src/field-505-separators.js +6 -6
- package/src/field-521-fix.js +6 -6
- package/src/field-exclusion.js +12 -12
- package/src/field-exclusion.spec.js +4 -4
- package/src/field-structure.js +5 -5
- package/src/fields-present.js +1 -1
- package/src/fields-present.spec.js +1 -1
- package/src/fix-33X.js +5 -5
- package/src/fix-country-codes.js +3 -3
- package/src/fix-language-codes.js +10 -9
- package/src/fixRelatorTerms.js +8 -8
- package/src/fixed-fields.js +3 -3
- package/src/identical-fields.js +3 -3
- package/src/indicator-fixes.js +15 -15
- package/src/isbn-issn.js +11 -11
- package/src/item-language.js +10 -10
- package/src/merge-fields/counterpartField.js +7 -7
- package/src/merge-fields/index.js +3 -3
- package/src/merge-fields/mergeConstraints.js +1 -1
- package/src/merge-fields/mergeField.js +16 -17
- package/src/merge-fields/mergeIndicator.js +5 -5
- package/src/merge-fields/mergeOrAddPostprocess.js +9 -9
- package/src/merge-fields/mergeOrAddSubfield.js +6 -6
- package/src/merge-fields/mergeSubfield.js +8 -8
- package/src/merge-fields/removeDuplicateSubfields.js +1 -2
- package/src/merge-fields/worldKnowledge.js +1 -1
- package/src/mergeField500Lisapainokset.js +0 -2
- package/src/mergeRelatorTermFields.js +3 -3
- package/src/modernize-502.js +6 -6
- package/src/multiple-subfield-0.js +4 -4
- package/src/non-breaking-space.js +0 -2
- package/src/normalize-dashes.js +4 -4
- package/src/normalize-identifiers.js +6 -6
- package/src/normalize-qualifying-information.js +4 -4
- package/src/normalize-utf8-diacritics.js +7 -7
- package/src/normalizeFieldForComparison.js +20 -20
- package/src/normalizeSubfieldValueForComparison.js +1 -1
- package/src/prepublicationUtils.js +3 -3
- package/src/punctuation/index.js +29 -29
- package/src/punctuation2.js +10 -10
- package/src/reindexSubfield6OccurenceNumbers.js +9 -9
- package/src/removeDuplicateDataFields.js +21 -23
- package/src/removeInferiorDataFields.js +19 -19
- package/src/resolvable-ext-references-melinda.js +8 -8
- package/src/resolveOrphanedSubfield6s.js +9 -9
- package/src/sanitize-vocabulary-source-codes.js +8 -8
- package/src/sort-tags.js +2 -2
- package/src/sortFields.js +6 -6
- package/src/sortRelatorTerms.js +5 -5
- package/src/sortSubfields.js +6 -6
- package/src/stripPunctuation.js +2 -2
- package/src/subfield-exclusion.js +11 -11
- package/src/subfield6Utils.js +11 -11
- package/src/subfield8Utils.js +6 -9
- package/src/subfieldValueNormalizations.js +5 -7
- package/src/sync-007-and-300.js +8 -8
- package/src/translate-terms.js +3 -5
- package/src/typeOfDate-008.js +3 -3
- package/src/unicode-decomposition.js +1 -1
- package/src/update-field-540.js +6 -6
- package/src/urn.js +8 -6
- package/src/utils.js +8 -8
- package/.eslintignore +0 -1
package/dist/access-rights.js
CHANGED
|
@@ -23,7 +23,6 @@ function _default(isViolaRecord = false) {
|
|
|
23
23
|
|
|
24
24
|
// If material is electronic add theis if missing
|
|
25
25
|
if (!hasTag(record, '506', sf506) && !hasTag(record, '506', sf506old)) {
|
|
26
|
-
// eslint-disable-line functional/no-conditional-statements
|
|
27
26
|
const subfield9 = isViolaRecord ? [{
|
|
28
27
|
code: '9',
|
|
29
28
|
value: 'VIOLA<KEEP>'
|
|
@@ -53,9 +52,7 @@ function _default(isViolaRecord = false) {
|
|
|
53
52
|
|
|
54
53
|
// Change phrase from old to new if field with old phrase is found
|
|
55
54
|
if (!hasTag(record, '506', sf506) && hasTag(record, '506', sf506old)) {
|
|
56
|
-
|
|
57
|
-
record.fields // eslint-disable-line functional/immutable-data
|
|
58
|
-
.find(f => f.tag === '506' && sf506old.every(({
|
|
55
|
+
record.fields.find(f => f.tag === '506' && sf506old.every(({
|
|
59
56
|
code,
|
|
60
57
|
value
|
|
61
58
|
}) => f.subfields.some(sf => sf.code === code && value.test(sf.value)))).subfields.find(sf => sf506old.every(({
|
|
@@ -64,7 +61,6 @@ function _default(isViolaRecord = false) {
|
|
|
64
61
|
}) => sf.code === code && value.test(sf.value))).value = 'Aineisto on käytettävissä vapaakappaletyöasemilla.';
|
|
65
62
|
}
|
|
66
63
|
if (!hasTag(record, '540', sf540) && !isViolaRecord) {
|
|
67
|
-
// eslint-disable-line functional/no-conditional-statements
|
|
68
64
|
record.insertField({
|
|
69
65
|
tag: '540',
|
|
70
66
|
subfields: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-rights.js","names":["_utils","require","_default","isViolaRecord","sf506","code","value","sf506old","sf540","fix","record","hasTag","subfield9","staticSubfields","insertField","tag","ind1","subfields","concat","fields","find","f","every","some","sf","test","validate","isElectronicMaterial","valid","description","rec","sfcv"],"sources":["../src/access-rights.js"],"sourcesContent":["import {isElectronicMaterial} from './utils';\n\nexport default function (isViolaRecord = false) {\n const sf506 = [{code: 'a', value: /aineisto on käytettävissä vapaakappaletyöasemilla/ui}];\n const sf506old = [{code: 'a', value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui}];\n const sf540 = [{code: 'c', value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui}];\n\n function fix(record) {\n // If printed do nothing\n\n // If material is electronic add theis if missing\n if (!hasTag(record, '506', sf506) && !hasTag(record, '506', sf506old)) {
|
|
1
|
+
{"version":3,"file":"access-rights.js","names":["_utils","require","_default","isViolaRecord","sf506","code","value","sf506old","sf540","fix","record","hasTag","subfield9","staticSubfields","insertField","tag","ind1","subfields","concat","fields","find","f","every","some","sf","test","validate","isElectronicMaterial","valid","description","rec","sfcv"],"sources":["../src/access-rights.js"],"sourcesContent":["import {isElectronicMaterial} from './utils';\n\nexport default function (isViolaRecord = false) {\n const sf506 = [{code: 'a', value: /aineisto on käytettävissä vapaakappaletyöasemilla/ui}];\n const sf506old = [{code: 'a', value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui}];\n const sf540 = [{code: 'c', value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui}];\n\n function fix(record) {\n // If printed do nothing\n\n // If material is electronic add theis if missing\n if (!hasTag(record, '506', sf506) && !hasTag(record, '506', sf506old)) {\n const subfield9 = isViolaRecord ? [{code: '9', value: 'VIOLA<KEEP>'}] : [{code: '9', value: 'FENNI<KEEP>'}];\n const staticSubfields = [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä vapaakappaletyöasemilla.'\n }, {\n code: 'f',\n value: 'Online access with authorization'\n }, {\n code: '2',\n value: 'star'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }\n ];\n\n record.insertField({\n tag: '506',\n ind1: '1',\n subfields: staticSubfields.concat(subfield9)\n });\n }\n\n // Change phrase from old to new if field with old phrase is found\n if (!hasTag(record, '506', sf506) && hasTag(record, '506', sf506old)) {\n record.fields\n .find(f => f.tag === '506' && sf506old.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))))\n .subfields.find(sf => sf506old.every(({code, value}) => sf.code === code && value.test(sf.value)))\n .value = 'Aineisto on käytettävissä vapaakappaletyöasemilla.';\n }\n\n if (!hasTag(record, '540', sf540) && !isViolaRecord) {\n record.insertField({\n tag: '540',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'\n }, {\n code: 'b',\n value: 'Kansalliskirjasto;'\n }, {\n code: 'c',\n value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'\n }, {\n code: 'u',\n value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n return true;\n }\n\n function validate(record) {\n // if not electronic skip this validator\n if (!isElectronicMaterial(record)) {\n return {valid: true};\n }\n\n return {valid: hasTag(record, '506', sf506) && (hasTag(record, '540', sf540) || isViolaRecord)};\n }\n\n return {\n description: 'Adds access rights fields for a record (if not existing)',\n validate,\n fix\n };\n\n function hasTag(rec, tag, sfcv) {\n return rec.fields.some(f => f.tag === tag && sfcv.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))));\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addMissingField336.js","names":["_utils","require","_field33XUtils","description","_default","validate","fix","record","nvdebug","newFields","getMissing336s","length","res","message","valid","forEach","f","insertField","strings","map","fieldToString","tmp","join","msg","guessMissingBsForComputerFile","field008","get","typeOfComputerFile","value","undefined","includes","guess","guessUsingFileFields","characteristics","some","str","match","guessMissingBsForBookAndContinuingResource","formOfItem","guessMissingBsForMap","getFormOfItem","fields","tag","guessMissing336Bs","typeOfRecord","getTypeOfRecord","codeToField","b","catLang","a","map336CodeToTerm","data","ind1","ind2","subfields","code","f336","bees","getCatalogingLanguage"],"sources":["../src/addMissingField336.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map336CodeToTerm} from './field33XUtils';\n\nconst description = 'Add missing 336 field(s)';\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newFields = getMissing336s(record);\n nvdebug(` GOT ${newFields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent\n // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent\n const res = {message: [], fix: [], valid: true};\n if (newFields.length) {\n newFields.forEach(f => record.insertField(f));\n return res;\n }\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const newFields = getMissing336s(record);\n if (newFields.length === 0) {\n return {message: [], valid: true};\n }\n const strings = newFields.map(f => fieldToString(f));\n const tmp = strings.join('\\', \\'');\n const msg = `${description}: '${tmp}'`;\n return {message: [msg], valid: false};\n }\n\n function guessMissingBsForComputerFile(record) {\n const [field008] = record.get('008');\n const typeOfComputerFile = field008 && field008.value ? field008.value[26] : undefined;\n\n if (typeOfComputerFile) {\n if (['d', 'e'].includes(typeOfComputerFile)) { // d: N=400, e: N=50\n return ['txt'];\n }\n if (typeOfComputerFile === 'g') { // Videogame (N=10000+)\n // 2D moving image/tdi is an educated guess. Might be wrong for 3D games and Infocom-style text-based games.\n // Ref.: https://www.kiwi.fi/pages/viewpage.action?pageId=115966063#PelienRDAohje-Pelienjaottelu:videopelitjafyysisetpelit\n return ['tdi', 'cop'];\n }\n if (['b', 'f'].includes(typeOfComputerFile)) { // b: N=176, f: N=2\n return ['cop'];\n }\n if (['a', 'c'].includes(typeOfComputerFile)) { // c: N=152, a: N=36\n return ['cod'];\n }\n if (typeOfComputerFile === 'h') { // h: N=44\n return ['snd'];\n }\n }\n\n // ADD 256/300/516/XXX-based educated guesses here\n const guess = guessUsingFileFields();\n if (guess) {\n return guess;\n }\n function guessUsingFileFields() {\n const characteristics = record.get('(256|516)').map(f => fieldToString(f));\n if (characteristics.some(str => str.match(/(?:ohjelma)/gui))) {\n return ['cop'];\n }\n if (characteristics.some(str => str.match(/(?:daisy)/gui))) {\n return ['spw', 'txt']; // The convention is to put just 'spw' but this is technically correct\n }\n if (characteristics.some(str => str.match(/(?:äänikirja)/gui))) {\n return ['spw']; // This should be ['spw', 'txt'] but who am I to change conventions...\n }\n if (characteristics.some(str => str.match(/(?:book|e-bok|e-diss|e-avhand|kirja|e-thesis|tekstitiedosto|tidskrift|verkkoartikkeli|verkkokirja|verkkolehti)/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:peli)/gui))) {\n return ['tdi', 'cop'];\n }\n if (characteristics.some(str => str.match(/(?:data|tietokanta)/gui))) {\n return ['cod'];\n }\n if (characteristics.some(str => str.match(/(?:verkkoaineisto.*[0-9]\\] s|PDF)/gui)) || characteristics.some(str => str.match(/\\b(?:text|tekstiä?)\\b/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:elokuva|liikkuva kuva)/gui))) {\n return ['tdi'];\n }\n if (characteristics.some(str => str.match(/(?:kartta)/gui))) {\n return ['cri']; // cri or crd, close enough anyhow, I guess\n }\n if (characteristics.some(str => str.match(/\\b(?:kuvi?a)\\b/gui))) {\n return ['tdi'];\n }\n\n return undefined;\n }\n\n\n if (['i', 'j', 'm'].includes(typeOfComputerFile)) { // (i: N=4800, m: N=566, j: N=111 )\n // Can we use field 300/516/256 to improve guess?\n return ['xxx'];\n }\n return ['zzz']; // unspecified\n }\n\n /*\n function deriveLanguageMaterials336sFrom007(record) {\n const categoryOfMaterial = [ // 007/00\n {category: 'a', rdacontent: 'cri'}, // cartographic image <- looks like a MP that has been classified as BK... One more reason to comment these..\n {category: 'c', rdacontent: 'txt'},\n {category: 'g', rdacontent: 'sti'},\n {vategory: 'h', rdacontent: 'txt'},\n {category: 'k', rdacontent: 'sti'},\n {category: 'v', rdacontent: 'tdi'}\n ];\n\n // What if there are multiple 007 fields?\n const [f007] = record.fields.get('007');\n if (f007) {\n const row = categoryOfMaterial.filter(row => row.category === f007[0]);\n if (row) {\n return [row.rdacontent];\n }\n }\n return [];\n }\n */\n\n function guessMissingBsForBookAndContinuingResource(record, formOfItem) {\n\n\n // This is from very old crap from usemarcon-cyrillux, but me not like it at all!\n /*\n const f245h = getTitleMedium(record);\n if (f245h && !multimediaRegexp.test(f245h)) {\n const result = deriveLanguageMaterials336sFrom007(record); // Base result on 007/00...\n if (result) {\n return result;\n }\n }\n */\n\n //const bibliographicalLevel = record.getBibliograpicLevel(); // Bloody h-drop typo...\n //const isBis = ['b', 'i', 's'].includes(bibliographicalLevel);\n //if (!isBis) {\n if (formOfItem === 'f') {\n return ['tct']; // tactile text\n }\n return ['txt']; // Default BK format is text\n }\n\n function guessMissingBsForMap(record) {\n const formOfItem = getFormOfItem(record);\n // Is braille and is not a model (we have 0). Changed the original usemarcon rule 007/01!=q to 007/01=q\n if (formOfItem === 'f' && record.fields.some(f => f.tag === '007' && f.value[0] === 'a' && f.value[1] === 'q')) {\n return ['crt']; // Cartographic tactile image\n }\n const [field008] = record.get('008');\n if (field008 && field008.value[25] === 'd') { // globe (cool, but we really don't have these)\n return ['crf']; // map 3D form\n }\n return ['cri']; // default cartographic image\n }\n\n function guessMissing336Bs(record) {\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord === 'i') {\n return ['spw'];\n }\n if (typeOfRecord === 'j') {\n return ['prm']; // performed music\n }\n\n if (typeOfRecord === 'e' || typeOfRecord === 'f') {\n return guessMissingBsForMap(record);\n }\n\n const formOfItem = getFormOfItem(record);\n\n if (typeOfRecord === 'k') {\n if (formOfItem === 'f') {\n return ['tci']; // tactile image\n }\n return ['sti'];\n }\n\n if (typeOfRecord === 'c' || typeOfRecord === 'd') {\n if (formOfItem === 'f') {\n return ['tcm']; // tactile notated music\n }\n return ['ntm']; // notated music\n }\n\n if (typeOfRecord === 'g') {\n if (record.fields.some(f => f.tag === '007' && f.value[0] === 'g')) {\n return ['sti']; // still image\n }\n if (record.fields.some(f => f.tag === '007' && ['m', 'v', 'c'].includes(f.value[0]))) { // 'c' is a bit iffy, but I'll tune it only if it makes an error...\n return ['tdi']; // 2d moving pic\n }\n }\n\n if (typeOfRecord === 'm') { // electronic\n return guessMissingBsForComputerFile(record);\n }\n\n if (typeOfRecord === 'a' || typeOfRecord === 't') {\n return guessMissingBsForBookAndContinuingResource(record, formOfItem);\n }\n\n // Note that 245$h should trigger LDR/06:a or t =>o change at some earlier point (outside the scope of this module)\n if (typeOfRecord === 'o' || typeOfRecord === 'p') { // o: Kit p: Mixed\n if (['d', 'r'].includes(formOfItem)) { // d=isoteksti, r=eye-readable print\n return ['txt'];\n }\n // Not much I can guess from 300 etc\n return ['xxx']; // other\n }\n if (typeOfRecord === 'r') { // three-dimensional form\n return ['tdf'];\n }\n return ['zzz']; // unspecified\n }\n\n\n function codeToField(b, catLang) {\n const a = map336CodeToTerm(b, catLang);\n const data = {tag: '336', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a},\n {code: 'b', value: b},\n {code: '2', value: 'rdacontent'}\n ]};\n\n return data;\n }\n\n function getMissing336s(record) {\n const f336 = record.get('336');\n if (f336.length > 0) {\n return [];\n }\n\n const bees = guessMissing336Bs(record); // bees = b-subfields\n nvdebug(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`);\n\n\n return bees.map(b => codeToField(b, getCatalogingLanguage(record, 'fin')));\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"addMissingField336.js","names":["_utils","require","_field33XUtils","description","_default","validate","fix","record","nvdebug","newFields","getMissing336s","length","res","message","valid","forEach","f","insertField","strings","map","fieldToString","tmp","join","msg","guessMissingBsForComputerFile","field008","get","typeOfComputerFile","value","undefined","includes","guess","guessUsingFileFields","characteristics","some","str","match","guessMissingBsForBookAndContinuingResource","formOfItem","guessMissingBsForMap","getFormOfItem","fields","tag","guessMissing336Bs","typeOfRecord","getTypeOfRecord","codeToField","b","catLang","a","map336CodeToTerm","data","ind1","ind2","subfields","code","f336","bees","getCatalogingLanguage"],"sources":["../src/addMissingField336.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map336CodeToTerm} from './field33XUtils';\n\nconst description = 'Add missing 336 field(s)';\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newFields = getMissing336s(record);\n nvdebug(` GOT ${newFields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent\n // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent\n const res = {message: [], fix: [], valid: true};\n if (newFields.length) {\n newFields.forEach(f => record.insertField(f)); // eslint-disable-line array-callback-return\n return res;\n }\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const newFields = getMissing336s(record);\n if (newFields.length === 0) {\n return {message: [], valid: true};\n }\n const strings = newFields.map(f => fieldToString(f));\n const tmp = strings.join('\\', \\'');\n const msg = `${description}: '${tmp}'`;\n return {message: [msg], valid: false};\n }\n\n function guessMissingBsForComputerFile(record) {\n const [field008] = record.get('008');\n const typeOfComputerFile = field008 && field008.value ? field008.value[26] : undefined;\n\n if (typeOfComputerFile) {\n if (['d', 'e'].includes(typeOfComputerFile)) { // d: N=400, e: N=50\n return ['txt'];\n }\n if (typeOfComputerFile === 'g') { // Videogame (N=10000+)\n // 2D moving image/tdi is an educated guess. Might be wrong for 3D games and Infocom-style text-based games.\n // Ref.: https://www.kiwi.fi/pages/viewpage.action?pageId=115966063#PelienRDAohje-Pelienjaottelu:videopelitjafyysisetpelit\n return ['tdi', 'cop'];\n }\n if (['b', 'f'].includes(typeOfComputerFile)) { // b: N=176, f: N=2\n return ['cop'];\n }\n if (['a', 'c'].includes(typeOfComputerFile)) { // c: N=152, a: N=36\n return ['cod'];\n }\n if (typeOfComputerFile === 'h') { // h: N=44\n return ['snd'];\n }\n }\n\n // ADD 256/300/516/XXX-based educated guesses here\n const guess = guessUsingFileFields();\n if (guess) {\n return guess;\n }\n function guessUsingFileFields() {\n const characteristics = record.get('(256|516)').map(f => fieldToString(f));\n if (characteristics.some(str => str.match(/(?:ohjelma)/gui))) {\n return ['cop'];\n }\n if (characteristics.some(str => str.match(/(?:daisy)/gui))) {\n return ['spw', 'txt']; // The convention is to put just 'spw' but this is technically correct\n }\n if (characteristics.some(str => str.match(/(?:äänikirja)/gui))) {\n return ['spw']; // This should be ['spw', 'txt'] but who am I to change conventions...\n }\n if (characteristics.some(str => str.match(/(?:book|e-bok|e-diss|e-avhand|kirja|e-thesis|tekstitiedosto|tidskrift|verkkoartikkeli|verkkokirja|verkkolehti)/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:peli)/gui))) {\n return ['tdi', 'cop'];\n }\n if (characteristics.some(str => str.match(/(?:data|tietokanta)/gui))) {\n return ['cod'];\n }\n if (characteristics.some(str => str.match(/(?:verkkoaineisto.*[0-9]\\] s|PDF)/gui)) || characteristics.some(str => str.match(/\\b(?:text|tekstiä?)\\b/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:elokuva|liikkuva kuva)/gui))) {\n return ['tdi'];\n }\n if (characteristics.some(str => str.match(/(?:kartta)/gui))) {\n return ['cri']; // cri or crd, close enough anyhow, I guess\n }\n if (characteristics.some(str => str.match(/\\b(?:kuvi?a)\\b/gui))) {\n return ['tdi'];\n }\n\n return undefined;\n }\n\n\n if (['i', 'j', 'm'].includes(typeOfComputerFile)) { // (i: N=4800, m: N=566, j: N=111 )\n // Can we use field 300/516/256 to improve guess?\n return ['xxx'];\n }\n return ['zzz']; // unspecified\n }\n\n /*\n function deriveLanguageMaterials336sFrom007(record) {\n const categoryOfMaterial = [ // 007/00\n {category: 'a', rdacontent: 'cri'}, // cartographic image <- looks like a MP that has been classified as BK... One more reason to comment these..\n {category: 'c', rdacontent: 'txt'},\n {category: 'g', rdacontent: 'sti'},\n {vategory: 'h', rdacontent: 'txt'},\n {category: 'k', rdacontent: 'sti'},\n {category: 'v', rdacontent: 'tdi'}\n ];\n\n // What if there are multiple 007 fields?\n const [f007] = record.fields.get('007');\n if (f007) {\n const row = categoryOfMaterial.filter(row => row.category === f007[0]);\n if (row) {\n return [row.rdacontent];\n }\n }\n return [];\n }\n */\n\n function guessMissingBsForBookAndContinuingResource(record, formOfItem) {\n\n\n // This is from very old crap from usemarcon-cyrillux, but me not like it at all!\n /*\n const f245h = getTitleMedium(record);\n if (f245h && !multimediaRegexp.test(f245h)) {\n const result = deriveLanguageMaterials336sFrom007(record); // Base result on 007/00...\n if (result) {\n return result;\n }\n }\n */\n\n //const bibliographicalLevel = record.getBibliograpicLevel(); // Bloody h-drop typo...\n //const isBis = ['b', 'i', 's'].includes(bibliographicalLevel);\n //if (!isBis) {\n if (formOfItem === 'f') {\n return ['tct']; // tactile text\n }\n return ['txt']; // Default BK format is text\n }\n\n function guessMissingBsForMap(record) {\n const formOfItem = getFormOfItem(record);\n // Is braille and is not a model (we have 0). Changed the original usemarcon rule 007/01!=q to 007/01=q\n if (formOfItem === 'f' && record.fields.some(f => f.tag === '007' && f.value[0] === 'a' && f.value[1] === 'q')) {\n return ['crt']; // Cartographic tactile image\n }\n const [field008] = record.get('008');\n if (field008 && field008.value[25] === 'd') { // globe (cool, but we really don't have these)\n return ['crf']; // map 3D form\n }\n return ['cri']; // default cartographic image\n }\n\n function guessMissing336Bs(record) {\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord === 'i') {\n return ['spw'];\n }\n if (typeOfRecord === 'j') {\n return ['prm']; // performed music\n }\n\n if (typeOfRecord === 'e' || typeOfRecord === 'f') {\n return guessMissingBsForMap(record);\n }\n\n const formOfItem = getFormOfItem(record);\n\n if (typeOfRecord === 'k') {\n if (formOfItem === 'f') {\n return ['tci']; // tactile image\n }\n return ['sti'];\n }\n\n if (typeOfRecord === 'c' || typeOfRecord === 'd') {\n if (formOfItem === 'f') {\n return ['tcm']; // tactile notated music\n }\n return ['ntm']; // notated music\n }\n\n if (typeOfRecord === 'g') {\n if (record.fields.some(f => f.tag === '007' && f.value[0] === 'g')) {\n return ['sti']; // still image\n }\n if (record.fields.some(f => f.tag === '007' && ['m', 'v', 'c'].includes(f.value[0]))) { // 'c' is a bit iffy, but I'll tune it only if it makes an error...\n return ['tdi']; // 2d moving pic\n }\n }\n\n if (typeOfRecord === 'm') { // electronic\n return guessMissingBsForComputerFile(record);\n }\n\n if (typeOfRecord === 'a' || typeOfRecord === 't') {\n return guessMissingBsForBookAndContinuingResource(record, formOfItem);\n }\n\n // Note that 245$h should trigger LDR/06:a or t =>o change at some earlier point (outside the scope of this module)\n if (typeOfRecord === 'o' || typeOfRecord === 'p') { // o: Kit p: Mixed\n if (['d', 'r'].includes(formOfItem)) { // d=isoteksti, r=eye-readable print\n return ['txt'];\n }\n // Not much I can guess from 300 etc\n return ['xxx']; // other\n }\n if (typeOfRecord === 'r') { // three-dimensional form\n return ['tdf'];\n }\n return ['zzz']; // unspecified\n }\n\n\n function codeToField(b, catLang) {\n const a = map336CodeToTerm(b, catLang);\n const data = {tag: '336', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a},\n {code: 'b', value: b},\n {code: '2', value: 'rdacontent'}\n ]};\n\n return data;\n }\n\n function getMissing336s(record) {\n const f336 = record.get('336');\n if (f336.length > 0) {\n return [];\n }\n\n const bees = guessMissing336Bs(record); // bees = b-subfields\n nvdebug(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`);\n\n\n return bees.map(b => codeToField(b, getCatalogingLanguage(record, 'fin')));\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -61,16 +61,14 @@ function _default() {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
// Update LDR/17 to '4'
|
|
64
|
-
record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`;
|
|
64
|
+
record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`;
|
|
65
65
|
|
|
66
66
|
// Remove unwanted fields:
|
|
67
|
-
record.fields = record.fields.filter(f => !dropTags.includes(f.tag));
|
|
68
|
-
|
|
67
|
+
record.fields = record.fields.filter(f => !dropTags.includes(f.tag));
|
|
69
68
|
(0, _utils.removeSubfield)(record, '020', 'c');
|
|
70
69
|
|
|
71
70
|
// Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)
|
|
72
|
-
record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl'));
|
|
73
|
-
|
|
71
|
+
record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl'));
|
|
74
72
|
fieldSpecificStuff(record.fields);
|
|
75
73
|
function fieldSpecificStuff(fields) {
|
|
76
74
|
const [field, ...rest] = fields;
|
|
@@ -99,7 +97,7 @@ function _default() {
|
|
|
99
97
|
f.subfields = [{
|
|
100
98
|
code: 'e',
|
|
101
99
|
value: 'kirjoittaja.'
|
|
102
|
-
}, ...f.subfields];
|
|
100
|
+
}, ...f.subfields];
|
|
103
101
|
(0, _sortSubfields.sortAdjacentSubfields)(f);
|
|
104
102
|
// Punctuation will be done later on...
|
|
105
103
|
return;
|
|
@@ -124,7 +122,8 @@ function _default() {
|
|
|
124
122
|
|
|
125
123
|
// Field 028: use $b$a, not $a$b:
|
|
126
124
|
const f028 = record.fields.filter(f => f.tag === '028');
|
|
127
|
-
f028.forEach(f => (0, _sortSubfields.sortAdjacentSubfields)(f));
|
|
125
|
+
f028.forEach(f => (0, _sortSubfields.sortAdjacentSubfields)(f)); // eslint-disable-line array-callback-return
|
|
126
|
+
|
|
128
127
|
(0, _addMissingField.default)().fix(record);
|
|
129
128
|
}
|
|
130
129
|
function realFixAll2(record) {
|
|
@@ -195,11 +194,12 @@ function fixField040(record) {
|
|
|
195
194
|
record.insertField(data);
|
|
196
195
|
return;
|
|
197
196
|
}
|
|
198
|
-
f040.forEach(f => fixField040Subfields(f));
|
|
197
|
+
f040.forEach(f => fixField040Subfields(f)); // eslint-disable-line array-callback-return
|
|
198
|
+
|
|
199
199
|
function fixField040Subfields(field) {
|
|
200
|
-
field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code));
|
|
201
|
-
field.subfields.push(subfieldsBE[0]);
|
|
202
|
-
field.subfields.push(subfieldsBE[1]);
|
|
200
|
+
field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code));
|
|
201
|
+
field.subfields.push(subfieldsBE[0]);
|
|
202
|
+
field.subfields.push(subfieldsBE[1]);
|
|
203
203
|
(0, _sortSubfields.sortAdjacentSubfields)(field); // put $b and $e to their proper places
|
|
204
204
|
}
|
|
205
205
|
}
|
|
@@ -208,12 +208,13 @@ function removeFromOldCatalog(field) {
|
|
|
208
208
|
return;
|
|
209
209
|
}
|
|
210
210
|
// See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation
|
|
211
|
-
field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));
|
|
211
|
+
field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf)); // eslint-disable-line array-callback-return
|
|
212
|
+
|
|
212
213
|
function removeFromOldCatalogFromSubfield(subfield) {
|
|
213
214
|
if (!subfield.value.includes('[from old catalog]')) {
|
|
214
215
|
return;
|
|
215
216
|
}
|
|
216
|
-
subfield.value = subfield.value.replace(/ *\[from old catalog\]/gui, '');
|
|
217
|
+
subfield.value = subfield.value.replace(/ *\[from old catalog\]/gui, '');
|
|
217
218
|
}
|
|
218
219
|
}
|
|
219
220
|
function removeSubfieldH(field) {
|
|
@@ -222,7 +223,7 @@ function removeSubfieldH(field) {
|
|
|
222
223
|
}
|
|
223
224
|
const filteredFields = field.subfields.filter(sf => sf.code !== 'h');
|
|
224
225
|
if (filteredFields.length > 0) {
|
|
225
|
-
field.subfields = filteredFields;
|
|
226
|
+
field.subfields = filteredFields;
|
|
226
227
|
return;
|
|
227
228
|
}
|
|
228
229
|
}
|
|
@@ -235,10 +236,10 @@ function removeOwnershipSubfield5(field) {
|
|
|
235
236
|
// sanity check/robustness
|
|
236
237
|
return;
|
|
237
238
|
}
|
|
238
|
-
field.subfields = remainingSubfields;
|
|
239
|
+
field.subfields = remainingSubfields;
|
|
239
240
|
}
|
|
240
241
|
function fixLeader(record) {
|
|
241
|
-
record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`;
|
|
242
|
+
record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`;
|
|
242
243
|
}
|
|
243
244
|
function field410To490And810(field, record) {
|
|
244
245
|
// might be generic... if so, move to utils...
|
|
@@ -246,14 +247,14 @@ function field410To490And810(field, record) {
|
|
|
246
247
|
return;
|
|
247
248
|
}
|
|
248
249
|
const field810 = (0, _clone.default)(field);
|
|
249
|
-
field.tag = '490';
|
|
250
|
-
field.ind1 = '1';
|
|
251
|
-
field.ind2 = ' ';
|
|
250
|
+
field.tag = '490';
|
|
251
|
+
field.ind1 = '1';
|
|
252
|
+
field.ind2 = ' ';
|
|
252
253
|
(0, _sortSubfields.sortAdjacentSubfields)(field);
|
|
253
254
|
// 490: Fix punctuation elsewhere. (Note that the current support is lagging...)
|
|
254
255
|
|
|
255
|
-
field810.tag = '810';
|
|
256
|
-
field810.ind2 = ' ';
|
|
256
|
+
field810.tag = '810';
|
|
257
|
+
field810.ind2 = ' ';
|
|
257
258
|
// 810: Fix punctuation elsewhere. (Note that the current support is lagging...)
|
|
258
259
|
record.insertField(field810);
|
|
259
260
|
}
|
|
@@ -263,11 +264,11 @@ function field440To490And830(field, record) {
|
|
|
263
264
|
return;
|
|
264
265
|
}
|
|
265
266
|
const field830 = (0, _clone.default)(field);
|
|
266
|
-
field.tag = '490';
|
|
267
|
-
field.ind1 = '1';
|
|
268
|
-
field.ind2 = ' ';
|
|
267
|
+
field.tag = '490';
|
|
268
|
+
field.ind1 = '1';
|
|
269
|
+
field.ind2 = ' ';
|
|
269
270
|
// 490: Fix punctuation elsewhere. (Note that the current support is lagging...)
|
|
270
|
-
field830.tag = '830';
|
|
271
|
+
field830.tag = '830';
|
|
271
272
|
// 830: Fix punctuation elsewhere. (Note that the current support is lagging...)
|
|
272
273
|
record.insertField(field830);
|
|
273
274
|
}
|
|
@@ -282,9 +283,9 @@ function field260To264s(field, record) {
|
|
|
282
283
|
return;
|
|
283
284
|
}
|
|
284
285
|
createCopyright264Field(field);
|
|
285
|
-
field.tag = '264';
|
|
286
|
-
field.ind1 = ' ';
|
|
287
|
-
field.ind2 = '1';
|
|
286
|
+
field.tag = '264';
|
|
287
|
+
field.ind1 = ' ';
|
|
288
|
+
field.ind2 = '1';
|
|
288
289
|
|
|
289
290
|
// NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)
|
|
290
291
|
|
|
@@ -294,9 +295,10 @@ function field260To264s(field, record) {
|
|
|
294
295
|
}
|
|
295
296
|
return false;
|
|
296
297
|
}
|
|
297
|
-
field.subfields?.forEach(sf => field260To264Normalization(sf));
|
|
298
|
+
field.subfields?.forEach(sf => field260To264Normalization(sf)); // eslint-disable-line array-callback-return
|
|
299
|
+
|
|
298
300
|
function field260To264Normalization(subfield) {
|
|
299
|
-
subfield.value = field260To264Normalization2(subfield);
|
|
301
|
+
subfield.value = field260To264Normalization2(subfield);
|
|
300
302
|
}
|
|
301
303
|
function createCopyright264Value(field) {
|
|
302
304
|
// Extract/split copyright year to a separate field:
|
|
@@ -311,7 +313,7 @@ function field260To264s(field, record) {
|
|
|
311
313
|
const copType = c.value.match(/(?:^\[?p|℗)/u) ? '℗' : '©';
|
|
312
314
|
const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;
|
|
313
315
|
// Moidy the original value:
|
|
314
|
-
c.value = `[${copyrightYear}]`;
|
|
316
|
+
c.value = `[${copyrightYear}]`;
|
|
315
317
|
return returnValue;
|
|
316
318
|
}
|
|
317
319
|
function createCopyright264Field(field) {
|
|
@@ -358,12 +360,12 @@ function handle505(field) {
|
|
|
358
360
|
return;
|
|
359
361
|
}
|
|
360
362
|
// Don't know how/why usemarcon-cyrillux is so sure about ind1...
|
|
361
|
-
field.ind1 = '0';
|
|
363
|
+
field.ind1 = '0';
|
|
362
364
|
// usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:
|
|
363
365
|
const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));
|
|
364
366
|
|
|
365
367
|
if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {
|
|
366
|
-
field.subfields = keptSubfields;
|
|
368
|
+
field.subfields = keptSubfields;
|
|
367
369
|
return;
|
|
368
370
|
}
|
|
369
371
|
}
|
|
@@ -373,14 +375,15 @@ function translateFieldToFinnish(field) {
|
|
|
373
375
|
if (!['020', '300'].includes(field.tag)) {
|
|
374
376
|
return;
|
|
375
377
|
}
|
|
376
|
-
field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));
|
|
378
|
+
field.subfields?.forEach(sf => translateSubfieldToFinnish(sf)); // eslint-disable-line array-callback-return
|
|
379
|
+
|
|
377
380
|
function translateSubfieldToFinnish(subfield) {
|
|
378
381
|
if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {
|
|
379
|
-
subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));
|
|
382
|
+
subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));
|
|
380
383
|
return;
|
|
381
384
|
}
|
|
382
385
|
if (field.tag === '300') {
|
|
383
|
-
subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));
|
|
386
|
+
subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));
|
|
384
387
|
return;
|
|
385
388
|
}
|
|
386
389
|
}
|
|
@@ -403,7 +406,7 @@ function expandFinnishAbbreviations(value) {
|
|
|
403
406
|
return value.replace(/\bcn\. /gu, 'noin ').
|
|
404
407
|
// replace(/\bmin\./gu, 'minuuttia').
|
|
405
408
|
// replace(/\bmin\b/gu, 'minuuttia').
|
|
406
|
-
replace(/\bnid\./gu, 'nidottu').replace(/\bnid\b/gui, 'nidottu').replace(/\bsid\./gu, 'sidottu').replace(/\bsid\b/gui, 'sidottu').replace(/\bverkkojulk\.\b/gu, 'verkkojulkaisu').replace(/\bverkkojulk\b/gu, 'verkkojulkaisu').replace(/^\(([^)]+)\)$/u, '$1');
|
|
409
|
+
replace(/\bnid\./gu, 'nidottu').replace(/\bnid\b/gui, 'nidottu').replace(/\bsid\./gu, 'sidottu').replace(/\bsid\b/gui, 'sidottu').replace(/\bverkkojulk\.\b/gu, 'verkkojulkaisu').replace(/\bverkkojulk\b/gu, 'verkkojulkaisu').replace(/^\(([^)]+)\)$/u, '$1');
|
|
407
410
|
// <- removal of brackets above could use a better location
|
|
408
411
|
}
|
|
409
412
|
function expandSwedishAbbreviations(value) {
|
|
@@ -414,14 +417,7 @@ function expandSwedishAbbreviations(value) {
|
|
|
414
417
|
function finnishTranslationsAndMappings(value) {
|
|
415
418
|
return value.replace('analog', 'analoginen').replace('approximately', 'noin').replace('audio discs', 'äänilevyä').replace('black and white', 'mustavalkoinen').replace(/\bbilaga\b/gui, 'liite').replace(/\bbilagor\b/gui, 'liitettä').
|
|
416
419
|
// https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365
|
|
417
|
-
replace(/(\b1\]?) с\./gui, '$1 sivu').
|
|
418
|
-
// eslint-disable-line prefer-named-capture-group
|
|
419
|
-
replace(/(\d\]?) с\./gui, '$1 sivua').
|
|
420
|
-
// eslint-disable-line prefer-named-capture-group
|
|
421
|
-
replace(/(\d) см/gui, '$1 cm').
|
|
422
|
-
// eslint-disable-line prefer-named-capture-group
|
|
423
|
-
|
|
424
|
-
replace(/\bcharts\b/gui, 'kaavioita').replace('chiefly color illustrations', 'pääosin värikuvitettu').replace('chiefly', 'pääosin').replace(/\bcirca\b/gui, 'noin').replace(/coil[- ]?bound/gui, 'kierreselkä').replace('color illustrations', 'värikuvitus').replace(/comb[- ]?bound/gui, 'kierreselkä').replace(/\bdigital\b/gui, 'digitaalinen').replace(/\belectronic book\b/gui, 'verkkoaineisto').replace('(flera nummersviter)', '(useita numerointijaksoja)').replace(/\bfolded sheet\b/gui, 'taitelehti').replace(/\bfärgillustratione[nr]\b/gui, 'värikuvitus').replace(/\bhard(?:back|cover)\b/gui, 'kovakantinen').replace(/\bhours\b/gui, 'tuntia').replace(/\bi flera nummersviter/gui, 'useina numerointijaksoina').replace('illustrated', 'kuvitettu').replace(/illustrations?\b/gui, 'kuvitettu').
|
|
420
|
+
replace(/(\b1\]?) с\./gui, '$1 sivu').replace(/(\d\]?) с\./gui, '$1 sivua').replace(/(\d) см/gui, '$1 cm').replace(/\bcharts\b/gui, 'kaavioita').replace('chiefly color illustrations', 'pääosin värikuvitettu').replace('chiefly', 'pääosin').replace(/\bcirca\b/gui, 'noin').replace(/coil[- ]?bound/gui, 'kierreselkä').replace('color illustrations', 'värikuvitus').replace(/comb[- ]?bound/gui, 'kierreselkä').replace(/\bdigital\b/gui, 'digitaalinen').replace(/\belectronic book\b/gui, 'verkkoaineisto').replace('(flera nummersviter)', '(useita numerointijaksoja)').replace(/\bfolded sheet\b/gui, 'taitelehti').replace(/\bfärgillustratione[nr]\b/gui, 'värikuvitus').replace(/\bhard(?:back|cover)\b/gui, 'kovakantinen').replace(/\bhours\b/gui, 'tuntia').replace(/\bi flera nummersviter/gui, 'useina numerointijaksoina').replace('illustrated', 'kuvitettu').replace(/illustrations?\b/gui, 'kuvitettu').
|
|
425
421
|
// Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)
|
|
426
422
|
replace(/\binbunden\b/gui, 'kovakantinen').
|
|
427
423
|
// swe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cyrillux-usemarcon-replacement.js","names":["_clone","_interopRequireDefault","require","_marcRecord","_fix33X","_addMissingField","_addMissingField2","_addMissingField3","_addMissingField4","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_indicatorFixes","_punctuation","_normalizeQualifyingInformation","_sortSubfields","_utils","e","__esModule","default","description","dropTags","_default","fix","validate","record","nvdebug","realFix","res","message","valid","realFixNonAleph","isAlephRecord","leader","substring","fields","filter","f","includes","tag","removeSubfield","subfields","some","sf","code","value","fieldSpecificStuff","field","rest","undefined","removeOwnershipSubfield5","removeFromOldCatalog","translateFieldToFinnish","fixField040","fieldSpecificStuff2","removeSubfieldH","field100eKirjoittaja","fieldHasSubfield","isBK","sortAdjacentSubfields","field260To264s","field410To490And810","field440To490And830","realFixAll1","fixLeader","fixCountryCodes","fixLanguageCodes","recordRemoveValuelessSubfields","f028","forEach","add041","realFixAll2","fixQualifyingInformation","fixRelatorTerms","fix33X","add336","add337","add338","fixIndicators","fixPunctuation","originalString","recordToString","clonedRecord","MarcRecord","subfieldValues","modifiedString","f040","get","subfieldsBE","length","data","ind1","ind2","insertField","fixField040Subfields","push","match","removeFromOldCatalogFromSubfield","subfield","replace","filteredFields","remainingSubfields","field810","clone","field830","createCopyright264Field","getCopyrightYear","string","field260To264Normalization","field260To264Normalization2","createCopyright264Value","c","copyrightYear","copType","returnValue","year","translateSubfieldToFinnish","finnishTranslationsAndMappings","expandFinnishAbbreviations","expandSwedishAbbreviations","expandEnglishAbbreviations"],"sources":["../src/cyrillux-usemarcon-replacement.js"],"sourcesContent":["/*\n* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport clone from 'clone';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {default as fix33X} from './fix-33X';\nimport {default as add041} from './addMissingField041';\nimport {default as add336} from './addMissingField336';\nimport {default as add337} from './addMissingField337';\nimport {default as add338} from './addMissingField338';\nimport {default as fixCountryCodes} from './fix-country-codes';\nimport {default as fixLanguageCodes} from './fix-language-codes';\nimport {default as fixRelatorTerms} from './fixRelatorTerms';\nimport {default as fixIndicators} from './indicator-fixes';\nimport {default as fixPunctuation} from './punctuation2';\nimport {default as fixQualifyingInformation} from './normalize-qualifying-information';\nimport {sortAdjacentSubfields} from './sortSubfields';\n\n// import createDebugLogger from 'debug';\nimport {fieldHasSubfield, nvdebug, recordRemoveValuelessSubfields, recordToString, removeSubfield} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nconst description = 'Replacement for Cyrillux usemarcon rules';\n\n// Extended original list with 541, 561, 562, 583, 584\n// 017, 044... et al are LL additions from 2019 (via USEMARCON-RDA)\nconst dropTags = ['001', '003', '010', '012', '014', '015', '016', '017', '019', '025', '029', '032', '035', '036', '037', '038', '042', '044', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '751', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];\n\n\nexport default function () {\n return {\n description, fix, validate\n };\n\n function fix(record) {\n nvdebug(`${description}: fix`);\n realFix(record);\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function realFixNonAleph(record) {\n if (isAlephRecord(record)) {\n return;\n }\n\n // Update LDR/17 to '4'\n record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data\n\n // Remove unwanted fields:\n record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data\n\n removeSubfield(record, '020', 'c');\n\n // Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)\n record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')); // eslint-disable-line functional/immutable-data\n\n fieldSpecificStuff(record.fields);\n\n function fieldSpecificStuff(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeOwnershipSubfield5(field);\n removeFromOldCatalog(field); // Remove LoC phrase \"[from old catalog]\" from srings\n translateFieldToFinnish(field);\n\n return fieldSpecificStuff(rest);\n }\n\n fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!\n\n fieldSpecificStuff2(record.fields);\n\n function fieldSpecificStuff2(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeSubfieldH(field); // NB! Do this only after 33X creation, as 245$h might be useful there!\n\n field100eKirjoittaja(field);\n\n function field100eKirjoittaja(f) { // LL 2019 USEMARCON-RDA rule\n if (f.tag === '100' && !fieldHasSubfield(f, 'e') && record.isBK()) {\n f.subfields = [{code: 'e', value: 'kirjoittaja.'}, ...f.subfields]; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(f);\n // Punctuation will be done later on...\n return;\n }\n }\n\n field260To264s(field, record);\n\n // NB! 300 (before or after 33X creation?)\n field410To490And810(field, record);\n field440To490And830(field, record);\n // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.\n return fieldSpecificStuff2(rest);\n }\n\n }\n\n function realFixAll1(record) {\n fixLeader(record); // Fix defaults, esp. LDR/18=i\n\n fixCountryCodes().fix(record); // 008/15-17\n fixLanguageCodes().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)\n\n recordRemoveValuelessSubfields(record);\n\n // Field 028: use $b$a, not $a$b:\n const f028 = record.fields.filter(f => f.tag === '028');\n f028.forEach(f => sortAdjacentSubfields(f));\n\n add041().fix(record);\n\n }\n\n function realFixAll2(record) {\n fixQualifyingInformation().fix(record); // 015, 020, 024 and 028\n\n // Cyrillux specific code might change 040$b and thus affect these rules:\n fixRelatorTerms().fix(record);\n fix33X().fix(record); // 33X$a => 33X$a$b$2\n add336().fix(record);\n add337().fix(record);\n add338().fix(record);\n\n // The fixer below implements Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:\n fixIndicators().fix(record);\n\n fixPunctuation().fix(record);\n }\n\n function realFix(record) {\n realFixAll1(record);\n\n realFixNonAleph(record);\n\n realFixAll2(record);\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n // Validation is currently done in subparts\n function validate(record) {\n nvdebug(`${description}: validate`);\n const originalString = recordToString(record);\n const clonedRecord = new MarcRecord(record, {subfieldValues: false});\n realFix(clonedRecord);\n const modifiedString = recordToString(clonedRecord);\n\n if (originalString === modifiedString) {\n return {message: [], valid: true};\n }\n\n return {message: ['Record changed'], valid: false}; // Less than descriptive but will do...\n\n }\n}\n\nfunction fixField040(record) {\n const f040 = record.get('040');\n\n const subfieldsBE = [\n {code: 'b', value: 'mul'},\n {code: 'e', value: 'rda'}\n ];\n\n // Add 040 if there isn't one:\n if (f040.length === 0) {\n const data = {tag: '040', ind1: ' ', ind2: ' ', subfields: subfieldsBE};\n\n record.insertField(data);\n return;\n }\n\n f040.forEach(f => fixField040Subfields(f));\n\n function fixField040Subfields(field) {\n field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field); // put $b and $e to their proper places\n }\n\n}\n\nexport function removeFromOldCatalog(field) {\n if (!field.tag.match(/^(?:240|65[0135]|[1678](?:00|10|11|30))$/u)) {\n return;\n }\n // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation\n field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));\n\n function removeFromOldCatalogFromSubfield(subfield) {\n if (!subfield.value.includes('[from old catalog]')) {\n return;\n }\n subfield.value = subfield.value.replace(/ *\\[from old catalog\\]/gui, ''); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction removeSubfieldH(field) {\n if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {\n return;\n }\n\n const filteredFields = field.subfields.filter(sf => sf.code !== 'h');\n if (filteredFields.length > 0) {\n field.subfields = filteredFields; // eslint-disable-line functional/immutable-data\n return;\n }\n\n}\n\nexport function removeOwnershipSubfield5(field) {\n if (!field.subfields || field.subfields.length === 0) {\n return;\n }\n const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');\n if (remainingSubfields.length === 0) { // sanity check/robustness\n return;\n }\n field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data\n}\n\nexport function fixLeader(record) {\n record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data\n}\n\nfunction field410To490And810(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '410') {\n return;\n }\n\n const field810 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field);\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n\n\n field810.tag = '810'; // eslint-disable-line functional/immutable-data\n field810.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field810);\n}\n\nfunction field440To490And830(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '440') {\n return;\n }\n\n const field830 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n field830.tag = '830'; // eslint-disable-line functional/immutable-data\n // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field830);\n}\n\nfunction isAlephRecord(record) {\n // Records that are already in Aleph are not processed as aggressively as genuinely new ones:\n return record.fields.some(field => ['CAT', 'LKR', 'LOW', 'SID'].includes(field.tag));\n}\n\nfunction field260To264s(field, record) { // might be generic... if so, move to utils...\n // As per my quick reading of usemarcon-cyrillux\n if (field.tag !== '260') {\n return;\n }\n\n createCopyright264Field(field);\n\n field.tag = '264'; // eslint-disable-line functional/immutable-data\n field.ind1 = ' '; // eslint-disable-line functional/immutable-data\n field.ind2 = '1'; // eslint-disable-line functional/immutable-data\n\n // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)\n\n function getCopyrightYear(string) {\n if (string.match(/^(?:\\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {\n return string.replace(/[^0-9]/ug, '');\n }\n return false;\n }\n\n field.subfields?.forEach(sf => field260To264Normalization(sf));\n\n function field260To264Normalization(subfield) {\n subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data\n }\n\n function createCopyright264Value(field) {\n // Extract/split copyright year to a separate field:\n const [c] = field.subfields.filter(sf => sf.code === 'c');\n if (!c) {\n return undefined;\n }\n const copyrightYear = getCopyrightYear(c.value);\n if (!copyrightYear) {\n return undefined;\n }\n const copType = c.value.match(/(?:^\\[?p|℗)/u) ? '℗' : '©';\n const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;\n // Moidy the original value:\n c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data\n return returnValue;\n }\n\n function createCopyright264Field(field) {\n const c = createCopyright264Value(field);\n if (!c) {\n return undefined;\n }\n const data = {'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', 'value': c}]};\n record.insertField(data);\n }\n\n function field260To264Normalization2(subfield) {\n if (subfield.code === 'a') {\n return subfield.value.replace(/\\b[Ss]\\. ?l\\./u, 'Kustannuspaikka tuntematon');\n }\n if (subfield.code === 'b') {\n return subfield.value.replace(/\\b[Ss]\\. ?n\\./u, 'kustantaja tuntematon');\n }\n if (subfield.code === 'c') {\n const year = getCopyrightYear(subfield.value);\n if (year) {\n const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';\n if (subfield.value.includes('[')) {\n return `${c}[${year}]`;\n }\n return `${c}${year}`;\n }\n return subfield.value.replace(/\\b[Ss]\\. ?a\\./u, 'julkaisuaika tuntematon');\n }\n return subfield.value;\n }\n\n\n}\n\n/*\nfunction handle505(field) {\n if (field.tag !== '505') {\n return;\n }\n // Don't know how/why usemarcon-cyrillux is so sure about ind1...\n field.ind1 = '0'; // eslint-disable-line functional/immutable-data\n // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:\n const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));\n\n if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {\n field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n*/\n\nfunction translateFieldToFinnish(field) {\n if (!['020', '300'].includes(field.tag)) {\n return;\n }\n field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));\n\n function translateSubfieldToFinnish(subfield) {\n if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n if (field.tag === '300') {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\nfunction expandEnglishAbbreviations(value) {\n return value.replace(/\\bbk\\.\\b/gui, 'book').\n replace(/chiefly col\\./ui, 'chiefly color').\n replace(/col\\. ill\\./ui, 'color illustrations').\n replace(/diagrs\\./ui, 'diagrams').\n replace(/\\bhbk\\.\\b/gui, 'hardcover').replace(/\\bhbk\\b/gui, 'hardcover'). // expand to MTS-compliant form\n replace(/\\b1 hr\\./gui, '1 hour').\n replace(/\\bhr\\./gui, 'hours').\n replace(/\\bill\\./gui, 'illustrated'). // or illustrations (or Swedish \"illustrerad\" or...)\n replace(/\\billus\\./gui, 'illustrated'). // or illustrations\n replace(/incl\\./gui, 'includes').\n replace(/fold\\.? maps/gui, 'folded maps').\n // replace(/\\bmin\\./gu, 'minutes').\n // replace(/\\bmin\\b/gu, 'minutes').\n replace(/\\bp\\.\\b/gui, 'pages').replace(/\\bp\\b/gu, 'pages').\n replace(/\\bpbk\\.\\b/gui, 'paperback').replace(/\\bpbk\\b/gui, 'paperback'). // expand to MTS-compliant form\n replace(/\\bpdf\\b/gui, 'PDF').\n replace(/\\bports\\./gui, 'portraits').\n replace('sd., col.', 'sound, color').\n replace(/ *\\((?:chiefly col\\.|chiefly color|some col[s.])\\)/gui, '').\n replace(/\\b1 hr\\./gui, '1 hour');\n}\n\nfunction expandFinnishAbbreviations(value) {\n return value.replace(/\\bcn\\. /gu, 'noin ').\n // replace(/\\bmin\\./gu, 'minuuttia').\n // replace(/\\bmin\\b/gu, 'minuuttia').\n replace(/\\bnid\\./gu, 'nidottu').replace(/\\bnid\\b/gui, 'nidottu').\n replace(/\\bsid\\./gu, 'sidottu').replace(/\\bsid\\b/gui, 'sidottu').\n replace(/\\bverkkojulk\\.\\b/gu, 'verkkojulkaisu').replace(/\\bverkkojulk\\b/gu, 'verkkojulkaisu').\n replace(/^\\(([^)]+)\\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group\n // <- removal of brackets above could use a better location\n}\n\nfunction expandSwedishAbbreviations(value) {\n return value.replace(/\\bca\\. /gu, 'circa ').\n replace(/\\bhft\\./gui, 'häftad').replace(/\\bhft\\b/gui, 'häftad');\n // replace(/\\bmin\\./gu, 'minuter').\n // replace(/\\bmin\\b/gu, 'minuter');\n}\n\nfunction finnishTranslationsAndMappings(value) {\n return value.replace('analog', 'analoginen').\n replace('approximately', 'noin').\n replace('audio discs', 'äänilevyä').\n replace('black and white', 'mustavalkoinen').\n replace(/\\bbilaga\\b/gui, 'liite').\n replace(/\\bbilagor\\b/gui, 'liitettä').\n // https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365\n replace(/(\\b1\\]?) с\\./gui, '$1 sivu'). // eslint-disable-line prefer-named-capture-group\n replace(/(\\d\\]?) с\\./gui, '$1 sivua'). // eslint-disable-line prefer-named-capture-group\n replace(/(\\d) см/gui, '$1 cm'). // eslint-disable-line prefer-named-capture-group\n\n replace(/\\bcharts\\b/gui, 'kaavioita').\n replace('chiefly color illustrations', 'pääosin värikuvitettu').\n replace('chiefly', 'pääosin').\n replace(/\\bcirca\\b/gui, 'noin').\n replace(/coil[- ]?bound/gui, 'kierreselkä').\n replace('color illustrations', 'värikuvitus').\n replace(/comb[- ]?bound/gui, 'kierreselkä').\n replace(/\\bdigital\\b/gui, 'digitaalinen').\n replace(/\\belectronic book\\b/gui, 'verkkoaineisto').\n replace('(flera nummersviter)', '(useita numerointijaksoja)').\n replace(/\\bfolded sheet\\b/gui, 'taitelehti').\n replace(/\\bfärgillustratione[nr]\\b/gui, 'värikuvitus').\n replace(/\\bhard(?:back|cover)\\b/gui, 'kovakantinen').\n replace(/\\bhours\\b/gui, 'tuntia').\n replace(/\\bi flera nummersviter/gui, 'useina numerointijaksoina').\n replace('illustrated', 'kuvitettu').\n replace(/illustrations?\\b/gui, 'kuvitettu'). // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)\n replace(/\\binbunden\\b/gui, 'kovakantinen'). // swe\n replace(/\\binsert\\b/gui, 'liite').\n replace(/\\binserts\\b/gui, 'liitteitä').\n replace(/\\bin various pagings/gui, 'useina numerointijaksoina').\n replace('leaves of plates', 'kuvalehteä').\n replace(/\\bljudskiva\\b/gui, 'äänilevy').\n replace(/\\bljudskivor\\b/gui, 'äänilevyä').\n replace(/\\bmap\\b/gui, 'kartta').\n replace(/\\bmaps\\b/gui, 'karttoja'). // or karttaa?\n replace('minutes', 'minuuttia').\n replace('mjuka pärmar', 'pehmeäkantinen').\n replace('online resource', 'verkkoaineisto').\n replace('onlineresurs', 'verkkoaineisto').\n replace('onumrerade', 'numeroimatonta').\n replace('pages of plates', 'kuvalehteä').\n replace(/\\bpages\\b/gui, 'sivua').\n replace(/\\bpaperback\\b/gui, 'pehmeäkantinen'). // MTS alt\n replace(/\\bSeiten\\b/gu, 'sivua').\n replace(/\\bsoftcover\\b/gui, 'pehmeäkantinen'). // MTS pref\n replace('sound, color', 'äänellinen, värillinen').\n replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').\n replace('sound discs', 'äänilevyä').replace(/sound disc\\b/gui, 'äänilevy').\n replace(/(?:spiral[- ]?bound|spiralrygg)/gui, 'kierreselkä').\n replace('svartvit', 'mustavalkoinen').\n replace('unnumbered', 'numeroimatonta').\n replace('(various pagings)', '(useita numerointijaksoja)').\n replace(/\\bverkkojulkaisu\\b/gui, 'verkkoaineisto').\n replace('videodiscs', 'videolevyä').\n replace('videodisc', 'videolevy').\n replace(/\\b1 hour\\b/gui, '1 tunti');\n\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"cyrillux-usemarcon-replacement.js","names":["_clone","_interopRequireDefault","require","_marcRecord","_fix33X","_addMissingField","_addMissingField2","_addMissingField3","_addMissingField4","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_indicatorFixes","_punctuation","_normalizeQualifyingInformation","_sortSubfields","_utils","e","__esModule","default","description","dropTags","_default","fix","validate","record","nvdebug","realFix","res","message","valid","realFixNonAleph","isAlephRecord","leader","substring","fields","filter","f","includes","tag","removeSubfield","subfields","some","sf","code","value","fieldSpecificStuff","field","rest","undefined","removeOwnershipSubfield5","removeFromOldCatalog","translateFieldToFinnish","fixField040","fieldSpecificStuff2","removeSubfieldH","field100eKirjoittaja","fieldHasSubfield","isBK","sortAdjacentSubfields","field260To264s","field410To490And810","field440To490And830","realFixAll1","fixLeader","fixCountryCodes","fixLanguageCodes","recordRemoveValuelessSubfields","f028","forEach","add041","realFixAll2","fixQualifyingInformation","fixRelatorTerms","fix33X","add336","add337","add338","fixIndicators","fixPunctuation","originalString","recordToString","clonedRecord","MarcRecord","subfieldValues","modifiedString","f040","get","subfieldsBE","length","data","ind1","ind2","insertField","fixField040Subfields","push","match","removeFromOldCatalogFromSubfield","subfield","replace","filteredFields","remainingSubfields","field810","clone","field830","createCopyright264Field","getCopyrightYear","string","field260To264Normalization","field260To264Normalization2","createCopyright264Value","c","copyrightYear","copType","returnValue","year","translateSubfieldToFinnish","finnishTranslationsAndMappings","expandFinnishAbbreviations","expandSwedishAbbreviations","expandEnglishAbbreviations"],"sources":["../src/cyrillux-usemarcon-replacement.js"],"sourcesContent":["/*\n* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport clone from 'clone';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {default as fix33X} from './fix-33X';\nimport {default as add041} from './addMissingField041';\nimport {default as add336} from './addMissingField336';\nimport {default as add337} from './addMissingField337';\nimport {default as add338} from './addMissingField338';\nimport {default as fixCountryCodes} from './fix-country-codes';\nimport {default as fixLanguageCodes} from './fix-language-codes';\nimport {default as fixRelatorTerms} from './fixRelatorTerms';\nimport {default as fixIndicators} from './indicator-fixes';\nimport {default as fixPunctuation} from './punctuation2';\nimport {default as fixQualifyingInformation} from './normalize-qualifying-information';\nimport {sortAdjacentSubfields} from './sortSubfields';\n\n// import createDebugLogger from 'debug';\nimport {fieldHasSubfield, nvdebug, recordRemoveValuelessSubfields, recordToString, removeSubfield} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nconst description = 'Replacement for Cyrillux usemarcon rules';\n\n// Extended original list with 541, 561, 562, 583, 584\n// 017, 044... et al are LL additions from 2019 (via USEMARCON-RDA)\nconst dropTags = ['001', '003', '010', '012', '014', '015', '016', '017', '019', '025', '029', '032', '035', '036', '037', '038', '042', '044', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '751', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];\n\n\nexport default function () {\n return {\n description, fix, validate\n };\n\n function fix(record) {\n nvdebug(`${description}: fix`);\n realFix(record);\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function realFixNonAleph(record) {\n if (isAlephRecord(record)) {\n return;\n }\n\n // Update LDR/17 to '4'\n record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`;\n\n // Remove unwanted fields:\n record.fields = record.fields.filter(f => !dropTags.includes(f.tag));\n\n removeSubfield(record, '020', 'c');\n\n // Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)\n record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl'));\n\n fieldSpecificStuff(record.fields);\n\n function fieldSpecificStuff(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeOwnershipSubfield5(field);\n removeFromOldCatalog(field); // Remove LoC phrase \"[from old catalog]\" from srings\n translateFieldToFinnish(field);\n\n return fieldSpecificStuff(rest);\n }\n\n fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!\n\n fieldSpecificStuff2(record.fields);\n\n function fieldSpecificStuff2(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeSubfieldH(field); // NB! Do this only after 33X creation, as 245$h might be useful there!\n\n field100eKirjoittaja(field);\n\n function field100eKirjoittaja(f) { // LL 2019 USEMARCON-RDA rule\n if (f.tag === '100' && !fieldHasSubfield(f, 'e') && record.isBK()) {\n f.subfields = [{code: 'e', value: 'kirjoittaja.'}, ...f.subfields];\n sortAdjacentSubfields(f);\n // Punctuation will be done later on...\n return;\n }\n }\n\n field260To264s(field, record);\n\n // NB! 300 (before or after 33X creation?)\n field410To490And810(field, record);\n field440To490And830(field, record);\n // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.\n return fieldSpecificStuff2(rest);\n }\n\n }\n\n function realFixAll1(record) {\n fixLeader(record); // Fix defaults, esp. LDR/18=i\n\n fixCountryCodes().fix(record); // 008/15-17\n fixLanguageCodes().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)\n\n recordRemoveValuelessSubfields(record);\n\n // Field 028: use $b$a, not $a$b:\n const f028 = record.fields.filter(f => f.tag === '028');\n f028.forEach(f => sortAdjacentSubfields(f)); // eslint-disable-line array-callback-return\n\n add041().fix(record);\n\n }\n\n function realFixAll2(record) {\n fixQualifyingInformation().fix(record); // 015, 020, 024 and 028\n\n // Cyrillux specific code might change 040$b and thus affect these rules:\n fixRelatorTerms().fix(record);\n fix33X().fix(record); // 33X$a => 33X$a$b$2\n add336().fix(record);\n add337().fix(record);\n add338().fix(record);\n\n // The fixer below implements Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:\n fixIndicators().fix(record);\n\n fixPunctuation().fix(record);\n }\n\n function realFix(record) {\n realFixAll1(record);\n\n realFixNonAleph(record);\n\n realFixAll2(record);\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n // Validation is currently done in subparts\n function validate(record) {\n nvdebug(`${description}: validate`);\n const originalString = recordToString(record);\n const clonedRecord = new MarcRecord(record, {subfieldValues: false});\n realFix(clonedRecord);\n const modifiedString = recordToString(clonedRecord);\n\n if (originalString === modifiedString) {\n return {message: [], valid: true};\n }\n\n return {message: ['Record changed'], valid: false}; // Less than descriptive but will do...\n\n }\n}\n\nfunction fixField040(record) {\n const f040 = record.get('040');\n\n const subfieldsBE = [\n {code: 'b', value: 'mul'},\n {code: 'e', value: 'rda'}\n ];\n\n // Add 040 if there isn't one:\n if (f040.length === 0) {\n const data = {tag: '040', ind1: ' ', ind2: ' ', subfields: subfieldsBE};\n\n record.insertField(data);\n return;\n }\n\n f040.forEach(f => fixField040Subfields(f)); // eslint-disable-line array-callback-return\n\n function fixField040Subfields(field) {\n field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code));\n field.subfields.push(subfieldsBE[0]);\n field.subfields.push(subfieldsBE[1]);\n sortAdjacentSubfields(field); // put $b and $e to their proper places\n }\n\n}\n\nexport function removeFromOldCatalog(field) {\n if (!field.tag.match(/^(?:240|65[0135]|[1678](?:00|10|11|30))$/u)) {\n return;\n }\n // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation\n field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf)); // eslint-disable-line array-callback-return\n\n function removeFromOldCatalogFromSubfield(subfield) {\n if (!subfield.value.includes('[from old catalog]')) {\n return;\n }\n subfield.value = subfield.value.replace(/ *\\[from old catalog\\]/gui, '');\n }\n}\n\nfunction removeSubfieldH(field) {\n if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {\n return;\n }\n\n const filteredFields = field.subfields.filter(sf => sf.code !== 'h');\n if (filteredFields.length > 0) {\n field.subfields = filteredFields;\n return;\n }\n\n}\n\nexport function removeOwnershipSubfield5(field) {\n if (!field.subfields || field.subfields.length === 0) {\n return;\n }\n const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');\n if (remainingSubfields.length === 0) { // sanity check/robustness\n return;\n }\n field.subfields = remainingSubfields;\n}\n\nexport function fixLeader(record) {\n record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`;\n}\n\nfunction field410To490And810(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '410') {\n return;\n }\n\n const field810 = clone(field);\n\n field.tag = '490';\n field.ind1 = '1';\n field.ind2 = ' ';\n sortAdjacentSubfields(field);\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n\n\n field810.tag = '810';\n field810.ind2 = ' ';\n // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field810);\n}\n\nfunction field440To490And830(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '440') {\n return;\n }\n\n const field830 = clone(field);\n\n field.tag = '490';\n field.ind1 = '1';\n field.ind2 = ' ';\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n field830.tag = '830';\n // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field830);\n}\n\nfunction isAlephRecord(record) {\n // Records that are already in Aleph are not processed as aggressively as genuinely new ones:\n return record.fields.some(field => ['CAT', 'LKR', 'LOW', 'SID'].includes(field.tag));\n}\n\nfunction field260To264s(field, record) { // might be generic... if so, move to utils...\n // As per my quick reading of usemarcon-cyrillux\n if (field.tag !== '260') {\n return;\n }\n\n createCopyright264Field(field);\n\n field.tag = '264';\n field.ind1 = ' ';\n field.ind2 = '1';\n\n // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)\n\n function getCopyrightYear(string) {\n if (string.match(/^(?:\\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {\n return string.replace(/[^0-9]/ug, '');\n }\n return false;\n }\n\n field.subfields?.forEach(sf => field260To264Normalization(sf)); // eslint-disable-line array-callback-return\n\n function field260To264Normalization(subfield) {\n subfield.value = field260To264Normalization2(subfield);\n }\n\n function createCopyright264Value(field) {\n // Extract/split copyright year to a separate field:\n const [c] = field.subfields.filter(sf => sf.code === 'c');\n if (!c) {\n return undefined;\n }\n const copyrightYear = getCopyrightYear(c.value);\n if (!copyrightYear) {\n return undefined;\n }\n const copType = c.value.match(/(?:^\\[?p|℗)/u) ? '℗' : '©';\n const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;\n // Moidy the original value:\n c.value = `[${copyrightYear}]`;\n return returnValue;\n }\n\n function createCopyright264Field(field) {\n const c = createCopyright264Value(field);\n if (!c) {\n return undefined;\n }\n const data = {'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', 'value': c}]};\n record.insertField(data);\n }\n\n function field260To264Normalization2(subfield) {\n if (subfield.code === 'a') {\n return subfield.value.replace(/\\b[Ss]\\. ?l\\./u, 'Kustannuspaikka tuntematon');\n }\n if (subfield.code === 'b') {\n return subfield.value.replace(/\\b[Ss]\\. ?n\\./u, 'kustantaja tuntematon');\n }\n if (subfield.code === 'c') {\n const year = getCopyrightYear(subfield.value);\n if (year) {\n const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';\n if (subfield.value.includes('[')) {\n return `${c}[${year}]`;\n }\n return `${c}${year}`;\n }\n return subfield.value.replace(/\\b[Ss]\\. ?a\\./u, 'julkaisuaika tuntematon');\n }\n return subfield.value;\n }\n\n\n}\n\n/*\nfunction handle505(field) {\n if (field.tag !== '505') {\n return;\n }\n // Don't know how/why usemarcon-cyrillux is so sure about ind1...\n field.ind1 = '0';\n // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:\n const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));\n\n if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {\n field.subfields = keptSubfields;\n return;\n }\n}\n*/\n\nfunction translateFieldToFinnish(field) {\n if (!['020', '300'].includes(field.tag)) {\n return;\n }\n field.subfields?.forEach(sf => translateSubfieldToFinnish(sf)); // eslint-disable-line array-callback-return\n\n function translateSubfieldToFinnish(subfield) {\n if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));\n return;\n }\n if (field.tag === '300') {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));\n return;\n }\n }\n}\n\nfunction expandEnglishAbbreviations(value) {\n return value.replace(/\\bbk\\.\\b/gui, 'book').\n replace(/chiefly col\\./ui, 'chiefly color').\n replace(/col\\. ill\\./ui, 'color illustrations').\n replace(/diagrs\\./ui, 'diagrams').\n replace(/\\bhbk\\.\\b/gui, 'hardcover').replace(/\\bhbk\\b/gui, 'hardcover'). // expand to MTS-compliant form\n replace(/\\b1 hr\\./gui, '1 hour').\n replace(/\\bhr\\./gui, 'hours').\n replace(/\\bill\\./gui, 'illustrated'). // or illustrations (or Swedish \"illustrerad\" or...)\n replace(/\\billus\\./gui, 'illustrated'). // or illustrations\n replace(/incl\\./gui, 'includes').\n replace(/fold\\.? maps/gui, 'folded maps').\n // replace(/\\bmin\\./gu, 'minutes').\n // replace(/\\bmin\\b/gu, 'minutes').\n replace(/\\bp\\.\\b/gui, 'pages').replace(/\\bp\\b/gu, 'pages').\n replace(/\\bpbk\\.\\b/gui, 'paperback').replace(/\\bpbk\\b/gui, 'paperback'). // expand to MTS-compliant form\n replace(/\\bpdf\\b/gui, 'PDF').\n replace(/\\bports\\./gui, 'portraits').\n replace('sd., col.', 'sound, color').\n replace(/ *\\((?:chiefly col\\.|chiefly color|some col[s.])\\)/gui, '').\n replace(/\\b1 hr\\./gui, '1 hour');\n}\n\nfunction expandFinnishAbbreviations(value) {\n return value.replace(/\\bcn\\. /gu, 'noin ').\n // replace(/\\bmin\\./gu, 'minuuttia').\n // replace(/\\bmin\\b/gu, 'minuuttia').\n replace(/\\bnid\\./gu, 'nidottu').replace(/\\bnid\\b/gui, 'nidottu').\n replace(/\\bsid\\./gu, 'sidottu').replace(/\\bsid\\b/gui, 'sidottu').\n replace(/\\bverkkojulk\\.\\b/gu, 'verkkojulkaisu').replace(/\\bverkkojulk\\b/gu, 'verkkojulkaisu').\n replace(/^\\(([^)]+)\\)$/u, '$1');\n // <- removal of brackets above could use a better location\n}\n\nfunction expandSwedishAbbreviations(value) {\n return value.replace(/\\bca\\. /gu, 'circa ').\n replace(/\\bhft\\./gui, 'häftad').replace(/\\bhft\\b/gui, 'häftad');\n // replace(/\\bmin\\./gu, 'minuter').\n // replace(/\\bmin\\b/gu, 'minuter');\n}\n\nfunction finnishTranslationsAndMappings(value) {\n return value.replace('analog', 'analoginen').\n replace('approximately', 'noin').\n replace('audio discs', 'äänilevyä').\n replace('black and white', 'mustavalkoinen').\n replace(/\\bbilaga\\b/gui, 'liite').\n replace(/\\bbilagor\\b/gui, 'liitettä').\n // https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365\n replace(/(\\b1\\]?) с\\./gui, '$1 sivu').\n replace(/(\\d\\]?) с\\./gui, '$1 sivua').\n replace(/(\\d) см/gui, '$1 cm').\n\n replace(/\\bcharts\\b/gui, 'kaavioita').\n replace('chiefly color illustrations', 'pääosin värikuvitettu').\n replace('chiefly', 'pääosin').\n replace(/\\bcirca\\b/gui, 'noin').\n replace(/coil[- ]?bound/gui, 'kierreselkä').\n replace('color illustrations', 'värikuvitus').\n replace(/comb[- ]?bound/gui, 'kierreselkä').\n replace(/\\bdigital\\b/gui, 'digitaalinen').\n replace(/\\belectronic book\\b/gui, 'verkkoaineisto').\n replace('(flera nummersviter)', '(useita numerointijaksoja)').\n replace(/\\bfolded sheet\\b/gui, 'taitelehti').\n replace(/\\bfärgillustratione[nr]\\b/gui, 'värikuvitus').\n replace(/\\bhard(?:back|cover)\\b/gui, 'kovakantinen').\n replace(/\\bhours\\b/gui, 'tuntia').\n replace(/\\bi flera nummersviter/gui, 'useina numerointijaksoina').\n replace('illustrated', 'kuvitettu').\n replace(/illustrations?\\b/gui, 'kuvitettu'). // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)\n replace(/\\binbunden\\b/gui, 'kovakantinen'). // swe\n replace(/\\binsert\\b/gui, 'liite').\n replace(/\\binserts\\b/gui, 'liitteitä').\n replace(/\\bin various pagings/gui, 'useina numerointijaksoina').\n replace('leaves of plates', 'kuvalehteä').\n replace(/\\bljudskiva\\b/gui, 'äänilevy').\n replace(/\\bljudskivor\\b/gui, 'äänilevyä').\n replace(/\\bmap\\b/gui, 'kartta').\n replace(/\\bmaps\\b/gui, 'karttoja'). // or karttaa?\n replace('minutes', 'minuuttia').\n replace('mjuka pärmar', 'pehmeäkantinen').\n replace('online resource', 'verkkoaineisto').\n replace('onlineresurs', 'verkkoaineisto').\n replace('onumrerade', 'numeroimatonta').\n replace('pages of plates', 'kuvalehteä').\n replace(/\\bpages\\b/gui, 'sivua').\n replace(/\\bpaperback\\b/gui, 'pehmeäkantinen'). // MTS alt\n replace(/\\bSeiten\\b/gu, 'sivua').\n replace(/\\bsoftcover\\b/gui, 'pehmeäkantinen'). // MTS pref\n replace('sound, color', 'äänellinen, värillinen').\n replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').\n replace('sound discs', 'äänilevyä').replace(/sound disc\\b/gui, 'äänilevy').\n replace(/(?:spiral[- ]?bound|spiralrygg)/gui, 'kierreselkä').\n replace('svartvit', 'mustavalkoinen').\n replace('unnumbered', 'numeroimatonta').\n replace('(various pagings)', '(useita numerointijaksoja)').\n replace(/\\bverkkojulkaisu\\b/gui, 'verkkoaineisto').\n replace('videodiscs', 'videolevyä').\n replace('videodisc', 'videolevy').\n replace(/\\b1 hour\\b/gui, '1 tunti');\n\n}\n"],"mappings":"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","ignoreList":[]}
|