@@ -118,16 +118,33 @@ - (void)removeTypingAttributes {
118118 [self removeAttributes: _input->textView.selectedRange];
119119}
120120
121- // removing first quote line by backspacing doesn't remove typing attributes because it doesn't run textViewDidChange
122- // so we try guessing that a point should be deleted here
123121- (BOOL )handleBackspaceInRange : (NSRange )range replacementText : (NSString *)text {
124- if ([self detectStyle: _input->textView.selectedRange] &&
122+ if (
123+ [self detectStyle: _input->textView.selectedRange] &&
125124 NSEqualRanges (_input->textView.selectedRange, NSMakeRange (0 , 0 )) &&
126125 [text isEqualToString:@""]
127126 ) {
127+ // removing first quote line by backspacing doesn't remove typing attributes because it doesn't run textViewDidChange
128+ // so we try guessing that a line should be deleted here
128129 NSRange paragraphRange = [_input->textView.textStorage.string paragraphRangeForRange: _input->textView.selectedRange];
129130 [self removeAttributes: paragraphRange];
130131 return YES ;
132+ } else if (
133+ [self detectStyle: _input->textView.selectedRange] &&
134+ [text isEqualToString: @" " ]
135+ ) {
136+ // other case; make sure removing all the (non newline) text from a quto line also removes the line itself
137+ NSRange paragraphRange = [_input->textView.textStorage.string paragraphRangeForRange: range];
138+ NSValue *nonNewlineVal = [ParagraphsUtils getNonNewlineRangesIn: _input->textView range: paragraphRange].firstObject ;
139+ if (nonNewlineVal == nullptr ) {
140+ return NO ;
141+ }
142+ NSRange nonNewlineRange = [nonNewlineVal rangeValue ];
143+ if (NSEqualRanges (range, nonNewlineRange)) {
144+ [self removeAttributes: range];
145+ [TextInsertionUtils replaceText: text at: range additionalAttributes: nullptr input: _input withSelection: YES ];
146+ return YES ;
147+ }
131148 }
132149 return NO ;
133150}
0 commit comments