diff options
author | Ludovic Courtes | 2005-12-04 21:20:44 +0000 |
---|---|---|
committer | Ludovic Courtes | 2005-12-04 21:20:44 +0000 |
commit | 42e397a7d41c5e71e783e0033b5171b933595588 (patch) | |
tree | ab3b278564578d0ffa0b691481dfa3fd27a1af0d /src/guile | |
parent | 13460dbc76c37ef1257cff2e8e6f59f451148b82 (diff) | |
download | skribilo-42e397a7d41c5e71e783e0033b5171b933595588.tar.gz skribilo-42e397a7d41c5e71e783e0033b5171b933595588.tar.lz skribilo-42e397a7d41c5e71e783e0033b5171b933595588.zip |
Added the `~' markup. Added SRFI-62 and SRFI-30 support to the Skribe reader.
* NEWS: Added actual news.
* src/guile/skribilo/skribe/api.scm (~): New markup.
* src/guile/skribilo/engine/html.scm: Added a writer for `~'.
* src/guile/skribilo/engine/latex.scm: Likewise.
* src/guile/skribilo/engine/lout.scm: Likewise.
* src/guile/skribilo/evaluator.scm (skribe-include): Added a `:reader'
argument.
* src/guile/skribilo/reader/skribe.scm (*skribe-reader*): Renamed to
`%skribe-reader'.
(%make-skribe-reader): Moved the sharp reader code to...
(&sharp-reader): ... here. Added support for SRFI-62 and SRFI-30
(Bigloo supports both).
git-archimport-id: lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2--patch-16
Diffstat (limited to 'src/guile')
-rw-r--r-- | src/guile/skribilo/engine/html.scm | 8 | ||||
-rw-r--r-- | src/guile/skribilo/engine/latex.scm | 6 | ||||
-rw-r--r-- | src/guile/skribilo/engine/lout.scm | 4 | ||||
-rw-r--r-- | src/guile/skribilo/evaluator.scm | 8 | ||||
-rw-r--r-- | src/guile/skribilo/reader/skribe.scm | 56 | ||||
-rw-r--r-- | src/guile/skribilo/skribe/api.scm | 16 |
6 files changed, 62 insertions, 36 deletions
diff --git a/src/guile/skribilo/engine/html.scm b/src/guile/skribilo/engine/html.scm index 01708c8..b5c7a55 100644 --- a/src/guile/skribilo/engine/html.scm +++ b/src/guile/skribilo/engine/html.scm @@ -1411,6 +1411,14 @@ :after "</p>") ;*---------------------------------------------------------------------*/ +;* ~ ... */ +;*---------------------------------------------------------------------*/ +(markup-writer '~ + :before " " + :after #f + :action #f) + +;*---------------------------------------------------------------------*/ ;* footnote ... */ ;*---------------------------------------------------------------------*/ (markup-writer 'footnote diff --git a/src/guile/skribilo/engine/latex.scm b/src/guile/skribilo/engine/latex.scm index 2a59b4f..90e32cf 100644 --- a/src/guile/skribilo/engine/latex.scm +++ b/src/guile/skribilo/engine/latex.scm @@ -478,9 +478,9 @@ colors)) ;*---------------------------------------------------------------------*/ -;* &~ ... */ +;* ~ ... */ ;*---------------------------------------------------------------------*/ -(markup-writer '&~ +(markup-writer '~ :before "~" :action #f) @@ -1468,7 +1468,7 @@ (if t (begin (output t e) - (output "~" e (markup-writer-get '&~ e)))))) + (output "~" e (markup-writer-get '~ e)))))) :after (lambda (n e) (let* ((c (handle-ast (markup-body n))) (id (markup-ident c))) diff --git a/src/guile/skribilo/engine/lout.scm b/src/guile/skribilo/engine/lout.scm index 6d3dbfa..1ae5cd0 100644 --- a/src/guile/skribilo/engine/lout.scm +++ b/src/guile/skribilo/engine/lout.scm @@ -941,9 +941,9 @@ (list r g b))))))) ;*---------------------------------------------------------------------*/ -;* &~ ... */ +;* ~ ... */ ;*---------------------------------------------------------------------*/ -(markup-writer '&~ :before "~" :action #f) +(markup-writer '~ :before "~" :action #f) (define (lout-page-orientation orientation) ;; Return a string representing the Lout page orientation name for symbol diff --git a/src/guile/skribilo/evaluator.scm b/src/guile/skribilo/evaluator.scm index e4ef208..5af52aa 100644 --- a/src/guile/skribilo/evaluator.scm +++ b/src/guile/skribilo/evaluator.scm @@ -158,7 +158,9 @@ ;;; ;;; SKRIBE-INCLUDE ;;; -(define* (skribe-include file :optional (path (*document-path*))) +(define* (skribe-include file :key (path (*document-path*)) + (reader %default-reader)) + ;; FIXME: We should default to `*skribilo-current-reader*'. (unless (every string? path) (skribe-error 'skribe-include "illegal path" path)) @@ -172,11 +174,11 @@ (with-input-from-file path (lambda () - (let Loop ((exp (%default-reader (current-input-port))) + (let Loop ((exp (reader (current-input-port))) (res '())) (if (eof-object? exp) (if (and (pair? res) (null? (cdr res))) (car res) (reverse! res)) - (Loop (%default-reader (current-input-port)) + (Loop (reader (current-input-port)) (cons (%evaluate exp) res)))))))) diff --git a/src/guile/skribilo/reader/skribe.scm b/src/guile/skribilo/reader/skribe.scm index 5c71cc1..410ef01 100644 --- a/src/guile/skribilo/reader/skribe.scm +++ b/src/guile/skribilo/reader/skribe.scm @@ -44,37 +44,39 @@ the Skribe syntax." (if (string> version "1.2d") (error "make-skribe-reader: unsupported version" version) - *skribe-reader*)) + %skribe-reader)) - -(define (%make-skribe-reader) +(define &sharp-reader + ;; The reader for what comes after a `#' character. (let* ((dsssl-keyword-reader ;; keywords à la `#!key' (r:make-token-reader #\! - (r:token-reader-procedure - (r:standard-token-reader 'keyword)))) - (sharp-reader (r:make-reader (cons dsssl-keyword-reader - (map r:standard-token-reader - '(character srfi-4 - vector - number+radix - boolean))) - #f ;; use default fault handler - 'reader/record-positions)) - (colon-keywords ;; keywords à la `:key' fashion - (r:make-token-reader #\: (r:token-reader-procedure - (r:standard-token-reader 'keyword)))) - (square-bracket-free-symbol-misc-chars - (let* ((tr (r:standard-token-reader 'guile-symbol-misc-chars)) - (tr-spec (r:token-reader-specification tr)) - (tr-proc (r:token-reader-procedure tr))) - (r:make-token-reader (filter (lambda (chr) - (not (or (eq? chr #\[) - (eq? chr #\])))) - tr-spec) - tr-proc)))) + (r:standard-token-reader 'keyword))))) + (r:make-reader (cons dsssl-keyword-reader + (map r:standard-token-reader + '(character srfi-4 vector + number+radix boolean + srfi30-block-comment + srfi62-sexp-comment))) + #f ;; use default fault handler + 'reader/record-positions))) + +(define (%make-skribe-reader) + (let ((colon-keywords ;; keywords à la `:key' fashion + (r:make-token-reader #\: + (r:token-reader-procedure + (r:standard-token-reader 'keyword)))) + (square-bracket-free-symbol-misc-chars + (let* ((tr (r:standard-token-reader 'guile-symbol-misc-chars)) + (tr-spec (r:token-reader-specification tr)) + (tr-proc (r:token-reader-procedure tr))) + (r:make-token-reader (filter (lambda (chr) + (not (or (eq? chr #\[) + (eq? chr #\])))) + tr-spec) + tr-proc)))) - (r:make-reader (cons* (r:make-token-reader #\# sharp-reader) + (r:make-reader (cons* (r:make-token-reader #\# &sharp-reader) colon-keywords square-bracket-free-symbol-misc-chars (map r:standard-token-reader @@ -90,7 +92,7 @@ the Skribe syntax." ))) ;; We actually cache an instance here. -(define *skribe-reader* (%make-skribe-reader)) +(define %skribe-reader (%make-skribe-reader)) diff --git a/src/guile/skribilo/skribe/api.scm b/src/guile/skribilo/skribe/api.scm index 34528ac..a300606 100644 --- a/src/guile/skribilo/skribe/api.scm +++ b/src/guile/skribilo/skribe/api.scm @@ -255,6 +255,19 @@ ;*---------------------------------------------------------------------*/ (define-simple-markup paragraph) + +;*---------------------------------------------------------------------*/ +;* ~ (unbreakable space) ... */ +;*---------------------------------------------------------------------*/ +(define-markup (~ #!rest opts #!key (class #f)) + (new markup + (markup '~) + (ident (gensym '~)) + (class class) + (required-options '()) + (options (the-options opts :class)) + (body (the-body opts)))) + ;*---------------------------------------------------------------------*/ ;* footnote ... */ ;*---------------------------------------------------------------------*/ @@ -1062,7 +1075,8 @@ (o (markup-option s 'used))) (markup-option-add! s 'used (if (pair? o) (cons h o) (list h))) n) - (unref #f v 'bib)))) + (unref #f v 'bib)))) ; FIXME: This prevents source location + ; info to be provided in the warning msg (define (bib-ref text) (if (pair? text) (new markup |