@@ -456,6 +456,9 @@ - (void)applyProcessedStyles:(NSArray *)processedStyles offsetFromBeginning:(NSI
456456 } else if ([styleType isEqualToNumber: @([MentionStyle getStyleType ])]) {
457457 MentionParams *params = (MentionParams *)stylePair.styleValue ;
458458 [((MentionStyle *)baseStyle) addMentionAtRange: styleRange params: params];
459+ } else if ([styleType isEqualToNumber: @([ImageStyle getStyleType ])]) {
460+ ImageData *imgData = (ImageData *)stylePair.styleValue ;
461+ [((ImageStyle *)baseStyle) addImageAtRange: styleRange imageData: imgData];
459462 } else {
460463 [baseStyle addAttributes: styleRange];
461464 }
@@ -546,6 +549,24 @@ - (NSString *)stringByAddingNewlinesToTag:(NSString *)tag inString:(NSString *)h
546549 return str;
547550}
548551
552+ - (void )finalizeTagEntry : (NSMutableString *)tagName ongoingTags : (NSMutableDictionary *)ongoingTags initiallyProcessedTags : (NSMutableArray *)processedTags plainText : (NSMutableString *)plainText
553+ {
554+ NSMutableArray *tagEntry = [[NSMutableArray alloc ] init ];
555+
556+ NSArray *tagData = ongoingTags[tagName];
557+ NSInteger tagLocation = [((NSNumber *)tagData[0 ]) intValue ];
558+ NSRange tagRange = NSMakeRange (tagLocation, plainText.length - tagLocation);
559+
560+ [tagEntry addObject: [tagName copy ]];
561+ [tagEntry addObject: [NSValue valueWithRange: tagRange]];
562+ if (tagData.count > 1 ) {
563+ [tagEntry addObject: [(NSString *)tagData[1 ] copy ]];
564+ }
565+
566+ [processedTags addObject: tagEntry];
567+ [ongoingTags removeObjectForKey: tagName];
568+ }
569+
549570- (NSArray *)getTextAndStylesFromHtml : (NSString *)fixedHtml {
550571 NSMutableString *plainText = [[NSMutableString alloc ] initWithString: @" " ];
551572 NSMutableDictionary *ongoingTags = [[NSMutableDictionary alloc ] init ];
@@ -573,6 +594,14 @@ - (NSArray *)getTextAndStylesFromHtml:(NSString *)fixedHtml {
573594 gettingTagName = NO ;
574595 gettingTagParams = NO ;
575596
597+ BOOL isSelfClosing = NO ;
598+
599+ // Check if params ended with '/' (e.g. <img src="" />)
600+ if ([currentTagParams hasSuffix: @" /" ]) {
601+ [currentTagParams deleteCharactersInRange: NSMakeRange (currentTagParams.length - 1 , 1 )];
602+ isSelfClosing = YES ;
603+ }
604+
576605 if ([currentTagName isEqualToString: @" p" ] || [currentTagName isEqualToString: @" br" ] || [currentTagName isEqualToString: @" li" ]) {
577606 // do nothing, we don't include these tags in styles
578607 } else if (!closingTag) {
@@ -588,6 +617,10 @@ - (NSArray *)getTextAndStylesFromHtml:(NSString *)fixedHtml {
588617 if ([currentTagName isEqualToString: @" ul" ] || [currentTagName isEqualToString: @" ol" ] || [currentTagName isEqualToString: @" blockquote" ] || [currentTagName isEqualToString: @" codeblock" ]) {
589618 i += 1 ;
590619 }
620+
621+ if (isSelfClosing) {
622+ [self finalizeTagEntry: currentTagName ongoingTags: ongoingTags initiallyProcessedTags: initiallyProcessedTags plainText: plainText];
623+ }
591624 } else {
592625 // we finish closing tags - pack tag name, tag range and optionally tag params into an entry that goes inside initiallyProcessedTags
593626
@@ -596,20 +629,7 @@ - (NSArray *)getTextAndStylesFromHtml:(NSString *)fixedHtml {
596629 plainText = [[plainText substringWithRange: NSMakeRange (0 , plainText.length - 1 )] mutableCopy ];
597630 }
598631
599- NSMutableArray *tagEntry = [[NSMutableArray alloc ] init ];
600-
601- NSArray *tagData = ongoingTags[currentTagName];
602- NSInteger tagLocation = [((NSNumber *)tagData[0 ]) intValue ];
603- NSRange tagRange = NSMakeRange (tagLocation, plainText.length - tagLocation);
604-
605- [tagEntry addObject: [currentTagName copy ]];
606- [tagEntry addObject: [NSValue valueWithRange: tagRange]];
607- if (tagData.count > 1 ) {
608- [tagEntry addObject: [(NSString *)tagData[1 ] copy ]];
609- }
610-
611- [initiallyProcessedTags addObject: tagEntry];
612- [ongoingTags removeObjectForKey: currentTagName];
632+ [self finalizeTagEntry: currentTagName ongoingTags: ongoingTags initiallyProcessedTags: initiallyProcessedTags plainText: plainText];
613633 }
614634 // post-tag cleanup
615635 closingTag = NO ;
@@ -669,7 +689,7 @@ - (NSArray *)getTextAndStylesFromHtml:(NSString *)fixedHtml {
669689 } else if ([tagName isEqualToString: @" i" ]) {
670690 [styleArr addObject: @([ItalicStyle getStyleType ])];
671691 } else if ([tagName isEqualToString: @" img" ]) {
672- NSRegularExpression *srcRegex = [NSRegularExpression regularExpressionWithPattern: @" src=\" .+ \" "
692+ NSRegularExpression *srcRegex = [NSRegularExpression regularExpressionWithPattern: @" src=\" ([^ \" ]+) \" "
673693 options: 0
674694 error: nullptr
675695 ];
0 commit comments