Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

bibtex-parse

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bibtex-parse

bibtex parser for javascript

latest
Source
npmnpm
Version
2.1.0
Version published
Maintainers
1
Created
Source

bibtex-parse

Parse BibTeX to JSON.

npm install bibtex-parse

Example

const bibtexParse = require('bibtex-parse');
const fs = require('fs');
const bibtex = fs.readFileSync('example.bib', 'utf8');
bibtexParse.entries(bibtex);

example.bib:

@preamble{"Reference list"}
@string{ian = "Brown, Ian"}
@string{jane = "Woods, Jane"}
%references
@inproceedings{Smith2009,
  author=jane,
  year=2009,
  month=dec,
  title={{Quantum somethings}},
  journal={Journal of {B}lah}
}

@book{IP:1990,
author = ian # " and " # jane,
year = {1990},
title = {Methods for Research}
}

output:

[
  {
    "key": "Smith2009",
    "type": "inproceedings",
    "AUTHOR": "Woods, Jane",
    "YEAR": 2009,
    "MONTH": "December",
    "TITLE": "Quantum somethings",
    "JOURNAL": "Journal of Blah"
  },
  {
    "key": "IP:1990",
    "type": "book",
    "AUTHOR": "Brown, Ian and Woods, Jane",
    "YEAR": "1990",
    "TITLE": "Methods for Research"
  }
]

Note: fields are always output in capitals to distinguish from build in attributes (key and type).

Abstract Syntax Tree

To get the AST, use:

bibtexParse.parse(bibtex, options);

Where bibtex is a string representing bibtex to be parsed, and options an object with any of the following:

  • number: tells the parser how numbers should be returned.
    • number: "auto" (default): return a JavaScript number, unless over MAX_SAFE_INTEGER (9007199254740991), in which case a BigInt is returned.
    • number: "number": always return a JavaScript number, even if over MAX_SAFE_INTEGER (in which case the precision will be lost).
    • number: "bigint": always return a BigInt.
    • number: "string": return number as a string.

This will return an array of items. There are four types of item:

  • string: { itemtype: 'string', name, value, datatype, enclosed }
  • preamble: { itemtype: 'preamble', value, datatype, enclosed }
  • comment: { itemtype: 'comment', comment }
  • entry: { itemtype: 'entry', type, key, enclosed, fields },
    • type: e.g. article, inproceedings, book
    • key: the unique identifier for the entry
    • fields: e.g. title, year [{ name: 'year', value: 2001, datatype: 'number' }, ...]

Datatype can be one of the following:

  • number: an integer number
  • identifier: a string variable name
  • braced: a value which was enclosed in curly braces
  • quoted: a value which was enclosed in double quotes
  • concatinate: in which case the corresponding value property will be an array [{ datatype, value }, ...]
  • null: used when no value has been assigned, e.g. @string{a}
  • unenclosed: used when a preamble has not been properly enclosed (e.g @preamble{this isn't enclosed}).

Enclosed can be one of the following:

  • braces - when item is enclosed in curly braces (e.g. @string{a = 1})
  • parentheses - when item is enclosed in brackets (e.g. @string(a = 1))
[
  {
    "itemtype": "preamble",
    "enclosed": "braces",
    "value": "Reference list",
    "datatype": "quoted"
  },
  { "itemtype": "comment", "comment": "\n" },
  {
    "itemtype": "string",
    "name": "ian",
    "value": "Brown, Ian",
    "datatype": "quoted"
  },
  { "itemtype": "comment", "comment": "\n" },
  {
    "itemtype": "string",
    "name": "jane",
    "value": "Woods, Jane",
    "datatype": "quoted"
  },
  { "itemtype": "comment", "comment": "\n%references\n" },
  {
    "itemtype": "entry",
    "type": "inproceedings",
    "enclosed": "braces",
    "key": "Smith2009",
    "fields": [
      { "name": "author", "value": "jane", "datatype": "identifier" },
      { "name": "year", "value": 2009, "datatype": "number" },
      { "name": "month", "value": "dec", "datatype": "identifier" },
      {
        "name": "title",
        "value": "{Quantum somethings}",
        "datatype": "braced"
      },
      { "name": "journal", "value": "Journal of {B}lah", "datatype": "braced" }
    ]
  },
  { "itemtype": "comment", "comment": "\n\n" },
  {
    "itemtype": "entry",
    "type": "inproceedings",
    "enclosed": "braces",
    "key": "Smith2009",
    "fields": [
      { "name": "author", "value": "jane", "datatype": "identifier" },
      { "name": "year", "value": 2009, "datatype": "number" },
      { "name": "month", "value": "dec", "datatype": "identifier" },
      {
        "name": "title",
        "value": "{Quantum somethings}",
        "datatype": "braced"
      },
      { "name": "journal", "value": "Journal of {B}lah", "datatype": "braced" }
    ]
  }
]

Resources

FAQs

Package last updated on 08 Mar 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts