package stog

  1. Overview
  2. Docs
Static web site compiler, able to handle blog posts as well as regular pages or any XML document in general

Install

Dune Dependency

Authors

Maintainers

Sources

stog-1.1.0.tar.bz2
md5=03c4072037bf05666a249d02954396c3
sha512=299fdb7036c92bd5317726ed20f982123f57897e0d8611dfae383251a6d793e63d372c6628742412d803224a3155ab021f79550fada2e980c7d6179d90f8e43f

doc/src/stog/init.ml.html

Source file init.ml

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
(*********************************************************************************)
(*                Stog                                                           *)
(*                                                                               *)
(*    Copyright (C) 2012-2024 INRIA All rights reserved.                         *)
(*    Author: Maxence Guesdon, INRIA Saclay                                      *)
(*                                                                               *)
(*    This program is free software; you can redistribute it and/or modify       *)
(*    it under the terms of the GNU General Public License as                    *)
(*    published by the Free Software Foundation, version 3 of the License.       *)
(*                                                                               *)
(*    This program is distributed in the hope that it will be useful,            *)
(*    but WITHOUT ANY WARRANTY; without even the implied warranty of             *)
(*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the               *)
(*    GNU General Public License for more details.                               *)
(*                                                                               *)
(*    You should have received a copy of the GNU General Public                  *)
(*    License along with this program; if not, write to the Free Software        *)
(*    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA                   *)
(*    02111-1307  USA                                                            *)
(*                                                                               *)
(*    As a special exception, you have permission to link this program           *)
(*    with the OCaml compiler and distribute executables, as long as you         *)
(*    follow the requirements of the GNU GPL in regard to all of the             *)
(*    software in the executable aside from the OCaml compiler.                  *)
(*                                                                               *)
(*    Contact: Maxence.Guesdon@inria.fr                                          *)
(*                                                                               *)
(*********************************************************************************)

(** *)

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=\"&lt;site-url/&gt;/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 =
    (* remove add-docs levels from base module *)
    { 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=\"&lt;doc-type/&gt;-style.css\" raw=\"true\"/></style>"
    )
  in
  let stog = { stog with stog_defs = stog.stog_defs @ [ def_style ] } in
  stog
OCaml

Innovation. Community. Security.