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)) |