UNPKG

marc21-punctuation

Version:

Библиотека для обработки формата MARC21 и применения правил пунктуации согласно стандартам Библиотеки Конгресса США

169 lines (168 loc) 7.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.standardRules = exports.noteRules = exports.seriesRules = exports.physicalDescriptionRules = exports.publicationRules = exports.additionalResponsibilityRules = exports.responsibilityRules = exports.titleRules = void 0; /** * Вспомогательная функция для создания форматированных подполей * с применением префиксов и суффиксов для пунктуации */ function formatSubfields(field, formatRules) { if (!field.subfields) return []; const formattedSubfields = []; field.subfields.forEach((sf, idx) => { const rule = formatRules[sf.code] || {}; // Проверяем условие, если оно указано if (rule.condition && !rule.condition(sf, idx, field)) { formattedSubfields.push(Object.assign(Object.assign({}, sf), { formattedValue: sf.value })); return; } const prefix = rule.prefix || ''; const suffix = rule.suffix || ''; // Применяем замену, если она указана const value = rule.replace ? rule.replace(sf.value) : sf.value; formattedSubfields.push(Object.assign(Object.assign({}, sf), { formattedValue: `${prefix}${value}${suffix}`, prefix, suffix })); }); return formattedSubfields; } /** * Правила пунктуации для полей заголовка (245) */ exports.titleRules = { tag: '245', apply: (field) => { return formatSubfields(field, { 'a': { suffix: ' :' // Двоеточие с пробелом после основного заголовка, если есть подполе $b }, 'b': { suffix: ' /' // Косая черта с пробелом после сведений, относящихся к заголовку }, 'c': {}, // Сведения об ответственности не имеют суффикса 'n': { prefix: '. ', // Точка с пробелом перед номером части suffix: ', ' // Запятая с пробелом после номера }, 'p': { prefix: ', ' // Запятая с пробелом перед названием части } }); }, description: 'Правила пунктуации для полей заголовка (245)' }; /** * Правила пунктуации для полей ответственности (100, 700) */ exports.responsibilityRules = { tag: '100', apply: (field) => { return formatSubfields(field, { 'a': { suffix: ',' // Запятая после имени }, 'b': { suffix: ', ' // Запятая с пробелом после дополнительной информации }, 'd': { prefix: ', ' // Запятая с пробелом перед датами жизни }, 'q': { prefix: ' ', // Пробел перед полным именем suffix: ', ' // Запятая с пробелом после полного имени }, 'c': { prefix: ', ' // Запятая с пробелом перед титулами } }); }, description: 'Правила пунктуации для полей ответственности (100)' }; /** * Правила пунктуации для дополнительных полей ответственности (700) */ exports.additionalResponsibilityRules = { tag: '700', apply: (field) => exports.responsibilityRules.apply(field), description: 'Правила пунктуации для дополнительных полей ответственности (700)' }; /** * Правила пунктуации для полей издания (260) */ exports.publicationRules = { tag: '260', apply: (field) => { return formatSubfields(field, { 'a': { suffix: ' :' // Двоеточие с пробелом после места издания }, 'b': { suffix: ', ' // Запятая с пробелом после издателя }, 'c': {} // Дата издания не имеет суффикса }); }, description: 'Правила пунктуации для полей издания (260)' }; /** * Правила пунктуации для полей физического описания (300) */ exports.physicalDescriptionRules = { tag: '300', apply: (field) => { return formatSubfields(field, { 'a': { suffix: ' :' // Двоеточие с пробелом после объема }, 'b': { suffix: ' ;' // Точка с запятой и пробелом после иллюстраций }, 'c': {}, // Размеры не имеют суффикса 'e': { prefix: ' + ' // Знак плюс с пробелами для сопроводительного материала } }); }, description: 'Правила пунктуации для полей физического описания (300)' }; /** * Правила пунктуации для серии (490) */ exports.seriesRules = { tag: '490', apply: (field) => { return formatSubfields(field, { 'a': { prefix: '(', // Открывающая скобка перед названием серии suffix: ' ;' // Точка с запятой и пробел после названия серии }, 'v': { suffix: ')' // Закрывающая скобка после номера серии } }); }, description: 'Правила пунктуации для серии (490)' }; /** * Правила пунктуации для примечаний (5XX) */ exports.noteRules = { tag: '500', apply: (field) => { return formatSubfields(field, { 'a': {} // Примечания не имеют специальной пунктуации }); }, description: 'Правила пунктуации для примечаний (5XX)' }; /** * Все стандартные правила пунктуации MARC21 */ exports.standardRules = [ exports.titleRules, exports.responsibilityRules, exports.additionalResponsibilityRules, exports.publicationRules, exports.physicalDescriptionRules, exports.seriesRules, exports.noteRules ];