-
Notifications
You must be signed in to change notification settings - Fork 27
/
readbib.ml
44 lines (41 loc) · 1.96 KB
/
readbib.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(**************************************************************************)
(* bibtex2html - A BibTeX to HTML translator *)
(* Copyright (C) 1997-2014 Jean-Christophe Filliâtre and Claude Marché *)
(* *)
(* This software is free software; you can redistribute it and/or *)
(* modify it under the terms of the GNU General Public *)
(* License version 2, as published by the Free Software Foundation. *)
(* *)
(* This software is distributed in the hope that it will be useful, *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *)
(* *)
(* See the GNU General Public License version 2 for more details *)
(* (enclosed in the file GPL). *)
(**************************************************************************)
(*s [(read_entries_from_file f)] returns the BibTeX entries of the
BibTeX file [f]. *)
open Printf
let read_entries_from_file f =
if not !Options.quiet then begin
if f = "" then
eprintf "Reading from standard input...\n"
else
eprintf "Reading %s..." f;
flush stderr
end;
let chan = if f = "" then stdin else open_in f in
let lb = Lexing.from_channel chan in
try
let el = Bibtex_parser.command_list Bibtex_lexer.token lb in
if f <> "" then close_in chan;
if not !Options.quiet then begin
eprintf "ok (%d entries).\n" (Bibtex.size el); flush stderr
end;
el
with Parsing.Parse_error | Failure _ ->
if f <> "" then close_in chan;
eprintf "Parse error character %d, in or after entry '%s'.\n"
(Lexing.lexeme_start lb) !Bibtex.current_key;
flush stderr;
exit 1