package forester

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file DSL.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
(*
 * SPDX-FileCopyrightText: 2024 The Forester Project Contributors
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 *)

(* At the moment, this module is mostly for marking up test cases *)

open Forester_core

open struct module T = Types end

let txt str = T.Text str

let p content = T.prim `P @@ T.Content content
let ul content = T.prim `Ul @@ T.Content content
let ol content = T.prim `Ol @@ T.Content content
let li content = T.prim `Li @@ T.Content content
let em content = T.prim `Em @@ T.Content content
let strong content = T.prim `Strong @@ T.Content content
let code content = T.prim `Code @@ T.Content content
let blockquote content = T.prim `Blockquote @@ T.Content content
let pre content = T.prim `Pre @@ T.Content content
let figure content = T.prim `Figure @@ T.Content content
let figcaption content = T.prim `Figcaption @@ T.Content content
let cdata content = T.CDATA content
let contextual_number href = T.Contextual_number (URI.of_string_exn href)
let katex m content = T.KaTeX (m, T.Content content)
let route_of_uri uri = T.Route_of_uri uri

module Datalog = struct
  open Datalog_expr
  let premises ~rel ~args = {rel; args}
  let prop premises conclusion = {premises; conclusion}
  let const v = Const v
end

let datalog_script script = T.Datalog_script script

let section
    ~mainmatter
    ?(frontmatter = T.default_frontmatter ())
    ?(flags = T.default_section_flags)
    ()
  =
  T.Section
    {
      frontmatter;
      mainmatter = T.Content mainmatter;
      flags;
    }

let xml_elt (prefix, uname) content =
  let prefix = Option.value ~default: "" prefix in
  let qname = T.{prefix; uname; xmlns = None} in
  T.Xml_elt
    {
      name = qname;
      attrs = [];
      content = T.Content content
    }

let transclude href =
  T.Transclude
    T.{
      href = URI.of_string_exn href;
      target = Mainmatter
    }

let artefact content =
  T.Artefact
    T.{
      hash = "";
      content = Content content;
      sources = []
    }

let link href content =
  T.Link
    {
      href = URI.of_string_exn href;
      content = T.Content content;
    }

module Code = struct
  open Code
  open Asai.Range

  let import_private = Fun.compose (locate_opt None) @@ Code.import_private
  let import_public = Fun.compose (locate_opt None) @@ Code.import_public

  let inline_math = Fun.compose (locate_opt None) @@ Code.inline_math
  let display_math = Fun.compose (locate_opt None) @@ Code.display_math
  let parens = Fun.compose (locate_opt None) @@ Code.parens
  let squares = Fun.compose (locate_opt None) @@ Code.squares
  let braces = Fun.compose (locate_opt None) @@ Code.braces

  let ident i = locate_opt None @@ Ident i

  let ul = ident ["ul"]
  let li = ident ["li"]
  let text str = locate_opt None @@ Text str
  let verbatim str = locate_opt None @@ Verbatim str
  let math mode nodes = locate_opt None @@ Math (mode, nodes)
  let ident path = locate_opt None @@ Ident path
  let scope nodes = locate_opt None @@ Scope nodes
  let open_ path = locate_opt None @@ Open path
  let group delim nodes = locate_opt None @@ Group (delim, nodes)
  let def p b t = locate_opt None @@ Def (p, b, t)
  let object_ t = locate_opt None @@ Code.Object t
end

module Syn = struct
  open Forester_core.Syn
  open Asai.Range
  let fun_ b t = locate_opt None @@ Fun (b, t)
  let prim p = locate_opt None @@ Prim p

  let text s = locate_opt None @@ Text s

  let parens e = locate_opt None @@ Group (Parens, e)
  let squares e = locate_opt None @@ Group (Squares, e)
  let braces e = locate_opt None @@ Group (Braces, e)
  let tex_cs w = locate_opt None @@ TeX_cs (Word w)
end
OCaml

Innovation. Community. Security.