Commit
+21 -13 +/-2 browse
1 | diff --git a/lib/cmd.ml b/lib/cmd.ml |
2 | index 8984065..e2d2843 100644 |
3 | --- a/lib/cmd.ml |
4 | +++ b/lib/cmd.ml |
5 | @@ -5,8 +5,8 @@ let cfg = Config.load |
6 | let get_notes = |
7 | List.map |
8 | ~f:(fun slug -> |
9 | - let data = In_channel.read_all (Slug.get_path slug) in |
10 | - Note.of_string ~data slug) |
11 | + let content = In_channel.read_all (Slug.get_path slug) in |
12 | + Note.of_string ~content slug) |
13 | (Slug.load cfg.state_dir) |
14 | |
15 | let filter_arg = |
16 | diff --git a/lib/note.ml b/lib/note.ml |
17 | index 8c4950f..5b0896a 100644 |
18 | --- a/lib/note.ml |
19 | +++ b/lib/note.ml |
20 | @@ -1,6 +1,11 @@ |
21 | open Core |
22 | |
23 | - type t = { frontmatter : Ezjsonm.t option; markdown : Omd.doc; slug : Slug.t } |
24 | + type t = { |
25 | + frontmatter : Ezjsonm.t option; |
26 | + content : string; |
27 | + markdown : Omd.doc; |
28 | + slug : Slug.t; |
29 | + } |
30 | |
31 | let build ?(tags = []) ?(content = "") ~title slug = |
32 | let frontmatter = |
33 | @@ -9,7 +14,7 @@ let build ?(tags = []) ?(content = "") ~title slug = |
34 | [ ("title", Ezjsonm.string title); ("tags", Ezjsonm.strings tags) ]) |
35 | in |
36 | let markdown = Omd.of_string content in |
37 | - { frontmatter; markdown; slug } |
38 | + { frontmatter; content; markdown; slug } |
39 | |
40 | let rec title_of_markdown (blocks : Omd.block list) : string = |
41 | match blocks with |
42 | @@ -83,7 +88,6 @@ let get_data t = |
43 | let data = extract_structured_data [] t.markdown in |
44 | Ezjsonm.list (fun value -> value) data |
45 | |
46 | - (* TODO: fix html conversion *) |
47 | let to_json t = |
48 | let frontmatter = |
49 | match t.frontmatter with |
50 | @@ -93,7 +97,7 @@ let to_json t = |
51 | Ezjsonm.dict |
52 | [ |
53 | ("frontmatter", frontmatter); |
54 | - ("content", Ezjsonm.string (Omd.to_html t.markdown)); |
55 | + ("content", Ezjsonm.string t.content); |
56 | ("data", get_data t); |
57 | ] |
58 | |
59 | @@ -105,11 +109,13 @@ let to_string t = |
60 | [ "---"; front_matter; "---"; Omd.to_html t.markdown ] |
61 | | None -> Omd.to_html t.markdown |
62 | |
63 | - let of_string ~data slug = |
64 | - let indexes = String.substr_index_all ~may_overlap:true ~pattern:"---" data in |
65 | + let of_string ~content slug = |
66 | + let indexes = |
67 | + String.substr_index_all ~may_overlap:true ~pattern:"---" content |
68 | + in |
69 | if List.length indexes >= 2 then |
70 | let meta_str = |
71 | - String.slice data (List.nth_exn indexes 0 + 3) (List.nth_exn indexes 1) |
72 | + String.slice content (List.nth_exn indexes 0 + 3) (List.nth_exn indexes 1) |
73 | in |
74 | let frontmatter : Ezjsonm.t = |
75 | match Yaml.of_string_exn meta_str with |
76 | @@ -122,14 +128,16 @@ let of_string ~data slug = |
77 | in |
78 | let markdown : Omd.doc = |
79 | Omd.of_string |
80 | - (String.slice data (List.nth_exn indexes 1 + 3) (String.length data)) |
81 | + (String.slice content |
82 | + (List.nth_exn indexes 1 + 3) |
83 | + (String.length content)) |
84 | in |
85 | let frontmatter = Some frontmatter in |
86 | - { frontmatter; markdown; slug } |
87 | + { frontmatter; content; markdown; slug } |
88 | else |
89 | let frontmatter = None in |
90 | - let markdown = Omd.of_string data in |
91 | - { frontmatter; markdown; slug } |
92 | + let markdown = Omd.of_string content in |
93 | + { frontmatter; content; markdown; slug } |
94 | |
95 | module Util = struct |
96 | let split_words str = |