src/Pure/PIDE/document.scala
changeset 45459 a5c1599f664d
parent 45243 27466646a7a3
child 45467 3f290b6288cf
equal deleted inserted replaced
45458:5b5d3ee2285b 45459:a5c1599f664d
   238     def command_state(command: Command): Command.State
   238     def command_state(command: Command): Command.State
   239     def convert(i: Text.Offset): Text.Offset
   239     def convert(i: Text.Offset): Text.Offset
   240     def convert(range: Text.Range): Text.Range
   240     def convert(range: Text.Range): Text.Range
   241     def revert(i: Text.Offset): Text.Offset
   241     def revert(i: Text.Offset): Text.Offset
   242     def revert(range: Text.Range): Text.Range
   242     def revert(range: Text.Range): Text.Range
       
   243     def cumulate_markup[A](info: Text.Info[A])(result: Markup_Tree.Cumulate[A])
       
   244       : Stream[Text.Info[A]]
   243     def select_markup[A](range: Text.Range)(result: Markup_Tree.Select[A])
   245     def select_markup[A](range: Text.Range)(result: Markup_Tree.Select[A])
   244       : Stream[Text.Info[Option[A]]]
   246       : Stream[Text.Info[Option[A]]]
   245   }
   247   }
   246 
   248 
   247   type Assign =
   249   type Assign =
   469         def convert(offset: Text.Offset) = (offset /: edits)((i, edit) => edit.convert(i))
   471         def convert(offset: Text.Offset) = (offset /: edits)((i, edit) => edit.convert(i))
   470         def revert(offset: Text.Offset) = (offset /: reverse_edits)((i, edit) => edit.revert(i))
   472         def revert(offset: Text.Offset) = (offset /: reverse_edits)((i, edit) => edit.revert(i))
   471         def convert(range: Text.Range) = (range /: edits)((r, edit) => edit.convert(r))
   473         def convert(range: Text.Range) = (range /: edits)((r, edit) => edit.convert(r))
   472         def revert(range: Text.Range) = (range /: reverse_edits)((r, edit) => edit.revert(r))
   474         def revert(range: Text.Range) = (range /: reverse_edits)((r, edit) => edit.revert(r))
   473 
   475 
       
   476         def cumulate_markup[A](root: Text.Info[A])(result: Markup_Tree.Cumulate[A])
       
   477           : Stream[Text.Info[A]] =
       
   478         {
       
   479           val former_range = revert(root.range)
       
   480           for {
       
   481             (command, command_start) <- node.command_range(former_range).toStream
       
   482             Text.Info(r0, a) <- command_state(command).markup.
       
   483               cumulate(Text.Info((former_range - command_start).restrict(command.range), root.info)) {
       
   484                 case (a, Text.Info(r0, b))
       
   485                 if result.isDefinedAt((a, Text.Info(convert(r0 + command_start), b))) =>
       
   486                   result((a, Text.Info(convert(r0 + command_start), b)))
       
   487               }
       
   488           } yield Text.Info(convert(r0 + command_start), a)
       
   489         }
       
   490 
   474         def select_markup[A](range: Text.Range)(result: Markup_Tree.Select[A])
   491         def select_markup[A](range: Text.Range)(result: Markup_Tree.Select[A])
   475           : Stream[Text.Info[Option[A]]] =
   492           : Stream[Text.Info[Option[A]]] =
   476         {
   493         {
   477           val former_range = revert(range)
   494           val former_range = revert(range)
   478           for {
   495           for {