diff --git a/pollen/private/main-base.rkt b/pollen/private/main-base.rkt index 71f82e3..c769b2d 100644 --- a/pollen/private/main-base.rkt +++ b/pollen/private/main-base.rkt @@ -7,55 +7,56 @@ (rename-out [dialect-module-begin #%module-begin])) -(define-syntax-rule (dialect-module-begin ...) +(define-syntax-rule (dialect-module-begin PARSER-MODE-IN . OUTER-EXPRS) (#%module-begin (require racket/base) (provide (except-out (all-from-out racket/base) #%module-begin) (rename-out [pollen-module-begin #%module-begin])) (define-syntax (pollen-module-begin stx) (syntax-case stx () - [(_ (... ...)) - (let-values ([(meta-hash expr-without-metas) (split-metas (syntax->datum #'( (... ...))) (setup:define-meta-name))]) + [(_ . EXPRS) + (let-values ([(meta-hash exprs-without-metas) (split-metas (syntax->datum #'EXPRS) (setup:define-meta-name))]) (with-syntax ([META-HASH meta-hash] - [(EXPR-WITHOUT-METAS (... ...)) expr-without-metas] - [METAS (format-id #f "~a" (setup:meta-export))] - [META-MOD (format-symbol "~a" (setup:meta-export))] - [ROOT (format-id #f "~a" (setup:main-root-node))] - [NEWLINE (datum->syntax #f (setup:newline))] + [EXPRS-WITHOUT-METAS exprs-without-metas] + [METAS (setup:meta-export)] + [META-MOD (setup:meta-export)] + [ROOT (setup:main-root-node)] + [NEWLINE (setup:newline)] [MODE-PAGETREE default-mode-pagetree] [MODE-MARKUP default-mode-markup] [MODE-MARKDOWN default-mode-markdown] [SPLICING-TAG (setup:splicing-tag)] - [DOC (format-id #f "~a" (setup:main-export))] + [DOC (setup:main-export)] [DOC-RAW (generate-temporary 'pollen-)]); prevents conflicts with other imported Pollen sources - (replace-context #'( (... ...)) - #'(#%module-begin - (module META-MOD racket/base - (provide METAS) - (define METAS META-HASH)) - - (module inner pollen/private/doclang-raw - DOC-RAW ; positional arg for doclang-raw that sets name of export. - (require pollen/top pollen/setup pollen/core) - (require (submod ".." META-MOD)) - (provide (all-defined-out) #%top (all-from-out (submod ".." META-MOD) pollen/core)) - EXPR-WITHOUT-METAS (... ...)) - - (require 'inner) - - (define DOC - (let* ([parser-mode-undefined? (procedure? inner:parser-mode)] ; if undefined, #%top makes it a procedure - [parser-mode (if parser-mode-undefined? inner:parser-mode)] - [proc (case parser-mode - [(MODE-PAGETREE) decode-pagetree] - [(MODE-MARKUP) (λ(xs) (apply ROOT xs))] ; if `root` undefined, it becomes a default tag function - [(MODE-MARKDOWN) - (λ(xs) (apply ROOT (map strip-empty-attrs ((dynamic-require 'markdown 'parse-markdown) (apply string-append (map to-string xs))))))] - [else (λ(xs) (apply string-append (map to-string xs)))])] ; string output for preprocessor - ;; drop leading newlines, as they're often the result of `defines` and `requires` - [doc-elements (or (memf (λ(ln) (not (equal? ln NEWLINE))) DOC-RAW) null)] - [doc-elements-spliced (splice doc-elements 'SPLICING-TAG)]) - (proc doc-elements-spliced))) - - (provide DOC METAS (except-out (all-from-out 'inner) DOC-RAW #%top))))))])) - ...)) \ No newline at end of file + (replace-context + #'here + #'(#%module-begin + (module META-MOD racket/base + (provide METAS) + (define METAS META-HASH)) + + (module inner pollen/private/doclang-raw + DOC-RAW ; positional arg for doclang-raw that sets name of export. + (require pollen/top pollen/setup pollen/core) + (require (submod ".." META-MOD)) + (provide (all-defined-out) #%top (all-from-out (submod ".." META-MOD) pollen/core)) + . EXPRS-WITHOUT-METAS) + + (require 'inner) + + (define DOC + (let* ([parser-mode-undefined? (procedure? inner:parser-mode)] ; if undefined, #%top makes it a procedure + [parser-mode (if parser-mode-undefined? PARSER-MODE-IN inner:parser-mode)] + [proc (case parser-mode + [(MODE-PAGETREE) decode-pagetree] + [(MODE-MARKUP) (λ(xs) (apply ROOT xs))] ; if `root` undefined, it becomes a default tag function + [(MODE-MARKDOWN) + (λ(xs) (apply ROOT (map strip-empty-attrs ((dynamic-require 'markdown 'parse-markdown) (apply string-append (map to-string xs))))))] + [else (λ(xs) (apply string-append (map to-string xs)))])] ; string output for preprocessor + ;; drop leading newlines, as they're often the result of `defines` and `requires` + [doc-elements (or (memf (λ(ln) (not (equal? ln NEWLINE))) DOC-RAW) null)] + [doc-elements-spliced (splice doc-elements 'SPLICING-TAG)]) + (proc doc-elements-spliced))) + + (provide DOC METAS (except-out (all-from-out 'inner) DOC-RAW #%top))))))])) + . OUTER-EXPRS)) \ No newline at end of file diff --git a/pollen/private/reader-base.rkt b/pollen/private/reader-base.rkt index 0c144ec..aa6fac1 100644 --- a/pollen/private/reader-base.rkt +++ b/pollen/private/reader-base.rkt @@ -36,13 +36,13 @@ (define parser-mode (infer-parser-mode reader-mode reader-here-path)) (define parsed-syntax (strip-context - (with-syntax ([HERE-KEY (format-id #f "~a" (setup:here-path-key))] + (with-syntax ([HERE-KEY (setup:here-path-key)] [HERE-PATH reader-here-path] [POLLEN-MOD-NAME 'pollen-module] - [PARSER-MODE-VALUE (format-symbol "~a" parser-mode)] + [PARSER-MODE-VALUE parser-mode] [DIRECTORY-REQUIRES (require+provide-directory-require-files path-string)] - [(SOURCE-LINE ...) source-stx] - [DOC (format-id #f "~a" (setup:main-export))]) + [SOURCE-LINES source-stx] + [DOC (setup:main-export)]) #'(module runtime-wrapper racket/base (module POLLEN-MOD-NAME pollen (define-meta HERE-KEY HERE-PATH) @@ -50,7 +50,7 @@ (provide (except-out (all-defined-out) parser-mode) (prefix-out inner: parser-mode)) ; avoids conflicts with importing modules DIRECTORY-REQUIRES - SOURCE-LINE ...) + . SOURCE-LINES) (require (submod pollen/private/runtime-config show) 'POLLEN-MOD-NAME) (provide (all-from-out 'POLLEN-MOD-NAME)) (show DOC inner:parser-mode HERE-PATH))))) ; HERE-PATH acts as "local" runtime config @@ -76,9 +76,9 @@ [(color-lexer) (define my-make-scribble-inside-lexer (dynamic-require 'syntax-color/scribble-lexer 'make-scribble-inside-lexer (λ () #f))) - (cond [my-make-scribble-inside-lexer - (my-make-scribble-inside-lexer #:command-char my-command-char)] - [else default])] + (if my-make-scribble-inside-lexer + (my-make-scribble-inside-lexer #:command-char my-command-char) + default)] [(drracket:toolbar-buttons) (define my-make-drracket-buttons (dynamic-require 'pollen/private/drracket-buttons 'make-drracket-buttons)) (my-make-drracket-buttons my-command-char)])] @@ -86,7 +86,7 @@ (define-syntax-rule (reader-module-begin mode expr-to-ignore ...) (#%module-begin - (define cgi custom-get-info) ; stash hygienic references to local funcs with new identifiers - (define cr custom-read) + (define cgi custom-get-info) ; stash hygienic references to local funcs with macro-introduced identifiers + (define cr custom-read) ; so they can be provided out (define (crs ps p) (custom-read-syntax #:reader-mode mode ps p)) (provide (rename-out [cr read][crs read-syntax][cgi get-info])))) \ No newline at end of file diff --git a/pollen/private/ts.rktd b/pollen/private/ts.rktd index e20a822..18ea187 100644 --- a/pollen/private/ts.rktd +++ b/pollen/private/ts.rktd @@ -1 +1 @@ -1462154178 +1462218309