module A = Array
module F = Filename
module L = List
module P = Printf
module S = String
module O = Options
module T = Table
module M = Matrix
let xhtbl = "xhtbl"
let i = 0
let myself = F.basename (Sys.argv.(0))
let msg = P.sprintf "This file was generated by %s, do not edit" myself
let compose uri ext =
if uri.[pred (S.length uri)] = '/' then uri else
try
let i = S.index uri '#' in
let uri, fragment = S.sub uri 0 i, S.sub uri i (S.length uri - i) in
uri ^ ext ^ fragment
with Not_found -> uri ^ ext
let border cell =
let str = S.make 4 'n' in
if cell.M.cb.T.n then str.[0] <- 's';
if cell.M.cb.T.e then str.[1] <- 's';
if cell.M.cb.T.s then str.[2] <- 's';
if cell.M.cb.T.w then str.[3] <- 's';
str :: cell.M.cc
let text baseuri ext = function
| T.Plain s -> s
| T.Link (true, uri, s) -> P.sprintf "%s" uri s
| T.Link (false, uri, s) ->
let uri = !O.baseuri ^ baseuri ^ compose uri ext in
P.sprintf "%s" uri s
let name cell =
if cell.M.cn = "" then "" else P.sprintf " id=\"%s\"" cell.M.cn
let key cell =
if cell.M.ck = [] then "
" else S.concat "" (L.map (text cell.M.cu cell.M.cx) cell.M.ck)
let ind i = S.make (2 * i) ' '
let out_cell och cell =
let cc = xhtbl :: border cell in
P.fprintf och "%s