(.module: [lux #* [data ["." text ["%" format (#+ format)]]]] [// [time (#+ Days)] ["_" term] ["." definition] [// ["$" document]]]) (def: grant-header (format "Subject to the terms and conditions of " _.license ", each " _.contributor " hereby grants to " _.recipient)) (def: #export grant-characteristics (List Text) (list "perpetual" "world-wide" "non-exclusive" "no-charge" "royalty-free" "irrevocable")) (def: #export copyright-grant-rights (List Text) (list "use" "reproduce" "display" "perform" "modify" (format "create an " _.extension " of") "sublicense" "distribute")) (def: #export copyright ($.sentence (format grant-header " a " ($.and ..grant-characteristics) " copyright license to " ($.or ..copyright-grant-rights) " " _.work " and such an " _.extension " in a " _.source-code-form " or an " _.object-form))) (def: #export (patent retaliation?) (-> Bit Text) (let [grant (format grant-header " a " ($.and ..grant-characteristics) " patent license to " ($.or definition.patent-rights) " " _.work ", where such license applies only to any " _.patent-claim " that is necessarily infringed by their " ($.plural _.contribution) " alone or by combination of their " ($.plural _.contribution) " with " _.work) retaliation-clause (format "If " _.recipient " institutes patent litigation against any " _.legal-entity " (including a cross-claim or counterclaim in a lawsuit) alleging that " _.work " or a " _.contribution " incorporated within " _.work " constitutes direct or contributory patent infringement" ", then any patent licenses granted to " _.recipient " under " _.license " for " _.work " shall terminate as of the date such litigation is filed")] ($.paragraph (list& grant (if retaliation? (list retaliation-clause) (list)))))) (def: #export date ($.sentence (format "The licenses granted in " _.license " with respect to any " _.contribution " become effective for each " _.contribution " on the date the " _.contributor " first distributes such " _.contribution))) (def: restoration-scope "an ongoing basis") (def: #export (grant-restoration-clause termination-period) (-> Days Text) (let [restoration-condition (format _.recipient " becomes compliant") restored-grants (format "the rights granted under " _.license " from a particular " _.contributor) invalidation-condition (format "such " _.contributor " explicitly and finally terminates the grants to " _.recipient) complaint-period-condition (format "such " _.contributor " fails to notify " _.recipient " of the non-compliance by some reasonable means prior to " (%.nat termination-period) " " ($.plural "day") " after " _.recipient " has come back into compliance")] (format "However, if " restoration-condition ", then " restored-grants " are reinstated provisionally" ", unless and until " invalidation-condition ", and on " ..restoration-scope ", if " complaint-period-condition))) (def: #export (grace-period-clause grace-period) (-> Days Text) (let [the-grants (format "grants to " _.recipient " from a particular " _.contributor) automatic-restoration-conditions (let [notification (format "such " _.contributor " notifies " _.recipient " of the non-compliance by some reasonable means") first-offense (format "this is the first time " _.recipient " has received notice of non-compliance with " _.license " from such " _.contributor) prompt-compliance (format _.recipient " becomes compliant prior to " (%.nat grace-period) " " ($.plural "day") " after reception of the notice")] ($.and (list notification first-offense prompt-compliance)))] (format "Moreover, " the-grants " are reinstated on " ..restoration-scope " if " automatic-restoration-conditions))) (def: #export (termination termination-period grace-period) (-> Days Days Text) (let [on-violation-of-terms (let [what (format "The rights granted under " _.license) when (format _.recipient " fails to comply with any of its terms")] (format what " will terminate automatically if " when))] ($.paragraph (list on-violation-of-terms (..grant-restoration-clause termination-period) (..grace-period-clause grace-period))))) (def: #export no-retroactive-termination (let [situation "In the event of termination" coverage "all end user license agreements" exclusions "(excluding licenses to distributors and resellers)" source (format "that have been validly granted by " _.recipient " or any distributor") scope "hereunder prior to termination" effect "shall survive termination"] ($.paragraph (list (format situation ", " coverage " " exclusions " " source " " scope " " effect)))))