src/Tools/VSCode/src/preview_panel.scala
author paulson <lp15@cam.ac.uk>
Wed, 24 Apr 2024 20:56:26 +0100
changeset 80149 40a3fc07a587
parent 76765 c654103e9c9d
permissions -rw-r--r--
More tidying of proofs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
66098
5aa9cb83e70e clarified modules;
wenzelm
parents: 66040
diff changeset
     1
/*  Title:      Tools/VSCode/src/preview_panel.scala
65977
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
     3
65983
d8c5603c1732 explicit preview request/response;
wenzelm
parents: 65977
diff changeset
     4
HTML document preview.
65977
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
     5
*/
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
     6
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
     7
package isabelle.vscode
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
     8
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
     9
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
    10
import isabelle._
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
    11
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
    12
import java.io.{File => JFile}
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
    13
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
    14
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 74770
diff changeset
    15
class Preview_Panel(resources: VSCode_Resources) {
65983
d8c5603c1732 explicit preview request/response;
wenzelm
parents: 65977
diff changeset
    16
  private val pending = Synchronized(Map.empty[JFile, Int])
d8c5603c1732 explicit preview request/response;
wenzelm
parents: 65977
diff changeset
    17
d8c5603c1732 explicit preview request/response;
wenzelm
parents: 65977
diff changeset
    18
  def request(file: JFile, column: Int): Unit =
d8c5603c1732 explicit preview request/response;
wenzelm
parents: 65977
diff changeset
    19
    pending.change(map => map + (file -> column))
65977
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
    20
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 74770
diff changeset
    21
  def flush(channel: Channel): Boolean = {
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    22
    pending.change_result { map =>
65983
d8c5603c1732 explicit preview request/response;
wenzelm
parents: 65977
diff changeset
    23
      val map1 =
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    24
        map.iterator.foldLeft(map) {
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    25
          case (m, (file, column)) =>
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    26
            resources.get_model(file) match {
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    27
              case Some(model) =>
76765
c654103e9c9d more robust Document.Pending_Edits: cover all nodes simulataneously, and thus support proper Snapshot.switch;
wenzelm
parents: 75979
diff changeset
    28
                val snapshot = resources.snapshot(model)
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    29
                if (snapshot.is_outdated) m
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    30
                else {
75979
29d813c431bb clarified signature;
wenzelm
parents: 75944
diff changeset
    31
                  val context =
29d813c431bb clarified signature;
wenzelm
parents: 75944
diff changeset
    32
                    Browser_Info.context(resources.sessions_structure,
29d813c431bb clarified signature;
wenzelm
parents: 75944
diff changeset
    33
                      elements = Browser_Info.extra_elements)
29d813c431bb clarified signature;
wenzelm
parents: 75944
diff changeset
    34
                  val document = context.preview_document(snapshot)
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    35
                  channel.write(LSP.Preview_Response(file, column, document.title, document.content))
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    36
                  m - file
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    37
                }
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    38
              case None => m - file
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    39
            }
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73055
diff changeset
    40
        }
65983
d8c5603c1732 explicit preview request/response;
wenzelm
parents: 65977
diff changeset
    41
      (map1.nonEmpty, map1)
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    42
    }
65977
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
    43
  }
c51b74be23b6 provide preview content on Scala side (similar to output);
wenzelm
parents:
diff changeset
    44
}