(html (head (title "sph-lib (sph filesystem asset-compiler)") (link (@ (rel "stylesheet") (type "text/css") (href "/css/sph.css"))) (meta (@ (name "viewport") (content "width=device-width,initial-scale=1"))) #f) (body () (div (@ (class top)) (nav (a (@ (href "/")) "start") ", " (a (@ (href "/feed.xml")) "feed")) "") (div (@ (class "middle")) (div (@ (class mtime) (title "last modification time of the current page")) "2018-10-21") (section (h1 "(sph filesystem asset-compiler)") (div (p "configuration format and helpers to process and concatenate files from multiple sources.") (p "part of " (a (@ (href "../../sph-lib.html")) "sph-lib")) ((section (@ (class "library-description")) (h1 "library description") (div (p "for example to compile from many files in different preprocessor formats into one target format file.") (p "features") (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "configuration for all processors")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "process file always, only if source file is newer or only if destination file doesnt exist")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "match files by suffix or custom procedure")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "option to automatically create destination filenames")) (p "data structures") (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "config: hashtable:{symbol:output-format -> (config-output config-input ...)}")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "config-output: #(symbol:id string:suffix false/procedure:processor-output)")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "config-input: #(symbol:name source-match? false/procedure:processor-input)")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "config-format: (config-output config-input ...)")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "source-match? :: boolean/procedure:{any:source -> boolean}")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "processor-input :: source-element port:output any:processor-options ->")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "processor-output :: procedure:input->port port:output-port any:processor-options ->")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "sources: (any:processor-dependent ...)")) (p "syntax") (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "ac-config :: (out-id suffix out-proc) (in-id matcher in-proc) ... -> hashtable")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "ac-config-input :: id matcher processor -> vector")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "ac-config-output :: id suffix processor -> vector")) (p "example config") (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp")) "(define my-ac-config")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp")) "(ac-config")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp")) "( (html \".htm\" (l (process-input out-port options) (process-input out-port)))")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp")) "(html #t (l (source out-port options) (file->port source out-port)))")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp")) "(sxml #t s-template-sxml->html))")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp")) "( (js #t js-output-processor)")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp")) "(js #t ac-input-copy)")) (p (((*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp") (*ENTITY* "nbsp")) "(sjs #t s-template-sescript->js))))")))) (section (@ (class "library-name")) (h1 "import name") (p "(sph filesystem asset-compiler)")) (section (@ (class "library-exports")) (h1 "exports") (div (ul (@ (class "doc-index")) (li (a (@ (href "#doc-b-" "ac-compile") (class (procedure))) "ac-compile")) (li (a (@ (href "#doc-b-" "ac-compile->file") (class (procedure))) "ac-compile->file")) (li (a (@ (href "#doc-b-" "ac-config") (class (syntax))) "ac-config")) (li (a (@ (href "#doc-b-" "ac-config-input") (class (syntax))) "ac-config-input")) (li (a (@ (href "#doc-b-" "ac-config-input-p") (class (procedure))) "ac-config-input-p")) (li (a (@ (href "#doc-b-" "ac-config-output") (class (syntax))) "ac-config-output")) (li (a (@ (href "#doc-b-" "ac-config-output-p") (class (procedure))) "ac-config-output-p")) (li (a (@ (href "#doc-b-" "ac-config-p") (class (procedure))) "ac-config-p")) (li (a (@ (href "#doc-b-" "ac-destination") (class (procedure))) "ac-destination")) (li (a (@ (href "#doc-b-" "ac-input-id") (class (procedure))) "ac-input-id")) (li (a (@ (href "#doc-b-" "ac-input-matcher") (class (procedure))) "ac-input-matcher")) (li (a (@ (href "#doc-b-" "ac-input-processor") (class (procedure))) "ac-input-processor")) (li (a (@ (href "#doc-b-" "ac-input-record") (class (variable))) "ac-input-record")) (li (a (@ (href "#doc-b-" "ac-output-id") (class (procedure))) "ac-output-id")) (li (a (@ (href "#doc-b-" "ac-output-processor") (class (procedure))) "ac-output-processor")) (li (a (@ (href "#doc-b-" "ac-output-record") (class (variable))) "ac-output-record")) (li (a (@ (href "#doc-b-" "ac-output-suffix") (class (procedure))) "ac-output-suffix")) (li (a (@ (href "#doc-b-" "ac-source-files-updated?") (class (procedure))) "ac-source-files-updated?")) (li (a (@ (href "#doc-b-" "sph-filesystem-asset-compiler-description") (class (variable))) "sph-filesystem-asset-compiler-description"))) (div (@ (class "doc-bindings")) (div (@ (id "doc-b-" "ac-compile") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-compile") " " (span (@ (class "first-sig")) "config output-format sources port [processor-options] ->")) (div (@ (class "rest-sig")) (div "hashtable symbol list port [any] -> false/unspecified")) (div (@ (class "description")) ("\"processor-options\" is an optional value passed to input and output processors as the last argument"))) (div (@ (id "doc-b-" "ac-compile->file") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-compile->file") " " (span (@ (class "first-sig")) "config output-format sources dest-directory #:processor-options #:when #:dest-name ->")) (div (@ (class "rest-sig")) (div "hashtable symbol list string _ ... -> string:path-destination")) (div (@ (class "description")) ("#:processor-options: any/alist\n#:when takes a symbol:\n new: update only if destination does not exist\n newer: update if destination does not exist or any source file is newer\n always: always compile, overwriting any existing destination file\n#:dest-name sets the destination file name to use instead of an automatically generated one"))) (div (@ (id "doc-b-" "ac-config") (class "doc-b")) (div (span (@ (class "type")) "syntax") ": " (span (@ (class "name")) "ac-config") " " (span (@ (class "first-sig")) "((out-id suffix out-proc) (in-id matcher in-proc) ...) ...")) "" "") (div (@ (id "doc-b-" "ac-config-input") (class "doc-b")) (div (span (@ (class "type")) "syntax") ": " (span (@ (class "name")) "ac-config-input") " " (span (@ (class "first-sig")) "id matcher processor")) "" "") (div (@ (id "doc-b-" "ac-config-input-p") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-config-input-p") " " (span (@ (class "first-sig")) "id matcher processor ->")) "" (div (@ (class "description")) ("symbol procedure/boolean procedure/false\ncreate a config-input object.\nif processor is false, a default processor that interprets source elements as\nfilesystem paths and reads them is used.\nmatcher\n procedure: match a source element\n #t: match the id as a filename extension separated with a dot\n for source elements which are strings\n else: never match"))) (div (@ (id "doc-b-" "ac-config-output") (class "doc-b")) (div (span (@ (class "type")) "syntax") ": " (span (@ (class "name")) "ac-config-output") " " (span (@ (class "first-sig")) "id suffix processor")) "" "") (div (@ (id "doc-b-" "ac-config-output-p") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-config-output-p") " " (span (@ (class "first-sig")) "id suffix processor ->")) (div (@ (class "rest-sig")) (div "symbol string/procedure/boolean procedure -> vector")) (div (@ (class "description")) ("create a config-output object.\nif processor is false, a default processor that just copies is used.\nsuffix\n #t: use the id as a filename extension separated with a dot\n else: no filename extension"))) (div (@ (id "doc-b-" "ac-config-p") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-config-p") " " (span (@ (class "first-sig")) "config-source ->")) (div (@ (class "rest-sig")) (div "list:((id config-output config-input ...) ...) -> hashtable")) (div (@ (class "description")) ("create an ac-config from a list with the following format"))) (div (@ (id "doc-b-" "ac-destination") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-destination") " " (span (@ (class "first-sig")) "path-directory format sources [name suffix] ->")) (div (@ (class "rest-sig")) (div "string symbol string list -> string")) (div (@ (class "description")) ("create a string for an output path relative to \"path-directory\".\nformat:\n* \"{path-directory}/{format}/{name}\"\n* \"{path-directory}/{format}/_{basename-without-suffix-first-of-sources}-{base32-hash-of-sources}\""))) (div (@ (id "doc-b-" "ac-input-id") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-input-id") " " (span (@ (class "first-sig")) "record ->")) "" "") (div (@ (id "doc-b-" "ac-input-matcher") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-input-matcher") " " (span (@ (class "first-sig")) "record ->")) "" "") (div (@ (id "doc-b-" "ac-input-processor") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-input-processor") " " (span (@ (class "first-sig")) "record ->")) "" "") (div (@ (id "doc-b-" "ac-input-record") (class "doc-b")) (div (span (@ (class "type")) "variable") ": " (span (@ (class "name")) "ac-input-record")) "" "") (div (@ (id "doc-b-" "ac-output-id") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-output-id") " " (span (@ (class "first-sig")) "record ->")) "" "") (div (@ (id "doc-b-" "ac-output-processor") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-output-processor") " " (span (@ (class "first-sig")) "record ->")) "" "") (div (@ (id "doc-b-" "ac-output-record") (class "doc-b")) (div (span (@ (class "type")) "variable") ": " (span (@ (class "name")) "ac-output-record")) "" "") (div (@ (id "doc-b-" "ac-output-suffix") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-output-suffix") " " (span (@ (class "first-sig")) "record ->")) "" "") (div (@ (id "doc-b-" "ac-source-files-updated?") (class "doc-b")) (div (span (@ (class "type")) "procedure") ": " (span (@ (class "name")) "ac-source-files-updated?") " " (span (@ (class "first-sig")) "dest sources ->")) (div (@ (class "rest-sig")) (div "string (string ...) -> boolean")) (div (@ (class "description")) ("true if any source is newer than destination"))) (div (@ (id "doc-b-" "sph-filesystem-asset-compiler-description") (class "doc-b")) (div (span (@ (class "type")) "variable") ": " (span (@ (class "name")) "sph-filesystem-asset-compiler-description")) "" "")))))))) ()))