# HG changeset patch # User wenzelm # Date 1283870430 -7200 # Node ID 31b95e0da7b742a8958dbdc6ba6402f6f5b36f40 # Parent 525a13b9ac74b13677911c1893dd4e18fc53f86d Isar_Document.reported_positions: slightly more robust treatment of positions outside the command range, notably parsing beyond EOF; diff -r 525a13b9ac74 -r 31b95e0da7b7 src/Pure/PIDE/command.scala --- a/src/Pure/PIDE/command.scala Tue Sep 07 16:08:29 2010 +0200 +++ b/src/Pure/PIDE/command.scala Tue Sep 07 16:40:30 2010 +0200 @@ -60,8 +60,8 @@ atts match { case Markup.Serial(i) => val result = XML.Elem(Markup(name, Position.purge(atts)), body) - (add_result(i, result) /: Isar_Document.reported_positions(command.id, message))( - (st, range) => st.add_markup(Text.Info(command.decode(range), result))) + (add_result(i, result) /: Isar_Document.reported_positions(command, message))( + (st, range) => st.add_markup(Text.Info(range, result))) case _ => System.err.println("Ignored message without serial number: " + message); this } } diff -r 525a13b9ac74 -r 31b95e0da7b7 src/Pure/PIDE/isar_document.scala --- a/src/Pure/PIDE/isar_document.scala Tue Sep 07 16:08:29 2010 +0200 +++ b/src/Pure/PIDE/isar_document.scala Tue Sep 07 16:40:30 2010 +0200 @@ -67,20 +67,21 @@ case _ => false } - def reported_positions(command_id: Document.Command_ID, message: XML.Elem): Set[Text.Range] = + def reported_positions(command: Command, message: XML.Elem): Set[Text.Range] = { def reported(set: Set[Text.Range], tree: XML.Tree): Set[Text.Range] = tree match { - case XML.Elem(Markup(name, Position.Id_Range(id, range)), body) - if include_pos(name) && id == command_id => - body.foldLeft(set + range)(reported) + case XML.Elem(Markup(name, Position.Id_Range(id, raw_range)), body) + if include_pos(name) && id == command.id => + val range = command.decode(raw_range).restrict(command.range) + body.foldLeft(if (range.is_singularity) set else set + range)(reported) case XML.Elem(Markup(name, _), body) if !exclude_pos(name) => body.foldLeft(set)(reported) case _ => set } val set = reported(Set.empty, message) if (set.isEmpty && !is_state(message)) - set ++ Position.Range.unapply(message.markup.properties) + set ++ Position.Range.unapply(message.markup.properties).map(command.decode(_)) else set } }