]> git.mdlowis.com Git - archive/tide-ocaml.git/commitdiff
added cursor type and manipulation functions
authorMichael D. Lowis <mike@mdlowis.com>
Tue, 7 Nov 2017 03:44:54 +0000 (22:44 -0500)
committerMichael D. Lowis <mike@mdlowis.com>
Tue, 7 Nov 2017 03:44:54 +0000 (22:44 -0500)
docs/Buf.Cursor.html
docs/Buf.html
docs/index_types.html
docs/index_values.html
docs/type_Buf.Cursor.html
lib/buf.ml
lib/buf.mli

index d8783bebe4dd93e1a9545eedc75ffed86ca2d895..0123ebb50a9f3cf31c4401cc2863abe619cddd49 100644 (file)
 
 <pre><span class="keyword">module</span> Cursor: <code class="code">sig</code> <a href="Buf.Cursor.html">..</a> <code class="code">end</code></pre><hr width="100%">
 
-<pre><code><span id="TYPEt"><span class="keyword">type</span> <code class="type"></code>t</span> = {</code></pre><table class="typetable">
+<pre><code><span id="TYPEcsr"><span class="keyword">type</span> <code class="type"></code>csr</span> = {</code></pre><table class="typetable">
 <tr>
 <td align="left" valign="top" >
 <code>&nbsp;&nbsp;</code></td>
 <td align="left" valign="top" >
-<code><span id="TYPEELTt.start">start</span>&nbsp;: <code class="type">int</code>;</code></td>
+<code><span class="keyword">mutable&nbsp;</span><span id="TYPEELTcsr.start">start</span>&nbsp;: <code class="type">int</code>;</code></td>
 
 </tr>
 <tr>
 <td align="left" valign="top" >
 <code>&nbsp;&nbsp;</code></td>
 <td align="left" valign="top" >
-<code><span id="TYPEELTt.stop">stop</span>&nbsp;: <code class="type">int</code>;</code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span id="TYPEELTt.column">column</span>&nbsp;: <code class="type">int</code>;</code></td>
+<code><span class="keyword">mutable&nbsp;</span><span id="TYPEELTcsr.stop">stop</span>&nbsp;: <code class="type">int</code>;</code></td>
 
 </tr></table>
 }
 
 
 
-<pre><span id="VALmake"><span class="keyword">val</span> make</span> : <code class="type">int -> int -> <a href="Buf.Cursor.html#TYPEt">t</a></code></pre>
-<pre><span id="VALclone"><span class="keyword">val</span> clone</span> : <code class="type"><a href="Buf.Cursor.html#TYPEt">t</a> -> <a href="Buf.Cursor.html#TYPEt">t</a></code></pre></body></html>
\ No newline at end of file
+<pre><span id="TYPEt"><span class="keyword">type</span> <code class="type"></code>t</span> = <code class="type"><a href="Buf.Cursor.html#TYPEcsr">csr</a></code> </pre>
+
+
+<pre><span id="VALmake"><span class="keyword">val</span> make</span> : <code class="type"><a href="Buf.html#TYPEbuf">Buf.buf</a> -> int -> <a href="Buf.Cursor.html#TYPEcsr">csr</a></code></pre>
+<pre><span id="VALgoto"><span class="keyword">val</span> goto</span> : <code class="type"><a href="Buf.html#TYPEbuf">Buf.buf</a> -> <a href="Buf.Cursor.html#TYPEcsr">csr</a> -> int -> unit</code></pre>
+<pre><span id="VALnextc"><span class="keyword">val</span> nextc</span> : <code class="type"><a href="Buf.html#TYPEbuf">Buf.buf</a> -> <a href="Buf.Cursor.html#TYPEcsr">csr</a> -> unit</code></pre>
+<pre><span id="VALprevc"><span class="keyword">val</span> prevc</span> : <code class="type"><a href="Buf.html#TYPEbuf">Buf.buf</a> -> <a href="Buf.Cursor.html#TYPEcsr">csr</a> -> unit</code></pre>
+<pre><span id="VALnextln"><span class="keyword">val</span> nextln</span> : <code class="type"><a href="Buf.html#TYPEbuf">Buf.buf</a> -> <a href="Buf.Cursor.html#TYPEcsr">csr</a> -> unit</code></pre>
+<pre><span id="VALprevln"><span class="keyword">val</span> prevln</span> : <code class="type"><a href="Buf.html#TYPEbuf">Buf.buf</a> -> <a href="Buf.Cursor.html#TYPEcsr">csr</a> -> unit</code></pre></body></html>
\ No newline at end of file
index 5a61b537a4c9e85a21c2e078376f35508c744215..9a579ca72164ac3e8f952b8b2b1d1d950fb2b8d1 100644 (file)
 
 <pre><span class="keyword">module</span> Buf: <code class="code">sig</code> <a href="Buf.html">..</a> <code class="code">end</code></pre><hr width="100%">
 
-<pre><span class="keyword">module</span> <a href="Buf.Cursor.html">Cursor</a>: <code class="code">sig</code> <a href="Buf.Cursor.html">..</a> <code class="code">end</code></pre>
-<pre><code><span id="TYPEt"><span class="keyword">type</span> <code class="type"></code>t</span> = {</code></pre><table class="typetable">
+<pre><code><span id="TYPEbuf"><span class="keyword">type</span> <code class="type"></code>buf</span> = {</code></pre><table class="typetable">
 <tr>
 <td align="left" valign="top" >
 <code>&nbsp;&nbsp;</code></td>
 <td align="left" valign="top" >
-<code><span id="TYPEELTt.path">path</span>&nbsp;: <code class="type">string</code>;</code></td>
+<code><span id="TYPEELTbuf.path">path</span>&nbsp;: <code class="type">string</code>;</code></td>
 
 </tr>
 <tr>
 <td align="left" valign="top" >
 <code>&nbsp;&nbsp;</code></td>
 <td align="left" valign="top" >
-<code><span id="TYPEELTt.rope">rope</span>&nbsp;: <code class="type"><a href="Rope.html#TYPEt">Rope.t</a></code>;</code></td>
+<code><span id="TYPEELTbuf.rope">rope</span>&nbsp;: <code class="type"><a href="Rope.html#TYPEt">Rope.t</a></code>;</code></td>
 
 </tr></table>
 }
 
 
 
-<pre><span id="VALempty"><span class="keyword">val</span> empty</span> : <code class="type"><a href="Buf.html#TYPEt">t</a></code></pre>
-<pre><span id="VALload"><span class="keyword">val</span> load</span> : <code class="type">string -> <a href="Buf.html#TYPEt">t</a></code></pre>
-<pre><span id="VALrope"><span class="keyword">val</span> rope</span> : <code class="type"><a href="Buf.html#TYPEt">t</a> -> <a href="Rope.html#TYPEt">Rope.t</a></code></pre>
-<pre><span id="VALiter_from"><span class="keyword">val</span> iter_from</span> : <code class="type">(<a href="Rope.html#TYPErune">Rope.rune</a> -> bool) -> <a href="Buf.html#TYPEt">t</a> -> int -> unit</code></pre>
-<pre><span id="VALiteri_from"><span class="keyword">val</span> iteri_from</span> : <code class="type">(int -> <a href="Rope.html#TYPErune">Rope.rune</a> -> bool) -> <a href="Buf.html#TYPEt">t</a> -> int -> unit</code></pre></body></html>
\ No newline at end of file
+<pre><span id="TYPEt"><span class="keyword">type</span> <code class="type"></code>t</span> = <code class="type"><a href="Buf.html#TYPEbuf">buf</a></code> </pre>
+
+
+<pre><span id="VALempty"><span class="keyword">val</span> empty</span> : <code class="type"><a href="Buf.html#TYPEbuf">buf</a></code></pre>
+<pre><span id="VALload"><span class="keyword">val</span> load</span> : <code class="type">string -> <a href="Buf.html#TYPEbuf">buf</a></code></pre>
+<pre><span id="VALrope"><span class="keyword">val</span> rope</span> : <code class="type"><a href="Buf.html#TYPEbuf">buf</a> -> <a href="Rope.html#TYPEt">Rope.t</a></code></pre>
+<pre><span id="VALiter_from"><span class="keyword">val</span> iter_from</span> : <code class="type">(<a href="Rope.html#TYPErune">Rope.rune</a> -> bool) -> <a href="Buf.html#TYPEbuf">buf</a> -> int -> unit</code></pre>
+<pre><span id="VALiteri_from"><span class="keyword">val</span> iteri_from</span> : <code class="type">(int -> <a href="Rope.html#TYPErune">Rope.rune</a> -> bool) -> <a href="Buf.html#TYPEbuf">buf</a> -> int -> unit</code></pre>
+<pre><span class="keyword">module</span> <a href="Buf.Cursor.html">Cursor</a>: <code class="code">sig</code> <a href="Buf.Cursor.html">..</a> <code class="code">end</code></pre></body></html>
\ No newline at end of file
index d213abe90f059ca17ba80f1222d43374dac6b0e1..f14859495c05d3e26a8adbd68cd82bb8f451b625 100644 (file)
 &nbsp;</div>
 <h1>Index of types</h1>
 <table>
+<tr><td align="left"><br>B</td></tr>
+<tr><td><a href="Buf.html#TYPEbuf">buf</a> [<a href="Buf.html">Buf</a>]</td>
+<td></td></tr>
+<tr><td align="left"><br>C</td></tr>
+<tr><td><a href="Buf.Cursor.html#TYPEcsr">csr</a> [<a href="Buf.Cursor.html">Buf.Cursor</a>]</td>
+<td></td></tr>
 <tr><td align="left"><br>F</td></tr>
 <tr><td><a href="X11.html#TYPEfont">font</a> [<a href="X11.html">X11</a>]</td>
 <td></td></tr>
index c5f39108255fecd01a4d6b02dfa23de122f69d76..5748025f66c091e33ce4063e1fd33dc19be40408 100644 (file)
@@ -41,8 +41,6 @@
 <td></td></tr>
 <tr><td><a href="Rope.html#VALcheck_index">check_index</a> [<a href="Rope.html">Rope</a>]</td>
 <td></td></tr>
-<tr><td><a href="Buf.Cursor.html#VALclone">clone</a> [<a href="Buf.Cursor.html">Buf.Cursor</a>]</td>
-<td></td></tr>
 <tr><td><a href="Cfg.html#VALclrvar">clrvar</a> [<a href="Cfg.html">Cfg</a>]</td>
 <td></td></tr>
 <tr><td><a href="Cfg.html#VALcmd_tags">cmd_tags</a> [<a href="Cfg.html">Cfg</a>]</td>
 <td></td></tr>
 <tr><td><a href="Draw.html#VALglyph_width">glyph_width</a> [<a href="Draw.html">Draw</a>]</td>
 <td></td></tr>
+<tr><td><a href="Buf.Cursor.html#VALgoto">goto</a> [<a href="Buf.Cursor.html">Buf.Cursor</a>]</td>
+<td></td></tr>
 <tr><td><a href="Cfg.Color.html#VALgutter_nor">gutter_nor</a> [<a href="Cfg.Color.html">Cfg.Color</a>]</td>
 <td></td></tr>
 <tr><td><a href="Cfg.Color.html#VALgutter_sel">gutter_sel</a> [<a href="Cfg.Color.html">Cfg.Color</a>]</td>
 <td></td></tr>
 <tr><td><a href="Draw.Cursor.html#VALnext_line">next_line</a> [<a href="Draw.Cursor.html">Draw.Cursor</a>]</td>
 <td></td></tr>
+<tr><td><a href="Buf.Cursor.html#VALnextc">nextc</a> [<a href="Buf.Cursor.html">Buf.Cursor</a>]</td>
+<td></td></tr>
 <tr><td><a href="Rope.html#VALnextc">nextc</a> [<a href="Rope.html">Rope</a>]</td>
 <td></td></tr>
+<tr><td><a href="Buf.Cursor.html#VALnextln">nextln</a> [<a href="Buf.Cursor.html">Buf.Cursor</a>]</td>
+<td></td></tr>
 <tr><td><a href="Rope.html#VALnextln">nextln</a> [<a href="Rope.html">Rope</a>]</td>
 <td></td></tr>
 <tr><td><a href="Cfg.Color.Syntax.html#VALnormal">normal</a> [<a href="Cfg.Color.Syntax.html">Cfg.Color.Syntax</a>]</td>
 <td></td></tr>
 <tr><td><a href="Cfg.Color.Syntax.html#VALpreproc">preproc</a> [<a href="Cfg.Color.Syntax.html">Cfg.Color.Syntax</a>]</td>
 <td></td></tr>
+<tr><td><a href="Buf.Cursor.html#VALprevc">prevc</a> [<a href="Buf.Cursor.html">Buf.Cursor</a>]</td>
+<td></td></tr>
 <tr><td><a href="Rope.html#VALprevc">prevc</a> [<a href="Rope.html">Rope</a>]</td>
 <td></td></tr>
+<tr><td><a href="Buf.Cursor.html#VALprevln">prevln</a> [<a href="Buf.Cursor.html">Buf.Cursor</a>]</td>
+<td></td></tr>
 <tr><td><a href="Rope.html#VALprevln">prevln</a> [<a href="Rope.html">Rope</a>]</td>
 <td></td></tr>
 <tr><td><a href="Cfg.Color.Syntax.html#VALprocedure">procedure</a> [<a href="Cfg.Color.Syntax.html">Cfg.Color.Syntax</a>]</td>
index b2a156d9938cfcf3c93a29d892ad1d801638eba5..ca872d554e3357623afd74fcecf6b71ab81b89c6 100644 (file)
 </head>
 <body>
 <code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t&nbsp;=&nbsp;{&nbsp;start&nbsp;:&nbsp;int;&nbsp;stop&nbsp;:&nbsp;int;&nbsp;column&nbsp;:&nbsp;int;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;make&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buf</span>.<span class="constructor">Cursor</span>.t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;clone&nbsp;:&nbsp;<span class="constructor">Buf</span>.<span class="constructor">Cursor</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buf</span>.<span class="constructor">Cursor</span>.t<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;csr&nbsp;=&nbsp;{&nbsp;<span class="keyword">mutable</span>&nbsp;start&nbsp;:&nbsp;int;&nbsp;<span class="keyword">mutable</span>&nbsp;stop&nbsp;:&nbsp;int;&nbsp;}<br>
+&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t&nbsp;=&nbsp;<span class="constructor">Buf</span>.<span class="constructor">Cursor</span>.csr<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;make&nbsp;:&nbsp;<span class="constructor">Buf</span>.buf&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buf</span>.<span class="constructor">Cursor</span>.csr<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;goto&nbsp;:&nbsp;<span class="constructor">Buf</span>.buf&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buf</span>.<span class="constructor">Cursor</span>.csr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;nextc&nbsp;:&nbsp;<span class="constructor">Buf</span>.buf&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buf</span>.<span class="constructor">Cursor</span>.csr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;prevc&nbsp;:&nbsp;<span class="constructor">Buf</span>.buf&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buf</span>.<span class="constructor">Cursor</span>.csr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;nextln&nbsp;:&nbsp;<span class="constructor">Buf</span>.buf&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buf</span>.<span class="constructor">Cursor</span>.csr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
+&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;prevln&nbsp;:&nbsp;<span class="constructor">Buf</span>.buf&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Buf</span>.<span class="constructor">Cursor</span>.csr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
 <span class="keyword">end</span></code></body></html>
\ No newline at end of file
index 6c8d245ce617e8081dd98ccf422be4f33903c0c7..f2e6c7b10d72f44b73cc3c84966bf8d2e79c379e 100644 (file)
@@ -1,21 +1,8 @@
-module Cursor = struct
-  type t = {
-    start : int;
-    stop : int;
-    column : int;
-  }
-
-  let make start stop =
-    { start = start; stop = stop; column = 0 }
-
-  let clone csr =
-    { start = csr.start; stop = csr.stop; column = csr.column }
-end
-
-type t = {
+type buf = {
   path : string;
   rope : Rope.t
 }
+type t = buf
 
 let empty =
   { path = ""; rope = Rope.empty }
@@ -31,3 +18,34 @@ let iter_from fn buf i =
 
 let iteri_from fn buf i =
   Rope.iteri_from fn buf.rope i
+
+module Cursor = struct
+  type csr = {
+    mutable start : int;
+    mutable stop : int
+  }
+
+  type t = csr
+
+  let make buf idx =
+    { start = 0; stop = (Rope.limit_index buf.rope idx) }
+
+  let goto buf csr idx =
+    csr.stop <- (Rope.limit_index buf.rope idx)
+
+  let getc buf csr =
+    Rope.getc buf.rope csr.stop
+
+  let nextc buf csr =
+    csr.stop <- (Rope.nextc buf.rope csr.stop)
+
+  let prevc buf csr =
+    csr.stop <- (Rope.prevc buf.rope csr.stop)
+
+  let nextln buf csr =
+    csr.stop <- (Rope.nextln buf.rope csr.stop)
+
+  let prevln buf csr =
+    csr.stop <- (Rope.prevln buf.rope csr.stop)
+end
+
index fae0030767a86b7a9fae19e4656f5b4fa9ad92db..6562edfcb92706e11f8ccbcb5b6a142f6e819eea 100644 (file)
@@ -1,17 +1,18 @@
-(*
-module Cursor : sig
-  type t
-  val to_offset : t -> int
-  val next_rune : t -> t
-  val prev_rune : t -> t
-  val next_line : t -> t
-  val prev_line : t -> t
-end
-*)
-
-type t
+type buf
+type t = buf
 val empty : t
 val load : string -> t
 val rope : t -> Rope.t
 val iter_from : (int -> bool) -> t -> int -> unit
 val iteri_from : (int -> int -> bool) -> t -> int -> unit
+
+module Cursor : sig
+  type t
+  val make : buf -> int -> t
+  val goto : buf -> t -> int -> unit
+  val getc : buf -> t -> int
+  val nextc : buf -> t -> unit
+  val prevc : buf -> t -> unit
+  val nextln : buf -> t -> unit
+  val prevln : buf -> t -> unit
+end