@natlibfi/marc-record-validators-melinda 11.6.7 → 12.0.0-alpha.2
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 +63 -91
- package/dist/access-rights.js.map +7 -1
- package/dist/access-rights.test.js +137 -0
- package/dist/access-rights.test.js.map +7 -0
- package/dist/addMissingField041.js +21 -53
- package/dist/addMissingField041.js.map +7 -1
- package/dist/addMissingField041.test.js +39 -0
- package/dist/addMissingField041.test.js.map +7 -0
- package/dist/addMissingField336.js +99 -191
- package/dist/addMissingField336.js.map +7 -1
- package/dist/addMissingField336.test.js +39 -0
- package/dist/addMissingField336.test.js.map +7 -0
- package/dist/addMissingField337.js +63 -132
- package/dist/addMissingField337.js.map +7 -1
- package/dist/addMissingField337.test.js +39 -0
- package/dist/addMissingField337.test.js.map +7 -0
- package/dist/addMissingField338.js +147 -253
- package/dist/addMissingField338.js.map +7 -1
- package/dist/addMissingField338.test.js +39 -0
- package/dist/addMissingField338.test.js.map +7 -0
- package/dist/cyrillux-usemarcon-replacement.js +119 -272
- package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
- package/dist/cyrillux-usemarcon-replacement.test.js +46 -0
- package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
- package/dist/cyrillux.js +119 -223
- package/dist/cyrillux.js.map +7 -1
- package/dist/cyrillux.test.js +39 -0
- package/dist/cyrillux.test.js.map +7 -0
- package/dist/disambiguateSeriesStatements.js +40 -81
- package/dist/disambiguateSeriesStatements.js.map +7 -1
- package/dist/disambiguateSeriesStatements.test.js +44 -0
- package/dist/disambiguateSeriesStatements.test.js.map +7 -0
- package/dist/double-commas.js +7 -14
- package/dist/double-commas.js.map +7 -1
- package/dist/double-commas.test.js +48 -0
- package/dist/double-commas.test.js.map +7 -0
- package/dist/duplicates-ind1.js +10 -31
- package/dist/duplicates-ind1.js.map +7 -1
- package/dist/duplicates-ind1.test.js +40 -0
- package/dist/duplicates-ind1.test.js.map +7 -0
- package/dist/empty-fields.js +10 -22
- package/dist/empty-fields.js.map +7 -1
- package/dist/empty-fields.test.js +129 -0
- package/dist/empty-fields.test.js.map +7 -0
- package/dist/ending-punctuation-conf.js +871 -769
- package/dist/ending-punctuation-conf.js.map +7 -1
- package/dist/ending-punctuation.js +84 -167
- package/dist/ending-punctuation.js.map +7 -1
- package/dist/ending-punctuation.test.js +2290 -0
- package/dist/ending-punctuation.test.js.map +7 -0
- package/dist/ending-whitespace.js +10 -35
- package/dist/ending-whitespace.js.map +7 -1
- package/dist/ending-whitespace.test.js +38 -0
- package/dist/ending-whitespace.test.js.map +7 -0
- package/dist/field-008-18-34-character-groups.js +40 -125
- package/dist/field-008-18-34-character-groups.js.map +7 -1
- package/dist/field-008-18-34-character-groups.test.js +45 -0
- package/dist/field-008-18-34-character-groups.test.js.map +7 -0
- package/dist/field-505-separators.js +19 -39
- package/dist/field-505-separators.js.map +7 -1
- package/dist/field-505-separators.test.js +45 -0
- package/dist/field-505-separators.test.js.map +7 -0
- package/dist/field-521-fix.js +19 -47
- package/dist/field-521-fix.js.map +7 -1
- package/dist/field-521-fix.test.js +44 -0
- package/dist/field-521-fix.test.js.map +7 -0
- package/dist/field-exclusion.js +37 -91
- package/dist/field-exclusion.js.map +7 -1
- package/dist/field-exclusion.test.js +821 -0
- package/dist/field-exclusion.test.js.map +7 -0
- package/dist/field-structure.js +52 -104
- package/dist/field-structure.js.map +7 -1
- package/dist/field-structure.test.js +587 -0
- package/dist/field-structure.test.js.map +7 -0
- package/dist/field33XUtils.js +119 -503
- package/dist/field33XUtils.js.map +7 -1
- package/dist/fields-present.js +11 -23
- package/dist/fields-present.js.map +7 -1
- package/dist/fields-present.test.js +95 -0
- package/dist/fields-present.test.js.map +7 -0
- package/dist/fix-33X.js +393 -431
- package/dist/fix-33X.js.map +7 -1
- package/dist/fix-33X.test.js +39 -0
- package/dist/fix-33X.test.js.map +7 -0
- package/dist/fix-country-codes.js +20 -50
- package/dist/fix-country-codes.js.map +7 -1
- package/dist/fix-country-codes.test.js +44 -0
- package/dist/fix-country-codes.test.js.map +7 -0
- package/dist/fix-language-codes.js +23 -53
- package/dist/fix-language-codes.js.map +7 -1
- package/dist/fix-language-codes.test.js +38 -0
- package/dist/fix-language-codes.test.js.map +7 -0
- package/dist/fixRelatorTerms.js +82 -209
- package/dist/fixRelatorTerms.js.map +7 -1
- package/dist/fixRelatorTerms.test.js +44 -0
- package/dist/fixRelatorTerms.test.js.map +7 -0
- package/dist/fixed-fields.js +21 -30
- package/dist/fixed-fields.js.map +7 -1
- package/dist/fixed-fields.test.js +87 -0
- package/dist/fixed-fields.test.js.map +7 -0
- package/dist/identical-fields.js +8 -24
- package/dist/identical-fields.js.map +7 -1
- package/dist/identical-fields.test.js +119 -0
- package/dist/identical-fields.test.js.map +7 -0
- package/dist/index.js +119 -413
- package/dist/index.js.map +7 -1
- package/dist/indicator-fixes.js +57 -95
- package/dist/indicator-fixes.js.map +7 -1
- package/dist/indicator-fixes.test.js +42 -0
- package/dist/indicator-fixes.test.js.map +7 -0
- package/dist/isbn-issn.js +66 -126
- package/dist/isbn-issn.js.map +7 -1
- package/dist/isbn-issn.test.js +398 -0
- package/dist/isbn-issn.test.js.map +7 -0
- package/dist/item-language.js +32 -65
- package/dist/item-language.js.map +7 -1
- package/dist/item-language.test.js +322 -0
- package/dist/item-language.test.js.map +7 -0
- package/dist/melindaCustomMergeFields.js +5182 -11233
- package/dist/melindaCustomMergeFields.js.map +7 -1
- package/dist/merge-fields/controlSubfields.js +75 -142
- package/dist/merge-fields/controlSubfields.js.map +7 -1
- package/dist/merge-fields/counterpartField.js +182 -379
- package/dist/merge-fields/counterpartField.js.map +7 -1
- package/dist/merge-fields/index.js +15 -49
- package/dist/merge-fields/index.js.map +7 -1
- package/dist/merge-fields/mergableIndicator.js +18 -51
- package/dist/merge-fields/mergableIndicator.js.map +7 -1
- package/dist/merge-fields/mergableTag.js +78 -30
- package/dist/merge-fields/mergableTag.js.map +7 -1
- package/dist/merge-fields/mergeConfig.js +66 -171
- package/dist/merge-fields/mergeConfig.js.map +7 -1
- package/dist/merge-fields/mergeConstraints.js +323 -1214
- package/dist/merge-fields/mergeConstraints.js.map +7 -1
- package/dist/merge-fields/mergeField.js +47 -111
- package/dist/merge-fields/mergeField.js.map +7 -1
- package/dist/merge-fields/mergeIndicator.js +64 -118
- package/dist/merge-fields/mergeIndicator.js.map +7 -1
- package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
- package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
- package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
- package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
- package/dist/merge-fields/mergeSubfield.js +47 -95
- package/dist/merge-fields/mergeSubfield.js.map +7 -1
- package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
- package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
- package/dist/merge-fields/worldKnowledge.js +15 -40
- package/dist/merge-fields/worldKnowledge.js.map +7 -1
- package/dist/merge-fields.test.js +44 -0
- package/dist/merge-fields.test.js.map +7 -0
- package/dist/mergeField500Lisapainokset.js +28 -57
- package/dist/mergeField500Lisapainokset.js.map +7 -1
- package/dist/mergeField500Lisapainokset.test.js +44 -0
- package/dist/mergeField500Lisapainokset.test.js.map +7 -0
- package/dist/mergeRelatorTermFields.js +33 -69
- package/dist/mergeRelatorTermFields.js.map +7 -1
- package/dist/mergeRelatorTermFields.test.js +44 -0
- package/dist/mergeRelatorTermFields.test.js.map +7 -0
- package/dist/modernize-502.js +23 -55
- package/dist/modernize-502.js.map +7 -1
- package/dist/modernize-502.test.js +38 -0
- package/dist/modernize-502.test.js.map +7 -0
- package/dist/multiple-subfield-0.js +23 -48
- package/dist/multiple-subfield-0.js.map +7 -1
- package/dist/multiple-subfield-0.test.js +44 -0
- package/dist/multiple-subfield-0.test.js.map +7 -0
- package/dist/non-breaking-space.js +11 -32
- package/dist/non-breaking-space.js.map +7 -1
- package/dist/non-breaking-space.test.js +38 -0
- package/dist/non-breaking-space.test.js.map +7 -0
- package/dist/normalize-dashes.js +18 -37
- package/dist/normalize-dashes.js.map +7 -1
- package/dist/normalize-dashes.test.js +44 -0
- package/dist/normalize-dashes.test.js.map +7 -0
- package/dist/normalize-identifiers.js +54 -140
- package/dist/normalize-identifiers.js.map +7 -1
- package/dist/normalize-identifiers.test.js +44 -0
- package/dist/normalize-identifiers.test.js.map +7 -0
- package/dist/normalize-qualifying-information.js +23 -48
- package/dist/normalize-qualifying-information.js.map +7 -1
- package/dist/normalize-qualifying-information.test.js +44 -0
- package/dist/normalize-qualifying-information.test.js.map +7 -0
- package/dist/normalize-utf8-diacritics.js +19 -105
- package/dist/normalize-utf8-diacritics.js.map +7 -1
- package/dist/normalize-utf8-diacritics.test.js +44 -0
- package/dist/normalize-utf8-diacritics.test.js.map +7 -0
- package/dist/normalizeFieldForComparison.js +67 -158
- package/dist/normalizeFieldForComparison.js.map +7 -1
- package/dist/normalizeSubfieldValueForComparison.js +37 -77
- package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
- package/dist/prepublicationUtils.js +58 -111
- package/dist/prepublicationUtils.js.map +7 -1
- package/dist/punctuation/index.js +56 -72
- package/dist/punctuation/index.js.map +7 -1
- package/dist/punctuation/rules/aut.js +372 -331
- package/dist/punctuation/rules/aut.js.map +7 -1
- package/dist/punctuation/rules/bib.js +420 -373
- package/dist/punctuation/rules/bib.js.map +7 -1
- package/dist/punctuation/rules/index.js +7 -21
- package/dist/punctuation/rules/index.js.map +7 -1
- package/dist/punctuation.test.js +44 -0
- package/dist/punctuation.test.js.map +7 -0
- package/dist/punctuation2.js +251 -800
- package/dist/punctuation2.js.map +7 -1
- package/dist/punctuation2.test.js +44 -0
- package/dist/punctuation2.test.js.map +7 -0
- package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
- package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
- package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
- package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
- package/dist/removeDuplicateDataFields.js +102 -202
- package/dist/removeDuplicateDataFields.js.map +7 -1
- package/dist/removeDuplicateDataFields.test.js +44 -0
- package/dist/removeDuplicateDataFields.test.js.map +7 -0
- package/dist/removeInferiorDataFields.js +103 -227
- package/dist/removeInferiorDataFields.js.map +7 -1
- package/dist/removeInferiorDataFields.test.js +44 -0
- package/dist/removeInferiorDataFields.test.js.map +7 -0
- package/dist/resolvable-ext-references-melinda.js +25 -60
- package/dist/resolvable-ext-references-melinda.js.map +7 -1
- package/dist/resolvable-ext-references-melinda.test.js +160 -0
- package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
- package/dist/resolveOrphanedSubfield6s.js +33 -64
- package/dist/resolveOrphanedSubfield6s.js.map +7 -1
- package/dist/resolveOrphanedSubfield6s.test.js +44 -0
- package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
- package/dist/sanitize-vocabulary-source-codes.js +27 -55
- package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
- package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
- package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
- package/dist/sort-tags.js +13 -25
- package/dist/sort-tags.js.map +7 -1
- package/dist/sort-tags.test.js +261 -0
- package/dist/sort-tags.test.js.map +7 -0
- package/dist/sortFields.js +152 -222
- package/dist/sortFields.js.map +7 -1
- package/dist/sortFields.test.js +44 -0
- package/dist/sortFields.test.js.map +7 -0
- package/dist/sortRelatorTerms.js +30 -68
- package/dist/sortRelatorTerms.js.map +7 -1
- package/dist/sortRelatorTerms.test.js +44 -0
- package/dist/sortRelatorTerms.test.js.map +7 -0
- package/dist/sortSubfields.js +102 -255
- package/dist/sortSubfields.js.map +7 -1
- package/dist/sortSubfields.test.js +44 -0
- package/dist/sortSubfields.test.js.map +7 -0
- package/dist/stripPunctuation.js +13 -36
- package/dist/stripPunctuation.js.map +7 -1
- package/dist/stripPunctuation.test.js +44 -0
- package/dist/stripPunctuation.test.js.map +7 -0
- package/dist/subfield-exclusion.js +28 -75
- package/dist/subfield-exclusion.js.map +7 -1
- package/dist/subfield-exclusion.test.js +471 -0
- package/dist/subfield-exclusion.test.js.map +7 -0
- package/dist/subfield6Utils.js +107 -269
- package/dist/subfield6Utils.js.map +7 -1
- package/dist/subfield8Utils.js +26 -50
- package/dist/subfield8Utils.js.map +7 -1
- package/dist/subfieldValueNormalizations.js +40 -74
- package/dist/subfieldValueNormalizations.js.map +7 -1
- package/dist/subfieldValueNormalizations.test.js +45 -0
- package/dist/subfieldValueNormalizations.test.js.map +7 -0
- package/dist/sync-007-and-300.js +22 -53
- package/dist/sync-007-and-300.js.map +7 -1
- package/dist/sync-007-and-300.test.js +44 -0
- package/dist/sync-007-and-300.test.js.map +7 -0
- package/dist/translate-terms.js +67 -155
- package/dist/translate-terms.js.map +7 -1
- package/dist/translate-terms.test.js +44 -0
- package/dist/translate-terms.test.js.map +7 -0
- package/dist/typeOfDate-008.js +10 -25
- package/dist/typeOfDate-008.js.map +7 -1
- package/dist/typeOfDate-008.test.js +40 -0
- package/dist/typeOfDate-008.test.js.map +7 -0
- package/dist/unicode-decomposition.js +94 -107
- package/dist/unicode-decomposition.js.map +7 -1
- package/dist/unicode-decomposition.test.js +94 -0
- package/dist/unicode-decomposition.test.js.map +7 -0
- package/dist/update-field-540.js +30 -75
- package/dist/update-field-540.js.map +7 -1
- package/dist/update-field-540.test.js +44 -0
- package/dist/update-field-540.test.js.map +7 -0
- package/dist/urn.js +55 -128
- package/dist/urn.js.map +7 -1
- package/dist/urn.test.js +44 -0
- package/dist/urn.test.js.map +7 -0
- package/dist/utils.js +72 -126
- package/dist/utils.js.map +7 -1
- package/eslint.config.mjs +1 -2
- package/package.json +21 -93
- package/src/access-rights.js +1 -1
- package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
- package/src/addMissingField041.js +1 -1
- package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
- package/src/addMissingField336.js +3 -3
- package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
- package/src/addMissingField337.js +2 -2
- package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
- package/src/addMissingField338.js +2 -2
- package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
- package/src/cyrillux-usemarcon-replacement.js +18 -18
- package/src/cyrillux-usemarcon-replacement.test.js +55 -0
- package/src/cyrillux.js +19 -12
- package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
- package/src/disambiguateSeriesStatements.js +2 -2
- package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
- package/src/double-commas.js +1 -1
- package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
- package/src/duplicates-ind1.js +1 -1
- package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
- package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
- package/src/ending-punctuation.js +1 -1
- package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +172 -173
- package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
- package/src/field-008-18-34-character-groups.js +2 -2
- package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
- package/src/field-505-separators.js +3 -3
- package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
- package/src/field-521-fix.js +2 -2
- package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
- package/src/field-exclusion.js +1 -1
- package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
- package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
- package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
- package/src/fix-33X.js +4 -4
- package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
- package/src/fix-country-codes.js +1 -1
- package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
- package/src/fix-language-codes.js +5 -5
- package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
- package/src/fixRelatorTerms.js +5 -5
- package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
- package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
- package/src/identical-fields.js +1 -1
- package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
- package/src/index.js +58 -58
- package/src/indicator-fixes.js +3 -3
- package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
- package/src/isbn-issn.js +1 -1
- package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
- package/src/{item-language.spec.js → item-language.test.js} +21 -22
- package/src/merge-fields/controlSubfields.js +1 -1
- package/src/merge-fields/counterpartField.js +8 -9
- package/src/merge-fields/index.js +1 -1
- package/src/merge-fields/mergableIndicator.js +1 -1
- package/src/merge-fields/mergeField.js +6 -6
- package/src/merge-fields/mergeIndicator.js +1 -1
- package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
- package/src/merge-fields/mergeOrAddSubfield.js +2 -2
- package/src/merge-fields/mergeSubfield.js +4 -4
- package/src/merge-fields/removeDuplicateSubfields.js +2 -2
- package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
- package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
- package/src/mergeRelatorTermFields.js +5 -7
- package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
- package/src/modernize-502.js +1 -1
- package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
- package/src/multiple-subfield-0.js +3 -3
- package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
- package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
- package/src/normalize-dashes.js +2 -2
- package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
- package/src/normalize-identifiers.js +1 -1
- package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
- package/src/normalize-qualifying-information.js +2 -2
- package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
- package/src/normalize-utf8-diacritics.js +2 -2
- package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
- package/src/normalizeFieldForComparison.js +6 -6
- package/src/normalizeSubfieldValueForComparison.js +1 -1
- package/src/prepublicationUtils.js +4 -4
- package/src/punctuation/index.js +1 -1
- package/src/punctuation/rules/index.js +2 -2
- package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
- package/src/punctuation2.js +4 -4
- package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
- package/src/reindexSubfield6OccurenceNumbers.js +5 -7
- package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
- package/src/removeDuplicateDataFields.js +11 -19
- package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
- package/src/removeInferiorDataFields.js +11 -11
- package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
- package/src/resolvable-ext-references-melinda.js +1 -1
- package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
- package/src/resolveOrphanedSubfield6s.js +5 -5
- package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
- package/src/sanitize-vocabulary-source-codes.js +4 -4
- package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
- package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
- package/src/sortFields.js +4 -4
- package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
- package/src/sortRelatorTerms.js +3 -3
- package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
- package/src/sortSubfields.js +1 -1
- package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
- package/src/stripPunctuation.js +3 -3
- package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
- package/src/subfield-exclusion.js +1 -1
- package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
- package/src/subfield6Utils.js +6 -10
- package/src/subfield8Utils.js +4 -4
- package/src/subfieldValueNormalizations.js +3 -3
- package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
- package/src/sync-007-and-300.js +2 -2
- package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
- package/src/translate-terms.js +3 -3
- package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
- package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
- package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
- package/src/update-field-540.js +2 -2
- package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
- package/src/urn.js +2 -2
- package/src/{urn.spec.js → urn.test.js} +12 -13
- package/src/utils.js +3 -3
- package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
- package/test-fixtures/field-505-separators/03/record.json +3 -0
- package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
- package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
- package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
- package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
- package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
- package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
- package/dist/access-rights.spec.js +0 -195
- package/dist/access-rights.spec.js.map +0 -1
- package/dist/addMissingField041.spec.js +0 -45
- package/dist/addMissingField041.spec.js.map +0 -1
- package/dist/addMissingField336.spec.js +0 -45
- package/dist/addMissingField336.spec.js.map +0 -1
- package/dist/addMissingField337.spec.js +0 -43
- package/dist/addMissingField337.spec.js.map +0 -1
- package/dist/addMissingField338.spec.js +0 -45
- package/dist/addMissingField338.spec.js.map +0 -1
- package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
- package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
- package/dist/cyrillux.spec.js +0 -46
- package/dist/cyrillux.spec.js.map +0 -1
- package/dist/disambiguateSeriesStatements.spec.js +0 -51
- package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
- package/dist/double-commas.spec.js +0 -73
- package/dist/double-commas.spec.js.map +0 -1
- package/dist/duplicates-ind1.spec.js +0 -45
- package/dist/duplicates-ind1.spec.js.map +0 -1
- package/dist/empty-fields.spec.js +0 -118
- package/dist/empty-fields.spec.js.map +0 -1
- package/dist/ending-punctuation.spec.js +0 -2654
- package/dist/ending-punctuation.spec.js.map +0 -1
- package/dist/ending-whitespace.spec.js +0 -42
- package/dist/ending-whitespace.spec.js.map +0 -1
- package/dist/field-008-18-34-character-groups.spec.js +0 -51
- package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
- package/dist/field-505-separators.spec.js +0 -51
- package/dist/field-505-separators.spec.js.map +0 -1
- package/dist/field-521-fix.spec.js +0 -51
- package/dist/field-521-fix.spec.js.map +0 -1
- package/dist/field-exclusion.spec.js +0 -1054
- package/dist/field-exclusion.spec.js.map +0 -1
- package/dist/field-structure.spec.js +0 -535
- package/dist/field-structure.spec.js.map +0 -1
- package/dist/fields-present.spec.js +0 -121
- package/dist/fields-present.spec.js.map +0 -1
- package/dist/fix-33X.spec.js +0 -45
- package/dist/fix-33X.spec.js.map +0 -1
- package/dist/fix-country-codes.spec.js +0 -51
- package/dist/fix-country-codes.spec.js.map +0 -1
- package/dist/fix-language-codes.spec.js +0 -44
- package/dist/fix-language-codes.spec.js.map +0 -1
- package/dist/fixRelatorTerms.spec.js +0 -51
- package/dist/fixRelatorTerms.spec.js.map +0 -1
- package/dist/fixed-fields.spec.js +0 -140
- package/dist/fixed-fields.spec.js.map +0 -1
- package/dist/identical-fields.spec.js +0 -99
- package/dist/identical-fields.spec.js.map +0 -1
- package/dist/indicator-fixes.spec.js +0 -51
- package/dist/indicator-fixes.spec.js.map +0 -1
- package/dist/isbn-issn.spec.js +0 -595
- package/dist/isbn-issn.spec.js.map +0 -1
- package/dist/item-language.spec.js +0 -306
- package/dist/item-language.spec.js.map +0 -1
- package/dist/melindaCustomMergeFields.json +0 -5120
- package/dist/merge-fields.spec.js +0 -51
- package/dist/merge-fields.spec.js.map +0 -1
- package/dist/mergeField500Lisapainokset.spec.js +0 -51
- package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
- package/dist/mergeRelatorTermFields.spec.js +0 -51
- package/dist/mergeRelatorTermFields.spec.js.map +0 -1
- package/dist/modernize-502.spec.js +0 -49
- package/dist/modernize-502.spec.js.map +0 -1
- package/dist/multiple-subfield-0.spec.js +0 -51
- package/dist/multiple-subfield-0.spec.js.map +0 -1
- package/dist/non-breaking-space.spec.js +0 -42
- package/dist/non-breaking-space.spec.js.map +0 -1
- package/dist/normalize-dashes.spec.js +0 -51
- package/dist/normalize-dashes.spec.js.map +0 -1
- package/dist/normalize-identifiers.spec.js +0 -51
- package/dist/normalize-identifiers.spec.js.map +0 -1
- package/dist/normalize-qualifying-information.spec.js +0 -51
- package/dist/normalize-qualifying-information.spec.js.map +0 -1
- package/dist/normalize-utf8-diacritics.spec.js +0 -51
- package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
- package/dist/punctuation.spec.js +0 -51
- package/dist/punctuation.spec.js.map +0 -1
- package/dist/punctuation2.spec.js +0 -51
- package/dist/punctuation2.spec.js.map +0 -1
- package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
- package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
- package/dist/removeDuplicateDataFields.spec.js +0 -51
- package/dist/removeDuplicateDataFields.spec.js.map +0 -1
- package/dist/removeInferiorDataFields.spec.js +0 -51
- package/dist/removeInferiorDataFields.spec.js.map +0 -1
- package/dist/resolvable-ext-references-melinda.spec.js +0 -166
- package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
- package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
- package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
- package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
- package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
- package/dist/sort-tags.spec.js +0 -207
- package/dist/sort-tags.spec.js.map +0 -1
- package/dist/sortFields.spec.js +0 -51
- package/dist/sortFields.spec.js.map +0 -1
- package/dist/sortRelatorTerms.spec.js +0 -51
- package/dist/sortRelatorTerms.spec.js.map +0 -1
- package/dist/sortSubfields.spec.js +0 -52
- package/dist/sortSubfields.spec.js.map +0 -1
- package/dist/stripPunctuation.spec.js +0 -51
- package/dist/stripPunctuation.spec.js.map +0 -1
- package/dist/subfield-exclusion.spec.js +0 -523
- package/dist/subfield-exclusion.spec.js.map +0 -1
- package/dist/subfieldValueNormalizations.spec.js +0 -51
- package/dist/subfieldValueNormalizations.spec.js.map +0 -1
- package/dist/sync-007-and-300.spec.js +0 -51
- package/dist/sync-007-and-300.spec.js.map +0 -1
- package/dist/translate-terms.spec.js +0 -51
- package/dist/translate-terms.spec.js.map +0 -1
- package/dist/typeOfDate-008.spec.js +0 -47
- package/dist/typeOfDate-008.spec.js.map +0 -1
- package/dist/unicode-decomposition.spec.js +0 -91
- package/dist/unicode-decomposition.spec.js.map +0 -1
- package/dist/update-field-540.spec.js +0 -51
- package/dist/update-field-540.spec.js.map +0 -1
- package/dist/urn.spec.js +0 -52
- package/dist/urn.spec.js.map +0 -1
- package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"file":"ending-punctuation-conf.js","names":["finnishTerms","exports","validPuncMarks","confSpec","rangeStart","rangeEnd","index","punc","special","afterOnly","strict","secondLastIfLast","last","noPuncIfField","ifBoth","puncSubField","ifInd2","ifLastCharNot","noPuncIfInd2","lastOf","mandatory","termField","else","linked"],"sources":["../src/ending-punctuation-conf.js"],"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 = '?\"-!,)]';\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Ä vain osakentän $b jälkeen\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Ä\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Ä\n rangeStart: null,\n rangeEnd: null,\n index: 100,\n punc: true,\n special: null\n }, { // 110 KYLLÄ\n rangeStart: null,\n rangeEnd: null,\n index: 110,\n punc: true,\n special: null\n }, { // 111 KYLLÄ\n rangeStart: null,\n rangeEnd: null,\n index: 111,\n punc: true,\n special: null\n }, { // 130 KYLLÄ\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Ä Jos viimeinen osakenttä on $y, piste on ennen sitä\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Ä\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Ä\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Ä\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Ä\n rangeStart: null,\n rangeEnd: null,\n index: 258,\n punc: true,\n special: null\n }, { // 260 KYLLÄ Pääsääntö: $a : $b, $c. Tarkista eri poikkeukset ja välimerkitys 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Ä 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Ä\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Ä Vain joidenkin osakenttien jälkeen. Tarkista osakentät 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Ä\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Ä\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Ä\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Ä\n rangeStart: 500,\n rangeEnd: 505,\n index: null,\n punc: true,\n special: null\n }, { // 506 KYLLÄ\n index: 506,\n punc: true,\n special: {\n noPuncIfField: 'f'\n }\n }, { // 507-509 KYLLÄ\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Ä\n rangeStart: 511,\n rangeEnd: 518,\n index: null,\n punc: true,\n special: null\n }, { // 520 KYLLÄ Jos viimeinen osakenttä on $u, piste on ennen sitä\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Ä\n rangeStart: 521,\n rangeEnd: 526,\n index: null,\n punc: true,\n special: null\n }, { // 530 KYLLÄ\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Ä\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Ä Jos viimeinen osakenttä on $u, piste on ennen sitä\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Ä\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Ä\n rangeStart: 544,\n rangeEnd: 547,\n index: null,\n punc: true,\n special: null\n }, { // 550 KYLLÄ\n rangeStart: null,\n rangeEnd: null,\n index: 550,\n punc: true,\n special: null\n }, { // 552 KYLLÄ\n rangeStart: null,\n rangeEnd: null,\n index: 552,\n punc: true,\n special: null\n }, { // 555-556 KYLLÄ\n rangeStart: 555,\n rangeEnd: 556,\n index: null,\n punc: true,\n special: null\n }, { // 561-563 KYLLÄ\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Ä osakentän $a jälkeen, EI muiden osakenttien jälkeen\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Ä\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Ä\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Ä\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Ä\n rangeStart: null,\n rangeEnd: null,\n index: 600,\n punc: true,\n special: null\n }, { // 610 KYLLÄ\n rangeStart: null,\n rangeEnd: null,\n index: 610,\n punc: true,\n special: null\n }, { // 611 KYLLÄ\n rangeStart: null,\n rangeEnd: null,\n index: 611,\n punc: true,\n special: null\n }, { // 630 KYLLÄ\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äytännön mukaan, yleensä KYLLÄ\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äytännön mukaan, yleensä KYLLÄ\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Ä\n rangeStart: null,\n rangeEnd: null,\n index: 700,\n punc: true,\n special: null\n }, { // 710 KYLLÄ\n rangeStart: null,\n rangeEnd: null,\n index: 710,\n punc: true,\n special: null\n }, { // 711 KYLLÄ\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Ä\n rangeStart: null,\n rangeEnd: null,\n index: 730,\n punc: true,\n special: null\n }, { // 740 KYLLÄ\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Ä\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Ä\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Ä osakentän $a jälkeen, EI muiden osakenttien jälkeen\n rangeStart: 760,\n rangeEnd: 787,\n index: null,\n punc: true,\n special: {\n afterOnly: 'a',\n strict: false\n }\n }, { // 800 KYLLÄ\n rangeStart: null,\n rangeEnd: null,\n index: 800,\n punc: true,\n special: null\n }, { // 810 KYLLÄ\n rangeStart: null,\n rangeEnd: null,\n index: 810,\n punc: true,\n special: null\n }, { // 811 KYLLÄ\n rangeStart: null,\n rangeEnd: null,\n index: 811,\n punc: true,\n special: null\n }, { // 830 KYLLÄ\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ät\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, confSpec};\n"],"mappings":";;;;;;AAAA;AACA,MAAMA,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG,CACnB,yIAAyI,EACzI,uBAAuB,CACxB;AAED,MAAME,cAAc,GAAAD,OAAA,CAAAC,cAAA,GAAG,SAAS;AAChC;AACA,MAAMC,QAAQ,GAAAF,OAAA,CAAAE,QAAA,GAAG,CACf;EAAE;EACAC,UAAU,EAAE,EAAE;EACdC,QAAQ,EAAE,EAAE;EACZC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,EAAE;EACTC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPC,SAAS,EAAE,GAAG;IACdC,MAAM,EAAE,IAAI,CAAC;EACf;AACF,CAAC,EAAE;EAAE;EACHN,UAAU,EAAE,EAAE;EACdC,QAAQ,EAAE,EAAE;EACZC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,EAAE;EACTC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,EAAE;EACdC,QAAQ,EAAE,EAAE;EACZC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPG,gBAAgB,EAAE,GAAG;IACrBC,IAAI,EAAE;EACR;AACF,CAAC,EAAE;EAAE;EACHR,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPK,aAAa,EAAE;EACjB;AACF,CAAC,EAAE;EAAE;EACHT,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPC,SAAS,EAAE,GAAG;IACdC,MAAM,EAAE,KAAK,CAAC;EAChB;AACF,CAAC,EAAE;EAAE;EACHN,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPM,MAAM,EAAE,IAAI;IACZC,YAAY,EAAE,GAAG;IACjBC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5BC,aAAa,EAAE,MAAM;IACrBC,YAAY,EAAE,CAAC,GAAG;EACpB;AACF,CAAC,EAAE;EAAE;EACHd,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPW,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACtCC,SAAS,EAAE,CAAC,GAAG;EACjB;AACF,CAAC,EAAE;EAAE;EACHhB,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHF,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPK,aAAa,EAAE;EACjB;AACF,CAAC,EAAE;EAAE;EACHT,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPG,gBAAgB,EAAE;IAClB;EACF;AACF,CAAC,EAAE;EAAE;EACHP,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPG,gBAAgB,EAAE;IAClB;EACF;AACF,CAAC,EAAE;EAAE;EACHP,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPK,aAAa,EAAE;EACjB;AACF,CAAC,EAAE;EAAE;EACHT,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPC,SAAS,EAAE,GAAG;IACdC,MAAM,EAAE,IAAI,CAAC;EACf;AACF,CAAC,EAAE;EAAE;EACHN,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;IACPa,SAAS,EAAE,GAAG;IACdrB,YAAY;IACZsB,IAAI,EAAE;EACR;AACF,CAAC,EAAE;EAAE;EACHlB,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;IACPa,SAAS,EAAE,GAAG;IACdrB,YAAY;IACZsB,IAAI,EAAE;EACR;AACF,CAAC,EAAE;EAAE;EACHlB,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPC,SAAS,EAAE,GAAG;IACdC,MAAM,EAAE;EACV;AACF,CAAC,EAAE;EAAE;EACHN,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,GAAG;EACVC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE;IACPe,MAAM,EAAE;EACV;AACF,CAAC,EAAE;EAAE;EACHnB,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,EAAE;EAAE;EACHJ,UAAU,EAAE,GAAG;EACfC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,IAAI;EACXC,IAAI,EAAE,KAAK;EACXC,OAAO,EAAE;AACX,CAAC,CACF","ignoreList":[]}
|
|
1
|
+
{
|
|
2
|
+
"version": 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 = '?\"-!,)]';\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, confSpec};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,207 +1,130 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.default = _default;
|
|
7
|
-
exports.validateSingleField = validateSingleField;
|
|
8
|
-
var _endingPunctuationConf = require("./ending-punctuation-conf");
|
|
9
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
10
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
* @licstart The following is the entire license notice for the JavaScript code in this file.
|
|
14
|
-
*
|
|
15
|
-
* MARC record validators used in Melinda
|
|
16
|
-
*
|
|
17
|
-
* Copyright (c) 2014-2021 University Of Helsinki (The National Library Of Finland)
|
|
18
|
-
*
|
|
19
|
-
* This file is part of marc-record-validators-melinda
|
|
20
|
-
*
|
|
21
|
-
* marc-record-validators-melinda program is free software: you can redistribute it and/or modify
|
|
22
|
-
* it under the terms of the GNU Lesser General Public License as
|
|
23
|
-
* published by the Free Software Foundation, either version 3 of the
|
|
24
|
-
* License, or (at your option) any later version.
|
|
25
|
-
*
|
|
26
|
-
* marc-record-validators-melinda is distributed in the hope that it will be useful,
|
|
27
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
28
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
29
|
-
* GNU Lesser General Public License for more details.
|
|
30
|
-
*
|
|
31
|
-
* You should have received a copy of the GNU Lesser General Public License
|
|
32
|
-
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
33
|
-
*
|
|
34
|
-
* @licend The above is the entire license notice
|
|
35
|
-
* for the JavaScript code in this file.
|
|
36
|
-
*
|
|
37
|
-
*/
|
|
38
|
-
|
|
39
|
-
// Import {validPuncMarks, finnishTerms, confSpec} from './ending-punctuation-conf.js';
|
|
40
|
-
|
|
41
|
-
const debug = (0, _debug.default)('@natlibfi/marc-record-validator-melinda/ending-punctuation');
|
|
42
|
-
function _default() {
|
|
1
|
+
import { validPuncMarks, finnishTerms, confSpec } from "./ending-punctuation-conf.js";
|
|
2
|
+
import createDebugLogger from "debug";
|
|
3
|
+
const debug = createDebugLogger("@natlibfi/marc-record-validator-melinda/ending-punctuation");
|
|
4
|
+
export default function() {
|
|
43
5
|
return {
|
|
44
|
-
description:
|
|
45
|
-
validate: record => validatePunc(record, false),
|
|
6
|
+
description: "Handles invalid ending punctuation",
|
|
7
|
+
validate: (record) => validatePunc(record, false),
|
|
8
|
+
// Record (Object), fix (boolean)
|
|
9
|
+
fix: (record) => validatePunc(record, true)
|
|
46
10
|
// Record (Object), fix (boolean)
|
|
47
|
-
fix: record => validatePunc(record, true) // Record (Object), fix (boolean)
|
|
48
11
|
};
|
|
49
|
-
|
|
50
|
-
// This is used to validate record against configuration
|
|
51
12
|
function validatePunc(record, fix) {
|
|
52
|
-
const message = {
|
|
53
|
-
message: []
|
|
54
|
-
};
|
|
13
|
+
const message = { message: [] };
|
|
55
14
|
if (fix) {
|
|
56
15
|
message.fix = [];
|
|
57
16
|
}
|
|
58
|
-
|
|
59
|
-
// Actual parsing of all fields
|
|
60
17
|
if (!record.fields) {
|
|
61
18
|
return false;
|
|
62
19
|
}
|
|
63
|
-
record.fields.forEach(field => {
|
|
20
|
+
record.fields.forEach((field) => {
|
|
64
21
|
validateField(field, false, fix, message);
|
|
65
22
|
});
|
|
66
23
|
message.valid = !(message.message.length >= 1);
|
|
67
24
|
return message;
|
|
68
25
|
}
|
|
69
26
|
}
|
|
70
|
-
|
|
71
|
-
// Field validation with punctuation rules for normal and special cases in subfunction (to reduce complexity to please travisci)
|
|
72
27
|
function validateField(field, linkedTag, fix, message) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const subfields = field.subfields.filter(sf => isNaN(sf.code) && 'value' in sf);
|
|
28
|
+
function findLastSubfield(field2) {
|
|
29
|
+
const subfields = field2.subfields.filter((sf) => isNaN(sf.code) && "value" in sf);
|
|
76
30
|
return subfields.slice(-1).shift();
|
|
77
31
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
const lastPuncMark = puncMarks.includes(subfield.value.slice(-1)); // If string ends to punctuation char
|
|
83
|
-
const lastPuncDot = '.'.includes(subfield.value.slice(-1)); // If string ends to dot
|
|
84
|
-
|
|
85
|
-
// Last char should be punc, but its not one of marks nor dot
|
|
32
|
+
function normalPuncRules(subfield, punc, tag2, checkEnd, overrideValidPuncMarks) {
|
|
33
|
+
const puncMarks = overrideValidPuncMarks || validPuncMarks;
|
|
34
|
+
const lastPuncMark = puncMarks.includes(subfield.value.slice(-1));
|
|
35
|
+
const lastPuncDot = ".".includes(subfield.value.slice(-1));
|
|
86
36
|
if (punc && !(lastPuncMark || lastPuncDot)) {
|
|
87
|
-
|
|
88
|
-
message.message.push(`Field ${tag} has invalid ending punctuation`);
|
|
37
|
+
message.message.push(`Field ${tag2} has invalid ending punctuation`);
|
|
89
38
|
if (fix) {
|
|
90
|
-
subfield.value = subfield.value.concat(
|
|
91
|
-
message.fix.push(`Field ${
|
|
39
|
+
subfield.value = subfield.value.concat(".");
|
|
40
|
+
message.fix.push(`Field ${tag2} - Added punctuation to $${subfield.code}`);
|
|
92
41
|
}
|
|
93
|
-
|
|
94
|
-
// Last char is dot, but previous char is one of punc marks, like 'Question?.'
|
|
95
42
|
} else if (lastPuncDot && subfield.value.length > 1 && puncMarks.includes(subfield.value.charAt(subfield.value.length - 2))) {
|
|
96
|
-
|
|
97
|
-
message.message.push(`Field ${tag} has invalid ending punctuation`);
|
|
43
|
+
message.message.push(`Field ${tag2} has invalid ending punctuation`);
|
|
98
44
|
if (fix) {
|
|
99
45
|
subfield.value = subfield.value.slice(0, -1);
|
|
100
|
-
message.fix.push(`Field ${
|
|
46
|
+
message.fix.push(`Field ${tag2} - Removed double punctuation from $${subfield.code}`);
|
|
101
47
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
} else if (checkEnd && !punc && lastPuncDot) {
|
|
105
|
-
// Console.log("3. Invalid punctuation - Shouldn't be dot, is")
|
|
106
|
-
message.message.push(`Field ${tag} has invalid ending punctuation`);
|
|
48
|
+
} else if (checkEnd && (!punc && lastPuncDot)) {
|
|
49
|
+
message.message.push(`Field ${tag2} has invalid ending punctuation`);
|
|
107
50
|
if (fix) {
|
|
108
51
|
subfield.value = subfield.value.slice(0, -1);
|
|
109
|
-
message.fix.push(`Field ${
|
|
52
|
+
message.fix.push(`Field ${tag2} - Removed punctuation from $${subfield.code}`);
|
|
110
53
|
}
|
|
111
54
|
}
|
|
112
55
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (lastSubField) {
|
|
121
|
-
if (typeof res.special.strict === 'undefined') {
|
|
122
|
-
res.special.strict = true;
|
|
56
|
+
function specialCases(res2, field2, tag2) {
|
|
57
|
+
let lastSubField2 = null;
|
|
58
|
+
if (res2.special.afterOnly) {
|
|
59
|
+
lastSubField2 = findLastSubfield(field2);
|
|
60
|
+
if (lastSubField2) {
|
|
61
|
+
if (typeof res2.special.strict === "undefined") {
|
|
62
|
+
res2.special.strict = true;
|
|
123
63
|
}
|
|
124
|
-
if (
|
|
125
|
-
normalPuncRules(
|
|
64
|
+
if (lastSubField2.code === res2.special.afterOnly) {
|
|
65
|
+
normalPuncRules(lastSubField2, res2.punc, tag2, res2.special.strict, false);
|
|
126
66
|
} else {
|
|
127
|
-
normalPuncRules(
|
|
67
|
+
normalPuncRules(lastSubField2, !res2.punc, tag2, true, false);
|
|
128
68
|
}
|
|
129
69
|
}
|
|
130
|
-
} else if (
|
|
131
|
-
if (
|
|
132
|
-
|
|
133
|
-
normalPuncRules(
|
|
70
|
+
} else if (res2.special.noPuncIfField) {
|
|
71
|
+
if (field2.subfields.some((subField) => subField.code === res2.special.noPuncIfField) === false) {
|
|
72
|
+
lastSubField2 = findLastSubfield(field2);
|
|
73
|
+
normalPuncRules(lastSubField2, res2.punc, tag2, true, false);
|
|
134
74
|
}
|
|
135
|
-
} else if (
|
|
136
|
-
|
|
137
|
-
if (
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
// Matches execption to special rule, noPuncIfInd2 (likely with value 4, that indicates copyright mark)
|
|
143
|
-
} else if (res.special.noPuncIfInd2 && field.ind2 && res.special.noPuncIfInd2.includes(field.ind2)) {
|
|
144
|
-
normalPuncRules(lastSubField, !res.special.ifBoth, tag, true, res.special.ifLastCharNot);
|
|
145
|
-
|
|
146
|
-
// Does not match rules -> shouldn't have punc
|
|
75
|
+
} else if (res2.special.ifBoth) {
|
|
76
|
+
lastSubField2 = findLastSubfield(field2);
|
|
77
|
+
if (lastSubField2 && lastSubField2.code === res2.special.puncSubField) {
|
|
78
|
+
if (res2.special.ifInd2 && res2.special.ifInd2.includes(field2.ind2)) {
|
|
79
|
+
normalPuncRules(lastSubField2, res2.special.ifBoth, tag2, true, res2.special.ifLastCharNot);
|
|
80
|
+
} else if (res2.special.noPuncIfInd2 && field2.ind2 && res2.special.noPuncIfInd2.includes(field2.ind2)) {
|
|
81
|
+
normalPuncRules(lastSubField2, !res2.special.ifBoth, tag2, true, res2.special.ifLastCharNot);
|
|
147
82
|
} else {
|
|
148
|
-
normalPuncRules(
|
|
83
|
+
normalPuncRules(lastSubField2, !res2.special.ifBoth, tag2, true, res2.special.ifLastCharNot);
|
|
149
84
|
}
|
|
150
85
|
}
|
|
151
|
-
} else if (
|
|
152
|
-
|
|
153
|
-
if (isNaN(subField.code) &&
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
} // Strict because this field should not be abbreviation
|
|
86
|
+
} else if (res2.special.secondLastIfLast) {
|
|
87
|
+
field2.subfields.forEach((subField) => {
|
|
88
|
+
if (isNaN(subField.code) && res2.special.secondLastIfLast !== subField.code) {
|
|
89
|
+
lastSubField2 = subField;
|
|
90
|
+
}
|
|
91
|
+
if (typeof res2.special.last !== "undefined" && res2.special.secondLastIfLast === subField.code) {
|
|
92
|
+
normalPuncRules(subField, res2.special.last, tag2, true, false);
|
|
93
|
+
}
|
|
160
94
|
});
|
|
161
|
-
normalPuncRules(
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
code
|
|
169
|
-
}) => code === res.special.termField);
|
|
170
|
-
if (languageField && languageField.value && _endingPunctuationConf.finnishTerms.some(p => p.test(languageField.value))) {
|
|
171
|
-
// If (languageField && languageField.value && finnishTerms.indexOf(languageField.value) > -1) {
|
|
172
|
-
normalPuncRules(lastSubField, res.punc, tag, true, false);
|
|
95
|
+
normalPuncRules(lastSubField2, res2.punc, tag2, false, false);
|
|
96
|
+
} else if (res2.special.termField) {
|
|
97
|
+
lastSubField2 = findLastSubfield(field2);
|
|
98
|
+
if (lastSubField2) {
|
|
99
|
+
const languageField = field2.subfields.find(({ code }) => code === res2.special.termField);
|
|
100
|
+
if (languageField && languageField.value && finnishTerms.some((p) => p.test(languageField.value))) {
|
|
101
|
+
normalPuncRules(lastSubField2, res2.punc, tag2, true, false);
|
|
173
102
|
} else {
|
|
174
|
-
normalPuncRules(
|
|
103
|
+
normalPuncRules(lastSubField2, res2.special.else, tag2, false, false);
|
|
175
104
|
}
|
|
176
105
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
normalPuncRules(subField, res.punc, tag, true, false);
|
|
187
|
-
} // Strict because of mandatory
|
|
106
|
+
} else if (res2.special.lastOf) {
|
|
107
|
+
lastSubField2 = null;
|
|
108
|
+
field2.subfields.filter((subField) => "value" in subField).forEach((subField) => {
|
|
109
|
+
if (isNaN(subField.code) && res2.special.lastOf.indexOf(subField.code) > -1) {
|
|
110
|
+
lastSubField2 = subField;
|
|
111
|
+
}
|
|
112
|
+
if (res2.special.mandatory && res2.special.mandatory.indexOf(subField.code) > -1) {
|
|
113
|
+
normalPuncRules(subField, res2.punc, tag2, true, false);
|
|
114
|
+
}
|
|
188
115
|
});
|
|
189
|
-
if (
|
|
190
|
-
normalPuncRules(
|
|
116
|
+
if (lastSubField2) {
|
|
117
|
+
normalPuncRules(lastSubField2, res2.punc, tag2, false, false);
|
|
191
118
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
} else if (res.special.linked) {
|
|
195
|
-
let linkedTag = null;
|
|
119
|
+
} else if (res2.special.linked) {
|
|
120
|
+
let linkedTag2 = null;
|
|
196
121
|
try {
|
|
197
|
-
|
|
198
|
-
code
|
|
199
|
-
}) => code === res.special.linked).value.substr(0, 3), 10); // Substring feels stupid, but is used in MarcRecord to extract tag.
|
|
122
|
+
linkedTag2 = parseInt(field2.subfields.find(({ code }) => code === res2.special.linked).value.substr(0, 3), 10);
|
|
200
123
|
} catch (err) {
|
|
201
124
|
debug(`Got error while parsing tag: ${err instanceof Error ? err.stack : err}`);
|
|
202
125
|
return false;
|
|
203
126
|
}
|
|
204
|
-
validateField(
|
|
127
|
+
validateField(field2, linkedTag2, fix, message);
|
|
205
128
|
}
|
|
206
129
|
}
|
|
207
130
|
let res = null;
|
|
@@ -217,24 +140,18 @@ function validateField(field, linkedTag, fix, message) {
|
|
|
217
140
|
return false;
|
|
218
141
|
}
|
|
219
142
|
}
|
|
220
|
-
|
|
221
|
-
// Find configuration object matching tag:
|
|
222
|
-
res = Object.values(_endingPunctuationConf.confSpec).find(o => {
|
|
143
|
+
res = Object.values(confSpec).find((o) => {
|
|
223
144
|
const rangeFine = o.rangeStart <= tag && o.rangeEnd >= tag;
|
|
224
145
|
return o.index === tag || rangeFine;
|
|
225
146
|
});
|
|
226
147
|
if (!res) {
|
|
227
148
|
return;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// Field does not have subfields; invalid
|
|
231
|
-
if (typeof field.subfields === 'undefined' || field.subfields === null) {
|
|
149
|
+
}
|
|
150
|
+
if (typeof field.subfields === "undefined" || field.subfields === null) {
|
|
232
151
|
message.message.push(`Field ${field.tag} has invalid ending punctuation`);
|
|
233
152
|
return;
|
|
234
153
|
}
|
|
235
|
-
|
|
236
|
-
// Normal rules
|
|
237
|
-
if (typeof res.special === 'undefined' || res.special === null) {
|
|
154
|
+
if (typeof res.special === "undefined" || res.special === null) {
|
|
238
155
|
lastSubField = findLastSubfield(field);
|
|
239
156
|
if (lastSubField) {
|
|
240
157
|
normalPuncRules(lastSubField, res.punc, field.tag, false, false, fix, message);
|
|
@@ -243,11 +160,11 @@ function validateField(field, linkedTag, fix, message) {
|
|
|
243
160
|
try {
|
|
244
161
|
specialCases(res, field, field.tag);
|
|
245
162
|
} catch (e) {
|
|
246
|
-
console.error(
|
|
163
|
+
console.error("Catched error from special case: ", e);
|
|
247
164
|
}
|
|
248
165
|
}
|
|
249
166
|
}
|
|
250
|
-
function validateSingleField(field, linkedTag, fix) {
|
|
167
|
+
export function validateSingleField(field, linkedTag, fix) {
|
|
251
168
|
const message = {};
|
|
252
169
|
message.message = [];
|
|
253
170
|
if (fix) {
|
|
@@ -257,4 +174,4 @@ function validateSingleField(field, linkedTag, fix) {
|
|
|
257
174
|
message.valid = !(message.message.length >= 1);
|
|
258
175
|
return message;
|
|
259
176
|
}
|
|
260
|
-
//# sourceMappingURL=ending-punctuation.js.map
|
|
177
|
+
//# sourceMappingURL=ending-punctuation.js.map
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"file":"ending-punctuation.js","names":["_endingPunctuationConf","require","_debug","_interopRequireDefault","e","__esModule","default","debug","createDebugLogger","_default","description","validate","record","validatePunc","fix","message","fields","forEach","field","validateField","valid","length","linkedTag","findLastSubfield","subfields","filter","sf","isNaN","code","slice","shift","normalPuncRules","subfield","punc","tag","checkEnd","overrideValidPuncMarks","puncMarks","validPuncMarks","lastPuncMark","includes","value","lastPuncDot","push","concat","charAt","specialCases","res","lastSubField","special","afterOnly","strict","noPuncIfField","some","subField","ifBoth","puncSubField","ifInd2","ind2","ifLastCharNot","noPuncIfInd2","secondLastIfLast","last","termField","languageField","find","finnishTerms","p","test","else","lastOf","indexOf","mandatory","linked","parseInt","substr","err","Error","stack","Object","values","confSpec","o","rangeFine","rangeStart","rangeEnd","index","console","error","validateSingleField"],"sources":["../src/ending-punctuation.js"],"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, finnishTerms, confSpec} from './ending-punctuation-conf';\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 // Punctuation rule (Boolean), Check no ending dot strict (Boolean)\n function normalPuncRules(subfield, punc, tag, checkEnd, overrideValidPuncMarks) {\n const puncMarks = overrideValidPuncMarks || validPuncMarks;\n const lastPuncMark = puncMarks.includes(subfield.value.slice(-1)); // If string ends to punctuation char\n const lastPuncDot = '.'.includes(subfield.value.slice(-1)); // If string ends to dot\n\n // Last char should be punc, but its not one of marks nor dot\n if (punc && !(lastPuncMark || lastPuncDot)) {\n // Console.log(\"1. Invalid punctuation - missing\")\n message.message.push(`Field ${tag} has invalid ending punctuation`);\n if (fix) {\n subfield.value = subfield.value.concat('.');\n message.fix.push(`Field ${tag} - Added punctuation to $${subfield.code}`);\n }\n\n // Last char is dot, but previous char is one of punc marks, like 'Question?.'\n } else if (lastPuncDot && subfield.value.length > 1 && puncMarks.includes(subfield.value.charAt(subfield.value.length - 2))) {\n // Console.log(\"2. Invalid punctuation - duplicate, like '?.'\")\n message.message.push(`Field ${tag} has invalid ending punctuation`);\n if (fix) {\n subfield.value = subfield.value.slice(0, -1);\n message.fix.push(`Field ${tag} - Removed double punctuation from $${subfield.code}`);\n }\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 invalid ending punctuation`);\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 execption 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 }\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"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{
|
|
2
|
+
"version": 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, 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 // Punctuation rule (Boolean), Check no ending dot strict (Boolean)\n function normalPuncRules(subfield, punc, tag, checkEnd, overrideValidPuncMarks) {\n const puncMarks = overrideValidPuncMarks || validPuncMarks;\n const lastPuncMark = puncMarks.includes(subfield.value.slice(-1)); // If string ends to punctuation char\n const lastPuncDot = '.'.includes(subfield.value.slice(-1)); // If string ends to dot\n\n // Last char should be punc, but its not one of marks nor dot\n if (punc && !(lastPuncMark || lastPuncDot)) {\n // Console.log(\"1. Invalid punctuation - missing\")\n message.message.push(`Field ${tag} has invalid ending punctuation`);\n if (fix) {\n subfield.value = subfield.value.concat('.');\n message.fix.push(`Field ${tag} - Added punctuation to $${subfield.code}`);\n }\n\n // Last char is dot, but previous char is one of punc marks, like 'Question?.'\n } else if (lastPuncDot && subfield.value.length > 1 && puncMarks.includes(subfield.value.charAt(subfield.value.length - 2))) {\n // Console.log(\"2. Invalid punctuation - duplicate, like '?.'\")\n message.message.push(`Field ${tag} has invalid ending punctuation`);\n if (fix) {\n subfield.value = subfield.value.slice(0, -1);\n message.fix.push(`Field ${tag} - Removed double punctuation from $${subfield.code}`);\n }\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 invalid ending punctuation`);\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 execption 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 }\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": "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",
|
|
6
|
+
"names": ["field", "tag", "res", "lastSubField", "linkedTag"]
|
|
7
|
+
}
|