diff options
| -rw-r--r-- | src/inlines.c | 11 | 
1 files changed, 11 insertions, 0 deletions
diff --git a/src/inlines.c b/src/inlines.c index 7e8f806..a1f0356 100644 --- a/src/inlines.c +++ b/src/inlines.c @@ -439,6 +439,8 @@ static void process_emphasis(subject *subj, delimiter *start_delim)  {  	delimiter *closer = subj->last_delim;  	delimiter *opener; +	delimiter *old_closer; +	bool opener_not_found;  	// move back to first relevant delim.  	while (closer != NULL && closer->previous != start_delim) { @@ -459,6 +461,9 @@ static void process_emphasis(subject *subj, delimiter *start_delim)  				}  				opener = opener->previous;  			} +			opener_not_found = opener == NULL || +				opener == start_delim; +			old_closer = closer;  			if (closer->delim_char == '*' || closer->delim_char == '_') {  				if (opener != NULL && opener != start_delim) {  					closer = S_insert_emph(subj, opener, closer); @@ -486,6 +491,12 @@ static void process_emphasis(subject *subj, delimiter *start_delim)  				}  				closer = closer->next;  			} +			if (opener_not_found && !old_closer->can_open) { +				// we can remove a closer that can't be an +				// opener, once we've seen there's no +				// matching opener: +				remove_delimiter(subj, old_closer); +			}  		} else {  			closer = closer->next;  		}  | 
