]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/bin/xhtbl/table.ml
update in lambdadelta
[helm.git] / matita / matita / contribs / lambdadelta / bin / xhtbl / table.ml
1 type css = string list
2
3 type uri = string
4
5 type ext = string
6
7 type anchor = string
8
9 type absolute = bool
10
11 type size = {
12    y : int;         (* first row *)
13    x : int;         (* first column *)
14    rf: int;         (* finite rows *)
15    cf: int;         (* finite columns *)
16    ri: int;         (* infinite rows *)
17    ci: int;         (* infinite columns *)
18    p : bool option; (* parent kind *)
19 }
20
21 type border = {
22    n: bool; (* north *)
23    s: bool; (* south *)
24    e: bool; (* east *)
25    w: bool; (* west *)
26 }
27
28 type text = Plain of string
29           | Link of absolute * string * string
30
31 type key = Text of text list
32          | Glue of int option
33
34 type table = {
35            tn: anchor; (* named anchor *)
36    mutable tc: css;    (* css classes *)
37    mutable tu: uri;    (* uri *)
38    mutable tx: ext;    (* uri extension *)
39    mutable ts: size;   (* dimension *)
40            tb: border; (* border *)
41            te: entry;  (* contents *)
42            ti: int;    (* table identifier *)
43 }
44
45 and entry = Key  of key
46           | Line of bool * table list (* true for a row *)
47
48 let id =
49    let current = ref 0 in
50    fun () -> incr current; !current
51
52 let no_size = {
53    y = 0; x = 0; rf = 0; cf = 0; ri = 0; ci = 0; p = None;
54 }
55
56 let border b = {
57    n = b; s = b; e = b; w = b;
58 }
59
60 let mk_key k tc tu tx tn = {
61    ts = no_size; tb = border false; te = Key k;
62    tc = tc; tu = tu; tx = tx; tn = tn;
63    ti = id ();
64 }
65
66 let mk_line b tl tc tu tx tn = {
67    ts = no_size; tb = border b; te = Line (b, tl);
68    tc = tc; tu = tu; tx = tx; tn = tn;
69    ti = id ();
70 }