src/Pure/PIDE/protocol.scala
changeset 50157 76efdb6daab2
parent 50128 599c935aac82
child 50201 c26369c9eda6
equal deleted inserted replaced
50156:12a65e2ee296 50157:76efdb6daab2
   139     }
   139     }
   140 
   140 
   141 
   141 
   142   /* specific messages */
   142   /* specific messages */
   143 
   143 
   144  def is_tracing(msg: XML.Tree): Boolean =
   144   def is_tracing(msg: XML.Tree): Boolean =
   145     msg match {
   145     msg match {
   146       case XML.Elem(Markup(Isabelle_Markup.TRACING, _), _) => true
   146       case XML.Elem(Markup(Isabelle_Markup.TRACING, _), _) => true
   147       case XML.Elem(Markup(Isabelle_Markup.TRACING_MESSAGE, _), _) => true
   147       case XML.Elem(Markup(Isabelle_Markup.TRACING_MESSAGE, _), _) => true
   148       case _ => false
   148       case _ => false
   149     }
   149     }
   184       : Set[Text.Range] =
   184       : Set[Text.Range] =
   185     {
   185     {
   186       val range = command.decode(raw_range).restrict(command.range)
   186       val range = command.decode(raw_range).restrict(command.range)
   187       body.foldLeft(if (range.is_singularity) set else set + range)(positions)
   187       body.foldLeft(if (range.is_singularity) set else set + range)(positions)
   188     }
   188     }
       
   189 
   189     def positions(set: Set[Text.Range], tree: XML.Tree): Set[Text.Range] =
   190     def positions(set: Set[Text.Range], tree: XML.Tree): Set[Text.Range] =
   190       tree match {
   191       tree match {
   191         case XML.Wrapped_Elem(Markup(name, Position.Id_Range(id, range)), _, body)
   192         case XML.Wrapped_Elem(Markup(name, Position.Id_Range(id, range)), _, body)
   192         if include_pos(name) && id == command.id => elem_positions(range, set, body)
   193         if include_pos(name) && id == command.id => elem_positions(range, set, body)
   193 
   194 
   198 
   199 
   199         case XML.Elem(_, body) => body.foldLeft(set)(positions)
   200         case XML.Elem(_, body) => body.foldLeft(set)(positions)
   200 
   201 
   201         case _ => set
   202         case _ => set
   202       }
   203       }
       
   204 
   203     val set = positions(Set.empty, message)
   205     val set = positions(Set.empty, message)
   204     if (set.isEmpty && !is_state(message))
   206     if (set.isEmpty && !is_state(message))
   205       set ++ Position.Range.unapply(message.markup.properties).map(command.decode(_))
   207       set ++ Position.Range.unapply(message.markup.properties).map(command.decode(_))
   206     else set
   208     else set
   207   }
   209   }