@@ -2,127 +2,136 @@ open Mdx.Util.Result.Infix
2
2
open Cmdliner
3
3
4
4
let raw t =
5
- let cell = Notebook_t. {
6
- cell_type = `Raw ;
7
- metadata = {
8
- collapsed = None ;
9
- scrolled = None ;
10
- } ;
11
- source = String. concat " \n " t ;
12
- outputs = None ;
13
- execution_count = None ;
14
- } in
5
+ let cell =
6
+ Notebook_t.
7
+ {
8
+ cell_type = `Raw ;
9
+ metadata = { collapsed = None ; scrolled = None } ;
10
+ source = String. concat " \n " t ;
11
+ outputs = None ;
12
+ execution_count = None ;
13
+ }
14
+ in
15
15
cell
16
16
17
17
let txt t =
18
- let cell = Notebook_t. {
19
- cell_type = `Markdown ;
20
- metadata = {
21
- collapsed = None ;
22
- scrolled = None ;
23
- } ;
24
- source = t ;
25
- outputs = None ;
26
- execution_count = None ;
27
- } in
18
+ let cell =
19
+ Notebook_t.
20
+ {
21
+ cell_type = `Markdown ;
22
+ metadata = { collapsed = None ; scrolled = None } ;
23
+ source = t ;
24
+ outputs = None ;
25
+ execution_count = None ;
26
+ }
27
+ in
28
28
cell
29
29
30
30
let execution_count = ref 1
31
31
32
32
let ocaml contents =
33
- let cell = Notebook_t. {
34
- cell_type = `Code ;
35
- metadata = {
36
- collapsed = None ;
37
- scrolled = None ;
38
- } ;
39
- source = String. concat " \n " contents ;
40
- outputs = Some [] ;
41
- execution_count = ( Some ! execution_count);
42
- } in
33
+ let cell =
34
+ Notebook_t.
35
+ {
36
+ cell_type = `Code ;
37
+ metadata = { collapsed = None ; scrolled = None } ;
38
+ source = String. concat " \n " contents ;
39
+ outputs = Some [] ;
40
+ execution_count = Some ! execution_count ;
41
+ }
42
+ in
43
43
incr execution_count;
44
44
cell
45
45
46
-
47
46
let toplevel x =
48
- let cell = Notebook_t. {
49
- cell_type = `Code ;
50
- metadata = {
51
- collapsed = None ;
52
- scrolled = None ;
53
- };
54
- source = String. concat " \n " x.Mdx.Toplevel. command;
55
- outputs = Some [] ;
56
- execution_count = (Some ! execution_count);
47
+ let cell =
48
+ Notebook_t.
49
+ {
50
+ cell_type = `Code ;
51
+ metadata = { collapsed = None ; scrolled = None };
52
+ source = String. concat " \n " x.Mdx.Toplevel. command;
53
+ outputs = Some [] ;
54
+ execution_count = Some ! execution_count;
57
55
}
58
56
in
59
57
incr execution_count;
60
58
cell
61
59
62
-
63
60
let run _setup (`Syntax syntax ) (`File file ) =
64
61
let cells = ref [] in
65
62
Mdx. run ?syntax file ~f: (fun _file_contents items ->
66
- let syntax = match syntax with
63
+ let syntax =
64
+ match syntax with
67
65
| Some s -> s
68
- | None -> (match Mdx.Syntax. infer ~file with
69
- | Some s -> s
70
- | None -> failwith " Couldn't get syntax" ) in
71
- let rec collapse_text = function
72
- | Mdx. Text x :: Mdx. Text y :: xs ->
73
- collapse_text (Mdx. Text (x ^ " \n " ^ y) :: xs)
74
- | Mdx. Section _ as s :: Mdx. Text y :: xs ->
75
- let s = Mdx. to_string [s] in
76
- collapse_text (Mdx. Text (s ^ " \n " ^ y) :: xs)
77
- | Mdx. Section _ as s :: xs ->
78
- let s = Mdx. to_string [s] in
79
- collapse_text (Mdx. Text s :: xs)
80
- | x ::ys -> x :: collapse_text ys
81
- | [] -> []
82
- in
83
- List. iter (function
84
- | Mdx. Text "" -> ()
85
- | Mdx. Text x ->
86
- cells := (txt x) :: ! cells
87
- | Mdx. Block {value =OCaml _ ; contents; _} ->
88
- cells := (ocaml contents) :: ! cells
89
- | Mdx. Block {value =Toplevel _ ; contents; file; column; line; _ } ->
90
- let blocks = Mdx.Toplevel. of_lines ~syntax ~file ~column ~line contents in
91
- let newcells = List. rev_map toplevel blocks in
92
- cells := newcells @ ! cells
93
- | Mdx. Block {value =Raw _ ; contents; _} ->
94
- cells := (raw contents) :: ! cells
95
- | x -> failwith (Printf. sprintf " internal error, cannot handle: %s" (Mdx. to_string [x]))
96
- ) (collapse_text items);
97
- " OK"
98
- ) >> ! fun () -> () ;
99
- let notebook = Notebook_t. {
100
- metadata = {
101
- kernelspec = {
102
- display_name = " OCaml 4.07.1" ;
103
- language = " OCaml" ;
104
- name = " ocaml-jupyter" ;
105
- };
106
- language_info = {
107
- name = " OCaml" ;
108
- version = " 4.07.1" ;
109
- codemirror_mode = Some " text/x-ocaml" ;
110
- file_extension = " .ml" ;
111
- mimetype = " text/x-ocaml" ;
112
- nbconverter_exporter = None ;
113
- pygments_lexer = " OCaml" ;
114
- };
115
- };
116
- nbformat = 4 ;
117
- nbformat_minor = 2 ;
118
- cells = List. rev ! cells;
119
- } in
66
+ | None -> (
67
+ match Mdx.Syntax. infer ~file with
68
+ | Some s -> s
69
+ | None -> failwith " Couldn't get syntax" )
70
+ in
71
+ let rec collapse_text = function
72
+ | Mdx. Text x :: Mdx. Text y :: xs ->
73
+ collapse_text (Mdx. Text (x ^ " \n " ^ y) :: xs)
74
+ | (Mdx. Section _ as s ) :: Mdx. Text y :: xs ->
75
+ let s = Mdx. to_string [ s ] in
76
+ collapse_text (Mdx. Text (s ^ " \n " ^ y) :: xs)
77
+ | (Mdx. Section _ as s ) :: xs ->
78
+ let s = Mdx. to_string [ s ] in
79
+ collapse_text (Mdx. Text s :: xs)
80
+ | x :: ys -> x :: collapse_text ys
81
+ | [] -> []
82
+ in
83
+ List. iter
84
+ (function
85
+ | Mdx. Text "" -> ()
86
+ | Mdx. Text x -> cells := txt x :: ! cells
87
+ | Mdx. Block { value = OCaml _ ; contents; _ } ->
88
+ cells := ocaml contents :: ! cells
89
+ | Mdx. Block { value = Toplevel _ ; contents; file; column; line; _ } ->
90
+ let blocks =
91
+ Mdx.Toplevel. of_lines ~syntax ~file ~column ~line contents
92
+ in
93
+ let newcells = List. rev_map toplevel blocks in
94
+ cells := newcells @ ! cells
95
+ | Mdx. Block { value = Raw _ ; contents; _ } ->
96
+ cells := raw contents :: ! cells
97
+ | x ->
98
+ failwith
99
+ (Printf. sprintf " internal error, cannot handle: %s"
100
+ (Mdx. to_string [ x ])))
101
+ (collapse_text items);
102
+ " OK" )
103
+ >> ! fun () ->
104
+ () ;
105
+ let notebook =
106
+ Notebook_t.
107
+ {
108
+ metadata =
109
+ {
110
+ kernelspec =
111
+ {
112
+ display_name = " OCaml 4.07.1" ;
113
+ language = " OCaml" ;
114
+ name = " ocaml-jupyter" ;
115
+ };
116
+ language_info =
117
+ {
118
+ name = " OCaml" ;
119
+ version = " 4.07.1" ;
120
+ codemirror_mode = Some " text/x-ocaml" ;
121
+ file_extension = " .ml" ;
122
+ mimetype = " text/x-ocaml" ;
123
+ nbconverter_exporter = None ;
124
+ pygments_lexer = " OCaml" ;
125
+ };
126
+ };
127
+ nbformat = 4 ;
128
+ nbformat_minor = 2 ;
129
+ cells = List. rev ! cells;
130
+ }
131
+ in
120
132
Printf. fprintf stdout " %s" (Notebook_j. string_of_notebook notebook);
121
133
0
122
134
123
-
124
-
125
- let cmd: int Term. t * Term. info =
135
+ let cmd : int Term.t * Term.info =
126
136
let doc = " Convert an mdx file to a jupyter notebook." in
127
- Term. (pure run $ Cli. setup $ Cli. syntax $ Cli. file ),
128
- Term. info " jupyter" ~doc
137
+ (Term. (pure run $ Cli. setup $ Cli. syntax $ Cli. file), Term. info " jupyter" ~doc )
0 commit comments