diff options
Diffstat (limited to 'src/guile/skribilo/engine/base.scm')
-rw-r--r-- | src/guile/skribilo/engine/base.scm | 128 |
1 files changed, 44 insertions, 84 deletions
diff --git a/src/guile/skribilo/engine/base.scm b/src/guile/skribilo/engine/base.scm index 2a7a0d4..9c1fdd2 100644 --- a/src/guile/skribilo/engine/base.scm +++ b/src/guile/skribilo/engine/base.scm @@ -27,7 +27,8 @@ :use-module (skribilo evaluator) :autoload (skribilo package base) (color) :autoload (skribilo utils keywords) (list-split) - + :autoload (skribilo biblio template) (make-bib-entry-template/default + output-bib-entry-template) ;; syntactic sugar :use-module (skribilo reader) :use-module (skribilo utils syntax)) @@ -236,91 +237,31 @@ :after "]") ;*---------------------------------------------------------------------*/ +;* &bib-entry-author ... */ +;*---------------------------------------------------------------------*/ +; (markup-writer '&bib-entry-author +; :action (lambda (n e) +; (let ((names (markup-body n))) +; (skribe-eval +; (sc (abbreviate-first-names names)) e)))) + +;*---------------------------------------------------------------------*/ +;* &bib-entry-url ... */ +;*---------------------------------------------------------------------*/ +(markup-writer '&bib-entry-url + :action (lambda (n e) + (let ((url (markup-body n))) + (evaluate-document + (ref :text (it url) :url url) e)))) + +;*---------------------------------------------------------------------*/ ;* &bib-entry-body ... */ ;*---------------------------------------------------------------------*/ (markup-writer '&bib-entry-body :action (lambda (n e) - (define (output-fields descr) - (let loop ((descr descr) - (pending #f) - (armed #f)) - (cond - ((null? descr) - 'done) - ((pair? (car descr)) - (if (eq? (caar descr) 'or) - (let ((o1 (cadr (car descr)))) - (if (markup-option n o1) - (loop (cons o1 (cdr descr)) - pending - #t) - (let ((o2 (caddr (car descr)))) - (loop (cons o2 (cdr descr)) - pending - armed)))) - (let ((o (markup-option n (cadr (car descr))))) - (if o - (begin - (if (and pending armed) - (output pending e)) - (output (caar descr) e) - (output o e) - (if (pair? (cddr (car descr))) - (output (caddr (car descr)) e)) - (loop (cdr descr) #f #t)) - (loop (cdr descr) pending armed))))) - ((symbol? (car descr)) - (let ((o (markup-option n (car descr)))) - (if o - (begin - (if (and armed pending) - (output pending e)) - (output o e) - (loop (cdr descr) #f #t)) - (loop (cdr descr) pending armed)))) - ((null? (cdr descr)) - (output (car descr) e)) - ((string? (car descr)) - (loop (cdr descr) - (if pending pending (car descr)) - armed)) - (else - (skribe-error 'output-bib-fields - "Illegal description" - (car descr)))))) - (output-fields - (case (markup-option n 'kind) - ((techreport) - `(author " -- " (or title url documenturl) " -- " - number ", " institution ", " - address ", " month ", " year ", " - ("pp. " pages) ".")) - ((article) - `(author " -- " (or title url documenturl) " -- " - journal ", " volume "" ("(" number ")") ", " - address ", " month ", " year ", " - ("pp. " pages) ".")) - ((inproceedings) - `(author " -- " (or title url documenturl) " -- " - booktitle ", " series ", " ("(" number ")") ", " - address ", " month ", " year ", " - ("pp. " pages) ".")) - ((book) - '(author " -- " (or title url documenturl) " -- " - publisher ", " address - ", " month ", " year ", " ("pp. " pages) ".")) - ((phdthesis) - '(author " -- " (or title url documenturl) " -- " type ", " - school ", " address - ", " month ", " year".")) - ((misc) - '(author " -- " (or title url documenturl) " -- " - publisher ", " address - ", " month ", " year".")) - (else - '(author " -- " (or title url documenturl) " -- " - publisher ", " address - ", " month ", " year ", " ("pp. " pages) ".")))))) + (let* ((kind (markup-option n 'kind)) + (template (make-bib-entry-template/default kind))) + (output-bib-entry-template n e template)))) ;*---------------------------------------------------------------------*/ ;* &bib-entry-ident ... */ @@ -337,6 +278,21 @@ (evaluate-document (bold (markup-body n)) e))) ;*---------------------------------------------------------------------*/ +;* &bib-entry-booktitle ... */ +;*---------------------------------------------------------------------*/ +(markup-writer '&bib-entry-booktitle + :action (lambda (n e) + (let ((title (markup-body n))) + (evaluate-document (it title) e)))) + +;*---------------------------------------------------------------------*/ +;* &bib-entry-journal ... */ +;*---------------------------------------------------------------------*/ +(markup-writer '&bib-entry-journal + :action (lambda (n e) + (evaluate-document (it (markup-body n)) e))) + +;*---------------------------------------------------------------------*/ ;* &bib-entry-publisher ... */ ;*---------------------------------------------------------------------*/ (markup-writer '&bib-entry-publisher @@ -477,8 +433,12 @@ ;*---------------------------------------------------------------------*/ (markup-writer '&prog-line :before (lambda (n e) - (let ((n (markup-ident n))) - (if n (evaluate-document (it (list n) ": ") e)))) + (let ((num (markup-option n :number))) + (if (number? num) + (evaluate-document + (it (string-append (string-pad (number->string num) 3) + ": ")) + e)))) :after "\n") ;*---------------------------------------------------------------------*/ |