src/Pure/PIDE/line.scala
changeset 65197 8fada74d82be
parent 65196 e8760a98db78
child 65203 314246c6eeaa
equal deleted inserted replaced
65196:e8760a98db78 65197:8fada74d82be
   110     def text(lines: List[Line]): String = lines.mkString("", "\n", "")
   110     def text(lines: List[Line]): String = lines.mkString("", "\n", "")
   111   }
   111   }
   112 
   112 
   113   sealed case class Document(lines: List[Line])
   113   sealed case class Document(lines: List[Line])
   114   {
   114   {
   115     lazy val text_range: Text.Range = Text.Range(0, Document.length(lines))
   115     lazy val text_length: Text.Offset = Document.length(lines)
       
   116     def text_range: Text.Range = Text.Range(0, text_length)
       
   117 
   116     lazy val text: String = Document.text(lines)
   118     lazy val text: String = Document.text(lines)
   117 
   119 
   118     def try_get_text(range: Text.Range): Option[String] =
   120     def try_get_text(range: Text.Range): Option[String] =
   119       if (text_range.contains(range)) Some(text.substring(range.start, range.stop))
   121       if (text_range.contains(range)) Some(text.substring(range.start, range.stop))
   120       else None
   122       else None
   158             (0 /: lines.iterator.take(l)) { case (n, line) => n + line.text.length + 1 }
   160             (0 /: lines.iterator.take(l)) { case (n, line) => n + line.text.length + 1 }
   159           Some(line_offset + c)
   161           Some(line_offset + c)
   160         }
   162         }
   161         else None
   163         else None
   162       }
   164       }
   163       else if (l == n && c == 0) Some(text_range.length)
   165       else if (l == n && c == 0) Some(text_length)
   164       else None
   166       else None
   165     }
   167     }
   166 
   168 
   167     def change(remove: Range, insert: String): Option[(List[Text.Edit], Document)] =
   169     def change(remove: Range, insert: String): Option[(List[Text.Edit], Document)] =
   168     {
   170     {