moved message markup into Scala layer -- reduced redundancy;
authorwenzelm
Fri, 16 Jan 2009 22:56:12 +0100
changeset 29522793766d4c1b5
parent 29521 736bf7117153
child 29527 7178c11b6bc1
moved message markup into Scala layer -- reduced redundancy;
src/Pure/General/markup.ML
src/Pure/General/markup.scala
src/Pure/Tools/isabelle_process.ML
src/Pure/Tools/isabelle_process.scala
     1.1 --- a/src/Pure/General/markup.ML	Fri Jan 16 22:54:11 2009 +0100
     1.2 +++ b/src/Pure/General/markup.ML	Fri Jan 16 22:56:12 2009 +0100
     1.3 @@ -95,17 +95,7 @@
     1.4    val editN: string val edit: string -> string -> T
     1.5    val pidN: string
     1.6    val sessionN: string
     1.7 -  val classN: string
     1.8 -  val messageN: string val message: string -> T
     1.9    val promptN: string val prompt: T
    1.10 -  val writelnN: string
    1.11 -  val priorityN: string
    1.12 -  val tracingN: string
    1.13 -  val warningN: string
    1.14 -  val errorN: string
    1.15 -  val debugN: string
    1.16 -  val initN: string
    1.17 -  val statusN: string
    1.18    val no_output: output * output
    1.19    val default_output: T -> output * output
    1.20    val add_mode: string -> (T -> output * output) -> unit
    1.21 @@ -284,19 +274,8 @@
    1.22  val pidN = "pid";
    1.23  val sessionN = "session";
    1.24  
    1.25 -val classN = "class";
    1.26 -val (messageN, message) = markup_string "message" classN;
    1.27 -
    1.28  val (promptN, prompt) = markup_elem "prompt";
    1.29  
    1.30 -val writelnN = "writeln";
    1.31 -val priorityN = "priority";
    1.32 -val tracingN = "tracing";
    1.33 -val warningN = "warning";
    1.34 -val errorN = "error";
    1.35 -val debugN = "debug";
    1.36 -val initN = "init";
    1.37 -val statusN = "status";
    1.38  
    1.39  
    1.40  (* print mode operations *)
     2.1 --- a/src/Pure/General/markup.scala	Fri Jan 16 22:54:11 2009 +0100
     2.2 +++ b/src/Pure/General/markup.scala	Fri Jan 16 22:56:12 2009 +0100
     2.3 @@ -131,6 +131,21 @@
     2.4    val SESSION = "session"
     2.5  
     2.6    val MESSAGE = "message"
     2.7 +  val CLASS = "class"
     2.8 +
     2.9 +  val INIT = "init"
    2.10 +  val STATUS = "status"
    2.11 +  val WRITELN = "writeln"
    2.12 +  val PRIORITY = "priority"
    2.13 +  val TRACING = "tracing"
    2.14 +  val WARNING = "warning"
    2.15 +  val ERROR = "error"
    2.16 +  val DEBUG = "debug"
    2.17 +  val SYSTEM = "system"
    2.18 +  val STDIN = "stdin"
    2.19 +  val STDOUT = "stdout"
    2.20 +  val SIGNAL = "signal"
    2.21 +  val EXIT = "exit"
    2.22  
    2.23  
    2.24    /* content */
     3.1 --- a/src/Pure/Tools/isabelle_process.ML	Fri Jan 16 22:54:11 2009 +0100
     3.2 +++ b/src/Pure/Tools/isabelle_process.ML	Fri Jan 16 22:56:12 2009 +0100
     3.3 @@ -55,9 +55,6 @@
     3.4    let val clean = clean_string [Symbol.STX, "\n", "\r"]
     3.5    in implode (map (fn (x, y) => clean x ^ "=" ^ clean y ^ special_sep ^ "\n") props) end;
     3.6  
     3.7 -fun message_text class body =
     3.8 -  YXML.element Markup.messageN [(Markup.classN, class)] [clean_string [Symbol.STX] body];
     3.9 -
    3.10  fun message_pos trees = trees |> get_first
    3.11    (fn XML.Elem (name, atts, ts) =>
    3.12          if name = Markup.positionN then SOME (Position.of_properties atts)
    3.13 @@ -69,21 +66,21 @@
    3.14  
    3.15  in
    3.16  
    3.17 -fun message _ _ _ "" = ()
    3.18 -  | message out_stream ch class body =
    3.19 +fun message _ _ "" = ()
    3.20 +  | message out_stream ch body =
    3.21        let
    3.22          val pos = the_default Position.none (message_pos (YXML.parse_body body));
    3.23          val props =
    3.24            Position.properties_of (Position.thread_data ())
    3.25            |> Position.default_properties pos;
    3.26 -        val txt = message_text class body;
    3.27 +        val txt = clean_string [Symbol.STX] body;
    3.28        in output out_stream (special ch ^ message_props props ^ txt ^ special_end) end;
    3.29  
    3.30  fun init_message out_stream =
    3.31    let
    3.32      val pid = (Markup.pidN, process_id ());
    3.33      val session = (Markup.sessionN, List.last (Session.id ()) handle List.Empty => "unknown");
    3.34 -    val text = message_text Markup.initN (Session.welcome ());
    3.35 +    val text = Session.welcome ();
    3.36    in output out_stream (special "A" ^ message_props [pid, session] ^ text ^ special_end) end;
    3.37  
    3.38  end;
    3.39 @@ -116,13 +113,13 @@
    3.40      val _ = SimpleThread.fork false (auto_flush out_stream);
    3.41      val _ = SimpleThread.fork false (auto_flush TextIO.stdErr);
    3.42    in
    3.43 -    Output.status_fn   := message out_stream "B" Markup.statusN;
    3.44 -    Output.writeln_fn  := message out_stream "C" Markup.writelnN;
    3.45 -    Output.priority_fn := message out_stream "D" Markup.priorityN;
    3.46 -    Output.tracing_fn  := message out_stream "E" Markup.tracingN;
    3.47 -    Output.warning_fn  := message out_stream "F" Markup.warningN;
    3.48 -    Output.error_fn    := message out_stream "G" Markup.errorN;
    3.49 -    Output.debug_fn    := message out_stream "H" Markup.debugN;
    3.50 +    Output.status_fn   := message out_stream "B";
    3.51 +    Output.writeln_fn  := message out_stream "C";
    3.52 +    Output.priority_fn := message out_stream "D";
    3.53 +    Output.tracing_fn  := message out_stream "E";
    3.54 +    Output.warning_fn  := message out_stream "F";
    3.55 +    Output.error_fn    := message out_stream "G";
    3.56 +    Output.debug_fn    := message out_stream "H";
    3.57      Output.prompt_fn   := ignore;
    3.58      out_stream
    3.59    end;
     4.1 --- a/src/Pure/Tools/isabelle_process.scala	Fri Jan 16 22:54:11 2009 +0100
     4.2 +++ b/src/Pure/Tools/isabelle_process.scala	Fri Jan 16 22:56:12 2009 +0100
     4.3 @@ -50,6 +50,21 @@
     4.4        ('2' : Int) -> Kind.STDOUT,
     4.5        ('3' : Int) -> Kind.SIGNAL,
     4.6        ('4' : Int) -> Kind.EXIT)
     4.7 +    // message markup
     4.8 +    val markup = Map(
     4.9 +      Kind.INIT -> Markup.INIT,
    4.10 +      Kind.STATUS -> Markup.STATUS,
    4.11 +      Kind.WRITELN -> Markup.WRITELN,
    4.12 +      Kind.PRIORITY -> Markup.PRIORITY,
    4.13 +      Kind.TRACING -> Markup.TRACING,
    4.14 +      Kind.WARNING -> Markup.WARNING,
    4.15 +      Kind.ERROR -> Markup.ERROR,
    4.16 +      Kind.DEBUG -> Markup.DEBUG,
    4.17 +      Kind.SYSTEM -> Markup.SYSTEM,
    4.18 +      Kind.STDIN -> Markup.STDIN,
    4.19 +      Kind.STDOUT -> Markup.STDOUT,
    4.20 +      Kind.SIGNAL -> Markup.SIGNAL,
    4.21 +      Kind.EXIT -> Markup.EXIT)
    4.22      //}}}
    4.23      def is_raw(kind: Value) =
    4.24        kind == STDOUT
    4.25 @@ -67,8 +82,10 @@
    4.26  
    4.27    class Result(val kind: Kind.Value, val props: Properties, val result: String) {
    4.28      override def toString = {
    4.29 -      val tree = YXML.parse_failsafe(result)
    4.30 -      val res = if (kind == Kind.STATUS) tree.toString else XML.content(tree).mkString
    4.31 +      val trees = YXML.parse_body_failsafe(result)
    4.32 +      val res =
    4.33 +        if (kind == Kind.STATUS) trees.map(_.toString).mkString
    4.34 +        else trees.flatMap(XML.content(_).mkString).mkString
    4.35        if (props == null) kind.toString + " [[" + res + "]]"
    4.36        else kind.toString + " " + props.toString + " [[" + res + "]]"
    4.37      }
    4.38 @@ -77,6 +94,10 @@
    4.39      def is_system = Kind.is_system(kind)
    4.40    }
    4.41  
    4.42 +  def parse_message(kind: Kind.Value, result: String) = {
    4.43 +    XML.Elem(Markup.MESSAGE, List((Markup.CLASS, Kind.markup(kind))),
    4.44 +      YXML.parse_body_failsafe(result))
    4.45 +  }
    4.46  }
    4.47  
    4.48