| author | wenzelm | 
| Mon, 07 Dec 2020 16:24:39 +0100 | |
| changeset 72842 | 6aae62f55c2b | 
| parent 71647 | 7b0656fa783b | 
| child 73340 | 0ffcad1f6130 | 
| permissions | -rw-r--r-- | 
| 57453 | 1 | /* Title: Pure/General/output.scala | 
| 56782 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 2 | Author: Makarius | 
| 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 3 | |
| 62930 
51ac6bc389e8
shared output primitives of physical/virtual Pure;
 wenzelm parents: 
62553diff
changeset | 4 | Isabelle output channels. | 
| 56782 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 5 | */ | 
| 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 6 | |
| 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 7 | package isabelle | 
| 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 8 | |
| 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 9 | |
| 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 10 | object Output | 
| 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 11 | {
 | 
| 59671 
9715eb8e9408
more precise position information in Isabelle/Scala, with YXML markup as in Isabelle/ML;
 wenzelm parents: 
57453diff
changeset | 12 | def clean_yxml(msg: String): String = | 
| 62938 | 13 |     try { XML.content(Protocol_Message.clean_reports(YXML.parse_body(msg))) }
 | 
| 59671 
9715eb8e9408
more precise position information in Isabelle/Scala, with YXML markup as in Isabelle/ML;
 wenzelm parents: 
57453diff
changeset | 14 |     catch { case ERROR(_) => msg }
 | 
| 56782 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 15 | |
| 59671 
9715eb8e9408
more precise position information in Isabelle/Scala, with YXML markup as in Isabelle/ML;
 wenzelm parents: 
57453diff
changeset | 16 | def writeln_text(msg: String): String = clean_yxml(msg) | 
| 65828 | 17 | |
| 71647 | 18 |   def warning_prefix(s: String): String = Library.prefix_lines("### ", s)
 | 
| 19 | def warning_text(msg: String): String = warning_prefix(clean_yxml(msg)) | |
| 65828 | 20 | |
| 71647 | 21 |   def error_prefix(s: String): String = Library.prefix_lines("*** ", s)
 | 
| 22 | def error_message_text(msg: String): String = error_prefix(clean_yxml(msg)) | |
| 59671 
9715eb8e9408
more precise position information in Isabelle/Scala, with YXML markup as in Isabelle/ML;
 wenzelm parents: 
57453diff
changeset | 23 | |
| 71100 
f31903cc57b0
clarified Console_Progress.echo: include empty lines as in other Progress instances, especially relevant for Progress.bash (e.g. "isabelle phabricator ./bin/config help");
 wenzelm parents: 
67178diff
changeset | 24 | def writeln(msg: String, stdout: Boolean = false, include_empty: Boolean = false) | 
| 62553 | 25 |   {
 | 
| 71100 
f31903cc57b0
clarified Console_Progress.echo: include empty lines as in other Progress instances, especially relevant for Progress.bash (e.g. "isabelle phabricator ./bin/config help");
 wenzelm parents: 
67178diff
changeset | 26 |     if (msg.nonEmpty || include_empty) {
 | 
| 67178 | 27 | if (stdout) Console.print(writeln_text(msg) + "\n") | 
| 28 | else Console.err.print(writeln_text(msg) + "\n") | |
| 62553 | 29 | } | 
| 30 | } | |
| 31 | ||
| 71100 
f31903cc57b0
clarified Console_Progress.echo: include empty lines as in other Progress instances, especially relevant for Progress.bash (e.g. "isabelle phabricator ./bin/config help");
 wenzelm parents: 
67178diff
changeset | 32 | def warning(msg: String, stdout: Boolean = false, include_empty: Boolean = false) | 
| 62553 | 33 |   {
 | 
| 71100 
f31903cc57b0
clarified Console_Progress.echo: include empty lines as in other Progress instances, especially relevant for Progress.bash (e.g. "isabelle phabricator ./bin/config help");
 wenzelm parents: 
67178diff
changeset | 34 |     if (msg.nonEmpty || include_empty) {
 | 
| 67178 | 35 | if (stdout) Console.print(warning_text(msg) + "\n") | 
| 36 | else Console.err.print(warning_text(msg) + "\n") | |
| 62553 | 37 | } | 
| 38 | } | |
| 39 | ||
| 71100 
f31903cc57b0
clarified Console_Progress.echo: include empty lines as in other Progress instances, especially relevant for Progress.bash (e.g. "isabelle phabricator ./bin/config help");
 wenzelm parents: 
67178diff
changeset | 40 | def error_message(msg: String, stdout: Boolean = false, include_empty: Boolean = false) | 
| 62553 | 41 |   {
 | 
| 71100 
f31903cc57b0
clarified Console_Progress.echo: include empty lines as in other Progress instances, especially relevant for Progress.bash (e.g. "isabelle phabricator ./bin/config help");
 wenzelm parents: 
67178diff
changeset | 42 |     if (msg.nonEmpty || include_empty) {
 | 
| 67178 | 43 | if (stdout) Console.print(error_message_text(msg) + "\n") | 
| 44 | else Console.err.print(error_message_text(msg) + "\n") | |
| 62553 | 45 | } | 
| 46 | } | |
| 56782 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: diff
changeset | 47 | } |