@@ -31,8 +31,8 @@ pub struct Subject<'a: 'd, 'r, 'o, 'c, 'd, 'i> {
3131 pub input : & ' i [ u8 ] ,
3232 line : usize ,
3333 pub pos : usize ,
34- block_offset : usize ,
3534 column_offset : isize ,
35+ line_offset : usize ,
3636 flags : Flags ,
3737 pub refmap : & ' r mut RefMap ,
3838 delimiter_arena : & ' d Arena < Delimiter < ' a , ' d > > ,
@@ -116,7 +116,6 @@ impl<'a, 'r, 'o, 'c, 'd, 'i> Subject<'a, 'r, 'o, 'c, 'd, 'i> {
116116 options : & ' o Options < ' c > ,
117117 input : & ' i [ u8 ] ,
118118 line : usize ,
119- block_offset : usize ,
120119 refmap : & ' r mut RefMap ,
121120 delimiter_arena : & ' d Arena < Delimiter < ' a , ' d > > ,
122121 ) -> Self {
@@ -126,8 +125,8 @@ impl<'a, 'r, 'o, 'c, 'd, 'i> Subject<'a, 'r, 'o, 'c, 'd, 'i> {
126125 input,
127126 line,
128127 pos : 0 ,
129- block_offset,
130128 column_offset : 0 ,
129+ line_offset : 0 ,
131130 flags : Flags :: default ( ) ,
132131 refmap,
133132 delimiter_arena,
@@ -182,6 +181,11 @@ impl<'a, 'r, 'o, 'c, 'd, 'i> Subject<'a, 'r, 'o, 'c, 'd, 'i> {
182181 None => return false ,
183182 Some ( ch) => * ch as char ,
184183 } ;
184+
185+ let node_ast = node. data . borrow ( ) ;
186+ let adjusted_line = self . line - node_ast. sourcepos . start . line ;
187+ self . line_offset = node_ast. line_offsets [ adjusted_line] ;
188+
185189 let new_inl: Option < & ' a AstNode < ' a > > = match c {
186190 '\0' => return false ,
187191 '\r' | '\n' => Some ( self . handle_newline ( ) ) ,
@@ -1119,11 +1123,18 @@ impl<'a, 'r, 'o, 'c, 'd, 'i> Subject<'a, 'r, 'o, 'c, 'd, 'i> {
11191123 self . pos ,
11201124 ) ;
11211125 {
1126+ // if we have `___` or `***` then we need to adjust the sourcepos colums by 1
1127+ let triple_adjustment = if opener_num_chars > 0 && use_delims == 2 {
1128+ 1
1129+ } else {
1130+ 0
1131+ } ;
1132+
11221133 emph. data . borrow_mut ( ) . sourcepos = (
11231134 opener. inl . data . borrow ( ) . sourcepos . start . line ,
1124- opener. inl . data . borrow ( ) . sourcepos . start . column ,
1135+ opener. inl . data . borrow ( ) . sourcepos . start . column + triple_adjustment ,
11251136 closer. inl . data . borrow ( ) . sourcepos . end . line ,
1126- closer. inl . data . borrow ( ) . sourcepos . end . column ,
1137+ closer. inl . data . borrow ( ) . sourcepos . end . column - triple_adjustment ,
11271138 )
11281139 . into ( ) ;
11291140 }
@@ -1604,7 +1615,7 @@ impl<'a, 'r, 'o, 'c, 'd, 'i> Subject<'a, 'r, 'o, 'c, 'd, 'i> {
16041615 inl. data . borrow_mut ( ) . sourcepos . start . column =
16051616 bracket_inl_text. data . borrow ( ) . sourcepos . start . column ;
16061617 inl. data . borrow_mut ( ) . sourcepos . end . column = usize:: try_from (
1607- self . pos as isize + self . column_offset + self . block_offset as isize ,
1618+ self . pos as isize + self . column_offset + self . line_offset as isize ,
16081619 )
16091620 . unwrap ( ) ;
16101621 bracket_inl_text. insert_before ( inl) ;
@@ -1655,7 +1666,7 @@ impl<'a, 'r, 'o, 'c, 'd, 'i> Subject<'a, 'r, 'o, 'c, 'd, 'i> {
16551666 . sourcepos
16561667 . start ;
16571668 inl. data . borrow_mut ( ) . sourcepos . end . column =
1658- usize:: try_from ( self . pos as isize + self . column_offset + self . block_offset as isize )
1669+ usize:: try_from ( self . pos as isize + self . column_offset + self . line_offset as isize )
16591670 . unwrap ( ) ;
16601671
16611672 self . brackets [ brackets_len - 1 ] . inl_text . insert_before ( inl) ;
@@ -1847,8 +1858,8 @@ impl<'a, 'r, 'o, 'c, 'd, 'i> Subject<'a, 'r, 'o, 'c, 'd, 'i> {
18471858 end_column : usize ,
18481859 ) -> & ' a AstNode < ' a > {
18491860 let start_column =
1850- start_column as isize + 1 + self . column_offset + self . block_offset as isize ;
1851- let end_column = end_column as isize + 1 + self . column_offset + self . block_offset as isize ;
1861+ start_column as isize + 1 + self . column_offset + self . line_offset as isize ;
1862+ let end_column = end_column as isize + 1 + self . column_offset + self . line_offset as isize ;
18521863
18531864 let ast = Ast {
18541865 value,
@@ -1864,6 +1875,7 @@ impl<'a, 'r, 'o, 'c, 'd, 'i> Subject<'a, 'r, 'o, 'c, 'd, 'i> {
18641875 open : false ,
18651876 last_line_blank : false ,
18661877 table_visited : false ,
1878+ line_offsets : Vec :: with_capacity ( 0 ) ,
18671879 } ;
18681880 self . arena . alloc ( Node :: new ( RefCell :: new ( ast) ) )
18691881 }
@@ -1972,6 +1984,7 @@ pub fn make_inline<'a>(
19721984 open : false ,
19731985 last_line_blank : false ,
19741986 table_visited : false ,
1987+ line_offsets : Vec :: with_capacity ( 0 ) ,
19751988 } ;
19761989 arena. alloc ( Node :: new ( RefCell :: new ( ast) ) )
19771990}
0 commit comments