clarified PIDE/line range conversions;
authorThomas Lindae <thomas.lindae@in.tum.de>
Sun, 30 Jun 2024 15:32:32 +0200
changeset 81061 fe9ae6b67c29
parent 81060 159d1b09fe66
child 81062 b2df8bf17071
clarified PIDE/line range conversions;
src/Pure/PIDE/line.scala
src/Tools/VSCode/src/vscode_model.scala
--- a/src/Pure/PIDE/line.scala	Sun Jun 30 15:32:26 2024 +0200
+++ b/src/Pure/PIDE/line.scala	Sun Jun 30 15:32:32 2024 +0200
@@ -118,12 +118,15 @@
 
   sealed case class Document(lines: List[Line]) {
     lazy val text_length: Text.Offset = Document.length(lines)
-    def text_range: Text.Range = Text.Range(0, text_length)
+    def full_range: Text.Range = Text.Range(0, text_length)
 
     lazy val text: String = Document.text(lines)
 
     def get_text(range: Text.Range): Option[String] =
-      if (text_range.contains(range)) Some(range.substring(text)) else None
+      if (full_range.contains(range)) Some(range.substring(text)) else None
+
+    def get_text(range: Line.Range): Option[String] =
+      text_range(range).flatMap(get_text)
 
     override def toString: String = text
 
@@ -170,6 +173,12 @@
       else None
     }
 
+    def text_range(line_range: Range): Option[Text.Range] =
+      for {
+        start <- offset(line_range.start)
+        stop <- offset(line_range.stop)
+      } yield Text.Range(start, stop)
+
     def change(remove: Range, insert: String): Option[(List[Text.Edit], Document)] = {
       for {
         edit_start <- offset(remove.start)
--- a/src/Tools/VSCode/src/vscode_model.scala	Sun Jun 30 15:32:26 2024 +0200
+++ b/src/Tools/VSCode/src/vscode_model.scala	Sun Jun 30 15:32:32 2024 +0200
@@ -29,7 +29,7 @@
   sealed case class Content(node_name: Document.Node.Name, doc: Line.Document) {
     override def toString: String = doc.toString
     def text_length: Text.Offset = doc.text_length
-    def text_range: Text.Range = doc.text_range
+    def text_range: Text.Range = doc.full_range
     def text: String = doc.text
 
     lazy val bytes: Bytes = Bytes(Symbol.encode(text))