src/Pure/PIDE/document.scala
changeset 56590 d01d183e84ea
parent 56514 db929027e701
child 56711 ef3d00153e3b
equal deleted inserted replaced
56589:71c5d1f516c0 56590:d01d183e84ea
   771           info: A,
   771           info: A,
   772           elements: Elements,
   772           elements: Elements,
   773           result: List[Command.State] => (A, Text.Markup) => Option[A],
   773           result: List[Command.State] => (A, Text.Markup) => Option[A],
   774           status: Boolean = false): List[Text.Info[A]] =
   774           status: Boolean = false): List[Text.Info[A]] =
   775         {
   775         {
   776           val former_range = revert(range)
   776           val former_range = revert(range).inflate_singularity
   777           val (chunk_name, command_iterator) =
   777           val (chunk_name, command_iterator) =
   778             load_commands match {
   778             load_commands match {
   779               case command :: _ => (Text.Chunk.File(node_name.node), Iterator((command, 0)))
   779               case command :: _ => (Text.Chunk.File(node_name.node), Iterator((command, 0)))
   780               case _ => (Text.Chunk.Default, node.command_iterator(former_range))
   780               case _ => (Text.Chunk.Default, node.command_iterator(former_range))
   781             }
   781             }
   783           (for {
   783           (for {
   784             (command, command_start) <- command_iterator
   784             (command, command_start) <- command_iterator
   785             chunk <- command.chunks.get(chunk_name).iterator
   785             chunk <- command.chunks.get(chunk_name).iterator
   786             states = state.command_states(version, command)
   786             states = state.command_states(version, command)
   787             res = result(states)
   787             res = result(states)
   788             range = (former_range - command_start).restrict(chunk.range)
   788             markup_range <- (former_range - command_start).try_restrict(chunk.range).iterator
   789             markup = Command.State.merge_markup(states, markup_index, range, elements)
   789             markup = Command.State.merge_markup(states, markup_index, markup_range, elements)
   790             Text.Info(r0, a) <- markup.cumulate[A](range, info, elements,
   790             Text.Info(r0, a) <- markup.cumulate[A](markup_range, info, elements,
   791               {
   791               {
   792                 case (a, Text.Info(r0, b)) => res(a, Text.Info(convert(r0 + command_start), b))
   792                 case (a, Text.Info(r0, b)) => res(a, Text.Info(convert(r0 + command_start), b))
   793               }).iterator
   793               }).iterator
   794           } yield Text.Info(convert(r0 + command_start), a)).toList
   794             r1 <- convert(r0 + command_start).try_restrict(range).iterator
       
   795           } yield Text.Info(r1, a)).toList
   795         }
   796         }
   796 
   797 
   797         def select[A](
   798         def select[A](
   798           range: Text.Range,
   799           range: Text.Range,
   799           elements: Elements,
   800           elements: Elements,