diff --git a/doc/d-utils.md b/doc/d-utils.md index a19975a..cc556bf 100644 --- a/doc/d-utils.md +++ b/doc/d-utils.md @@ -356,3 +356,16 @@ A simple module with less-common formatting functions. Converts given number to a string with two-digit fractional part. Should the fractional part be 0, it is replaced with the string "--". + +## util-tag [module] + + (import util-tag) + +A unifying module for compound data structures tagging. + +### make-tag [syntax] + +* ```name``` - unquoted symbol to base the tag on + +Creates a unique and collision free symbol to identify compound data +structures based on lists and pairs. diff --git a/src/Makefile b/src/Makefile index 7561dbf..c6a37e8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -55,18 +55,20 @@ HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.o \ table-processor.o table-border.o table-style.o sgr-state.o \ util-utf8.o sgr-cell.o template-list-expander.o \ box-drawing.o util-list.o export-web-static.o util-dir.o \ - dokuwiki.o racket-kwargs.o + dokuwiki.o racket-kwargs.o duck.o GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \ util-time.import.scm util-csv.import.scm util-git.import.scm \ util-io.import.scm util-stdout.import.scm \ util-parser.import.scm util-list.import.scm \ - util-proc.import.scm util-format.import.scm + util-proc.import.scm util-format.import.scm \ + util-tag.import.scm GENDOC-OBJS=gendoc.o duck-extract.o util-time.o util-csv.o util-io.o \ progress.o testing.o util-proc.o util-git.o util-io.o \ util-stdout.o util-parser.o util-list.o util-proc.o \ - util-format.o + util-format.o racket-kwargs.o util-dict-list.o util-tag.o \ + util-set-list.o duck.o .PHONY: imports imports: $(HACKERBASE-DEPS) @@ -276,7 +278,7 @@ UTIL-TIME-SOURCES=util-time.scm duck.import.scm util-time.o: util-time.import.scm util-time.import.scm: $(UTIL-TIME-SOURCES) -UTIL-TAG-SOURCES=util-tag.scm testing.import.scm +UTIL-TAG-SOURCES=util-tag.scm testing.import.scm duck.import.scm util-tag.o: util-tag.import.scm util-tag.import.scm: $(UTIL-TAG-SOURCES) @@ -508,6 +510,7 @@ dokuwiki.import.scm: $(DOKUWIKI-SOURCES) DUCK-SOURCES=duck.scm duck.import.scm: $(DUCK-SOURCES) +duck.o: duck.import.scm DUCK-EXTRACT-SOURCES=duck-extract.scm util-proc.import.scm diff --git a/src/duck-extract.scm b/src/duck-extract.scm index 1fc7a9f..efa6eae 100644 --- a/src/duck-extract.scm +++ b/src/duck-extract.scm @@ -169,6 +169,12 @@ (newline) (print-duck-text (caddr sec))) + (define (print-duck-syntax sec) + (newline) + (print "### " (cadr sec) " [syntax]") + (newline) + (print-duck-text (caddr sec))) + (define (print-duck-unknown sec) (print sec)) @@ -181,6 +187,7 @@ ((VAR) (print-duck-variable (car mod))) ((PAR) (print-duck-parameter (car mod))) ((FUN) (print-duck-procedure (car mod))) + ((STX) (print-duck-syntax (car mod))) (else (print-duck-unknown (car mod))))) (loop (cdr mod))))) diff --git a/src/duck.scm b/src/duck.scm index 154118a..780b1a2 100644 --- a/src/duck.scm +++ b/src/duck.scm @@ -22,6 +22,8 @@ ;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ;; +(declare (unit duck)) + (module duck ( @@ -96,8 +98,8 @@ (module modname exports - (import (only scheme define set! quote reverse list quasiquote) - (only (chicken module) export) + (import scheme + (chicken module) (chicken base) duck ) diff --git a/src/gendoc.scm b/src/gendoc.scm index 6e6d02a..515e06d 100644 --- a/src/gendoc.scm +++ b/src/gendoc.scm @@ -28,4 +28,6 @@ util-parser util-list util-proc - util-format) + util-format + util-tag + ) diff --git a/src/util-tag.scm b/src/util-tag.scm index 53315df..ccf6ddb 100644 --- a/src/util-tag.scm +++ b/src/util-tag.scm @@ -25,8 +25,11 @@ (declare (unit util-tag)) -(module +(import duck) + +(module* util-tag + #:doc ("A unifying module for compound data structures tagging.") ( make-tag util-tag-make @@ -37,7 +40,11 @@ (chicken random)) ;; Syntactic wrapper to allow easy tag creation - (define-syntax make-tag + (define-syntax/doc make-tag + ("* ```name``` - unquoted symbol to base the tag on + +Creates a unique and collision free symbol to identify compound data +structures based on lists and pairs.") (syntax-rules () ((_ tag) (util-tag-make 'tag))))