···1import { EditorView, basicSetup } from "codemirror"
2-import { EditorState, RangeSet } from "@codemirror/state"
3-import { hoverTooltip, Decoration, WidgetType } from "@codemirror/view"
4import * as lint from "@codemirror/lint"
5import * as autocomplete from "@codemirror/autocomplete"
6import * as dark from "@codemirror/theme-one-dark"
···13joo_global_object.__CM__rangeSet = RangeSet;
14joo_global_object.__CM__decoration = Decoration;
15joo_global_object.__CM__widgetType = WidgetType;
016joo_global_object.__CM__lint = lint;
17joo_global_object.__CM__autocomplete = autocomplete;
18joo_global_object.__CM__hoverTooltip = hoverTooltip;
019joo_global_object.__CM__basic_setup = basicSetup
20joo_global_object.__CM__dark = dark;
21joo_global_object.__CM__stream_parser = language;
···1import { EditorView, basicSetup } from "codemirror"
2+import { EditorState, Compartment, RangeSet } from "@codemirror/state"
3+import { hoverTooltip, lineNumbers, Decoration, WidgetType } from "@codemirror/view"
4import * as lint from "@codemirror/lint"
5import * as autocomplete from "@codemirror/autocomplete"
6import * as dark from "@codemirror/theme-one-dark"
···13joo_global_object.__CM__rangeSet = RangeSet;
14joo_global_object.__CM__decoration = Decoration;
15joo_global_object.__CM__widgetType = WidgetType;
16+joo_global_object.__CM__compartment = Compartment;
17joo_global_object.__CM__lint = lint;
18joo_global_object.__CM__autocomplete = autocomplete;
19joo_global_object.__CM__hoverTooltip = hoverTooltip;
20+joo_global_object.__CM__lineNumbers = lineNumbers;
21joo_global_object.__CM__basic_setup = basicSetup
22joo_global_object.__CM__dark = dark;
23joo_global_object.__CM__stream_parser = language;
+1
src/code_mirror.ml
···1module Editor = Editor
2module Text = Text
3module Extension = Extension
04module Decoration = Decoration
···1module Editor = Editor
2module Text = Text
3module Extension = Extension
4+module Compartment = Compartment
5module Decoration = Decoration
+15
src/compartment.ml
···000000000000000
···1+type t = Jv.t
2+3+include (Jv.Id : Jv.CONV with type t := t)
4+5+let compartment = Jv.get Jv.global "__CM__compartment"
6+let make () = Jv.new' compartment [||]
7+8+let of' t extensions =
9+ Jv.call t "of" [| Jv.of_list Extension.to_jv extensions |] |> Extension.of_jv
10+11+let reconfigure t ext =
12+ let state_effect =
13+ Jv.call t "reconfigure" [| Jv.of_list Extension.to_jv ext |]
14+ in
15+ Jv.obj [| ("effects", state_effect) |] |> Editor.View.Transaction.of_jv
+8
src/compartment.mli
···00000000
···1+type t
2+(** Extensions compartments for the editor *)
3+4+include Jv.CONV with type t := t
5+6+val make : unit -> t
7+val of' : t -> Extension.t list -> Extension.t
8+val reconfigure : t -> Extension.t list -> Editor.View.Transaction.t
+15
src/editor.ml
···128 let upd = State.set_doc (state t) doc in
129 let _ = Jv.call t "update" [| Jv.of_jv_array [| upd |] |] in
130 ()
000000000000000131end
···128 let upd = State.set_doc (state t) doc in
129 let _ = Jv.call t "update" [| Jv.of_jv_array [| upd |] |] in
130 ()
131+132+ let line_numbers fmt =
133+ let fmt x _ = Jv.to_int x |> fmt |> Jv.of_string in
134+ let config = Jv.obj [| ("formatNumber", Jv.callback ~arity:2 fmt) |] in
135+ Jv.call Jv.global "__CM__lineNumbers" [| config |] |> Extension.of_jv
136+137+ module Transaction = struct
138+ type t = Jv.t
139+140+ include (Jv.Id : Jv.CONV with type t := t)
141+ end
142+143+ let dispatch t transaction =
144+ let _ = Jv.call t "dispatch" [| Transaction.to_jv transaction |] in
145+ ()
146end
+10-1
src/editor.mli
···83 val update_listener : unit -> (Update.t -> unit, Jv.t) State.facet
84 val decorations : unit -> (Decoration.Range_set.t, Jv.t) State.facet
85 val request_measure : t -> unit
086 val line_wrapping : unit -> Extension.t
87- val set_doc : t -> Jstr.t -> unit
0000000088end
···83 val update_listener : unit -> (Update.t -> unit, Jv.t) State.facet
84 val decorations : unit -> (Decoration.Range_set.t, Jv.t) State.facet
85 val request_measure : t -> unit
86+ val set_doc : t -> Jstr.t -> unit
87 val line_wrapping : unit -> Extension.t
88+ val line_numbers : (int -> string) -> Extension.t
89+90+ module Transaction : sig
91+ type t
92+93+ include Jv.CONV with type t := t
94+ end
95+96+ val dispatch : t -> Transaction.t -> unit
97end