mirror of
https://github.com/servo/servo.git
synced 2025-06-09 00:53:26 +00:00
parent
e869e8ad08
commit
83c73a5d91
1 changed files with 13 additions and 7 deletions
|
@ -240,19 +240,19 @@ impl TextRunScanner {
|
||||||
let run = runs[mapping.text_run_index].clone();
|
let run = runs[mapping.text_run_index].clone();
|
||||||
|
|
||||||
let requires_line_break_afterward_if_wrapping_on_newlines =
|
let requires_line_break_afterward_if_wrapping_on_newlines =
|
||||||
run.text.char_at_reverse(mapping.range.end().get() as usize) == '\n';
|
run.text.char_at_reverse(mapping.byte_range.end()) == '\n';
|
||||||
if requires_line_break_afterward_if_wrapping_on_newlines {
|
if requires_line_break_afterward_if_wrapping_on_newlines {
|
||||||
mapping.range.extend_by(CharIndex(-1))
|
mapping.char_range.extend_by(CharIndex(-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
let text_size = old_fragment.border_box.size;
|
let text_size = old_fragment.border_box.size;
|
||||||
let mut new_text_fragment_info = box ScannedTextFragmentInfo::new(
|
let mut new_text_fragment_info = box ScannedTextFragmentInfo::new(
|
||||||
run,
|
run,
|
||||||
mapping.range,
|
mapping.char_range,
|
||||||
text_size,
|
text_size,
|
||||||
requires_line_break_afterward_if_wrapping_on_newlines);
|
requires_line_break_afterward_if_wrapping_on_newlines);
|
||||||
|
|
||||||
let new_metrics = new_text_fragment_info.run.metrics_for_range(&mapping.range);
|
let new_metrics = new_text_fragment_info.run.metrics_for_range(&mapping.char_range);
|
||||||
let writing_mode = old_fragment.style.writing_mode;
|
let writing_mode = old_fragment.style.writing_mode;
|
||||||
let bounding_box_size = bounding_box_for_run_metrics(&new_metrics, writing_mode);
|
let bounding_box_size = bounding_box_for_run_metrics(&new_metrics, writing_mode);
|
||||||
new_text_fragment_info.content_size = bounding_box_size;
|
new_text_fragment_info.content_size = bounding_box_size;
|
||||||
|
@ -381,7 +381,9 @@ impl RunInfo {
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
struct RunMapping {
|
struct RunMapping {
|
||||||
/// The range of characters within the text fragment.
|
/// The range of characters within the text fragment.
|
||||||
range: Range<CharIndex>,
|
char_range: Range<CharIndex>,
|
||||||
|
/// The range of byte indices within the text fragment.
|
||||||
|
byte_range: Range<usize>,
|
||||||
/// The index of the unscanned text fragment that this mapping corresponds to.
|
/// The index of the unscanned text fragment that this mapping corresponds to.
|
||||||
old_fragment_index: usize,
|
old_fragment_index: usize,
|
||||||
/// The index of the text run we're going to create.
|
/// The index of the text run we're going to create.
|
||||||
|
@ -395,7 +397,9 @@ impl RunMapping {
|
||||||
fn new(run_info_list: &[RunInfo], current_run_info: &RunInfo, fragment_index: usize)
|
fn new(run_info_list: &[RunInfo], current_run_info: &RunInfo, fragment_index: usize)
|
||||||
-> RunMapping {
|
-> RunMapping {
|
||||||
RunMapping {
|
RunMapping {
|
||||||
range: Range::new(CharIndex(current_run_info.character_length as isize), CharIndex(0)),
|
char_range: Range::new(CharIndex(current_run_info.character_length as isize),
|
||||||
|
CharIndex(0)),
|
||||||
|
byte_range: Range::new(0, 0),
|
||||||
old_fragment_index: fragment_index,
|
old_fragment_index: fragment_index,
|
||||||
text_run_index: run_info_list.len(),
|
text_run_index: run_info_list.len(),
|
||||||
}
|
}
|
||||||
|
@ -432,7 +436,9 @@ impl RunMapping {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
self.range.extend_by(CharIndex(character_count as isize));
|
let new_byte_length = run_info.text.len();
|
||||||
|
self.byte_range = Range::new(old_byte_length, new_byte_length - old_byte_length);
|
||||||
|
self.char_range.extend_by(CharIndex(character_count as isize));
|
||||||
mappings.push(self)
|
mappings.push(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue