@@ -41,6 +41,8 @@ typedef struct bracket {
41
41
bool image ;
42
42
bool active ;
43
43
bool bracket_after ;
44
+ bool in_bracket_image0 ;
45
+ bool in_bracket_image1 ;
44
46
} bracket ;
45
47
46
48
typedef struct subject {
@@ -516,6 +518,8 @@ static void push_bracket(subject *subj, bool image, cmark_node *inl_text) {
516
518
bracket * b = (bracket * )subj -> mem -> calloc (1 , sizeof (bracket ));
517
519
if (subj -> last_bracket != NULL ) {
518
520
subj -> last_bracket -> bracket_after = true;
521
+ b -> in_bracket_image0 = subj -> last_bracket -> in_bracket_image0 ;
522
+ b -> in_bracket_image1 = subj -> last_bracket -> in_bracket_image1 ;
519
523
}
520
524
b -> image = image ;
521
525
b -> active = true;
@@ -524,6 +528,11 @@ static void push_bracket(subject *subj, bool image, cmark_node *inl_text) {
524
528
b -> previous_delimiter = subj -> last_delim ;
525
529
b -> position = subj -> pos ;
526
530
b -> bracket_after = false;
531
+ if (image ) {
532
+ b -> in_bracket_image1 = true;
533
+ } else {
534
+ b -> in_bracket_image0 = true;
535
+ }
527
536
subj -> last_bracket = b ;
528
537
}
529
538
@@ -1254,6 +1263,17 @@ static cmark_node *handle_close_bracket(cmark_parser *parser, subject *subj) {
1254
1263
}
1255
1264
opener = opener -> previous ;
1256
1265
}
1266
+ bool in_bracket_image1 = false;
1267
+ if (opener ) {
1268
+ in_bracket_image1 = opener -> in_bracket_image1 ;
1269
+ }
1270
+ bracket * opener2 = subj -> last_bracket ;
1271
+ while (opener2 != opener ) {
1272
+ if (opener2 -> image ) {
1273
+ opener2 -> in_bracket_image1 = in_bracket_image1 ;
1274
+ }
1275
+ opener2 = opener2 -> previous ;
1276
+ }
1257
1277
}
1258
1278
1259
1279
return NULL ;
@@ -1662,10 +1682,15 @@ cmark_chunk *cmark_inline_parser_get_chunk(cmark_inline_parser *parser) {
1662
1682
}
1663
1683
1664
1684
int cmark_inline_parser_in_bracket (cmark_inline_parser * parser , int image ) {
1665
- for (bracket * b = parser -> last_bracket ; b ; b = b -> previous )
1666
- if (b -> active && b -> image == (image != 0 ))
1667
- return 1 ;
1668
- return 0 ;
1685
+ bracket * b = parser -> last_bracket ;
1686
+ if (!b ) {
1687
+ return 0 ;
1688
+ }
1689
+ if (image != 0 ) {
1690
+ return b -> in_bracket_image1 ;
1691
+ } else {
1692
+ return b -> in_bracket_image0 ;
1693
+ }
1669
1694
}
1670
1695
1671
1696
void cmark_node_unput (cmark_node * node , int n ) {
0 commit comments