package forester

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

Source file Json_manifest_client.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
(*
 * SPDX-FileCopyrightText: 2024 The Forester Project Contributors
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 *)

open Forester_prelude
open Forester_compiler
open Forester_core

open struct
  module T = Types
  module PT = Plain_text_client
end

let render_tree ~dev ~(forest : State.t) (doc : T.content T.article) : Yojson.Safe.t option =
  let@ uri = Option.bind doc.frontmatter.uri in
  (* TODO : Check routing *)
  let route = Legacy_xml_client.route forest uri in
  let title_string =
    PT.string_of_content ~forest @@
      State.get_expanded_title doc.frontmatter forest
  in
  let title = `String title_string in
  let taxon =
    match doc.frontmatter.taxon with
    | None -> `Null
    | Some content ->
      `String (PT.string_of_content ~forest content)
  in
  let tags =
    `List
      begin
        let@ tag = List.filter_map @~ doc.frontmatter.tags in
        let@ content = Option.map @~ State.get_title_or_content_of_vertex tag forest in
        `String (PT.string_of_content ~forest content)
      end
  in
  let route = `String (URI.to_string route) in
  let metas =
    let meta_string meta = String.trim @@ PT.string_of_content ~forest meta in
    let meta_assoc (s, meta) = (s, `String (meta_string meta)) in
    `Assoc (List.map meta_assoc doc.frontmatter.metas)
  in
  let path =
    if dev then
      match doc.frontmatter.source_path with
      | Some p -> [("sourcePath", `String p)]
      | None -> []
    else []
  in
  (* TODO: filter out anonymous stuff *)
  Option.some @@
    let fm =
      path @
        [
          ("title", title);
          ("uri", `String (URI.display_path_string ~base: forest.config.url uri));
          ("taxon", taxon);
          ("tags", tags);
          ("route", route);
          ("metas", metas)
        ]
    in
    `Assoc fm
OCaml

Innovation. Community. Security.