author | wenzelm |
Sun, 12 Nov 2017 16:56:39 +0100 | |
changeset 67057 | 0d8e4e777973 |
parent 67056 | e35ae3eeec93 |
permissions | -rw-r--r-- |
67016 | 1 |
/* Title: Pure/Thy/thy_document_model.scala |
2 |
Author: Makarius |
|
3 |
||
67055 | 4 |
Document model for theory files: no blobs, no edits, no overlays. |
67016 | 5 |
*/ |
6 |
||
7 |
package isabelle |
|
8 |
||
9 |
||
10 |
object Thy_Document_Model |
|
11 |
{ |
|
67057
0d8e4e777973
theory nodes are never visible: avoid prints, which are not covered by node_consolidated;
wenzelm
parents:
67056
diff
changeset
|
12 |
def read_file(session: Session, node_name: Document.Node.Name): Thy_Document_Model = |
67016 | 13 |
{ |
67055 | 14 |
val path = node_name.path |
67016 | 15 |
if (!node_name.is_theory) error("Not a theory file: " + path) |
67057
0d8e4e777973
theory nodes are never visible: avoid prints, which are not covered by node_consolidated;
wenzelm
parents:
67056
diff
changeset
|
16 |
new Thy_Document_Model(session, node_name, File.read(path)) |
67016 | 17 |
} |
18 |
} |
|
19 |
||
20 |
final class Thy_Document_Model private( |
|
21 |
val session: Session, |
|
22 |
val node_name: Document.Node.Name, |
|
67057
0d8e4e777973
theory nodes are never visible: avoid prints, which are not covered by node_consolidated;
wenzelm
parents:
67056
diff
changeset
|
23 |
val text: String) extends Document.Model |
67016 | 24 |
{ |
25 |
/* content */ |
|
26 |
||
27 |
def get_text(range: Text.Range): Option[String] = |
|
28 |
if (0 <= range.start && range.stop <= text.length) Some(range.substring(text)) else None |
|
29 |
||
30 |
def get_blob: Option[Document.Blob] = None |
|
31 |
||
32 |
def bibtex_entries: List[Text.Info[String]] = Nil |
|
33 |
||
34 |
||
35 |
/* header */ |
|
36 |
||
37 |
def node_header: Document.Node.Header = |
|
38 |
resources.check_thy_reader(node_name, Scan.char_reader(text)) |
|
39 |
||
67056 | 40 |
def node_required: Boolean = true |
41 |
||
67016 | 42 |
|
43 |
/* perspective */ |
|
44 |
||
45 |
def node_perspective: Document.Node.Perspective_Text = |
|
67057
0d8e4e777973
theory nodes are never visible: avoid prints, which are not covered by node_consolidated;
wenzelm
parents:
67056
diff
changeset
|
46 |
Document.Node.Perspective(node_required, Text.Perspective.full, Document.Node.Overlays.empty) |
67016 | 47 |
|
48 |
||
67056 | 49 |
/* edits */ |
50 |
||
51 |
def node_edits(old: Option[Thy_Document_Model]): List[Document.Edit_Text] = |
|
52 |
{ |
|
53 |
val text_edits = |
|
54 |
if (old.isEmpty) Text.Edit.inserts(0, text) |
|
55 |
else Text.Edit.replace(0, old.get.text, text) |
|
56 |
||
67057
0d8e4e777973
theory nodes are never visible: avoid prints, which are not covered by node_consolidated;
wenzelm
parents:
67056
diff
changeset
|
57 |
if (text_edits.isEmpty) Nil |
67056 | 58 |
else node_edits(node_header, text_edits, node_perspective) |
59 |
} |
|
60 |
||
61 |
||
67016 | 62 |
/* prover session */ |
63 |
||
64 |
def resources: Resources = session.resources |
|
65 |
||
66 |
def is_stable: Boolean = true |
|
67 |
def snapshot(): Document.Snapshot = session.snapshot(node_name, pending_edits = Nil) |
|
68 |
} |