#lang racket

(require "main-preproc-imports.rkt" "readability.rkt")
(provide (except-out (all-from-out racket) #%module-begin)
         (rename-out [module-begin #%module-begin]))

(require (only-in scribble/text output)
         (only-in racket/list flatten))

(define-syntax-rule (module-begin expr ...)
  (#%module-begin
   
   ; We want our module language to support require & provide
   ; which are only supported at the module level, so ...
   ; create a submodule to contain the input
   ; and export as needed
   
   ; doclang2_raw is a clone of scribble/doclang2 with decode disabled
   ; helpful because it collects & exports content via 'doc
   (module pollen-inner pollen/lang/doclang2_raw
     (require pollen/tools pollen/main-helper)
     (require-and-provide-extras) ; brings in the project require files
     
     expr ...) ; body of module 
   
   (require 'pollen-inner) ; provides 'doc
   
   ;; reduce text to simplest representation: a single ouput string
   (define main (apply string-append (map ->string (flatten (trim (->list doc) whitespace?)))))
   (provide main (all-from-out 'pollen-inner))

   (module+ main
;     (displayln ";-------------------------")
;     (displayln (string-append "; pollen 'main"))     
;     (displayln ";-------------------------")
     (display main))))
