src/Pure/PIDE/document.scala
changeset 46208 4cab63a6dc16
parent 46198 cd040c5772de
child 46677 388ba4daae05
equal deleted inserted replaced
46207:e76b77356ed6 46208:4cab63a6dc16
   232   {
   232   {
   233     val state: State
   233     val state: State
   234     val version: Version
   234     val version: Version
   235     val node: Node
   235     val node: Node
   236     val is_outdated: Boolean
   236     val is_outdated: Boolean
   237     def command_state(command: Command): Command.State
       
   238     def convert(i: Text.Offset): Text.Offset
   237     def convert(i: Text.Offset): Text.Offset
   239     def convert(range: Text.Range): Text.Range
   238     def convert(range: Text.Range): Text.Range
   240     def revert(i: Text.Offset): Text.Offset
   239     def revert(i: Text.Offset): Text.Offset
   241     def revert(range: Text.Range): Text.Range
   240     def revert(range: Text.Range): Text.Range
   242     def cumulate_markup[A](range: Text.Range, info: A, elements: Option[Set[String]],
   241     def cumulate_markup[A](range: Text.Range, info: A, elements: Option[Set[String]],
   463       {
   462       {
   464         val state = State.this
   463         val state = State.this
   465         val version = stable.version.get_finished
   464         val version = stable.version.get_finished
   466         val node = version.nodes(name)
   465         val node = version.nodes(name)
   467         val is_outdated = !(pending_edits.isEmpty && latest == stable)
   466         val is_outdated = !(pending_edits.isEmpty && latest == stable)
   468         def command_state(command: Command): Command.State = state.command_state(version, command)
       
   469 
   467 
   470         def convert(offset: Text.Offset) = (offset /: edits)((i, edit) => edit.convert(i))
   468         def convert(offset: Text.Offset) = (offset /: edits)((i, edit) => edit.convert(i))
   471         def revert(offset: Text.Offset) = (offset /: reverse_edits)((i, edit) => edit.revert(i))
   469         def revert(offset: Text.Offset) = (offset /: reverse_edits)((i, edit) => edit.revert(i))
   472         def convert(range: Text.Range) = (range /: edits)((r, edit) => edit.convert(r))
   470         def convert(range: Text.Range) = (range /: edits)((r, edit) => edit.convert(r))
   473         def revert(range: Text.Range) = (range /: reverse_edits)((r, edit) => edit.revert(r))
   471         def revert(range: Text.Range) = (range /: reverse_edits)((r, edit) => edit.revert(r))
   476           result: PartialFunction[(A, Text.Markup), A]): Stream[Text.Info[A]] =
   474           result: PartialFunction[(A, Text.Markup), A]): Stream[Text.Info[A]] =
   477         {
   475         {
   478           val former_range = revert(range)
   476           val former_range = revert(range)
   479           for {
   477           for {
   480             (command, command_start) <- node.command_range(former_range).toStream
   478             (command, command_start) <- node.command_range(former_range).toStream
   481             Text.Info(r0, a) <- command_state(command).markup.
   479             Text.Info(r0, a) <- state.command_state(version, command).markup.
   482               cumulate[A]((former_range - command_start).restrict(command.range), info, elements,
   480               cumulate[A]((former_range - command_start).restrict(command.range), info, elements,
   483                 {
   481                 {
   484                   case (a, Text.Info(r0, b))
   482                   case (a, Text.Info(r0, b))
   485                   if result.isDefinedAt((a, Text.Info(convert(r0 + command_start), b))) =>
   483                   if result.isDefinedAt((a, Text.Info(convert(r0 + command_start), b))) =>
   486                     result((a, Text.Info(convert(r0 + command_start), b)))
   484                     result((a, Text.Info(convert(r0 + command_start), b)))