src/Pure/PIDE/document.scala
changeset 40479 cc06f5528bb1
parent 40478 4bae781b8f7c
child 43425 0a5612040a8b
equal deleted inserted replaced
40478:4bae781b8f7c 40479:cc06f5528bb1
    33 
    33 
    34   /** document structure **/
    34   /** document structure **/
    35 
    35 
    36   /* named nodes -- development graph */
    36   /* named nodes -- development graph */
    37 
    37 
    38   type Text_Edit =
    38   type Edit[A] =
    39    (String,  // node name
    39    (String,  // node name
    40     Option[List[Text.Edit]])  // None: remove, Some: insert/remove text
    40     Option[List[A]])  // None: remove node, Some: edit content
    41 
    41 
    42   type Edit[C] =
    42   type Edit_Text = Edit[Text.Edit]
    43    (String,  // node name
    43   type Edit_Command = Edit[(Option[Command], Option[Command])]
    44     Option[List[(Option[C], Option[C])]])  // None: remove, Some: insert/remove commands
    44   type Edit_Command_ID = Edit[(Option[Command_ID], Option[Command_ID])]
    45 
    45 
    46   object Node
    46   object Node
    47   {
    47   {
    48     val empty: Node = new Node(Linear_Set())
    48     val empty: Node = new Node(Linear_Set())
    49 
    49 
   134     val init = new Change(Future.value(Version.init), Nil, Future.value(Nil, Version.init))
   134     val init = new Change(Future.value(Version.init), Nil, Future.value(Nil, Version.init))
   135   }
   135   }
   136 
   136 
   137   class Change(
   137   class Change(
   138     val previous: Future[Version],
   138     val previous: Future[Version],
   139     val edits: List[Text_Edit],
   139     val edits: List[Edit_Text],
   140     val result: Future[(List[Edit[Command]], Version)])
   140     val result: Future[(List[Edit_Command], Version)])
   141   {
   141   {
   142     val version: Future[Version] = result.map(_._2)
   142     val version: Future[Version] = result.map(_._2)
   143     def is_finished: Boolean = previous.is_finished && version.is_finished
   143     def is_finished: Boolean = previous.is_finished && version.is_finished
   144   }
   144   }
   145 
   145 
   268         case Some(assgn) => assgn.is_finished
   268         case Some(assgn) => assgn.is_finished
   269         case None => false
   269         case None => false
   270       }
   270       }
   271 
   271 
   272     def extend_history(previous: Future[Version],
   272     def extend_history(previous: Future[Version],
   273         edits: List[Text_Edit],
   273         edits: List[Edit_Text],
   274         result: Future[(List[Edit[Command]], Version)]): (Change, State) =
   274         result: Future[(List[Edit_Command], Version)]): (Change, State) =
   275     {
   275     {
   276       val change = new Change(previous, edits, result)
   276       val change = new Change(previous, edits, result)
   277       (change, copy(history = history + change))
   277       (change, copy(history = history + change))
   278     }
   278     }
   279 
   279