src/Pure/PIDE/document.scala
changeset 71601 97ccf48c2f0c
parent 70986 d8a7df9fdd03
child 72065 11dc8929832d
equal deleted inserted replaced
71600:64aad1e46f98 71601:97ccf48c2f0c
    93 
    93 
    94       def cat_errors(msg2: String): Header =
    94       def cat_errors(msg2: String): Header =
    95         copy(errors = errors.map(msg1 => Exn.cat_message(msg1, msg2)))
    95         copy(errors = errors.map(msg1 => Exn.cat_message(msg1, msg2)))
    96     }
    96     }
    97 
    97 
    98     val no_header = Header()
    98     val no_header: Header = Header()
    99     def bad_header(msg: String): Header = Header(errors = List(msg))
    99     def bad_header(msg: String): Header = Header(errors = List(msg))
   100 
   100 
   101     object Name
   101     object Name
   102     {
   102     {
   103       val empty = Name("")
   103       val empty: Name = Name("")
   104 
   104 
   105       object Ordering extends scala.math.Ordering[Name]
   105       object Ordering extends scala.math.Ordering[Name]
   106       {
   106       {
   107         def compare(name1: Name, name2: Name): Int = name1.node compare name2.node
   107         def compare(name1: Name, name2: Name): Int = name1.node compare name2.node
   108       }
   108       }
   373       val graph1 = graph.default_node(name, Node.empty)
   373       val graph1 = graph.default_node(name, Node.empty)
   374       graph1.is_maximal(name) && graph1.get_node(name).is_empty
   374       graph1.is_maximal(name) && graph1.get_node(name).is_empty
   375     }
   375     }
   376 
   376 
   377     def purge_suppressed: Option[Nodes] =
   377     def purge_suppressed: Option[Nodes] =
   378       graph.keys_iterator.filter(is_suppressed(_)).toList match {
   378       graph.keys_iterator.filter(is_suppressed).toList match {
   379         case Nil => None
   379         case Nil => None
   380         case del => Some(new Nodes((graph /: del)(_.del_node(_))))
   380         case del => Some(new Nodes((graph /: del)(_.del_node(_))))
   381       }
   381       }
   382 
   382 
   383     def + (entry: (Node.Name, Node)): Nodes =
   383     def + (entry: (Node.Name, Node)): Nodes =
   525 
   525 
   526   /* snapshot */
   526   /* snapshot */
   527 
   527 
   528   object Snapshot
   528   object Snapshot
   529   {
   529   {
   530     val init = State.init.snapshot()
   530     val init: Snapshot = State.init.snapshot()
   531   }
   531   }
   532 
   532 
   533   abstract class Snapshot
   533   abstract class Snapshot
   534   {
   534   {
   535     def state: State
   535     def state: State
   735     def accumulate(id: Document_ID.Generic, message: XML.Elem, xml_cache: XML.Cache)
   735     def accumulate(id: Document_ID.Generic, message: XML.Elem, xml_cache: XML.Cache)
   736       : (Command.State, State) =
   736       : (Command.State, State) =
   737     {
   737     {
   738       execs.get(id) match {
   738       execs.get(id) match {
   739         case Some(st) =>
   739         case Some(st) =>
   740           val new_st = st.accumulate(self_id(st), other_id _, message, xml_cache)
   740           val new_st = st.accumulate(self_id(st), other_id, message, xml_cache)
   741           val execs1 = execs + (id -> new_st)
   741           val execs1 = execs + (id -> new_st)
   742           (new_st, copy(execs = execs1, commands_redirection = redirection(new_st)))
   742           (new_st, copy(execs = execs1, commands_redirection = redirection(new_st)))
   743         case None =>
   743         case None =>
   744           commands.get(id) match {
   744           commands.get(id) match {
   745             case Some(st) =>
   745             case Some(st) =>
   746               val new_st = st.accumulate(self_id(st), other_id _, message, xml_cache)
   746               val new_st = st.accumulate(self_id(st), other_id, message, xml_cache)
   747               val commands1 = commands + (id -> new_st)
   747               val commands1 = commands + (id -> new_st)
   748               (new_st, copy(commands = commands1, commands_redirection = redirection(new_st)))
   748               (new_st, copy(commands = commands1, commands_redirection = redirection(new_st)))
   749             case None => fail
   749             case None => fail
   750           }
   750           }
   751       }
   751       }
  1037         val is_outdated: Boolean = pending_edits.nonEmpty || latest != stable
  1037         val is_outdated: Boolean = pending_edits.nonEmpty || latest != stable
  1038 
  1038 
  1039 
  1039 
  1040         /* local node content */
  1040         /* local node content */
  1041 
  1041 
  1042         def convert(offset: Text.Offset) = (offset /: edits)((i, edit) => edit.convert(i))
  1042         def convert(offset: Text.Offset): Text.Offset = (offset /: edits)((i, edit) => edit.convert(i))
  1043         def revert(offset: Text.Offset) = (offset /: reverse_edits)((i, edit) => edit.revert(i))
  1043         def revert(offset: Text.Offset): Text.Offset = (offset /: reverse_edits)((i, edit) => edit.revert(i))
  1044 
  1044 
  1045         def convert(range: Text.Range) = range.map(convert(_))
  1045         def convert(range: Text.Range): Text.Range = range.map(convert)
  1046         def revert(range: Text.Range) = range.map(revert(_))
  1046         def revert(range: Text.Range): Text.Range = range.map(revert)
  1047 
  1047 
  1048         val node_name: Node.Name = name
  1048         val node_name: Node.Name = name
  1049         val node: Node = version.nodes(name)
  1049         val node: Node = version.nodes(name)
  1050 
  1050 
  1051         def nodes: List[(Node.Name, Node)] =
  1051         def nodes: List[(Node.Name, Node)] =
  1164               res(x) match {
  1164               res(x) match {
  1165                 case None => None
  1165                 case None => None
  1166                 case some => Some(some)
  1166                 case some => Some(some)
  1167               }
  1167               }
  1168           }
  1168           }
  1169           for (Text.Info(r, Some(x)) <- cumulate(range, None, elements, result1 _, status))
  1169           for (Text.Info(r, Some(x)) <- cumulate(range, None, elements, result1, status))
  1170             yield Text.Info(r, x)
  1170             yield Text.Info(r, x)
  1171         }
  1171         }
  1172 
  1172 
  1173 
  1173 
  1174         /* command results */
  1174         /* command results */