432 |
432 |
433 def cumulate[A]( |
433 def cumulate[A]( |
434 range: Text.Range, |
434 range: Text.Range, |
435 info: A, |
435 info: A, |
436 elements: Elements, |
436 elements: Elements, |
437 result: Command.Results => (A, Text.Markup) => Option[A], |
437 result: List[Command.State] => (A, Text.Markup) => Option[A], |
438 status: Boolean = false): List[Text.Info[A]] |
438 status: Boolean = false): List[Text.Info[A]] |
439 |
439 |
440 def select[A]( |
440 def select[A]( |
441 range: Text.Range, |
441 range: Text.Range, |
442 elements: Elements, |
442 elements: Elements, |
443 result: Command.Results => Text.Markup => Option[A], |
443 result: List[Command.State] => Text.Markup => Option[A], |
444 status: Boolean = false): List[Text.Info[A]] |
444 status: Boolean = false): List[Text.Info[A]] |
445 } |
445 } |
446 |
446 |
447 |
447 |
448 |
448 |
727 |
727 |
728 def cumulate[A]( |
728 def cumulate[A]( |
729 range: Text.Range, |
729 range: Text.Range, |
730 info: A, |
730 info: A, |
731 elements: Elements, |
731 elements: Elements, |
732 result: Command.Results => (A, Text.Markup) => Option[A], |
732 result: List[Command.State] => (A, Text.Markup) => Option[A], |
733 status: Boolean = false): List[Text.Info[A]] = |
733 status: Boolean = false): List[Text.Info[A]] = |
734 { |
734 { |
735 val former_range = revert(range) |
735 val former_range = revert(range) |
736 val (file_name, command_range_iterator) = |
736 val (file_name, command_range_iterator) = |
737 load_commands match { |
737 load_commands match { |
741 val markup_index = Command.Markup_Index(status, file_name) |
741 val markup_index = Command.Markup_Index(status, file_name) |
742 (for { |
742 (for { |
743 (command, command_start) <- command_range_iterator |
743 (command, command_start) <- command_range_iterator |
744 chunk <- command.chunks.get(file_name).iterator |
744 chunk <- command.chunks.get(file_name).iterator |
745 states = state.command_states(version, command) |
745 states = state.command_states(version, command) |
746 res = result(Command.State.merge_results(states)) |
746 res = result(states) |
747 range = (former_range - command_start).restrict(chunk.range) |
747 range = (former_range - command_start).restrict(chunk.range) |
748 markup = Command.State.merge_markup(states, markup_index, range, elements) |
748 markup = Command.State.merge_markup(states, markup_index, range, elements) |
749 Text.Info(r0, a) <- markup.cumulate[A](range, info, elements, |
749 Text.Info(r0, a) <- markup.cumulate[A](range, info, elements, |
750 { |
750 { |
751 case (a, Text.Info(r0, b)) => res(a, Text.Info(convert(r0 + command_start), b)) |
751 case (a, Text.Info(r0, b)) => res(a, Text.Info(convert(r0 + command_start), b)) |
754 } |
754 } |
755 |
755 |
756 def select[A]( |
756 def select[A]( |
757 range: Text.Range, |
757 range: Text.Range, |
758 elements: Elements, |
758 elements: Elements, |
759 result: Command.Results => Text.Markup => Option[A], |
759 result: List[Command.State] => Text.Markup => Option[A], |
760 status: Boolean = false): List[Text.Info[A]] = |
760 status: Boolean = false): List[Text.Info[A]] = |
761 { |
761 { |
762 def result1(results: Command.Results): (Option[A], Text.Markup) => Option[Option[A]] = |
762 def result1(states: List[Command.State]): (Option[A], Text.Markup) => Option[Option[A]] = |
763 { |
763 { |
764 val res = result(results) |
764 val res = result(states) |
765 (_: Option[A], x: Text.Markup) => |
765 (_: Option[A], x: Text.Markup) => |
766 res(x) match { |
766 res(x) match { |
767 case None => None |
767 case None => None |
768 case some => Some(some) |
768 case some => Some(some) |
769 } |
769 } |