(use-modules (figl parse)
(figl config)
+ (ice-9 match)
(sxml fold)
((srfi srfi-1) #:select (append-map))
(texinfo serialize)
(print-disable 'escape-newlines)
+(define (list-intersperse src-l elem)
+ (if (null? src-l) src-l
+ (let loop ((l (cdr src-l)) (dest (cons (car src-l) '())))
+ (if (null? l) (reverse dest)
+ (loop (cdr l) (cons (car l) (cons elem dest)))))))
+
(define (module-name->scm-name mod-name)
- (in-vicinity
- (abs-top-srcdir)
- (string-append (string-join (map symbol->string mod-name) "/")
- ".scm")))
+ (string-join (list (abs-top-srcdir)
+ "figl"
+ (symbol->string mod-name)
+ "low-level.scm")
+ "/"))
(define (module-name->texi-name mod-name)
(in-vicinity
(in-vicinity (abs-top-srcdir) "doc")
- (string-append (string-join (map symbol->string (cdr mod-name)) "-")
- ".texi")))
+ (string-append "low-level-" (symbol->string mod-name) ".texi")))
(define (unique-copyrights defs)
(let lp ((in defs) (out '()))
" port)
(newline port)
(pretty-print
- `(define-module ,mod-name
- #:use-module (figl low-level support)
- #:export ,(map (lambda (def)
- (string->symbol (gl-definition-name def)))
- defs))
+ `(define-module (figl ,mod-name low-level)
+ #:use-module (figl ,mod-name runtime)
+ #:use-module (figl ,mod-name types)
+ #:export ,(append-map (lambda (def)
+ (map car (gl-definition-prototypes def)))
+ defs))
port)
(newline port)
(for-each
(lambda (def)
(pretty-print
- `(define-gl-procedure ,(string->symbol (gl-definition-name def))
- ,(gl-definition-name def)
- ,(gl-definition-prototype def)
- ,(string-trim-both
- (stexi->plain-text
- (gl-definition-documentation def))))
+ `(,(symbol-append 'define- mod-name '-procedures)
+ ,(gl-definition-prototypes def)
+ ,(string-trim-both
+ (stexi->plain-text
+ (gl-definition-documentation def))))
port)
(newline port))
defs))
`(*fragment*
(para "The functions from this section may be had by loading "
"the module:")
- (example "(use-modules " ,(object->string mod-name) ")")
+ (example "(use-modules (figl " ,(object->string mod-name) " low-level)")
(copying
(para
"This section of the manual was derived from the upstream "
,@(append-map cdr (unique-copyrights defs)))
,@(map
(lambda (def)
- `(defun (% (name ,(gl-definition-name def))
- ;; FIXME: proper prototype.
- ;; (gl-definition-prototype def)
- (arguments))
- ,@(cdr (gl-definition-documentation def))))
+ (match (gl-definition-prototypes def)
+ (((name (pname ptype) ... '-> return-type)
+ (name* (pname* ptype*) ... '-> return-type*)
+ ...)
+ `(deftypefun (% (name ,(symbol->string name))
+ (data-type ,(symbol->string return-type))
+ (arguments ,@(list-intersperse
+ (map symbol->string pname)
+ " ")))
+ ,@(map (lambda (name pname ptype return-type)
+ `(deftypefunx
+ (% (name ,(symbol->string name))
+ (data-type ,(symbol->string return-type))
+ (arguments ,@(list-intersperse
+ (map symbol->string pname)
+ " ")))))
+ name* pname* ptype* return-type*)
+ ,@(cdr (gl-definition-documentation def))))))
defs)))
port))
(call-with-values
(lambda () (partition-definitions version))
(lambda (gl glu glx)
- (write-bindings '(figl low-level gl) (reverse gl))
- (write-bindings '(figl low-level glu) (reverse glu))
- (write-bindings '(figl low-level glx) (reverse glx)))))
+ (write-bindings 'gl (reverse gl))
+ (write-bindings 'glu (reverse glu))
+ (write-bindings 'glx (reverse glx)))))
(when (batch-mode?)
(apply main (command-line)))