771 info: A, |
771 info: A, |
772 elements: Elements, |
772 elements: Elements, |
773 result: List[Command.State] => (A, Text.Markup) => Option[A], |
773 result: List[Command.State] => (A, Text.Markup) => Option[A], |
774 status: Boolean = false): List[Text.Info[A]] = |
774 status: Boolean = false): List[Text.Info[A]] = |
775 { |
775 { |
776 val former_range = revert(range) |
776 val former_range = revert(range).inflate_singularity |
777 val (chunk_name, command_iterator) = |
777 val (chunk_name, command_iterator) = |
778 load_commands match { |
778 load_commands match { |
779 case command :: _ => (Text.Chunk.File(node_name.node), Iterator((command, 0))) |
779 case command :: _ => (Text.Chunk.File(node_name.node), Iterator((command, 0))) |
780 case _ => (Text.Chunk.Default, node.command_iterator(former_range)) |
780 case _ => (Text.Chunk.Default, node.command_iterator(former_range)) |
781 } |
781 } |
783 (for { |
783 (for { |
784 (command, command_start) <- command_iterator |
784 (command, command_start) <- command_iterator |
785 chunk <- command.chunks.get(chunk_name).iterator |
785 chunk <- command.chunks.get(chunk_name).iterator |
786 states = state.command_states(version, command) |
786 states = state.command_states(version, command) |
787 res = result(states) |
787 res = result(states) |
788 range = (former_range - command_start).restrict(chunk.range) |
788 markup_range <- (former_range - command_start).try_restrict(chunk.range).iterator |
789 markup = Command.State.merge_markup(states, markup_index, range, elements) |
789 markup = Command.State.merge_markup(states, markup_index, markup_range, elements) |
790 Text.Info(r0, a) <- markup.cumulate[A](range, info, elements, |
790 Text.Info(r0, a) <- markup.cumulate[A](markup_range, info, elements, |
791 { |
791 { |
792 case (a, Text.Info(r0, b)) => res(a, Text.Info(convert(r0 + command_start), b)) |
792 case (a, Text.Info(r0, b)) => res(a, Text.Info(convert(r0 + command_start), b)) |
793 }).iterator |
793 }).iterator |
794 } yield Text.Info(convert(r0 + command_start), a)).toList |
794 r1 <- convert(r0 + command_start).try_restrict(range).iterator |
|
795 } yield Text.Info(r1, a)).toList |
795 } |
796 } |
796 |
797 |
797 def select[A]( |
798 def select[A]( |
798 range: Text.Range, |
799 range: Text.Range, |
799 elements: Elements, |
800 elements: Elements, |