From d4360259d60722eaa175a483f792fce7b8c66d97 Mon Sep 17 00:00:00 2001 From: Ludovic Court`es Date: Wed, 11 Oct 2006 07:43:47 +0000 Subject: slide: Propagate the `outline?' parameter in `slide-(sub)?topic'. * src/guile/skribilo/package/slide.scm (slide-topic): Propagate the `outline?' parameter as an option. (slide-subtopic): Likewise. git-archimport-id: skribilo@sv.gnu.org--2006/skribilo--devo--1.2--patch-1 --- doc/user/bib.skb | 63 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 24 deletions(-) (limited to 'doc/user/bib.skb') diff --git a/doc/user/bib.skb b/doc/user/bib.skb index a006a9b..5b26417 100644 --- a/doc/user/bib.skb +++ b/doc/user/bib.skb @@ -1,15 +1,24 @@ -;*=====================================================================*/ -;* serrano/prgm/project/skribe/doc/user/bib.skb */ -;* ------------------------------------------------------------- */ -;* Author : Manuel Serrano */ -;* Creation : Sun Dec 2 10:02:56 2001 */ -;* Last change : Tue Oct 26 21:41:19 2004 (eg) */ -;* Copyright : 2001-04 Manuel Serrano */ -;* ------------------------------------------------------------- */ -;* The Skribe index */ -;*=====================================================================*/ - -(bibliography "user/src/bib1.sbib") +;;; bib.skb -- The Skribe index +;;; +;;; Copyright 2001, 2002, 2003, 2004 Manuel Serrano +;;; +;;; +;;; This program is free software; you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 2 of the License, or +;;; (at your option) any later version. +;;; +;;; This program 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 for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with this program; if not, write to the Free Software +;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +;;; USA. + +(bibliography "src/bib1.sbib") ;*---------------------------------------------------------------------*/ ;* Index */ @@ -51,7 +60,8 @@ if its argument is a bibliography table as returned by :see-also '(make-bib-table default-bib-table bibliography the-bibliography) :force-engines *api-engines* :common-args '() - :source "../src/bigloo/bib.bgl") + :source #f ;;"skribilo/biblio.scm" + :def '(define-markup (bib-table? obj) ...)) (p [The function ,(code "default-bib-table") returns a global, pre-existing bibliography-table:]) @@ -60,7 +70,8 @@ bibliography-table:]) :see-also '(bib-table? make-bib-table bibliography the-bibliography) :force-engines *api-engines* :common-args '() - :source "../src/bigloo/bib.bgl") + :source #f + :def '(define-markup (default-bib-table) ...)) (p [The function ,(code "make-bib-table") constructs a new bibliography-table:]) @@ -69,7 +80,8 @@ bibliography-table:]) :see-also '(bib-table? default-bib-table bibliography the-bibliography) :force-engines *api-engines* :common-args '() - :source "../src/bigloo/bib.bgl")) + :source #f + :def '(define-markup (make-bib-table ident) ...))) ;*---------------------------------------------------------------------*/ ;* bibliography ... @label bibliography@ */ @@ -81,7 +93,7 @@ into the Skribe memory. An ,(emph "entry") is either a list representing one entry (such as an article or book reference) or a string which denotes a file name that contains several entries. All the entries loaded in memory are available for the function -,(ref :ident "ref" :node "references"). A bibliography database must be loaded +,(ref :ident "ref" :text "references"). A bibliography database must be loaded ,(emph "before") any reference is introduced. It is advised to place the ,(code "bibliography") Skribe function call before the call to the ,(markup-ref "document") function call.]) @@ -204,7 +216,7 @@ pre-existing functions for sorting entries:]) (doc-markup 'bib-sort/authors '((l [The list of entries.])) :force-engines *api-engines* - :source "../src/common/bib.scm" + :source "skribilo/biblio.scm" :others '(bib-sort/idents bib-sort/dates) :common-args '()) @@ -214,7 +226,8 @@ entries identifier. The last one sorts according to entries date.]) (example-produce (example :legend "Sorting bibliography entries" - (prgm :file "src/common/bib.scm" :definition 'bib-sort/idents))))) + (prgm :file "skribilo/biblio.scm" + :definition 'bib-sort/idents))))) ;*---------------------------------------------------------------------*/ ;* skribebibtex */ @@ -226,9 +239,9 @@ entries identifier. The last one sorts according to entries date.]) In this section we present the Skribebibtex translator that compiles Bibtex source files into a Skribe bibliography.]) -;; Synopsis -(subsection :title "SYNOPSIS" :number #f - (compiler-command *skribebibtex-bin* "options" "input")) +;; Synopsis (FIXME) +;;(subsection :title "SYNOPSIS" :number #f +;; (compiler-command *skribebibtex-bin* "options" "input")) ;; Description (subsection :title "DESCRIPTION" :number #f [ @@ -246,7 +259,9 @@ These suffixes are: ,(description (item :key (it ".bib") [a ,(bold "Bibtex") source file.]))]) -;; Options -(subsection :title "OPTIONS" :number #f -(compiler-options *skribebibtex-bin*)))) +;; Options (FIXME) +;;(subsection :title "OPTIONS" :number #f +;;(compiler-options *skribebibtex-bin*)) + + )) -- cgit v1.2.3 From 80b757fc4bf93f59edde426b9fca4dcca15509c3 Mon Sep 17 00:00:00 2001 From: Ludovic Courtes Date: Sat, 25 Nov 2006 17:42:18 +0000 Subject: Cleaned up `(skribilo biblio)' a bit. * doc/user/bib.skb: Replaced `default-bib-table' with `*bib-table*'. * src/guile/skribilo/biblio.scm: Clean up. (skribe-open-bib-file): Renamed to `open-bib-file'. * src/guile/skribilo/package/base.scm: Use `*bib-table*' instead of `default-bib-table'. * src/guile/skribilo/utils/compat.scm: Autoload `biblio'. (default-bib-table): New. (skribe-open-bib-file): New. git-archimport-id: skribilo@sv.gnu.org--2006/skribilo--devo--1.2--patch-21 --- doc/user/bib.skb | 20 ++++--- src/guile/skribilo/biblio.scm | 103 +++++++++++++----------------------- src/guile/skribilo/package/base.scm | 8 +-- src/guile/skribilo/utils/compat.scm | 13 +++++ 4 files changed, 67 insertions(+), 77 deletions(-) (limited to 'doc/user/bib.skb') diff --git a/doc/user/bib.skb b/doc/user/bib.skb index 5b26417..e7b5b77 100644 --- a/doc/user/bib.skb +++ b/doc/user/bib.skb @@ -52,32 +52,36 @@ tables.]) (p [The predicate ,(code "bib-table?") returns ,(code "#t") if and only if its argument is a bibliography table as returned by -,(markup-ref "make-bib-table") or ,(markup-ref "default-bib-table"). Otherwise +,(markup-ref "make-bib-table") or ,(markup-ref "*bib-table*"). Otherwise ,(code "bib-table?") returns ,(code "#f").]) (doc-markup 'bib-table? '((obj [The value to be tested])) - :see-also '(make-bib-table default-bib-table bibliography the-bibliography) + :see-also '(make-bib-table *bib-table* bibliography the-bibliography) :force-engines *api-engines* :common-args '() :source #f ;;"skribilo/biblio.scm" :def '(define-markup (bib-table? obj) ...)) - (p [The function ,(code "default-bib-table") returns a global, pre-existing + (p [The function ,(code "*bib-table*") returns a global, pre-existing bibliography-table:]) - (doc-markup 'default-bib-table + (doc-markup '*bib-table* '() :see-also '(bib-table? make-bib-table bibliography the-bibliography) :force-engines *api-engines* :common-args '() :source #f - :def '(define-markup (default-bib-table) ...)) + :def '(define-markup (*bib-table*) ...)) + (p [Technically, ,(code "*bib-table*") is actually an ,(ref :text +[SRFI-39] :url "http://srfi.schemers.org/srfi-39/srfi-39.html") +parameter object, so it can be queried and modified like any other +parameter object.]) (p [The function ,(code "make-bib-table") constructs a new bibliography-table:]) (doc-markup 'make-bib-table '((ident [The name of the bibliography table.])) - :see-also '(bib-table? default-bib-table bibliography the-bibliography) + :see-also '(bib-table? *bib-table* bibliography the-bibliography) :force-engines *api-engines* :common-args '() :source #f @@ -109,7 +113,7 @@ the ,(code "bibliography") Skribe function call before the call to the :text "bibliograph path")). Otherwise, it is a list described by the ,(ref :subsection "Bibliography syntax" :text "syntax") below.])) - :see-also '(bib-table? make-bib-table default-bib-table the-bibliography) + :see-also '(bib-table? make-bib-table *bib-table* the-bibliography) :force-engines *api-engines* :common-args '()) @@ -161,7 +165,7 @@ Here is an example of a simple Skribe database.]) filtered in by ,(param :pred). The value ,(code "full") tells Skribe to count all entries, event those filtered out by ,(param :pred).])) - :see-also '(bib-table? make-bib-table default-bib-table bibliography) + :see-also '(bib-table? make-bib-table *bib-table* bibliography) :force-engines *api-engines* :common-args '()) diff --git a/src/guile/skribilo/biblio.scm b/src/guile/skribilo/biblio.scm index 1fb4b78..55f2ea9 100644 --- a/src/guile/skribilo/biblio.scm +++ b/src/guile/skribilo/biblio.scm @@ -1,5 +1,6 @@ ;;; biblio.scm -- Bibliography functions. ;;; +;;; Copyright 2001, 2002, 2003, 2004 Manuel Serrano ;;; Copyright 2003, 2004 Erick Gallesio - I3S-CNRS/ESSI ;;; Copyright 2005, 2006 Ludovic Courtès ;;; @@ -24,9 +25,10 @@ :use-module (skribilo utils strings) :use-module (skribilo utils syntax) ;; `when', `unless' + :use-module (srfi srfi-1) :autoload (srfi srfi-34) (raise) :use-module (srfi srfi-35) - :use-module (srfi srfi-1) + :use-module (srfi srfi-39) :autoload (skribilo condition) (&file-search-error) :autoload (skribilo reader) (%default-reader) @@ -36,9 +38,9 @@ :use-module (ice-9 optargs) :use-module (oop goops) - :export (bib-table? make-bib-table default-bib-table + :export (bib-table? make-bib-table *bib-table* bib-add! bib-duplicate bib-for-each bib-map - skribe-open-bib-file parse-bib + open-bib-file parse-bib bib-load! resolve-bib resolve-the-bib make-bib-entry @@ -52,27 +54,15 @@ ;;; Provides the bibliography data type and basic bibliography handling, ;;; including simple procedures to sort bibliography entries. ;;; -;;; FIXME: This module need cleanup! -;;; ;;; Code: (fluid-set! current-reader %skribilo-module-reader) - -;; FIXME: Should be a fluid? -(define *bib-table* #f) - -;; Forward declarations -(define skribe-open-bib-file #f) -(define parse-bib #f) - -;;; ====================================================================== ;;; -;;; Utilities +;;; Accessors. ;;; -;;; ====================================================================== (define (make-bib-table ident) (make-hash-table)) @@ -80,10 +70,9 @@ (define (bib-table? obj) (hash-table? obj)) -(define (default-bib-table) - (unless *bib-table* - (set! *bib-table* (make-bib-table "default-bib-table"))) - *bib-table*) +;; The current bib table. +(define *bib-table* + (make-parameter (make-bib-table "default-bib-table"))) (define (%bib-error who entry) (let ((msg "bibliography syntax error on entry")) @@ -91,22 +80,34 @@ (skribe-line-error (%epair-file entry) (%epair-line entry) who msg entry) (skribe-error who msg entry)))) -(define* (bib-for-each proc :optional (table (default-bib-table))) +(define (bib-add! table . entries) + (if (not (bib-table? table)) + (skribe-error 'bib-add! "Illegal bibliography table" table) + (for-each (lambda (entry) + (cond + ((and (list? entry) (> (length entry) 2)) + (let* ((kind (car entry)) + (key (format #f "~A" (cadr entry))) + (fields (cddr entry)) + (old (hash-ref table key))) + (if old + (bib-duplicate key #f old) + (hash-set! table key + (make-bib-entry kind key fields #f))))) + (else + (%bib-error 'bib-add! entry)))) + entries))) + +(define* (bib-for-each proc :optional (table (*bib-table*))) (hash-for-each (lambda (ident entry) (proc ident entry)) table)) -(define* (bib-map proc :optional (table (default-bib-table))) +(define* (bib-map proc :optional (table (*bib-table*))) (hash-map->list (lambda (ident entry) (proc ident entry)) table)) - -;;; ====================================================================== -;;; -;;; BIB-DUPLICATE -;;; -;;; ====================================================================== (define (bib-duplicate ident from old) (let ((ofrom (markup-option old 'from))) (skribe-warning 2 @@ -120,11 +121,11 @@ " ignoring redefinition.")))) -;;; ====================================================================== + ;;; -;;; PARSE-BIB +;;; Parsing. ;;; -;;; ====================================================================== + (define (parse-bib table port) (let ((read %default-reader)) ;; FIXME: We should use a fluid (if (not (bib-table? table)) @@ -146,43 +147,15 @@ (else (%bib-error 'bib-parse entry))))))))) - -;;; ====================================================================== -;;; -;;; BIB-ADD! -;;; -;;; ====================================================================== -(define (bib-add! table . entries) - (if (not (bib-table? table)) - (skribe-error 'bib-add! "Illegal bibliography table" table) - (for-each (lambda (entry) - (cond - ((and (list? entry) (> (length entry) 2)) - (let* ((kind (car entry)) - (key (format #f "~A" (cadr entry))) - (fields (cddr entry)) - (old (hash-ref table key))) - (if old - (bib-duplicate key #f old) - (hash-set! table key - (make-bib-entry kind key fields #f))))) - (else - (%bib-error 'bib-add! entry)))) - entries))) - - -;;; ====================================================================== -;;; -;;; SKRIBE-OPEN-BIB-FILE -;;; -;;; ====================================================================== -;; FIXME: Factoriser -(define (skribe-open-bib-file file command) +(define* (open-bib-file file :optional (command #f)) (let ((path (search-path (*bib-path*) file))) (if (string? path) (begin (when (> (*verbose*) 0) - (format (current-error-port) " [loading bibliography: ~S]\n" path)) + (format (current-error-port) + " [loading bibliography: ~S]\n" path)) + ;; FIXME: The following `open-input-file' won't work with actual + ;; commands. We need to use `(ice-9 popen)'. (open-input-file (if (string? command) (string-append "| " (format #f command path)) @@ -209,7 +182,7 @@ (if (not (bib-table? table)) (skribe-error 'bib-load "Illegal bibliography table" table) ;; read the file - (let ((p (skribe-open-bib-file filename command))) + (let ((p (open-bib-file filename command))) (if (not (input-port? p)) (skribe-error 'bib-load "Can't open data base" filename) (unwind-protect diff --git a/src/guile/skribilo/package/base.scm b/src/guile/skribilo/package/base.scm index 4c9e84c..01e8667 100644 --- a/src/guile/skribilo/package/base.scm +++ b/src/guile/skribilo/package/base.scm @@ -33,7 +33,7 @@ :autoload (skribilo engine) (engine?) ;; optional ``sub-packages'' - :autoload (skribilo biblio) (default-bib-table resolve-bib + :autoload (skribilo biblio) (*bib-table* resolve-bib bib-load! bib-add!) :autoload (skribilo color) (skribe-use-color!) :autoload (skribilo source) (language? source-read-lines source-fontify) @@ -1015,7 +1015,7 @@ (subsection #f) (subsubsection #f) (bib #f) - (bib-table (default-bib-table)) + (bib-table (*bib-table*)) (url #f) (figure #f) (mark #f) @@ -1245,7 +1245,7 @@ ;*---------------------------------------------------------------------*/ (define-markup (bibliography #!rest files #!key - (command #f) (bib-table (default-bib-table))) + (command #f) (bib-table (*bib-table*))) (for-each (lambda (f) (cond ((string? f) @@ -1267,7 +1267,7 @@ (define-markup (the-bibliography #!rest opts #!key pred - (bib-table (default-bib-table)) + (bib-table (*bib-table*)) (sort bib-sort/authors) (count 'partial)) (if (not (memq count '(partial full))) diff --git a/src/guile/skribilo/utils/compat.scm b/src/guile/skribilo/utils/compat.scm index 118f294..4905cef 100644 --- a/src/guile/skribilo/utils/compat.scm +++ b/src/guile/skribilo/utils/compat.scm @@ -35,6 +35,7 @@ :autoload (skribilo lib) (type-name) :autoload (skribilo resolve) (*document-being-resolved*) :autoload (skribilo output) (*document-being-output*) + :autoload (skribilo biblio) (*bib-table* open-bib-file) :use-module (skribilo debug) :re-export (file-size) ;; re-exported from `(skribilo utils files)' @@ -207,6 +208,18 @@ (or (find-markups ident) '())) + +;;; +;;; Bibliography. +;;; + +(define-public (default-bib-table) + (*bib-table*)) + +(define-public (skribe-open-bib-file file command) + (open-bib-file file command)) + + ;;; ;;; Debugging facilities. -- cgit v1.2.3