marc21-punctuation
Version:
Библиотека для обработки формата MARC21 и применения правил пунктуации согласно стандартам Библиотеки Конгресса США
169 lines (168 loc) • 7.05 kB
JavaScript
;
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
];