Use this when the user wants a UML class diagram drawn, for example "draw a class diagram of these classes" or "make a PDF of my domain model with inheritance and composition". Takes the diagram text in a strict grammar, a page size and an optional title. Grammar: One item per line. Classes: "class Name {", "interface Name {", "abstract class Name {" or "enum Name {", then one member per line, then "}" on its own line ("class Name" alone declares an empty class; a stereotype may follow the name, e.g. "class Name <> {"). Fields: "+name: Type". Methods: "+name(arg: Type, other: Type): ReturnType". Visibility + public, - private, # protected, ~ package (optional). "{static}" or "{abstract}" before the name marks static or abstract members. Enum constants: one NAME per line. Relations: "Animal <|-- Dog" (inheritance), "Shape <|.. Circle" (realization), "Car -- Wheel" (composition), "Team o-- Player" (aggregation), "Customer --> Order" (association), "Report ..> Printer" (dependency), "A -- B" (link); arrows may point either way (Dog --|> Animal). Optional multiplicities in quotes next to each class and a label after a colon: Customer "1" --> "0.." Order : places. "%%" starts a comment line. Returns counts, the relations in words, model warnings, a geometry check (overlapping classes, lines crossing a class, end markers by relation kind), the PDF page count and smallest text size, an interactive diagram, and PDF, SVG, CSV and JSON downloads. Refuses text that does not fit the grammar, naming the line; refuses relations to classes that are not declared, duplicate members and inheritance cycles; refuses a class whose relation line ends do not fit across one page (each end has its own place on the box edge; about 50 ends on one edge on Letter, more on Tabloid), naming the class. Up to 60 classes and 200 relations. Does not read source code files. Download links of large diagrams expire after about 1 hour.