src/Pure/General/symbol.scala
changeset 64617 01e50039edc9
parent 64615 fd0d6de380c6
child 64682 7e119f32276a
equal deleted inserted replaced
64616:dc3ec40fe41b 64617:01e50039edc9
   127     }
   127     }
   128 
   128 
   129   def explode(text: CharSequence): List[Symbol] = iterator(text).toList
   129   def explode(text: CharSequence): List[Symbol] = iterator(text).toList
   130 
   130 
   131   def length(text: CharSequence): Int = iterator(text).length
   131   def length(text: CharSequence): Int = iterator(text).length
   132   object Length extends Line.Length { def apply(text: String): Int = length(text) }
   132 
       
   133   object Length extends isabelle.Length
       
   134   {
       
   135     def apply(text: String): Int = length(text)
       
   136     def offset(text: String, i: Int): Option[Text.Offset] =
       
   137       if (i <= 0 || iterator(text).forall(s => s.length == 1)) isabelle.Length.offset(text, i)
       
   138       else if (i <= length(text)) Some(iterator(text).take(i).mkString.length)
       
   139       else None
       
   140   }
   133 
   141 
   134 
   142 
   135   /* decoding offsets */
   143   /* decoding offsets */
   136 
   144 
   137   object Index
   145   object Index