src/Pure/PIDE/resources.scala
changeset 72775 0a94eb91190d
parent 72774 51c0f79d6eed
child 72776 27a464537fb0
equal deleted inserted replaced
72774:51c0f79d6eed 72775:0a94eb91190d
    58     File_Format.registry.get(snapshot.node_name).flatMap(_.make_preview(snapshot))
    58     File_Format.registry.get(snapshot.node_name).flatMap(_.make_preview(snapshot))
    59 
    59 
    60   def is_hidden(name: Document.Node.Name): Boolean =
    60   def is_hidden(name: Document.Node.Name): Boolean =
    61     !name.is_theory || name.theory == Sessions.root_name || File_Format.registry.is_theory(name)
    61     !name.is_theory || name.theory == Sessions.root_name || File_Format.registry.is_theory(name)
    62 
    62 
    63   def thy_path(path: Path): Path = path.ext("thy")
       
    64 
       
    65 
    63 
    66   /* file-system operations */
    64   /* file-system operations */
    67 
    65 
    68   def append(dir: String, source_path: Path): String =
    66   def append(dir: String, source_path: Path): String =
    69     (Path.explode(dir) + source_path).expand.implode
    67     (Path.explode(dir) + source_path).expand.implode
   145       theory
   143       theory
   146     else Long_Name.qualify(qualifier, theory)
   144     else Long_Name.qualify(qualifier, theory)
   147 
   145 
   148   def find_theory_node(theory: String): Option[Document.Node.Name] =
   146   def find_theory_node(theory: String): Option[Document.Node.Name] =
   149   {
   147   {
   150     val thy_file = thy_path(Path.basic(Long_Name.base_name(theory)))
   148     val thy_file = Thy_Header.thy_path(Path.basic(Long_Name.base_name(theory)))
   151     val session = session_base.theory_qualifier(theory)
   149     val session = session_base.theory_qualifier(theory)
   152     val dirs =
   150     val dirs =
   153       sessions_structure.get(session) match {
   151       sessions_structure.get(session) match {
   154         case Some(info) => info.dirs
   152         case Some(info) => info.dirs
   155         case None => Nil
   153         case None => Nil
   159   }
   157   }
   160 
   158 
   161   def import_name(qualifier: String, dir: String, s: String): Document.Node.Name =
   159   def import_name(qualifier: String, dir: String, s: String): Document.Node.Name =
   162   {
   160   {
   163     val theory = theory_name(qualifier, Thy_Header.import_name(s))
   161     val theory = theory_name(qualifier, Thy_Header.import_name(s))
   164     def theory_node = make_theory_node(dir, thy_path(Path.explode(s)), theory)
   162     def theory_node = make_theory_node(dir, Thy_Header.thy_path(Path.explode(s)), theory)
   165 
   163 
   166     if (!Thy_Header.is_base_name(s)) theory_node
   164     if (!Thy_Header.is_base_name(s)) theory_node
   167     else if (session_base.loaded_theory(theory)) loaded_theory_node(theory)
   165     else if (session_base.loaded_theory(theory)) loaded_theory_node(theory)
   168     else {
   166     else {
   169       find_theory_node(theory) match {
   167       find_theory_node(theory) match {
   219   def check_thy(node_name: Document.Node.Name, reader: Reader[Char],
   217   def check_thy(node_name: Document.Node.Name, reader: Reader[Char],
   220     start: Token.Pos = Token.Pos.command, strict: Boolean = true): Document.Node.Header =
   218     start: Token.Pos = Token.Pos.command, strict: Boolean = true): Document.Node.Header =
   221   {
   219   {
   222     if (node_name.is_theory && reader.source.length > 0) {
   220     if (node_name.is_theory && reader.source.length > 0) {
   223       try {
   221       try {
   224         val header = Thy_Header.read(reader, start = start, strict = strict)
   222         val header = Thy_Header.read(node_name, reader, start = start, strict = strict)
   225 
       
   226         val base_name = node_name.theory_base_name
       
   227         if (Long_Name.is_qualified(header.name)) {
       
   228           error("Bad theory name " + quote(header.name) + " with qualification" +
       
   229             Position.here(header.pos))
       
   230         }
       
   231         if (base_name != header.name) {
       
   232           error("Bad theory name " + quote(header.name) +
       
   233             " for file " + thy_path(Path.basic(base_name)) + Position.here(header.pos) +
       
   234             Completion.report_theories(header.pos, List(base_name)))
       
   235         }
       
   236 
   223 
   237         val imports_pos =
   224         val imports_pos =
   238           header.imports_pos.map({ case (s, pos) =>
   225           header.imports_pos.map({ case (s, pos) =>
   239             val name = import_name(node_name, s)
   226             val name = import_name(node_name, s)
   240             if (Sessions.exclude_theory(name.theory_base_name))
   227             if (Sessions.exclude_theory(name.theory_base_name))