Update third-party md4c to version 0.4.6
If you try to parse markdown containing null characters, it should not crash anymore. [ChangeLog][Third-Party Code] md4c was updated to 0.4.6. Pick-to: 5.15 Fixes: QTBUG-87965 Change-Id: I6e0ac6f4ecb41c0836f22c7a6a2d510102c933c0 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
dc43061e9a
commit
488e72cce8
217
src/3rdparty/md4c/md4c.c
vendored
217
src/3rdparty/md4c/md4c.c
vendored
@ -137,19 +137,19 @@ struct MD_CTX_tag {
|
||||
|
||||
/* For resolving of inline spans. */
|
||||
MD_MARKCHAIN mark_chains[13];
|
||||
#define PTR_CHAIN ctx->mark_chains[0]
|
||||
#define TABLECELLBOUNDARIES ctx->mark_chains[1]
|
||||
#define ASTERISK_OPENERS_extraword_mod3_0 ctx->mark_chains[2]
|
||||
#define ASTERISK_OPENERS_extraword_mod3_1 ctx->mark_chains[3]
|
||||
#define ASTERISK_OPENERS_extraword_mod3_2 ctx->mark_chains[4]
|
||||
#define ASTERISK_OPENERS_intraword_mod3_0 ctx->mark_chains[5]
|
||||
#define ASTERISK_OPENERS_intraword_mod3_1 ctx->mark_chains[6]
|
||||
#define ASTERISK_OPENERS_intraword_mod3_2 ctx->mark_chains[7]
|
||||
#define UNDERSCORE_OPENERS ctx->mark_chains[8]
|
||||
#define TILDE_OPENERS_1 ctx->mark_chains[9]
|
||||
#define TILDE_OPENERS_2 ctx->mark_chains[10]
|
||||
#define BRACKET_OPENERS ctx->mark_chains[11]
|
||||
#define DOLLAR_OPENERS ctx->mark_chains[12]
|
||||
#define PTR_CHAIN (ctx->mark_chains[0])
|
||||
#define TABLECELLBOUNDARIES (ctx->mark_chains[1])
|
||||
#define ASTERISK_OPENERS_extraword_mod3_0 (ctx->mark_chains[2])
|
||||
#define ASTERISK_OPENERS_extraword_mod3_1 (ctx->mark_chains[3])
|
||||
#define ASTERISK_OPENERS_extraword_mod3_2 (ctx->mark_chains[4])
|
||||
#define ASTERISK_OPENERS_intraword_mod3_0 (ctx->mark_chains[5])
|
||||
#define ASTERISK_OPENERS_intraword_mod3_1 (ctx->mark_chains[6])
|
||||
#define ASTERISK_OPENERS_intraword_mod3_2 (ctx->mark_chains[7])
|
||||
#define UNDERSCORE_OPENERS (ctx->mark_chains[8])
|
||||
#define TILDE_OPENERS_1 (ctx->mark_chains[9])
|
||||
#define TILDE_OPENERS_2 (ctx->mark_chains[10])
|
||||
#define BRACKET_OPENERS (ctx->mark_chains[11])
|
||||
#define DOLLAR_OPENERS (ctx->mark_chains[12])
|
||||
#define OPENERS_CHAIN_FIRST 2
|
||||
#define OPENERS_CHAIN_LAST 12
|
||||
|
||||
@ -273,13 +273,10 @@ struct MD_VERBATIMLINE_tag {
|
||||
#define CH(off) (ctx->text[(off)])
|
||||
#define STR(off) (ctx->text + (off))
|
||||
|
||||
/* Check whether the pointer points into ctx->text. */
|
||||
#define IS_INPUT_STR(ptr) (ctx->text <= (ptr) && (ptr) < (ctx->text + ctx->size))
|
||||
|
||||
/* Character classification.
|
||||
* Note we assume ASCII compatibility of code points < 128 here. */
|
||||
#define ISIN_(ch, ch_min, ch_max) ((ch_min) <= (unsigned)(ch) && (unsigned)(ch) <= (ch_max))
|
||||
#define ISANYOF_(ch, palette) (md_strchr((palette), (ch)) != NULL)
|
||||
#define ISANYOF_(ch, palette) ((ch) != _T('\0') && md_strchr((palette), (ch)) != NULL)
|
||||
#define ISANYOF2_(ch, ch1, ch2) ((ch) == (ch1) || (ch) == (ch2))
|
||||
#define ISANYOF3_(ch, ch1, ch2, ch3) ((ch) == (ch1) || (ch) == (ch2) || (ch) == (ch3))
|
||||
#define ISASCII_(ch) ((unsigned)(ch) <= 127)
|
||||
@ -550,22 +547,22 @@ struct MD_UNICODE_FOLD_INFO_tag {
|
||||
R(0x2030,0x2043), R(0x2045,0x2051), R(0x2053,0x205e), R(0x207d,0x207e), R(0x208d,0x208e),
|
||||
R(0x2308,0x230b), R(0x2329,0x232a), R(0x2768,0x2775), R(0x27c5,0x27c6), R(0x27e6,0x27ef),
|
||||
R(0x2983,0x2998), R(0x29d8,0x29db), R(0x29fc,0x29fd), R(0x2cf9,0x2cfc), R(0x2cfe,0x2cff), S(0x2d70),
|
||||
R(0x2e00,0x2e2e), R(0x2e30,0x2e4f), R(0x3001,0x3003), R(0x3008,0x3011), R(0x3014,0x301f), S(0x3030),
|
||||
S(0x303d), S(0x30a0), S(0x30fb), R(0xa4fe,0xa4ff), R(0xa60d,0xa60f), S(0xa673), S(0xa67e),
|
||||
R(0x2e00,0x2e2e), R(0x2e30,0x2e4f), S(0x2e52), R(0x3001,0x3003), R(0x3008,0x3011), R(0x3014,0x301f),
|
||||
S(0x3030), S(0x303d), S(0x30a0), S(0x30fb), R(0xa4fe,0xa4ff), R(0xa60d,0xa60f), S(0xa673), S(0xa67e),
|
||||
R(0xa6f2,0xa6f7), R(0xa874,0xa877), R(0xa8ce,0xa8cf), R(0xa8f8,0xa8fa), S(0xa8fc), R(0xa92e,0xa92f),
|
||||
S(0xa95f), R(0xa9c1,0xa9cd), R(0xa9de,0xa9df), R(0xaa5c,0xaa5f), R(0xaade,0xaadf), R(0xaaf0,0xaaf1),
|
||||
S(0xabeb), R(0xfd3e,0xfd3f), R(0xfe10,0xfe19), R(0xfe30,0xfe52), R(0xfe54,0xfe61), S(0xfe63), S(0xfe68),
|
||||
R(0xfe6a,0xfe6b), R(0xff01,0xff03), R(0xff05,0xff0a), R(0xff0c,0xff0f), R(0xff1a,0xff1b),
|
||||
R(0xff1f,0xff20), R(0xff3b,0xff3d), S(0xff3f), S(0xff5b), S(0xff5d), R(0xff5f,0xff65), R(0x10100,0x10102),
|
||||
S(0x1039f), S(0x103d0), S(0x1056f), S(0x10857), S(0x1091f), S(0x1093f), R(0x10a50,0x10a58), S(0x10a7f),
|
||||
R(0x10af0,0x10af6), R(0x10b39,0x10b3f), R(0x10b99,0x10b9c), R(0x10f55,0x10f59), R(0x11047,0x1104d),
|
||||
R(0x110bb,0x110bc), R(0x110be,0x110c1), R(0x11140,0x11143), R(0x11174,0x11175), R(0x111c5,0x111c8),
|
||||
S(0x111cd), S(0x111db), R(0x111dd,0x111df), R(0x11238,0x1123d), S(0x112a9), R(0x1144b,0x1144f),
|
||||
S(0x1145b), S(0x1145d), S(0x114c6), R(0x115c1,0x115d7), R(0x11641,0x11643), R(0x11660,0x1166c),
|
||||
R(0x1173c,0x1173e), S(0x1183b), S(0x119e2), R(0x11a3f,0x11a46), R(0x11a9a,0x11a9c), R(0x11a9e,0x11aa2),
|
||||
R(0x11c41,0x11c45), R(0x11c70,0x11c71), R(0x11ef7,0x11ef8), S(0x11fff), R(0x12470,0x12474),
|
||||
R(0x16a6e,0x16a6f), S(0x16af5), R(0x16b37,0x16b3b), S(0x16b44), R(0x16e97,0x16e9a), S(0x16fe2),
|
||||
S(0x1bc9f), R(0x1da87,0x1da8b), R(0x1e95e,0x1e95f)
|
||||
R(0x10af0,0x10af6), R(0x10b39,0x10b3f), R(0x10b99,0x10b9c), S(0x10ead), R(0x10f55,0x10f59),
|
||||
R(0x11047,0x1104d), R(0x110bb,0x110bc), R(0x110be,0x110c1), R(0x11140,0x11143), R(0x11174,0x11175),
|
||||
R(0x111c5,0x111c8), S(0x111cd), S(0x111db), R(0x111dd,0x111df), R(0x11238,0x1123d), S(0x112a9),
|
||||
R(0x1144b,0x1144f), R(0x1145a,0x1145b), S(0x1145d), S(0x114c6), R(0x115c1,0x115d7), R(0x11641,0x11643),
|
||||
R(0x11660,0x1166c), R(0x1173c,0x1173e), S(0x1183b), R(0x11944,0x11946), S(0x119e2), R(0x11a3f,0x11a46),
|
||||
R(0x11a9a,0x11a9c), R(0x11a9e,0x11aa2), R(0x11c41,0x11c45), R(0x11c70,0x11c71), R(0x11ef7,0x11ef8),
|
||||
S(0x11fff), R(0x12470,0x12474), R(0x16a6e,0x16a6f), S(0x16af5), R(0x16b37,0x16b3b), S(0x16b44),
|
||||
R(0x16e97,0x16e9a), S(0x16fe2), S(0x1bc9f), R(0x1da87,0x1da8b), R(0x1e95e,0x1e95f)
|
||||
};
|
||||
#undef R
|
||||
#undef S
|
||||
@ -588,52 +585,56 @@ struct MD_UNICODE_FOLD_INFO_tag {
|
||||
static const unsigned FOLD_MAP_1[] = {
|
||||
R(0x0041,0x005a), S(0x00b5), R(0x00c0,0x00d6), R(0x00d8,0x00de), R(0x0100,0x012e), R(0x0132,0x0136),
|
||||
R(0x0139,0x0147), R(0x014a,0x0176), S(0x0178), R(0x0179,0x017d), S(0x017f), S(0x0181), S(0x0182),
|
||||
S(0x0186), S(0x0187), S(0x0189), S(0x018b), S(0x018e), S(0x018f), S(0x0190), S(0x0191), S(0x0193),
|
||||
S(0x0194), S(0x0196), S(0x0197), S(0x0198), S(0x019c), S(0x019d), S(0x019f), R(0x01a0,0x01a4), S(0x01a6),
|
||||
S(0x01a7), S(0x01a9), S(0x01ac), S(0x01ae), S(0x01af), S(0x01b1), S(0x01b3), S(0x01b7), S(0x01b8),
|
||||
S(0x01bc), S(0x01c4), S(0x01c5), S(0x01c7), S(0x01c8), S(0x01ca), R(0x01cb,0x01db), R(0x01de,0x01ee),
|
||||
S(0x01f1), S(0x01f2), S(0x01f6), S(0x01f7), R(0x01f8,0x021e), S(0x0220), R(0x0222,0x0232), S(0x023a),
|
||||
S(0x023b), S(0x023d), S(0x023e), S(0x0241), S(0x0243), S(0x0244), S(0x0245), R(0x0246,0x024e), S(0x0345),
|
||||
S(0x0370), S(0x0376), S(0x037f), S(0x0386), R(0x0388,0x038a), S(0x038c), S(0x038e), R(0x0391,0x03a1),
|
||||
R(0x03a3,0x03ab), S(0x03c2), S(0x03cf), S(0x03d0), S(0x03d1), S(0x03d5), S(0x03d6), R(0x03d8,0x03ee),
|
||||
S(0x03f0), S(0x03f1), S(0x03f4), S(0x03f5), S(0x03f7), S(0x03f9), S(0x03fa), R(0x03fd,0x03ff),
|
||||
R(0x0400,0x040f), R(0x0410,0x042f), R(0x0460,0x0480), R(0x048a,0x04be), S(0x04c0), R(0x04c1,0x04cd),
|
||||
R(0x04d0,0x052e), R(0x0531,0x0556), R(0x10a0,0x10c5), S(0x10c7), S(0x10cd), R(0x13f8,0x13fd), S(0x1c80),
|
||||
S(0x1c81), S(0x1c82), S(0x1c83), S(0x1c85), S(0x1c86), S(0x1c87), S(0x1c88), R(0x1c90,0x1cba),
|
||||
S(0x0184), S(0x0186), S(0x0187), S(0x0189), S(0x018a), S(0x018b), S(0x018e), S(0x018f), S(0x0190),
|
||||
S(0x0191), S(0x0193), S(0x0194), S(0x0196), S(0x0197), S(0x0198), S(0x019c), S(0x019d), S(0x019f),
|
||||
R(0x01a0,0x01a4), S(0x01a6), S(0x01a7), S(0x01a9), S(0x01ac), S(0x01ae), S(0x01af), S(0x01b1), S(0x01b2),
|
||||
S(0x01b3), S(0x01b5), S(0x01b7), S(0x01b8), S(0x01bc), S(0x01c4), S(0x01c5), S(0x01c7), S(0x01c8),
|
||||
S(0x01ca), R(0x01cb,0x01db), R(0x01de,0x01ee), S(0x01f1), S(0x01f2), S(0x01f4), S(0x01f6), S(0x01f7),
|
||||
R(0x01f8,0x021e), S(0x0220), R(0x0222,0x0232), S(0x023a), S(0x023b), S(0x023d), S(0x023e), S(0x0241),
|
||||
S(0x0243), S(0x0244), S(0x0245), R(0x0246,0x024e), S(0x0345), S(0x0370), S(0x0372), S(0x0376), S(0x037f),
|
||||
S(0x0386), R(0x0388,0x038a), S(0x038c), S(0x038e), S(0x038f), R(0x0391,0x03a1), R(0x03a3,0x03ab),
|
||||
S(0x03c2), S(0x03cf), S(0x03d0), S(0x03d1), S(0x03d5), S(0x03d6), R(0x03d8,0x03ee), S(0x03f0), S(0x03f1),
|
||||
S(0x03f4), S(0x03f5), S(0x03f7), S(0x03f9), S(0x03fa), R(0x03fd,0x03ff), R(0x0400,0x040f),
|
||||
R(0x0410,0x042f), R(0x0460,0x0480), R(0x048a,0x04be), S(0x04c0), R(0x04c1,0x04cd), R(0x04d0,0x052e),
|
||||
R(0x0531,0x0556), R(0x10a0,0x10c5), S(0x10c7), S(0x10cd), R(0x13f8,0x13fd), S(0x1c80), S(0x1c81),
|
||||
S(0x1c82), S(0x1c83), S(0x1c84), S(0x1c85), S(0x1c86), S(0x1c87), S(0x1c88), R(0x1c90,0x1cba),
|
||||
R(0x1cbd,0x1cbf), R(0x1e00,0x1e94), S(0x1e9b), R(0x1ea0,0x1efe), R(0x1f08,0x1f0f), R(0x1f18,0x1f1d),
|
||||
R(0x1f28,0x1f2f), R(0x1f38,0x1f3f), R(0x1f48,0x1f4d), S(0x1f59), S(0x1f5b), S(0x1f5d), S(0x1f5f),
|
||||
R(0x1f68,0x1f6f), S(0x1fb8), S(0x1fba), S(0x1fbe), R(0x1fc8,0x1fcb), S(0x1fd8), S(0x1fda), S(0x1fe8),
|
||||
S(0x1fea), S(0x1fec), S(0x1ff8), S(0x1ffa), S(0x2126), S(0x212a), S(0x212b), S(0x2132), R(0x2160,0x216f),
|
||||
S(0x2183), R(0x24b6,0x24cf), R(0x2c00,0x2c2e), S(0x2c60), S(0x2c62), S(0x2c63), S(0x2c64),
|
||||
R(0x2c67,0x2c6b), S(0x2c6d), S(0x2c6e), S(0x2c6f), S(0x2c70), S(0x2c72), S(0x2c75), S(0x2c7e),
|
||||
R(0x2c80,0x2ce2), S(0x2ceb), S(0x2cf2), R(0xa640,0xa66c), R(0xa680,0xa69a), R(0xa722,0xa72e),
|
||||
R(0xa732,0xa76e), S(0xa779), S(0xa77d), R(0xa77e,0xa786), S(0xa78b), S(0xa78d), S(0xa790),
|
||||
R(0x1f68,0x1f6f), S(0x1fb8), S(0x1fb9), S(0x1fba), S(0x1fbb), S(0x1fbe), R(0x1fc8,0x1fcb), S(0x1fd8),
|
||||
S(0x1fd9), S(0x1fda), S(0x1fdb), S(0x1fe8), S(0x1fe9), S(0x1fea), S(0x1feb), S(0x1fec), S(0x1ff8),
|
||||
S(0x1ff9), S(0x1ffa), S(0x1ffb), S(0x2126), S(0x212a), S(0x212b), S(0x2132), R(0x2160,0x216f), S(0x2183),
|
||||
R(0x24b6,0x24cf), R(0x2c00,0x2c2e), S(0x2c60), S(0x2c62), S(0x2c63), S(0x2c64), R(0x2c67,0x2c6b),
|
||||
S(0x2c6d), S(0x2c6e), S(0x2c6f), S(0x2c70), S(0x2c72), S(0x2c75), S(0x2c7e), S(0x2c7f), R(0x2c80,0x2ce2),
|
||||
S(0x2ceb), S(0x2ced), S(0x2cf2), R(0xa640,0xa66c), R(0xa680,0xa69a), R(0xa722,0xa72e), R(0xa732,0xa76e),
|
||||
S(0xa779), S(0xa77b), S(0xa77d), R(0xa77e,0xa786), S(0xa78b), S(0xa78d), S(0xa790), S(0xa792),
|
||||
R(0xa796,0xa7a8), S(0xa7aa), S(0xa7ab), S(0xa7ac), S(0xa7ad), S(0xa7ae), S(0xa7b0), S(0xa7b1), S(0xa7b2),
|
||||
S(0xa7b3), R(0xa7b4,0xa7be), S(0xa7c2), S(0xa7c4), S(0xa7c5), S(0xa7c6), R(0xab70,0xabbf),
|
||||
R(0xff21,0xff3a), R(0x10400,0x10427), R(0x104b0,0x104d3), R(0x10c80,0x10cb2), R(0x118a0,0x118bf),
|
||||
R(0x16e40,0x16e5f), R(0x1e900,0x1e921)
|
||||
S(0xa7b3), R(0xa7b4,0xa7be), S(0xa7c2), S(0xa7c4), S(0xa7c5), S(0xa7c6), S(0xa7c7), S(0xa7c9), S(0xa7f5),
|
||||
R(0xab70,0xabbf), R(0xff21,0xff3a), R(0x10400,0x10427), R(0x104b0,0x104d3), R(0x10c80,0x10cb2),
|
||||
R(0x118a0,0x118bf), R(0x16e40,0x16e5f), R(0x1e900,0x1e921)
|
||||
};
|
||||
static const unsigned FOLD_MAP_1_DATA[] = {
|
||||
0x0061, 0x007a, 0x03bc, 0x00e0, 0x00f6, 0x00f8, 0x00fe, 0x0101, 0x012f, 0x0133, 0x0137, 0x013a, 0x0148,
|
||||
0x014b, 0x0177, 0x00ff, 0x017a, 0x017e, 0x0073, 0x0253, 0x0183, 0x0254, 0x0188, 0x0256, 0x018c, 0x01dd,
|
||||
0x0259, 0x025b, 0x0192, 0x0260, 0x0263, 0x0269, 0x0268, 0x0199, 0x026f, 0x0272, 0x0275, 0x01a1, 0x01a5,
|
||||
0x0280, 0x01a8, 0x0283, 0x01ad, 0x0288, 0x01b0, 0x028a, 0x01b4, 0x0292, 0x01b9, 0x01bd, 0x01c6, 0x01c6,
|
||||
0x01c9, 0x01c9, 0x01cc, 0x01cc, 0x01dc, 0x01df, 0x01ef, 0x01f3, 0x01f3, 0x0195, 0x01bf, 0x01f9, 0x021f,
|
||||
0x019e, 0x0223, 0x0233, 0x2c65, 0x023c, 0x019a, 0x2c66, 0x0242, 0x0180, 0x0289, 0x028c, 0x0247, 0x024f,
|
||||
0x03b9, 0x0371, 0x0377, 0x03f3, 0x03ac, 0x03ad, 0x03af, 0x03cc, 0x03cd, 0x03b1, 0x03c1, 0x03c3, 0x03cb,
|
||||
0x03c3, 0x03d7, 0x03b2, 0x03b8, 0x03c6, 0x03c0, 0x03d9, 0x03ef, 0x03ba, 0x03c1, 0x03b8, 0x03b5, 0x03f8,
|
||||
0x03f2, 0x03fb, 0x037b, 0x037d, 0x0450, 0x045f, 0x0430, 0x044f, 0x0461, 0x0481, 0x048b, 0x04bf, 0x04cf,
|
||||
0x04c2, 0x04ce, 0x04d1, 0x052f, 0x0561, 0x0586, 0x2d00, 0x2d25, 0x2d27, 0x2d2d, 0x13f0, 0x13f5, 0x0432,
|
||||
0x0434, 0x043e, 0x0441, 0x0442, 0x044a, 0x0463, 0xa64b, 0x10d0, 0x10fa, 0x10fd, 0x10ff, 0x1e01, 0x1e95,
|
||||
0x1e61, 0x1ea1, 0x1eff, 0x1f00, 0x1f07, 0x1f10, 0x1f15, 0x1f20, 0x1f27, 0x1f30, 0x1f37, 0x1f40, 0x1f45,
|
||||
0x1f51, 0x1f53, 0x1f55, 0x1f57, 0x1f60, 0x1f67, 0x1fb0, 0x1f70, 0x03b9, 0x1f72, 0x1f75, 0x1fd0, 0x1f76,
|
||||
0x1fe0, 0x1f7a, 0x1fe5, 0x1f78, 0x1f7c, 0x03c9, 0x006b, 0x00e5, 0x214e, 0x2170, 0x217f, 0x2184, 0x24d0,
|
||||
0x24e9, 0x2c30, 0x2c5e, 0x2c61, 0x026b, 0x1d7d, 0x027d, 0x2c68, 0x2c6c, 0x0251, 0x0271, 0x0250, 0x0252,
|
||||
0x2c73, 0x2c76, 0x023f, 0x2c81, 0x2ce3, 0x2cec, 0x2cf3, 0xa641, 0xa66d, 0xa681, 0xa69b, 0xa723, 0xa72f,
|
||||
0xa733, 0xa76f, 0xa77a, 0x1d79, 0xa77f, 0xa787, 0xa78c, 0x0265, 0xa791, 0xa797, 0xa7a9, 0x0266, 0x025c,
|
||||
0x0261, 0x026c, 0x026a, 0x029e, 0x0287, 0x029d, 0xab53, 0xa7b5, 0xa7bf, 0xa7c3, 0xa794, 0x0282, 0x1d8e,
|
||||
0x13a0, 0x13ef, 0xff41, 0xff5a, 0x10428, 0x1044f, 0x104d8, 0x104fb, 0x10cc0, 0x10cf2, 0x118c0, 0x118df,
|
||||
0x16e60, 0x16e7f, 0x1e922, 0x1e943
|
||||
0x014b, 0x0177, 0x00ff, 0x017a, 0x017e, 0x0073, 0x0253, 0x0183, 0x0185, 0x0254, 0x0188, 0x0256, 0x0257,
|
||||
0x018c, 0x01dd, 0x0259, 0x025b, 0x0192, 0x0260, 0x0263, 0x0269, 0x0268, 0x0199, 0x026f, 0x0272, 0x0275,
|
||||
0x01a1, 0x01a5, 0x0280, 0x01a8, 0x0283, 0x01ad, 0x0288, 0x01b0, 0x028a, 0x028b, 0x01b4, 0x01b6, 0x0292,
|
||||
0x01b9, 0x01bd, 0x01c6, 0x01c6, 0x01c9, 0x01c9, 0x01cc, 0x01cc, 0x01dc, 0x01df, 0x01ef, 0x01f3, 0x01f3,
|
||||
0x01f5, 0x0195, 0x01bf, 0x01f9, 0x021f, 0x019e, 0x0223, 0x0233, 0x2c65, 0x023c, 0x019a, 0x2c66, 0x0242,
|
||||
0x0180, 0x0289, 0x028c, 0x0247, 0x024f, 0x03b9, 0x0371, 0x0373, 0x0377, 0x03f3, 0x03ac, 0x03ad, 0x03af,
|
||||
0x03cc, 0x03cd, 0x03ce, 0x03b1, 0x03c1, 0x03c3, 0x03cb, 0x03c3, 0x03d7, 0x03b2, 0x03b8, 0x03c6, 0x03c0,
|
||||
0x03d9, 0x03ef, 0x03ba, 0x03c1, 0x03b8, 0x03b5, 0x03f8, 0x03f2, 0x03fb, 0x037b, 0x037d, 0x0450, 0x045f,
|
||||
0x0430, 0x044f, 0x0461, 0x0481, 0x048b, 0x04bf, 0x04cf, 0x04c2, 0x04ce, 0x04d1, 0x052f, 0x0561, 0x0586,
|
||||
0x2d00, 0x2d25, 0x2d27, 0x2d2d, 0x13f0, 0x13f5, 0x0432, 0x0434, 0x043e, 0x0441, 0x0442, 0x0442, 0x044a,
|
||||
0x0463, 0xa64b, 0x10d0, 0x10fa, 0x10fd, 0x10ff, 0x1e01, 0x1e95, 0x1e61, 0x1ea1, 0x1eff, 0x1f00, 0x1f07,
|
||||
0x1f10, 0x1f15, 0x1f20, 0x1f27, 0x1f30, 0x1f37, 0x1f40, 0x1f45, 0x1f51, 0x1f53, 0x1f55, 0x1f57, 0x1f60,
|
||||
0x1f67, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, 0x03b9, 0x1f72, 0x1f75, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, 0x1fe0,
|
||||
0x1fe1, 0x1f7a, 0x1f7b, 0x1fe5, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, 0x03c9, 0x006b, 0x00e5, 0x214e, 0x2170,
|
||||
0x217f, 0x2184, 0x24d0, 0x24e9, 0x2c30, 0x2c5e, 0x2c61, 0x026b, 0x1d7d, 0x027d, 0x2c68, 0x2c6c, 0x0251,
|
||||
0x0271, 0x0250, 0x0252, 0x2c73, 0x2c76, 0x023f, 0x0240, 0x2c81, 0x2ce3, 0x2cec, 0x2cee, 0x2cf3, 0xa641,
|
||||
0xa66d, 0xa681, 0xa69b, 0xa723, 0xa72f, 0xa733, 0xa76f, 0xa77a, 0xa77c, 0x1d79, 0xa77f, 0xa787, 0xa78c,
|
||||
0x0265, 0xa791, 0xa793, 0xa797, 0xa7a9, 0x0266, 0x025c, 0x0261, 0x026c, 0x026a, 0x029e, 0x0287, 0x029d,
|
||||
0xab53, 0xa7b5, 0xa7bf, 0xa7c3, 0xa794, 0x0282, 0x1d8e, 0xa7c8, 0xa7ca, 0xa7f6, 0x13a0, 0x13ef, 0xff41,
|
||||
0xff5a, 0x10428, 0x1044f, 0x104d8, 0x104fb, 0x10cc0, 0x10cf2, 0x118c0, 0x118df, 0x16e60, 0x16e7f, 0x1e922,
|
||||
0x1e943
|
||||
};
|
||||
static const unsigned FOLD_MAP_2[] = {
|
||||
S(0x00df), S(0x0130), S(0x0149), S(0x01f0), S(0x0587), S(0x1e96), S(0x1e97), S(0x1e98), S(0x1e99),
|
||||
@ -1495,6 +1496,8 @@ struct MD_REF_DEF_tag {
|
||||
SZ title_size;
|
||||
OFF dest_beg;
|
||||
OFF dest_end;
|
||||
unsigned char label_needs_free : 1;
|
||||
unsigned char title_needs_free : 1;
|
||||
};
|
||||
|
||||
/* Label equivalence is quite complicated with regards to whitespace and case
|
||||
@ -1574,8 +1577,8 @@ md_link_label_cmp(const CHAR* a_label, SZ a_size, const CHAR* b_label, SZ b_size
|
||||
OFF b_off;
|
||||
int a_reached_end = FALSE;
|
||||
int b_reached_end = FALSE;
|
||||
MD_UNICODE_FOLD_INFO a_fi = { 0 };
|
||||
MD_UNICODE_FOLD_INFO b_fi = { 0 };
|
||||
MD_UNICODE_FOLD_INFO a_fi = { { 0 }, 0 };
|
||||
MD_UNICODE_FOLD_INFO b_fi = { { 0 }, 0 };
|
||||
OFF a_fi_off = 0;
|
||||
OFF b_fi_off = 0;
|
||||
int cmp;
|
||||
@ -2074,20 +2077,18 @@ md_is_link_reference_definition(MD_CTX* ctx, const MD_LINE* lines, int n_lines)
|
||||
OFF label_contents_beg;
|
||||
OFF label_contents_end;
|
||||
int label_contents_line_index = -1;
|
||||
int label_is_multiline;
|
||||
CHAR* label = NULL;
|
||||
SZ label_size;
|
||||
int label_is_multiline = FALSE;
|
||||
OFF dest_contents_beg;
|
||||
OFF dest_contents_end;
|
||||
OFF title_contents_beg;
|
||||
OFF title_contents_end;
|
||||
int title_contents_line_index;
|
||||
int title_is_multiline;
|
||||
int title_is_multiline = FALSE;
|
||||
OFF off;
|
||||
int line_index = 0;
|
||||
int tmp_line_index;
|
||||
MD_REF_DEF* def;
|
||||
int ret;
|
||||
MD_REF_DEF* def = NULL;
|
||||
int ret = 0;
|
||||
|
||||
/* Link label. */
|
||||
if(!md_is_link_label(ctx, lines, n_lines, lines[0].beg,
|
||||
@ -2138,17 +2139,7 @@ md_is_link_reference_definition(MD_CTX* ctx, const MD_LINE* lines, int n_lines)
|
||||
if(off < lines[line_index].end)
|
||||
return FALSE;
|
||||
|
||||
/* Construct label. */
|
||||
if(!label_is_multiline) {
|
||||
label = (CHAR*) STR(label_contents_beg);
|
||||
label_size = label_contents_end - label_contents_beg;
|
||||
} else {
|
||||
MD_CHECK(md_merge_lines_alloc(ctx, label_contents_beg, label_contents_end,
|
||||
lines + label_contents_line_index, n_lines - label_contents_line_index,
|
||||
_T(' '), &label, &label_size));
|
||||
}
|
||||
|
||||
/* Store the reference definition. */
|
||||
/* So, it _is_ a reference definition. Remember it. */
|
||||
if(ctx->n_ref_defs >= ctx->alloc_ref_defs) {
|
||||
MD_REF_DEF* new_defs;
|
||||
|
||||
@ -2163,36 +2154,42 @@ md_is_link_reference_definition(MD_CTX* ctx, const MD_LINE* lines, int n_lines)
|
||||
|
||||
ctx->ref_defs = new_defs;
|
||||
}
|
||||
|
||||
def = &ctx->ref_defs[ctx->n_ref_defs];
|
||||
memset(def, 0, sizeof(MD_REF_DEF));
|
||||
|
||||
def->label = label;
|
||||
def->label_size = label_size;
|
||||
|
||||
def->dest_beg = dest_contents_beg;
|
||||
def->dest_end = dest_contents_end;
|
||||
|
||||
if(title_contents_beg >= title_contents_end) {
|
||||
def->title = NULL;
|
||||
def->title_size = 0;
|
||||
} else if(!title_is_multiline) {
|
||||
def->title = (CHAR*) STR(title_contents_beg);
|
||||
def->title_size = title_contents_end - title_contents_beg;
|
||||
if(label_is_multiline) {
|
||||
MD_CHECK(md_merge_lines_alloc(ctx, label_contents_beg, label_contents_end,
|
||||
lines + label_contents_line_index, n_lines - label_contents_line_index,
|
||||
_T(' '), &def->label, &def->label_size));
|
||||
def->label_needs_free = TRUE;
|
||||
} else {
|
||||
def->label = (CHAR*) STR(label_contents_beg);
|
||||
def->label_size = label_contents_end - label_contents_beg;
|
||||
}
|
||||
|
||||
if(title_is_multiline) {
|
||||
MD_CHECK(md_merge_lines_alloc(ctx, title_contents_beg, title_contents_end,
|
||||
lines + title_contents_line_index, n_lines - title_contents_line_index,
|
||||
_T('\n'), &def->title, &def->title_size));
|
||||
def->title_needs_free = TRUE;
|
||||
} else {
|
||||
def->title = (CHAR*) STR(title_contents_beg);
|
||||
def->title_size = title_contents_end - title_contents_beg;
|
||||
}
|
||||
|
||||
def->dest_beg = dest_contents_beg;
|
||||
def->dest_end = dest_contents_end;
|
||||
|
||||
/* Success. */
|
||||
ctx->n_ref_defs++;
|
||||
return line_index + 1;
|
||||
|
||||
abort:
|
||||
/* Failure. */
|
||||
if(!IS_INPUT_STR(label))
|
||||
free(label);
|
||||
if(def != NULL && def->label_needs_free)
|
||||
free(def->label);
|
||||
if(def != NULL && def->title_needs_free)
|
||||
free(def->title);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -2241,7 +2238,7 @@ md_is_link_reference(MD_CTX* ctx, const MD_LINE* lines, int n_lines,
|
||||
attr->title_needs_free = FALSE;
|
||||
}
|
||||
|
||||
if(!IS_INPUT_STR(label))
|
||||
if(beg_line != end_line)
|
||||
free(label);
|
||||
|
||||
ret = (def != NULL);
|
||||
@ -2355,9 +2352,9 @@ md_free_ref_defs(MD_CTX* ctx)
|
||||
for(i = 0; i < ctx->n_ref_defs; i++) {
|
||||
MD_REF_DEF* def = &ctx->ref_defs[i];
|
||||
|
||||
if(!IS_INPUT_STR(def->label))
|
||||
if(def->label_needs_free)
|
||||
free(def->label);
|
||||
if(!IS_INPUT_STR(def->title))
|
||||
if(def->title_needs_free)
|
||||
free(def->title);
|
||||
}
|
||||
|
||||
@ -2728,7 +2725,7 @@ md_build_mark_char_map(MD_CTX* ctx)
|
||||
}
|
||||
}
|
||||
|
||||
/* We limit code span marks to lower then 32 backticks. This solves the
|
||||
/* We limit code span marks to lower than 32 backticks. This solves the
|
||||
* pathologic case of too many openers, each of different length: Their
|
||||
* resolving would be then O(n^2). */
|
||||
#define CODESPAN_MARK_MAXLEN 32
|
||||
@ -3447,7 +3444,7 @@ md_resolve_links(MD_CTX* ctx, const MD_LINE* lines, int n_lines)
|
||||
|
||||
is_link = TRUE;
|
||||
|
||||
/* We don't allow destination to be longer then 100 characters.
|
||||
/* We don't allow destination to be longer than 100 characters.
|
||||
* Lets scan to see whether there is '|'. (If not then the whole
|
||||
* wiki-link has to be below the 100 characters.) */
|
||||
delim_index = opener_index + 1;
|
||||
@ -3550,7 +3547,7 @@ md_resolve_links(MD_CTX* ctx, const MD_LINE* lines, int n_lines)
|
||||
if((mark->flags & (MD_MARK_OPENER | MD_MARK_RESOLVED)) == (MD_MARK_OPENER | MD_MARK_RESOLVED)) {
|
||||
if(ctx->marks[mark->next].beg >= inline_link_end) {
|
||||
/* Cancel the link status. */
|
||||
if(!IS_INPUT_STR(attr.title))
|
||||
if(attr.title_needs_free)
|
||||
free(attr.title);
|
||||
is_link = FALSE;
|
||||
break;
|
||||
@ -4582,9 +4579,9 @@ md_process_verbatim_block_contents(MD_CTX* ctx, MD_TEXTTYPE text_type, const MD_
|
||||
MD_ASSERT(indent >= 0);
|
||||
|
||||
/* Output code indentation. */
|
||||
while(indent > (int) SIZEOF_ARRAY(indent_chunk_str)) {
|
||||
while(indent > (int) indent_chunk_size) {
|
||||
MD_TEXT(text_type, indent_chunk_str, indent_chunk_size);
|
||||
indent -= SIZEOF_ARRAY(indent_chunk_str);
|
||||
indent -= indent_chunk_size;
|
||||
}
|
||||
if(indent > 0)
|
||||
MD_TEXT(text_type, indent_chunk_str, indent);
|
||||
@ -5811,7 +5808,7 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
|
||||
#if 1
|
||||
/* This is 2nd half of the hack. If the flag is set (that is there
|
||||
* were 2nd blank line at the start of the list item) and we would also
|
||||
* belonging to such list item, then interrupt the list. */
|
||||
* belonging to such list item, than interrupt the list. */
|
||||
ctx->last_line_has_list_loosening_effect = FALSE;
|
||||
if(ctx->last_list_item_starts_with_two_blank_lines) {
|
||||
if(n_parents > 0 && ctx->containers[n_parents-1].ch != _T('>') &&
|
||||
|
43
src/3rdparty/md4c/md4c.h
vendored
43
src/3rdparty/md4c/md4c.h
vendored
@ -23,15 +23,15 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef MD4C_MARKDOWN_H
|
||||
#define MD4C_MARKDOWN_H
|
||||
#ifndef MD4C_H
|
||||
#define MD4C_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined MD4C_USE_UTF16
|
||||
/* Magic to support UTF-16. Not that in order to use it, you have to define
|
||||
/* Magic to support UTF-16. Note that in order to use it, you have to define
|
||||
* the macro MD4C_USE_UTF16 both when building MD4C as well as when
|
||||
* including this header in your code. */
|
||||
#ifdef _WIN32
|
||||
@ -119,7 +119,7 @@ typedef enum MD_SPANTYPE {
|
||||
* Detail: Structure MD_SPAN_IMG_DETAIL.
|
||||
* Note: Image text can contain nested spans and even nested images.
|
||||
* If rendered into ALT attribute of HTML <IMG> tag, it's responsibility
|
||||
* of the renderer to deal with it.
|
||||
* of the parser to deal with it.
|
||||
*/
|
||||
MD_SPAN_IMG,
|
||||
|
||||
@ -171,7 +171,7 @@ typedef enum MD_TEXTTYPE {
|
||||
* (c) Hexadecimal entity, e.g. ካ
|
||||
*
|
||||
* As MD4C is mostly encoding agnostic, application gets the verbatim
|
||||
* entity text into the MD_RENDERER::text_callback(). */
|
||||
* entity text into the MD_PARSER::text_callback(). */
|
||||
MD_TEXT_ENTITY,
|
||||
|
||||
/* Text in a code block (inside MD_BLOCK_CODE) or inlined code (`code`).
|
||||
@ -206,8 +206,13 @@ typedef enum MD_ALIGN {
|
||||
* propagated within various detailed structures, but which still may contain
|
||||
* string portions of different types like e.g. entities.
|
||||
*
|
||||
* So, for example, lets consider an image has a title attribute string
|
||||
* set to "foo " bar". (Note the string size is 14.)
|
||||
* So, for example, lets consider this image:
|
||||
*
|
||||
* ![image alt text](http://example.org/image.png 'foo " bar')
|
||||
*
|
||||
* The image alt text is propagated as a normal text via the MD_PARSER::text()
|
||||
* callback. However, the image title ('foo " bar') is propagated as
|
||||
* MD_ATTRIBUTE in MD_SPAN_IMG_DETAIL::title.
|
||||
*
|
||||
* Then the attribute MD_SPAN_IMG_DETAIL::title shall provide the following:
|
||||
* -- [0]: "foo " (substr_types[0] == MD_TEXT_NORMAL; substr_offsets[0] == 0)
|
||||
@ -215,10 +220,12 @@ typedef enum MD_ALIGN {
|
||||
* -- [2]: " bar" (substr_types[2] == MD_TEXT_NORMAL; substr_offsets[2] == 10)
|
||||
* -- [3]: (n/a) (n/a ; substr_offsets[3] == 14)
|
||||
*
|
||||
* Note that these conditions are guaranteed:
|
||||
* Note that these invariants are always guaranteed:
|
||||
* -- substr_offsets[0] == 0
|
||||
* -- substr_offsets[LAST+1] == size
|
||||
* -- Only MD_TEXT_NORMAL, MD_TEXT_ENTITY, MD_TEXT_NULLCHAR substrings can appear.
|
||||
* -- Currently, only MD_TEXT_NORMAL, MD_TEXT_ENTITY, MD_TEXT_NULLCHAR
|
||||
* substrings can appear. This could change only of the specification
|
||||
* changes.
|
||||
*/
|
||||
typedef struct MD_ATTRIBUTE {
|
||||
const MD_CHAR* text;
|
||||
@ -284,7 +291,7 @@ typedef struct MD_SPAN_WIKILINK {
|
||||
|
||||
/* Flags specifying extensions/deviations from CommonMark specification.
|
||||
*
|
||||
* By default (when MD_RENDERER::flags == 0), we follow CommonMark specification.
|
||||
* By default (when MD_PARSER::flags == 0), we follow CommonMark specification.
|
||||
* The following flags may allow some extensions or deviations from it.
|
||||
*/
|
||||
#define MD_FLAG_COLLAPSEWHITESPACE 0x0001 /* In MD_TEXT_NORMAL, collapse non-trivial whitespace into single ' ' */
|
||||
@ -317,7 +324,7 @@ typedef struct MD_SPAN_WIKILINK {
|
||||
#define MD_DIALECT_COMMONMARK 0
|
||||
#define MD_DIALECT_GITHUB (MD_FLAG_PERMISSIVEAUTOLINKS | MD_FLAG_TABLES | MD_FLAG_STRIKETHROUGH | MD_FLAG_TASKLISTS)
|
||||
|
||||
/* Renderer structure.
|
||||
/* Parser structure.
|
||||
*/
|
||||
typedef struct MD_PARSER {
|
||||
/* Reserved. Set to zero.
|
||||
@ -338,9 +345,10 @@ typedef struct MD_PARSER {
|
||||
*
|
||||
* Note any strings provided to the callbacks as their arguments or as
|
||||
* members of any detail structure are generally not zero-terminated.
|
||||
* Application has take the respective size information into account.
|
||||
* Application has to take the respective size information into account.
|
||||
*
|
||||
* Callbacks may abort further parsing of the document by returning non-zero.
|
||||
* Any rendering callback may abort further parsing of the document by
|
||||
* returning non-zero.
|
||||
*/
|
||||
int (*enter_block)(MD_BLOCKTYPE /*type*/, void* /*detail*/, void* /*userdata*/);
|
||||
int (*leave_block)(MD_BLOCKTYPE /*type*/, void* /*detail*/, void* /*userdata*/);
|
||||
@ -365,18 +373,19 @@ typedef struct MD_PARSER {
|
||||
} MD_PARSER;
|
||||
|
||||
|
||||
/* For backward compatibility. Do not use in new code. */
|
||||
/* For backward compatibility. Do not use in new code.
|
||||
*/
|
||||
typedef MD_PARSER MD_RENDERER;
|
||||
|
||||
|
||||
/* Parse the Markdown document stored in the string 'text' of size 'size'.
|
||||
* The renderer provides callbacks to be called during the parsing so the
|
||||
* The parser provides callbacks to be called during the parsing so the
|
||||
* caller can render the document on the screen or convert the Markdown
|
||||
* to another format.
|
||||
*
|
||||
* Zero is returned on success. If a runtime error occurs (e.g. a memory
|
||||
* fails), -1 is returned. If the processing is aborted due any callback
|
||||
* returning non-zero, md_parse() the return value of the callback is returned.
|
||||
* returning non-zero, the return value of the callback is returned.
|
||||
*/
|
||||
int md_parse(const MD_CHAR* text, MD_SIZE size, const MD_PARSER* parser, void* userdata);
|
||||
|
||||
@ -385,4 +394,4 @@ int md_parse(const MD_CHAR* text, MD_SIZE size, const MD_PARSER* parser, void* u
|
||||
} /* extern "C" { */
|
||||
#endif
|
||||
|
||||
#endif /* MD4C_MARKDOWN_H */
|
||||
#endif /* MD4C_H */
|
||||
|
4
src/3rdparty/md4c/qt_attribution.json
vendored
4
src/3rdparty/md4c/qt_attribution.json
vendored
@ -9,7 +9,7 @@
|
||||
"License": "MIT License",
|
||||
"LicenseId": "MIT",
|
||||
"LicenseFile": "LICENSE.md",
|
||||
"Version": "0.4.3",
|
||||
"DownloadLocation": "https://github.com/mity/md4c/releases/tag/release-0.4.3",
|
||||
"Version": "0.4.6",
|
||||
"DownloadLocation": "https://github.com/mity/md4c/releases/tag/release-0.4.6",
|
||||
"Copyright": "Copyright © 2016-2020 Martin Mitáš"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user