# HG changeset patch # User wenzelm # Date 1527608748 -7200 # Node ID 2e168460a9c31de2020901a331128e1538d7e1c9 # Parent 5971199863eaab75efd6898fa2ff747b187ae370 more operations; more output; diff -r 5971199863ea -r 2e168460a9c3 src/Pure/Thy/thy_resources.scala --- a/src/Pure/Thy/thy_resources.scala Tue May 29 15:04:02 2018 +0200 +++ b/src/Pure/Thy/thy_resources.scala Tue May 29 17:45:48 2018 +0200 @@ -60,6 +60,7 @@ val version: Document.Version, val nodes: List[(Document.Node.Name, Protocol.Node_Status)]) { + def node_names: List[Document.Node.Name] = nodes.map(_._1) def ok: Boolean = nodes.forall({ case (_, st) => st.ok }) def messages(node_name: Document.Node.Name): List[(XML.Tree, Position.T)] = @@ -73,6 +74,13 @@ } yield (tree, pos)).toList } + def markup_to_XML(node_name: Document.Node.Name, + range: Text.Range = Text.Range.full, + elements: Markup.Elements = Markup.Elements.full): XML.Body = + { + state.markup_to_XML(version, node_name, range, elements) + } + def exports(node_name: Document.Node.Name): List[Export.Entry] = { val node = version.nodes(node_name) diff -r 5971199863ea -r 2e168460a9c3 src/Pure/Tools/dump.scala --- a/src/Pure/Tools/dump.scala Tue May 29 15:04:02 2018 +0200 +++ b/src/Pure/Tools/dump.scala Tue May 29 17:45:48 2018 +0200 @@ -13,17 +13,46 @@ sealed case class Aspect_Args( options: Options, progress: Progress, output_dir: Path, result: Thy_Resources.Theories_Result) + { + def write(node_name: Document.Node.Name, file_name: String, bytes: Bytes) + { + val path = output_dir + Path.basic(node_name.theory) + Path.basic(file_name) + Isabelle_System.mkdirs(path.dir) + Bytes.write(path, bytes) + } + + def write(node_name: Document.Node.Name, file_name: String, text: String) + { + write(node_name, file_name, Bytes(text)) + } + } sealed case class Aspect(name: String, description: String, operation: Aspect_Args => Unit) private val known_aspects = List( Aspect("list", "list theory nodes", - { case args => for ((node, _) <- args.result.nodes) args.progress.echo(node.toString) }) + { case args => + for (node_name <- args.result.node_names) args.progress.echo(node_name.toString) + }), + Aspect("messages", "output messages (YXML format)", + { case args => + for (node_name <- args.result.node_names) { + args.write(node_name, "messages.yxml", + YXML.string_of_body(args.result.messages(node_name).iterator.map(_._1).toList)) + } + }), + Aspect("markup", "PIDE markup (YXML format)", + { case args => + for (node_name <- args.result.node_names) { + args.write(node_name, "markup.yxml", + YXML.string_of_body(args.result.markup_to_XML(node_name))) + } + }) ) def show_aspects: String = - cat_lines(known_aspects.map(aspect => aspect.name + " - " + aspect.description)) + cat_lines(known_aspects.sortBy(_.name).map(aspect => aspect.name + " - " + aspect.description)) def the_aspect(name: String): Aspect = known_aspects.find(aspect => aspect.name == name) getOrElse