import { Location } from '../pegjs/pegjs_types' ; export type Field = { name : string ; value : FieldValue ; location : Location ; } ; export type FieldValue = TextStringValue | NumberValue | AbbreviationValue | ConcatValue ; export type Entry = { entryType : string ; content : Field [ ] ; internalKey ? : string ; location : Location ; } ; export function isEntry ( e ) { return ! isStringEntry ( e ) && ! isPreambleEntry ( e ) ; } export type StringEntry = { entryType : 'string' ; abbreviation : string ; value : TextStringValue | NumberValue ; location : Location ; } ; export function isStringEntry ( e ) { return e . entryType === 'string' ; } export type PreambleEntry = { entryType : 'preamble' ; content : TextStringValue | ConcatValue ; location : Location ; } ; export function isPreambleEntry ( e ) { return e . entryType === 'preamble' ; } export type TextStringValue = { kind : 'text_string' ; content : string ; location : Location ; } ; export function isTextStringValue ( e ) { return e . kind === 'text_string' ; } export type NumberValue = { kind : 'number' ; content : string ; location : Location ; } ; export function isNumberValue ( e ) { return e . kind === 'number' ; } export type AbbreviationValue = { kind : 'abbreviation' ; content : string ; location : Location ; } ; export function isAbbreviationValue ( e ) { return e . kind === 'abbreviation' ; } export type ConcatValue = { kind : 'concat' ; content : ( TextStringValue | NumberValue | AbbreviationValue ) [ ] ; location : Location ; } ; export function isConcatValue ( e ) { return e . kind === 'concat' ; } export type BibtexAst = { content : ( Entry | StringEntry | PreambleEntry ) [ ] ; } ;