src/Pure/PIDE/change.scala
changeset 38150 67fc24df3721
parent 36676 ac7961d42ac3
child 38151 2837c952ca31
equal deleted inserted replaced
38149:3c380380beac 38150:67fc24df3721
     6 */
     6 */
     7 
     7 
     8 package isabelle
     8 package isabelle
     9 
     9 
    10 
    10 
       
    11 object Change
       
    12 {
       
    13   val init = new Change(Document.NO_ID, None, Nil, Future.value(Nil, Document.init))
       
    14 }
       
    15 
    11 class Change(
    16 class Change(
    12   val id: Isar_Document.Document_ID,
    17   val id: Document.Version_ID,
    13   val parent: Option[Change],
    18   val parent: Option[Change],
    14   val edits: List[Text_Edit],
    19   val edits: List[Document.Node.Text_Edit],
    15   val result: Future[(List[Document.Edit], Document)])
    20   val result: Future[(List[Document.Edit[Command]], Document)])
    16 {
    21 {
    17   def ancestors: Iterator[Change] = new Iterator[Change]
    22   def ancestors: Iterator[Change] = new Iterator[Change]
    18   {
    23   {
    19     private var state: Option[Change] = Some(Change.this)
    24     private var state: Option[Change] = Some(Change.this)
    20     def hasNext = state.isDefined
    25     def hasNext = state.isDefined
    26   }
    31   }
    27 
    32 
    28   def join_document: Document = result.join._2
    33   def join_document: Document = result.join._2
    29   def is_assigned: Boolean = result.is_finished && join_document.assignment.is_finished
    34   def is_assigned: Boolean = result.is_finished && join_document.assignment.is_finished
    30 
    35 
    31   def edit(session: Session, edits: List[Text_Edit]): Change =
    36   def edit(session: Session, edits: List[Document.Node.Text_Edit]): Change =
    32   {
    37   {
    33     val new_id = session.create_id()
    38     val new_id = session.create_id()
    34     val result: Future[(List[Document.Edit], Document)] =
    39     val result: Future[(List[Document.Edit[Command]], Document)] =
    35       Future.fork {
    40       Future.fork {
    36         val old_doc = join_document
    41         val old_doc = join_document
    37         old_doc.await_assignment
    42         old_doc.await_assignment
    38         Document.text_edits(session, old_doc, new_id, edits)
    43         Document.text_edits(session, old_doc, new_id, edits)
    39       }
    44       }