64617
|
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 |
}
|