bookshelf-doc/DocGen4/Output/Structure.lean

37 lines
1.2 KiB
Plaintext
Raw Normal View History

2022-02-15 11:27:12 +00:00
import CMark
import DocGen4.Output.Template
namespace DocGen4
namespace Output
open scoped DocGen4.Jsx
open Lean
def fieldToHtml (f : NameInfo) : HtmlM Html := do
let shortName := f.name.components'.head!.toString
let name := f.name.toString
2022-02-12 14:09:13 +00:00
pure <li «class»="structure_field" id={name}>{s!"{shortName} "} : [←infoFormatToHtml f.type]</li>
def structureToHtml (i : StructureInfo) : HtmlM (Array Html) := do
2022-02-15 11:27:12 +00:00
let structureHtml :=
if Name.isSuffixOf `mk i.ctor.name then
(<ul «class»="structure_fields" id={i.ctor.name.toString}>
2022-02-12 14:09:13 +00:00
[←i.fieldInfo.mapM fieldToHtml]
2022-02-15 11:27:12 +00:00
</ul>)
else
let ctorShortName := i.ctor.name.components'.head!.toString
(<ul «class»="structure_ext">
<li id={i.ctor.name.toString} «class»="structure_ext_ctor">{s!"{ctorShortName} "} :: (</li>
<ul «class»="structure_ext_fields">
[←i.fieldInfo.mapM fieldToHtml]
</ul>
<li «class»="structure_ext_ctor">)</li>
2022-02-15 11:27:12 +00:00
</ul>)
let docstringHtml? := i.doc.map λ s => Html.text (CMark.renderHtml s)
match docstringHtml? with
| some d => pure #[structureHtml, d]
| none => pure #[structureHtml]
end Output
end DocGen4