% crochet command novella text: X = X as element; command novella flow: (Xs is list) = new nvl-flow(Xs map: (_ as element)); command novella stack: (Xs is list) = new nvl-stack(Xs map: (_ as element)); command novella section: (Xs is list) = new nvl-flow(Xs map: (_ as element)) | section; command novella header: (Xs is list) = new nvl-flow(Xs map: (_ as element)) | header; command novella paragraph: X = (X as element) | paragraph; command novella divider = nvl-empty divider; command novella menu: (Xs is list) = new nvl-menu(Xs); command novella action-choice-menu: (Xs is list) for: Reference do let Choices = Xs map: { X in X title as element | button-for: Reference value: X }; novella menu: Choices; end command element style: (Classes is list) = new nvl-style(self, Classes); command element role: (Role is text) = new nvl-role(self, Role); command element append: (That is element) = new nvl-flow([self, That]); command element prepend: (That is element) = new nvl-flow([That, self]); command element between: (X is element) and: (Y is element) = new nvl-flow([X, self, Y]); command element button-for: Reference value: Value = new nvl-button(self, Reference, Value); command element title = self style: ["novella-title"] | role: "h1"; command element subtitle = self style: ["novella-subtitle"] | role: "h2"; command element paragraph = self style: ["novella-paragraph"] | role: "p"; command element divider = self style: ["novella-divider"] | role: "hr"; command element header = self style: ["novella-header"] | role: "header"; command element section = self style: ["novella-section"] | role: "section"; command element block = self style: ["novella-block"]; command element strong = self style: ["novella-strong"] | role: "strong"; command element emphasis = self style: ["novella-emphasis"] | role: "em"; command element monospace = self style: ["novella-mono"]; command element as element = self; command text as element = new nvl-text(self); command list as element = new nvl-flow(self map: (_ as element)); command interpolation as element = (self parts map: (_ as element)) as element; command numeric as element = self to-text as element;