diff -r a150dd0ebdd3 -r a5ff9cf61551 src/Pure/Thy/thy_header.scala --- a/src/Pure/Thy/thy_header.scala Fri Dec 30 16:23:32 2022 +0100 +++ b/src/Pure/Thy/thy_header.scala Fri Dec 30 20:26:28 2022 +0100 @@ -76,32 +76,31 @@ val bootstrap_global_theories = (Sessions.root_name :: (ml_roots ::: bootstrap_thys).map(_._2)).map(_ -> PURE) - private val Thy_File_Name = new Regex(""".*?([^/\\:]+)\.thy""") - private val Split_File_Name = new Regex("""(.*?)[/\\]*([^/\\:]+)""") - private val File_Name = new Regex(""".*?([^/\\:]+)""") - - def is_base_name(s: String): Boolean = - s != "" && !s.exists("/\\:".contains(_)) - - def split_file_name(s: String): Option[(String, String)] = - s match { - case Split_File_Name(s1, s2) => Some((s1, s2)) - case _ => None - } - def import_name(s: String): String = - s match { - case File_Name(name) if !File.is_thy(name) => name + Url.get_base_name(s) match { + case Some(name) if !File.is_thy(name) => name case _ => error("Malformed theory import: " + quote(s)) } + def get_thy_name(s: String): Option[String] = Url.get_base_name(s, suffix = ".thy") + + def list_thy_names(dir: Path): List[String] = { + val files = + try { File.read_dir(dir) } + catch { case ERROR(_) => Nil } + files.flatMap(get_thy_name) + } + def theory_name(s: String): String = - s match { - case Thy_File_Name(name) => bootstrap_name(name) - case File_Name(name) => - if (name == Sessions.root_name) name - else ml_roots.collectFirst({ case (a, b) if a == name => b }).getOrElse("") - case _ => "" + get_thy_name(s) match { + case Some(name) => bootstrap_name(name) + case None => + Url.get_base_name(s) match { + case Some(name) => + if (name == Sessions.root_name) name + else ml_roots.collectFirst({ case (a, b) if a == name => b }).getOrElse("") + case None => "" + } } def is_ml_root(theory: String): Boolean = @@ -113,13 +112,6 @@ def bootstrap_name(theory: String): String = bootstrap_thys.collectFirst({ case (a, b) if a == theory => b }).getOrElse(theory) - def try_read_dir(dir: Path): List[String] = { - val files = - try { File.read_dir(dir) } - catch { case ERROR(_) => Nil } - for { Thy_File_Name(name) <- files } yield name - } - /* parser */