summaryrefslogtreecommitdiff
path: root/helix-core
diff options
context:
space:
mode:
Diffstat (limited to 'helix-core')
-rw-r--r--helix-core/.gitignore2
-rw-r--r--helix-core/Cargo.toml11
-rw-r--r--helix-core/src/lib.rs5
-rw-r--r--helix-core/src/position.rs27
-rw-r--r--helix-core/src/range.rs9
5 files changed, 54 insertions, 0 deletions
diff --git a/helix-core/.gitignore b/helix-core/.gitignore
new file mode 100644
index 00000000..96ef6c0b
--- /dev/null
+++ b/helix-core/.gitignore
@@ -0,0 +1,2 @@
+/target
+Cargo.lock
diff --git a/helix-core/Cargo.toml b/helix-core/Cargo.toml
new file mode 100644
index 00000000..446e8e42
--- /dev/null
+++ b/helix-core/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "helix-core"
+version = "0.1.0"
+authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+ropey = "1.1.0"
+# slab = "0.4.2"
diff --git a/helix-core/src/lib.rs b/helix-core/src/lib.rs
new file mode 100644
index 00000000..71a66030
--- /dev/null
+++ b/helix-core/src/lib.rs
@@ -0,0 +1,5 @@
+mod position;
+mod range;
+
+use position::Position;
+use range::Range;
diff --git a/helix-core/src/position.rs b/helix-core/src/position.rs
new file mode 100644
index 00000000..8c82b83b
--- /dev/null
+++ b/helix-core/src/position.rs
@@ -0,0 +1,27 @@
+/// Represents a single point in a text buffer. Zero indexed.
+#[derive(Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
+pub struct Position {
+ pub row: usize,
+ pub col: usize,
+}
+
+impl Position {
+ pub fn new(row: usize, col: usize) -> Self {
+ Self { row, col }
+ }
+
+ pub fn is_zero(self) -> bool {
+ self.row == 0 && self.col == 0
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn test_ordering() {
+ // (0, 5) is less than (1, 0 w v f)
+ assert!(Position::new(0, 5) < Position::new(1, 0));
+ }
+}
diff --git a/helix-core/src/range.rs b/helix-core/src/range.rs
new file mode 100644
index 00000000..46411664
--- /dev/null
+++ b/helix-core/src/range.rs
@@ -0,0 +1,9 @@
+use crate::Position;
+
+#[derive(Clone, Copy, PartialEq, Eq)]
+pub struct Range {
+ pub start: Position,
+ pub end: Position,
+}
+
+// range traversal iters