72 /** main actor **/ |
70 /** main actor **/ |
73 |
71 |
74 @volatile private var syntax = new Outer_Syntax(system.symbols) |
72 @volatile private var syntax = new Outer_Syntax(system.symbols) |
75 def current_syntax: Outer_Syntax = syntax |
73 def current_syntax: Outer_Syntax = syntax |
76 |
74 |
77 @volatile private var entities = Map[Session.Entity_ID, Session.Entity]() |
75 @volatile private var entities = Map[Document.ID, Session.Entity]() |
78 def lookup_entity(id: Session.Entity_ID): Option[Session.Entity] = entities.get(id) |
76 def lookup_entity(id: Document.ID): Option[Session.Entity] = entities.get(id) |
79 def lookup_command(id: Session.Entity_ID): Option[Command] = |
77 def lookup_command(id: Document.ID): Option[Command] = |
80 lookup_entity(id) match { |
78 lookup_entity(id) match { |
81 case Some(cmd: Command) => Some(cmd) |
79 case Some(cmd: Command) => Some(cmd) |
82 case _ => None |
80 case _ => None |
83 } |
81 } |
84 |
82 |
142 def handle_result(result: Isabelle_Process.Result) |
140 def handle_result(result: Isabelle_Process.Result) |
143 //{{{ |
141 //{{{ |
144 { |
142 { |
145 raw_results.event(result) |
143 raw_results.event(result) |
146 |
144 |
147 val target_id: Option[Session.Entity_ID] = Position.get_id(result.properties) |
145 val target_id: Option[Document.ID] = Position.get_id(result.properties) |
148 val target: Option[Session.Entity] = |
146 val target: Option[Session.Entity] = |
149 target_id match { |
147 target_id match { |
150 case None => None |
148 case None => None |
151 case Some(id) => lookup_entity(id) |
149 case Some(id) => lookup_entity(id) |
152 } |
150 } |
153 if (target.isDefined) target.get.consume(result.message, indicate_command_change) |
151 if (target.isDefined) target.get.consume(result.message, indicate_command_change) |
154 else if (result.is_status) { |
152 else if (result.is_status) { |
155 // global status message |
153 // global status message |
156 result.body match { |
154 result.body match { |
157 |
155 |
158 // document state assignment |
156 // execution assignment |
159 case List(Isar_Document.Assign(edits)) if target_id.isDefined => |
157 case List(Isar_Document.Assign(edits)) if target_id.isDefined => |
160 documents.get(target_id.get) match { |
158 documents.get(target_id.get) match { |
161 case Some(doc) => |
159 case Some(doc) => |
162 val states = |
160 val execs = |
163 for { |
161 for { |
164 Isar_Document.Edit(cmd_id, state_id) <- edits |
162 Isar_Document.Edit(cmd_id, exec_id) <- edits |
165 cmd <- lookup_command(cmd_id) |
163 cmd <- lookup_command(cmd_id) |
166 } yield { |
164 } yield { |
167 val st = cmd.assign_state(state_id) |
165 val st = cmd.assign_exec(exec_id) // FIXME session state |
168 register(st) |
166 register(st) |
169 (cmd, st) |
167 (cmd, st) |
170 } |
168 } |
171 doc.assign_states(states) |
169 doc.assign_execs(execs) // FIXME session state |
172 case None => bad_result(result) |
170 case None => bad_result(result) |
173 } |
171 } |
174 |
172 |
175 // keyword declarations |
173 // keyword declarations |
176 case List(Keyword.Command_Decl(name, kind)) => syntax += (name, kind) |
174 case List(Keyword.Command_Decl(name, kind)) => syntax += (name, kind) |