author | wenzelm |
Fri, 03 Nov 2023 19:00:00 +0100 | |
changeset 78892 | aaf2cf463e9a |
parent 76003 | a84e9594ec7e |
child 82142 | 508a673c87ac |
permissions | -rw-r--r-- |
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
1 |
/* Title: Tools/jEdit/src/isabelle_session.scala |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
2 |
Author: Makarius |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
3 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
4 |
Access Isabelle session information via virtual file-system. |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
5 |
*/ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
6 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
7 |
package isabelle.jedit |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
8 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
9 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
10 |
import isabelle._ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
11 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
12 |
import java.awt.Component |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
13 |
import java.io.InputStream |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
14 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
15 |
import org.gjt.sp.jedit.View |
69763 | 16 |
import org.gjt.sp.jedit.io.{VFS => JEdit_VFS, VFSFile} |
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
17 |
import org.gjt.sp.jedit.browser.VFSBrowser |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
18 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
19 |
|
75393 | 20 |
object Isabelle_Session { |
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
21 |
/* virtual file-system */ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
22 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
23 |
val vfs_prefix = "isabelle-session:" |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
24 |
|
69765 | 25 |
class Session_Entry(name: String, path: String, marker: String) |
75393 | 26 |
extends VFSFile(name, path, vfs_prefix + name, VFSFile.FILE, 0L, false) { |
69765 | 27 |
override def getPathMarker: String = marker |
28 |
||
69763 | 29 |
override def getExtendedAttribute(att: String): String = |
30 |
if (att == JEdit_VFS.EA_SIZE) null |
|
31 |
else super.getExtendedAttribute(att) |
|
32 |
} |
|
33 |
||
75393 | 34 |
class VFS |
35 |
extends Isabelle_VFS( |
|
36 |
vfs_prefix, |
|
37 |
read = true, |
|
38 |
browse = true, |
|
39 |
low_latency = true, |
|
40 |
non_awt_session = true |
|
41 |
) { |
|
42 |
override def _listFiles( |
|
43 |
vfs_session: AnyRef, |
|
44 |
url: String, |
|
45 |
component: Component |
|
46 |
): Array[VFSFile] = { |
|
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
47 |
explode_url(url, component = component) match { |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
48 |
case None => null |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
49 |
case Some(elems) => |
75817 | 50 |
val sessions = JEdit_Sessions.sessions_structure() |
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
51 |
elems match { |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
52 |
case Nil => |
76002 | 53 |
sessions.relevant_chapters.sortBy(_.name).map(ch => make_entry(ch.name, is_dir = true)).toArray |
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
54 |
case List(chapter) => |
76002 | 55 |
sessions.relevant_chapters.find(_.name == chapter) match { |
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
56 |
case None => null |
76003 | 57 |
case Some(ch) => |
58 |
ch.sessions.map { session => |
|
75999
b831a0bdd751
clarified signature of Sessions.Session: chapter_defs: vs. known_chapters (in declaration order) vs. chapters (covered by visible sessions);
wenzelm
parents:
75884
diff
changeset
|
59 |
val pos = sessions(session).pos |
76003 | 60 |
val name = ch.name + "/" + session |
69763 | 61 |
val path = |
75999
b831a0bdd751
clarified signature of Sessions.Session: chapter_defs: vs. known_chapters (in declaration order) vs. chapters (covered by visible sessions);
wenzelm
parents:
75884
diff
changeset
|
62 |
Position.File.unapply(pos) match { |
69763 | 63 |
case Some(path) => File.platform_path(path) |
64 |
case None => null |
|
65 |
} |
|
69765 | 66 |
val marker = |
75999
b831a0bdd751
clarified signature of Sessions.Session: chapter_defs: vs. known_chapters (in declaration order) vs. chapters (covered by visible sessions);
wenzelm
parents:
75884
diff
changeset
|
67 |
Position.Line.unapply(pos) match { |
69765 | 68 |
case Some(line) => "+line:" + line |
69 |
case None => null |
|
70 |
} |
|
71 |
new Session_Entry(name, path, marker) |
|
75999
b831a0bdd751
clarified signature of Sessions.Session: chapter_defs: vs. known_chapters (in declaration order) vs. chapters (covered by visible sessions);
wenzelm
parents:
75884
diff
changeset
|
72 |
}.toArray |
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
73 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
74 |
case _ => null |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
75 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
76 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
77 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
78 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
79 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
80 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
81 |
/* open browser */ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
82 |
|
75393 | 83 |
def open_browser(view: View): Unit = { |
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
84 |
val path = |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
85 |
PIDE.maybe_snapshot(view) match { |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
86 |
case None => "" |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
87 |
case Some(snapshot) => |
75884
3d8b37b1d798
clarified signature: avoid object-oriented HTML_Context;
wenzelm
parents:
75817
diff
changeset
|
88 |
val sessions_structure = JEdit_Sessions.sessions_structure() |
3d8b37b1d798
clarified signature: avoid object-oriented HTML_Context;
wenzelm
parents:
75817
diff
changeset
|
89 |
val session = sessions_structure.theory_qualifier(snapshot.node_name) |
70253 | 90 |
val chapter = |
75884
3d8b37b1d798
clarified signature: avoid object-oriented HTML_Context;
wenzelm
parents:
75817
diff
changeset
|
91 |
sessions_structure.get(session) match { |
70253 | 92 |
case Some(info) => info.chapter |
93 |
case None => Sessions.UNSORTED |
|
94 |
} |
|
95 |
chapter |
|
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
96 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
97 |
VFSBrowser.browseDirectory(view, vfs_prefix + path) |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
98 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
99 |
} |