(module yppdb-bibimport mzscheme
(require (lib "lex.ss" "parser-tools")
(prefix : (lib "lex-sre.ss" "parser-tools"))
(lib "yacc.ss" "parser-tools"))
(define-tokens
tokens
(STRING))
(define-empty-tokens
empty-tokens
(EOF
BIBS BIBE))
(define biblexer
(lexer
[(eof) (token-EOF)]
[(:: (:+ (:or #\newline #\linefeed #\return)))
(biblexer input-port)]
["BIBITEM" (token-BIBS)]
["BIBEND" (token-BIBE)]
[(complement (:: any-string (:or "BIBITEM" "BIBEND" #\newline #\return) any-string))
(token-STRING lexeme)]))
(define (totally-lex lexer input-port)
(let loop ([r (list)])
(let ([c (lexer input-port)])
(if (eq? c 'EOF)
(append r (list 'EOF))
(loop (append r (list c)))))))
(define (parse token-stream)
(let loop ([ts token-stream]
[r (list)])
(let ([c (car ts)])
(if (not (eq? c 'BIBS))
r
(loop (cdr (cdr (cdr (cdr (cdr (cdr ts))))))
(append r
(list (map token-value
(list (list-ref ts 1)
(list-ref ts 2)
(list-ref ts 3)
(list-ref ts 4))))))))))
(require (lib "class.ss")
"yppdb-util.ss"
(prefix sql-oo: (planet "sql-oo.ss" ("jaymccarthy" "sql-oo.plt" 1)))
(prefix sql-oo:paper: "sql-oo-paper.ss"))
(define db:moc% (sql-oo:apply-units sql-oo:sql-oo%
sql-oo:paper:paper@))
(define db:moc (new db:moc% (db-path "/Users/jay/Development/plt/yppdb.db")))
(define (do-it file read?)
(with-input-from-file
file
(lambda ()
(let ([refs (parse (totally-lex biblexer (current-input-port)))])
(for-each
(lambda (title year authors url)
(let ([o (send db:moc object url "object_paper")])
(send* o (title! title) (year! year) (author! authors) (url! url) (categories! (write/string (list 'P2P))) (read! read?))))
(map car refs)
(map cadr refs)
(map caddr refs)
(map cadddr refs))))))
(do-it "/Users/jay/Desktop/P2P-Ref.txt" #t)
(do-it "/Users/jay/Desktop/P2P-RefU.txt" #f))