(.module:
[library
[lux {"-" [Definition]}
[control
["." maybe ("#\." functor)]]
[data
["." bit]
["." text
["%" format {"+" [format]}]]
[collection
["." list ("#\." functor monoid)]]]]]
[//
["." license {"+" [Identification
Termination
Liability
Distribution
Commercial
Extension
Entity Black_List
URL Attribution
License]}
["." copyright]
["." definition {"+" [Definition]}]
["." grant]
["." limitation]
["." assurance]
["." liability]
["." distribution]
["." commercial]
["." extension]
["." submission]
["." miscellaneous]
["." black_list]
["." notice]
["_" term]
["." addendum]]
["$" document]])
(def: .public (definition value)
(-> Definition Text)
(format ($.quote (value@ #definition.term value)) ": " (value@ #definition.meaning value)))
(def: .public (identification value)
(-> Identification Text)
(format (value@ #license.name value) text.new_line
(value@ #license.version value)))
(def: .public (grant termination)
(-> Termination Text)
(`` (format (~~ (template [
]
[($.block ($.section [#$.title
#$.content ]))]
["Grant of Copyright License"
grant.copyright]
["Grant of Patent License"
(grant.patent (value@ #license.patent_retaliation? termination))]
["Effective Date for the Grants"
grant.date]
["Grant Termination"
(grant.termination (value@ #license.termination_period termination)
(value@ #license.grace_period termination))]
["No Retroactive Effect of Termination"
grant.no_retroactive_termination])))))
(def: .public limitation
Text
(`` (format (~~ (template [ ]
[($.block ($.section [#$.title
#$.content ]))]
["Limitations on Grant Scope"
limitation.grant]
["Limitations on Trademarks"
limitation.trademark]
[(format "Limitations on " ($.plural _.secondary_license))
limitation.secondary_licenses])))))
(def: .public assurance
Text
(`` (format (~~ (template [ ]
[($.block ($.section [#$.title
#$.content ]))]
["Representation"
assurance.representation]
["Fair Use"
assurance.fair_use])))))
(def: .public (liability value)
(-> Liability Text)
(`` (format (~~ (template [ ]
[(if
($.block ($.section [#$.title
#$.content ]))
"")]
["Disclaimer of Warranty"
bit.on
liability.warranty]
["Limitation of Liability"
bit.on
liability.limitation]
["Litigation"
bit.on
liability.litigation]
["Accepting Warranty or Additional Liability"
(value@ #license.can_accept? value)
liability.can_accept]
["High Risk Activities"
(value@ #license.disclaim_high_risk? value)
liability.disclaim_high_risk])))))
(def: .public (distribution distribution)
(-> Distribution Text)
(`` (format (~~ (template [ ]
[(if
($.block ($.section [#$.title
#$.content ]))
"")]
[(format "Distribution of a " _.source_code_form)
bit.on
distribution.source_code_form]
[(format "Distribution of an " _.object_form)
bit.on
distribution.object_form]
[(format "Distribution of an " _.extension)
(or (value@ #license.can_re_license? distribution)
(value@ #license.can_multi_license? distribution))
(distribution.extension distribution)])))))
(def: .public (commercial value)
(-> Commercial Text)
(`` (format (~~ (template [ ]
[(if
($.block ($.section [#$.title
#$.content ]))
"")]
["Non-Commerciality"
(not (value@ #license.can_sell? value))
commercial.cannot_sell]
[(format _.contributor " Attribution")
(value@ #license.require_contributor_credit? value)
commercial.require_contributor_attribution]
[(format _.contributor " Endorsement")
(not (value@ #license.allow_contributor_endorsement? value))
commercial.disallow_contributor_endorsement]
)))))
(def: .public (extension value)
(-> Extension Text)
(let [[show? document] (case (value@ #license.notification_period value)
(#.Some period)
[true (extension.notification_requirement period)]
#.None
[false ""])]
(`` (format (~~ (template [ ]
[(if
($.block ($.section [#$.title
#$.content ]))
"")]
[(value@ #license.same_license? value) "License Retention"
($.paragraph (list\composite extension.sharing_requirement
extension.license_conflict_resolution))]
[(value@ #license.must_be_distinguishable? value) (format _.extension " Distinctness")
extension.distinctness_requirement]
[show? (format _.source_code_form " Availability")
document]
[(value@ #license.must_describe_modifications? value) (format "Description of " ($.plural _.modification))
extension.description_requirement]))))))
(def: .public (attribution value)
(-> Attribution Text)
(let [copyright_notice (format "Attribution Copyright Notice: " (value@ #license.copyright_notice value))
phrase (case (value@ #license.phrase value)
(#.Some phrase)
(format text.new_line "Attribution Phrase: " phrase text.new_line)
#.None
"")
url (format text.new_line "Attribution URL: " (value@ #license.url value))
image (case (value@ #license.image value)
(#.Some image)
(format text.new_line "Attribution Image: " image)
#.None
"")]
(format copyright_notice
phrase
url
image)))
(def: .public (miscellaneous identified?)
(-> Bit Text)
(`` (format (~~ (template [ ]
[(if
($.block ($.section [#$.title
#$.content ]))
"")]
["Entire Agreement"
bit.on
miscellaneous.entire_agreement]
["Relationship of Parties"
bit.on
miscellaneous.relationship_of_parties]
["Independent Development"
bit.on
miscellaneous.independent_development]
["Consent To Breach Not Waiver"
bit.on
miscellaneous.not_waiver]
["Severability"
bit.on
miscellaneous.severability]
["Export Restrictions"
bit.on
miscellaneous.export_restrictions]
[(format "Versions of " _.license)
identified?
miscellaneous.new_versions]
)))))
(def: black_list_spacing (format text.new_line text.new_line))
(def: .public (license value)
(-> License Text)
(let [identification (|> value
(value@ #license.identification)
(maybe\each ..identification)
(maybe.default ""))
identified? (case (value@ #license.identification value)
(#.Some _)
true
#.None
false)]
(`` (format ($.block identification)
($.block (notice.copyright (value@ #license.copyright_holders value)))
(case (value@ #license.black_lists value)
#.Nil
""
black_lists
($.block ($.section [#$.title (format "Denial of " _.license)
#$.content (|> black_lists
(list\each black_list.black_list)
(text.interposed ..black_list_spacing))])))
($.section [#$.title "Definitions"
#$.content (|> definition.all
(list\each (|>> ..definition $.block))
(text.interposed ""))])
($.block ($.section [#$.title (format "Acceptance of " _.license)
#$.content limitation.acceptance]))
(..grant (value@ #license.termination value))
..limitation
..assurance
($.block ($.section [#$.title (format _.submission " of " ($.plural _.contribution))
#$.content submission.contribution]))
(..liability (value@ #license.liability value))
(..distribution (value@ #license.distribution value))
(..commercial (value@ #license.commercial value))
(..extension (value@ #license.extension value))
(|> value
(value@ #license.attribution)
(maybe\each (|>> ..attribution
["Attribution Information"]
$.section
$.block))
(maybe.default ""))
(..miscellaneous identified?)
(addendum.output (value@ #license.addendum value))
notice.end_of_license
))))