@citation-js/plugin-bibtex
Version:
Plugin for BibTeX formats for Citation.js
40 lines (39 loc) • 1.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.textEntry = exports.text = exports.parse = void 0;
const bibTxtRegex = {
splitEntries: /\n\s*(?=\[)/g,
parseEntry: /^\[(.+?)\]\s*(?:\n([\s\S]+))?$/,
splitPairs: /((?=.)\s)*\n\s*/g,
splitPair: /:(.*)/
};
const parseBibTxtEntry = entry => {
const [, label, pairs] = entry.match(bibTxtRegex.parseEntry) || [];
if (!label || !pairs) {
return {};
} else {
const out = {
type: 'book',
label,
properties: {}
};
pairs.trim().split(bibTxtRegex.splitPairs).filter(v => v).forEach(pair => {
let [key, value] = pair.split(bibTxtRegex.splitPair);
if (value) {
key = key.trim();
value = value.trim();
if (key === 'type') {
out.type = value;
} else {
out.properties[key] = value;
}
}
});
return out;
}
};
exports.textEntry = parseBibTxtEntry;
const parseBibTxt = src => src.trim().split(bibTxtRegex.splitEntries).map(parseBibTxtEntry);
exports.text = exports.parse = parseBibTxt;