src/Pure/General/length.scala
changeset 64617 01e50039edc9
child 64618 c81bd30839a6
equal deleted inserted replaced
64616:dc3ec40fe41b 64617:01e50039edc9
       
     1 /*  Title:      Pure/General/length.scala
       
     2     Author:     Makarius
       
     3 
       
     4 Text length wrt. encoding.
       
     5 */
       
     6 
       
     7 package isabelle
       
     8 
       
     9 
       
    10 trait Length
       
    11 {
       
    12   def apply(text: String): Int
       
    13   def offset(text: String, i: Int): Option[Text.Offset]
       
    14 }
       
    15 
       
    16 object Length extends Length
       
    17 {
       
    18   def apply(text: String): Int = text.length
       
    19   def offset(text: String, i: Int): Option[Text.Offset] =
       
    20     if (0 <= i && i <= text.length) Some(i) else None
       
    21 
       
    22   def encoding(name: String): Length =
       
    23     name match {
       
    24       case "UTF-8" => UTF8.Length
       
    25       case "UTF-16" => Length
       
    26       case "codepoints" => Codepoint.Length
       
    27       case "symbols" => Symbol.Length
       
    28       case _ =>
       
    29         error("Bad text encoding: " + name + " (expected UTF-8, UTF-16, codepoints, symbols)")
       
    30     }
       
    31 }