1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
(** *)
open Types
module XR = Xtmpl.Rewrite
let init_modules stog =
let modules = Engine.modules () in
List.map
(fun (name, f) ->
Log.info (fun m -> m "Initializing module %s" name);
f stog
)
modules
let init_common ?(set_fields=fun stog -> stog) stogs =
let stog = Types.merge_stogs stogs in
let stog = set_fields stog in
let stog = Info.remove_not_published stog in
let stog = Info.compute stog in
stog
let from_dirs ?set_fields dirs =
let stogs = List.map Io.read_stog dirs in
let stog = init_common ?set_fields stogs in
let def_style =
(("", Tags.default_style), XR.atts_empty,
XR.from_string
"<link href=\"<site-url/>/style.css\" rel=\"stylesheet\" type=\"text/css\"/>"
)
in
let stog = { stog with stog_defs = stog.stog_defs @ [ def_style ] } in
stog
let from_files ?set_fields files =
let dir = Sys.getcwd () in
let load_doc file =
let file =
if Filename.is_relative file then
Filename.concat dir file
else
file
in
let dir = Filename.dirname file in
let stog = Types.create_stog ~source: `File dir in
let stog = { stog with stog_tmpl_dirs = [dir] } in
let doc = Io.doc_of_file stog file in
Types.add_doc stog doc
in
let stogs = List.map load_doc files in
let remove_add_docs stog =
{ stog with
stog_levels = Types.Str_map.add
Html.module_name ["add-docs", []] stog.stog_levels ;
}
in
let set_fields =
match set_fields with
None -> remove_add_docs
| Some f -> fun stog -> remove_add_docs (f stog)
in
let stog = init_common ~set_fields stogs in
let stog = Io.read_modules stog in
let def_style =
(("", Tags.default_style), XR.atts_empty,
XR.from_string
"<style><include file=\"<doc-type/>-style.css\" raw=\"true\"/></style>"
)
in
let stog = { stog with stog_defs = stog.stog_defs @ [ def_style ] } in
stog