Make HTML pretty-printing prettier
[hcoop/domtool2.git] / src / htmlPrint.sml
index d607d46..c752c3f 100644 (file)
@@ -95,10 +95,13 @@ fun p_typ' pn (t, _) =
        TBase s => typ s
       | TList t => dBox [punct "[", p_typ' false t, punct "]"]
       | TArrow (t1, t2) =>
-       parenIf pn [p_typ' true t1, space 1, punct "->", space 1, p_typ' true t2]
+       parenIf pn [p_typ' true t1, space 1, punct "->", space 1, p_typ' false t2]
       | TAction (p, r1, r2) =>
-       parenIf pn [p_predBoxed p, space 1, p_record r1, space 1,
-                   punct "=>", space 1, p_record r2]
+       (case (StringMap.numItems r1, StringMap.numItems r2) of
+            (0, 0) => parenIf pn [p_predBoxed p]
+          | (_, 0) =>  parenIf pn [p_predBoxed p, space 1, p_record r1]
+          | _ => parenIf pn [p_predBoxed p, space 1, p_record r1, space 1,
+                             punct "=>", space 1, p_record r2])
       | TNested (p, t) =>
        parenIf pn [p_pred' false p, space 1, punct "=>", space 1, p_typ' false t]
 
@@ -139,6 +142,9 @@ fun p_exp (e, _) =
                                punct ":", space 1,
                                dBox [punct "(", p_typ t, punct ")"],
                                space 1, punct "->", space 1, p_exp e, punct ")"]
+      | EALam (x, p, e) => dBox [punct "(\\", space 1, exp x, space 1,
+                                punct ":", space 1, p_pred p, 
+                                space 1, punct "->", space 1, p_exp e, punct ")"]
 
       | EVar x => exp x
       | EApp (e1, e2) => dBox [punct "(", p_exp e1, break {nsp = 1, offset = 0}, p_exp e2, punct ")"]
@@ -181,6 +187,26 @@ fun p_decl d =
                                [dBox [keyword "context", space 1,
                                       ident name]])
 
+fun p_decl_fref d =
+    case d of
+       DExternType name => dBox [keyword "extern", space 1,
+                                 keyword "type", space 1,
+                                 style (HTMLDev.link ("#T_" ^ name), [ident name])]
+      | DExternVal (name, t) => dBox [keyword "extern", space 1,
+                                     keyword "val", space 1,
+                                     style (HTMLDev.link ("#V_" ^ name), [ident name]),
+                                     space 1,
+                                     string ":", space 1,
+                                     p_typ t]
+      | DVal (name, NONE, _) => string "Unannotated val declaration!"
+      | DVal (name, SOME t, _) => dBox [keyword "val", space 1,
+                                       style (HTMLDev.link ("#V_" ^ name), [ident name]),
+                                       space 1,
+                                       punct ":", space 1,
+                                       p_typ t]
+      | DContext name => dBox [keyword "context", space 1,
+                              style (HTMLDev.link ("#C_" ^ name), [ident name])]
+
 fun output d =
     let
        val dev = HTMLDev.openDev {wid = 80,