diff --git a/pollen/private/main-base.rkt b/pollen/private/main-base.rkt index c769b2d..e261334 100644 --- a/pollen/private/main-base.rkt +++ b/pollen/private/main-base.rkt @@ -7,7 +7,7 @@ (rename-out [dialect-module-begin #%module-begin])) -(define-syntax-rule (dialect-module-begin PARSER-MODE-IN . OUTER-EXPRS) +(define-syntax-rule (dialect-module-begin PARSER-MODE-FROM-EXPANDER . READER-SUBMOD-AND-OTHER-EXPRS) (#%module-begin (require racket/base) (provide (except-out (all-from-out racket/base) #%module-begin) @@ -16,7 +16,9 @@ (syntax-case stx () [(_ . EXPRS) (let-values ([(meta-hash exprs-without-metas) (split-metas (syntax->datum #'EXPRS) (setup:define-meta-name))]) - (with-syntax ([META-HASH meta-hash] + (with-syntax (;; 'parser-mode-from-reader will be #f for an inline submodule + [PARSER-MODE-FROM-READER-PROPERTY (syntax-property stx 'parser-mode-from-reader)] + [META-HASH meta-hash] [EXPRS-WITHOUT-METAS exprs-without-metas] [METAS (setup:meta-export)] [META-MOD (setup:meta-export)] @@ -37,21 +39,18 @@ (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)) + (require pollen/top (submod ".." META-MOD) pollen/core pollen/setup) (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)] + (let* ([parser-mode (or 'PARSER-MODE-FROM-READER-PROPERTY PARSER-MODE-FROM-EXPANDER)] [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))))))] + [(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)] @@ -59,4 +58,4 @@ (proc doc-elements-spliced))) (provide DOC METAS (except-out (all-from-out 'inner) DOC-RAW #%top))))))])) - . OUTER-EXPRS)) \ No newline at end of file + . READER-SUBMOD-AND-OTHER-EXPRS)) \ No newline at end of file diff --git a/pollen/private/reader-base.rkt b/pollen/private/reader-base.rkt index aa6fac1..354f3be 100644 --- a/pollen/private/reader-base.rkt +++ b/pollen/private/reader-base.rkt @@ -33,27 +33,27 @@ #:inside? #t)]) (read-inner path-string p))) (define reader-here-path (path-string->here-path path-string)) - (define parser-mode (infer-parser-mode reader-mode reader-here-path)) + (define parser-mode-from-reader (infer-parser-mode reader-mode reader-here-path)) (define parsed-syntax (strip-context - (with-syntax ([HERE-KEY (setup:here-path-key)] - [HERE-PATH reader-here-path] - [POLLEN-MOD-NAME 'pollen-module] - [PARSER-MODE-VALUE parser-mode] - [DIRECTORY-REQUIRES (require+provide-directory-require-files path-string)] - [SOURCE-LINES source-stx] - [DOC (setup:main-export)]) + (with-syntax* ([HERE-KEY (setup:here-path-key)] + [HERE-PATH reader-here-path] + [POLLEN-MOD-NAME 'pollen-module] + [DIRECTORY-REQUIRES (require+provide-directory-require-files path-string)] + [SOURCE-LINES source-stx] + [DOC (setup:main-export)] + [PARSER-MODE-FROM-READER parser-mode-from-reader] + [POLLEN-MODULE-SYNTAX (let ([mod-stx #'(module POLLEN-MOD-NAME pollen + (define-meta HERE-KEY HERE-PATH) + (provide (all-defined-out)) + DIRECTORY-REQUIRES + . SOURCE-LINES)]) + (syntax-property mod-stx 'parser-mode-from-reader parser-mode-from-reader))]) #'(module runtime-wrapper racket/base - (module POLLEN-MOD-NAME pollen - (define-meta HERE-KEY HERE-PATH) - (define parser-mode 'PARSER-MODE-VALUE) - (provide (except-out (all-defined-out) parser-mode) - (prefix-out inner: parser-mode)) ; avoids conflicts with importing modules - DIRECTORY-REQUIRES - . SOURCE-LINES) + POLLEN-MODULE-SYNTAX (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 + (show DOC 'PARSER-MODE-FROM-READER HERE-PATH))))) ; HERE-PATH acts as "local" runtime config (syntax-property parsed-syntax 'module-language `#(pollen/private/language-info get-language-info ,reader-here-path))) ; reader-here-path acts as "top" runtime config diff --git a/pollen/private/ts.rktd b/pollen/private/ts.rktd index 18ea187..9d58af5 100644 --- a/pollen/private/ts.rktd +++ b/pollen/private/ts.rktd @@ -1 +1 @@ -1462218309 +1462223092