# HG changeset patch # User Danielle Hutzley # Date 1660664532 25200 # Tue Aug 16 08:42:12 2022 -0700 # Node ID 4d4a88f4f4975b9d91532de05952bf99e1d691d9 # Parent d16cffcbfedbfed217e58c3acc5d3083f3f4b762 Expose form-entry macro diff --git a/.tup/db b/.tup/db index 28acd5ca5165a7d470df52b6becc4b5035980bf3..ecc9cb4901c9e65aaa56204210838efb57c9bcf9 GIT binary patch literal 86016 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 diff --git a/yalib-macros.fnl b/yalib-macros.fnl --- a/yalib-macros.fnl +++ b/yalib-macros.fnl @@ -1,20 +1,20 @@ ; YALib macros, load using --add-macro-path ;; Formspec DSL +(fn form-entry [command ...] + (fn parse-arg [v] + (match v + [:escape text] `(minetest.formspec_escape ,text) + [:run f & args] `(,f ,(unpack args)) + [] `(table.concat ,(icollect [_ v (ipairs v)] (parse-arg v)) ",") + _ (tostring v))) + + (let [args (icollect [_ v (ipairs [...])] (parse-arg v))] + `(.. ,(.. (tostring command) "[") (table.concat ,args ";") "]"))) + (fn form [{: version : size : position : anchor : padding : no-prepend : real-coordinates} ...] "Define a new formspec using a DSL (returns an expression which produces a formspec string)" (local unpack (or unpack table.unpack)) - (fn fs-entry [command ...] - (fn parse-arg [v] - (match v - [:escape text] `(minetest.formspec_escape ,text) - [:run f & args] `(,f ,(unpack args)) - [] `(table.concat ,(icollect [_ v (ipairs v)] (parse-arg v)) ",") - _ (tostring v))) - - (let [args (icollect [_ v (ipairs [...])] (parse-arg v))] - `(.. ,(.. (tostring command) "[") (table.concat ,args ";") "]"))) - (fn or-empty [target action] (if target (action target) "")) @@ -24,17 +24,17 @@ (icollect [_ entry (ipairs [...])] (match (tostring (. entry 1)) - (where block (. blocks block)) `(.. ,(fs-entry block (. entry 2)) ,(unpack entry 3) ,(fs-entry (. blocks block))) - _ (fs-entry (unpack entry))))) + (where block (. blocks block)) `(.. ,(form-entry block (. entry 2)) ,(unpack entry 3) ,(form-entry (. blocks block))) + _ (form-entry (unpack entry))))) ; Prefer a more up-to-date formspec default - (let [version-h (fs-entry :formspec_version (or version 4)) - size-h (fs-entry :size size) - position-h (or-empty position (partial fs-entry :position)) - anchor-h (or-empty anchor (partial fs-entry :anchor)) - padding-h (or-empty padding (partial fs-entry :padding)) - no-prepend-h (or-empty no-prepend #(fs-entry :no_prepend)) - real-coordinates-h (or-empty real-coordinates (partial fs-entry :real_coordinates)) + (let [version-h (form-entry :formspec_version (or version 4)) + size-h (form-entry :size size) + position-h (or-empty position (partial form-entry :position)) + anchor-h (or-empty anchor (partial form-entry :anchor)) + padding-h (or-empty padding (partial form-entry :padding)) + no-prepend-h (or-empty no-prepend #(form-entry :no_prepend)) + real-coordinates-h (or-empty real-coordinates (partial form-entry :real_coordinates)) body (parse-entries ...)] `(table.concat [,version-h ,size-h ,position-h ,anchor-h ,padding-h ,no-prepend-h ,real-coordinates-h ,(unpack body)] ""))) @@ -127,6 +127,7 @@ (,hook-fn ,action ...)))) {: form + : form-entry : defnode : defrecipe : defcommand