Lines Matching full:levels
31 //! // Resolve embedding levels within the text. Pass `None` to detect the
425 /// The `original_classes` and `levels` vectors are indexed by byte offsets into the text. If a
438 pub levels: Vec<Level>, field
448 /// Split the text into paragraphs and determine the bidi embedding levels for each paragraph.
464 …/// Split the text into paragraphs and determine the bidi embedding levels for each paragraph, wit…
481 let mut levels = Vec::<Level>::with_capacity(text.len()); in new_with_data_source() localVariable
495 &mut levels, in new_with_data_source()
503 levels, in new_with_data_source()
507 /// Produce the levels for this paragraph as needed for reordering, one level per *byte*
522 assert!(line.start <= self.levels.len()); in reordered_levels()
523 assert!(line.end <= self.levels.len()); in reordered_levels()
525 let mut levels = self.levels.clone(); in reordered_levels() localVariable
527 let line_levels = &mut levels[line.clone()]; in reordered_levels()
536 levels in reordered_levels()
539 /// Produce the levels for this paragraph as needed for reordering, one level per *character*
558 let levels = self.reordered_levels(para, line); in reordered_levels_per_char() localVariable
559 self.text.char_indices().map(|(i, _)| levels[i]).collect() in reordered_levels_per_char()
562 /// Re-order a line based on resolved levels and return the line in display order.
570 if !level::has_rtl(&self.levels[line.clone()]) { in reorder_line()
573 let (levels, runs) = self.visual_runs(para, line.clone()); in reorder_line()
574 reorder_line(self.text, line, levels, runs) in reorder_line()
577 /// Reorders pre-calculated levels of a sequence of characters.
580 …/// intended to be used when an application has determined the levels of the objects (character se…
588 …/// Furthermore, if `levels` is an array that is aligned with code units, bytes within a codepoint…
602 /// let levels = vec![l0, l0, l0, l0];
603 /// let index_map = BidiInfo::reorder_visual(&levels);
604 /// assert_eq!(levels.len(), index_map.len());
607 /// let levels: Vec<Level> = vec![l0, l0, l0, l1, l1, l1, l2, l2];
608 /// let index_map = BidiInfo::reorder_visual(&levels);
609 /// assert_eq!(levels.len(), index_map.len());
614 pub fn reorder_visual(levels: &[Level]) -> Vec<usize> { in reorder_visual()
615 reorder_visual(levels) in reorder_visual()
620 /// `line` is a range of bytes indices within `levels`.
622 /// The first return value is a vector of levels used by the reordering algorithm,
649 let levels = self.reordered_levels(para, line.clone()); in visual_runs() localVariable
650 visual_runs_for_line(levels, &line) in visual_runs()
653 /// If processed text has any computed RTL levels
658 level::has_rtl(&self.levels) in has_rtl()
664 /// The `original_classes` and `levels` vectors are indexed by byte offsets into the text. If a
676 pub levels: Vec<Level>, field
719 let mut levels = Vec::<Level>::with_capacity(text.len()); in new_with_data_source() localVariable
737 &mut levels, in new_with_data_source()
743 levels, in new_with_data_source()
749 /// Produce the levels for this paragraph as needed for reordering, one level per *byte*
758 assert!(line.start <= self.levels.len()); in reordered_levels()
759 assert!(line.end <= self.levels.len()); in reordered_levels()
761 let mut levels = self.levels.clone(); in reordered_levels() localVariable
763 let line_levels = &mut levels[line.clone()]; in reordered_levels()
772 levels in reordered_levels()
775 /// Produce the levels for this paragraph as needed for reordering, one level per *character*
784 let levels = self.reordered_levels(line); in reordered_levels_per_char() localVariable
785 self.text.char_indices().map(|(i, _)| levels[i]).collect() in reordered_levels_per_char()
788 /// Re-order a line based on resolved levels and return the line in display order.
795 if !level::has_rtl(&self.levels[line.clone()]) { in reorder_line()
799 let (levels, runs) = self.visual_runs(line.clone()); in reorder_line()
801 reorder_line(self.text, line, levels, runs) in reorder_line()
804 /// Reorders pre-calculated levels of a sequence of characters.
809 pub fn reorder_visual(levels: &[Level]) -> Vec<usize> { in reorder_visual()
810 reorder_visual(levels) in reorder_visual()
815 /// `line` is a range of bytes indices within `levels`.
823 let levels = self.reordered_levels(line.clone()); in visual_runs() localVariable
824 visual_runs_for_line(levels, &line) in visual_runs()
827 /// If processed text has any computed RTL levels
835 /// Return the paragraph's Direction (Ltr, Rtl, or Mixed) based on its levels.
838 para_direction(&self.levels) in direction()
842 /// Return a line of the text in display order based on resolved levels.
846 /// `levels` array of `Level` values, with `line`'s levels reordered into visual order
849 /// (`levels` and `runs` are the result of calling `BidiInfo::visual_runs()` or
861 levels: Vec<Level>, in reorder_line()
865 if runs.iter().all(|run| levels[run.start].is_ltr()) { in reorder_line()
871 if levels[run.start].is_rtl() { in reorder_line()
882 /// `line` is a range of code-unit indices within `levels`.
884 /// The first return value is a vector of levels used by the reordering algorithm,
904 fn visual_runs_for_line(levels: Vec<Level>, line: &Range<usize>) -> (Vec<Level>, Vec<LevelRun>) { in visual_runs_for_line()
908 let mut run_level = levels[start]; in visual_runs_for_line()
912 for (i, &new_level) in levels.iter().enumerate().take(line.end).skip(start + 1) { in visual_runs_for_line()
937 if levels[runs[seq_start].start] < max_level { in visual_runs_for_line()
945 if levels[runs[seq_end].start] < max_level { in visual_runs_for_line()
959 (levels, runs) in visual_runs_for_line()
962 /// Reorders pre-calculated levels of a sequence of characters.
965 /// intended to be used when an application has determined the levels of the objects (character seq…
973 /// Furthermore, if `levels` is an array that is aligned with code units, bytes within a codepoint …
976 fn reorder_visual(levels: &[Level]) -> Vec<usize> { in reorder_visual()
979 fn next_range(levels: &[level::Level], mut start_index: usize, max: Level) -> Range<usize> { in reorder_visual()
980 if levels.is_empty() || start_index >= levels.len() { in reorder_visual()
983 while let Some(l) = levels.get(start_index) { in reorder_visual()
990 if levels.get(start_index).is_none() { in reorder_visual()
997 while let Some(l) = levels.get(end_index) { in reorder_visual()
1010 if levels.is_empty() { in reorder_visual()
1014 // Get the min and max levels in reorder_visual()
1015 let (mut min, mut max) = levels in reorder_visual()
1017 .fold((levels[0], levels[0]), |(min, max), &l| { in reorder_visual()
1022 let mut result: Vec<usize> = (0..levels.len()).collect(); in reorder_visual()
1034 // levels ≥ max and reverse them in reorder_visual()
1036 // We can do this check with the original levels instead of checking reorderings because all in reorder_visual()
1037 // prior reorderings will have been for contiguous chunks of levels >> max, which will in reorder_visual()
1042 range = next_range(levels, range.end, max); in reorder_visual()
1045 if range.end >= levels.len() { in reorder_visual()
1065 levels: &mut Vec<Level>, in compute_bidi_info_for_para()
1067 let new_len = levels.len() + para.range.len(); in compute_bidi_info_for_para()
1068 levels.resize(new_len, para.level); in compute_bidi_info_for_para()
1074 let levels = &mut levels[para.range.clone()]; in compute_bidi_info_for_para() localVariable
1080 levels, in compute_bidi_info_for_para()
1084 let sequences = prepare::isolating_run_sequences(para.level, original_classes, levels); in compute_bidi_info_for_para()
1091 levels, in compute_bidi_info_for_para()
1096 implicit::resolve_levels(processing_classes, levels); in compute_bidi_info_for_para()
1098 assign_levels_to_removed_chars(para.level, original_classes, levels); in compute_bidi_info_for_para()
1101 /// Produce the levels for this paragraph as needed for reordering, one level per *code unit*
1182 para_direction(&self.info.levels[self.para.range.clone()]) in direction()
1189 self.info.levels[actual_position] in level_at()
1193 /// Return the directionality of the paragraph (Left, Right or Mixed) from its levels.
1195 fn para_direction(levels: &[Level]) -> Direction { in para_direction()
1198 for level in levels { in para_direction()
1221 /// Assign levels to characters removed by rule X9.
1223 /// The levels assigned to these characters are not specified by the algorithm. This function
1226 fn assign_levels_to_removed_chars(para_level: Level, classes: &[BidiClass], levels: &mut [Level]) { in assign_levels_to_removed_chars()
1227 for i in 0..levels.len() { in assign_levels_to_removed_chars()
1229 levels[i] = if i > 0 { levels[i - 1] } else { para_level }; in assign_levels_to_removed_chars()
1550 // levels in test_process_text()
1701 levels: t.2.clone(), in test_process_text()
1713 levels: t.2.clone(), in test_process_text()
1724 levels: t.5.clone(), in test_process_text()
1735 levels: t.5.clone(), in test_process_text()
1811 levels: t.3, in test_paragraph_bidi_info()
1822 levels: t.5, in test_paragraph_bidi_info()
2141 assert_eq!(p_mixed.info.levels.len(), 54); in test_level_at()
2156 assert_eq!(p_mixed.info.levels.len(), 40); in test_level_at()
2211 let levels = bidi_info.levels; in test_levels() localVariable
2213 assert_eq!(levels.len(), 10); in test_levels()
2215 &levels, in test_levels()