ADDED src/case_fold_switch.inc Index: src/case_fold_switch.inc ================================================================== --- /dev/null +++ src/case_fold_switch.inc @@ -0,0 +1,4327 @@ + switch (c) { + case 0x0041: + bufpush(0x0061); + break; + case 0x0042: + bufpush(0x0062); + break; + case 0x0043: + bufpush(0x0063); + break; + case 0x0044: + bufpush(0x0064); + break; + case 0x0045: + bufpush(0x0065); + break; + case 0x0046: + bufpush(0x0066); + break; + case 0x0047: + bufpush(0x0067); + break; + case 0x0048: + bufpush(0x0068); + break; + case 0x0049: + bufpush(0x0069); + break; + case 0x004A: + bufpush(0x006A); + break; + case 0x004B: + bufpush(0x006B); + break; + case 0x004C: + bufpush(0x006C); + break; + case 0x004D: + bufpush(0x006D); + break; + case 0x004E: + bufpush(0x006E); + break; + case 0x004F: + bufpush(0x006F); + break; + case 0x0050: + bufpush(0x0070); + break; + case 0x0051: + bufpush(0x0071); + break; + case 0x0052: + bufpush(0x0072); + break; + case 0x0053: + bufpush(0x0073); + break; + case 0x0054: + bufpush(0x0074); + break; + case 0x0055: + bufpush(0x0075); + break; + case 0x0056: + bufpush(0x0076); + break; + case 0x0057: + bufpush(0x0077); + break; + case 0x0058: + bufpush(0x0078); + break; + case 0x0059: + bufpush(0x0079); + break; + case 0x005A: + bufpush(0x007A); + break; + case 0x00B5: + bufpush(0x03BC); + break; + case 0x00C0: + bufpush(0x00E0); + break; + case 0x00C1: + bufpush(0x00E1); + break; + case 0x00C2: + bufpush(0x00E2); + break; + case 0x00C3: + bufpush(0x00E3); + break; + case 0x00C4: + bufpush(0x00E4); + break; + case 0x00C5: + bufpush(0x00E5); + break; + case 0x00C6: + bufpush(0x00E6); + break; + case 0x00C7: + bufpush(0x00E7); + break; + case 0x00C8: + bufpush(0x00E8); + break; + case 0x00C9: + bufpush(0x00E9); + break; + case 0x00CA: + bufpush(0x00EA); + break; + case 0x00CB: + bufpush(0x00EB); + break; + case 0x00CC: + bufpush(0x00EC); + break; + case 0x00CD: + bufpush(0x00ED); + break; + case 0x00CE: + bufpush(0x00EE); + break; + case 0x00CF: + bufpush(0x00EF); + break; + case 0x00D0: + bufpush(0x00F0); + break; + case 0x00D1: + bufpush(0x00F1); + break; + case 0x00D2: + bufpush(0x00F2); + break; + case 0x00D3: + bufpush(0x00F3); + break; + case 0x00D4: + bufpush(0x00F4); + break; + case 0x00D5: + bufpush(0x00F5); + break; + case 0x00D6: + bufpush(0x00F6); + break; + case 0x00D8: + bufpush(0x00F8); + break; + case 0x00D9: + bufpush(0x00F9); + break; + case 0x00DA: + bufpush(0x00FA); + break; + case 0x00DB: + bufpush(0x00FB); + break; + case 0x00DC: + bufpush(0x00FC); + break; + case 0x00DD: + bufpush(0x00FD); + break; + case 0x00DE: + bufpush(0x00FE); + break; + case 0x00DF: + bufpush(0x0073); + bufpush(0x0073); + break; + case 0x0100: + bufpush(0x0101); + break; + case 0x0102: + bufpush(0x0103); + break; + case 0x0104: + bufpush(0x0105); + break; + case 0x0106: + bufpush(0x0107); + break; + case 0x0108: + bufpush(0x0109); + break; + case 0x010A: + bufpush(0x010B); + break; + case 0x010C: + bufpush(0x010D); + break; + case 0x010E: + bufpush(0x010F); + break; + case 0x0110: + bufpush(0x0111); + break; + case 0x0112: + bufpush(0x0113); + break; + case 0x0114: + bufpush(0x0115); + break; + case 0x0116: + bufpush(0x0117); + break; + case 0x0118: + bufpush(0x0119); + break; + case 0x011A: + bufpush(0x011B); + break; + case 0x011C: + bufpush(0x011D); + break; + case 0x011E: + bufpush(0x011F); + break; + case 0x0120: + bufpush(0x0121); + break; + case 0x0122: + bufpush(0x0123); + break; + case 0x0124: + bufpush(0x0125); + break; + case 0x0126: + bufpush(0x0127); + break; + case 0x0128: + bufpush(0x0129); + break; + case 0x012A: + bufpush(0x012B); + break; + case 0x012C: + bufpush(0x012D); + break; + case 0x012E: + bufpush(0x012F); + break; + case 0x0130: + bufpush(0x0069); + bufpush(0x0307); + break; + case 0x0132: + bufpush(0x0133); + break; + case 0x0134: + bufpush(0x0135); + break; + case 0x0136: + bufpush(0x0137); + break; + case 0x0139: + bufpush(0x013A); + break; + case 0x013B: + bufpush(0x013C); + break; + case 0x013D: + bufpush(0x013E); + break; + case 0x013F: + bufpush(0x0140); + break; + case 0x0141: + bufpush(0x0142); + break; + case 0x0143: + bufpush(0x0144); + break; + case 0x0145: + bufpush(0x0146); + break; + case 0x0147: + bufpush(0x0148); + break; + case 0x0149: + bufpush(0x02BC); + bufpush(0x006E); + break; + case 0x014A: + bufpush(0x014B); + break; + case 0x014C: + bufpush(0x014D); + break; + case 0x014E: + bufpush(0x014F); + break; + case 0x0150: + bufpush(0x0151); + break; + case 0x0152: + bufpush(0x0153); + break; + case 0x0154: + bufpush(0x0155); + break; + case 0x0156: + bufpush(0x0157); + break; + case 0x0158: + bufpush(0x0159); + break; + case 0x015A: + bufpush(0x015B); + break; + case 0x015C: + bufpush(0x015D); + break; + case 0x015E: + bufpush(0x015F); + break; + case 0x0160: + bufpush(0x0161); + break; + case 0x0162: + bufpush(0x0163); + break; + case 0x0164: + bufpush(0x0165); + break; + case 0x0166: + bufpush(0x0167); + break; + case 0x0168: + bufpush(0x0169); + break; + case 0x016A: + bufpush(0x016B); + break; + case 0x016C: + bufpush(0x016D); + break; + case 0x016E: + bufpush(0x016F); + break; + case 0x0170: + bufpush(0x0171); + break; + case 0x0172: + bufpush(0x0173); + break; + case 0x0174: + bufpush(0x0175); + break; + case 0x0176: + bufpush(0x0177); + break; + case 0x0178: + bufpush(0x00FF); + break; + case 0x0179: + bufpush(0x017A); + break; + case 0x017B: + bufpush(0x017C); + break; + case 0x017D: + bufpush(0x017E); + break; + case 0x017F: + bufpush(0x0073); + break; + case 0x0181: + bufpush(0x0253); + break; + case 0x0182: + bufpush(0x0183); + break; + case 0x0184: + bufpush(0x0185); + break; + case 0x0186: + bufpush(0x0254); + break; + case 0x0187: + bufpush(0x0188); + break; + case 0x0189: + bufpush(0x0256); + break; + case 0x018A: + bufpush(0x0257); + break; + case 0x018B: + bufpush(0x018C); + break; + case 0x018E: + bufpush(0x01DD); + break; + case 0x018F: + bufpush(0x0259); + break; + case 0x0190: + bufpush(0x025B); + break; + case 0x0191: + bufpush(0x0192); + break; + case 0x0193: + bufpush(0x0260); + break; + case 0x0194: + bufpush(0x0263); + break; + case 0x0196: + bufpush(0x0269); + break; + case 0x0197: + bufpush(0x0268); + break; + case 0x0198: + bufpush(0x0199); + break; + case 0x019C: + bufpush(0x026F); + break; + case 0x019D: + bufpush(0x0272); + break; + case 0x019F: + bufpush(0x0275); + break; + case 0x01A0: + bufpush(0x01A1); + break; + case 0x01A2: + bufpush(0x01A3); + break; + case 0x01A4: + bufpush(0x01A5); + break; + case 0x01A6: + bufpush(0x0280); + break; + case 0x01A7: + bufpush(0x01A8); + break; + case 0x01A9: + bufpush(0x0283); + break; + case 0x01AC: + bufpush(0x01AD); + break; + case 0x01AE: + bufpush(0x0288); + break; + case 0x01AF: + bufpush(0x01B0); + break; + case 0x01B1: + bufpush(0x028A); + break; + case 0x01B2: + bufpush(0x028B); + break; + case 0x01B3: + bufpush(0x01B4); + break; + case 0x01B5: + bufpush(0x01B6); + break; + case 0x01B7: + bufpush(0x0292); + break; + case 0x01B8: + bufpush(0x01B9); + break; + case 0x01BC: + bufpush(0x01BD); + break; + case 0x01C4: + bufpush(0x01C6); + break; + case 0x01C5: + bufpush(0x01C6); + break; + case 0x01C7: + bufpush(0x01C9); + break; + case 0x01C8: + bufpush(0x01C9); + break; + case 0x01CA: + bufpush(0x01CC); + break; + case 0x01CB: + bufpush(0x01CC); + break; + case 0x01CD: + bufpush(0x01CE); + break; + case 0x01CF: + bufpush(0x01D0); + break; + case 0x01D1: + bufpush(0x01D2); + break; + case 0x01D3: + bufpush(0x01D4); + break; + case 0x01D5: + bufpush(0x01D6); + break; + case 0x01D7: + bufpush(0x01D8); + break; + case 0x01D9: + bufpush(0x01DA); + break; + case 0x01DB: + bufpush(0x01DC); + break; + case 0x01DE: + bufpush(0x01DF); + break; + case 0x01E0: + bufpush(0x01E1); + break; + case 0x01E2: + bufpush(0x01E3); + break; + case 0x01E4: + bufpush(0x01E5); + break; + case 0x01E6: + bufpush(0x01E7); + break; + case 0x01E8: + bufpush(0x01E9); + break; + case 0x01EA: + bufpush(0x01EB); + break; + case 0x01EC: + bufpush(0x01ED); + break; + case 0x01EE: + bufpush(0x01EF); + break; + case 0x01F0: + bufpush(0x006A); + bufpush(0x030C); + break; + case 0x01F1: + bufpush(0x01F3); + break; + case 0x01F2: + bufpush(0x01F3); + break; + case 0x01F4: + bufpush(0x01F5); + break; + case 0x01F6: + bufpush(0x0195); + break; + case 0x01F7: + bufpush(0x01BF); + break; + case 0x01F8: + bufpush(0x01F9); + break; + case 0x01FA: + bufpush(0x01FB); + break; + case 0x01FC: + bufpush(0x01FD); + break; + case 0x01FE: + bufpush(0x01FF); + break; + case 0x0200: + bufpush(0x0201); + break; + case 0x0202: + bufpush(0x0203); + break; + case 0x0204: + bufpush(0x0205); + break; + case 0x0206: + bufpush(0x0207); + break; + case 0x0208: + bufpush(0x0209); + break; + case 0x020A: + bufpush(0x020B); + break; + case 0x020C: + bufpush(0x020D); + break; + case 0x020E: + bufpush(0x020F); + break; + case 0x0210: + bufpush(0x0211); + break; + case 0x0212: + bufpush(0x0213); + break; + case 0x0214: + bufpush(0x0215); + break; + case 0x0216: + bufpush(0x0217); + break; + case 0x0218: + bufpush(0x0219); + break; + case 0x021A: + bufpush(0x021B); + break; + case 0x021C: + bufpush(0x021D); + break; + case 0x021E: + bufpush(0x021F); + break; + case 0x0220: + bufpush(0x019E); + break; + case 0x0222: + bufpush(0x0223); + break; + case 0x0224: + bufpush(0x0225); + break; + case 0x0226: + bufpush(0x0227); + break; + case 0x0228: + bufpush(0x0229); + break; + case 0x022A: + bufpush(0x022B); + break; + case 0x022C: + bufpush(0x022D); + break; + case 0x022E: + bufpush(0x022F); + break; + case 0x0230: + bufpush(0x0231); + break; + case 0x0232: + bufpush(0x0233); + break; + case 0x023A: + bufpush(0x2C65); + break; + case 0x023B: + bufpush(0x023C); + break; + case 0x023D: + bufpush(0x019A); + break; + case 0x023E: + bufpush(0x2C66); + break; + case 0x0241: + bufpush(0x0242); + break; + case 0x0243: + bufpush(0x0180); + break; + case 0x0244: + bufpush(0x0289); + break; + case 0x0245: + bufpush(0x028C); + break; + case 0x0246: + bufpush(0x0247); + break; + case 0x0248: + bufpush(0x0249); + break; + case 0x024A: + bufpush(0x024B); + break; + case 0x024C: + bufpush(0x024D); + break; + case 0x024E: + bufpush(0x024F); + break; + case 0x0345: + bufpush(0x03B9); + break; + case 0x0370: + bufpush(0x0371); + break; + case 0x0372: + bufpush(0x0373); + break; + case 0x0376: + bufpush(0x0377); + break; + case 0x037F: + bufpush(0x03F3); + break; + case 0x0386: + bufpush(0x03AC); + break; + case 0x0388: + bufpush(0x03AD); + break; + case 0x0389: + bufpush(0x03AE); + break; + case 0x038A: + bufpush(0x03AF); + break; + case 0x038C: + bufpush(0x03CC); + break; + case 0x038E: + bufpush(0x03CD); + break; + case 0x038F: + bufpush(0x03CE); + break; + case 0x0390: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x0391: + bufpush(0x03B1); + break; + case 0x0392: + bufpush(0x03B2); + break; + case 0x0393: + bufpush(0x03B3); + break; + case 0x0394: + bufpush(0x03B4); + break; + case 0x0395: + bufpush(0x03B5); + break; + case 0x0396: + bufpush(0x03B6); + break; + case 0x0397: + bufpush(0x03B7); + break; + case 0x0398: + bufpush(0x03B8); + break; + case 0x0399: + bufpush(0x03B9); + break; + case 0x039A: + bufpush(0x03BA); + break; + case 0x039B: + bufpush(0x03BB); + break; + case 0x039C: + bufpush(0x03BC); + break; + case 0x039D: + bufpush(0x03BD); + break; + case 0x039E: + bufpush(0x03BE); + break; + case 0x039F: + bufpush(0x03BF); + break; + case 0x03A0: + bufpush(0x03C0); + break; + case 0x03A1: + bufpush(0x03C1); + break; + case 0x03A3: + bufpush(0x03C3); + break; + case 0x03A4: + bufpush(0x03C4); + break; + case 0x03A5: + bufpush(0x03C5); + break; + case 0x03A6: + bufpush(0x03C6); + break; + case 0x03A7: + bufpush(0x03C7); + break; + case 0x03A8: + bufpush(0x03C8); + break; + case 0x03A9: + bufpush(0x03C9); + break; + case 0x03AA: + bufpush(0x03CA); + break; + case 0x03AB: + bufpush(0x03CB); + break; + case 0x03B0: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x03C2: + bufpush(0x03C3); + break; + case 0x03CF: + bufpush(0x03D7); + break; + case 0x03D0: + bufpush(0x03B2); + break; + case 0x03D1: + bufpush(0x03B8); + break; + case 0x03D5: + bufpush(0x03C6); + break; + case 0x03D6: + bufpush(0x03C0); + break; + case 0x03D8: + bufpush(0x03D9); + break; + case 0x03DA: + bufpush(0x03DB); + break; + case 0x03DC: + bufpush(0x03DD); + break; + case 0x03DE: + bufpush(0x03DF); + break; + case 0x03E0: + bufpush(0x03E1); + break; + case 0x03E2: + bufpush(0x03E3); + break; + case 0x03E4: + bufpush(0x03E5); + break; + case 0x03E6: + bufpush(0x03E7); + break; + case 0x03E8: + bufpush(0x03E9); + break; + case 0x03EA: + bufpush(0x03EB); + break; + case 0x03EC: + bufpush(0x03ED); + break; + case 0x03EE: + bufpush(0x03EF); + break; + case 0x03F0: + bufpush(0x03BA); + break; + case 0x03F1: + bufpush(0x03C1); + break; + case 0x03F4: + bufpush(0x03B8); + break; + case 0x03F5: + bufpush(0x03B5); + break; + case 0x03F7: + bufpush(0x03F8); + break; + case 0x03F9: + bufpush(0x03F2); + break; + case 0x03FA: + bufpush(0x03FB); + break; + case 0x03FD: + bufpush(0x037B); + break; + case 0x03FE: + bufpush(0x037C); + break; + case 0x03FF: + bufpush(0x037D); + break; + case 0x0400: + bufpush(0x0450); + break; + case 0x0401: + bufpush(0x0451); + break; + case 0x0402: + bufpush(0x0452); + break; + case 0x0403: + bufpush(0x0453); + break; + case 0x0404: + bufpush(0x0454); + break; + case 0x0405: + bufpush(0x0455); + break; + case 0x0406: + bufpush(0x0456); + break; + case 0x0407: + bufpush(0x0457); + break; + case 0x0408: + bufpush(0x0458); + break; + case 0x0409: + bufpush(0x0459); + break; + case 0x040A: + bufpush(0x045A); + break; + case 0x040B: + bufpush(0x045B); + break; + case 0x040C: + bufpush(0x045C); + break; + case 0x040D: + bufpush(0x045D); + break; + case 0x040E: + bufpush(0x045E); + break; + case 0x040F: + bufpush(0x045F); + break; + case 0x0410: + bufpush(0x0430); + break; + case 0x0411: + bufpush(0x0431); + break; + case 0x0412: + bufpush(0x0432); + break; + case 0x0413: + bufpush(0x0433); + break; + case 0x0414: + bufpush(0x0434); + break; + case 0x0415: + bufpush(0x0435); + break; + case 0x0416: + bufpush(0x0436); + break; + case 0x0417: + bufpush(0x0437); + break; + case 0x0418: + bufpush(0x0438); + break; + case 0x0419: + bufpush(0x0439); + break; + case 0x041A: + bufpush(0x043A); + break; + case 0x041B: + bufpush(0x043B); + break; + case 0x041C: + bufpush(0x043C); + break; + case 0x041D: + bufpush(0x043D); + break; + case 0x041E: + bufpush(0x043E); + break; + case 0x041F: + bufpush(0x043F); + break; + case 0x0420: + bufpush(0x0440); + break; + case 0x0421: + bufpush(0x0441); + break; + case 0x0422: + bufpush(0x0442); + break; + case 0x0423: + bufpush(0x0443); + break; + case 0x0424: + bufpush(0x0444); + break; + case 0x0425: + bufpush(0x0445); + break; + case 0x0426: + bufpush(0x0446); + break; + case 0x0427: + bufpush(0x0447); + break; + case 0x0428: + bufpush(0x0448); + break; + case 0x0429: + bufpush(0x0449); + break; + case 0x042A: + bufpush(0x044A); + break; + case 0x042B: + bufpush(0x044B); + break; + case 0x042C: + bufpush(0x044C); + break; + case 0x042D: + bufpush(0x044D); + break; + case 0x042E: + bufpush(0x044E); + break; + case 0x042F: + bufpush(0x044F); + break; + case 0x0460: + bufpush(0x0461); + break; + case 0x0462: + bufpush(0x0463); + break; + case 0x0464: + bufpush(0x0465); + break; + case 0x0466: + bufpush(0x0467); + break; + case 0x0468: + bufpush(0x0469); + break; + case 0x046A: + bufpush(0x046B); + break; + case 0x046C: + bufpush(0x046D); + break; + case 0x046E: + bufpush(0x046F); + break; + case 0x0470: + bufpush(0x0471); + break; + case 0x0472: + bufpush(0x0473); + break; + case 0x0474: + bufpush(0x0475); + break; + case 0x0476: + bufpush(0x0477); + break; + case 0x0478: + bufpush(0x0479); + break; + case 0x047A: + bufpush(0x047B); + break; + case 0x047C: + bufpush(0x047D); + break; + case 0x047E: + bufpush(0x047F); + break; + case 0x0480: + bufpush(0x0481); + break; + case 0x048A: + bufpush(0x048B); + break; + case 0x048C: + bufpush(0x048D); + break; + case 0x048E: + bufpush(0x048F); + break; + case 0x0490: + bufpush(0x0491); + break; + case 0x0492: + bufpush(0x0493); + break; + case 0x0494: + bufpush(0x0495); + break; + case 0x0496: + bufpush(0x0497); + break; + case 0x0498: + bufpush(0x0499); + break; + case 0x049A: + bufpush(0x049B); + break; + case 0x049C: + bufpush(0x049D); + break; + case 0x049E: + bufpush(0x049F); + break; + case 0x04A0: + bufpush(0x04A1); + break; + case 0x04A2: + bufpush(0x04A3); + break; + case 0x04A4: + bufpush(0x04A5); + break; + case 0x04A6: + bufpush(0x04A7); + break; + case 0x04A8: + bufpush(0x04A9); + break; + case 0x04AA: + bufpush(0x04AB); + break; + case 0x04AC: + bufpush(0x04AD); + break; + case 0x04AE: + bufpush(0x04AF); + break; + case 0x04B0: + bufpush(0x04B1); + break; + case 0x04B2: + bufpush(0x04B3); + break; + case 0x04B4: + bufpush(0x04B5); + break; + case 0x04B6: + bufpush(0x04B7); + break; + case 0x04B8: + bufpush(0x04B9); + break; + case 0x04BA: + bufpush(0x04BB); + break; + case 0x04BC: + bufpush(0x04BD); + break; + case 0x04BE: + bufpush(0x04BF); + break; + case 0x04C0: + bufpush(0x04CF); + break; + case 0x04C1: + bufpush(0x04C2); + break; + case 0x04C3: + bufpush(0x04C4); + break; + case 0x04C5: + bufpush(0x04C6); + break; + case 0x04C7: + bufpush(0x04C8); + break; + case 0x04C9: + bufpush(0x04CA); + break; + case 0x04CB: + bufpush(0x04CC); + break; + case 0x04CD: + bufpush(0x04CE); + break; + case 0x04D0: + bufpush(0x04D1); + break; + case 0x04D2: + bufpush(0x04D3); + break; + case 0x04D4: + bufpush(0x04D5); + break; + case 0x04D6: + bufpush(0x04D7); + break; + case 0x04D8: + bufpush(0x04D9); + break; + case 0x04DA: + bufpush(0x04DB); + break; + case 0x04DC: + bufpush(0x04DD); + break; + case 0x04DE: + bufpush(0x04DF); + break; + case 0x04E0: + bufpush(0x04E1); + break; + case 0x04E2: + bufpush(0x04E3); + break; + case 0x04E4: + bufpush(0x04E5); + break; + case 0x04E6: + bufpush(0x04E7); + break; + case 0x04E8: + bufpush(0x04E9); + break; + case 0x04EA: + bufpush(0x04EB); + break; + case 0x04EC: + bufpush(0x04ED); + break; + case 0x04EE: + bufpush(0x04EF); + break; + case 0x04F0: + bufpush(0x04F1); + break; + case 0x04F2: + bufpush(0x04F3); + break; + case 0x04F4: + bufpush(0x04F5); + break; + case 0x04F6: + bufpush(0x04F7); + break; + case 0x04F8: + bufpush(0x04F9); + break; + case 0x04FA: + bufpush(0x04FB); + break; + case 0x04FC: + bufpush(0x04FD); + break; + case 0x04FE: + bufpush(0x04FF); + break; + case 0x0500: + bufpush(0x0501); + break; + case 0x0502: + bufpush(0x0503); + break; + case 0x0504: + bufpush(0x0505); + break; + case 0x0506: + bufpush(0x0507); + break; + case 0x0508: + bufpush(0x0509); + break; + case 0x050A: + bufpush(0x050B); + break; + case 0x050C: + bufpush(0x050D); + break; + case 0x050E: + bufpush(0x050F); + break; + case 0x0510: + bufpush(0x0511); + break; + case 0x0512: + bufpush(0x0513); + break; + case 0x0514: + bufpush(0x0515); + break; + case 0x0516: + bufpush(0x0517); + break; + case 0x0518: + bufpush(0x0519); + break; + case 0x051A: + bufpush(0x051B); + break; + case 0x051C: + bufpush(0x051D); + break; + case 0x051E: + bufpush(0x051F); + break; + case 0x0520: + bufpush(0x0521); + break; + case 0x0522: + bufpush(0x0523); + break; + case 0x0524: + bufpush(0x0525); + break; + case 0x0526: + bufpush(0x0527); + break; + case 0x0528: + bufpush(0x0529); + break; + case 0x052A: + bufpush(0x052B); + break; + case 0x052C: + bufpush(0x052D); + break; + case 0x052E: + bufpush(0x052F); + break; + case 0x0531: + bufpush(0x0561); + break; + case 0x0532: + bufpush(0x0562); + break; + case 0x0533: + bufpush(0x0563); + break; + case 0x0534: + bufpush(0x0564); + break; + case 0x0535: + bufpush(0x0565); + break; + case 0x0536: + bufpush(0x0566); + break; + case 0x0537: + bufpush(0x0567); + break; + case 0x0538: + bufpush(0x0568); + break; + case 0x0539: + bufpush(0x0569); + break; + case 0x053A: + bufpush(0x056A); + break; + case 0x053B: + bufpush(0x056B); + break; + case 0x053C: + bufpush(0x056C); + break; + case 0x053D: + bufpush(0x056D); + break; + case 0x053E: + bufpush(0x056E); + break; + case 0x053F: + bufpush(0x056F); + break; + case 0x0540: + bufpush(0x0570); + break; + case 0x0541: + bufpush(0x0571); + break; + case 0x0542: + bufpush(0x0572); + break; + case 0x0543: + bufpush(0x0573); + break; + case 0x0544: + bufpush(0x0574); + break; + case 0x0545: + bufpush(0x0575); + break; + case 0x0546: + bufpush(0x0576); + break; + case 0x0547: + bufpush(0x0577); + break; + case 0x0548: + bufpush(0x0578); + break; + case 0x0549: + bufpush(0x0579); + break; + case 0x054A: + bufpush(0x057A); + break; + case 0x054B: + bufpush(0x057B); + break; + case 0x054C: + bufpush(0x057C); + break; + case 0x054D: + bufpush(0x057D); + break; + case 0x054E: + bufpush(0x057E); + break; + case 0x054F: + bufpush(0x057F); + break; + case 0x0550: + bufpush(0x0580); + break; + case 0x0551: + bufpush(0x0581); + break; + case 0x0552: + bufpush(0x0582); + break; + case 0x0553: + bufpush(0x0583); + break; + case 0x0554: + bufpush(0x0584); + break; + case 0x0555: + bufpush(0x0585); + break; + case 0x0556: + bufpush(0x0586); + break; + case 0x0587: + bufpush(0x0565); + bufpush(0x0582); + break; + case 0x10A0: + bufpush(0x2D00); + break; + case 0x10A1: + bufpush(0x2D01); + break; + case 0x10A2: + bufpush(0x2D02); + break; + case 0x10A3: + bufpush(0x2D03); + break; + case 0x10A4: + bufpush(0x2D04); + break; + case 0x10A5: + bufpush(0x2D05); + break; + case 0x10A6: + bufpush(0x2D06); + break; + case 0x10A7: + bufpush(0x2D07); + break; + case 0x10A8: + bufpush(0x2D08); + break; + case 0x10A9: + bufpush(0x2D09); + break; + case 0x10AA: + bufpush(0x2D0A); + break; + case 0x10AB: + bufpush(0x2D0B); + break; + case 0x10AC: + bufpush(0x2D0C); + break; + case 0x10AD: + bufpush(0x2D0D); + break; + case 0x10AE: + bufpush(0x2D0E); + break; + case 0x10AF: + bufpush(0x2D0F); + break; + case 0x10B0: + bufpush(0x2D10); + break; + case 0x10B1: + bufpush(0x2D11); + break; + case 0x10B2: + bufpush(0x2D12); + break; + case 0x10B3: + bufpush(0x2D13); + break; + case 0x10B4: + bufpush(0x2D14); + break; + case 0x10B5: + bufpush(0x2D15); + break; + case 0x10B6: + bufpush(0x2D16); + break; + case 0x10B7: + bufpush(0x2D17); + break; + case 0x10B8: + bufpush(0x2D18); + break; + case 0x10B9: + bufpush(0x2D19); + break; + case 0x10BA: + bufpush(0x2D1A); + break; + case 0x10BB: + bufpush(0x2D1B); + break; + case 0x10BC: + bufpush(0x2D1C); + break; + case 0x10BD: + bufpush(0x2D1D); + break; + case 0x10BE: + bufpush(0x2D1E); + break; + case 0x10BF: + bufpush(0x2D1F); + break; + case 0x10C0: + bufpush(0x2D20); + break; + case 0x10C1: + bufpush(0x2D21); + break; + case 0x10C2: + bufpush(0x2D22); + break; + case 0x10C3: + bufpush(0x2D23); + break; + case 0x10C4: + bufpush(0x2D24); + break; + case 0x10C5: + bufpush(0x2D25); + break; + case 0x10C7: + bufpush(0x2D27); + break; + case 0x10CD: + bufpush(0x2D2D); + break; + case 0x13F8: + bufpush(0x13F0); + break; + case 0x13F9: + bufpush(0x13F1); + break; + case 0x13FA: + bufpush(0x13F2); + break; + case 0x13FB: + bufpush(0x13F3); + break; + case 0x13FC: + bufpush(0x13F4); + break; + case 0x13FD: + bufpush(0x13F5); + break; + case 0x1C80: + bufpush(0x0432); + break; + case 0x1C81: + bufpush(0x0434); + break; + case 0x1C82: + bufpush(0x043E); + break; + case 0x1C83: + bufpush(0x0441); + break; + case 0x1C84: + bufpush(0x0442); + break; + case 0x1C85: + bufpush(0x0442); + break; + case 0x1C86: + bufpush(0x044A); + break; + case 0x1C87: + bufpush(0x0463); + break; + case 0x1C88: + bufpush(0xA64B); + break; + case 0x1E00: + bufpush(0x1E01); + break; + case 0x1E02: + bufpush(0x1E03); + break; + case 0x1E04: + bufpush(0x1E05); + break; + case 0x1E06: + bufpush(0x1E07); + break; + case 0x1E08: + bufpush(0x1E09); + break; + case 0x1E0A: + bufpush(0x1E0B); + break; + case 0x1E0C: + bufpush(0x1E0D); + break; + case 0x1E0E: + bufpush(0x1E0F); + break; + case 0x1E10: + bufpush(0x1E11); + break; + case 0x1E12: + bufpush(0x1E13); + break; + case 0x1E14: + bufpush(0x1E15); + break; + case 0x1E16: + bufpush(0x1E17); + break; + case 0x1E18: + bufpush(0x1E19); + break; + case 0x1E1A: + bufpush(0x1E1B); + break; + case 0x1E1C: + bufpush(0x1E1D); + break; + case 0x1E1E: + bufpush(0x1E1F); + break; + case 0x1E20: + bufpush(0x1E21); + break; + case 0x1E22: + bufpush(0x1E23); + break; + case 0x1E24: + bufpush(0x1E25); + break; + case 0x1E26: + bufpush(0x1E27); + break; + case 0x1E28: + bufpush(0x1E29); + break; + case 0x1E2A: + bufpush(0x1E2B); + break; + case 0x1E2C: + bufpush(0x1E2D); + break; + case 0x1E2E: + bufpush(0x1E2F); + break; + case 0x1E30: + bufpush(0x1E31); + break; + case 0x1E32: + bufpush(0x1E33); + break; + case 0x1E34: + bufpush(0x1E35); + break; + case 0x1E36: + bufpush(0x1E37); + break; + case 0x1E38: + bufpush(0x1E39); + break; + case 0x1E3A: + bufpush(0x1E3B); + break; + case 0x1E3C: + bufpush(0x1E3D); + break; + case 0x1E3E: + bufpush(0x1E3F); + break; + case 0x1E40: + bufpush(0x1E41); + break; + case 0x1E42: + bufpush(0x1E43); + break; + case 0x1E44: + bufpush(0x1E45); + break; + case 0x1E46: + bufpush(0x1E47); + break; + case 0x1E48: + bufpush(0x1E49); + break; + case 0x1E4A: + bufpush(0x1E4B); + break; + case 0x1E4C: + bufpush(0x1E4D); + break; + case 0x1E4E: + bufpush(0x1E4F); + break; + case 0x1E50: + bufpush(0x1E51); + break; + case 0x1E52: + bufpush(0x1E53); + break; + case 0x1E54: + bufpush(0x1E55); + break; + case 0x1E56: + bufpush(0x1E57); + break; + case 0x1E58: + bufpush(0x1E59); + break; + case 0x1E5A: + bufpush(0x1E5B); + break; + case 0x1E5C: + bufpush(0x1E5D); + break; + case 0x1E5E: + bufpush(0x1E5F); + break; + case 0x1E60: + bufpush(0x1E61); + break; + case 0x1E62: + bufpush(0x1E63); + break; + case 0x1E64: + bufpush(0x1E65); + break; + case 0x1E66: + bufpush(0x1E67); + break; + case 0x1E68: + bufpush(0x1E69); + break; + case 0x1E6A: + bufpush(0x1E6B); + break; + case 0x1E6C: + bufpush(0x1E6D); + break; + case 0x1E6E: + bufpush(0x1E6F); + break; + case 0x1E70: + bufpush(0x1E71); + break; + case 0x1E72: + bufpush(0x1E73); + break; + case 0x1E74: + bufpush(0x1E75); + break; + case 0x1E76: + bufpush(0x1E77); + break; + case 0x1E78: + bufpush(0x1E79); + break; + case 0x1E7A: + bufpush(0x1E7B); + break; + case 0x1E7C: + bufpush(0x1E7D); + break; + case 0x1E7E: + bufpush(0x1E7F); + break; + case 0x1E80: + bufpush(0x1E81); + break; + case 0x1E82: + bufpush(0x1E83); + break; + case 0x1E84: + bufpush(0x1E85); + break; + case 0x1E86: + bufpush(0x1E87); + break; + case 0x1E88: + bufpush(0x1E89); + break; + case 0x1E8A: + bufpush(0x1E8B); + break; + case 0x1E8C: + bufpush(0x1E8D); + break; + case 0x1E8E: + bufpush(0x1E8F); + break; + case 0x1E90: + bufpush(0x1E91); + break; + case 0x1E92: + bufpush(0x1E93); + break; + case 0x1E94: + bufpush(0x1E95); + break; + case 0x1E96: + bufpush(0x0068); + bufpush(0x0331); + break; + case 0x1E97: + bufpush(0x0074); + bufpush(0x0308); + break; + case 0x1E98: + bufpush(0x0077); + bufpush(0x030A); + break; + case 0x1E99: + bufpush(0x0079); + bufpush(0x030A); + break; + case 0x1E9A: + bufpush(0x0061); + bufpush(0x02BE); + break; + case 0x1E9B: + bufpush(0x1E61); + break; + case 0x1E9E: + bufpush(0x0073); + bufpush(0x0073); + break; + case 0x1EA0: + bufpush(0x1EA1); + break; + case 0x1EA2: + bufpush(0x1EA3); + break; + case 0x1EA4: + bufpush(0x1EA5); + break; + case 0x1EA6: + bufpush(0x1EA7); + break; + case 0x1EA8: + bufpush(0x1EA9); + break; + case 0x1EAA: + bufpush(0x1EAB); + break; + case 0x1EAC: + bufpush(0x1EAD); + break; + case 0x1EAE: + bufpush(0x1EAF); + break; + case 0x1EB0: + bufpush(0x1EB1); + break; + case 0x1EB2: + bufpush(0x1EB3); + break; + case 0x1EB4: + bufpush(0x1EB5); + break; + case 0x1EB6: + bufpush(0x1EB7); + break; + case 0x1EB8: + bufpush(0x1EB9); + break; + case 0x1EBA: + bufpush(0x1EBB); + break; + case 0x1EBC: + bufpush(0x1EBD); + break; + case 0x1EBE: + bufpush(0x1EBF); + break; + case 0x1EC0: + bufpush(0x1EC1); + break; + case 0x1EC2: + bufpush(0x1EC3); + break; + case 0x1EC4: + bufpush(0x1EC5); + break; + case 0x1EC6: + bufpush(0x1EC7); + break; + case 0x1EC8: + bufpush(0x1EC9); + break; + case 0x1ECA: + bufpush(0x1ECB); + break; + case 0x1ECC: + bufpush(0x1ECD); + break; + case 0x1ECE: + bufpush(0x1ECF); + break; + case 0x1ED0: + bufpush(0x1ED1); + break; + case 0x1ED2: + bufpush(0x1ED3); + break; + case 0x1ED4: + bufpush(0x1ED5); + break; + case 0x1ED6: + bufpush(0x1ED7); + break; + case 0x1ED8: + bufpush(0x1ED9); + break; + case 0x1EDA: + bufpush(0x1EDB); + break; + case 0x1EDC: + bufpush(0x1EDD); + break; + case 0x1EDE: + bufpush(0x1EDF); + break; + case 0x1EE0: + bufpush(0x1EE1); + break; + case 0x1EE2: + bufpush(0x1EE3); + break; + case 0x1EE4: + bufpush(0x1EE5); + break; + case 0x1EE6: + bufpush(0x1EE7); + break; + case 0x1EE8: + bufpush(0x1EE9); + break; + case 0x1EEA: + bufpush(0x1EEB); + break; + case 0x1EEC: + bufpush(0x1EED); + break; + case 0x1EEE: + bufpush(0x1EEF); + break; + case 0x1EF0: + bufpush(0x1EF1); + break; + case 0x1EF2: + bufpush(0x1EF3); + break; + case 0x1EF4: + bufpush(0x1EF5); + break; + case 0x1EF6: + bufpush(0x1EF7); + break; + case 0x1EF8: + bufpush(0x1EF9); + break; + case 0x1EFA: + bufpush(0x1EFB); + break; + case 0x1EFC: + bufpush(0x1EFD); + break; + case 0x1EFE: + bufpush(0x1EFF); + break; + case 0x1F08: + bufpush(0x1F00); + break; + case 0x1F09: + bufpush(0x1F01); + break; + case 0x1F0A: + bufpush(0x1F02); + break; + case 0x1F0B: + bufpush(0x1F03); + break; + case 0x1F0C: + bufpush(0x1F04); + break; + case 0x1F0D: + bufpush(0x1F05); + break; + case 0x1F0E: + bufpush(0x1F06); + break; + case 0x1F0F: + bufpush(0x1F07); + break; + case 0x1F18: + bufpush(0x1F10); + break; + case 0x1F19: + bufpush(0x1F11); + break; + case 0x1F1A: + bufpush(0x1F12); + break; + case 0x1F1B: + bufpush(0x1F13); + break; + case 0x1F1C: + bufpush(0x1F14); + break; + case 0x1F1D: + bufpush(0x1F15); + break; + case 0x1F28: + bufpush(0x1F20); + break; + case 0x1F29: + bufpush(0x1F21); + break; + case 0x1F2A: + bufpush(0x1F22); + break; + case 0x1F2B: + bufpush(0x1F23); + break; + case 0x1F2C: + bufpush(0x1F24); + break; + case 0x1F2D: + bufpush(0x1F25); + break; + case 0x1F2E: + bufpush(0x1F26); + break; + case 0x1F2F: + bufpush(0x1F27); + break; + case 0x1F38: + bufpush(0x1F30); + break; + case 0x1F39: + bufpush(0x1F31); + break; + case 0x1F3A: + bufpush(0x1F32); + break; + case 0x1F3B: + bufpush(0x1F33); + break; + case 0x1F3C: + bufpush(0x1F34); + break; + case 0x1F3D: + bufpush(0x1F35); + break; + case 0x1F3E: + bufpush(0x1F36); + break; + case 0x1F3F: + bufpush(0x1F37); + break; + case 0x1F48: + bufpush(0x1F40); + break; + case 0x1F49: + bufpush(0x1F41); + break; + case 0x1F4A: + bufpush(0x1F42); + break; + case 0x1F4B: + bufpush(0x1F43); + break; + case 0x1F4C: + bufpush(0x1F44); + break; + case 0x1F4D: + bufpush(0x1F45); + break; + case 0x1F50: + bufpush(0x03C5); + bufpush(0x0313); + break; + case 0x1F52: + bufpush(0x03C5); + bufpush(0x0313); + bufpush(0x0300); + break; + case 0x1F54: + bufpush(0x03C5); + bufpush(0x0313); + bufpush(0x0301); + break; + case 0x1F56: + bufpush(0x03C5); + bufpush(0x0313); + bufpush(0x0342); + break; + case 0x1F59: + bufpush(0x1F51); + break; + case 0x1F5B: + bufpush(0x1F53); + break; + case 0x1F5D: + bufpush(0x1F55); + break; + case 0x1F5F: + bufpush(0x1F57); + break; + case 0x1F68: + bufpush(0x1F60); + break; + case 0x1F69: + bufpush(0x1F61); + break; + case 0x1F6A: + bufpush(0x1F62); + break; + case 0x1F6B: + bufpush(0x1F63); + break; + case 0x1F6C: + bufpush(0x1F64); + break; + case 0x1F6D: + bufpush(0x1F65); + break; + case 0x1F6E: + bufpush(0x1F66); + break; + case 0x1F6F: + bufpush(0x1F67); + break; + case 0x1F80: + bufpush(0x1F00); + bufpush(0x03B9); + break; + case 0x1F81: + bufpush(0x1F01); + bufpush(0x03B9); + break; + case 0x1F82: + bufpush(0x1F02); + bufpush(0x03B9); + break; + case 0x1F83: + bufpush(0x1F03); + bufpush(0x03B9); + break; + case 0x1F84: + bufpush(0x1F04); + bufpush(0x03B9); + break; + case 0x1F85: + bufpush(0x1F05); + bufpush(0x03B9); + break; + case 0x1F86: + bufpush(0x1F06); + bufpush(0x03B9); + break; + case 0x1F87: + bufpush(0x1F07); + bufpush(0x03B9); + break; + case 0x1F88: + bufpush(0x1F00); + bufpush(0x03B9); + break; + case 0x1F89: + bufpush(0x1F01); + bufpush(0x03B9); + break; + case 0x1F8A: + bufpush(0x1F02); + bufpush(0x03B9); + break; + case 0x1F8B: + bufpush(0x1F03); + bufpush(0x03B9); + break; + case 0x1F8C: + bufpush(0x1F04); + bufpush(0x03B9); + break; + case 0x1F8D: + bufpush(0x1F05); + bufpush(0x03B9); + break; + case 0x1F8E: + bufpush(0x1F06); + bufpush(0x03B9); + break; + case 0x1F8F: + bufpush(0x1F07); + bufpush(0x03B9); + break; + case 0x1F90: + bufpush(0x1F20); + bufpush(0x03B9); + break; + case 0x1F91: + bufpush(0x1F21); + bufpush(0x03B9); + break; + case 0x1F92: + bufpush(0x1F22); + bufpush(0x03B9); + break; + case 0x1F93: + bufpush(0x1F23); + bufpush(0x03B9); + break; + case 0x1F94: + bufpush(0x1F24); + bufpush(0x03B9); + break; + case 0x1F95: + bufpush(0x1F25); + bufpush(0x03B9); + break; + case 0x1F96: + bufpush(0x1F26); + bufpush(0x03B9); + break; + case 0x1F97: + bufpush(0x1F27); + bufpush(0x03B9); + break; + case 0x1F98: + bufpush(0x1F20); + bufpush(0x03B9); + break; + case 0x1F99: + bufpush(0x1F21); + bufpush(0x03B9); + break; + case 0x1F9A: + bufpush(0x1F22); + bufpush(0x03B9); + break; + case 0x1F9B: + bufpush(0x1F23); + bufpush(0x03B9); + break; + case 0x1F9C: + bufpush(0x1F24); + bufpush(0x03B9); + break; + case 0x1F9D: + bufpush(0x1F25); + bufpush(0x03B9); + break; + case 0x1F9E: + bufpush(0x1F26); + bufpush(0x03B9); + break; + case 0x1F9F: + bufpush(0x1F27); + bufpush(0x03B9); + break; + case 0x1FA0: + bufpush(0x1F60); + bufpush(0x03B9); + break; + case 0x1FA1: + bufpush(0x1F61); + bufpush(0x03B9); + break; + case 0x1FA2: + bufpush(0x1F62); + bufpush(0x03B9); + break; + case 0x1FA3: + bufpush(0x1F63); + bufpush(0x03B9); + break; + case 0x1FA4: + bufpush(0x1F64); + bufpush(0x03B9); + break; + case 0x1FA5: + bufpush(0x1F65); + bufpush(0x03B9); + break; + case 0x1FA6: + bufpush(0x1F66); + bufpush(0x03B9); + break; + case 0x1FA7: + bufpush(0x1F67); + bufpush(0x03B9); + break; + case 0x1FA8: + bufpush(0x1F60); + bufpush(0x03B9); + break; + case 0x1FA9: + bufpush(0x1F61); + bufpush(0x03B9); + break; + case 0x1FAA: + bufpush(0x1F62); + bufpush(0x03B9); + break; + case 0x1FAB: + bufpush(0x1F63); + bufpush(0x03B9); + break; + case 0x1FAC: + bufpush(0x1F64); + bufpush(0x03B9); + break; + case 0x1FAD: + bufpush(0x1F65); + bufpush(0x03B9); + break; + case 0x1FAE: + bufpush(0x1F66); + bufpush(0x03B9); + break; + case 0x1FAF: + bufpush(0x1F67); + bufpush(0x03B9); + break; + case 0x1FB2: + bufpush(0x1F70); + bufpush(0x03B9); + break; + case 0x1FB3: + bufpush(0x03B1); + bufpush(0x03B9); + break; + case 0x1FB4: + bufpush(0x03AC); + bufpush(0x03B9); + break; + case 0x1FB6: + bufpush(0x03B1); + bufpush(0x0342); + break; + case 0x1FB7: + bufpush(0x03B1); + bufpush(0x0342); + bufpush(0x03B9); + break; + case 0x1FB8: + bufpush(0x1FB0); + break; + case 0x1FB9: + bufpush(0x1FB1); + break; + case 0x1FBA: + bufpush(0x1F70); + break; + case 0x1FBB: + bufpush(0x1F71); + break; + case 0x1FBC: + bufpush(0x03B1); + bufpush(0x03B9); + break; + case 0x1FBE: + bufpush(0x03B9); + break; + case 0x1FC2: + bufpush(0x1F74); + bufpush(0x03B9); + break; + case 0x1FC3: + bufpush(0x03B7); + bufpush(0x03B9); + break; + case 0x1FC4: + bufpush(0x03AE); + bufpush(0x03B9); + break; + case 0x1FC6: + bufpush(0x03B7); + bufpush(0x0342); + break; + case 0x1FC7: + bufpush(0x03B7); + bufpush(0x0342); + bufpush(0x03B9); + break; + case 0x1FC8: + bufpush(0x1F72); + break; + case 0x1FC9: + bufpush(0x1F73); + break; + case 0x1FCA: + bufpush(0x1F74); + break; + case 0x1FCB: + bufpush(0x1F75); + break; + case 0x1FCC: + bufpush(0x03B7); + bufpush(0x03B9); + break; + case 0x1FD2: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0300); + break; + case 0x1FD3: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x1FD6: + bufpush(0x03B9); + bufpush(0x0342); + break; + case 0x1FD7: + bufpush(0x03B9); + bufpush(0x0308); + bufpush(0x0342); + break; + case 0x1FD8: + bufpush(0x1FD0); + break; + case 0x1FD9: + bufpush(0x1FD1); + break; + case 0x1FDA: + bufpush(0x1F76); + break; + case 0x1FDB: + bufpush(0x1F77); + break; + case 0x1FE2: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0300); + break; + case 0x1FE3: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0301); + break; + case 0x1FE4: + bufpush(0x03C1); + bufpush(0x0313); + break; + case 0x1FE6: + bufpush(0x03C5); + bufpush(0x0342); + break; + case 0x1FE7: + bufpush(0x03C5); + bufpush(0x0308); + bufpush(0x0342); + break; + case 0x1FE8: + bufpush(0x1FE0); + break; + case 0x1FE9: + bufpush(0x1FE1); + break; + case 0x1FEA: + bufpush(0x1F7A); + break; + case 0x1FEB: + bufpush(0x1F7B); + break; + case 0x1FEC: + bufpush(0x1FE5); + break; + case 0x1FF2: + bufpush(0x1F7C); + bufpush(0x03B9); + break; + case 0x1FF3: + bufpush(0x03C9); + bufpush(0x03B9); + break; + case 0x1FF4: + bufpush(0x03CE); + bufpush(0x03B9); + break; + case 0x1FF6: + bufpush(0x03C9); + bufpush(0x0342); + break; + case 0x1FF7: + bufpush(0x03C9); + bufpush(0x0342); + bufpush(0x03B9); + break; + case 0x1FF8: + bufpush(0x1F78); + break; + case 0x1FF9: + bufpush(0x1F79); + break; + case 0x1FFA: + bufpush(0x1F7C); + break; + case 0x1FFB: + bufpush(0x1F7D); + break; + case 0x1FFC: + bufpush(0x03C9); + bufpush(0x03B9); + break; + case 0x2126: + bufpush(0x03C9); + break; + case 0x212A: + bufpush(0x006B); + break; + case 0x212B: + bufpush(0x00E5); + break; + case 0x2132: + bufpush(0x214E); + break; + case 0x2160: + bufpush(0x2170); + break; + case 0x2161: + bufpush(0x2171); + break; + case 0x2162: + bufpush(0x2172); + break; + case 0x2163: + bufpush(0x2173); + break; + case 0x2164: + bufpush(0x2174); + break; + case 0x2165: + bufpush(0x2175); + break; + case 0x2166: + bufpush(0x2176); + break; + case 0x2167: + bufpush(0x2177); + break; + case 0x2168: + bufpush(0x2178); + break; + case 0x2169: + bufpush(0x2179); + break; + case 0x216A: + bufpush(0x217A); + break; + case 0x216B: + bufpush(0x217B); + break; + case 0x216C: + bufpush(0x217C); + break; + case 0x216D: + bufpush(0x217D); + break; + case 0x216E: + bufpush(0x217E); + break; + case 0x216F: + bufpush(0x217F); + break; + case 0x2183: + bufpush(0x2184); + break; + case 0x24B6: + bufpush(0x24D0); + break; + case 0x24B7: + bufpush(0x24D1); + break; + case 0x24B8: + bufpush(0x24D2); + break; + case 0x24B9: + bufpush(0x24D3); + break; + case 0x24BA: + bufpush(0x24D4); + break; + case 0x24BB: + bufpush(0x24D5); + break; + case 0x24BC: + bufpush(0x24D6); + break; + case 0x24BD: + bufpush(0x24D7); + break; + case 0x24BE: + bufpush(0x24D8); + break; + case 0x24BF: + bufpush(0x24D9); + break; + case 0x24C0: + bufpush(0x24DA); + break; + case 0x24C1: + bufpush(0x24DB); + break; + case 0x24C2: + bufpush(0x24DC); + break; + case 0x24C3: + bufpush(0x24DD); + break; + case 0x24C4: + bufpush(0x24DE); + break; + case 0x24C5: + bufpush(0x24DF); + break; + case 0x24C6: + bufpush(0x24E0); + break; + case 0x24C7: + bufpush(0x24E1); + break; + case 0x24C8: + bufpush(0x24E2); + break; + case 0x24C9: + bufpush(0x24E3); + break; + case 0x24CA: + bufpush(0x24E4); + break; + case 0x24CB: + bufpush(0x24E5); + break; + case 0x24CC: + bufpush(0x24E6); + break; + case 0x24CD: + bufpush(0x24E7); + break; + case 0x24CE: + bufpush(0x24E8); + break; + case 0x24CF: + bufpush(0x24E9); + break; + case 0x2C00: + bufpush(0x2C30); + break; + case 0x2C01: + bufpush(0x2C31); + break; + case 0x2C02: + bufpush(0x2C32); + break; + case 0x2C03: + bufpush(0x2C33); + break; + case 0x2C04: + bufpush(0x2C34); + break; + case 0x2C05: + bufpush(0x2C35); + break; + case 0x2C06: + bufpush(0x2C36); + break; + case 0x2C07: + bufpush(0x2C37); + break; + case 0x2C08: + bufpush(0x2C38); + break; + case 0x2C09: + bufpush(0x2C39); + break; + case 0x2C0A: + bufpush(0x2C3A); + break; + case 0x2C0B: + bufpush(0x2C3B); + break; + case 0x2C0C: + bufpush(0x2C3C); + break; + case 0x2C0D: + bufpush(0x2C3D); + break; + case 0x2C0E: + bufpush(0x2C3E); + break; + case 0x2C0F: + bufpush(0x2C3F); + break; + case 0x2C10: + bufpush(0x2C40); + break; + case 0x2C11: + bufpush(0x2C41); + break; + case 0x2C12: + bufpush(0x2C42); + break; + case 0x2C13: + bufpush(0x2C43); + break; + case 0x2C14: + bufpush(0x2C44); + break; + case 0x2C15: + bufpush(0x2C45); + break; + case 0x2C16: + bufpush(0x2C46); + break; + case 0x2C17: + bufpush(0x2C47); + break; + case 0x2C18: + bufpush(0x2C48); + break; + case 0x2C19: + bufpush(0x2C49); + break; + case 0x2C1A: + bufpush(0x2C4A); + break; + case 0x2C1B: + bufpush(0x2C4B); + break; + case 0x2C1C: + bufpush(0x2C4C); + break; + case 0x2C1D: + bufpush(0x2C4D); + break; + case 0x2C1E: + bufpush(0x2C4E); + break; + case 0x2C1F: + bufpush(0x2C4F); + break; + case 0x2C20: + bufpush(0x2C50); + break; + case 0x2C21: + bufpush(0x2C51); + break; + case 0x2C22: + bufpush(0x2C52); + break; + case 0x2C23: + bufpush(0x2C53); + break; + case 0x2C24: + bufpush(0x2C54); + break; + case 0x2C25: + bufpush(0x2C55); + break; + case 0x2C26: + bufpush(0x2C56); + break; + case 0x2C27: + bufpush(0x2C57); + break; + case 0x2C28: + bufpush(0x2C58); + break; + case 0x2C29: + bufpush(0x2C59); + break; + case 0x2C2A: + bufpush(0x2C5A); + break; + case 0x2C2B: + bufpush(0x2C5B); + break; + case 0x2C2C: + bufpush(0x2C5C); + break; + case 0x2C2D: + bufpush(0x2C5D); + break; + case 0x2C2E: + bufpush(0x2C5E); + break; + case 0x2C60: + bufpush(0x2C61); + break; + case 0x2C62: + bufpush(0x026B); + break; + case 0x2C63: + bufpush(0x1D7D); + break; + case 0x2C64: + bufpush(0x027D); + break; + case 0x2C67: + bufpush(0x2C68); + break; + case 0x2C69: + bufpush(0x2C6A); + break; + case 0x2C6B: + bufpush(0x2C6C); + break; + case 0x2C6D: + bufpush(0x0251); + break; + case 0x2C6E: + bufpush(0x0271); + break; + case 0x2C6F: + bufpush(0x0250); + break; + case 0x2C70: + bufpush(0x0252); + break; + case 0x2C72: + bufpush(0x2C73); + break; + case 0x2C75: + bufpush(0x2C76); + break; + case 0x2C7E: + bufpush(0x023F); + break; + case 0x2C7F: + bufpush(0x0240); + break; + case 0x2C80: + bufpush(0x2C81); + break; + case 0x2C82: + bufpush(0x2C83); + break; + case 0x2C84: + bufpush(0x2C85); + break; + case 0x2C86: + bufpush(0x2C87); + break; + case 0x2C88: + bufpush(0x2C89); + break; + case 0x2C8A: + bufpush(0x2C8B); + break; + case 0x2C8C: + bufpush(0x2C8D); + break; + case 0x2C8E: + bufpush(0x2C8F); + break; + case 0x2C90: + bufpush(0x2C91); + break; + case 0x2C92: + bufpush(0x2C93); + break; + case 0x2C94: + bufpush(0x2C95); + break; + case 0x2C96: + bufpush(0x2C97); + break; + case 0x2C98: + bufpush(0x2C99); + break; + case 0x2C9A: + bufpush(0x2C9B); + break; + case 0x2C9C: + bufpush(0x2C9D); + break; + case 0x2C9E: + bufpush(0x2C9F); + break; + case 0x2CA0: + bufpush(0x2CA1); + break; + case 0x2CA2: + bufpush(0x2CA3); + break; + case 0x2CA4: + bufpush(0x2CA5); + break; + case 0x2CA6: + bufpush(0x2CA7); + break; + case 0x2CA8: + bufpush(0x2CA9); + break; + case 0x2CAA: + bufpush(0x2CAB); + break; + case 0x2CAC: + bufpush(0x2CAD); + break; + case 0x2CAE: + bufpush(0x2CAF); + break; + case 0x2CB0: + bufpush(0x2CB1); + break; + case 0x2CB2: + bufpush(0x2CB3); + break; + case 0x2CB4: + bufpush(0x2CB5); + break; + case 0x2CB6: + bufpush(0x2CB7); + break; + case 0x2CB8: + bufpush(0x2CB9); + break; + case 0x2CBA: + bufpush(0x2CBB); + break; + case 0x2CBC: + bufpush(0x2CBD); + break; + case 0x2CBE: + bufpush(0x2CBF); + break; + case 0x2CC0: + bufpush(0x2CC1); + break; + case 0x2CC2: + bufpush(0x2CC3); + break; + case 0x2CC4: + bufpush(0x2CC5); + break; + case 0x2CC6: + bufpush(0x2CC7); + break; + case 0x2CC8: + bufpush(0x2CC9); + break; + case 0x2CCA: + bufpush(0x2CCB); + break; + case 0x2CCC: + bufpush(0x2CCD); + break; + case 0x2CCE: + bufpush(0x2CCF); + break; + case 0x2CD0: + bufpush(0x2CD1); + break; + case 0x2CD2: + bufpush(0x2CD3); + break; + case 0x2CD4: + bufpush(0x2CD5); + break; + case 0x2CD6: + bufpush(0x2CD7); + break; + case 0x2CD8: + bufpush(0x2CD9); + break; + case 0x2CDA: + bufpush(0x2CDB); + break; + case 0x2CDC: + bufpush(0x2CDD); + break; + case 0x2CDE: + bufpush(0x2CDF); + break; + case 0x2CE0: + bufpush(0x2CE1); + break; + case 0x2CE2: + bufpush(0x2CE3); + break; + case 0x2CEB: + bufpush(0x2CEC); + break; + case 0x2CED: + bufpush(0x2CEE); + break; + case 0x2CF2: + bufpush(0x2CF3); + break; + case 0xA640: + bufpush(0xA641); + break; + case 0xA642: + bufpush(0xA643); + break; + case 0xA644: + bufpush(0xA645); + break; + case 0xA646: + bufpush(0xA647); + break; + case 0xA648: + bufpush(0xA649); + break; + case 0xA64A: + bufpush(0xA64B); + break; + case 0xA64C: + bufpush(0xA64D); + break; + case 0xA64E: + bufpush(0xA64F); + break; + case 0xA650: + bufpush(0xA651); + break; + case 0xA652: + bufpush(0xA653); + break; + case 0xA654: + bufpush(0xA655); + break; + case 0xA656: + bufpush(0xA657); + break; + case 0xA658: + bufpush(0xA659); + break; + case 0xA65A: + bufpush(0xA65B); + break; + case 0xA65C: + bufpush(0xA65D); + break; + case 0xA65E: + bufpush(0xA65F); + break; + case 0xA660: + bufpush(0xA661); + break; + case 0xA662: + bufpush(0xA663); + break; + case 0xA664: + bufpush(0xA665); + break; + case 0xA666: + bufpush(0xA667); + break; + case 0xA668: + bufpush(0xA669); + break; + case 0xA66A: + bufpush(0xA66B); + break; + case 0xA66C: + bufpush(0xA66D); + break; + case 0xA680: + bufpush(0xA681); + break; + case 0xA682: + bufpush(0xA683); + break; + case 0xA684: + bufpush(0xA685); + break; + case 0xA686: + bufpush(0xA687); + break; + case 0xA688: + bufpush(0xA689); + break; + case 0xA68A: + bufpush(0xA68B); + break; + case 0xA68C: + bufpush(0xA68D); + break; + case 0xA68E: + bufpush(0xA68F); + break; + case 0xA690: + bufpush(0xA691); + break; + case 0xA692: + bufpush(0xA693); + break; + case 0xA694: + bufpush(0xA695); + break; + case 0xA696: + bufpush(0xA697); + break; + case 0xA698: + bufpush(0xA699); + break; + case 0xA69A: + bufpush(0xA69B); + break; + case 0xA722: + bufpush(0xA723); + break; + case 0xA724: + bufpush(0xA725); + break; + case 0xA726: + bufpush(0xA727); + break; + case 0xA728: + bufpush(0xA729); + break; + case 0xA72A: + bufpush(0xA72B); + break; + case 0xA72C: + bufpush(0xA72D); + break; + case 0xA72E: + bufpush(0xA72F); + break; + case 0xA732: + bufpush(0xA733); + break; + case 0xA734: + bufpush(0xA735); + break; + case 0xA736: + bufpush(0xA737); + break; + case 0xA738: + bufpush(0xA739); + break; + case 0xA73A: + bufpush(0xA73B); + break; + case 0xA73C: + bufpush(0xA73D); + break; + case 0xA73E: + bufpush(0xA73F); + break; + case 0xA740: + bufpush(0xA741); + break; + case 0xA742: + bufpush(0xA743); + break; + case 0xA744: + bufpush(0xA745); + break; + case 0xA746: + bufpush(0xA747); + break; + case 0xA748: + bufpush(0xA749); + break; + case 0xA74A: + bufpush(0xA74B); + break; + case 0xA74C: + bufpush(0xA74D); + break; + case 0xA74E: + bufpush(0xA74F); + break; + case 0xA750: + bufpush(0xA751); + break; + case 0xA752: + bufpush(0xA753); + break; + case 0xA754: + bufpush(0xA755); + break; + case 0xA756: + bufpush(0xA757); + break; + case 0xA758: + bufpush(0xA759); + break; + case 0xA75A: + bufpush(0xA75B); + break; + case 0xA75C: + bufpush(0xA75D); + break; + case 0xA75E: + bufpush(0xA75F); + break; + case 0xA760: + bufpush(0xA761); + break; + case 0xA762: + bufpush(0xA763); + break; + case 0xA764: + bufpush(0xA765); + break; + case 0xA766: + bufpush(0xA767); + break; + case 0xA768: + bufpush(0xA769); + break; + case 0xA76A: + bufpush(0xA76B); + break; + case 0xA76C: + bufpush(0xA76D); + break; + case 0xA76E: + bufpush(0xA76F); + break; + case 0xA779: + bufpush(0xA77A); + break; + case 0xA77B: + bufpush(0xA77C); + break; + case 0xA77D: + bufpush(0x1D79); + break; + case 0xA77E: + bufpush(0xA77F); + break; + case 0xA780: + bufpush(0xA781); + break; + case 0xA782: + bufpush(0xA783); + break; + case 0xA784: + bufpush(0xA785); + break; + case 0xA786: + bufpush(0xA787); + break; + case 0xA78B: + bufpush(0xA78C); + break; + case 0xA78D: + bufpush(0x0265); + break; + case 0xA790: + bufpush(0xA791); + break; + case 0xA792: + bufpush(0xA793); + break; + case 0xA796: + bufpush(0xA797); + break; + case 0xA798: + bufpush(0xA799); + break; + case 0xA79A: + bufpush(0xA79B); + break; + case 0xA79C: + bufpush(0xA79D); + break; + case 0xA79E: + bufpush(0xA79F); + break; + case 0xA7A0: + bufpush(0xA7A1); + break; + case 0xA7A2: + bufpush(0xA7A3); + break; + case 0xA7A4: + bufpush(0xA7A5); + break; + case 0xA7A6: + bufpush(0xA7A7); + break; + case 0xA7A8: + bufpush(0xA7A9); + break; + case 0xA7AA: + bufpush(0x0266); + break; + case 0xA7AB: + bufpush(0x025C); + break; + case 0xA7AC: + bufpush(0x0261); + break; + case 0xA7AD: + bufpush(0x026C); + break; + case 0xA7AE: + bufpush(0x026A); + break; + case 0xA7B0: + bufpush(0x029E); + break; + case 0xA7B1: + bufpush(0x0287); + break; + case 0xA7B2: + bufpush(0x029D); + break; + case 0xA7B3: + bufpush(0xAB53); + break; + case 0xA7B4: + bufpush(0xA7B5); + break; + case 0xA7B6: + bufpush(0xA7B7); + break; + case 0xAB70: + bufpush(0x13A0); + break; + case 0xAB71: + bufpush(0x13A1); + break; + case 0xAB72: + bufpush(0x13A2); + break; + case 0xAB73: + bufpush(0x13A3); + break; + case 0xAB74: + bufpush(0x13A4); + break; + case 0xAB75: + bufpush(0x13A5); + break; + case 0xAB76: + bufpush(0x13A6); + break; + case 0xAB77: + bufpush(0x13A7); + break; + case 0xAB78: + bufpush(0x13A8); + break; + case 0xAB79: + bufpush(0x13A9); + break; + case 0xAB7A: + bufpush(0x13AA); + break; + case 0xAB7B: + bufpush(0x13AB); + break; + case 0xAB7C: + bufpush(0x13AC); + break; + case 0xAB7D: + bufpush(0x13AD); + break; + case 0xAB7E: + bufpush(0x13AE); + break; + case 0xAB7F: + bufpush(0x13AF); + break; + case 0xAB80: + bufpush(0x13B0); + break; + case 0xAB81: + bufpush(0x13B1); + break; + case 0xAB82: + bufpush(0x13B2); + break; + case 0xAB83: + bufpush(0x13B3); + break; + case 0xAB84: + bufpush(0x13B4); + break; + case 0xAB85: + bufpush(0x13B5); + break; + case 0xAB86: + bufpush(0x13B6); + break; + case 0xAB87: + bufpush(0x13B7); + break; + case 0xAB88: + bufpush(0x13B8); + break; + case 0xAB89: + bufpush(0x13B9); + break; + case 0xAB8A: + bufpush(0x13BA); + break; + case 0xAB8B: + bufpush(0x13BB); + break; + case 0xAB8C: + bufpush(0x13BC); + break; + case 0xAB8D: + bufpush(0x13BD); + break; + case 0xAB8E: + bufpush(0x13BE); + break; + case 0xAB8F: + bufpush(0x13BF); + break; + case 0xAB90: + bufpush(0x13C0); + break; + case 0xAB91: + bufpush(0x13C1); + break; + case 0xAB92: + bufpush(0x13C2); + break; + case 0xAB93: + bufpush(0x13C3); + break; + case 0xAB94: + bufpush(0x13C4); + break; + case 0xAB95: + bufpush(0x13C5); + break; + case 0xAB96: + bufpush(0x13C6); + break; + case 0xAB97: + bufpush(0x13C7); + break; + case 0xAB98: + bufpush(0x13C8); + break; + case 0xAB99: + bufpush(0x13C9); + break; + case 0xAB9A: + bufpush(0x13CA); + break; + case 0xAB9B: + bufpush(0x13CB); + break; + case 0xAB9C: + bufpush(0x13CC); + break; + case 0xAB9D: + bufpush(0x13CD); + break; + case 0xAB9E: + bufpush(0x13CE); + break; + case 0xAB9F: + bufpush(0x13CF); + break; + case 0xABA0: + bufpush(0x13D0); + break; + case 0xABA1: + bufpush(0x13D1); + break; + case 0xABA2: + bufpush(0x13D2); + break; + case 0xABA3: + bufpush(0x13D3); + break; + case 0xABA4: + bufpush(0x13D4); + break; + case 0xABA5: + bufpush(0x13D5); + break; + case 0xABA6: + bufpush(0x13D6); + break; + case 0xABA7: + bufpush(0x13D7); + break; + case 0xABA8: + bufpush(0x13D8); + break; + case 0xABA9: + bufpush(0x13D9); + break; + case 0xABAA: + bufpush(0x13DA); + break; + case 0xABAB: + bufpush(0x13DB); + break; + case 0xABAC: + bufpush(0x13DC); + break; + case 0xABAD: + bufpush(0x13DD); + break; + case 0xABAE: + bufpush(0x13DE); + break; + case 0xABAF: + bufpush(0x13DF); + break; + case 0xABB0: + bufpush(0x13E0); + break; + case 0xABB1: + bufpush(0x13E1); + break; + case 0xABB2: + bufpush(0x13E2); + break; + case 0xABB3: + bufpush(0x13E3); + break; + case 0xABB4: + bufpush(0x13E4); + break; + case 0xABB5: + bufpush(0x13E5); + break; + case 0xABB6: + bufpush(0x13E6); + break; + case 0xABB7: + bufpush(0x13E7); + break; + case 0xABB8: + bufpush(0x13E8); + break; + case 0xABB9: + bufpush(0x13E9); + break; + case 0xABBA: + bufpush(0x13EA); + break; + case 0xABBB: + bufpush(0x13EB); + break; + case 0xABBC: + bufpush(0x13EC); + break; + case 0xABBD: + bufpush(0x13ED); + break; + case 0xABBE: + bufpush(0x13EE); + break; + case 0xABBF: + bufpush(0x13EF); + break; + case 0xFB00: + bufpush(0x0066); + bufpush(0x0066); + break; + case 0xFB01: + bufpush(0x0066); + bufpush(0x0069); + break; + case 0xFB02: + bufpush(0x0066); + bufpush(0x006C); + break; + case 0xFB03: + bufpush(0x0066); + bufpush(0x0066); + bufpush(0x0069); + break; + case 0xFB04: + bufpush(0x0066); + bufpush(0x0066); + bufpush(0x006C); + break; + case 0xFB05: + bufpush(0x0073); + bufpush(0x0074); + break; + case 0xFB06: + bufpush(0x0073); + bufpush(0x0074); + break; + case 0xFB13: + bufpush(0x0574); + bufpush(0x0576); + break; + case 0xFB14: + bufpush(0x0574); + bufpush(0x0565); + break; + case 0xFB15: + bufpush(0x0574); + bufpush(0x056B); + break; + case 0xFB16: + bufpush(0x057E); + bufpush(0x0576); + break; + case 0xFB17: + bufpush(0x0574); + bufpush(0x056D); + break; + case 0xFF21: + bufpush(0xFF41); + break; + case 0xFF22: + bufpush(0xFF42); + break; + case 0xFF23: + bufpush(0xFF43); + break; + case 0xFF24: + bufpush(0xFF44); + break; + case 0xFF25: + bufpush(0xFF45); + break; + case 0xFF26: + bufpush(0xFF46); + break; + case 0xFF27: + bufpush(0xFF47); + break; + case 0xFF28: + bufpush(0xFF48); + break; + case 0xFF29: + bufpush(0xFF49); + break; + case 0xFF2A: + bufpush(0xFF4A); + break; + case 0xFF2B: + bufpush(0xFF4B); + break; + case 0xFF2C: + bufpush(0xFF4C); + break; + case 0xFF2D: + bufpush(0xFF4D); + break; + case 0xFF2E: + bufpush(0xFF4E); + break; + case 0xFF2F: + bufpush(0xFF4F); + break; + case 0xFF30: + bufpush(0xFF50); + break; + case 0xFF31: + bufpush(0xFF51); + break; + case 0xFF32: + bufpush(0xFF52); + break; + case 0xFF33: + bufpush(0xFF53); + break; + case 0xFF34: + bufpush(0xFF54); + break; + case 0xFF35: + bufpush(0xFF55); + break; + case 0xFF36: + bufpush(0xFF56); + break; + case 0xFF37: + bufpush(0xFF57); + break; + case 0xFF38: + bufpush(0xFF58); + break; + case 0xFF39: + bufpush(0xFF59); + break; + case 0xFF3A: + bufpush(0xFF5A); + break; + case 0x10400: + bufpush(0x10428); + break; + case 0x10401: + bufpush(0x10429); + break; + case 0x10402: + bufpush(0x1042A); + break; + case 0x10403: + bufpush(0x1042B); + break; + case 0x10404: + bufpush(0x1042C); + break; + case 0x10405: + bufpush(0x1042D); + break; + case 0x10406: + bufpush(0x1042E); + break; + case 0x10407: + bufpush(0x1042F); + break; + case 0x10408: + bufpush(0x10430); + break; + case 0x10409: + bufpush(0x10431); + break; + case 0x1040A: + bufpush(0x10432); + break; + case 0x1040B: + bufpush(0x10433); + break; + case 0x1040C: + bufpush(0x10434); + break; + case 0x1040D: + bufpush(0x10435); + break; + case 0x1040E: + bufpush(0x10436); + break; + case 0x1040F: + bufpush(0x10437); + break; + case 0x10410: + bufpush(0x10438); + break; + case 0x10411: + bufpush(0x10439); + break; + case 0x10412: + bufpush(0x1043A); + break; + case 0x10413: + bufpush(0x1043B); + break; + case 0x10414: + bufpush(0x1043C); + break; + case 0x10415: + bufpush(0x1043D); + break; + case 0x10416: + bufpush(0x1043E); + break; + case 0x10417: + bufpush(0x1043F); + break; + case 0x10418: + bufpush(0x10440); + break; + case 0x10419: + bufpush(0x10441); + break; + case 0x1041A: + bufpush(0x10442); + break; + case 0x1041B: + bufpush(0x10443); + break; + case 0x1041C: + bufpush(0x10444); + break; + case 0x1041D: + bufpush(0x10445); + break; + case 0x1041E: + bufpush(0x10446); + break; + case 0x1041F: + bufpush(0x10447); + break; + case 0x10420: + bufpush(0x10448); + break; + case 0x10421: + bufpush(0x10449); + break; + case 0x10422: + bufpush(0x1044A); + break; + case 0x10423: + bufpush(0x1044B); + break; + case 0x10424: + bufpush(0x1044C); + break; + case 0x10425: + bufpush(0x1044D); + break; + case 0x10426: + bufpush(0x1044E); + break; + case 0x10427: + bufpush(0x1044F); + break; + case 0x104B0: + bufpush(0x104D8); + break; + case 0x104B1: + bufpush(0x104D9); + break; + case 0x104B2: + bufpush(0x104DA); + break; + case 0x104B3: + bufpush(0x104DB); + break; + case 0x104B4: + bufpush(0x104DC); + break; + case 0x104B5: + bufpush(0x104DD); + break; + case 0x104B6: + bufpush(0x104DE); + break; + case 0x104B7: + bufpush(0x104DF); + break; + case 0x104B8: + bufpush(0x104E0); + break; + case 0x104B9: + bufpush(0x104E1); + break; + case 0x104BA: + bufpush(0x104E2); + break; + case 0x104BB: + bufpush(0x104E3); + break; + case 0x104BC: + bufpush(0x104E4); + break; + case 0x104BD: + bufpush(0x104E5); + break; + case 0x104BE: + bufpush(0x104E6); + break; + case 0x104BF: + bufpush(0x104E7); + break; + case 0x104C0: + bufpush(0x104E8); + break; + case 0x104C1: + bufpush(0x104E9); + break; + case 0x104C2: + bufpush(0x104EA); + break; + case 0x104C3: + bufpush(0x104EB); + break; + case 0x104C4: + bufpush(0x104EC); + break; + case 0x104C5: + bufpush(0x104ED); + break; + case 0x104C6: + bufpush(0x104EE); + break; + case 0x104C7: + bufpush(0x104EF); + break; + case 0x104C8: + bufpush(0x104F0); + break; + case 0x104C9: + bufpush(0x104F1); + break; + case 0x104CA: + bufpush(0x104F2); + break; + case 0x104CB: + bufpush(0x104F3); + break; + case 0x104CC: + bufpush(0x104F4); + break; + case 0x104CD: + bufpush(0x104F5); + break; + case 0x104CE: + bufpush(0x104F6); + break; + case 0x104CF: + bufpush(0x104F7); + break; + case 0x104D0: + bufpush(0x104F8); + break; + case 0x104D1: + bufpush(0x104F9); + break; + case 0x104D2: + bufpush(0x104FA); + break; + case 0x104D3: + bufpush(0x104FB); + break; + case 0x10C80: + bufpush(0x10CC0); + break; + case 0x10C81: + bufpush(0x10CC1); + break; + case 0x10C82: + bufpush(0x10CC2); + break; + case 0x10C83: + bufpush(0x10CC3); + break; + case 0x10C84: + bufpush(0x10CC4); + break; + case 0x10C85: + bufpush(0x10CC5); + break; + case 0x10C86: + bufpush(0x10CC6); + break; + case 0x10C87: + bufpush(0x10CC7); + break; + case 0x10C88: + bufpush(0x10CC8); + break; + case 0x10C89: + bufpush(0x10CC9); + break; + case 0x10C8A: + bufpush(0x10CCA); + break; + case 0x10C8B: + bufpush(0x10CCB); + break; + case 0x10C8C: + bufpush(0x10CCC); + break; + case 0x10C8D: + bufpush(0x10CCD); + break; + case 0x10C8E: + bufpush(0x10CCE); + break; + case 0x10C8F: + bufpush(0x10CCF); + break; + case 0x10C90: + bufpush(0x10CD0); + break; + case 0x10C91: + bufpush(0x10CD1); + break; + case 0x10C92: + bufpush(0x10CD2); + break; + case 0x10C93: + bufpush(0x10CD3); + break; + case 0x10C94: + bufpush(0x10CD4); + break; + case 0x10C95: + bufpush(0x10CD5); + break; + case 0x10C96: + bufpush(0x10CD6); + break; + case 0x10C97: + bufpush(0x10CD7); + break; + case 0x10C98: + bufpush(0x10CD8); + break; + case 0x10C99: + bufpush(0x10CD9); + break; + case 0x10C9A: + bufpush(0x10CDA); + break; + case 0x10C9B: + bufpush(0x10CDB); + break; + case 0x10C9C: + bufpush(0x10CDC); + break; + case 0x10C9D: + bufpush(0x10CDD); + break; + case 0x10C9E: + bufpush(0x10CDE); + break; + case 0x10C9F: + bufpush(0x10CDF); + break; + case 0x10CA0: + bufpush(0x10CE0); + break; + case 0x10CA1: + bufpush(0x10CE1); + break; + case 0x10CA2: + bufpush(0x10CE2); + break; + case 0x10CA3: + bufpush(0x10CE3); + break; + case 0x10CA4: + bufpush(0x10CE4); + break; + case 0x10CA5: + bufpush(0x10CE5); + break; + case 0x10CA6: + bufpush(0x10CE6); + break; + case 0x10CA7: + bufpush(0x10CE7); + break; + case 0x10CA8: + bufpush(0x10CE8); + break; + case 0x10CA9: + bufpush(0x10CE9); + break; + case 0x10CAA: + bufpush(0x10CEA); + break; + case 0x10CAB: + bufpush(0x10CEB); + break; + case 0x10CAC: + bufpush(0x10CEC); + break; + case 0x10CAD: + bufpush(0x10CED); + break; + case 0x10CAE: + bufpush(0x10CEE); + break; + case 0x10CAF: + bufpush(0x10CEF); + break; + case 0x10CB0: + bufpush(0x10CF0); + break; + case 0x10CB1: + bufpush(0x10CF1); + break; + case 0x10CB2: + bufpush(0x10CF2); + break; + case 0x118A0: + bufpush(0x118C0); + break; + case 0x118A1: + bufpush(0x118C1); + break; + case 0x118A2: + bufpush(0x118C2); + break; + case 0x118A3: + bufpush(0x118C3); + break; + case 0x118A4: + bufpush(0x118C4); + break; + case 0x118A5: + bufpush(0x118C5); + break; + case 0x118A6: + bufpush(0x118C6); + break; + case 0x118A7: + bufpush(0x118C7); + break; + case 0x118A8: + bufpush(0x118C8); + break; + case 0x118A9: + bufpush(0x118C9); + break; + case 0x118AA: + bufpush(0x118CA); + break; + case 0x118AB: + bufpush(0x118CB); + break; + case 0x118AC: + bufpush(0x118CC); + break; + case 0x118AD: + bufpush(0x118CD); + break; + case 0x118AE: + bufpush(0x118CE); + break; + case 0x118AF: + bufpush(0x118CF); + break; + case 0x118B0: + bufpush(0x118D0); + break; + case 0x118B1: + bufpush(0x118D1); + break; + case 0x118B2: + bufpush(0x118D2); + break; + case 0x118B3: + bufpush(0x118D3); + break; + case 0x118B4: + bufpush(0x118D4); + break; + case 0x118B5: + bufpush(0x118D5); + break; + case 0x118B6: + bufpush(0x118D6); + break; + case 0x118B7: + bufpush(0x118D7); + break; + case 0x118B8: + bufpush(0x118D8); + break; + case 0x118B9: + bufpush(0x118D9); + break; + case 0x118BA: + bufpush(0x118DA); + break; + case 0x118BB: + bufpush(0x118DB); + break; + case 0x118BC: + bufpush(0x118DC); + break; + case 0x118BD: + bufpush(0x118DD); + break; + case 0x118BE: + bufpush(0x118DE); + break; + case 0x118BF: + bufpush(0x118DF); + break; + case 0x1E900: + bufpush(0x1E922); + break; + case 0x1E901: + bufpush(0x1E923); + break; + case 0x1E902: + bufpush(0x1E924); + break; + case 0x1E903: + bufpush(0x1E925); + break; + case 0x1E904: + bufpush(0x1E926); + break; + case 0x1E905: + bufpush(0x1E927); + break; + case 0x1E906: + bufpush(0x1E928); + break; + case 0x1E907: + bufpush(0x1E929); + break; + case 0x1E908: + bufpush(0x1E92A); + break; + case 0x1E909: + bufpush(0x1E92B); + break; + case 0x1E90A: + bufpush(0x1E92C); + break; + case 0x1E90B: + bufpush(0x1E92D); + break; + case 0x1E90C: + bufpush(0x1E92E); + break; + case 0x1E90D: + bufpush(0x1E92F); + break; + case 0x1E90E: + bufpush(0x1E930); + break; + case 0x1E90F: + bufpush(0x1E931); + break; + case 0x1E910: + bufpush(0x1E932); + break; + case 0x1E911: + bufpush(0x1E933); + break; + case 0x1E912: + bufpush(0x1E934); + break; + case 0x1E913: + bufpush(0x1E935); + break; + case 0x1E914: + bufpush(0x1E936); + break; + case 0x1E915: + bufpush(0x1E937); + break; + case 0x1E916: + bufpush(0x1E938); + break; + case 0x1E917: + bufpush(0x1E939); + break; + case 0x1E918: + bufpush(0x1E93A); + break; + case 0x1E919: + bufpush(0x1E93B); + break; + case 0x1E91A: + bufpush(0x1E93C); + break; + case 0x1E91B: + bufpush(0x1E93D); + break; + case 0x1E91C: + bufpush(0x1E93E); + break; + case 0x1E91D: + bufpush(0x1E93F); + break; + case 0x1E91E: + bufpush(0x1E940); + break; + case 0x1E91F: + bufpush(0x1E941); + break; + case 0x1E920: + bufpush(0x1E942); + break; + case 0x1E921: + bufpush(0x1E943); + break; + default: + bufpush(c); + } ADDED src/cmark_amalgamation.c Index: src/cmark_amalgamation.c ================================================================== --- /dev/null +++ src/cmark_amalgamation.c @@ -0,0 +1,18982 @@ +#include +#include +#include +#include "cmark_amalgamation.h" + +int cmark_version() { return CMARK_VERSION; } + +/* Generated by re2c 0.16 */ +bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, + bufsize_t offset) { + bufsize_t res; + unsigned char *ptr = (unsigned char *)c->data; + + if (ptr == NULL || offset > c->len) { + return 0; + } else { + unsigned char lim = ptr[c->len]; + + ptr[c->len] = '\0'; + res = scanner(ptr + offset); + ptr[c->len] = lim; + } + + return res; +} + +// Try to match a scheme including colon. +bufsize_t _scan_scheme(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + yych = *p; + if (yych <= '@') + goto yy2; + if (yych <= 'Z') + goto yy4; + if (yych <= '`') + goto yy2; + if (yych <= 'z') + goto yy4; + yy2: + ++p; + yy3 : { return 0; } + yy4: + yych = *(marker = ++p); + if (yych <= '/') { + if (yych <= '+') { + if (yych <= '*') + goto yy3; + } else { + if (yych <= ',') + goto yy3; + if (yych >= '/') + goto yy3; + } + } else { + if (yych <= 'Z') { + if (yych <= '9') + goto yy5; + if (yych <= '@') + goto yy3; + } else { + if (yych <= '`') + goto yy3; + if (yych >= '{') + goto yy3; + } + } + yy5: + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych == '+') + goto yy7; + } else { + if (yych != '/') + goto yy7; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych >= 'A') + goto yy7; + } else { + if (yych <= '`') + goto yy6; + if (yych <= 'z') + goto yy7; + } + } + yy6: + p = marker; + goto yy3; + yy7: + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych == '+') + goto yy10; + goto yy6; + } else { + if (yych == '/') + goto yy6; + goto yy10; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + goto yy10; + } else { + if (yych <= '`') + goto yy6; + if (yych <= 'z') + goto yy10; + goto yy6; + } + } + yy8: + ++p; + { return (bufsize_t)(p - start); } + yy10: + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy6; + } else { + if (yych == '/') + goto yy6; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy8; + if (yych <= '@') + goto yy6; + } else { + if (yych <= '`') + goto yy6; + if (yych >= '{') + goto yy6; + } + } + ++p; + if ((yych = *p) == ':') + goto yy8; + goto yy6; + } +} + +// Try to match URI autolink after first <, returning number of chars matched. +bufsize_t _scan_autolink_uri(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + yych = *p; + if (yych <= '@') + goto yy41; + if (yych <= 'Z') + goto yy43; + if (yych <= '`') + goto yy41; + if (yych <= 'z') + goto yy43; + yy41: + ++p; + yy42 : { return 0; } + yy43: + yych = *(marker = ++p); + if (yych <= '/') { + if (yych <= '+') { + if (yych <= '*') + goto yy42; + } else { + if (yych <= ',') + goto yy42; + if (yych >= '/') + goto yy42; + } + } else { + if (yych <= 'Z') { + if (yych <= '9') + goto yy44; + if (yych <= '@') + goto yy42; + } else { + if (yych <= '`') + goto yy42; + if (yych >= '{') + goto yy42; + } + } + yy44: + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych == '+') + goto yy46; + } else { + if (yych != '/') + goto yy46; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych >= 'A') + goto yy46; + } else { + if (yych <= '`') + goto yy45; + if (yych <= 'z') + goto yy46; + } + } + yy45: + p = marker; + goto yy42; + yy46: + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych == '+') + goto yy49; + goto yy45; + } else { + if (yych == '/') + goto yy45; + goto yy49; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + goto yy49; + } else { + if (yych <= '`') + goto yy45; + if (yych <= 'z') + goto yy49; + goto yy45; + } + } + yy47: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy47; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '<') + goto yy45; + if (yych <= '>') + goto yy50; + goto yy45; + } else { + if (yych <= 0xDF) + goto yy52; + if (yych <= 0xE0) + goto yy53; + goto yy54; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy55; + if (yych <= 0xEF) + goto yy54; + goto yy56; + } else { + if (yych <= 0xF3) + goto yy57; + if (yych <= 0xF4) + goto yy58; + goto yy45; + } + } + yy49: + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych == '+') + goto yy59; + goto yy45; + } else { + if (yych == '/') + goto yy45; + goto yy59; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + goto yy59; + } else { + if (yych <= '`') + goto yy45; + if (yych <= 'z') + goto yy59; + goto yy45; + } + } + yy50: + ++p; + { return (bufsize_t)(p - start); } + yy52: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy47; + goto yy45; + yy53: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy45; + if (yych <= 0xBF) + goto yy52; + goto yy45; + yy54: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy52; + goto yy45; + yy55: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0x9F) + goto yy52; + goto yy45; + yy56: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy45; + if (yych <= 0xBF) + goto yy54; + goto yy45; + yy57: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0xBF) + goto yy54; + goto yy45; + yy58: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy45; + if (yych <= 0x8F) + goto yy54; + goto yy45; + yy59: + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + yych = *++p; + if (yych <= '9') { + if (yych <= ',') { + if (yych != '+') + goto yy45; + } else { + if (yych == '/') + goto yy45; + } + } else { + if (yych <= 'Z') { + if (yych <= ':') + goto yy47; + if (yych <= '@') + goto yy45; + } else { + if (yych <= '`') + goto yy45; + if (yych >= '{') + goto yy45; + } + } + ++p; + if ((yych = *p) == ':') + goto yy47; + goto yy45; + } +} + +// Try to match email autolink after first <, returning num of chars matched. +bufsize_t _scan_autolink_email(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 128, 0, 128, 128, 128, 128, 128, 0, 0, + 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 128, 0, 128, 0, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + yych = *p; + if (yych <= '9') { + if (yych <= '\'') { + if (yych == '!') + goto yy91; + if (yych >= '#') + goto yy91; + } else { + if (yych <= ')') + goto yy89; + if (yych != ',') + goto yy91; + } + } else { + if (yych <= '?') { + if (yych == '=') + goto yy91; + if (yych >= '?') + goto yy91; + } else { + if (yych <= 'Z') { + if (yych >= 'A') + goto yy91; + } else { + if (yych <= ']') + goto yy89; + if (yych <= '~') + goto yy91; + } + } + } + yy89: + ++p; + yy90 : { return 0; } + yy91: + yych = *(marker = ++p); + if (yych <= ',') { + if (yych <= '"') { + if (yych == '!') + goto yy93; + goto yy90; + } else { + if (yych <= '\'') + goto yy93; + if (yych <= ')') + goto yy90; + if (yych <= '+') + goto yy93; + goto yy90; + } + } else { + if (yych <= '>') { + if (yych <= '9') + goto yy93; + if (yych == '=') + goto yy93; + goto yy90; + } else { + if (yych <= 'Z') + goto yy93; + if (yych <= ']') + goto yy90; + if (yych <= '~') + goto yy93; + goto yy90; + } + } + yy92: + ++p; + yych = *p; + yy93: + if (yybm[0 + yych] & 128) { + goto yy92; + } + if (yych <= '>') + goto yy94; + if (yych <= '@') + goto yy95; + yy94: + p = marker; + goto yy90; + yy95: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '/') + goto yy94; + if (yych >= ':') + goto yy94; + } else { + if (yych <= 'Z') + goto yy96; + if (yych <= '`') + goto yy94; + if (yych >= '{') + goto yy94; + } + yy96: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy98; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy98; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy98; + goto yy94; + } + } + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy101; + if (yych <= '/') + goto yy94; + goto yy102; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy102; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy102; + goto yy94; + } + } + yy98: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych <= '-') + goto yy101; + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy102; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy102; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy102; + goto yy94; + } + } + yy99: + ++p; + { return (bufsize_t)(p - start); } + yy101: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy103; + if (yych <= '/') + goto yy94; + goto yy104; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy104; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy104; + goto yy94; + } + } + yy102: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy104; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy104; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy104; + goto yy94; + } + } + yy103: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy105; + if (yych <= '/') + goto yy94; + goto yy106; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy106; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy106; + goto yy94; + } + } + yy104: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy106; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy106; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy106; + goto yy94; + } + } + yy105: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy107; + if (yych <= '/') + goto yy94; + goto yy108; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy108; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy108; + goto yy94; + } + } + yy106: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy108; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy108; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy108; + goto yy94; + } + } + yy107: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy109; + if (yych <= '/') + goto yy94; + goto yy110; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy110; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy110; + goto yy94; + } + } + yy108: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy110; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy110; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy110; + goto yy94; + } + } + yy109: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy111; + if (yych <= '/') + goto yy94; + goto yy112; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy112; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy112; + goto yy94; + } + } + yy110: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy112; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy112; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy112; + goto yy94; + } + } + yy111: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy113; + if (yych <= '/') + goto yy94; + goto yy114; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy114; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy114; + goto yy94; + } + } + yy112: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy114; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy114; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy114; + goto yy94; + } + } + yy113: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy115; + if (yych <= '/') + goto yy94; + goto yy116; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy116; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy116; + goto yy94; + } + } + yy114: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy116; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy116; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy116; + goto yy94; + } + } + yy115: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy117; + if (yych <= '/') + goto yy94; + goto yy118; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy118; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy118; + goto yy94; + } + } + yy116: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy118; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy118; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy118; + goto yy94; + } + } + yy117: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy119; + if (yych <= '/') + goto yy94; + goto yy120; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy120; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy120; + goto yy94; + } + } + yy118: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy120; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy120; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy120; + goto yy94; + } + } + yy119: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy121; + if (yych <= '/') + goto yy94; + goto yy122; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy122; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy122; + goto yy94; + } + } + yy120: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy122; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy122; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy122; + goto yy94; + } + } + yy121: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy123; + if (yych <= '/') + goto yy94; + goto yy124; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy124; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy124; + goto yy94; + } + } + yy122: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy124; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy124; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy124; + goto yy94; + } + } + yy123: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy125; + if (yych <= '/') + goto yy94; + goto yy126; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy126; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy126; + goto yy94; + } + } + yy124: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy126; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy126; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy126; + goto yy94; + } + } + yy125: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy127; + if (yych <= '/') + goto yy94; + goto yy128; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy128; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy128; + goto yy94; + } + } + yy126: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy128; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy128; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy128; + goto yy94; + } + } + yy127: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy129; + if (yych <= '/') + goto yy94; + goto yy130; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy130; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy130; + goto yy94; + } + } + yy128: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy130; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy130; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy130; + goto yy94; + } + } + yy129: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy131; + if (yych <= '/') + goto yy94; + goto yy132; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy132; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy132; + goto yy94; + } + } + yy130: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy132; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy132; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy132; + goto yy94; + } + } + yy131: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy133; + if (yych <= '/') + goto yy94; + goto yy134; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy134; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy134; + goto yy94; + } + } + yy132: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy134; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy134; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy134; + goto yy94; + } + } + yy133: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy135; + if (yych <= '/') + goto yy94; + goto yy136; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy136; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy136; + goto yy94; + } + } + yy134: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy136; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy136; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy136; + goto yy94; + } + } + yy135: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy137; + if (yych <= '/') + goto yy94; + goto yy138; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy138; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy138; + goto yy94; + } + } + yy136: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy138; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy138; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy138; + goto yy94; + } + } + yy137: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy139; + if (yych <= '/') + goto yy94; + goto yy140; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy140; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy140; + goto yy94; + } + } + yy138: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy140; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy140; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy140; + goto yy94; + } + } + yy139: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy141; + if (yych <= '/') + goto yy94; + goto yy142; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy142; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy142; + goto yy94; + } + } + yy140: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy142; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy142; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy142; + goto yy94; + } + } + yy141: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy143; + if (yych <= '/') + goto yy94; + goto yy144; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy144; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy144; + goto yy94; + } + } + yy142: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy144; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy144; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy144; + goto yy94; + } + } + yy143: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy145; + if (yych <= '/') + goto yy94; + goto yy146; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy146; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy146; + goto yy94; + } + } + yy144: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy146; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy146; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy146; + goto yy94; + } + } + yy145: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy147; + if (yych <= '/') + goto yy94; + goto yy148; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy148; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy148; + goto yy94; + } + } + yy146: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy148; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy148; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy148; + goto yy94; + } + } + yy147: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy149; + if (yych <= '/') + goto yy94; + goto yy150; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy150; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy150; + goto yy94; + } + } + yy148: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy150; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy150; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy150; + goto yy94; + } + } + yy149: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy151; + if (yych <= '/') + goto yy94; + goto yy152; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy152; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy152; + goto yy94; + } + } + yy150: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy152; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy152; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy152; + goto yy94; + } + } + yy151: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy153; + if (yych <= '/') + goto yy94; + goto yy154; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy154; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy154; + goto yy94; + } + } + yy152: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy154; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy154; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy154; + goto yy94; + } + } + yy153: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy155; + if (yych <= '/') + goto yy94; + goto yy156; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy156; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy156; + goto yy94; + } + } + yy154: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy156; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy156; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy156; + goto yy94; + } + } + yy155: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy157; + if (yych <= '/') + goto yy94; + goto yy158; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy158; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy158; + goto yy94; + } + } + yy156: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy158; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy158; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy158; + goto yy94; + } + } + yy157: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy159; + if (yych <= '/') + goto yy94; + goto yy160; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy160; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy160; + goto yy94; + } + } + yy158: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy160; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy160; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy160; + goto yy94; + } + } + yy159: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy161; + if (yych <= '/') + goto yy94; + goto yy162; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy162; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy162; + goto yy94; + } + } + yy160: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy162; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy162; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy162; + goto yy94; + } + } + yy161: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy163; + if (yych <= '/') + goto yy94; + goto yy164; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy164; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy164; + goto yy94; + } + } + yy162: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy164; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy164; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy164; + goto yy94; + } + } + yy163: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy165; + if (yych <= '/') + goto yy94; + goto yy166; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy166; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy166; + goto yy94; + } + } + yy164: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy166; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy166; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy166; + goto yy94; + } + } + yy165: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy167; + if (yych <= '/') + goto yy94; + goto yy168; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy168; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy168; + goto yy94; + } + } + yy166: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy168; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy168; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy168; + goto yy94; + } + } + yy167: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy169; + if (yych <= '/') + goto yy94; + goto yy170; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy170; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy170; + goto yy94; + } + } + yy168: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy170; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy170; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy170; + goto yy94; + } + } + yy169: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy171; + if (yych <= '/') + goto yy94; + goto yy172; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy172; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy172; + goto yy94; + } + } + yy170: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy172; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy172; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy172; + goto yy94; + } + } + yy171: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy173; + if (yych <= '/') + goto yy94; + goto yy174; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy174; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy174; + goto yy94; + } + } + yy172: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy174; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy174; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy174; + goto yy94; + } + } + yy173: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy175; + if (yych <= '/') + goto yy94; + goto yy176; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy176; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy176; + goto yy94; + } + } + yy174: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy176; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy176; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy176; + goto yy94; + } + } + yy175: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy177; + if (yych <= '/') + goto yy94; + goto yy178; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy178; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy178; + goto yy94; + } + } + yy176: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy178; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy178; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy178; + goto yy94; + } + } + yy177: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy179; + if (yych <= '/') + goto yy94; + goto yy180; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy180; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy180; + goto yy94; + } + } + yy178: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy180; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy180; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy180; + goto yy94; + } + } + yy179: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy181; + if (yych <= '/') + goto yy94; + goto yy182; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy182; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy182; + goto yy94; + } + } + yy180: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy182; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy182; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy182; + goto yy94; + } + } + yy181: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy183; + if (yych <= '/') + goto yy94; + goto yy184; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy184; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy184; + goto yy94; + } + } + yy182: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy184; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy184; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy184; + goto yy94; + } + } + yy183: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy185; + if (yych <= '/') + goto yy94; + goto yy186; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy186; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy186; + goto yy94; + } + } + yy184: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy186; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy186; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy186; + goto yy94; + } + } + yy185: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy187; + if (yych <= '/') + goto yy94; + goto yy188; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy188; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy188; + goto yy94; + } + } + yy186: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy188; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy188; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy188; + goto yy94; + } + } + yy187: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy189; + if (yych <= '/') + goto yy94; + goto yy190; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy190; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy190; + goto yy94; + } + } + yy188: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy190; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy190; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy190; + goto yy94; + } + } + yy189: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy191; + if (yych <= '/') + goto yy94; + goto yy192; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy192; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy192; + goto yy94; + } + } + yy190: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy192; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy192; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy192; + goto yy94; + } + } + yy191: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy193; + if (yych <= '/') + goto yy94; + goto yy194; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy194; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy194; + goto yy94; + } + } + yy192: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy194; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy194; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy194; + goto yy94; + } + } + yy193: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy195; + if (yych <= '/') + goto yy94; + goto yy196; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy196; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy196; + goto yy94; + } + } + yy194: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy196; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy196; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy196; + goto yy94; + } + } + yy195: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy197; + if (yych <= '/') + goto yy94; + goto yy198; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy198; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy198; + goto yy94; + } + } + yy196: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy198; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy198; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy198; + goto yy94; + } + } + yy197: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy199; + if (yych <= '/') + goto yy94; + goto yy200; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy200; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy200; + goto yy94; + } + } + yy198: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy200; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy200; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy200; + goto yy94; + } + } + yy199: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy201; + if (yych <= '/') + goto yy94; + goto yy202; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy202; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy202; + goto yy94; + } + } + yy200: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy202; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy202; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy202; + goto yy94; + } + } + yy201: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy203; + if (yych <= '/') + goto yy94; + goto yy204; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy204; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy204; + goto yy94; + } + } + yy202: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy204; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy204; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy204; + goto yy94; + } + } + yy203: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy205; + if (yych <= '/') + goto yy94; + goto yy206; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy206; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy206; + goto yy94; + } + } + yy204: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy206; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy206; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy206; + goto yy94; + } + } + yy205: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy207; + if (yych <= '/') + goto yy94; + goto yy208; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy208; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy208; + goto yy94; + } + } + yy206: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy208; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy208; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy208; + goto yy94; + } + } + yy207: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy209; + if (yych <= '/') + goto yy94; + goto yy210; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy210; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy210; + goto yy94; + } + } + yy208: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy210; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy210; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy210; + goto yy94; + } + } + yy209: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy211; + if (yych <= '/') + goto yy94; + goto yy212; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy212; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy212; + goto yy94; + } + } + yy210: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy212; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy212; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy212; + goto yy94; + } + } + yy211: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy213; + if (yych <= '/') + goto yy94; + goto yy214; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy214; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy214; + goto yy94; + } + } + yy212: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy214; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy214; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy214; + goto yy94; + } + } + yy213: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy215; + if (yych <= '/') + goto yy94; + goto yy216; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy216; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy216; + goto yy94; + } + } + yy214: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy216; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy216; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy216; + goto yy94; + } + } + yy215: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy217; + if (yych <= '/') + goto yy94; + goto yy218; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy218; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy218; + goto yy94; + } + } + yy216: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy218; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy218; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy218; + goto yy94; + } + } + yy217: + ++p; + yych = *p; + if (yych <= '9') { + if (yych == '-') + goto yy219; + if (yych <= '/') + goto yy94; + goto yy220; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy94; + goto yy220; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy220; + goto yy94; + } + } + yy218: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= ',') + goto yy94; + if (yych >= '.') + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy220; + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + goto yy220; + } else { + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy220; + goto yy94; + } + } + yy219: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '/') + goto yy94; + if (yych <= '9') + goto yy221; + goto yy94; + } else { + if (yych <= 'Z') + goto yy221; + if (yych <= '`') + goto yy94; + if (yych <= 'z') + goto yy221; + goto yy94; + } + yy220: + ++p; + yych = *p; + if (yych <= '=') { + if (yych <= '.') { + if (yych <= '-') + goto yy94; + goto yy95; + } else { + if (yych <= '/') + goto yy94; + if (yych >= ':') + goto yy94; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy99; + if (yych <= '@') + goto yy94; + } else { + if (yych <= '`') + goto yy94; + if (yych >= '{') + goto yy94; + } + } + yy221: + ++p; + yych = *p; + if (yych == '.') + goto yy95; + if (yych == '>') + goto yy99; + goto yy94; + } +} + +// Try to match an HTML tag after first <, returning num of chars matched. +bufsize_t _scan_html_tag(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + /* table 1 .. 8: 0 */ + 0, 250, 250, 250, 250, 250, 250, 250, 250, 235, 235, 235, 235, 235, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 235, 250, 202, 250, 250, 250, 250, 170, 250, 250, 250, + 250, 250, 246, 254, 250, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 250, 234, 234, 232, 250, 250, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 250, 250, 122, 250, 254, 234, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 250, 250, 250, 250, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* table 9 .. 11: 256 */ + 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 192, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 128, 128, 128, 128, 128, 0, 128, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 128, 128, 128, 128, 128, 128, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 128, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, + }; + yych = *p; + if (yych <= '>') { + if (yych <= '!') { + if (yych >= '!') + goto yy226; + } else { + if (yych == '/') + goto yy227; + } + } else { + if (yych <= 'Z') { + if (yych <= '?') + goto yy228; + if (yych >= 'A') + goto yy229; + } else { + if (yych <= '`') + goto yy224; + if (yych <= 'z') + goto yy229; + } + } + yy224: + ++p; + yy225 : { return 0; } + yy226: + yych = *(marker = ++p); + if (yybm[256 + yych] & 32) { + goto yy232; + } + if (yych == '-') + goto yy230; + if (yych <= '@') + goto yy225; + if (yych <= '[') + goto yy234; + goto yy225; + yy227: + yych = *(marker = ++p); + if (yych <= '@') + goto yy225; + if (yych <= 'Z') + goto yy235; + if (yych <= '`') + goto yy225; + if (yych <= 'z') + goto yy235; + goto yy225; + yy228: + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy225; + if (yych <= 0x7F) + goto yy238; + if (yych <= 0xC1) + goto yy225; + if (yych <= 0xF4) + goto yy238; + goto yy225; + yy229: + yych = *(marker = ++p); + if (yybm[0 + yych] & 1) { + goto yy247; + } + if (yych <= '=') { + if (yych <= '.') { + if (yych == '-') + goto yy249; + goto yy225; + } else { + if (yych <= '/') + goto yy251; + if (yych <= '9') + goto yy249; + goto yy225; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy252; + if (yych <= '@') + goto yy225; + goto yy249; + } else { + if (yych <= '`') + goto yy225; + if (yych <= 'z') + goto yy249; + goto yy225; + } + } + yy230: + yych = *++p; + if (yych == '-') + goto yy254; + yy231: + p = marker; + goto yy225; + yy232: + ++p; + yych = *p; + if (yybm[256 + yych] & 32) { + goto yy232; + } + if (yych <= 0x08) + goto yy231; + if (yych <= '\r') + goto yy255; + if (yych == ' ') + goto yy255; + goto yy231; + yy234: + yych = *++p; + if (yych == 'C') + goto yy257; + if (yych == 'c') + goto yy257; + goto yy231; + yy235: + ++p; + yych = *p; + if (yybm[256 + yych] & 64) { + goto yy235; + } + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy231; + if (yych <= '\r') + goto yy258; + goto yy231; + } else { + if (yych <= ' ') + goto yy258; + if (yych == '>') + goto yy252; + goto yy231; + } + yy237: + ++p; + yych = *p; + yy238: + if (yybm[256 + yych] & 128) { + goto yy237; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych >= '@') + goto yy231; + } else { + if (yych <= 0xDF) + goto yy240; + if (yych <= 0xE0) + goto yy241; + goto yy242; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy243; + if (yych <= 0xEF) + goto yy242; + goto yy244; + } else { + if (yych <= 0xF3) + goto yy245; + if (yych <= 0xF4) + goto yy246; + goto yy231; + } + } + ++p; + yych = *p; + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) + goto yy231; + if (yych <= '=') + goto yy237; + goto yy252; + } else { + if (yych <= 0x7F) + goto yy237; + if (yych <= 0xC1) + goto yy231; + if (yych >= 0xE0) + goto yy241; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy243; + goto yy242; + } else { + if (yych <= 0xF0) + goto yy244; + if (yych <= 0xF3) + goto yy245; + if (yych <= 0xF4) + goto yy246; + goto yy231; + } + } + yy240: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy237; + goto yy231; + yy241: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy231; + if (yych <= 0xBF) + goto yy240; + goto yy231; + yy242: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy240; + goto yy231; + yy243: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy240; + goto yy231; + yy244: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy231; + if (yych <= 0xBF) + goto yy242; + goto yy231; + yy245: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy242; + goto yy231; + yy246: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x8F) + goto yy242; + goto yy231; + yy247: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy247; + } + if (yych <= '>') { + if (yych <= '9') { + if (yych == '/') + goto yy251; + goto yy231; + } else { + if (yych <= ':') + goto yy260; + if (yych <= '=') + goto yy231; + goto yy252; + } + } else { + if (yych <= '^') { + if (yych <= '@') + goto yy231; + if (yych <= 'Z') + goto yy260; + goto yy231; + } else { + if (yych == '`') + goto yy231; + if (yych <= 'z') + goto yy260; + goto yy231; + } + } + yy249: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy247; + } + if (yych <= '=') { + if (yych <= '.') { + if (yych == '-') + goto yy249; + goto yy231; + } else { + if (yych <= '/') + goto yy251; + if (yych <= '9') + goto yy249; + goto yy231; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy252; + if (yych <= '@') + goto yy231; + goto yy249; + } else { + if (yych <= '`') + goto yy231; + if (yych <= 'z') + goto yy249; + goto yy231; + } + } + yy251: + yych = *++p; + if (yych != '>') + goto yy231; + yy252: + ++p; + { return (bufsize_t)(p - start); } + yy254: + yych = *++p; + if (yych == '-') + goto yy264; + if (yych == '>') + goto yy231; + goto yy263; + yy255: + ++p; + yych = *p; + if (yybm[0 + yych] & 2) { + goto yy255; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= '>') + goto yy252; + goto yy231; + } else { + if (yych <= 0xDF) + goto yy272; + if (yych <= 0xE0) + goto yy273; + goto yy274; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy275; + if (yych <= 0xEF) + goto yy274; + goto yy276; + } else { + if (yych <= 0xF3) + goto yy277; + if (yych <= 0xF4) + goto yy278; + goto yy231; + } + } + yy257: + yych = *++p; + if (yych == 'D') + goto yy279; + if (yych == 'd') + goto yy279; + goto yy231; + yy258: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy231; + if (yych <= '\r') + goto yy258; + goto yy231; + } else { + if (yych <= ' ') + goto yy258; + if (yych == '>') + goto yy252; + goto yy231; + } + yy260: + ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy260; + } + if (yych <= ',') { + if (yych <= '\r') { + if (yych <= 0x08) + goto yy231; + goto yy280; + } else { + if (yych == ' ') + goto yy280; + goto yy231; + } + } else { + if (yych <= '<') { + if (yych <= '/') + goto yy251; + goto yy231; + } else { + if (yych <= '=') + goto yy282; + if (yych <= '>') + goto yy252; + goto yy231; + } + } + yy262: + ++p; + yych = *p; + yy263: + if (yybm[0 + yych] & 8) { + goto yy262; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= '-') + goto yy283; + goto yy231; + } else { + if (yych <= 0xDF) + goto yy265; + if (yych <= 0xE0) + goto yy266; + goto yy267; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy268; + if (yych <= 0xEF) + goto yy267; + goto yy269; + } else { + if (yych <= 0xF3) + goto yy270; + if (yych <= 0xF4) + goto yy271; + goto yy231; + } + } + yy264: + yych = *++p; + if (yych == '-') + goto yy251; + if (yych == '>') + goto yy231; + goto yy263; + yy265: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy262; + goto yy231; + yy266: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy231; + if (yych <= 0xBF) + goto yy265; + goto yy231; + yy267: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy265; + goto yy231; + yy268: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy265; + goto yy231; + yy269: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy231; + if (yych <= 0xBF) + goto yy267; + goto yy231; + yy270: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy267; + goto yy231; + yy271: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x8F) + goto yy267; + goto yy231; + yy272: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy255; + goto yy231; + yy273: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy231; + if (yych <= 0xBF) + goto yy272; + goto yy231; + yy274: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy272; + goto yy231; + yy275: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy272; + goto yy231; + yy276: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy231; + if (yych <= 0xBF) + goto yy274; + goto yy231; + yy277: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy274; + goto yy231; + yy278: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x8F) + goto yy274; + goto yy231; + yy279: + yych = *++p; + if (yych == 'A') + goto yy284; + if (yych == 'a') + goto yy284; + goto yy231; + yy280: + ++p; + yych = *p; + if (yych <= '<') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy231; + if (yych <= '\r') + goto yy280; + if (yych <= 0x1F) + goto yy231; + goto yy280; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy231; + goto yy251; + } else { + if (yych == ':') + goto yy260; + goto yy231; + } + } + } else { + if (yych <= 'Z') { + if (yych <= '=') + goto yy282; + if (yych <= '>') + goto yy252; + if (yych <= '@') + goto yy231; + goto yy260; + } else { + if (yych <= '_') { + if (yych <= '^') + goto yy231; + goto yy260; + } else { + if (yych <= '`') + goto yy231; + if (yych <= 'z') + goto yy260; + goto yy231; + } + } + } + yy282: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy285; + } + if (yych <= 0xE0) { + if (yych <= '"') { + if (yych <= 0x00) + goto yy231; + if (yych <= ' ') + goto yy287; + goto yy288; + } else { + if (yych <= '\'') + goto yy290; + if (yych <= 0xC1) + goto yy231; + if (yych <= 0xDF) + goto yy292; + goto yy293; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy295; + goto yy294; + } else { + if (yych <= 0xF0) + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } + } + yy283: + ++p; + yych = *p; + if (yybm[0 + yych] & 8) { + goto yy262; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= '-') + goto yy251; + goto yy231; + } else { + if (yych <= 0xDF) + goto yy265; + if (yych <= 0xE0) + goto yy266; + goto yy267; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy268; + if (yych <= 0xEF) + goto yy267; + goto yy269; + } else { + if (yych <= 0xF3) + goto yy270; + if (yych <= 0xF4) + goto yy271; + goto yy231; + } + } + yy284: + yych = *++p; + if (yych == 'T') + goto yy299; + if (yych == 't') + goto yy299; + goto yy231; + yy285: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy285; + } + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych <= 0x00) + goto yy231; + if (yych <= ' ') + goto yy300; + goto yy231; + } else { + if (yych <= '>') + goto yy252; + if (yych <= 0xC1) + goto yy231; + if (yych <= 0xDF) + goto yy292; + goto yy293; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy295; + goto yy294; + } else { + if (yych <= 0xF0) + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } + } + yy287: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy285; + } + if (yych <= 0xDF) { + if (yych <= '\'') { + if (yych <= 0x00) + goto yy231; + if (yych <= ' ') + goto yy302; + if (yych >= '#') + goto yy290; + } else { + if (yych == '>') + goto yy252; + if (yych <= 0xC1) + goto yy231; + goto yy292; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy293; + if (yych == 0xED) + goto yy295; + goto yy294; + } else { + if (yych <= 0xF0) + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } + } + yy288: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy288; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= '"') + goto yy304; + goto yy231; + } else { + if (yych <= 0xDF) + goto yy305; + if (yych <= 0xE0) + goto yy306; + goto yy307; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy308; + if (yych <= 0xEF) + goto yy307; + goto yy309; + } else { + if (yych <= 0xF3) + goto yy310; + if (yych <= 0xF4) + goto yy311; + goto yy231; + } + } + yy290: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy290; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= '\'') + goto yy304; + goto yy231; + } else { + if (yych <= 0xDF) + goto yy312; + if (yych <= 0xE0) + goto yy313; + goto yy314; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy315; + if (yych <= 0xEF) + goto yy314; + goto yy316; + } else { + if (yych <= 0xF3) + goto yy317; + if (yych <= 0xF4) + goto yy318; + goto yy231; + } + } + yy292: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy285; + goto yy231; + yy293: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy231; + if (yych <= 0xBF) + goto yy292; + goto yy231; + yy294: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy292; + goto yy231; + yy295: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy292; + goto yy231; + yy296: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy231; + if (yych <= 0xBF) + goto yy294; + goto yy231; + yy297: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy294; + goto yy231; + yy298: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x8F) + goto yy294; + goto yy231; + yy299: + yych = *++p; + if (yych == 'A') + goto yy319; + if (yych == 'a') + goto yy319; + goto yy231; + yy300: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy231; + if (yych <= 0x08) + goto yy285; + goto yy300; + } else { + if (yych == ' ') + goto yy300; + if (yych <= '!') + goto yy285; + goto yy231; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy231; + if (yych <= '9') + goto yy285; + goto yy320; + } else { + if (yych <= ';') + goto yy285; + if (yych <= '=') + goto yy231; + if (yych <= '>') + goto yy252; + goto yy285; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy320; + if (yych <= '^') + goto yy285; + if (yych <= '_') + goto yy320; + goto yy231; + } else { + if (yych <= 'z') + goto yy320; + if (yych <= 0x7F) + goto yy285; + if (yych <= 0xC1) + goto yy231; + goto yy292; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy293; + if (yych == 0xED) + goto yy295; + goto yy294; + } else { + if (yych <= 0xF0) + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } + } + } + yy302: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy231; + if (yych <= 0x08) + goto yy285; + goto yy302; + } else { + if (yych == ' ') + goto yy302; + if (yych <= '!') + goto yy285; + goto yy288; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy290; + if (yych <= '9') + goto yy285; + goto yy320; + } else { + if (yych <= ';') + goto yy285; + if (yych <= '=') + goto yy231; + if (yych <= '>') + goto yy252; + goto yy285; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy320; + if (yych <= '^') + goto yy285; + if (yych <= '_') + goto yy320; + goto yy231; + } else { + if (yych <= 'z') + goto yy320; + if (yych <= 0x7F) + goto yy285; + if (yych <= 0xC1) + goto yy231; + goto yy292; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy293; + if (yych == 0xED) + goto yy295; + goto yy294; + } else { + if (yych <= 0xF0) + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } + } + } + yy304: + ++p; + yych = *p; + if (yybm[0 + yych] & 1) { + goto yy247; + } + if (yych == '/') + goto yy251; + if (yych == '>') + goto yy252; + goto yy231; + yy305: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy288; + goto yy231; + yy306: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy231; + if (yych <= 0xBF) + goto yy305; + goto yy231; + yy307: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy305; + goto yy231; + yy308: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy305; + goto yy231; + yy309: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy231; + if (yych <= 0xBF) + goto yy307; + goto yy231; + yy310: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy307; + goto yy231; + yy311: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x8F) + goto yy307; + goto yy231; + yy312: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy290; + goto yy231; + yy313: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy231; + if (yych <= 0xBF) + goto yy312; + goto yy231; + yy314: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy312; + goto yy231; + yy315: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy312; + goto yy231; + yy316: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy231; + if (yych <= 0xBF) + goto yy314; + goto yy231; + yy317: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy314; + goto yy231; + yy318: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x8F) + goto yy314; + goto yy231; + yy319: + yych = *++p; + if (yych == '[') + goto yy322; + goto yy231; + yy320: + ++p; + yych = *p; + if (yych <= '>') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy231; + if (yych <= 0x08) + goto yy285; + if (yych <= '\r') + goto yy324; + goto yy285; + } else { + if (yych <= ' ') + goto yy324; + if (yych == '"') + goto yy231; + goto yy285; + } + } else { + if (yych <= '/') { + if (yych <= '\'') + goto yy231; + if (yych <= ',') + goto yy285; + if (yych <= '.') + goto yy320; + goto yy285; + } else { + if (yych <= ';') { + if (yych <= ':') + goto yy320; + goto yy285; + } else { + if (yych <= '<') + goto yy231; + if (yych <= '=') + goto yy282; + goto yy252; + } + } + } + } else { + if (yych <= 0xC1) { + if (yych <= '_') { + if (yych <= '@') + goto yy285; + if (yych <= 'Z') + goto yy320; + if (yych <= '^') + goto yy285; + goto yy320; + } else { + if (yych <= '`') + goto yy231; + if (yych <= 'z') + goto yy320; + if (yych <= 0x7F) + goto yy285; + goto yy231; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy292; + if (yych <= 0xE0) + goto yy293; + if (yych <= 0xEC) + goto yy294; + goto yy295; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy294; + goto yy296; + } else { + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } + } + } + } + yy322: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy322; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= ']') + goto yy326; + goto yy231; + } else { + if (yych <= 0xDF) + goto yy327; + if (yych <= 0xE0) + goto yy328; + goto yy329; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy330; + if (yych <= 0xEF) + goto yy329; + goto yy331; + } else { + if (yych <= 0xF3) + goto yy332; + if (yych <= 0xF4) + goto yy333; + goto yy231; + } + } + yy324: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy231; + if (yych <= 0x08) + goto yy285; + if (yych <= '\r') + goto yy324; + goto yy285; + } else { + if (yych <= ' ') + goto yy324; + if (yych == '"') + goto yy231; + goto yy285; + } + } else { + if (yych <= ';') { + if (yych <= '\'') + goto yy231; + if (yych == ':') + goto yy320; + goto yy285; + } else { + if (yych <= '<') + goto yy231; + if (yych <= '=') + goto yy282; + if (yych <= '>') + goto yy252; + goto yy285; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy320; + if (yych <= '^') + goto yy285; + if (yych <= '_') + goto yy320; + goto yy231; + } else { + if (yych <= 'z') + goto yy320; + if (yych <= 0x7F) + goto yy285; + if (yych <= 0xC1) + goto yy231; + goto yy292; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy293; + if (yych == 0xED) + goto yy295; + goto yy294; + } else { + if (yych <= 0xF0) + goto yy296; + if (yych <= 0xF3) + goto yy297; + if (yych <= 0xF4) + goto yy298; + goto yy231; + } + } + } + yy326: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy322; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy231; + if (yych <= ']') + goto yy334; + goto yy231; + } else { + if (yych <= 0xDF) + goto yy327; + if (yych <= 0xE0) + goto yy328; + goto yy329; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy330; + if (yych <= 0xEF) + goto yy329; + goto yy331; + } else { + if (yych <= 0xF3) + goto yy332; + if (yych <= 0xF4) + goto yy333; + goto yy231; + } + } + yy327: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy322; + goto yy231; + yy328: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy231; + if (yych <= 0xBF) + goto yy327; + goto yy231; + yy329: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy327; + goto yy231; + yy330: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x9F) + goto yy327; + goto yy231; + yy331: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy231; + if (yych <= 0xBF) + goto yy329; + goto yy231; + yy332: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0xBF) + goto yy329; + goto yy231; + yy333: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy231; + if (yych <= 0x8F) + goto yy329; + goto yy231; + yy334: + ++p; + yych = *p; + if (yych <= 0xE0) { + if (yych <= '>') { + if (yych <= 0x00) + goto yy231; + if (yych <= '=') + goto yy322; + goto yy252; + } else { + if (yych <= 0x7F) + goto yy322; + if (yych <= 0xC1) + goto yy231; + if (yych <= 0xDF) + goto yy327; + goto yy328; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy330; + goto yy329; + } else { + if (yych <= 0xF0) + goto yy331; + if (yych <= 0xF3) + goto yy332; + if (yych <= 0xF4) + goto yy333; + goto yy231; + } + } + } +} + +// Try to match an HTML block tag start line, returning +// an integer code for the type of block (1-6, matching the spec). +// #7 is handled by a separate function, below. +bufsize_t _scan_html_block_start(const unsigned char *p) { + const unsigned char *marker = NULL; + + { + unsigned char yych; + yych = *p; + if (yych == '<') + goto yy339; + ++p; + yy338 : { return 0; } + yy339: + yych = *(marker = ++p); + switch (yych) { + case '!': + goto yy340; + case '/': + goto yy342; + case '?': + goto yy343; + case 'A': + case 'a': + goto yy345; + case 'B': + case 'b': + goto yy346; + case 'C': + case 'c': + goto yy347; + case 'D': + case 'd': + goto yy348; + case 'F': + case 'f': + goto yy349; + case 'H': + case 'h': + goto yy350; + case 'I': + case 'i': + goto yy351; + case 'L': + case 'l': + goto yy352; + case 'M': + case 'm': + goto yy353; + case 'N': + case 'n': + goto yy354; + case 'O': + case 'o': + goto yy355; + case 'P': + case 'p': + goto yy356; + case 'S': + case 's': + goto yy357; + case 'T': + case 't': + goto yy358; + case 'U': + case 'u': + goto yy359; + default: + goto yy338; + } + yy340: + yych = *++p; + if (yych <= '@') { + if (yych == '-') + goto yy360; + } else { + if (yych <= 'Z') + goto yy361; + if (yych <= '[') + goto yy363; + } + yy341: + p = marker; + goto yy338; + yy342: + yych = *++p; + switch (yych) { + case 'A': + case 'a': + goto yy345; + case 'B': + case 'b': + goto yy346; + case 'C': + case 'c': + goto yy347; + case 'D': + case 'd': + goto yy348; + case 'F': + case 'f': + goto yy349; + case 'H': + case 'h': + goto yy350; + case 'I': + case 'i': + goto yy351; + case 'L': + case 'l': + goto yy352; + case 'M': + case 'm': + goto yy353; + case 'N': + case 'n': + goto yy354; + case 'O': + case 'o': + goto yy355; + case 'P': + case 'p': + goto yy364; + case 'S': + case 's': + goto yy365; + case 'T': + case 't': + goto yy358; + case 'U': + case 'u': + goto yy359; + default: + goto yy341; + } + yy343: + ++p; + { return 3; } + yy345: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'D') { + if (yych <= 'C') + goto yy341; + goto yy366; + } else { + if (yych <= 'Q') + goto yy341; + if (yych <= 'R') + goto yy367; + goto yy368; + } + } else { + if (yych <= 'q') { + if (yych == 'd') + goto yy366; + goto yy341; + } else { + if (yych <= 'r') + goto yy367; + if (yych <= 's') + goto yy368; + goto yy341; + } + } + yy346: + yych = *++p; + if (yych <= 'O') { + if (yych <= 'K') { + if (yych == 'A') + goto yy369; + goto yy341; + } else { + if (yych <= 'L') + goto yy370; + if (yych <= 'N') + goto yy341; + goto yy371; + } + } else { + if (yych <= 'k') { + if (yych == 'a') + goto yy369; + goto yy341; + } else { + if (yych <= 'l') + goto yy370; + if (yych == 'o') + goto yy371; + goto yy341; + } + } + yy347: + yych = *++p; + if (yych <= 'O') { + if (yych <= 'D') { + if (yych == 'A') + goto yy372; + goto yy341; + } else { + if (yych <= 'E') + goto yy373; + if (yych <= 'N') + goto yy341; + goto yy374; + } + } else { + if (yych <= 'd') { + if (yych == 'a') + goto yy372; + goto yy341; + } else { + if (yych <= 'e') + goto yy373; + if (yych == 'o') + goto yy374; + goto yy341; + } + } + yy348: + yych = *++p; + switch (yych) { + case 'D': + case 'L': + case 'T': + case 'd': + case 'l': + case 't': + goto yy375; + case 'E': + case 'e': + goto yy376; + case 'I': + case 'i': + goto yy377; + default: + goto yy341; + } + yy349: + yych = *++p; + if (yych <= 'R') { + if (yych <= 'N') { + if (yych == 'I') + goto yy378; + goto yy341; + } else { + if (yych <= 'O') + goto yy379; + if (yych <= 'Q') + goto yy341; + goto yy380; + } + } else { + if (yych <= 'n') { + if (yych == 'i') + goto yy378; + goto yy341; + } else { + if (yych <= 'o') + goto yy379; + if (yych == 'r') + goto yy380; + goto yy341; + } + } + yy350: + yych = *++p; + if (yych <= 'S') { + if (yych <= 'D') { + if (yych <= '0') + goto yy341; + if (yych <= '6') + goto yy375; + goto yy341; + } else { + if (yych <= 'E') + goto yy381; + if (yych == 'R') + goto yy375; + goto yy341; + } + } else { + if (yych <= 'q') { + if (yych <= 'T') + goto yy382; + if (yych == 'e') + goto yy381; + goto yy341; + } else { + if (yych <= 'r') + goto yy375; + if (yych == 't') + goto yy382; + goto yy341; + } + } + yy351: + yych = *++p; + if (yych == 'F') + goto yy383; + if (yych == 'f') + goto yy383; + goto yy341; + yy352: + yych = *++p; + if (yych <= 'I') { + if (yych == 'E') + goto yy384; + if (yych <= 'H') + goto yy341; + goto yy385; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy341; + goto yy384; + } else { + if (yych == 'i') + goto yy385; + goto yy341; + } + } + yy353: + yych = *++p; + if (yych <= 'E') { + if (yych == 'A') + goto yy386; + if (yych <= 'D') + goto yy341; + goto yy387; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy341; + goto yy386; + } else { + if (yych == 'e') + goto yy387; + goto yy341; + } + } + yy354: + yych = *++p; + if (yych <= 'O') { + if (yych == 'A') + goto yy388; + if (yych <= 'N') + goto yy341; + goto yy389; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy341; + goto yy388; + } else { + if (yych == 'o') + goto yy389; + goto yy341; + } + } + yy355: + yych = *++p; + if (yych <= 'P') { + if (yych == 'L') + goto yy375; + if (yych <= 'O') + goto yy341; + goto yy390; + } else { + if (yych <= 'l') { + if (yych <= 'k') + goto yy341; + goto yy375; + } else { + if (yych == 'p') + goto yy390; + goto yy341; + } + } + yy356: + yych = *++p; + if (yych <= '>') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + if (yych <= 0x1F) + goto yy341; + goto yy391; + } else { + if (yych == '/') + goto yy393; + if (yych <= '=') + goto yy341; + goto yy391; + } + } else { + if (yych <= 'R') { + if (yych == 'A') + goto yy394; + if (yych <= 'Q') + goto yy341; + goto yy395; + } else { + if (yych <= 'a') { + if (yych <= '`') + goto yy341; + goto yy394; + } else { + if (yych == 'r') + goto yy395; + goto yy341; + } + } + } + yy357: + yych = *++p; + switch (yych) { + case 'C': + case 'c': + goto yy396; + case 'E': + case 'e': + goto yy397; + case 'O': + case 'o': + goto yy398; + case 'T': + case 't': + goto yy399; + case 'U': + case 'u': + goto yy400; + default: + goto yy341; + } + yy358: + yych = *++p; + switch (yych) { + case 'A': + case 'a': + goto yy401; + case 'B': + case 'b': + goto yy402; + case 'D': + case 'd': + goto yy375; + case 'F': + case 'f': + goto yy403; + case 'H': + case 'h': + goto yy404; + case 'I': + case 'i': + goto yy405; + case 'R': + case 'r': + goto yy406; + default: + goto yy341; + } + yy359: + yych = *++p; + if (yych == 'L') + goto yy375; + if (yych == 'l') + goto yy375; + goto yy341; + yy360: + yych = *++p; + if (yych == '-') + goto yy407; + goto yy341; + yy361: + ++p; + { return 4; } + yy363: + yych = *++p; + if (yych == 'C') + goto yy409; + if (yych == 'c') + goto yy409; + goto yy341; + yy364: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= '@') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'A') + goto yy394; + if (yych == 'a') + goto yy394; + goto yy341; + } + } + yy365: + yych = *++p; + if (yych <= 'U') { + if (yych <= 'N') { + if (yych == 'E') + goto yy397; + goto yy341; + } else { + if (yych <= 'O') + goto yy398; + if (yych <= 'T') + goto yy341; + goto yy400; + } + } else { + if (yych <= 'n') { + if (yych == 'e') + goto yy397; + goto yy341; + } else { + if (yych <= 'o') + goto yy398; + if (yych == 'u') + goto yy400; + goto yy341; + } + } + yy366: + yych = *++p; + if (yych == 'D') + goto yy410; + if (yych == 'd') + goto yy410; + goto yy341; + yy367: + yych = *++p; + if (yych == 'T') + goto yy411; + if (yych == 't') + goto yy411; + goto yy341; + yy368: + yych = *++p; + if (yych == 'I') + goto yy412; + if (yych == 'i') + goto yy412; + goto yy341; + yy369: + yych = *++p; + if (yych == 'S') + goto yy413; + if (yych == 's') + goto yy413; + goto yy341; + yy370: + yych = *++p; + if (yych == 'O') + goto yy414; + if (yych == 'o') + goto yy414; + goto yy341; + yy371: + yych = *++p; + if (yych == 'D') + goto yy415; + if (yych == 'd') + goto yy415; + goto yy341; + yy372: + yych = *++p; + if (yych == 'P') + goto yy416; + if (yych == 'p') + goto yy416; + goto yy341; + yy373: + yych = *++p; + if (yych == 'N') + goto yy417; + if (yych == 'n') + goto yy417; + goto yy341; + yy374: + yych = *++p; + if (yych == 'L') + goto yy418; + if (yych == 'l') + goto yy418; + goto yy341; + yy375: + yych = *++p; + if (yych <= ' ') { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + if (yych <= 0x1F) + goto yy341; + goto yy391; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy341; + goto yy393; + } else { + if (yych == '>') + goto yy391; + goto yy341; + } + } + yy376: + yych = *++p; + if (yych == 'T') + goto yy419; + if (yych == 't') + goto yy419; + goto yy341; + yy377: + yych = *++p; + if (yych <= 'V') { + if (yych <= 'Q') { + if (yych == 'A') + goto yy420; + goto yy341; + } else { + if (yych <= 'R') + goto yy375; + if (yych <= 'U') + goto yy341; + goto yy375; + } + } else { + if (yych <= 'q') { + if (yych == 'a') + goto yy420; + goto yy341; + } else { + if (yych <= 'r') + goto yy375; + if (yych == 'v') + goto yy375; + goto yy341; + } + } + yy378: + yych = *++p; + if (yych <= 'G') { + if (yych == 'E') + goto yy421; + if (yych <= 'F') + goto yy341; + goto yy422; + } else { + if (yych <= 'e') { + if (yych <= 'd') + goto yy341; + goto yy421; + } else { + if (yych == 'g') + goto yy422; + goto yy341; + } + } + yy379: + yych = *++p; + if (yych <= 'R') { + if (yych == 'O') + goto yy417; + if (yych <= 'Q') + goto yy341; + goto yy423; + } else { + if (yych <= 'o') { + if (yych <= 'n') + goto yy341; + goto yy417; + } else { + if (yych == 'r') + goto yy423; + goto yy341; + } + } + yy380: + yych = *++p; + if (yych == 'A') + goto yy424; + if (yych == 'a') + goto yy424; + goto yy341; + yy381: + yych = *++p; + if (yych == 'A') + goto yy425; + if (yych == 'a') + goto yy425; + goto yy341; + yy382: + yych = *++p; + if (yych == 'M') + goto yy359; + if (yych == 'm') + goto yy359; + goto yy341; + yy383: + yych = *++p; + if (yych == 'R') + goto yy426; + if (yych == 'r') + goto yy426; + goto yy341; + yy384: + yych = *++p; + if (yych == 'G') + goto yy427; + if (yych == 'g') + goto yy427; + goto yy341; + yy385: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= 'M') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'N') + goto yy428; + if (yych == 'n') + goto yy428; + goto yy341; + } + } + yy386: + yych = *++p; + if (yych == 'I') + goto yy429; + if (yych == 'i') + goto yy429; + goto yy341; + yy387: + yych = *++p; + if (yych <= 'T') { + if (yych == 'N') + goto yy430; + if (yych <= 'S') + goto yy341; + goto yy431; + } else { + if (yych <= 'n') { + if (yych <= 'm') + goto yy341; + goto yy430; + } else { + if (yych == 't') + goto yy431; + goto yy341; + } + } + yy388: + yych = *++p; + if (yych == 'V') + goto yy375; + if (yych == 'v') + goto yy375; + goto yy341; + yy389: + yych = *++p; + if (yych == 'F') + goto yy432; + if (yych == 'f') + goto yy432; + goto yy341; + yy390: + yych = *++p; + if (yych == 'T') + goto yy433; + if (yych == 't') + goto yy433; + goto yy341; + yy391: + ++p; + { return 6; } + yy393: + yych = *++p; + if (yych == '>') + goto yy391; + goto yy341; + yy394: + yych = *++p; + if (yych == 'R') + goto yy434; + if (yych == 'r') + goto yy434; + goto yy341; + yy395: + yych = *++p; + if (yych == 'E') + goto yy435; + if (yych == 'e') + goto yy435; + goto yy341; + yy396: + yych = *++p; + if (yych == 'R') + goto yy436; + if (yych == 'r') + goto yy436; + goto yy341; + yy397: + yych = *++p; + if (yych == 'C') + goto yy416; + if (yych == 'c') + goto yy416; + goto yy341; + yy398: + yych = *++p; + if (yych == 'U') + goto yy437; + if (yych == 'u') + goto yy437; + goto yy341; + yy399: + yych = *++p; + if (yych == 'Y') + goto yy438; + if (yych == 'y') + goto yy438; + goto yy341; + yy400: + yych = *++p; + if (yych == 'M') + goto yy439; + if (yych == 'm') + goto yy439; + goto yy341; + yy401: + yych = *++p; + if (yych == 'B') + goto yy440; + if (yych == 'b') + goto yy440; + goto yy341; + yy402: + yych = *++p; + if (yych == 'O') + goto yy371; + if (yych == 'o') + goto yy371; + goto yy341; + yy403: + yych = *++p; + if (yych == 'O') + goto yy441; + if (yych == 'o') + goto yy441; + goto yy341; + yy404: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= 'D') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'E') + goto yy442; + if (yych == 'e') + goto yy442; + goto yy341; + } + } + yy405: + yych = *++p; + if (yych == 'T') + goto yy440; + if (yych == 't') + goto yy440; + goto yy341; + yy406: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= '@') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'A') + goto yy443; + if (yych == 'a') + goto yy443; + goto yy341; + } + } + yy407: + ++p; + { return 2; } + yy409: + yych = *++p; + if (yych == 'D') + goto yy444; + if (yych == 'd') + goto yy444; + goto yy341; + yy410: + yych = *++p; + if (yych == 'R') + goto yy445; + if (yych == 'r') + goto yy445; + goto yy341; + yy411: + yych = *++p; + if (yych == 'I') + goto yy446; + if (yych == 'i') + goto yy446; + goto yy341; + yy412: + yych = *++p; + if (yych == 'D') + goto yy447; + if (yych == 'd') + goto yy447; + goto yy341; + yy413: + yych = *++p; + if (yych == 'E') + goto yy448; + if (yych == 'e') + goto yy448; + goto yy341; + yy414: + yych = *++p; + if (yych == 'C') + goto yy449; + if (yych == 'c') + goto yy449; + goto yy341; + yy415: + yych = *++p; + if (yych == 'Y') + goto yy375; + if (yych == 'y') + goto yy375; + goto yy341; + yy416: + yych = *++p; + if (yych == 'T') + goto yy450; + if (yych == 't') + goto yy450; + goto yy341; + yy417: + yych = *++p; + if (yych == 'T') + goto yy451; + if (yych == 't') + goto yy451; + goto yy341; + yy418: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= 'F') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'G') + goto yy452; + if (yych == 'g') + goto yy452; + goto yy341; + } + } + yy419: + yych = *++p; + if (yych == 'A') + goto yy453; + if (yych == 'a') + goto yy453; + goto yy341; + yy420: + yych = *++p; + if (yych == 'L') + goto yy454; + if (yych == 'l') + goto yy454; + goto yy341; + yy421: + yych = *++p; + if (yych == 'L') + goto yy455; + if (yych == 'l') + goto yy455; + goto yy341; + yy422: + yych = *++p; + if (yych <= 'U') { + if (yych == 'C') + goto yy456; + if (yych <= 'T') + goto yy341; + goto yy457; + } else { + if (yych <= 'c') { + if (yych <= 'b') + goto yy341; + goto yy456; + } else { + if (yych == 'u') + goto yy457; + goto yy341; + } + } + yy423: + yych = *++p; + if (yych == 'M') + goto yy375; + if (yych == 'm') + goto yy375; + goto yy341; + yy424: + yych = *++p; + if (yych == 'M') + goto yy458; + if (yych == 'm') + goto yy458; + goto yy341; + yy425: + yych = *++p; + if (yych == 'D') + goto yy459; + if (yych == 'd') + goto yy459; + goto yy341; + yy426: + yych = *++p; + if (yych == 'A') + goto yy460; + if (yych == 'a') + goto yy460; + goto yy341; + yy427: + yych = *++p; + if (yych == 'E') + goto yy461; + if (yych == 'e') + goto yy461; + goto yy341; + yy428: + yych = *++p; + if (yych == 'K') + goto yy375; + if (yych == 'k') + goto yy375; + goto yy341; + yy429: + yych = *++p; + if (yych == 'N') + goto yy375; + if (yych == 'n') + goto yy375; + goto yy341; + yy430: + yych = *++p; + if (yych == 'U') + goto yy462; + if (yych == 'u') + goto yy462; + goto yy341; + yy431: + yych = *++p; + if (yych == 'A') + goto yy375; + if (yych == 'a') + goto yy375; + goto yy341; + yy432: + yych = *++p; + if (yych == 'R') + goto yy463; + if (yych == 'r') + goto yy463; + goto yy341; + yy433: + yych = *++p; + if (yych <= 'I') { + if (yych == 'G') + goto yy452; + if (yych <= 'H') + goto yy341; + goto yy464; + } else { + if (yych <= 'g') { + if (yych <= 'f') + goto yy341; + goto yy452; + } else { + if (yych == 'i') + goto yy464; + goto yy341; + } + } + yy434: + yych = *++p; + if (yych == 'A') + goto yy423; + if (yych == 'a') + goto yy423; + goto yy341; + yy435: + yych = *++p; + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy465; + goto yy341; + } else { + if (yych <= ' ') + goto yy465; + if (yych == '>') + goto yy465; + goto yy341; + } + yy436: + yych = *++p; + if (yych == 'I') + goto yy467; + if (yych == 'i') + goto yy467; + goto yy341; + yy437: + yych = *++p; + if (yych == 'R') + goto yy468; + if (yych == 'r') + goto yy468; + goto yy341; + yy438: + yych = *++p; + if (yych == 'L') + goto yy395; + if (yych == 'l') + goto yy395; + goto yy341; + yy439: + yych = *++p; + if (yych == 'M') + goto yy469; + if (yych == 'm') + goto yy469; + goto yy341; + yy440: + yych = *++p; + if (yych == 'L') + goto yy447; + if (yych == 'l') + goto yy447; + goto yy341; + yy441: + yych = *++p; + if (yych == 'O') + goto yy470; + if (yych == 'o') + goto yy470; + goto yy341; + yy442: + yych = *++p; + if (yych == 'A') + goto yy471; + if (yych == 'a') + goto yy471; + goto yy341; + yy443: + yych = *++p; + if (yych == 'C') + goto yy428; + if (yych == 'c') + goto yy428; + goto yy341; + yy444: + yych = *++p; + if (yych == 'A') + goto yy472; + if (yych == 'a') + goto yy472; + goto yy341; + yy445: + yych = *++p; + if (yych == 'E') + goto yy473; + if (yych == 'e') + goto yy473; + goto yy341; + yy446: + yych = *++p; + if (yych == 'C') + goto yy440; + if (yych == 'c') + goto yy440; + goto yy341; + yy447: + yych = *++p; + if (yych == 'E') + goto yy375; + if (yych == 'e') + goto yy375; + goto yy341; + yy448: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= 'E') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'F') + goto yy474; + if (yych == 'f') + goto yy474; + goto yy341; + } + } + yy449: + yych = *++p; + if (yych == 'K') + goto yy475; + if (yych == 'k') + goto yy475; + goto yy341; + yy450: + yych = *++p; + if (yych == 'I') + goto yy464; + if (yych == 'i') + goto yy464; + goto yy341; + yy451: + yych = *++p; + if (yych == 'E') + goto yy476; + if (yych == 'e') + goto yy476; + goto yy341; + yy452: + yych = *++p; + if (yych == 'R') + goto yy477; + if (yych == 'r') + goto yy477; + goto yy341; + yy453: + yych = *++p; + if (yych == 'I') + goto yy478; + if (yych == 'i') + goto yy478; + goto yy341; + yy454: + yych = *++p; + if (yych == 'O') + goto yy479; + if (yych == 'o') + goto yy479; + goto yy341; + yy455: + yych = *++p; + if (yych == 'D') + goto yy480; + if (yych == 'd') + goto yy480; + goto yy341; + yy456: + yych = *++p; + if (yych == 'A') + goto yy372; + if (yych == 'a') + goto yy372; + goto yy341; + yy457: + yych = *++p; + if (yych == 'R') + goto yy447; + if (yych == 'r') + goto yy447; + goto yy341; + yy458: + yych = *++p; + if (yych == 'E') + goto yy481; + if (yych == 'e') + goto yy481; + goto yy341; + yy459: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= 'D') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'E') + goto yy476; + if (yych == 'e') + goto yy476; + goto yy341; + } + } + yy460: + yych = *++p; + if (yych == 'M') + goto yy447; + if (yych == 'm') + goto yy447; + goto yy341; + yy461: + yych = *++p; + if (yych == 'N') + goto yy471; + if (yych == 'n') + goto yy471; + goto yy341; + yy462: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= 'H') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'I') + goto yy482; + if (yych == 'i') + goto yy482; + goto yy341; + } + } + yy463: + yych = *++p; + if (yych == 'A') + goto yy483; + if (yych == 'a') + goto yy483; + goto yy341; + yy464: + yych = *++p; + if (yych == 'O') + goto yy429; + if (yych == 'o') + goto yy429; + goto yy341; + yy465: + ++p; + { return 1; } + yy467: + yych = *++p; + if (yych == 'P') + goto yy484; + if (yych == 'p') + goto yy484; + goto yy341; + yy468: + yych = *++p; + if (yych == 'C') + goto yy447; + if (yych == 'c') + goto yy447; + goto yy341; + yy469: + yych = *++p; + if (yych == 'A') + goto yy485; + if (yych == 'a') + goto yy485; + goto yy341; + yy470: + yych = *++p; + if (yych == 'T') + goto yy375; + if (yych == 't') + goto yy375; + goto yy341; + yy471: + yych = *++p; + if (yych == 'D') + goto yy375; + if (yych == 'd') + goto yy375; + goto yy341; + yy472: + yych = *++p; + if (yych == 'T') + goto yy486; + if (yych == 't') + goto yy486; + goto yy341; + yy473: + yych = *++p; + if (yych == 'S') + goto yy487; + if (yych == 's') + goto yy487; + goto yy341; + yy474: + yych = *++p; + if (yych == 'O') + goto yy488; + if (yych == 'o') + goto yy488; + goto yy341; + yy475: + yych = *++p; + if (yych == 'Q') + goto yy489; + if (yych == 'q') + goto yy489; + goto yy341; + yy476: + yych = *++p; + if (yych == 'R') + goto yy375; + if (yych == 'r') + goto yy375; + goto yy341; + yy477: + yych = *++p; + if (yych == 'O') + goto yy490; + if (yych == 'o') + goto yy490; + goto yy341; + yy478: + yych = *++p; + if (yych == 'L') + goto yy487; + if (yych == 'l') + goto yy487; + goto yy341; + yy479: + yych = *++p; + if (yych == 'G') + goto yy375; + if (yych == 'g') + goto yy375; + goto yy341; + yy480: + yych = *++p; + if (yych == 'S') + goto yy491; + if (yych == 's') + goto yy491; + goto yy341; + yy481: + yych = *++p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy341; + if (yych <= '\r') + goto yy391; + goto yy341; + } else { + if (yych <= ' ') + goto yy391; + if (yych <= '.') + goto yy341; + goto yy393; + } + } else { + if (yych <= 'R') { + if (yych == '>') + goto yy391; + goto yy341; + } else { + if (yych <= 'S') + goto yy491; + if (yych == 's') + goto yy491; + goto yy341; + } + } + yy482: + yych = *++p; + if (yych == 'T') + goto yy492; + if (yych == 't') + goto yy492; + goto yy341; + yy483: + yych = *++p; + if (yych == 'M') + goto yy493; + if (yych == 'm') + goto yy493; + goto yy341; + yy484: + yych = *++p; + if (yych == 'T') + goto yy435; + if (yych == 't') + goto yy435; + goto yy341; + yy485: + yych = *++p; + if (yych == 'R') + goto yy415; + if (yych == 'r') + goto yy415; + goto yy341; + yy486: + yych = *++p; + if (yych == 'A') + goto yy494; + if (yych == 'a') + goto yy494; + goto yy341; + yy487: + yych = *++p; + if (yych == 'S') + goto yy375; + if (yych == 's') + goto yy375; + goto yy341; + yy488: + yych = *++p; + if (yych == 'N') + goto yy470; + if (yych == 'n') + goto yy470; + goto yy341; + yy489: + yych = *++p; + if (yych == 'U') + goto yy495; + if (yych == 'u') + goto yy495; + goto yy341; + yy490: + yych = *++p; + if (yych == 'U') + goto yy496; + if (yych == 'u') + goto yy496; + goto yy341; + yy491: + yych = *++p; + if (yych == 'E') + goto yy470; + if (yych == 'e') + goto yy470; + goto yy341; + yy492: + yych = *++p; + if (yych == 'E') + goto yy423; + if (yych == 'e') + goto yy423; + goto yy341; + yy493: + yych = *++p; + if (yych == 'E') + goto yy487; + if (yych == 'e') + goto yy487; + goto yy341; + yy494: + yych = *++p; + if (yych == '[') + goto yy497; + goto yy341; + yy495: + yych = *++p; + if (yych == 'O') + goto yy499; + if (yych == 'o') + goto yy499; + goto yy341; + yy496: + yych = *++p; + if (yych == 'P') + goto yy375; + if (yych == 'p') + goto yy375; + goto yy341; + yy497: + ++p; + { return 5; } + yy499: + ++p; + if ((yych = *p) == 'T') + goto yy447; + if (yych == 't') + goto yy447; + goto yy341; + } +} + +// Try to match an HTML block tag start line of type 7, returning +// 7 if successful, 0 if not. +bufsize_t _scan_html_block_start_7(const unsigned char *p) { + const unsigned char *marker = NULL; + + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 210, 194, 198, 194, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 198, 224, 128, 224, 224, 224, 224, 64, 224, 224, + 224, 224, 224, 233, 232, 224, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 232, 224, 192, 192, 192, 224, 224, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, 224, 232, 192, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, + 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + yych = *p; + if (yych == '<') + goto yy504; + ++p; + yy503 : { return 0; } + yy504: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '@') { + if (yych != '/') + goto yy503; + } else { + if (yych <= 'Z') + goto yy507; + if (yych <= '`') + goto yy503; + if (yych <= 'z') + goto yy507; + goto yy503; + } + yych = *++p; + if (yych <= '@') + goto yy506; + if (yych <= 'Z') + goto yy509; + if (yych <= '`') + goto yy506; + if (yych <= 'z') + goto yy509; + yy506: + p = marker; + if (yyaccept == 0) { + goto yy503; + } else { + goto yy522; + } + yy507: + ++p; + yych = *p; + if (yybm[0 + yych] & 2) { + goto yy511; + } + if (yych <= '=') { + if (yych <= '.') { + if (yych == '-') + goto yy507; + goto yy506; + } else { + if (yych <= '/') + goto yy513; + if (yych <= '9') + goto yy507; + goto yy506; + } + } else { + if (yych <= 'Z') { + if (yych <= '>') + goto yy514; + if (yych <= '@') + goto yy506; + goto yy507; + } else { + if (yych <= '`') + goto yy506; + if (yych <= 'z') + goto yy507; + goto yy506; + } + } + yy509: + ++p; + yych = *p; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy506; + if (yych <= '\r') + goto yy516; + goto yy506; + } else { + if (yych <= ' ') + goto yy516; + if (yych == '-') + goto yy509; + goto yy506; + } + } else { + if (yych <= '@') { + if (yych <= '9') + goto yy509; + if (yych == '>') + goto yy514; + goto yy506; + } else { + if (yych <= 'Z') + goto yy509; + if (yych <= '`') + goto yy506; + if (yych <= 'z') + goto yy509; + goto yy506; + } + } + yy511: + ++p; + yych = *p; + if (yybm[0 + yych] & 2) { + goto yy511; + } + if (yych <= '>') { + if (yych <= '9') { + if (yych != '/') + goto yy506; + } else { + if (yych <= ':') + goto yy518; + if (yych <= '=') + goto yy506; + goto yy514; + } + } else { + if (yych <= '^') { + if (yych <= '@') + goto yy506; + if (yych <= 'Z') + goto yy518; + goto yy506; + } else { + if (yych == '`') + goto yy506; + if (yych <= 'z') + goto yy518; + goto yy506; + } + } + yy513: + yych = *++p; + if (yych != '>') + goto yy506; + yy514: + ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy514; + } + if (yych <= 0x08) + goto yy506; + if (yych <= '\n') + goto yy520; + if (yych <= '\v') + goto yy506; + if (yych <= '\r') + goto yy523; + goto yy506; + yy516: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych <= 0x08) + goto yy506; + if (yych <= '\r') + goto yy516; + goto yy506; + } else { + if (yych <= ' ') + goto yy516; + if (yych == '>') + goto yy514; + goto yy506; + } + yy518: + ++p; + yych = *p; + if (yybm[0 + yych] & 8) { + goto yy518; + } + if (yych <= ',') { + if (yych <= '\r') { + if (yych <= 0x08) + goto yy506; + goto yy524; + } else { + if (yych == ' ') + goto yy524; + goto yy506; + } + } else { + if (yych <= '<') { + if (yych <= '/') + goto yy513; + goto yy506; + } else { + if (yych <= '=') + goto yy526; + if (yych <= '>') + goto yy514; + goto yy506; + } + } + yy520: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 4) { + goto yy514; + } + if (yych <= 0x08) + goto yy522; + if (yych <= '\n') + goto yy520; + if (yych <= '\v') + goto yy522; + if (yych <= '\r') + goto yy523; + yy522 : { return 7; } + yy523: + yych = *++p; + goto yy522; + yy524: + ++p; + yych = *p; + if (yych <= '<') { + if (yych <= ' ') { + if (yych <= 0x08) + goto yy506; + if (yych <= '\r') + goto yy524; + if (yych <= 0x1F) + goto yy506; + goto yy524; + } else { + if (yych <= '/') { + if (yych <= '.') + goto yy506; + goto yy513; + } else { + if (yych == ':') + goto yy518; + goto yy506; + } + } + } else { + if (yych <= 'Z') { + if (yych <= '=') + goto yy526; + if (yych <= '>') + goto yy514; + if (yych <= '@') + goto yy506; + goto yy518; + } else { + if (yych <= '_') { + if (yych <= '^') + goto yy506; + goto yy518; + } else { + if (yych <= '`') + goto yy506; + if (yych <= 'z') + goto yy518; + goto yy506; + } + } + } + yy526: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy527; + } + if (yych <= 0xE0) { + if (yych <= '"') { + if (yych <= 0x00) + goto yy506; + if (yych <= ' ') + goto yy529; + goto yy530; + } else { + if (yych <= '\'') + goto yy532; + if (yych <= 0xC1) + goto yy506; + if (yych <= 0xDF) + goto yy534; + goto yy535; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy537; + goto yy536; + } else { + if (yych <= 0xF0) + goto yy538; + if (yych <= 0xF3) + goto yy539; + if (yych <= 0xF4) + goto yy540; + goto yy506; + } + } + yy527: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy527; + } + if (yych <= 0xE0) { + if (yych <= '=') { + if (yych <= 0x00) + goto yy506; + if (yych <= ' ') + goto yy541; + goto yy506; + } else { + if (yych <= '>') + goto yy514; + if (yych <= 0xC1) + goto yy506; + if (yych <= 0xDF) + goto yy534; + goto yy535; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy537; + goto yy536; + } else { + if (yych <= 0xF0) + goto yy538; + if (yych <= 0xF3) + goto yy539; + if (yych <= 0xF4) + goto yy540; + goto yy506; + } + } + yy529: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy527; + } + if (yych <= 0xDF) { + if (yych <= '\'') { + if (yych <= 0x00) + goto yy506; + if (yych <= ' ') + goto yy543; + if (yych >= '#') + goto yy532; + } else { + if (yych == '>') + goto yy514; + if (yych <= 0xC1) + goto yy506; + goto yy534; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy535; + if (yych == 0xED) + goto yy537; + goto yy536; + } else { + if (yych <= 0xF0) + goto yy538; + if (yych <= 0xF3) + goto yy539; + if (yych <= 0xF4) + goto yy540; + goto yy506; + } + } + yy530: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy530; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy506; + if (yych <= '"') + goto yy545; + goto yy506; + } else { + if (yych <= 0xDF) + goto yy546; + if (yych <= 0xE0) + goto yy547; + goto yy548; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy549; + if (yych <= 0xEF) + goto yy548; + goto yy550; + } else { + if (yych <= 0xF3) + goto yy551; + if (yych <= 0xF4) + goto yy552; + goto yy506; + } + } + yy532: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy532; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy506; + if (yych <= '\'') + goto yy545; + goto yy506; + } else { + if (yych <= 0xDF) + goto yy553; + if (yych <= 0xE0) + goto yy554; + goto yy555; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy556; + if (yych <= 0xEF) + goto yy555; + goto yy557; + } else { + if (yych <= 0xF3) + goto yy558; + if (yych <= 0xF4) + goto yy559; + goto yy506; + } + } + yy534: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0xBF) + goto yy527; + goto yy506; + yy535: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy506; + if (yych <= 0xBF) + goto yy534; + goto yy506; + yy536: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0xBF) + goto yy534; + goto yy506; + yy537: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0x9F) + goto yy534; + goto yy506; + yy538: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy506; + if (yych <= 0xBF) + goto yy536; + goto yy506; + yy539: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0xBF) + goto yy536; + goto yy506; + yy540: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0x8F) + goto yy536; + goto yy506; + yy541: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy506; + if (yych <= 0x08) + goto yy527; + goto yy541; + } else { + if (yych == ' ') + goto yy541; + if (yych <= '!') + goto yy527; + goto yy506; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy506; + if (yych <= '9') + goto yy527; + goto yy560; + } else { + if (yych <= ';') + goto yy527; + if (yych <= '=') + goto yy506; + if (yych <= '>') + goto yy514; + goto yy527; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy560; + if (yych <= '^') + goto yy527; + if (yych <= '_') + goto yy560; + goto yy506; + } else { + if (yych <= 'z') + goto yy560; + if (yych <= 0x7F) + goto yy527; + if (yych <= 0xC1) + goto yy506; + goto yy534; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy535; + if (yych == 0xED) + goto yy537; + goto yy536; + } else { + if (yych <= 0xF0) + goto yy538; + if (yych <= 0xF3) + goto yy539; + if (yych <= 0xF4) + goto yy540; + goto yy506; + } + } + } + yy543: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '"') { + if (yych <= '\r') { + if (yych <= 0x00) + goto yy506; + if (yych <= 0x08) + goto yy527; + goto yy543; + } else { + if (yych == ' ') + goto yy543; + if (yych <= '!') + goto yy527; + goto yy530; + } + } else { + if (yych <= ':') { + if (yych == '\'') + goto yy532; + if (yych <= '9') + goto yy527; + goto yy560; + } else { + if (yych <= ';') + goto yy527; + if (yych <= '=') + goto yy506; + if (yych <= '>') + goto yy514; + goto yy527; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy560; + if (yych <= '^') + goto yy527; + if (yych <= '_') + goto yy560; + goto yy506; + } else { + if (yych <= 'z') + goto yy560; + if (yych <= 0x7F) + goto yy527; + if (yych <= 0xC1) + goto yy506; + goto yy534; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy535; + if (yych == 0xED) + goto yy537; + goto yy536; + } else { + if (yych <= 0xF0) + goto yy538; + if (yych <= 0xF3) + goto yy539; + if (yych <= 0xF4) + goto yy540; + goto yy506; + } + } + } + yy545: + ++p; + yych = *p; + if (yybm[0 + yych] & 2) { + goto yy511; + } + if (yych == '/') + goto yy513; + if (yych == '>') + goto yy514; + goto yy506; + yy546: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0xBF) + goto yy530; + goto yy506; + yy547: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy506; + if (yych <= 0xBF) + goto yy546; + goto yy506; + yy548: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0xBF) + goto yy546; + goto yy506; + yy549: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0x9F) + goto yy546; + goto yy506; + yy550: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy506; + if (yych <= 0xBF) + goto yy548; + goto yy506; + yy551: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0xBF) + goto yy548; + goto yy506; + yy552: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0x8F) + goto yy548; + goto yy506; + yy553: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0xBF) + goto yy532; + goto yy506; + yy554: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy506; + if (yych <= 0xBF) + goto yy553; + goto yy506; + yy555: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0xBF) + goto yy553; + goto yy506; + yy556: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0x9F) + goto yy553; + goto yy506; + yy557: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy506; + if (yych <= 0xBF) + goto yy555; + goto yy506; + yy558: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0xBF) + goto yy555; + goto yy506; + yy559: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy506; + if (yych <= 0x8F) + goto yy555; + goto yy506; + yy560: + ++p; + yych = *p; + if (yych <= '>') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy506; + if (yych <= 0x08) + goto yy527; + if (yych >= 0x0E) + goto yy527; + } else { + if (yych <= ' ') + goto yy562; + if (yych == '"') + goto yy506; + goto yy527; + } + } else { + if (yych <= '/') { + if (yych <= '\'') + goto yy506; + if (yych <= ',') + goto yy527; + if (yych <= '.') + goto yy560; + goto yy527; + } else { + if (yych <= ';') { + if (yych <= ':') + goto yy560; + goto yy527; + } else { + if (yych <= '<') + goto yy506; + if (yych <= '=') + goto yy526; + goto yy514; + } + } + } + } else { + if (yych <= 0xC1) { + if (yych <= '_') { + if (yych <= '@') + goto yy527; + if (yych <= 'Z') + goto yy560; + if (yych <= '^') + goto yy527; + goto yy560; + } else { + if (yych <= '`') + goto yy506; + if (yych <= 'z') + goto yy560; + if (yych <= 0x7F) + goto yy527; + goto yy506; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy534; + if (yych <= 0xE0) + goto yy535; + if (yych <= 0xEC) + goto yy536; + goto yy537; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy536; + goto yy538; + } else { + if (yych <= 0xF3) + goto yy539; + if (yych <= 0xF4) + goto yy540; + goto yy506; + } + } + } + } + yy562: + ++p; + yych = *p; + if (yych <= '@') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= 0x00) + goto yy506; + if (yych <= 0x08) + goto yy527; + if (yych <= '\r') + goto yy562; + goto yy527; + } else { + if (yych <= ' ') + goto yy562; + if (yych == '"') + goto yy506; + goto yy527; + } + } else { + if (yych <= ';') { + if (yych <= '\'') + goto yy506; + if (yych == ':') + goto yy560; + goto yy527; + } else { + if (yych <= '<') + goto yy506; + if (yych <= '=') + goto yy526; + if (yych <= '>') + goto yy514; + goto yy527; + } + } + } else { + if (yych <= 0xDF) { + if (yych <= '`') { + if (yych <= 'Z') + goto yy560; + if (yych <= '^') + goto yy527; + if (yych <= '_') + goto yy560; + goto yy506; + } else { + if (yych <= 'z') + goto yy560; + if (yych <= 0x7F) + goto yy527; + if (yych <= 0xC1) + goto yy506; + goto yy534; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy535; + if (yych == 0xED) + goto yy537; + goto yy536; + } else { + if (yych <= 0xF0) + goto yy538; + if (yych <= 0xF3) + goto yy539; + if (yych <= 0xF4) + goto yy540; + goto yy506; + } + } + } + } +} + +// Try to match an HTML block end line of type 1 +bufsize_t _scan_html_block_end_1(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + yych = *p; + if (yych <= 0xDF) { + if (yych <= ';') { + if (yych == '\n') + goto yy568; + } else { + if (yych <= '<') + goto yy569; + if (yych <= 0x7F) + goto yy566; + if (yych <= 0xC1) + goto yy568; + goto yy570; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy571; + if (yych == 0xED) + goto yy573; + goto yy572; + } else { + if (yych <= 0xF0) + goto yy574; + if (yych <= 0xF3) + goto yy575; + if (yych <= 0xF4) + goto yy576; + goto yy568; + } + } + yy566: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych != '\n') + goto yy578; + } else { + if (yych <= 0xC1) + goto yy567; + if (yych <= 0xF4) + goto yy578; + } + yy567 : { return 0; } + yy568: + yych = *++p; + goto yy567; + yy569: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '/') { + if (yych == '\n') + goto yy567; + if (yych <= '.') + goto yy578; + goto yy589; + } else { + if (yych <= 0x7F) + goto yy578; + if (yych <= 0xC1) + goto yy567; + if (yych <= 0xF4) + goto yy578; + goto yy567; + } + yy570: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy567; + if (yych <= 0xBF) + goto yy577; + goto yy567; + yy571: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x9F) + goto yy567; + if (yych <= 0xBF) + goto yy582; + goto yy567; + yy572: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy567; + if (yych <= 0xBF) + goto yy582; + goto yy567; + yy573: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy567; + if (yych <= 0x9F) + goto yy582; + goto yy567; + yy574: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x8F) + goto yy567; + if (yych <= 0xBF) + goto yy584; + goto yy567; + yy575: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy567; + if (yych <= 0xBF) + goto yy584; + goto yy567; + yy576: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy567; + if (yych <= 0x8F) + goto yy584; + goto yy567; + yy577: + ++p; + yych = *p; + yy578: + if (yybm[0 + yych] & 64) { + goto yy577; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy579; + if (yych <= '<') + goto yy580; + } else { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + goto yy584; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy585; + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + } + } + yy579: + p = marker; + if (yyaccept == 0) { + goto yy567; + } else { + goto yy599; + } + yy580: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xDF) { + if (yych <= '.') { + if (yych == '\n') + goto yy579; + goto yy577; + } else { + if (yych <= '/') + goto yy589; + if (yych <= 0x7F) + goto yy577; + if (yych <= 0xC1) + goto yy579; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy583; + if (yych == 0xED) + goto yy585; + goto yy584; + } else { + if (yych <= 0xF0) + goto yy586; + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + yy582: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy579; + if (yych <= 0xBF) + goto yy577; + goto yy579; + yy583: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy579; + if (yych <= 0xBF) + goto yy582; + goto yy579; + yy584: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy579; + if (yych <= 0xBF) + goto yy582; + goto yy579; + yy585: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy579; + if (yych <= 0x9F) + goto yy582; + goto yy579; + yy586: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy579; + if (yych <= 0xBF) + goto yy584; + goto yy579; + yy587: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy579; + if (yych <= 0xBF) + goto yy584; + goto yy579; + yy588: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy579; + if (yych <= 0x8F) + goto yy584; + goto yy579; + yy589: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 's') { + if (yych <= 'R') { + if (yych <= '\n') { + if (yych <= '\t') + goto yy577; + goto yy579; + } else { + if (yych != 'P') + goto yy577; + } + } else { + if (yych <= 'o') { + if (yych <= 'S') + goto yy591; + goto yy577; + } else { + if (yych <= 'p') + goto yy590; + if (yych <= 'r') + goto yy577; + goto yy591; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy577; + goto yy579; + } else { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + goto yy584; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy585; + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + } + yy590: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xC1) { + if (yych <= 'R') { + if (yych == '\n') + goto yy579; + if (yych <= 'Q') + goto yy577; + goto yy592; + } else { + if (yych == 'r') + goto yy592; + if (yych <= 0x7F) + goto yy577; + goto yy579; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + if (yych <= 0xEC) + goto yy584; + goto yy585; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + } + yy591: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 't') { + if (yych <= 'S') { + if (yych <= '\n') { + if (yych <= '\t') + goto yy577; + goto yy579; + } else { + if (yych == 'C') + goto yy593; + goto yy577; + } + } else { + if (yych <= 'b') { + if (yych <= 'T') + goto yy594; + goto yy577; + } else { + if (yych <= 'c') + goto yy593; + if (yych <= 's') + goto yy577; + goto yy594; + } + } + } else { + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x7F) + goto yy577; + goto yy579; + } else { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + goto yy584; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy585; + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + } + yy592: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xC1) { + if (yych <= 'E') { + if (yych == '\n') + goto yy579; + if (yych <= 'D') + goto yy577; + goto yy595; + } else { + if (yych == 'e') + goto yy595; + if (yych <= 0x7F) + goto yy577; + goto yy579; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + if (yych <= 0xEC) + goto yy584; + goto yy585; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + } + yy593: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xC1) { + if (yych <= 'R') { + if (yych == '\n') + goto yy579; + if (yych <= 'Q') + goto yy577; + goto yy596; + } else { + if (yych == 'r') + goto yy596; + if (yych <= 0x7F) + goto yy577; + goto yy579; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + if (yych <= 0xEC) + goto yy584; + goto yy585; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + } + yy594: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xC1) { + if (yych <= 'Y') { + if (yych == '\n') + goto yy579; + if (yych <= 'X') + goto yy577; + goto yy597; + } else { + if (yych == 'y') + goto yy597; + if (yych <= 0x7F) + goto yy577; + goto yy579; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + if (yych <= 0xEC) + goto yy584; + goto yy585; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + } + yy595: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy579; + goto yy577; + } else { + if (yych <= '>') + goto yy598; + if (yych <= 0x7F) + goto yy577; + if (yych <= 0xC1) + goto yy579; + goto yy582; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy583; + if (yych == 0xED) + goto yy585; + goto yy584; + } else { + if (yych <= 0xF0) + goto yy586; + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + yy596: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xC1) { + if (yych <= 'I') { + if (yych == '\n') + goto yy579; + if (yych <= 'H') + goto yy577; + goto yy600; + } else { + if (yych == 'i') + goto yy600; + if (yych <= 0x7F) + goto yy577; + goto yy579; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + if (yych <= 0xEC) + goto yy584; + goto yy585; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + } + yy597: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xC1) { + if (yych <= 'L') { + if (yych == '\n') + goto yy579; + if (yych <= 'K') + goto yy577; + goto yy592; + } else { + if (yych == 'l') + goto yy592; + if (yych <= 0x7F) + goto yy577; + goto yy579; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + if (yych <= 0xEC) + goto yy584; + goto yy585; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + } + yy598: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy577; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy599; + if (yych <= '<') + goto yy580; + } else { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + goto yy584; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy585; + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + } + } + yy599 : { return (bufsize_t)(p - start); } + yy600: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xC1) { + if (yych <= 'P') { + if (yych == '\n') + goto yy579; + if (yych <= 'O') + goto yy577; + } else { + if (yych == 'p') + goto yy601; + if (yych <= 0x7F) + goto yy577; + goto yy579; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + if (yych <= 0xEC) + goto yy584; + goto yy585; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + } + yy601: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy580; + } + if (yych <= 0xC1) { + if (yych <= 'T') { + if (yych == '\n') + goto yy579; + if (yych <= 'S') + goto yy577; + goto yy595; + } else { + if (yych == 't') + goto yy595; + if (yych <= 0x7F) + goto yy577; + goto yy579; + } + } else { + if (yych <= 0xED) { + if (yych <= 0xDF) + goto yy582; + if (yych <= 0xE0) + goto yy583; + if (yych <= 0xEC) + goto yy584; + goto yy585; + } else { + if (yych <= 0xF0) { + if (yych <= 0xEF) + goto yy584; + goto yy586; + } else { + if (yych <= 0xF3) + goto yy587; + if (yych <= 0xF4) + goto yy588; + goto yy579; + } + } + } + } +} + +// Try to match an HTML block end line of type 2 +bufsize_t _scan_html_block_end_2(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + yych = *p; + if (yych <= 0xDF) { + if (yych <= ',') { + if (yych == '\n') + goto yy606; + } else { + if (yych <= '-') + goto yy607; + if (yych <= 0x7F) + goto yy604; + if (yych <= 0xC1) + goto yy606; + goto yy608; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy609; + if (yych == 0xED) + goto yy611; + goto yy610; + } else { + if (yych <= 0xF0) + goto yy612; + if (yych <= 0xF3) + goto yy613; + if (yych <= 0xF4) + goto yy614; + goto yy606; + } + } + yy604: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych != '\n') + goto yy616; + } else { + if (yych <= 0xC1) + goto yy605; + if (yych <= 0xF4) + goto yy616; + } + yy605 : { return 0; } + yy606: + yych = *++p; + goto yy605; + yy607: + yyaccept = 0; + yych = *(marker = ++p); + if (yybm[0 + yych] & 128) { + goto yy626; + } + if (yych <= 0x7F) { + if (yych == '\n') + goto yy605; + goto yy616; + } else { + if (yych <= 0xC1) + goto yy605; + if (yych <= 0xF4) + goto yy616; + goto yy605; + } + yy608: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy605; + if (yych <= 0xBF) + goto yy615; + goto yy605; + yy609: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x9F) + goto yy605; + if (yych <= 0xBF) + goto yy619; + goto yy605; + yy610: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy605; + if (yych <= 0xBF) + goto yy619; + goto yy605; + yy611: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy605; + if (yych <= 0x9F) + goto yy619; + goto yy605; + yy612: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x8F) + goto yy605; + if (yych <= 0xBF) + goto yy621; + goto yy605; + yy613: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy605; + if (yych <= 0xBF) + goto yy621; + goto yy605; + yy614: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy605; + if (yych <= 0x8F) + goto yy621; + goto yy605; + yy615: + ++p; + yych = *p; + yy616: + if (yybm[0 + yych] & 64) { + goto yy615; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy617; + if (yych <= '-') + goto yy618; + } else { + if (yych <= 0xDF) + goto yy619; + if (yych <= 0xE0) + goto yy620; + goto yy621; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy622; + if (yych <= 0xEF) + goto yy621; + goto yy623; + } else { + if (yych <= 0xF3) + goto yy624; + if (yych <= 0xF4) + goto yy625; + } + } + yy617: + p = marker; + if (yyaccept == 0) { + goto yy605; + } else { + goto yy629; + } + yy618: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy615; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy617; + if (yych <= '-') + goto yy626; + goto yy617; + } else { + if (yych <= 0xDF) + goto yy619; + if (yych <= 0xE0) + goto yy620; + goto yy621; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy622; + if (yych <= 0xEF) + goto yy621; + goto yy623; + } else { + if (yych <= 0xF3) + goto yy624; + if (yych <= 0xF4) + goto yy625; + goto yy617; + } + } + yy619: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy617; + if (yych <= 0xBF) + goto yy615; + goto yy617; + yy620: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy617; + if (yych <= 0xBF) + goto yy619; + goto yy617; + yy621: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy617; + if (yych <= 0xBF) + goto yy619; + goto yy617; + yy622: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy617; + if (yych <= 0x9F) + goto yy619; + goto yy617; + yy623: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy617; + if (yych <= 0xBF) + goto yy621; + goto yy617; + yy624: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy617; + if (yych <= 0xBF) + goto yy621; + goto yy617; + yy625: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy617; + if (yych <= 0x8F) + goto yy621; + goto yy617; + yy626: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy626; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy617; + goto yy615; + } else { + if (yych <= '>') + goto yy628; + if (yych <= 0x7F) + goto yy615; + if (yych <= 0xC1) + goto yy617; + goto yy619; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy620; + if (yych == 0xED) + goto yy622; + goto yy621; + } else { + if (yych <= 0xF0) + goto yy623; + if (yych <= 0xF3) + goto yy624; + if (yych <= 0xF4) + goto yy625; + goto yy617; + } + } + yy628: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy615; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy629; + if (yych <= '-') + goto yy618; + } else { + if (yych <= 0xDF) + goto yy619; + if (yych <= 0xE0) + goto yy620; + goto yy621; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy622; + if (yych <= 0xEF) + goto yy621; + goto yy623; + } else { + if (yych <= 0xF3) + goto yy624; + if (yych <= 0xF4) + goto yy625; + } + } + yy629 : { return (bufsize_t)(p - start); } + } +} + +// Try to match an HTML block end line of type 3 +bufsize_t _scan_html_block_end_3(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + yych = *p; + if (yych <= 0xDF) { + if (yych <= '>') { + if (yych == '\n') + goto yy634; + } else { + if (yych <= '?') + goto yy635; + if (yych <= 0x7F) + goto yy632; + if (yych <= 0xC1) + goto yy634; + goto yy636; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy637; + if (yych == 0xED) + goto yy639; + goto yy638; + } else { + if (yych <= 0xF0) + goto yy640; + if (yych <= 0xF3) + goto yy641; + if (yych <= 0xF4) + goto yy642; + goto yy634; + } + } + yy632: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych != '\n') + goto yy644; + } else { + if (yych <= 0xC1) + goto yy633; + if (yych <= 0xF4) + goto yy644; + } + yy633 : { return 0; } + yy634: + yych = *++p; + goto yy633; + yy635: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= '>') { + if (yych == '\n') + goto yy633; + if (yych <= '=') + goto yy644; + goto yy655; + } else { + if (yych <= 0x7F) + goto yy644; + if (yych <= 0xC1) + goto yy633; + if (yych <= 0xF4) + goto yy644; + goto yy633; + } + yy636: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy633; + if (yych <= 0xBF) + goto yy643; + goto yy633; + yy637: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x9F) + goto yy633; + if (yych <= 0xBF) + goto yy648; + goto yy633; + yy638: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy633; + if (yych <= 0xBF) + goto yy648; + goto yy633; + yy639: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy633; + if (yych <= 0x9F) + goto yy648; + goto yy633; + yy640: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x8F) + goto yy633; + if (yych <= 0xBF) + goto yy650; + goto yy633; + yy641: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy633; + if (yych <= 0xBF) + goto yy650; + goto yy633; + yy642: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy633; + if (yych <= 0x8F) + goto yy650; + goto yy633; + yy643: + ++p; + yych = *p; + yy644: + if (yybm[0 + yych] & 64) { + goto yy643; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy645; + if (yych <= '?') + goto yy646; + } else { + if (yych <= 0xDF) + goto yy648; + if (yych <= 0xE0) + goto yy649; + goto yy650; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy651; + if (yych <= 0xEF) + goto yy650; + goto yy652; + } else { + if (yych <= 0xF3) + goto yy653; + if (yych <= 0xF4) + goto yy654; + } + } + yy645: + p = marker; + if (yyaccept == 0) { + goto yy633; + } else { + goto yy656; + } + yy646: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy646; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy645; + goto yy643; + } else { + if (yych <= '>') + goto yy655; + if (yych <= 0x7F) + goto yy643; + if (yych <= 0xC1) + goto yy645; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy649; + if (yych == 0xED) + goto yy651; + goto yy650; + } else { + if (yych <= 0xF0) + goto yy652; + if (yych <= 0xF3) + goto yy653; + if (yych <= 0xF4) + goto yy654; + goto yy645; + } + } + yy648: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy645; + if (yych <= 0xBF) + goto yy643; + goto yy645; + yy649: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy645; + if (yych <= 0xBF) + goto yy648; + goto yy645; + yy650: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy645; + if (yych <= 0xBF) + goto yy648; + goto yy645; + yy651: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy645; + if (yych <= 0x9F) + goto yy648; + goto yy645; + yy652: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy645; + if (yych <= 0xBF) + goto yy650; + goto yy645; + yy653: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy645; + if (yych <= 0xBF) + goto yy650; + goto yy645; + yy654: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy645; + if (yych <= 0x8F) + goto yy650; + goto yy645; + yy655: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy643; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy656; + if (yych <= '?') + goto yy646; + } else { + if (yych <= 0xDF) + goto yy648; + if (yych <= 0xE0) + goto yy649; + goto yy650; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy651; + if (yych <= 0xEF) + goto yy650; + goto yy652; + } else { + if (yych <= 0xF3) + goto yy653; + if (yych <= 0xF4) + goto yy654; + } + } + yy656 : { return (bufsize_t)(p - start); } + } +} + +// Try to match an HTML block end line of type 4 +bufsize_t _scan_html_block_end_4(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy662; + } + if (yych <= 0xE0) { + if (yych <= 0x7F) { + if (yych == '\n') + goto yy661; + } else { + if (yych <= 0xC1) + goto yy661; + if (yych <= 0xDF) + goto yy665; + goto yy666; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy668; + goto yy667; + } else { + if (yych <= 0xF0) + goto yy669; + if (yych <= 0xF3) + goto yy670; + if (yych <= 0xF4) + goto yy671; + goto yy661; + } + } + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych != '\n') + goto yy673; + } else { + if (yych <= 0xC1) + goto yy660; + if (yych <= 0xF4) + goto yy673; + } + yy660 : { return 0; } + yy661: + yych = *++p; + goto yy660; + yy662: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy672; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy664; + if (yych <= '>') + goto yy662; + } else { + if (yych <= 0xDF) + goto yy675; + if (yych <= 0xE0) + goto yy676; + goto yy677; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy678; + if (yych <= 0xEF) + goto yy677; + goto yy679; + } else { + if (yych <= 0xF3) + goto yy680; + if (yych <= 0xF4) + goto yy681; + } + } + yy664 : { return (bufsize_t)(p - start); } + yy665: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy660; + if (yych <= 0xBF) + goto yy672; + goto yy660; + yy666: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x9F) + goto yy660; + if (yych <= 0xBF) + goto yy675; + goto yy660; + yy667: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy660; + if (yych <= 0xBF) + goto yy675; + goto yy660; + yy668: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy660; + if (yych <= 0x9F) + goto yy675; + goto yy660; + yy669: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x8F) + goto yy660; + if (yych <= 0xBF) + goto yy677; + goto yy660; + yy670: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy660; + if (yych <= 0xBF) + goto yy677; + goto yy660; + yy671: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy660; + if (yych <= 0x8F) + goto yy677; + goto yy660; + yy672: + ++p; + yych = *p; + yy673: + if (yybm[0 + yych] & 128) { + goto yy672; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy674; + if (yych <= '>') + goto yy662; + } else { + if (yych <= 0xDF) + goto yy675; + if (yych <= 0xE0) + goto yy676; + goto yy677; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy678; + if (yych <= 0xEF) + goto yy677; + goto yy679; + } else { + if (yych <= 0xF3) + goto yy680; + if (yych <= 0xF4) + goto yy681; + } + } + yy674: + p = marker; + if (yyaccept == 0) { + goto yy660; + } else { + goto yy664; + } + yy675: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy674; + if (yych <= 0xBF) + goto yy672; + goto yy674; + yy676: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy674; + if (yych <= 0xBF) + goto yy675; + goto yy674; + yy677: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy674; + if (yych <= 0xBF) + goto yy675; + goto yy674; + yy678: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy674; + if (yych <= 0x9F) + goto yy675; + goto yy674; + yy679: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy674; + if (yych <= 0xBF) + goto yy677; + goto yy674; + yy680: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy674; + if (yych <= 0xBF) + goto yy677; + goto yy674; + yy681: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy674; + if (yych <= 0x8F) + goto yy677; + goto yy674; + } +} + +// Try to match an HTML block end line of type 5 +bufsize_t _scan_html_block_end_5(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + yych = *p; + if (yych <= 0xDF) { + if (yych <= '\\') { + if (yych == '\n') + goto yy686; + } else { + if (yych <= ']') + goto yy687; + if (yych <= 0x7F) + goto yy684; + if (yych <= 0xC1) + goto yy686; + goto yy688; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy689; + if (yych == 0xED) + goto yy691; + goto yy690; + } else { + if (yych <= 0xF0) + goto yy692; + if (yych <= 0xF3) + goto yy693; + if (yych <= 0xF4) + goto yy694; + goto yy686; + } + } + yy684: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) { + if (yych != '\n') + goto yy696; + } else { + if (yych <= 0xC1) + goto yy685; + if (yych <= 0xF4) + goto yy696; + } + yy685 : { return 0; } + yy686: + yych = *++p; + goto yy685; + yy687: + yyaccept = 0; + yych = *(marker = ++p); + if (yybm[0 + yych] & 128) { + goto yy706; + } + if (yych <= 0x7F) { + if (yych == '\n') + goto yy685; + goto yy696; + } else { + if (yych <= 0xC1) + goto yy685; + if (yych <= 0xF4) + goto yy696; + goto yy685; + } + yy688: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy685; + if (yych <= 0xBF) + goto yy695; + goto yy685; + yy689: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x9F) + goto yy685; + if (yych <= 0xBF) + goto yy699; + goto yy685; + yy690: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy685; + if (yych <= 0xBF) + goto yy699; + goto yy685; + yy691: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy685; + if (yych <= 0x9F) + goto yy699; + goto yy685; + yy692: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x8F) + goto yy685; + if (yych <= 0xBF) + goto yy701; + goto yy685; + yy693: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy685; + if (yych <= 0xBF) + goto yy701; + goto yy685; + yy694: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x7F) + goto yy685; + if (yych <= 0x8F) + goto yy701; + goto yy685; + yy695: + ++p; + yych = *p; + yy696: + if (yybm[0 + yych] & 64) { + goto yy695; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy697; + if (yych <= ']') + goto yy698; + } else { + if (yych <= 0xDF) + goto yy699; + if (yych <= 0xE0) + goto yy700; + goto yy701; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy702; + if (yych <= 0xEF) + goto yy701; + goto yy703; + } else { + if (yych <= 0xF3) + goto yy704; + if (yych <= 0xF4) + goto yy705; + } + } + yy697: + p = marker; + if (yyaccept == 0) { + goto yy685; + } else { + goto yy709; + } + yy698: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy695; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy697; + if (yych <= ']') + goto yy706; + goto yy697; + } else { + if (yych <= 0xDF) + goto yy699; + if (yych <= 0xE0) + goto yy700; + goto yy701; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy702; + if (yych <= 0xEF) + goto yy701; + goto yy703; + } else { + if (yych <= 0xF3) + goto yy704; + if (yych <= 0xF4) + goto yy705; + goto yy697; + } + } + yy699: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy697; + if (yych <= 0xBF) + goto yy695; + goto yy697; + yy700: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy697; + if (yych <= 0xBF) + goto yy699; + goto yy697; + yy701: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy697; + if (yych <= 0xBF) + goto yy699; + goto yy697; + yy702: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy697; + if (yych <= 0x9F) + goto yy699; + goto yy697; + yy703: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy697; + if (yych <= 0xBF) + goto yy701; + goto yy697; + yy704: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy697; + if (yych <= 0xBF) + goto yy701; + goto yy697; + yy705: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy697; + if (yych <= 0x8F) + goto yy701; + goto yy697; + yy706: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy706; + } + if (yych <= 0xDF) { + if (yych <= '=') { + if (yych == '\n') + goto yy697; + goto yy695; + } else { + if (yych <= '>') + goto yy708; + if (yych <= 0x7F) + goto yy695; + if (yych <= 0xC1) + goto yy697; + goto yy699; + } + } else { + if (yych <= 0xEF) { + if (yych <= 0xE0) + goto yy700; + if (yych == 0xED) + goto yy702; + goto yy701; + } else { + if (yych <= 0xF0) + goto yy703; + if (yych <= 0xF3) + goto yy704; + if (yych <= 0xF4) + goto yy705; + goto yy697; + } + } + yy708: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy695; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= '\n') + goto yy709; + if (yych <= ']') + goto yy698; + } else { + if (yych <= 0xDF) + goto yy699; + if (yych <= 0xE0) + goto yy700; + goto yy701; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy702; + if (yych <= 0xEF) + goto yy701; + goto yy703; + } else { + if (yych <= 0xF3) + goto yy704; + if (yych <= 0xF4) + goto yy705; + } + } + yy709 : { return (bufsize_t)(p - start); } + } +} + +// Try to match a link title (in single quotes, in double quotes, or +// in parentheses), returning number of chars matched. Allow one +// level of internal nesting (quotes within quotes). +bufsize_t _scan_link_title(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + unsigned int yyaccept = 0; + static const unsigned char yybm[] = { + 0, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 192, 208, 208, 208, 208, 144, 208, 80, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 32, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + yych = *p; + if (yych <= '&') { + if (yych == '"') + goto yy714; + } else { + if (yych <= '\'') + goto yy715; + if (yych <= '(') + goto yy716; + } + ++p; + yy713 : { return 0; } + yy714: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy713; + if (yych <= 0x7F) + goto yy718; + if (yych <= 0xC1) + goto yy713; + if (yych <= 0xF4) + goto yy718; + goto yy713; + yy715: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy713; + if (yych <= 0x7F) + goto yy732; + if (yych <= 0xC1) + goto yy713; + if (yych <= 0xF4) + goto yy732; + goto yy713; + yy716: + yyaccept = 0; + yych = *(marker = ++p); + if (yych <= 0x00) + goto yy713; + if (yych <= 0x7F) + goto yy745; + if (yych <= 0xC1) + goto yy713; + if (yych <= 0xF4) + goto yy745; + goto yy713; + yy717: + ++p; + yych = *p; + yy718: + if (yybm[0 + yych] & 16) { + goto yy717; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy719; + if (yych <= '"') + goto yy720; + goto yy722; + } else { + if (yych <= 0xC1) + goto yy719; + if (yych <= 0xDF) + goto yy724; + goto yy725; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy727; + goto yy726; + } else { + if (yych <= 0xF0) + goto yy728; + if (yych <= 0xF3) + goto yy729; + if (yych <= 0xF4) + goto yy730; + } + } + yy719: + p = marker; + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy713; + } else { + goto yy721; + } + } else { + if (yyaccept == 2) { + goto yy734; + } else { + goto yy747; + } + } + yy720: + ++p; + yy721 : { return (bufsize_t)(p - start); } + yy722: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy717; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy719; + if (yych <= '"') + goto yy757; + goto yy722; + } else { + if (yych <= 0xC1) + goto yy719; + if (yych >= 0xE0) + goto yy725; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy727; + goto yy726; + } else { + if (yych <= 0xF0) + goto yy728; + if (yych <= 0xF3) + goto yy729; + if (yych <= 0xF4) + goto yy730; + goto yy719; + } + } + yy724: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0xBF) + goto yy717; + goto yy719; + yy725: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy719; + if (yych <= 0xBF) + goto yy724; + goto yy719; + yy726: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0xBF) + goto yy724; + goto yy719; + yy727: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0x9F) + goto yy724; + goto yy719; + yy728: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy719; + if (yych <= 0xBF) + goto yy726; + goto yy719; + yy729: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0xBF) + goto yy726; + goto yy719; + yy730: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0x8F) + goto yy726; + goto yy719; + yy731: + ++p; + yych = *p; + yy732: + if (yybm[0 + yych] & 64) { + goto yy731; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy719; + if (yych >= '(') + goto yy735; + } else { + if (yych <= 0xC1) + goto yy719; + if (yych <= 0xDF) + goto yy737; + goto yy738; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy740; + goto yy739; + } else { + if (yych <= 0xF0) + goto yy741; + if (yych <= 0xF3) + goto yy742; + if (yych <= 0xF4) + goto yy743; + goto yy719; + } + } + yy733: + ++p; + yy734 : { return (bufsize_t)(p - start); } + yy735: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy731; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy719; + if (yych <= '\'') + goto yy758; + goto yy735; + } else { + if (yych <= 0xC1) + goto yy719; + if (yych >= 0xE0) + goto yy738; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy740; + goto yy739; + } else { + if (yych <= 0xF0) + goto yy741; + if (yych <= 0xF3) + goto yy742; + if (yych <= 0xF4) + goto yy743; + goto yy719; + } + } + yy737: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0xBF) + goto yy731; + goto yy719; + yy738: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy719; + if (yych <= 0xBF) + goto yy737; + goto yy719; + yy739: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0xBF) + goto yy737; + goto yy719; + yy740: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0x9F) + goto yy737; + goto yy719; + yy741: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy719; + if (yych <= 0xBF) + goto yy739; + goto yy719; + yy742: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0xBF) + goto yy739; + goto yy719; + yy743: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0x8F) + goto yy739; + goto yy719; + yy744: + ++p; + yych = *p; + yy745: + if (yybm[0 + yych] & 128) { + goto yy744; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy719; + if (yych >= '*') + goto yy748; + } else { + if (yych <= 0xC1) + goto yy719; + if (yych <= 0xDF) + goto yy750; + goto yy751; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy753; + goto yy752; + } else { + if (yych <= 0xF0) + goto yy754; + if (yych <= 0xF3) + goto yy755; + if (yych <= 0xF4) + goto yy756; + goto yy719; + } + } + yy746: + ++p; + yy747 : { return (bufsize_t)(p - start); } + yy748: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy744; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy719; + if (yych <= ')') + goto yy759; + goto yy748; + } else { + if (yych <= 0xC1) + goto yy719; + if (yych >= 0xE0) + goto yy751; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy753; + goto yy752; + } else { + if (yych <= 0xF0) + goto yy754; + if (yych <= 0xF3) + goto yy755; + if (yych <= 0xF4) + goto yy756; + goto yy719; + } + } + yy750: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0xBF) + goto yy744; + goto yy719; + yy751: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy719; + if (yych <= 0xBF) + goto yy750; + goto yy719; + yy752: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0xBF) + goto yy750; + goto yy719; + yy753: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0x9F) + goto yy750; + goto yy719; + yy754: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy719; + if (yych <= 0xBF) + goto yy752; + goto yy719; + yy755: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0xBF) + goto yy752; + goto yy719; + yy756: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy719; + if (yych <= 0x8F) + goto yy752; + goto yy719; + yy757: + yyaccept = 1; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy717; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy721; + if (yych <= '"') + goto yy720; + goto yy722; + } else { + if (yych <= 0xC1) + goto yy721; + if (yych <= 0xDF) + goto yy724; + goto yy725; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy727; + goto yy726; + } else { + if (yych <= 0xF0) + goto yy728; + if (yych <= 0xF3) + goto yy729; + if (yych <= 0xF4) + goto yy730; + goto yy721; + } + } + yy758: + yyaccept = 2; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy731; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy734; + if (yych <= '\'') + goto yy733; + goto yy735; + } else { + if (yych <= 0xC1) + goto yy734; + if (yych <= 0xDF) + goto yy737; + goto yy738; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy740; + goto yy739; + } else { + if (yych <= 0xF0) + goto yy741; + if (yych <= 0xF3) + goto yy742; + if (yych <= 0xF4) + goto yy743; + goto yy734; + } + } + yy759: + yyaccept = 3; + marker = ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy744; + } + if (yych <= 0xE0) { + if (yych <= '\\') { + if (yych <= 0x00) + goto yy747; + if (yych <= ')') + goto yy746; + goto yy748; + } else { + if (yych <= 0xC1) + goto yy747; + if (yych <= 0xDF) + goto yy750; + goto yy751; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy753; + goto yy752; + } else { + if (yych <= 0xF0) + goto yy754; + if (yych <= 0xF3) + goto yy755; + if (yych <= 0xF4) + goto yy756; + goto yy747; + } + } + } +} + +// Match space characters, including newlines. +bufsize_t _scan_spacechars(const unsigned char *p) { + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy764; + } + ++p; + { return 0; } + yy764: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy764; + } + { return (bufsize_t)(p - start); } + } +} + +// Match ATX heading start. +bufsize_t _scan_atx_heading_start(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + yych = *p; + if (yych == '#') + goto yy771; + ++p; + yy770 : { return 0; } + yy771: + yych = *(marker = ++p); + if (yybm[0 + yych] & 128) { + goto yy772; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy770; + if (yych <= '\n') + goto yy775; + goto yy770; + } else { + if (yych <= '\r') + goto yy775; + if (yych == '#') + goto yy776; + goto yy770; + } + yy772: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy772; + } + yy774 : { return (bufsize_t)(p - start); } + yy775: + yych = *++p; + goto yy774; + yy776: + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy772; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy777; + if (yych <= '\n') + goto yy775; + } else { + if (yych <= '\r') + goto yy775; + if (yych == '#') + goto yy778; + } + yy777: + p = marker; + goto yy770; + yy778: + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy772; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy777; + if (yych <= '\n') + goto yy775; + goto yy777; + } else { + if (yych <= '\r') + goto yy775; + if (yych != '#') + goto yy777; + } + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy772; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy777; + if (yych <= '\n') + goto yy775; + goto yy777; + } else { + if (yych <= '\r') + goto yy775; + if (yych != '#') + goto yy777; + } + yych = *++p; + if (yybm[0 + yych] & 128) { + goto yy772; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy777; + if (yych <= '\n') + goto yy775; + goto yy777; + } else { + if (yych <= '\r') + goto yy775; + if (yych != '#') + goto yy777; + } + ++p; + if (yybm[0 + (yych = *p)] & 128) { + goto yy772; + } + if (yych <= 0x08) + goto yy777; + if (yych <= '\n') + goto yy775; + if (yych == '\r') + goto yy775; + goto yy777; + } +} + +// Match setext heading line. Return 1 for level-1 heading, +// 2 for level-2, 0 for no match. +bufsize_t _scan_setext_heading_line(const unsigned char *p) { + const unsigned char *marker = NULL; + + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + yych = *p; + if (yych == '-') + goto yy786; + if (yych == '=') + goto yy787; + ++p; + yy785 : { return 0; } + yy786: + yych = *(marker = ++p); + if (yybm[0 + yych] & 64) { + goto yy793; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy785; + if (yych <= '\n') + goto yy789; + goto yy785; + } else { + if (yych <= '\r') + goto yy789; + if (yych == ' ') + goto yy789; + goto yy785; + } + yy787: + yych = *(marker = ++p); + if (yybm[0 + yych] & 128) { + goto yy799; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy785; + if (yych <= '\n') + goto yy796; + goto yy785; + } else { + if (yych <= '\r') + goto yy796; + if (yych == ' ') + goto yy796; + goto yy785; + } + yy788: + ++p; + yych = *p; + yy789: + if (yybm[0 + yych] & 32) { + goto yy788; + } + if (yych <= 0x08) + goto yy790; + if (yych <= '\n') + goto yy791; + if (yych == '\r') + goto yy791; + yy790: + p = marker; + goto yy785; + yy791: + ++p; + { return 2; } + yy793: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy788; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy790; + if (yych <= '\n') + goto yy791; + goto yy790; + } else { + if (yych <= '\r') + goto yy791; + if (yych == '-') + goto yy793; + goto yy790; + } + yy795: + ++p; + yych = *p; + yy796: + if (yych <= '\f') { + if (yych <= 0x08) + goto yy790; + if (yych <= '\t') + goto yy795; + if (yych >= '\v') + goto yy790; + } else { + if (yych <= '\r') + goto yy797; + if (yych == ' ') + goto yy795; + goto yy790; + } + yy797: + ++p; + { return 1; } + yy799: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy799; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy790; + if (yych <= '\t') + goto yy795; + if (yych <= '\n') + goto yy797; + goto yy790; + } else { + if (yych <= '\r') + goto yy797; + if (yych == ' ') + goto yy795; + goto yy790; + } + } +} + +// Scan a thematic break line: "...three or more hyphens, asterisks, +// or underscores on a line by themselves. If you wish, you may use +// spaces between the hyphens or asterisks." +bufsize_t _scan_thematic_break(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + yych = *p; + if (yych <= ',') { + if (yych == '*') + goto yy805; + } else { + if (yych <= '-') + goto yy806; + if (yych == '_') + goto yy807; + } + ++p; + yy804 : { return 0; } + yy805: + yych = *(marker = ++p); + if (yybm[0 + yych] & 16) { + goto yy808; + } + if (yych == '*') + goto yy811; + goto yy804; + yy806: + yych = *(marker = ++p); + if (yych <= 0x1F) { + if (yych == '\t') + goto yy813; + goto yy804; + } else { + if (yych <= ' ') + goto yy813; + if (yych == '-') + goto yy815; + goto yy804; + } + yy807: + yych = *(marker = ++p); + if (yych <= 0x1F) { + if (yych == '\t') + goto yy817; + goto yy804; + } else { + if (yych <= ' ') + goto yy817; + if (yych == '_') + goto yy819; + goto yy804; + } + yy808: + ++p; + yych = *p; + if (yybm[0 + yych] & 16) { + goto yy808; + } + if (yych == '*') + goto yy811; + yy810: + p = marker; + goto yy804; + yy811: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych == '\t') + goto yy811; + goto yy810; + } else { + if (yych <= ' ') + goto yy811; + if (yych == '*') + goto yy821; + goto yy810; + } + yy813: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych == '\t') + goto yy813; + goto yy810; + } else { + if (yych <= ' ') + goto yy813; + if (yych != '-') + goto yy810; + } + yy815: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych == '\t') + goto yy815; + goto yy810; + } else { + if (yych <= ' ') + goto yy815; + if (yych == '-') + goto yy823; + goto yy810; + } + yy817: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych == '\t') + goto yy817; + goto yy810; + } else { + if (yych <= ' ') + goto yy817; + if (yych != '_') + goto yy810; + } + yy819: + ++p; + yych = *p; + if (yych <= 0x1F) { + if (yych == '\t') + goto yy819; + goto yy810; + } else { + if (yych <= ' ') + goto yy819; + if (yych == '_') + goto yy825; + goto yy810; + } + yy821: + ++p; + yych = *p; + if (yybm[0 + yych] & 32) { + goto yy821; + } + if (yych <= 0x08) + goto yy810; + if (yych <= '\n') + goto yy827; + if (yych == '\r') + goto yy827; + goto yy810; + yy823: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy823; + } + if (yych <= 0x08) + goto yy810; + if (yych <= '\n') + goto yy829; + if (yych == '\r') + goto yy829; + goto yy810; + yy825: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy825; + } + if (yych <= 0x08) + goto yy810; + if (yych <= '\n') + goto yy831; + if (yych == '\r') + goto yy831; + goto yy810; + yy827: + ++p; + { return (bufsize_t)(p - start); } + yy829: + ++p; + { return (bufsize_t)(p - start); } + yy831: + ++p; + { return (bufsize_t)(p - start); } + } +} + +// Scan an opening code fence. +bufsize_t _scan_open_code_fence(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 192, 192, 0, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 144, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 96, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + yych = *p; + if (yych == '`') + goto yy837; + if (yych == '~') + goto yy838; + ++p; + yy836 : { return 0; } + yy837: + yych = *(marker = ++p); + if (yych == '`') + goto yy839; + goto yy836; + yy838: + yych = *(marker = ++p); + if (yych == '~') + goto yy841; + goto yy836; + yy839: + yych = *++p; + if (yybm[0 + yych] & 16) { + goto yy842; + } + yy840: + p = marker; + goto yy836; + yy841: + yych = *++p; + if (yybm[0 + yych] & 32) { + goto yy844; + } + goto yy840; + yy842: + ++p; + yych = *p; + marker = p; + if (yybm[0 + yych] & 64) { + goto yy846; + } + if (yych <= 0xE0) { + if (yych <= '`') { + if (yych <= 0x00) + goto yy840; + if (yych <= '\r') + goto yy848; + goto yy842; + } else { + if (yych <= 0xC1) + goto yy840; + if (yych <= 0xDF) + goto yy850; + goto yy851; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy853; + goto yy852; + } else { + if (yych <= 0xF0) + goto yy854; + if (yych <= 0xF3) + goto yy855; + if (yych <= 0xF4) + goto yy856; + goto yy840; + } + } + yy844: + ++p; + yych = *p; + marker = p; + if (yybm[0 + yych] & 128) { + goto yy857; + } + if (yych <= 0xE0) { + if (yych <= '~') { + if (yych <= 0x00) + goto yy840; + if (yych <= '\r') + goto yy859; + goto yy844; + } else { + if (yych <= 0xC1) + goto yy840; + if (yych <= 0xDF) + goto yy861; + goto yy862; + } + } else { + if (yych <= 0xEF) { + if (yych == 0xED) + goto yy864; + goto yy863; + } else { + if (yych <= 0xF0) + goto yy865; + if (yych <= 0xF3) + goto yy866; + if (yych <= 0xF4) + goto yy867; + goto yy840; + } + } + yy846: + ++p; + yych = *p; + if (yybm[0 + yych] & 64) { + goto yy846; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy840; + if (yych >= 0x0E) + goto yy840; + } else { + if (yych <= 0xDF) + goto yy850; + if (yych <= 0xE0) + goto yy851; + goto yy852; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy853; + if (yych <= 0xEF) + goto yy852; + goto yy854; + } else { + if (yych <= 0xF3) + goto yy855; + if (yych <= 0xF4) + goto yy856; + goto yy840; + } + } + yy848: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy850: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0xBF) + goto yy846; + goto yy840; + yy851: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy840; + if (yych <= 0xBF) + goto yy850; + goto yy840; + yy852: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0xBF) + goto yy850; + goto yy840; + yy853: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0x9F) + goto yy850; + goto yy840; + yy854: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy840; + if (yych <= 0xBF) + goto yy852; + goto yy840; + yy855: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0xBF) + goto yy852; + goto yy840; + yy856: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0x8F) + goto yy852; + goto yy840; + yy857: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy857; + } + if (yych <= 0xEC) { + if (yych <= 0xC1) { + if (yych <= 0x00) + goto yy840; + if (yych >= 0x0E) + goto yy840; + } else { + if (yych <= 0xDF) + goto yy861; + if (yych <= 0xE0) + goto yy862; + goto yy863; + } + } else { + if (yych <= 0xF0) { + if (yych <= 0xED) + goto yy864; + if (yych <= 0xEF) + goto yy863; + goto yy865; + } else { + if (yych <= 0xF3) + goto yy866; + if (yych <= 0xF4) + goto yy867; + goto yy840; + } + } + yy859: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy861: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0xBF) + goto yy857; + goto yy840; + yy862: + ++p; + yych = *p; + if (yych <= 0x9F) + goto yy840; + if (yych <= 0xBF) + goto yy861; + goto yy840; + yy863: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0xBF) + goto yy861; + goto yy840; + yy864: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0x9F) + goto yy861; + goto yy840; + yy865: + ++p; + yych = *p; + if (yych <= 0x8F) + goto yy840; + if (yych <= 0xBF) + goto yy863; + goto yy840; + yy866: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0xBF) + goto yy863; + goto yy840; + yy867: + ++p; + yych = *p; + if (yych <= 0x7F) + goto yy840; + if (yych <= 0x8F) + goto yy863; + goto yy840; + } +} + +// Scan a closing code fence with length at least len. +bufsize_t _scan_close_code_fence(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + yych = *p; + if (yych == '`') + goto yy872; + if (yych == '~') + goto yy873; + ++p; + yy871 : { return 0; } + yy872: + yych = *(marker = ++p); + if (yych == '`') + goto yy874; + goto yy871; + yy873: + yych = *(marker = ++p); + if (yych == '~') + goto yy876; + goto yy871; + yy874: + yych = *++p; + if (yybm[0 + yych] & 32) { + goto yy877; + } + yy875: + p = marker; + goto yy871; + yy876: + yych = *++p; + if (yybm[0 + yych] & 64) { + goto yy879; + } + goto yy875; + yy877: + ++p; + yych = *p; + marker = p; + if (yybm[0 + yych] & 128) { + goto yy881; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy875; + if (yych <= '\n') + goto yy883; + goto yy875; + } else { + if (yych <= '\r') + goto yy883; + if (yych == '`') + goto yy877; + goto yy875; + } + yy879: + ++p; + yych = *p; + marker = p; + if (yybm[0 + yych] & 64) { + goto yy879; + } + if (yych <= '\f') { + if (yych <= 0x08) + goto yy875; + if (yych <= '\t') + goto yy885; + if (yych <= '\n') + goto yy887; + goto yy875; + } else { + if (yych <= '\r') + goto yy887; + if (yych == ' ') + goto yy885; + goto yy875; + } + yy881: + ++p; + yych = *p; + if (yybm[0 + yych] & 128) { + goto yy881; + } + if (yych <= 0x08) + goto yy875; + if (yych <= '\n') + goto yy883; + if (yych != '\r') + goto yy875; + yy883: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + yy885: + ++p; + yych = *p; + if (yych <= '\f') { + if (yych <= 0x08) + goto yy875; + if (yych <= '\t') + goto yy885; + if (yych >= '\v') + goto yy875; + } else { + if (yych <= '\r') + goto yy887; + if (yych == ' ') + goto yy885; + goto yy875; + } + yy887: + ++p; + p = marker; + { return (bufsize_t)(p - start); } + } +} + +// Scans an entity. +// Returns number of chars matched. +bufsize_t _scan_entity(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + yych = *p; + if (yych == '&') + goto yy893; + ++p; + yy892 : { return 0; } + yy893: + yych = *(marker = ++p); + if (yych <= '@') { + if (yych != '#') + goto yy892; + } else { + if (yych <= 'Z') + goto yy896; + if (yych <= '`') + goto yy892; + if (yych <= 'z') + goto yy896; + goto yy892; + } + yych = *++p; + if (yych <= 'W') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy897; + } else { + if (yych <= 'X') + goto yy898; + if (yych == 'x') + goto yy898; + } + yy895: + p = marker; + goto yy892; + yy896: + yych = *++p; + if (yych <= '@') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy899; + goto yy895; + } else { + if (yych <= 'Z') + goto yy899; + if (yych <= '`') + goto yy895; + if (yych <= 'z') + goto yy899; + goto yy895; + } + yy897: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy900; + if (yych == ';') + goto yy901; + goto yy895; + yy898: + yych = *++p; + if (yych <= '@') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy903; + goto yy895; + } else { + if (yych <= 'F') + goto yy903; + if (yych <= '`') + goto yy895; + if (yych <= 'f') + goto yy903; + goto yy895; + } + yy899: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy904; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + goto yy904; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'z') + goto yy904; + goto yy895; + } + } + yy900: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy905; + if (yych != ';') + goto yy895; + yy901: + ++p; + { return (bufsize_t)(p - start); } + yy903: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy906; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy895; + goto yy906; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'f') + goto yy906; + goto yy895; + } + } + yy904: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy907; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + goto yy907; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'z') + goto yy907; + goto yy895; + } + } + yy905: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy908; + if (yych == ';') + goto yy901; + goto yy895; + yy906: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy909; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy895; + goto yy909; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'f') + goto yy909; + goto yy895; + } + } + yy907: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy910; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + goto yy910; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'z') + goto yy910; + goto yy895; + } + } + yy908: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy911; + if (yych == ';') + goto yy901; + goto yy895; + yy909: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy912; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy895; + goto yy912; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'f') + goto yy912; + goto yy895; + } + } + yy910: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy913; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + goto yy913; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'z') + goto yy913; + goto yy895; + } + } + yy911: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy914; + if (yych == ';') + goto yy901; + goto yy895; + yy912: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy915; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy895; + goto yy915; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'f') + goto yy915; + goto yy895; + } + } + yy913: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy916; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + goto yy916; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'z') + goto yy916; + goto yy895; + } + } + yy914: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy917; + if (yych == ';') + goto yy901; + goto yy895; + yy915: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy918; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy895; + goto yy918; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'f') + goto yy918; + goto yy895; + } + } + yy916: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy919; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + goto yy919; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'z') + goto yy919; + goto yy895; + } + } + yy917: + yych = *++p; + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy920; + if (yych == ';') + goto yy901; + goto yy895; + yy918: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy921; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy895; + goto yy921; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'f') + goto yy921; + goto yy895; + } + } + yy919: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy922; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + goto yy922; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'z') + goto yy922; + goto yy895; + } + } + yy920: + yych = *++p; + if (yych == ';') + goto yy901; + goto yy895; + yy921: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy920; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'F') { + if (yych <= '@') + goto yy895; + goto yy920; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'f') + goto yy920; + goto yy895; + } + } + yy922: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy923; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy923: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy924; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy924: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy925; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy925: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy926; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy926: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy927; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy927: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy928; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy928: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy929; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy929: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy930; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy930: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy931; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy931: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy932; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy932: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy933; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy933: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy934; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy934: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy935; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy935: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy936; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy936: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy937; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy937: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy938; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy938: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy939; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy939: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy940; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy940: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy941; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy941: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy942; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy942: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy943; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy943: + yych = *++p; + if (yych <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy944; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + } else { + if (yych <= '`') + goto yy895; + if (yych >= '{') + goto yy895; + } + } + yy944: + ++p; + if ((yych = *p) <= ';') { + if (yych <= '/') + goto yy895; + if (yych <= '9') + goto yy920; + if (yych <= ':') + goto yy895; + goto yy901; + } else { + if (yych <= 'Z') { + if (yych <= '@') + goto yy895; + goto yy920; + } else { + if (yych <= '`') + goto yy895; + if (yych <= 'z') + goto yy920; + goto yy895; + } + } + } +} + +// Returns positive value if a URL begins in a way that is potentially +// dangerous, with javascript:, vbscript:, file:, or data:, otherwise 0. +bufsize_t _scan_dangerous_url(const unsigned char *p) { + const unsigned char *marker = NULL; + const unsigned char *start = p; + + { + unsigned char yych; + unsigned int yyaccept = 0; + yych = *p; + if (yych <= 'V') { + if (yych <= 'F') { + if (yych == 'D') + goto yy949; + if (yych >= 'F') + goto yy950; + } else { + if (yych == 'J') + goto yy951; + if (yych >= 'V') + goto yy952; + } + } else { + if (yych <= 'f') { + if (yych == 'd') + goto yy949; + if (yych >= 'f') + goto yy950; + } else { + if (yych <= 'j') { + if (yych >= 'j') + goto yy951; + } else { + if (yych == 'v') + goto yy952; + } + } + } + ++p; + yy948 : { return 0; } + yy949: + yyaccept = 0; + yych = *(marker = ++p); + if (yych == 'A') + goto yy953; + if (yych == 'a') + goto yy953; + goto yy948; + yy950: + yyaccept = 0; + yych = *(marker = ++p); + if (yych == 'I') + goto yy955; + if (yych == 'i') + goto yy955; + goto yy948; + yy951: + yyaccept = 0; + yych = *(marker = ++p); + if (yych == 'A') + goto yy956; + if (yych == 'a') + goto yy956; + goto yy948; + yy952: + yyaccept = 0; + yych = *(marker = ++p); + if (yych == 'B') + goto yy957; + if (yych == 'b') + goto yy957; + goto yy948; + yy953: + yych = *++p; + if (yych == 'T') + goto yy958; + if (yych == 't') + goto yy958; + yy954: + p = marker; + if (yyaccept == 0) { + goto yy948; + } else { + goto yy966; + } + yy955: + yych = *++p; + if (yych == 'L') + goto yy959; + if (yych == 'l') + goto yy959; + goto yy954; + yy956: + yych = *++p; + if (yych == 'V') + goto yy960; + if (yych == 'v') + goto yy960; + goto yy954; + yy957: + yych = *++p; + if (yych == 'S') + goto yy961; + if (yych == 's') + goto yy961; + goto yy954; + yy958: + yych = *++p; + if (yych == 'A') + goto yy962; + if (yych == 'a') + goto yy962; + goto yy954; + yy959: + yych = *++p; + if (yych == 'E') + goto yy963; + if (yych == 'e') + goto yy963; + goto yy954; + yy960: + yych = *++p; + if (yych == 'A') + goto yy957; + if (yych == 'a') + goto yy957; + goto yy954; + yy961: + yych = *++p; + if (yych == 'C') + goto yy964; + if (yych == 'c') + goto yy964; + goto yy954; + yy962: + yych = *++p; + if (yych == ':') + goto yy965; + goto yy954; + yy963: + yych = *++p; + if (yych == ':') + goto yy967; + goto yy954; + yy964: + yych = *++p; + if (yych == 'R') + goto yy968; + if (yych == 'r') + goto yy968; + goto yy954; + yy965: + yyaccept = 1; + yych = *(marker = ++p); + if (yych == 'I') + goto yy969; + if (yych == 'i') + goto yy969; + yy966 : { return (bufsize_t)(p - start); } + yy967: + yych = *++p; + goto yy966; + yy968: + yych = *++p; + if (yych == 'I') + goto yy970; + if (yych == 'i') + goto yy970; + goto yy954; + yy969: + yych = *++p; + if (yych == 'M') + goto yy971; + if (yych == 'm') + goto yy971; + goto yy954; + yy970: + yych = *++p; + if (yych == 'P') + goto yy972; + if (yych == 'p') + goto yy972; + goto yy954; + yy971: + yych = *++p; + if (yych == 'A') + goto yy973; + if (yych == 'a') + goto yy973; + goto yy954; + yy972: + yych = *++p; + if (yych == 'T') + goto yy963; + if (yych == 't') + goto yy963; + goto yy954; + yy973: + yych = *++p; + if (yych == 'G') + goto yy974; + if (yych != 'g') + goto yy954; + yy974: + yych = *++p; + if (yych == 'E') + goto yy975; + if (yych != 'e') + goto yy954; + yy975: + yych = *++p; + if (yych != '/') + goto yy954; + yych = *++p; + if (yych <= 'W') { + if (yych <= 'J') { + if (yych == 'G') + goto yy977; + if (yych <= 'I') + goto yy954; + goto yy978; + } else { + if (yych == 'P') + goto yy979; + if (yych <= 'V') + goto yy954; + goto yy980; + } + } else { + if (yych <= 'j') { + if (yych == 'g') + goto yy977; + if (yych <= 'i') + goto yy954; + goto yy978; + } else { + if (yych <= 'p') { + if (yych <= 'o') + goto yy954; + goto yy979; + } else { + if (yych == 'w') + goto yy980; + goto yy954; + } + } + } + yy977: + yych = *++p; + if (yych == 'I') + goto yy981; + if (yych == 'i') + goto yy981; + goto yy954; + yy978: + yych = *++p; + if (yych == 'P') + goto yy982; + if (yych == 'p') + goto yy982; + goto yy954; + yy979: + yych = *++p; + if (yych == 'N') + goto yy983; + if (yych == 'n') + goto yy983; + goto yy954; + yy980: + yych = *++p; + if (yych == 'E') + goto yy984; + if (yych == 'e') + goto yy984; + goto yy954; + yy981: + yych = *++p; + if (yych == 'F') + goto yy985; + if (yych == 'f') + goto yy985; + goto yy954; + yy982: + yych = *++p; + if (yych == 'E') + goto yy983; + if (yych != 'e') + goto yy954; + yy983: + yych = *++p; + if (yych == 'G') + goto yy985; + if (yych == 'g') + goto yy985; + goto yy954; + yy984: + yych = *++p; + if (yych == 'B') + goto yy987; + if (yych == 'b') + goto yy987; + goto yy954; + yy985: + ++p; + { return 0; } + yy987: + ++p; + if ((yych = *p) == 'P') + goto yy985; + if (yych == 'p') + goto yy985; + goto yy954; + } +} + + +static const char *EMDASH = "\xE2\x80\x94"; +static const char *ENDASH = "\xE2\x80\x93"; +static const char *ELLIPSES = "\xE2\x80\xA6"; +static const char *LEFTDOUBLEQUOTE = "\xE2\x80\x9C"; +static const char *RIGHTDOUBLEQUOTE = "\xE2\x80\x9D"; +static const char *LEFTSINGLEQUOTE = "\xE2\x80\x98"; +static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99"; + +// Macros for creating various kinds of simple. +#define make_str(mem, s) make_literal(mem, CMARK_NODE_TEXT, s) +#define make_code(mem, s) make_literal(mem, CMARK_NODE_CODE, s) +#define make_raw_html(mem, s) make_literal(mem, CMARK_NODE_HTML_INLINE, s) +#define make_linebreak(mem) make_simple(mem, CMARK_NODE_LINEBREAK) +#define make_softbreak(mem) make_simple(mem, CMARK_NODE_SOFTBREAK) +#define make_emph(mem) make_simple(mem, CMARK_NODE_EMPH) +#define make_strong(mem) make_simple(mem, CMARK_NODE_STRONG) + +#define MAXBACKTICKS 1000 + +typedef struct delimiter { + struct delimiter *previous; + struct delimiter *next; + cmark_node *inl_text; + bufsize_t length; + unsigned char delim_char; + bool can_open; + bool can_close; +} delimiter; + +typedef struct bracket { + struct bracket *previous; + struct delimiter *previous_delimiter; + cmark_node *inl_text; + bufsize_t position; + bool image; + bool active; + bool bracket_after; +} bracket; + +typedef struct { + cmark_mem *mem; + cmark_chunk input; + bufsize_t pos; + cmark_reference_map *refmap; + delimiter *last_delim; + bracket *last_bracket; + bufsize_t backticks[MAXBACKTICKS + 1]; + bool scanned_for_backticks; +} subject; + +static CMARK_INLINE bool S_is_line_end_char(char c) { + return (c == '\n' || c == '\r'); +} + +static delimiter *S_insert_emph(subject *subj, delimiter *opener, + delimiter *closer); + +static int parse_inline(subject *subj, cmark_node *parent, int options); + +static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, + cmark_reference_map *refmap); +static bufsize_t subject_find_special_char(subject *subj, int options); + +// Create an inline with a literal string value. +static CMARK_INLINE cmark_node *make_literal(cmark_mem *mem, cmark_node_type t, + cmark_chunk s) { + cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e)); + cmark_strbuf_init(mem, &e->content, 0); + e->type = t; + e->as.literal = s; + return e; +} + +// Create an inline with no value. +static CMARK_INLINE cmark_node *make_simple(cmark_mem *mem, cmark_node_type t) { + cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e)); + cmark_strbuf_init(mem, &e->content, 0); + e->type = t; + return e; +} + +// Like make_str, but parses entities. +static cmark_node *make_str_with_entities(cmark_mem *mem, + cmark_chunk *content) { + cmark_strbuf unescaped = CMARK_BUF_INIT(mem); + + if (houdini_unescape_html(&unescaped, content->data, content->len)) { + return make_str(mem, cmark_chunk_buf_detach(&unescaped)); + } else { + return make_str(mem, *content); + } +} + +// Duplicate a chunk by creating a copy of the buffer not by reusing the +// buffer like cmark_chunk_dup does. +static cmark_chunk chunk_clone(cmark_mem *mem, cmark_chunk *src) { + cmark_chunk c; + bufsize_t len = src->len; + + c.len = len; + c.data = (unsigned char *)mem->calloc(len + 1, 1); + c.alloc = 1; + memcpy(c.data, src->data, len); + c.data[len] = '\0'; + + return c; +} + +static cmark_chunk cmark_clean_autolink(cmark_mem *mem, cmark_chunk *url, + int is_email) { + cmark_strbuf buf = CMARK_BUF_INIT(mem); + + cmark_chunk_trim(url); + + if (url->len == 0) { + cmark_chunk result = CMARK_CHUNK_EMPTY; + return result; + } + + if (is_email) + cmark_strbuf_puts(&buf, "mailto:"); + + houdini_unescape_html_f(&buf, url->data, url->len); + return cmark_chunk_buf_detach(&buf); +} + +static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url, + int is_email) { + cmark_node *link = make_simple(mem, CMARK_NODE_LINK); + link->as.link.url = cmark_clean_autolink(mem, &url, is_email); + link->as.link.title = cmark_chunk_literal(""); + cmark_node_append_child(link, make_str_with_entities(mem, &url)); + return link; +} + +static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer, + cmark_reference_map *refmap) { + int i; + e->mem = mem; + e->input.data = buffer->ptr; + e->input.len = buffer->size; + e->input.alloc = 0; + e->pos = 0; + e->refmap = refmap; + e->last_delim = NULL; + e->last_bracket = NULL; + for (i = 0; i <= MAXBACKTICKS; i++) { + e->backticks[i] = 0; + } + e->scanned_for_backticks = false; +} + +static CMARK_INLINE int isbacktick(int c) { return (c == '`'); } + +static CMARK_INLINE unsigned char peek_char(subject *subj) { + // NULL bytes should have been stripped out by now. If they're + // present, it's a programming error: + assert(!(subj->pos < subj->input.len && subj->input.data[subj->pos] == 0)); + return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0; +} + +static CMARK_INLINE unsigned char peek_at(subject *subj, bufsize_t pos) { + return subj->input.data[pos]; +} + +// Return true if there are more characters in the subject. +static CMARK_INLINE int is_eof(subject *subj) { + return (subj->pos >= subj->input.len); +} + +// Advance the subject. Doesn't check for eof. +#define advance(subj) (subj)->pos += 1 + +static CMARK_INLINE bool skip_spaces(subject *subj) { + bool skipped = false; + while (peek_char(subj) == ' ' || peek_char(subj) == '\t') { + advance(subj); + skipped = true; + } + return skipped; +} + +static CMARK_INLINE bool skip_line_end(subject *subj) { + bool seen_line_end_char = false; + if (peek_char(subj) == '\r') { + advance(subj); + seen_line_end_char = true; + } + if (peek_char(subj) == '\n') { + advance(subj); + seen_line_end_char = true; + } + return seen_line_end_char || is_eof(subj); +} + +// Take characters while a predicate holds, and return a string. +static CMARK_INLINE cmark_chunk take_while(subject *subj, int (*f)(int)) { + unsigned char c; + bufsize_t startpos = subj->pos; + bufsize_t len = 0; + + while ((c = peek_char(subj)) && (*f)(c)) { + advance(subj); + len++; + } + + return cmark_chunk_dup(&subj->input, startpos, len); +} + +// Try to process a backtick code span that began with a +// span of ticks of length openticklength length (already +// parsed). Return 0 if you don't find matching closing +// backticks, otherwise return the position in the subject +// after the closing backticks. +static bufsize_t scan_to_closing_backticks(subject *subj, + bufsize_t openticklength) { + + bool found = false; + if (openticklength > MAXBACKTICKS) { + // we limit backtick string length because of the array subj->backticks: + return 0; + } + if (subj->scanned_for_backticks && + subj->backticks[openticklength] <= subj->pos) { + // return if we already know there's no closer + return 0; + } + while (!found) { + // read non backticks + unsigned char c; + while ((c = peek_char(subj)) && c != '`') { + advance(subj); + } + if (is_eof(subj)) { + break; + } + bufsize_t numticks = 0; + while (peek_char(subj) == '`') { + advance(subj); + numticks++; + } + // store position of ender + if (numticks <= MAXBACKTICKS) { + subj->backticks[numticks] = subj->pos - numticks; + } + if (numticks == openticklength) { + return (subj->pos); + } + } + // got through whole input without finding closer + subj->scanned_for_backticks = true; + return 0; +} + +// Parse backtick code section or raw backticks, return an inline. +// Assumes that the subject has a backtick at the current position. +static cmark_node *handle_backticks(subject *subj) { + cmark_chunk openticks = take_while(subj, isbacktick); + bufsize_t startpos = subj->pos; + bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len); + + if (endpos == 0) { // not found + subj->pos = startpos; // rewind + return make_str(subj->mem, openticks); + } else { + cmark_strbuf buf = CMARK_BUF_INIT(subj->mem); + + cmark_strbuf_set(&buf, subj->input.data + startpos, + endpos - startpos - openticks.len); + cmark_strbuf_trim(&buf); + cmark_strbuf_normalize_whitespace(&buf); + + return make_code(subj->mem, cmark_chunk_buf_detach(&buf)); + } +} + +// Scan ***, **, or * and return number scanned, or 0. +// Advances position. +static int scan_delims(subject *subj, unsigned char c, bool *can_open, + bool *can_close) { + int numdelims = 0; + bufsize_t before_char_pos; + int32_t after_char = 0; + int32_t before_char = 0; + int len; + bool left_flanking, right_flanking; + + if (subj->pos == 0) { + before_char = 10; + } else { + before_char_pos = subj->pos - 1; + // walk back to the beginning of the UTF_8 sequence: + while (peek_at(subj, before_char_pos) >> 6 == 2 && before_char_pos > 0) { + before_char_pos -= 1; + } + len = cmark_utf8proc_iterate(subj->input.data + before_char_pos, + subj->pos - before_char_pos, &before_char); + if (len == -1) { + before_char = 10; + } + } + + if (c == '\'' || c == '"') { + numdelims++; + advance(subj); // limit to 1 delim for quotes + } else { + while (peek_char(subj) == c) { + numdelims++; + advance(subj); + } + } + + len = cmark_utf8proc_iterate(subj->input.data + subj->pos, + subj->input.len - subj->pos, &after_char); + if (len == -1) { + after_char = 10; + } + left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) && + !(cmark_utf8proc_is_punctuation(after_char) && + !cmark_utf8proc_is_space(before_char) && + !cmark_utf8proc_is_punctuation(before_char)); + right_flanking = numdelims > 0 && !cmark_utf8proc_is_space(before_char) && + !(cmark_utf8proc_is_punctuation(before_char) && + !cmark_utf8proc_is_space(after_char) && + !cmark_utf8proc_is_punctuation(after_char)); + if (c == '_') { + *can_open = left_flanking && + (!right_flanking || cmark_utf8proc_is_punctuation(before_char)); + *can_close = right_flanking && + (!left_flanking || cmark_utf8proc_is_punctuation(after_char)); + } else if (c == '\'' || c == '"') { + *can_open = left_flanking && !right_flanking; + *can_close = right_flanking; + } else { + *can_open = left_flanking; + *can_close = right_flanking; + } + return numdelims; +} + +/* +static void print_delimiters(subject *subj) +{ + delimiter *delim; + delim = subj->last_delim; + while (delim != NULL) { + printf("Item at stack pos %p: %d %d %d next(%p) prev(%p)\n", + (void*)delim, delim->delim_char, + delim->can_open, delim->can_close, + (void*)delim->next, (void*)delim->previous); + delim = delim->previous; + } +} +*/ + +static void remove_delimiter(subject *subj, delimiter *delim) { + if (delim == NULL) + return; + if (delim->next == NULL) { + // end of list: + assert(delim == subj->last_delim); + subj->last_delim = delim->previous; + } else { + delim->next->previous = delim->previous; + } + if (delim->previous != NULL) { + delim->previous->next = delim->next; + } + subj->mem->free(delim); +} + +static void pop_bracket(subject *subj) { + bracket *b; + if (subj->last_bracket == NULL) + return; + b = subj->last_bracket; + subj->last_bracket = subj->last_bracket->previous; + subj->mem->free(b); +} + +static void push_delimiter(subject *subj, unsigned char c, bool can_open, + bool can_close, cmark_node *inl_text) { + delimiter *delim = (delimiter *)subj->mem->calloc(1, sizeof(delimiter)); + delim->delim_char = c; + delim->can_open = can_open; + delim->can_close = can_close; + delim->inl_text = inl_text; + delim->length = inl_text->as.literal.len; + delim->previous = subj->last_delim; + delim->next = NULL; + if (delim->previous != NULL) { + delim->previous->next = delim; + } + subj->last_delim = delim; +} + +static void push_bracket(subject *subj, bool image, cmark_node *inl_text) { + bracket *b = (bracket *)subj->mem->calloc(1, sizeof(bracket)); + if (subj->last_bracket != NULL) { + subj->last_bracket->bracket_after = true; + } + b->image = image; + b->active = true; + b->inl_text = inl_text; + b->previous = subj->last_bracket; + b->previous_delimiter = subj->last_delim; + b->position = subj->pos; + b->bracket_after = false; + subj->last_bracket = b; +} + +// Assumes the subject has a c at the current position. +static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) { + bufsize_t numdelims; + cmark_node *inl_text; + bool can_open, can_close; + cmark_chunk contents; + + numdelims = scan_delims(subj, c, &can_open, &can_close); + + if (c == '\'' && smart) { + contents = cmark_chunk_literal(RIGHTSINGLEQUOTE); + } else if (c == '"' && smart) { + contents = + cmark_chunk_literal(can_close ? RIGHTDOUBLEQUOTE : LEFTDOUBLEQUOTE); + } else { + contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims); + } + + inl_text = make_str(subj->mem, contents); + + if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) { + push_delimiter(subj, c, can_open, can_close, inl_text); + } + + return inl_text; +} + +// Assumes we have a hyphen at the current position. +static cmark_node *handle_hyphen(subject *subj, bool smart) { + int startpos = subj->pos; + + advance(subj); + + if (!smart || peek_char(subj) != '-') { + return make_str(subj->mem, cmark_chunk_literal("-")); + } + + while (smart && peek_char(subj) == '-') { + advance(subj); + } + + int numhyphens = subj->pos - startpos; + int en_count = 0; + int em_count = 0; + int i; + cmark_strbuf buf = CMARK_BUF_INIT(subj->mem); + + if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes + em_count = numhyphens / 3; + } else if (numhyphens % 2 == 0) { // if divisible by 2, use all en dashes + en_count = numhyphens / 2; + } else if (numhyphens % 3 == 2) { // use one en dash at end + en_count = 1; + em_count = (numhyphens - 2) / 3; + } else { // use two en dashes at the end + en_count = 2; + em_count = (numhyphens - 4) / 3; + } + + for (i = em_count; i > 0; i--) { + cmark_strbuf_puts(&buf, EMDASH); + } + + for (i = en_count; i > 0; i--) { + cmark_strbuf_puts(&buf, ENDASH); + } + + return make_str(subj->mem, cmark_chunk_buf_detach(&buf)); +} + +// Assumes we have a period at the current position. +static cmark_node *handle_period(subject *subj, bool smart) { + advance(subj); + if (smart && peek_char(subj) == '.') { + advance(subj); + if (peek_char(subj) == '.') { + advance(subj); + return make_str(subj->mem, cmark_chunk_literal(ELLIPSES)); + } else { + return make_str(subj->mem, cmark_chunk_literal("..")); + } + } else { + return make_str(subj->mem, cmark_chunk_literal(".")); + } +} + +static void process_emphasis(subject *subj, delimiter *stack_bottom) { + delimiter *closer = subj->last_delim; + delimiter *opener; + delimiter *old_closer; + bool opener_found; + int openers_bottom_index; + delimiter *openers_bottom[6] = {stack_bottom, stack_bottom, stack_bottom, + stack_bottom, stack_bottom, stack_bottom}; + + // move back to first relevant delim. + while (closer != NULL && closer->previous != stack_bottom) { + closer = closer->previous; + } + + // now move forward, looking for closers, and handling each + while (closer != NULL) { + if (closer->can_close) { + switch (closer->delim_char) { + case '"': + openers_bottom_index = 0; + break; + case '\'': + openers_bottom_index = 1; + break; + case '_': + openers_bottom_index = 2; + break; + case '*': + openers_bottom_index = 3 + (closer->length % 3); + break; + default: + assert(false); + } + + // Now look backwards for first matching opener: + opener = closer->previous; + opener_found = false; + while (opener != NULL && opener != openers_bottom[openers_bottom_index]) { + if (opener->can_open && opener->delim_char == closer->delim_char) { + // interior closer of size 2 can't match opener of size 1 + // or of size 1 can't match 2 + if (!(closer->can_open || opener->can_close) || + ((opener->length + closer->length) % 3) != 0) { + opener_found = true; + break; + } + } + opener = opener->previous; + } + old_closer = closer; + if (closer->delim_char == '*' || closer->delim_char == '_') { + if (opener_found) { + closer = S_insert_emph(subj, opener, closer); + } else { + closer = closer->next; + } + } else if (closer->delim_char == '\'') { + cmark_chunk_free(subj->mem, &closer->inl_text->as.literal); + closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE); + if (opener_found) { + cmark_chunk_free(subj->mem, &opener->inl_text->as.literal); + opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE); + } + closer = closer->next; + } else if (closer->delim_char == '"') { + cmark_chunk_free(subj->mem, &closer->inl_text->as.literal); + closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE); + if (opener_found) { + cmark_chunk_free(subj->mem, &opener->inl_text->as.literal); + opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE); + } + closer = closer->next; + } + if (!opener_found) { + // set lower bound for future searches for openers + openers_bottom[openers_bottom_index] = old_closer->previous; + if (!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; + } + } + // free all delimiters in list until stack_bottom: + while (subj->last_delim != NULL && subj->last_delim != stack_bottom) { + remove_delimiter(subj, subj->last_delim); + } +} + +static delimiter *S_insert_emph(subject *subj, delimiter *opener, + delimiter *closer) { + delimiter *delim, *tmp_delim; + bufsize_t use_delims; + cmark_node *opener_inl = opener->inl_text; + cmark_node *closer_inl = closer->inl_text; + bufsize_t opener_num_chars = opener_inl->as.literal.len; + bufsize_t closer_num_chars = closer_inl->as.literal.len; + cmark_node *tmp, *tmpnext, *emph; + + // calculate the actual number of characters used from this closer + use_delims = (closer_num_chars >= 2 && opener_num_chars >=2) ? 2 : 1; + + // remove used characters from associated inlines. + opener_num_chars -= use_delims; + closer_num_chars -= use_delims; + opener_inl->as.literal.len = opener_num_chars; + closer_inl->as.literal.len = closer_num_chars; + + // free delimiters between opener and closer + delim = closer->previous; + while (delim != NULL && delim != opener) { + tmp_delim = delim->previous; + remove_delimiter(subj, delim); + delim = tmp_delim; + } + + // create new emph or strong, and splice it in to our inlines + // between the opener and closer + emph = use_delims == 1 ? make_emph(subj->mem) : make_strong(subj->mem); + + tmp = opener_inl->next; + while (tmp && tmp != closer_inl) { + tmpnext = tmp->next; + cmark_node_append_child(emph, tmp); + tmp = tmpnext; + } + cmark_node_insert_after(opener_inl, emph); + + // if opener has 0 characters, remove it and its associated inline + if (opener_num_chars == 0) { + cmark_node_free(opener_inl); + remove_delimiter(subj, opener); + } + + // if closer has 0 characters, remove it and its associated inline + if (closer_num_chars == 0) { + // remove empty closer inline + cmark_node_free(closer_inl); + // remove closer from list + tmp_delim = closer->next; + remove_delimiter(subj, closer); + closer = tmp_delim; + } + + return closer; +} + +// Parse backslash-escape or just a backslash, returning an inline. +static cmark_node *handle_backslash(subject *subj) { + advance(subj); + unsigned char nextchar = peek_char(subj); + if (cmark_ispunct( + nextchar)) { // only ascii symbols and newline can be escaped + advance(subj); + return make_str(subj->mem, cmark_chunk_dup(&subj->input, subj->pos - 1, 1)); + } else if (!is_eof(subj) && skip_line_end(subj)) { + return make_linebreak(subj->mem); + } else { + return make_str(subj->mem, cmark_chunk_literal("\\")); + } +} + +// Parse an entity or a regular "&" string. +// Assumes the subject has an '&' character at the current position. +static cmark_node *handle_entity(subject *subj) { + cmark_strbuf ent = CMARK_BUF_INIT(subj->mem); + bufsize_t len; + + advance(subj); + + len = houdini_unescape_ent(&ent, subj->input.data + subj->pos, + subj->input.len - subj->pos); + + if (len == 0) + return make_str(subj->mem, cmark_chunk_literal("&")); + + subj->pos += len; + return make_str(subj->mem, cmark_chunk_buf_detach(&ent)); +} + +// Clean a URL: remove surrounding whitespace and surrounding <>, +// and remove \ that escape punctuation. +cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) { + cmark_strbuf buf = CMARK_BUF_INIT(mem); + + cmark_chunk_trim(url); + + if (url->len == 0) { + cmark_chunk result = CMARK_CHUNK_EMPTY; + return result; + } + + if (url->data[0] == '<' && url->data[url->len - 1] == '>') { + houdini_unescape_html_f(&buf, url->data + 1, url->len - 2); + } else { + houdini_unescape_html_f(&buf, url->data, url->len); + } + + cmark_strbuf_unescape(&buf); + return cmark_chunk_buf_detach(&buf); +} + +cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title) { + cmark_strbuf buf = CMARK_BUF_INIT(mem); + unsigned char first, last; + + if (title->len == 0) { + cmark_chunk result = CMARK_CHUNK_EMPTY; + return result; + } + + first = title->data[0]; + last = title->data[title->len - 1]; + + // remove surrounding quotes if any: + if ((first == '\'' && last == '\'') || (first == '(' && last == ')') || + (first == '"' && last == '"')) { + houdini_unescape_html_f(&buf, title->data + 1, title->len - 2); + } else { + houdini_unescape_html_f(&buf, title->data, title->len); + } + + cmark_strbuf_unescape(&buf); + return cmark_chunk_buf_detach(&buf); +} + +// Parse an autolink or HTML tag. +// Assumes the subject has a '<' character at the current position. +static cmark_node *handle_pointy_brace(subject *subj) { + bufsize_t matchlen = 0; + cmark_chunk contents; + + advance(subj); // advance past first < + + // first try to match a URL autolink + matchlen = scan_autolink_uri(&subj->input, subj->pos); + if (matchlen > 0) { + contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); + subj->pos += matchlen; + + return make_autolink(subj->mem, contents, 0); + } + + // next try to match an email autolink + matchlen = scan_autolink_email(&subj->input, subj->pos); + if (matchlen > 0) { + contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); + subj->pos += matchlen; + + return make_autolink(subj->mem, contents, 1); + } + + // finally, try to match an html tag + matchlen = scan_html_tag(&subj->input, subj->pos); + if (matchlen > 0) { + contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1); + subj->pos += matchlen; + return make_raw_html(subj->mem, contents); + } + + // if nothing matches, just return the opening <: + return make_str(subj->mem, cmark_chunk_literal("<")); +} + +// Parse a link label. Returns 1 if successful. +// Note: unescaped brackets are not allowed in labels. +// The label begins with `[` and ends with the first `]` character +// encountered. Backticks in labels do not start code spans. +static int link_label(subject *subj, cmark_chunk *raw_label) { + bufsize_t startpos = subj->pos; + int length = 0; + unsigned char c; + + // advance past [ + if (peek_char(subj) == '[') { + advance(subj); + } else { + return 0; + } + + while ((c = peek_char(subj)) && c != '[' && c != ']') { + if (c == '\\') { + advance(subj); + length++; + if (cmark_ispunct(peek_char(subj))) { + advance(subj); + length++; + } + } else { + advance(subj); + length++; + } + if (length > MAX_LINK_LABEL_LENGTH) { + goto noMatch; + } + } + + if (c == ']') { // match found + *raw_label = + cmark_chunk_dup(&subj->input, startpos + 1, subj->pos - (startpos + 1)); + cmark_chunk_trim(raw_label); + advance(subj); // advance past ] + return 1; + } + +noMatch: + subj->pos = startpos; // rewind + return 0; +} +static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) { + bufsize_t i = offset; + size_t nb_p = 0; + + if (i < input->len && input->data[i] == '<') { + ++i; + while (i < input->len) { + if (input->data[i] == '>') { + ++i; + break; + } else if (input->data[i] == '\\') + i += 2; + else if (cmark_isspace(input->data[i])) + return -1; + else + ++i; + } + } else { + while (i < input->len) { + if (input->data[i] == '\\') + i += 2; + else if (input->data[i] == '(') { + ++nb_p; + ++i; + } else if (input->data[i] == ')') { + if (nb_p == 0) + break; + --nb_p; + ++i; + } else if (cmark_isspace(input->data[i])) + break; + else + ++i; + } + } + + if (i >= input->len) + return -1; + return i - offset; +} +// Return a link, an image, or a literal close bracket. +static cmark_node *handle_close_bracket(subject *subj) { + bufsize_t initial_pos, after_link_text_pos; + bufsize_t starturl, endurl, starttitle, endtitle, endall; + bufsize_t n; + bufsize_t sps; + cmark_reference *ref = NULL; + cmark_chunk url_chunk, title_chunk; + cmark_chunk url, title; + bracket *opener; + cmark_node *inl; + cmark_chunk raw_label; + int found_label; + cmark_node *tmp, *tmpnext; + bool is_image; + + advance(subj); // advance past ] + initial_pos = subj->pos; + + // get last [ or ![ + opener = subj->last_bracket; + + if (opener == NULL) { + return make_str(subj->mem, cmark_chunk_literal("]")); + } + + if (!opener->active) { + // take delimiter off stack + pop_bracket(subj); + return make_str(subj->mem, cmark_chunk_literal("]")); + } + + // If we got here, we matched a potential link/image text. + // Now we check to see if it's a link/image. + is_image = opener->image; + + after_link_text_pos = subj->pos; + + // First, look for an inline link. + if (peek_char(subj) == '(' && + ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) && + ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) { + + // try to parse an explicit link: + starturl = subj->pos + 1 + sps; // after ( + endurl = starturl + n; + starttitle = endurl + scan_spacechars(&subj->input, endurl); + + // ensure there are spaces btw url and title + endtitle = (starttitle == endurl) + ? starttitle + : starttitle + scan_link_title(&subj->input, starttitle); + + endall = endtitle + scan_spacechars(&subj->input, endtitle); + + if (peek_at(subj, endall) == ')') { + subj->pos = endall + 1; + + url_chunk = cmark_chunk_dup(&subj->input, starturl, endurl - starturl); + title_chunk = + cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle); + url = cmark_clean_url(subj->mem, &url_chunk); + title = cmark_clean_title(subj->mem, &title_chunk); + cmark_chunk_free(subj->mem, &url_chunk); + cmark_chunk_free(subj->mem, &title_chunk); + goto match; + + } else { + // it could still be a shortcut reference link + subj->pos = after_link_text_pos; + } + } + + // Next, look for a following [link label] that matches in refmap. + // skip spaces + raw_label = cmark_chunk_literal(""); + found_label = link_label(subj, &raw_label); + if (!found_label) { + // If we have a shortcut reference link, back up + // to before the spacse we skipped. + subj->pos = initial_pos; + } + + if ((!found_label || raw_label.len == 0) && !opener->bracket_after) { + cmark_chunk_free(subj->mem, &raw_label); + raw_label = cmark_chunk_dup(&subj->input, opener->position, + initial_pos - opener->position - 1); + found_label = true; + } + + if (found_label) { + ref = cmark_reference_lookup(subj->refmap, &raw_label); + cmark_chunk_free(subj->mem, &raw_label); + } + + if (ref != NULL) { // found + url = chunk_clone(subj->mem, &ref->url); + title = chunk_clone(subj->mem, &ref->title); + goto match; + } else { + goto noMatch; + } + +noMatch: + // If we fall through to here, it means we didn't match a link: + pop_bracket(subj); // remove this opener from delimiter list + subj->pos = initial_pos; + return make_str(subj->mem, cmark_chunk_literal("]")); + +match: + inl = make_simple(subj->mem, is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK); + inl->as.link.url = url; + inl->as.link.title = title; + cmark_node_insert_before(opener->inl_text, inl); + // Add link text: + tmp = opener->inl_text->next; + while (tmp) { + tmpnext = tmp->next; + cmark_node_append_child(inl, tmp); + tmp = tmpnext; + } + + // Free the bracket [: + cmark_node_free(opener->inl_text); + + process_emphasis(subj, opener->previous_delimiter); + pop_bracket(subj); + + // Now, if we have a link, we also want to deactivate earlier link + // delimiters. (This code can be removed if we decide to allow links + // inside links.) + if (!is_image) { + opener = subj->last_bracket; + while (opener != NULL) { + if (!opener->image) { + if (!opener->active) { + break; + } else { + opener->active = false; + } + } + opener = opener->previous; + } + } + + return NULL; +} + +// Parse a hard or soft linebreak, returning an inline. +// Assumes the subject has a cr or newline at the current position. +static cmark_node *handle_newline(subject *subj) { + bufsize_t nlpos = subj->pos; + // skip over cr, crlf, or lf: + if (peek_at(subj, subj->pos) == '\r') { + advance(subj); + } + if (peek_at(subj, subj->pos) == '\n') { + advance(subj); + } + // skip spaces at beginning of line + skip_spaces(subj); + if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' && + peek_at(subj, nlpos - 2) == ' ') { + return make_linebreak(subj->mem); + } else { + return make_softbreak(subj->mem); + } +} + +static bufsize_t subject_find_special_char(subject *subj, int options) { + // "\r\n\\`&_*[]pos + 1; + + while (n < subj->input.len) { + if (SPECIAL_CHARS[subj->input.data[n]]) + return n; + if (options & CMARK_OPT_SMART && SMART_PUNCT_CHARS[subj->input.data[n]]) + return n; + n++; + } + + return subj->input.len; +} + +// Parse an inline, advancing subject, and add it as a child of parent. +// Return 0 if no inline can be parsed, 1 otherwise. +static int parse_inline(subject *subj, cmark_node *parent, int options) { + cmark_node *new_inl = NULL; + cmark_chunk contents; + unsigned char c; + bufsize_t endpos; + c = peek_char(subj); + if (c == 0) { + return 0; + } + switch (c) { + case '\r': + case '\n': + new_inl = handle_newline(subj); + break; + case '`': + new_inl = handle_backticks(subj); + break; + case '\\': + new_inl = handle_backslash(subj); + break; + case '&': + new_inl = handle_entity(subj); + break; + case '<': + new_inl = handle_pointy_brace(subj); + break; + case '*': + case '_': + case '\'': + case '"': + new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0); + break; + case '-': + new_inl = handle_hyphen(subj, (options & CMARK_OPT_SMART) != 0); + break; + case '.': + new_inl = handle_period(subj, (options & CMARK_OPT_SMART) != 0); + break; + case '[': + advance(subj); + new_inl = make_str(subj->mem, cmark_chunk_literal("[")); + push_bracket(subj, false, new_inl); + break; + case ']': + new_inl = handle_close_bracket(subj); + break; + case '!': + advance(subj); + if (peek_char(subj) == '[') { + advance(subj); + new_inl = make_str(subj->mem, cmark_chunk_literal("![")); + push_bracket(subj, true, new_inl); + } else { + new_inl = make_str(subj->mem, cmark_chunk_literal("!")); + } + break; + default: + endpos = subject_find_special_char(subj, options); + contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos); + subj->pos = endpos; + + // if we're at a newline, strip trailing spaces. + if (S_is_line_end_char(peek_char(subj))) { + cmark_chunk_rtrim(&contents); + } + + new_inl = make_str(subj->mem, contents); + } + if (new_inl != NULL) { + cmark_node_append_child(parent, new_inl); + } + + return 1; +} + +// Parse inlines from parent's string_content, adding as children of parent. +extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, + cmark_reference_map *refmap, int options) { + subject subj; + subject_from_buf(mem, &subj, &parent->content, refmap); + cmark_chunk_rtrim(&subj.input); + + while (!is_eof(&subj) && parse_inline(&subj, parent, options)) + ; + + process_emphasis(&subj, NULL); + // free bracket and delim stack + while (subj.last_delim) { + pop_bracket(&subj); + } + while (subj.last_bracket) { + pop_bracket(&subj); + } +} + +// Parse zero or more space characters, including at most one newline. +static void spnl(subject *subj) { + skip_spaces(subj); + if (skip_line_end(subj)) { + skip_spaces(subj); + } +} + +// Parse reference. Assumes string begins with '[' character. +// Modify refmap if a reference is encountered. +// Return 0 if no reference found, otherwise position of subject +// after reference is parsed. +bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, + cmark_reference_map *refmap) { + subject subj; + + cmark_chunk lab; + cmark_chunk url; + cmark_chunk title; + + bufsize_t matchlen = 0; + bufsize_t beforetitle; + + subject_from_buf(mem, &subj, input, NULL); + + // parse label: + if (!link_label(&subj, &lab) || lab.len == 0) + return 0; + + // colon: + if (peek_char(&subj) == ':') { + advance(&subj); + } else { + return 0; + } + + // parse link url: + spnl(&subj); + matchlen = manual_scan_link_url(&subj.input, subj.pos); + if (matchlen > 0) { + url = cmark_chunk_dup(&subj.input, subj.pos, matchlen); + subj.pos += matchlen; + } else { + return 0; + } + + // parse optional link_title + beforetitle = subj.pos; + spnl(&subj); + matchlen = scan_link_title(&subj.input, subj.pos); + if (matchlen) { + title = cmark_chunk_dup(&subj.input, subj.pos, matchlen); + subj.pos += matchlen; + } else { + subj.pos = beforetitle; + title = cmark_chunk_literal(""); + } + + // parse final spaces and newline: + skip_spaces(&subj); + if (!skip_line_end(&subj)) { + if (matchlen) { // try rewinding before title + subj.pos = beforetitle; + skip_spaces(&subj); + if (!skip_line_end(&subj)) { + return 0; + } + } else { + return 0; + } + } + // insert reference into refmap + cmark_reference_create(refmap, &lab, &url, &title); + return subj.pos; +} + + +static const int8_t utf8proc_utf8class[256] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0}; + +static void encode_unknown(cmark_strbuf *buf) { + static const uint8_t repl[] = {239, 191, 189}; + cmark_strbuf_put(buf, repl, 3); +} + +static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) { + int length, i; + + if (!str_len) + return 0; + + length = utf8proc_utf8class[str[0]]; + + if (!length) + return -1; + + if (str_len >= 0 && (bufsize_t)length > str_len) + return -str_len; + + for (i = 1; i < length; i++) { + if ((str[i] & 0xC0) != 0x80) + return -i; + } + + return length; +} + +// Validate a single UTF-8 character according to RFC 3629. +static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) { + int length = utf8proc_utf8class[str[0]]; + + if (!length) + return -1; + + if ((bufsize_t)length > str_len) + return -str_len; + + switch (length) { + case 2: + if ((str[1] & 0xC0) != 0x80) + return -1; + if (str[0] < 0xC2) { + // Overlong + return -length; + } + break; + + case 3: + if ((str[1] & 0xC0) != 0x80) + return -1; + if ((str[2] & 0xC0) != 0x80) + return -2; + if (str[0] == 0xE0) { + if (str[1] < 0xA0) { + // Overlong + return -length; + } + } else if (str[0] == 0xED) { + if (str[1] >= 0xA0) { + // Surrogate + return -length; + } + } + break; + + case 4: + if ((str[1] & 0xC0) != 0x80) + return -1; + if ((str[2] & 0xC0) != 0x80) + return -2; + if ((str[3] & 0xC0) != 0x80) + return -3; + if (str[0] == 0xF0) { + if (str[1] < 0x90) { + // Overlong + return -length; + } + } else if (str[0] >= 0xF4) { + if (str[0] > 0xF4 || str[1] >= 0x90) { + // Above 0x10FFFF + return -length; + } + } + break; + } + + return length; +} + +void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line, + bufsize_t size) { + bufsize_t i = 0; + + while (i < size) { + bufsize_t org = i; + int charlen = 0; + + while (i < size) { + if (line[i] < 0x80 && line[i] != 0) { + i++; + } else if (line[i] >= 0x80) { + charlen = utf8proc_valid(line + i, size - i); + if (charlen < 0) { + charlen = -charlen; + break; + } + i += charlen; + } else if (line[i] == 0) { + // ASCII NUL is technically valid but rejected + // for security reasons. + charlen = 1; + break; + } + } + + if (i > org) { + cmark_strbuf_put(ob, line + org, i - org); + } + + if (i >= size) { + break; + } else { + // Invalid UTF-8 + encode_unknown(ob); + i += charlen; + } + } +} + +int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, + int32_t *dst) { + int length; + int32_t uc = -1; + + *dst = -1; + length = utf8proc_charlen(str, str_len); + if (length < 0) + return -1; + + switch (length) { + case 1: + uc = str[0]; + break; + case 2: + uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F); + if (uc < 0x80) + uc = -1; + break; + case 3: + uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) + (str[2] & 0x3F); + if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000)) + uc = -1; + break; + case 4: + uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) + + ((str[2] & 0x3F) << 6) + (str[3] & 0x3F); + if (uc < 0x10000 || uc >= 0x110000) + uc = -1; + break; + } + + if (uc < 0) + return -1; + + *dst = uc; + return length; +} + +void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { + uint8_t dst[4]; + bufsize_t len = 0; + + assert(uc >= 0); + + if (uc < 0x80) { + dst[0] = (uint8_t)(uc); + len = 1; + } else if (uc < 0x800) { + dst[0] = (uint8_t)(0xC0 + (uc >> 6)); + dst[1] = 0x80 + (uc & 0x3F); + len = 2; + } else if (uc == 0xFFFF) { + dst[0] = 0xFF; + len = 1; + } else if (uc == 0xFFFE) { + dst[0] = 0xFE; + len = 1; + } else if (uc < 0x10000) { + dst[0] = (uint8_t)(0xE0 + (uc >> 12)); + dst[1] = 0x80 + ((uc >> 6) & 0x3F); + dst[2] = 0x80 + (uc & 0x3F); + len = 3; + } else if (uc < 0x110000) { + dst[0] = (uint8_t)(0xF0 + (uc >> 18)); + dst[1] = 0x80 + ((uc >> 12) & 0x3F); + dst[2] = 0x80 + ((uc >> 6) & 0x3F); + dst[3] = 0x80 + (uc & 0x3F); + len = 4; + } else { + encode_unknown(buf); + return; + } + + cmark_strbuf_put(buf, dst, len); +} + +void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, + bufsize_t len) { + int32_t c; + +#define bufpush(x) cmark_utf8proc_encode_char(x, dest) + + while (len > 0) { + bufsize_t char_len = cmark_utf8proc_iterate(str, len, &c); + + if (char_len >= 0) { +#include "case_fold_switch.inc" + } else { + encode_unknown(dest); + char_len = -char_len; + } + + str += char_len; + len -= char_len; + } +} + +// matches anything in the Zs class, plus LF, CR, TAB, FF. +int cmark_utf8proc_is_space(int32_t uc) { + return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 || + uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 || + uc == 8287 || uc == 12288); +} + +// matches anything in the P[cdefios] classes. +int cmark_utf8proc_is_punctuation(int32_t uc) { + return ( + (uc < 128 && cmark_ispunct((char)uc)) || uc == 161 || uc == 167 || + uc == 171 || uc == 182 || uc == 183 || uc == 187 || uc == 191 || + uc == 894 || uc == 903 || (uc >= 1370 && uc <= 1375) || uc == 1417 || + uc == 1418 || uc == 1470 || uc == 1472 || uc == 1475 || uc == 1478 || + uc == 1523 || uc == 1524 || uc == 1545 || uc == 1546 || uc == 1548 || + uc == 1549 || uc == 1563 || uc == 1566 || uc == 1567 || + (uc >= 1642 && uc <= 1645) || uc == 1748 || (uc >= 1792 && uc <= 1805) || + (uc >= 2039 && uc <= 2041) || (uc >= 2096 && uc <= 2110) || uc == 2142 || + uc == 2404 || uc == 2405 || uc == 2416 || uc == 2800 || uc == 3572 || + uc == 3663 || uc == 3674 || uc == 3675 || (uc >= 3844 && uc <= 3858) || + uc == 3860 || (uc >= 3898 && uc <= 3901) || uc == 3973 || + (uc >= 4048 && uc <= 4052) || uc == 4057 || uc == 4058 || + (uc >= 4170 && uc <= 4175) || uc == 4347 || (uc >= 4960 && uc <= 4968) || + uc == 5120 || uc == 5741 || uc == 5742 || uc == 5787 || uc == 5788 || + (uc >= 5867 && uc <= 5869) || uc == 5941 || uc == 5942 || + (uc >= 6100 && uc <= 6102) || (uc >= 6104 && uc <= 6106) || + (uc >= 6144 && uc <= 6154) || uc == 6468 || uc == 6469 || uc == 6686 || + uc == 6687 || (uc >= 6816 && uc <= 6822) || (uc >= 6824 && uc <= 6829) || + (uc >= 7002 && uc <= 7008) || (uc >= 7164 && uc <= 7167) || + (uc >= 7227 && uc <= 7231) || uc == 7294 || uc == 7295 || + (uc >= 7360 && uc <= 7367) || uc == 7379 || (uc >= 8208 && uc <= 8231) || + (uc >= 8240 && uc <= 8259) || (uc >= 8261 && uc <= 8273) || + (uc >= 8275 && uc <= 8286) || uc == 8317 || uc == 8318 || uc == 8333 || + uc == 8334 || (uc >= 8968 && uc <= 8971) || uc == 9001 || uc == 9002 || + (uc >= 10088 && uc <= 10101) || uc == 10181 || uc == 10182 || + (uc >= 10214 && uc <= 10223) || (uc >= 10627 && uc <= 10648) || + (uc >= 10712 && uc <= 10715) || uc == 10748 || uc == 10749 || + (uc >= 11513 && uc <= 11516) || uc == 11518 || uc == 11519 || + uc == 11632 || (uc >= 11776 && uc <= 11822) || + (uc >= 11824 && uc <= 11842) || (uc >= 12289 && uc <= 12291) || + (uc >= 12296 && uc <= 12305) || (uc >= 12308 && uc <= 12319) || + uc == 12336 || uc == 12349 || uc == 12448 || uc == 12539 || uc == 42238 || + uc == 42239 || (uc >= 42509 && uc <= 42511) || uc == 42611 || + uc == 42622 || (uc >= 42738 && uc <= 42743) || + (uc >= 43124 && uc <= 43127) || uc == 43214 || uc == 43215 || + (uc >= 43256 && uc <= 43258) || uc == 43310 || uc == 43311 || + uc == 43359 || (uc >= 43457 && uc <= 43469) || uc == 43486 || + uc == 43487 || (uc >= 43612 && uc <= 43615) || uc == 43742 || + uc == 43743 || uc == 43760 || uc == 43761 || uc == 44011 || uc == 64830 || + uc == 64831 || (uc >= 65040 && uc <= 65049) || + (uc >= 65072 && uc <= 65106) || (uc >= 65108 && uc <= 65121) || + uc == 65123 || uc == 65128 || uc == 65130 || uc == 65131 || + (uc >= 65281 && uc <= 65283) || (uc >= 65285 && uc <= 65290) || + (uc >= 65292 && uc <= 65295) || uc == 65306 || uc == 65307 || + uc == 65311 || uc == 65312 || (uc >= 65339 && uc <= 65341) || + uc == 65343 || uc == 65371 || uc == 65373 || + (uc >= 65375 && uc <= 65381) || (uc >= 65792 && uc <= 65794) || + uc == 66463 || uc == 66512 || uc == 66927 || uc == 67671 || uc == 67871 || + uc == 67903 || (uc >= 68176 && uc <= 68184) || uc == 68223 || + (uc >= 68336 && uc <= 68342) || (uc >= 68409 && uc <= 68415) || + (uc >= 68505 && uc <= 68508) || (uc >= 69703 && uc <= 69709) || + uc == 69819 || uc == 69820 || (uc >= 69822 && uc <= 69825) || + (uc >= 69952 && uc <= 69955) || uc == 70004 || uc == 70005 || + (uc >= 70085 && uc <= 70088) || uc == 70093 || + (uc >= 70200 && uc <= 70205) || uc == 70854 || + (uc >= 71105 && uc <= 71113) || (uc >= 71233 && uc <= 71235) || + (uc >= 74864 && uc <= 74868) || uc == 92782 || uc == 92783 || + uc == 92917 || (uc >= 92983 && uc <= 92987) || uc == 92996 || + uc == 113823); +} + +static unsigned int refhash(const unsigned char *link_ref) { + unsigned int hash = 0; + + while (*link_ref) + hash = (*link_ref++) + (hash << 6) + (hash << 16) - hash; + + return hash; +} + +static void reference_free(cmark_reference_map *map, cmark_reference *ref) { + cmark_mem *mem = map->mem; + if (ref != NULL) { + mem->free(ref->label); + cmark_chunk_free(mem, &ref->url); + cmark_chunk_free(mem, &ref->title); + mem->free(ref); + } +} + +// normalize reference: collapse internal whitespace to single space, +// remove leading/trailing whitespace, case fold +// Return NULL if the reference name is actually empty (i.e. composed +// solely from whitespace) +static unsigned char *normalize_reference(cmark_mem *mem, cmark_chunk *ref) { + cmark_strbuf normalized = CMARK_BUF_INIT(mem); + unsigned char *result; + + if (ref == NULL) + return NULL; + + if (ref->len == 0) + return NULL; + + cmark_utf8proc_case_fold(&normalized, ref->data, ref->len); + cmark_strbuf_trim(&normalized); + cmark_strbuf_normalize_whitespace(&normalized); + + result = cmark_strbuf_detach(&normalized); + assert(result); + + if (result[0] == '\0') { + mem->free(result); + return NULL; + } + + return result; +} + +static void add_reference(cmark_reference_map *map, cmark_reference *ref) { + cmark_reference *t = ref->next = map->table[ref->hash % REFMAP_SIZE]; + + while (t) { + if (t->hash == ref->hash && !strcmp((char *)t->label, (char *)ref->label)) { + reference_free(map, ref); + return; + } + + t = t->next; + } + + map->table[ref->hash % REFMAP_SIZE] = ref; +} + +void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, + cmark_chunk *url, cmark_chunk *title) { + cmark_reference *ref; + unsigned char *reflabel = normalize_reference(map->mem, label); + + /* empty reference name, or composed from only whitespace */ + if (reflabel == NULL) + return; + + ref = (cmark_reference *)map->mem->calloc(1, sizeof(*ref)); + ref->label = reflabel; + ref->hash = refhash(ref->label); + ref->url = cmark_clean_url(map->mem, url); + ref->title = cmark_clean_title(map->mem, title); + ref->next = NULL; + + add_reference(map, ref); +} + +// Returns reference if refmap contains a reference with matching +// label, otherwise NULL. +cmark_reference *cmark_reference_lookup(cmark_reference_map *map, + cmark_chunk *label) { + cmark_reference *ref = NULL; + unsigned char *norm; + unsigned int hash; + + if (label->len < 1 || label->len > MAX_LINK_LABEL_LENGTH) + return NULL; + + if (map == NULL) + return NULL; + + norm = normalize_reference(map->mem, label); + if (norm == NULL) + return NULL; + + hash = refhash(norm); + ref = map->table[hash % REFMAP_SIZE]; + + while (ref) { + if (ref->hash == hash && !strcmp((char *)ref->label, (char *)norm)) + break; + ref = ref->next; + } + + map->mem->free(norm); + return ref; +} + +void cmark_reference_map_free(cmark_reference_map *map) { + unsigned int i; + + if (map == NULL) + return; + + for (i = 0; i < REFMAP_SIZE; ++i) { + cmark_reference *ref = map->table[i]; + cmark_reference *next; + + while (ref) { + next = ref->next; + reference_free(map, ref); + ref = next; + } + } + + map->mem->free(map); +} + +cmark_reference_map *cmark_reference_map_new(cmark_mem *mem) { + cmark_reference_map *map = + (cmark_reference_map *)mem->calloc(1, sizeof(cmark_reference_map)); + map->mem = mem; + return map; +} + + + +/** + * Block parsing implementation. + * + * For a high-level overview of the block parsing process, + * see http://spec.commonmark.org/0.24/#phase-1-block-structure + */ + + +#define CODE_INDENT 4 +#define TAB_STOP 4 + +#ifndef MIN +#define MIN(x, y) ((x < y) ? x : y) +#endif + +#define peek_at(i, n) (i)->data[n] + +static bool S_last_line_blank(const cmark_node *node) { + return (node->flags & CMARK_NODE__LAST_LINE_BLANK) != 0; +} + +static CMARK_INLINE cmark_node_type S_type(const cmark_node *node) { + return (cmark_node_type)node->type; +} + +static void S_set_last_line_blank(cmark_node *node, bool is_blank) { + if (is_blank) + node->flags |= CMARK_NODE__LAST_LINE_BLANK; + else + node->flags &= ~CMARK_NODE__LAST_LINE_BLANK; +} + +static CMARK_INLINE bool S_is_space_or_tab(char c) { + return (c == ' ' || c == '\t'); +} + +static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, + size_t len, bool eof); + +static void S_process_line(cmark_parser *parser, const unsigned char *buffer, + bufsize_t bytes); + +static cmark_node *make_block(cmark_mem *mem, cmark_node_type tag, + int start_line, int start_column) { + cmark_node *e; + + e = (cmark_node *)mem->calloc(1, sizeof(*e)); + cmark_strbuf_init(mem, &e->content, 32); + e->type = (uint16_t)tag; + e->flags = CMARK_NODE__OPEN; + e->start_line = start_line; + e->start_column = start_column; + e->end_line = start_line; + + return e; +} + +// Create a root document node. +static cmark_node *make_document(cmark_mem *mem) { + cmark_node *e = make_block(mem, CMARK_NODE_DOCUMENT, 1, 1); + return e; +} + +cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { + cmark_parser *parser = (cmark_parser *)mem->calloc(1, sizeof(cmark_parser)); + parser->mem = mem; + + cmark_node *document = make_document(mem); + + cmark_strbuf_init(mem, &parser->curline, 256); + cmark_strbuf_init(mem, &parser->linebuf, 0); + + parser->refmap = cmark_reference_map_new(mem); + parser->root = document; + parser->current = document; + parser->line_number = 0; + parser->offset = 0; + parser->column = 0; + parser->first_nonspace = 0; + parser->first_nonspace_column = 0; + parser->indent = 0; + parser->blank = false; + parser->partially_consumed_tab = false; + parser->last_line_length = 0; + parser->options = options; + parser->last_buffer_ended_with_cr = false; + + return parser; +} + +cmark_parser *cmark_parser_new(int options) { + extern cmark_mem DEFAULT_MEM_ALLOCATOR; + return cmark_parser_new_with_mem(options, &DEFAULT_MEM_ALLOCATOR); +} + +void cmark_parser_free(cmark_parser *parser) { + cmark_mem *mem = parser->mem; + cmark_strbuf_free(&parser->curline); + cmark_strbuf_free(&parser->linebuf); + cmark_reference_map_free(parser->refmap); + mem->free(parser); +} + +static cmark_node *finalize(cmark_parser *parser, cmark_node *b); + +// Returns true if line has only space characters, else false. +static bool is_blank(cmark_strbuf *s, bufsize_t offset) { + while (offset < s->size) { + switch (s->ptr[offset]) { + case '\r': + case '\n': + return true; + case ' ': + offset++; + break; + case '\t': + offset++; + break; + default: + return false; + } + } + + return true; +} + +static CMARK_INLINE bool can_contain(cmark_node_type parent_type, + cmark_node_type child_type) { + return (parent_type == CMARK_NODE_DOCUMENT || + parent_type == CMARK_NODE_BLOCK_QUOTE || + parent_type == CMARK_NODE_ITEM || + (parent_type == CMARK_NODE_LIST && child_type == CMARK_NODE_ITEM)); +} + +static CMARK_INLINE bool accepts_lines(cmark_node_type block_type) { + return (block_type == CMARK_NODE_PARAGRAPH || + block_type == CMARK_NODE_HEADING || + block_type == CMARK_NODE_CODE_BLOCK); +} + +static CMARK_INLINE bool contains_inlines(cmark_node_type block_type) { + return (block_type == CMARK_NODE_PARAGRAPH || + block_type == CMARK_NODE_HEADING); +} + +static void add_line(cmark_node *node, cmark_chunk *ch, cmark_parser *parser) { + int chars_to_tab; + int i; + assert(node->flags & CMARK_NODE__OPEN); + if (parser->partially_consumed_tab) { + parser->offset += 1; // skip over tab + // add space characters: + chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); + for (i = 0; i < chars_to_tab; i++) { + cmark_strbuf_putc(&node->content, ' '); + } + } + cmark_strbuf_put(&node->content, ch->data + parser->offset, + ch->len - parser->offset); +} + +static void remove_trailing_blank_lines(cmark_strbuf *ln) { + bufsize_t i; + unsigned char c; + + for (i = ln->size - 1; i >= 0; --i) { + c = ln->ptr[i]; + + if (c != ' ' && c != '\t' && !S_is_line_end_char(c)) + break; + } + + if (i < 0) { + cmark_strbuf_clear(ln); + return; + } + + for (; i < ln->size; ++i) { + c = ln->ptr[i]; + + if (!S_is_line_end_char(c)) + continue; + + cmark_strbuf_truncate(ln, i); + break; + } +} + +// Check to see if a node ends with a blank line, descending +// if needed into lists and sublists. +static bool ends_with_blank_line(cmark_node *node) { + cmark_node *cur = node; + while (cur != NULL) { + if (S_last_line_blank(cur)) { + return true; + } + if (S_type(cur) == CMARK_NODE_LIST || S_type(cur) == CMARK_NODE_ITEM) { + cur = cur->last_child; + } else { + cur = NULL; + } + } + return false; +} + +static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { + bufsize_t pos; + cmark_node *item; + cmark_node *subitem; + cmark_node *parent; + + parent = b->parent; + assert(b->flags & + CMARK_NODE__OPEN); // shouldn't call finalize on closed blocks + b->flags &= ~CMARK_NODE__OPEN; + + if (parser->curline.size == 0) { + // end of input - line number has not been incremented + b->end_line = parser->line_number; + b->end_column = parser->last_line_length; + } else if (S_type(b) == CMARK_NODE_DOCUMENT || + (S_type(b) == CMARK_NODE_CODE_BLOCK && b->as.code.fenced) || + (S_type(b) == CMARK_NODE_HEADING && b->as.heading.setext)) { + b->end_line = parser->line_number; + b->end_column = parser->curline.size; + if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\n') + b->end_column -= 1; + if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\r') + b->end_column -= 1; + } else { + b->end_line = parser->line_number - 1; + b->end_column = parser->last_line_length; + } + + cmark_strbuf *node_content = &b->content; + + switch (S_type(b)) { + case CMARK_NODE_PARAGRAPH: + while (cmark_strbuf_at(node_content, 0) == '[' && + (pos = cmark_parse_reference_inline(parser->mem, node_content, + parser->refmap))) { + + cmark_strbuf_drop(node_content, pos); + } + if (is_blank(node_content, 0)) { + // remove blank node (former reference def) + cmark_node_free(b); + } + break; + + case CMARK_NODE_CODE_BLOCK: + if (!b->as.code.fenced) { // indented code + remove_trailing_blank_lines(node_content); + cmark_strbuf_putc(node_content, '\n'); + } else { + // first line of contents becomes info + for (pos = 0; pos < node_content->size; ++pos) { + if (S_is_line_end_char(node_content->ptr[pos])) + break; + } + assert(pos < node_content->size); + + cmark_strbuf tmp = CMARK_BUF_INIT(parser->mem); + houdini_unescape_html_f(&tmp, node_content->ptr, pos); + cmark_strbuf_trim(&tmp); + cmark_strbuf_unescape(&tmp); + b->as.code.info = cmark_chunk_buf_detach(&tmp); + + if (node_content->ptr[pos] == '\r') + pos += 1; + if (node_content->ptr[pos] == '\n') + pos += 1; + cmark_strbuf_drop(node_content, pos); + } + b->as.code.literal = cmark_chunk_buf_detach(node_content); + break; + + case CMARK_NODE_HTML_BLOCK: + b->as.literal = cmark_chunk_buf_detach(node_content); + break; + + case CMARK_NODE_LIST: // determine tight/loose status + b->as.list.tight = true; // tight by default + item = b->first_child; + + while (item) { + // check for non-final non-empty list item ending with blank line: + if (S_last_line_blank(item) && item->next) { + b->as.list.tight = false; + break; + } + // recurse into children of list item, to see if there are + // spaces between them: + subitem = item->first_child; + while (subitem) { + if (ends_with_blank_line(subitem) && (item->next || subitem->next)) { + b->as.list.tight = false; + break; + } + subitem = subitem->next; + } + if (!(b->as.list.tight)) { + break; + } + item = item->next; + } + + break; + + default: + break; + } + + return parent; +} + +// Add a node as child of another. Return pointer to child. +static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, + cmark_node_type block_type, int start_column) { + assert(parent); + + // if 'parent' isn't the kind of node that can accept this child, + // then back up til we hit a node that can. + while (!can_contain(S_type(parent), block_type)) { + parent = finalize(parser, parent); + } + + cmark_node *child = + make_block(parser->mem, block_type, parser->line_number, start_column); + child->parent = parent; + + if (parent->last_child) { + parent->last_child->next = child; + child->prev = parent->last_child; + } else { + parent->first_child = child; + child->prev = NULL; + } + parent->last_child = child; + return child; +} + +// Walk through node and all children, recursively, parsing +// string content into inline content where appropriate. +static void process_inlines(cmark_mem *mem, cmark_node *root, + cmark_reference_map *refmap, int options) { + cmark_iter *iter = cmark_iter_new(root); + cmark_node *cur; + cmark_event_type ev_type; + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + if (ev_type == CMARK_EVENT_ENTER) { + if (contains_inlines(S_type(cur))) { + cmark_parse_inlines(mem, cur, refmap, options); + } + } + } + + cmark_iter_free(iter); +} + +// Attempts to parse a list item marker (bullet or enumerated). +// On success, returns length of the marker, and populates +// data with the details. On failure, returns 0. +static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, + bufsize_t pos, bool interrupts_paragraph, + cmark_list **dataptr) { + unsigned char c; + bufsize_t startpos; + cmark_list *data; + bufsize_t i; + + startpos = pos; + c = peek_at(input, pos); + + if (c == '*' || c == '-' || c == '+') { + pos++; + if (!cmark_isspace(peek_at(input, pos))) { + return 0; + } + + if (interrupts_paragraph) { + i = pos; + // require non-blank content after list marker: + while (S_is_space_or_tab(peek_at(input, i))) { + i++; + } + if (peek_at(input, i) == '\n') { + return 0; + } + } + + data = (cmark_list *)mem->calloc(1, sizeof(*data)); + data->marker_offset = 0; // will be adjusted later + data->list_type = CMARK_BULLET_LIST; + data->bullet_char = c; + data->start = 1; + data->delimiter = CMARK_PERIOD_DELIM; + data->tight = false; + } else if (cmark_isdigit(c)) { + int start = 0; + int digits = 0; + + do { + start = (10 * start) + (peek_at(input, pos) - '0'); + pos++; + digits++; + // We limit to 9 digits to avoid overflow, + // assuming max int is 2^31 - 1 + // This also seems to be the limit for 'start' in some browsers. + } while (digits < 9 && cmark_isdigit(peek_at(input, pos))); + + if (interrupts_paragraph && start != 1) { + return 0; + } + c = peek_at(input, pos); + if (c == '.' || c == ')') { + pos++; + if (!cmark_isspace(peek_at(input, pos))) { + return 0; + } + if (interrupts_paragraph) { + // require non-blank content after list marker: + i = pos; + while (S_is_space_or_tab(peek_at(input, i))) { + i++; + } + if (S_is_line_end_char(peek_at(input, i))) { + return 0; + } + } + + data = (cmark_list *)mem->calloc(1, sizeof(*data)); + data->marker_offset = 0; // will be adjusted later + data->list_type = CMARK_ORDERED_LIST; + data->bullet_char = 0; + data->start = start; + data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM); + data->tight = false; + } else { + return 0; + } + } else { + return 0; + } + + *dataptr = data; + return (pos - startpos); +} + +// Return 1 if list item belongs in list, else 0. +static int lists_match(cmark_list *list_data, cmark_list *item_data) { + return (list_data->list_type == item_data->list_type && + list_data->delimiter == item_data->delimiter && + // list_data->marker_offset == item_data.marker_offset && + list_data->bullet_char == item_data->bullet_char); +} + +static cmark_node *finalize_document(cmark_parser *parser) { + while (parser->current != parser->root) { + parser->current = finalize(parser, parser->current); + } + + finalize(parser, parser->root); + process_inlines(parser->mem, parser->root, parser->refmap, parser->options); + + return parser->root; +} + +cmark_node *cmark_parse_file(FILE *f, int options) { + unsigned char buffer[4096]; + cmark_parser *parser = cmark_parser_new(options); + size_t bytes; + cmark_node *document; + + while ((bytes = fread(buffer, 1, sizeof(buffer), f)) > 0) { + bool eof = bytes < sizeof(buffer); + S_parser_feed(parser, buffer, bytes, eof); + if (eof) { + break; + } + } + + document = cmark_parser_finish(parser); + cmark_parser_free(parser); + return document; +} + +cmark_node *cmark_parse_document(const char *buffer, size_t len, int options) { + cmark_parser *parser = cmark_parser_new(options); + cmark_node *document; + + S_parser_feed(parser, (const unsigned char *)buffer, len, true); + + document = cmark_parser_finish(parser); + cmark_parser_free(parser); + return document; +} + +void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) { + S_parser_feed(parser, (const unsigned char *)buffer, len, false); +} + +static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, + size_t len, bool eof) { + const unsigned char *end = buffer + len; + static const uint8_t repl[] = {239, 191, 189}; + + if (parser->last_buffer_ended_with_cr && *buffer == '\n') { + // skip NL if last buffer ended with CR ; see #117 + buffer++; + } + parser->last_buffer_ended_with_cr = false; + while (buffer < end) { + const unsigned char *eol; + bufsize_t chunk_len; + bool process = false; + for (eol = buffer; eol < end; ++eol) { + if (S_is_line_end_char(*eol)) { + process = true; + break; + } + if (*eol == '\0' && eol < end) { + break; + } + } + if (eol >= end && eof) { + process = true; + } + + chunk_len = (eol - buffer); + if (process) { + if (parser->linebuf.size > 0) { + cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); + S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); + cmark_strbuf_clear(&parser->linebuf); + } else { + S_process_line(parser, buffer, chunk_len); + } + } else { + if (eol < end && *eol == '\0') { + // omit NULL byte + cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); + // add replacement character + cmark_strbuf_put(&parser->linebuf, repl, 3); + } else { + cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); + } + } + + buffer += chunk_len; + if (buffer < end) { + if (*buffer == '\0') { + // skip over NULL + buffer++; + } else { + // skip over line ending characters + if (*buffer == '\r') { + buffer++; + if (buffer == end) + parser->last_buffer_ended_with_cr = true; + } + if (buffer < end && *buffer == '\n') + buffer++; + } + } + } +} + +static void chop_trailing_hashtags(cmark_chunk *ch) { + bufsize_t n, orig_n; + + cmark_chunk_rtrim(ch); + orig_n = n = ch->len - 1; + + // if string ends in space followed by #s, remove these: + while (n >= 0 && peek_at(ch, n) == '#') + n--; + + // Check for a space before the final #s: + if (n != orig_n && n >= 0 && S_is_space_or_tab(peek_at(ch, n))) { + ch->len = n; + cmark_chunk_rtrim(ch); + } +} + +// Find first nonspace character from current offset, setting +// parser->first_nonspace, parser->first_nonspace_column, +// parser->indent, and parser->blank. Does not advance parser->offset. +static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) { + char c; + int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); + + parser->first_nonspace = parser->offset; + parser->first_nonspace_column = parser->column; + while ((c = peek_at(input, parser->first_nonspace))) { + if (c == ' ') { + parser->first_nonspace += 1; + parser->first_nonspace_column += 1; + chars_to_tab = chars_to_tab - 1; + if (chars_to_tab == 0) { + chars_to_tab = TAB_STOP; + } + } else if (c == '\t') { + parser->first_nonspace += 1; + parser->first_nonspace_column += chars_to_tab; + chars_to_tab = TAB_STOP; + } else { + break; + } + } + + parser->indent = parser->first_nonspace_column - parser->column; + parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace)); +} + +// Advance parser->offset and parser->column. parser->offset is the +// byte position in input; parser->column is a virtual column number +// that takes into account tabs. (Multibyte characters are not taken +// into account, because the Markdown line prefixes we are interested in +// analyzing are entirely ASCII.) The count parameter indicates +// how far to advance the offset. If columns is true, then count +// indicates a number of columns; otherwise, a number of bytes. +// If advancing a certain number of columns partially consumes +// a tab character, parser->partially_consumed_tab is set to true. +static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, + bufsize_t count, bool columns) { + char c; + int chars_to_tab; + int chars_to_advance; + while (count > 0 && (c = peek_at(input, parser->offset))) { + if (c == '\t') { + chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); + if (columns) { + parser->partially_consumed_tab = chars_to_tab > count; + chars_to_advance = MIN(count, chars_to_tab); + parser->column += chars_to_advance; + parser->offset += (parser->partially_consumed_tab ? 0 : 1); + count -= chars_to_advance; + } else { + parser->partially_consumed_tab = false; + parser->column += chars_to_tab; + parser->offset += 1; + count -= 1; + } + } else { + parser->partially_consumed_tab = false; + parser->offset += 1; + parser->column += 1; // assume ascii; block starts are ascii + count -= 1; + } + } +} + +static bool S_last_child_is_open(cmark_node *container) { + return container->last_child && + (container->last_child->flags & CMARK_NODE__OPEN); +} + +static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) { + bool res = false; + bufsize_t matched = 0; + + matched = + parser->indent <= 3 && peek_at(input, parser->first_nonspace) == '>'; + if (matched) { + + S_advance_offset(parser, input, parser->indent + 1, true); + + if (S_is_space_or_tab(peek_at(input, parser->offset))) { + S_advance_offset(parser, input, 1, true); + } + + res = true; + } + return res; +} + +static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input, + cmark_node *container) { + bool res = false; + + if (parser->indent >= + container->as.list.marker_offset + container->as.list.padding) { + S_advance_offset(parser, input, container->as.list.marker_offset + + container->as.list.padding, + true); + res = true; + } else if (parser->blank && container->first_child != NULL) { + // if container->first_child is NULL, then the opening line + // of the list item was blank after the list marker; in this + // case, we are done with the list item. + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + false); + res = true; + } + return res; +} + +static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input, + cmark_node *container, + bool *should_continue) { + bool res = false; + + if (!container->as.code.fenced) { // indented + if (parser->indent >= CODE_INDENT) { + S_advance_offset(parser, input, CODE_INDENT, true); + res = true; + } else if (parser->blank) { + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + false); + res = true; + } + } else { // fenced + bufsize_t matched = 0; + + if (parser->indent <= 3 && (peek_at(input, parser->first_nonspace) == + container->as.code.fence_char)) { + matched = scan_close_code_fence(input, parser->first_nonspace); + } + + if (matched >= container->as.code.fence_length) { + // closing fence - and since we're at + // the end of a line, we can stop processing it: + *should_continue = false; + S_advance_offset(parser, input, matched, false); + parser->current = finalize(parser, container); + } else { + // skip opt. spaces of fence parser->offset + int i = container->as.code.fence_offset; + + while (i > 0 && S_is_space_or_tab(peek_at(input, parser->offset))) { + S_advance_offset(parser, input, 1, true); + i--; + } + res = true; + } + } + + return res; +} + +static bool parse_html_block_prefix(cmark_parser *parser, + cmark_node *container) { + bool res = false; + int html_block_type = container->as.html_block_type; + + assert(html_block_type >= 1 && html_block_type <= 7); + switch (html_block_type) { + case 1: + case 2: + case 3: + case 4: + case 5: + // these types of blocks can accept blanks + res = true; + break; + case 6: + case 7: + res = !parser->blank; + break; + } + + return res; +} + +/** + * For each containing node, try to parse the associated line start. + * + * Will not close unmatched blocks, as we may have a lazy continuation + * line -> http://spec.commonmark.org/0.24/#lazy-continuation-line + * + * Returns: The last matching node, or NULL + */ +static cmark_node *check_open_blocks(cmark_parser *parser, cmark_chunk *input, + bool *all_matched) { + bool should_continue = true; + *all_matched = false; + cmark_node *container = parser->root; + cmark_node_type cont_type; + + while (S_last_child_is_open(container)) { + container = container->last_child; + cont_type = S_type(container); + + S_find_first_nonspace(parser, input); + + switch (cont_type) { + case CMARK_NODE_BLOCK_QUOTE: + if (!parse_block_quote_prefix(parser, input)) + goto done; + break; + case CMARK_NODE_ITEM: + if (!parse_node_item_prefix(parser, input, container)) + goto done; + break; + case CMARK_NODE_CODE_BLOCK: + if (!parse_code_block_prefix(parser, input, container, &should_continue)) + goto done; + break; + case CMARK_NODE_HEADING: + // a heading can never contain more than one line + goto done; + case CMARK_NODE_HTML_BLOCK: + if (!parse_html_block_prefix(parser, container)) + goto done; + break; + case CMARK_NODE_PARAGRAPH: + if (parser->blank) + goto done; + break; + default: + break; + } + } + + *all_matched = true; + +done: + if (!*all_matched) { + container = container->parent; // back up to last matching node + } + + if (!should_continue) { + container = NULL; + } + + return container; +} + +static void open_new_blocks(cmark_parser *parser, cmark_node **container, + cmark_chunk *input, bool all_matched) { + bool indented; + cmark_list *data = NULL; + bool maybe_lazy = S_type(parser->current) == CMARK_NODE_PARAGRAPH; + cmark_node_type cont_type = S_type(*container); + bufsize_t matched = 0; + int lev = 0; + bool save_partially_consumed_tab; + int save_offset; + int save_column; + + while (cont_type != CMARK_NODE_CODE_BLOCK && + cont_type != CMARK_NODE_HTML_BLOCK) { + + S_find_first_nonspace(parser, input); + indented = parser->indent >= CODE_INDENT; + + if (!indented && peek_at(input, parser->first_nonspace) == '>') { + + bufsize_t blockquote_startpos = parser->first_nonspace; + + S_advance_offset(parser, input, + parser->first_nonspace + 1 - parser->offset, false); + // optional following character + if (S_is_space_or_tab(peek_at(input, parser->offset))) { + S_advance_offset(parser, input, 1, true); + } + *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, + blockquote_startpos + 1); + + } else if (!indented && (matched = scan_atx_heading_start( + input, parser->first_nonspace))) { + bufsize_t hashpos; + int level = 0; + bufsize_t heading_startpos = parser->first_nonspace; + + S_advance_offset(parser, input, + parser->first_nonspace + matched - parser->offset, + false); + *container = add_child(parser, *container, CMARK_NODE_HEADING, + heading_startpos + 1); + + hashpos = cmark_chunk_strchr(input, '#', parser->first_nonspace); + + while (peek_at(input, hashpos) == '#') { + level++; + hashpos++; + } + + (*container)->as.heading.level = level; + (*container)->as.heading.setext = false; + + } else if (!indented && (matched = scan_open_code_fence( + input, parser->first_nonspace))) { + *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, + parser->first_nonspace + 1); + (*container)->as.code.fenced = true; + (*container)->as.code.fence_char = peek_at(input, parser->first_nonspace); + (*container)->as.code.fence_length = (matched > 255) ? 255 : matched; + (*container)->as.code.fence_offset = + (int8_t)(parser->first_nonspace - parser->offset); + (*container)->as.code.info = cmark_chunk_literal(""); + S_advance_offset(parser, input, + parser->first_nonspace + matched - parser->offset, + false); + + } else if (!indented && ((matched = scan_html_block_start( + input, parser->first_nonspace)) || + (cont_type != CMARK_NODE_PARAGRAPH && + (matched = scan_html_block_start_7( + input, parser->first_nonspace))))) { + *container = add_child(parser, *container, CMARK_NODE_HTML_BLOCK, + parser->first_nonspace + 1); + (*container)->as.html_block_type = matched; + // note, we don't adjust parser->offset because the tag is part of the + // text + } else if (!indented && cont_type == CMARK_NODE_PARAGRAPH && + (lev = + scan_setext_heading_line(input, parser->first_nonspace))) { + (*container)->type = (uint16_t)CMARK_NODE_HEADING; + (*container)->as.heading.level = lev; + (*container)->as.heading.setext = true; + S_advance_offset(parser, input, input->len - 1 - parser->offset, false); + } else if (!indented && + !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) && + (matched = scan_thematic_break(input, parser->first_nonspace))) { + // it's only now that we know the line is not part of a setext heading: + *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, + parser->first_nonspace + 1); + S_advance_offset(parser, input, input->len - 1 - parser->offset, false); + } else if ((!indented || cont_type == CMARK_NODE_LIST) && + (matched = parse_list_marker( + parser->mem, input, parser->first_nonspace, + (*container)->type == CMARK_NODE_PARAGRAPH, &data))) { + + // Note that we can have new list items starting with >= 4 + // spaces indent, as long as the list container is still open. + int i = 0; + + // compute padding: + S_advance_offset(parser, input, + parser->first_nonspace + matched - parser->offset, + false); + + save_partially_consumed_tab = parser->partially_consumed_tab; + save_offset = parser->offset; + save_column = parser->column; + + while (parser->column - save_column <= 5 && + S_is_space_or_tab(peek_at(input, parser->offset))) { + S_advance_offset(parser, input, 1, true); + } + + i = parser->column - save_column; + if (i >= 5 || i < 1 || + // only spaces after list marker: + S_is_line_end_char(peek_at(input, parser->offset))) { + data->padding = matched + 1; + parser->offset = save_offset; + parser->column = save_column; + parser->partially_consumed_tab = save_partially_consumed_tab; + if (i > 0) { + S_advance_offset(parser, input, 1, true); + } + } else { + data->padding = matched + i; + } + + // check container; if it's a list, see if this list item + // can continue the list; otherwise, create a list container. + + data->marker_offset = parser->indent; + + if (cont_type != CMARK_NODE_LIST || + !lists_match(&((*container)->as.list), data)) { + *container = add_child(parser, *container, CMARK_NODE_LIST, + parser->first_nonspace + 1); + + memcpy(&((*container)->as.list), data, sizeof(*data)); + } + + // add the list item + *container = add_child(parser, *container, CMARK_NODE_ITEM, + parser->first_nonspace + 1); + /* TODO: static */ + memcpy(&((*container)->as.list), data, sizeof(*data)); + parser->mem->free(data); + } else if (indented && !maybe_lazy && !parser->blank) { + S_advance_offset(parser, input, CODE_INDENT, true); + *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, + parser->offset + 1); + (*container)->as.code.fenced = false; + (*container)->as.code.fence_char = 0; + (*container)->as.code.fence_length = 0; + (*container)->as.code.fence_offset = 0; + (*container)->as.code.info = cmark_chunk_literal(""); + + } else { + break; + } + + if (accepts_lines(S_type(*container))) { + // if it's a line container, it can't contain other containers + break; + } + + cont_type = S_type(*container); + maybe_lazy = false; + } +} + +static void add_text_to_container(cmark_parser *parser, cmark_node *container, + cmark_node *last_matched_container, + cmark_chunk *input) { + cmark_node *tmp; + // what remains at parser->offset is a text line. add the text to the + // appropriate container. + + S_find_first_nonspace(parser, input); + + if (parser->blank && container->last_child) + S_set_last_line_blank(container->last_child, true); + + // block quote lines are never blank as they start with > + // and we don't count blanks in fenced code for purposes of tight/loose + // lists or breaking out of lists. we also don't set last_line_blank + // on an empty list item. + const cmark_node_type ctype = S_type(container); + const bool last_line_blank = + (parser->blank && ctype != CMARK_NODE_BLOCK_QUOTE && + ctype != CMARK_NODE_HEADING && ctype != CMARK_NODE_THEMATIC_BREAK && + !(ctype == CMARK_NODE_CODE_BLOCK && container->as.code.fenced) && + !(ctype == CMARK_NODE_ITEM && container->first_child == NULL && + container->start_line == parser->line_number)); + + S_set_last_line_blank(container, last_line_blank); + + tmp = container; + while (tmp->parent) { + S_set_last_line_blank(tmp->parent, false); + tmp = tmp->parent; + } + + // If the last line processed belonged to a paragraph node, + // and we didn't match all of the line prefixes for the open containers, + // and we didn't start any new containers, + // and the line isn't blank, + // then treat this as a "lazy continuation line" and add it to + // the open paragraph. + if (parser->current != last_matched_container && + container == last_matched_container && !parser->blank && + S_type(parser->current) == CMARK_NODE_PARAGRAPH) { + add_line(parser->current, input, parser); + } else { // not a lazy continuation + // Finalize any blocks that were not matched and set cur to container: + while (parser->current != last_matched_container) { + parser->current = finalize(parser, parser->current); + assert(parser->current != NULL); + } + + if (S_type(container) == CMARK_NODE_CODE_BLOCK) { + add_line(container, input, parser); + } else if (S_type(container) == CMARK_NODE_HTML_BLOCK) { + add_line(container, input, parser); + + int matches_end_condition; + switch (container->as.html_block_type) { + case 1: + // , , + matches_end_condition = + scan_html_block_end_1(input, parser->first_nonspace); + break; + case 2: + // --> + matches_end_condition = + scan_html_block_end_2(input, parser->first_nonspace); + break; + case 3: + // ?> + matches_end_condition = + scan_html_block_end_3(input, parser->first_nonspace); + break; + case 4: + // > + matches_end_condition = + scan_html_block_end_4(input, parser->first_nonspace); + break; + case 5: + // ]]> + matches_end_condition = + scan_html_block_end_5(input, parser->first_nonspace); + break; + default: + matches_end_condition = 0; + break; + } + + if (matches_end_condition) { + container = finalize(parser, container); + assert(parser->current != NULL); + } + } else if (parser->blank) { + // ??? do nothing + } else if (accepts_lines(S_type(container))) { + if (S_type(container) == CMARK_NODE_HEADING && + container->as.heading.setext == false) { + chop_trailing_hashtags(input); + } + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + false); + add_line(container, input, parser); + } else { + // create paragraph container for line + container = add_child(parser, container, CMARK_NODE_PARAGRAPH, + parser->first_nonspace + 1); + S_advance_offset(parser, input, parser->first_nonspace - parser->offset, + false); + add_line(container, input, parser); + } + + parser->current = container; + } +} + +/* See http://spec.commonmark.org/0.24/#phase-1-block-structure */ +static void S_process_line(cmark_parser *parser, const unsigned char *buffer, + bufsize_t bytes) { + cmark_node *last_matched_container; + bool all_matched = true; + cmark_node *container; + cmark_chunk input; + + if (parser->options & CMARK_OPT_VALIDATE_UTF8) + cmark_utf8proc_check(&parser->curline, buffer, bytes); + else + cmark_strbuf_put(&parser->curline, buffer, bytes); + + // ensure line ends with a newline: + if (bytes == 0 || !S_is_line_end_char(parser->curline.ptr[bytes - 1])) + cmark_strbuf_putc(&parser->curline, '\n'); + + parser->offset = 0; + parser->column = 0; + parser->blank = false; + parser->partially_consumed_tab = false; + + input.data = parser->curline.ptr; + input.len = parser->curline.size; + input.alloc = 0; + + parser->line_number++; + + last_matched_container = check_open_blocks(parser, &input, &all_matched); + + if (!last_matched_container) + goto finished; + + container = last_matched_container; + + open_new_blocks(parser, &container, &input, all_matched); + + add_text_to_container(parser, container, last_matched_container, &input); + +finished: + parser->last_line_length = input.len; + if (parser->last_line_length && + input.data[parser->last_line_length - 1] == '\n') + parser->last_line_length -= 1; + if (parser->last_line_length && + input.data[parser->last_line_length - 1] == '\r') + parser->last_line_length -= 1; + + cmark_strbuf_clear(&parser->curline); +} + +cmark_node *cmark_parser_finish(cmark_parser *parser) { + if (parser->linebuf.size) { + S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); + cmark_strbuf_clear(&parser->linebuf); + } + + finalize_document(parser); + + if (parser->options & CMARK_OPT_NORMALIZE) { + cmark_consolidate_text_nodes(parser->root); + } + + cmark_strbuf_free(&parser->curline); + +#if CMARK_DEBUG_NODES + if (cmark_node_check(parser->root, stderr)) { + abort(); + } +#endif + return parser->root; +} + + + +const char *cmark_version_string() { return CMARK_VERSION_STRING; } + +static void *xcalloc(size_t nmem, size_t size) { + void *ptr = calloc(nmem, size); + if (!ptr) + abort(); + return ptr; +} + +static void *xrealloc(void *ptr, size_t size) { + void *new_ptr = realloc(ptr, size); + if (!new_ptr) + abort(); + return new_ptr; +} + +cmark_mem DEFAULT_MEM_ALLOCATOR = {xcalloc, xrealloc, free}; + +char *cmark_markdown_to_html(const char *text, size_t len, int options) { + cmark_node *doc; + char *result; + + doc = cmark_parse_document(text, len, options); + + result = cmark_render_html(doc, options); + cmark_node_free(doc); + + return result; +} + + + +/** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other + */ +static const uint8_t cmark_ctype_class[256] = { + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, + /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, + /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, + /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0, + /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + +/** + * Returns 1 if c is a "whitespace" character as defined by the spec. + */ +int cmark_isspace(char c) { return cmark_ctype_class[(uint8_t)c] == 1; } + +/** + * Returns 1 if c is an ascii punctuation character. + */ +int cmark_ispunct(char c) { return cmark_ctype_class[(uint8_t)c] == 2; } + +int cmark_isalnum(char c) { + uint8_t result; + result = cmark_ctype_class[(uint8_t)c]; + return (result == 3 || result == 4); +} + +int cmark_isdigit(char c) { return cmark_ctype_class[(uint8_t)c] == 3; } + +int cmark_isalpha(char c) { return cmark_ctype_class[(uint8_t)c] == 4; } + + + +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Used as default value for cmark_strbuf->ptr so that people can always + * assume ptr is non-NULL and zero terminated even for new cmark_strbufs. + */ +unsigned char cmark_strbuf__initbuf[1]; + +#ifndef MIN +#define MIN(x, y) ((x < y) ? x : y) +#endif + +void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, + bufsize_t initial_size) { + buf->mem = mem; + buf->asize = 0; + buf->size = 0; + buf->ptr = cmark_strbuf__initbuf; + + if (initial_size > 0) + cmark_strbuf_grow(buf, initial_size); +} + +static CMARK_INLINE void S_strbuf_grow_by(cmark_strbuf *buf, bufsize_t add) { + cmark_strbuf_grow(buf, buf->size + add); +} + +void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { + assert(target_size > 0); + + if (target_size < buf->asize) + return; + + if (target_size > (bufsize_t)(INT32_MAX / 2)) + abort(); + + /* Oversize the buffer by 50% to guarantee amortized linear time + * complexity on append operations. */ + bufsize_t new_size = target_size + target_size / 2; + new_size += 1; + new_size = (new_size + 7) & ~7; + + buf->ptr = (unsigned char *)buf->mem->realloc(buf->asize ? buf->ptr : NULL, + new_size); + buf->asize = new_size; +} + +bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; } + +void cmark_strbuf_free(cmark_strbuf *buf) { + if (!buf) + return; + + if (buf->ptr != cmark_strbuf__initbuf) + buf->mem->free(buf->ptr); + + cmark_strbuf_init(buf->mem, buf, 0); +} + +void cmark_strbuf_clear(cmark_strbuf *buf) { + buf->size = 0; + + if (buf->asize > 0) + buf->ptr[0] = '\0'; +} + +void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, + bufsize_t len) { + if (len <= 0 || data == NULL) { + cmark_strbuf_clear(buf); + } else { + if (data != buf->ptr) { + if (len >= buf->asize) + cmark_strbuf_grow(buf, len); + memmove(buf->ptr, data, len); + } + buf->size = len; + buf->ptr[buf->size] = '\0'; + } +} + +void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) { + cmark_strbuf_set(buf, (const unsigned char *)string, + string ? strlen(string) : 0); +} + +void cmark_strbuf_putc(cmark_strbuf *buf, int c) { + S_strbuf_grow_by(buf, 1); + buf->ptr[buf->size++] = (unsigned char)(c & 0xFF); + buf->ptr[buf->size] = '\0'; +} + +void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, + bufsize_t len) { + if (len <= 0) + return; + + S_strbuf_grow_by(buf, len); + memmove(buf->ptr + buf->size, data, len); + buf->size += len; + buf->ptr[buf->size] = '\0'; +} + +void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) { + cmark_strbuf_put(buf, (const unsigned char *)string, strlen(string)); +} + +void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, + const cmark_strbuf *buf) { + bufsize_t copylen; + + assert(buf); + if (!data || datasize <= 0) + return; + + data[0] = '\0'; + + if (buf->size == 0 || buf->asize <= 0) + return; + + copylen = buf->size; + if (copylen > datasize - 1) + copylen = datasize - 1; + memmove(data, buf->ptr, copylen); + data[copylen] = '\0'; +} + +void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b) { + cmark_strbuf t = *buf_a; + *buf_a = *buf_b; + *buf_b = t; +} + +unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) { + unsigned char *data = buf->ptr; + + if (buf->asize == 0) { + /* return an empty string */ + return (unsigned char *)buf->mem->calloc(1, 1); + } + + cmark_strbuf_init(buf->mem, buf, 0); + return data; +} + +int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) { + int result = memcmp(a->ptr, b->ptr, MIN(a->size, b->size)); + return (result != 0) ? result + : (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0; +} + +bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos) { + if (pos >= buf->size) + return -1; + if (pos < 0) + pos = 0; + + const unsigned char *p = + (unsigned char *)memchr(buf->ptr + pos, c, buf->size - pos); + if (!p) + return -1; + + return (bufsize_t)(p - (const unsigned char *)buf->ptr); +} + +bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) { + if (pos < 0 || buf->size == 0) + return -1; + if (pos >= buf->size) + pos = buf->size - 1; + + bufsize_t i; + for (i = pos; i >= 0; i--) { + if (buf->ptr[i] == (unsigned char)c) + return i; + } + + return -1; +} + +void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len) { + if (len < 0) + len = 0; + + if (len < buf->size) { + buf->size = len; + buf->ptr[buf->size] = '\0'; + } +} + +void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n) { + if (n > 0) { + if (n > buf->size) + n = buf->size; + buf->size = buf->size - n; + if (buf->size) + memmove(buf->ptr, buf->ptr + n, buf->size); + + buf->ptr[buf->size] = '\0'; + } +} + +void cmark_strbuf_rtrim(cmark_strbuf *buf) { + if (!buf->size) + return; + + while (buf->size > 0) { + if (!cmark_isspace(buf->ptr[buf->size - 1])) + break; + + buf->size--; + } + + buf->ptr[buf->size] = '\0'; +} + +void cmark_strbuf_trim(cmark_strbuf *buf) { + bufsize_t i = 0; + + if (!buf->size) + return; + + while (i < buf->size && cmark_isspace(buf->ptr[i])) + i++; + + cmark_strbuf_drop(buf, i); + + cmark_strbuf_rtrim(buf); +} + +// Destructively modify string, collapsing consecutive +// space and newline characters into a single space. +void cmark_strbuf_normalize_whitespace(cmark_strbuf *s) { + bool last_char_was_space = false; + bufsize_t r, w; + + for (r = 0, w = 0; r < s->size; ++r) { + if (cmark_isspace(s->ptr[r])) { + if (!last_char_was_space) { + s->ptr[w++] = ' '; + last_char_was_space = true; + } + } else { + s->ptr[w++] = s->ptr[r]; + last_char_was_space = false; + } + } + + cmark_strbuf_truncate(s, w); +} + +// Destructively unescape a string: remove backslashes before punctuation chars. +extern void cmark_strbuf_unescape(cmark_strbuf *buf) { + bufsize_t r, w; + + for (r = 0, w = 0; r < buf->size; ++r) { + if (buf->ptr[r] == '\\' && cmark_ispunct(buf->ptr[r + 1])) + r++; + + buf->ptr[w++] = buf->ptr[r]; + } + + cmark_strbuf_truncate(buf, w); +} + + +static void S_node_unlink(cmark_node *node); + +#define NODE_MEM(node) cmark_node_mem(node) + +static CMARK_INLINE bool S_is_block(cmark_node *node) { + if (node == NULL) { + return false; + } + return node->type >= CMARK_NODE_FIRST_BLOCK && + node->type <= CMARK_NODE_LAST_BLOCK; +} + +static CMARK_INLINE bool S_is_inline(cmark_node *node) { + if (node == NULL) { + return false; + } + return node->type >= CMARK_NODE_FIRST_INLINE && + node->type <= CMARK_NODE_LAST_INLINE; +} + +static bool S_can_contain(cmark_node *node, cmark_node *child) { + cmark_node *cur; + + if (node == NULL || child == NULL) { + return false; + } + + // Verify that child is not an ancestor of node or equal to node. + cur = node; + do { + if (cur == child) { + return false; + } + cur = cur->parent; + } while (cur != NULL); + + if (child->type == CMARK_NODE_DOCUMENT) { + return false; + } + + switch (node->type) { + case CMARK_NODE_DOCUMENT: + case CMARK_NODE_BLOCK_QUOTE: + case CMARK_NODE_ITEM: + return S_is_block(child) && child->type != CMARK_NODE_ITEM; + + case CMARK_NODE_LIST: + return child->type == CMARK_NODE_ITEM; + + case CMARK_NODE_CUSTOM_BLOCK: + return true; + + case CMARK_NODE_PARAGRAPH: + case CMARK_NODE_HEADING: + case CMARK_NODE_EMPH: + case CMARK_NODE_STRONG: + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: + case CMARK_NODE_CUSTOM_INLINE: + return S_is_inline(child); + + default: + break; + } + + return false; +} + +cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem) { + cmark_node *node = (cmark_node *)mem->calloc(1, sizeof(*node)); + cmark_strbuf_init(mem, &node->content, 0); + node->type = (uint16_t)type; + + switch (node->type) { + case CMARK_NODE_HEADING: + node->as.heading.level = 1; + break; + + case CMARK_NODE_LIST: { + cmark_list *list = &node->as.list; + list->list_type = CMARK_BULLET_LIST; + list->start = 1; + list->tight = false; + break; + } + + default: + break; + } + + return node; +} + +cmark_node *cmark_node_new(cmark_node_type type) { + extern cmark_mem DEFAULT_MEM_ALLOCATOR; + return cmark_node_new_with_mem(type, &DEFAULT_MEM_ALLOCATOR); +} + +// Free a cmark_node list and any children. +static void S_free_nodes(cmark_node *e) { + cmark_node *next; + while (e != NULL) { + cmark_strbuf_free(&e->content); + switch (e->type) { + case CMARK_NODE_CODE_BLOCK: + cmark_chunk_free(NODE_MEM(e), &e->as.code.info); + cmark_chunk_free(NODE_MEM(e), &e->as.code.literal); + break; + case CMARK_NODE_TEXT: + case CMARK_NODE_HTML_INLINE: + case CMARK_NODE_CODE: + case CMARK_NODE_HTML_BLOCK: + cmark_chunk_free(NODE_MEM(e), &e->as.literal); + break; + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: + cmark_chunk_free(NODE_MEM(e), &e->as.link.url); + cmark_chunk_free(NODE_MEM(e), &e->as.link.title); + break; + case CMARK_NODE_CUSTOM_BLOCK: + case CMARK_NODE_CUSTOM_INLINE: + cmark_chunk_free(NODE_MEM(e), &e->as.custom.on_enter); + cmark_chunk_free(NODE_MEM(e), &e->as.custom.on_exit); + break; + default: + break; + } + if (e->last_child) { + // Splice children into list + e->last_child->next = e->next; + e->next = e->first_child; + } + next = e->next; + NODE_MEM(e)->free(e); + e = next; + } +} + +void cmark_node_free(cmark_node *node) { + S_node_unlink(node); + node->next = NULL; + S_free_nodes(node); +} + +cmark_node_type cmark_node_get_type(cmark_node *node) { + if (node == NULL) { + return CMARK_NODE_NONE; + } else { + return (cmark_node_type)node->type; + } +} + +const char *cmark_node_get_type_string(cmark_node *node) { + if (node == NULL) { + return "NONE"; + } + + switch (node->type) { + case CMARK_NODE_NONE: + return "none"; + case CMARK_NODE_DOCUMENT: + return "document"; + case CMARK_NODE_BLOCK_QUOTE: + return "block_quote"; + case CMARK_NODE_LIST: + return "list"; + case CMARK_NODE_ITEM: + return "item"; + case CMARK_NODE_CODE_BLOCK: + return "code_block"; + case CMARK_NODE_HTML_BLOCK: + return "html_block"; + case CMARK_NODE_CUSTOM_BLOCK: + return "custom_block"; + case CMARK_NODE_PARAGRAPH: + return "paragraph"; + case CMARK_NODE_HEADING: + return "heading"; + case CMARK_NODE_THEMATIC_BREAK: + return "thematic_break"; + case CMARK_NODE_TEXT: + return "text"; + case CMARK_NODE_SOFTBREAK: + return "softbreak"; + case CMARK_NODE_LINEBREAK: + return "linebreak"; + case CMARK_NODE_CODE: + return "code"; + case CMARK_NODE_HTML_INLINE: + return "html_inline"; + case CMARK_NODE_CUSTOM_INLINE: + return "custom_inline"; + case CMARK_NODE_EMPH: + return "emph"; + case CMARK_NODE_STRONG: + return "strong"; + case CMARK_NODE_LINK: + return "link"; + case CMARK_NODE_IMAGE: + return "image"; + } + + return ""; +} + +cmark_node *cmark_node_next(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->next; + } +} + +cmark_node *cmark_node_previous(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->prev; + } +} + +cmark_node *cmark_node_parent(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->parent; + } +} + +cmark_node *cmark_node_first_child(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->first_child; + } +} + +cmark_node *cmark_node_last_child(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->last_child; + } +} + +void *cmark_node_get_user_data(cmark_node *node) { + if (node == NULL) { + return NULL; + } else { + return node->user_data; + } +} + +int cmark_node_set_user_data(cmark_node *node, void *user_data) { + if (node == NULL) { + return 0; + } + node->user_data = user_data; + return 1; +} + +const char *cmark_node_get_literal(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + switch (node->type) { + case CMARK_NODE_HTML_BLOCK: + case CMARK_NODE_TEXT: + case CMARK_NODE_HTML_INLINE: + case CMARK_NODE_CODE: + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.literal); + + case CMARK_NODE_CODE_BLOCK: + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.literal); + + default: + break; + } + + return NULL; +} + +int cmark_node_set_literal(cmark_node *node, const char *content) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_HTML_BLOCK: + case CMARK_NODE_TEXT: + case CMARK_NODE_HTML_INLINE: + case CMARK_NODE_CODE: + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.literal, content); + return 1; + + case CMARK_NODE_CODE_BLOCK: + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.literal, content); + return 1; + + default: + break; + } + + return 0; +} + +int cmark_node_get_heading_level(cmark_node *node) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_HEADING: + return node->as.heading.level; + + default: + break; + } + + return 0; +} + +int cmark_node_set_heading_level(cmark_node *node, int level) { + if (node == NULL || level < 1 || level > 6) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_HEADING: + node->as.heading.level = level; + return 1; + + default: + break; + } + + return 0; +} + +cmark_list_type cmark_node_get_list_type(cmark_node *node) { + if (node == NULL) { + return CMARK_NO_LIST; + } + + if (node->type == CMARK_NODE_LIST) { + return node->as.list.list_type; + } else { + return CMARK_NO_LIST; + } +} + +int cmark_node_set_list_type(cmark_node *node, cmark_list_type type) { + if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) { + return 0; + } + + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + node->as.list.list_type = type; + return 1; + } else { + return 0; + } +} + +cmark_delim_type cmark_node_get_list_delim(cmark_node *node) { + if (node == NULL) { + return CMARK_NO_DELIM; + } + + if (node->type == CMARK_NODE_LIST) { + return node->as.list.delimiter; + } else { + return CMARK_NO_DELIM; + } +} + +int cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) { + if (!(delim == CMARK_PERIOD_DELIM || delim == CMARK_PAREN_DELIM)) { + return 0; + } + + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + node->as.list.delimiter = delim; + return 1; + } else { + return 0; + } +} + +int cmark_node_get_list_start(cmark_node *node) { + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + return node->as.list.start; + } else { + return 0; + } +} + +int cmark_node_set_list_start(cmark_node *node, int start) { + if (node == NULL || start < 0) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + node->as.list.start = start; + return 1; + } else { + return 0; + } +} + +int cmark_node_get_list_tight(cmark_node *node) { + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + return node->as.list.tight; + } else { + return 0; + } +} + +int cmark_node_set_list_tight(cmark_node *node, int tight) { + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_LIST) { + node->as.list.tight = tight == 1; + return 1; + } else { + return 0; + } +} + +const char *cmark_node_get_fence_info(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + if (node->type == CMARK_NODE_CODE_BLOCK) { + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.info); + } else { + return NULL; + } +} + +int cmark_node_set_fence_info(cmark_node *node, const char *info) { + if (node == NULL) { + return 0; + } + + if (node->type == CMARK_NODE_CODE_BLOCK) { + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.info, info); + return 1; + } else { + return 0; + } +} + +const char *cmark_node_get_url(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + switch (node->type) { + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.url); + default: + break; + } + + return NULL; +} + +int cmark_node_set_url(cmark_node *node, const char *url) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.url, url); + return 1; + default: + break; + } + + return 0; +} + +const char *cmark_node_get_title(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + switch (node->type) { + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.title); + default: + break; + } + + return NULL; +} + +int cmark_node_set_title(cmark_node *node, const char *title) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_LINK: + case CMARK_NODE_IMAGE: + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.title, title); + return 1; + default: + break; + } + + return 0; +} + +const char *cmark_node_get_on_enter(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + switch (node->type) { + case CMARK_NODE_CUSTOM_INLINE: + case CMARK_NODE_CUSTOM_BLOCK: + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_enter); + default: + break; + } + + return NULL; +} + +int cmark_node_set_on_enter(cmark_node *node, const char *on_enter) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_CUSTOM_INLINE: + case CMARK_NODE_CUSTOM_BLOCK: + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_enter, on_enter); + return 1; + default: + break; + } + + return 0; +} + +const char *cmark_node_get_on_exit(cmark_node *node) { + if (node == NULL) { + return NULL; + } + + switch (node->type) { + case CMARK_NODE_CUSTOM_INLINE: + case CMARK_NODE_CUSTOM_BLOCK: + return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_exit); + default: + break; + } + + return NULL; +} + +int cmark_node_set_on_exit(cmark_node *node, const char *on_exit) { + if (node == NULL) { + return 0; + } + + switch (node->type) { + case CMARK_NODE_CUSTOM_INLINE: + case CMARK_NODE_CUSTOM_BLOCK: + cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_exit, on_exit); + return 1; + default: + break; + } + + return 0; +} + +int cmark_node_get_start_line(cmark_node *node) { + if (node == NULL) { + return 0; + } + return node->start_line; +} + +int cmark_node_get_start_column(cmark_node *node) { + if (node == NULL) { + return 0; + } + return node->start_column; +} + +int cmark_node_get_end_line(cmark_node *node) { + if (node == NULL) { + return 0; + } + return node->end_line; +} + +int cmark_node_get_end_column(cmark_node *node) { + if (node == NULL) { + return 0; + } + return node->end_column; +} + +// Unlink a node without adjusting its next, prev, and parent pointers. +static void S_node_unlink(cmark_node *node) { + if (node == NULL) { + return; + } + + if (node->prev) { + node->prev->next = node->next; + } + if (node->next) { + node->next->prev = node->prev; + } + + // Adjust first_child and last_child of parent. + cmark_node *parent = node->parent; + if (parent) { + if (parent->first_child == node) { + parent->first_child = node->next; + } + if (parent->last_child == node) { + parent->last_child = node->prev; + } + } +} + +void cmark_node_unlink(cmark_node *node) { + S_node_unlink(node); + + node->next = NULL; + node->prev = NULL; + node->parent = NULL; +} + +int cmark_node_insert_before(cmark_node *node, cmark_node *sibling) { + if (node == NULL || sibling == NULL) { + return 0; + } + + if (!node->parent || !S_can_contain(node->parent, sibling)) { + return 0; + } + + S_node_unlink(sibling); + + cmark_node *old_prev = node->prev; + + // Insert 'sibling' between 'old_prev' and 'node'. + if (old_prev) { + old_prev->next = sibling; + } + sibling->prev = old_prev; + sibling->next = node; + node->prev = sibling; + + // Set new parent. + cmark_node *parent = node->parent; + sibling->parent = parent; + + // Adjust first_child of parent if inserted as first child. + if (parent && !old_prev) { + parent->first_child = sibling; + } + + return 1; +} + +int cmark_node_insert_after(cmark_node *node, cmark_node *sibling) { + if (node == NULL || sibling == NULL) { + return 0; + } + + if (!node->parent || !S_can_contain(node->parent, sibling)) { + return 0; + } + + S_node_unlink(sibling); + + cmark_node *old_next = node->next; + + // Insert 'sibling' between 'node' and 'old_next'. + if (old_next) { + old_next->prev = sibling; + } + sibling->next = old_next; + sibling->prev = node; + node->next = sibling; + + // Set new parent. + cmark_node *parent = node->parent; + sibling->parent = parent; + + // Adjust last_child of parent if inserted as last child. + if (parent && !old_next) { + parent->last_child = sibling; + } + + return 1; +} + +int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode) { + if (!cmark_node_insert_before(oldnode, newnode)) { + return 0; + } + cmark_node_unlink(oldnode); + return 1; +} + +int cmark_node_prepend_child(cmark_node *node, cmark_node *child) { + if (!S_can_contain(node, child)) { + return 0; + } + + S_node_unlink(child); + + cmark_node *old_first_child = node->first_child; + + child->next = old_first_child; + child->prev = NULL; + child->parent = node; + node->first_child = child; + + if (old_first_child) { + old_first_child->prev = child; + } else { + // Also set last_child if node previously had no children. + node->last_child = child; + } + + return 1; +} + +int cmark_node_append_child(cmark_node *node, cmark_node *child) { + if (!S_can_contain(node, child)) { + return 0; + } + + S_node_unlink(child); + + cmark_node *old_last_child = node->last_child; + + child->next = NULL; + child->prev = old_last_child; + child->parent = node; + node->last_child = child; + + if (old_last_child) { + old_last_child->next = child; + } else { + // Also set first_child if node previously had no children. + node->first_child = child; + } + + return 1; +} + +static void S_print_error(FILE *out, cmark_node *node, const char *elem) { + if (out == NULL) { + return; + } + fprintf(out, "Invalid '%s' in node type %s at %d:%d\n", elem, + cmark_node_get_type_string(node), node->start_line, + node->start_column); +} + +int cmark_node_check(cmark_node *node, FILE *out) { + cmark_node *cur; + int errors = 0; + + if (!node) { + return 0; + } + + cur = node; + for (;;) { + if (cur->first_child) { + if (cur->first_child->prev != NULL) { + S_print_error(out, cur->first_child, "prev"); + cur->first_child->prev = NULL; + ++errors; + } + if (cur->first_child->parent != cur) { + S_print_error(out, cur->first_child, "parent"); + cur->first_child->parent = cur; + ++errors; + } + cur = cur->first_child; + continue; + } + + next_sibling: + if (cur == node) { + break; + } + if (cur->next) { + if (cur->next->prev != cur) { + S_print_error(out, cur->next, "prev"); + cur->next->prev = cur; + ++errors; + } + if (cur->next->parent != cur->parent) { + S_print_error(out, cur->next, "parent"); + cur->next->parent = cur->parent; + ++errors; + } + cur = cur->next; + continue; + } + + if (cur->parent->last_child != cur) { + S_print_error(out, cur->parent, "last_child"); + cur->parent->last_child = cur; + ++errors; + } + cur = cur->parent; + goto next_sibling; + } + + return errors; +} + + +#include "entities.inc" + +/* Binary tree lookup code for entities added by JGM */ + +static const unsigned char *S_lookup(int i, int low, int hi, + const unsigned char *s, int len) { + int j; + int cmp = + strncmp((const char *)s, (const char *)cmark_entities[i].entity, len); + if (cmp == 0 && cmark_entities[i].entity[len] == 0) { + return (const unsigned char *)cmark_entities[i].bytes; + } else if (cmp <= 0 && i > low) { + j = i - ((i - low) / 2); + if (j == i) + j -= 1; + return S_lookup(j, low, i - 1, s, len); + } else if (cmp > 0 && i < hi) { + j = i + ((hi - i) / 2); + if (j == i) + j += 1; + return S_lookup(j, i + 1, hi, s, len); + } else { + return NULL; + } +} + +static const unsigned char *S_lookup_entity(const unsigned char *s, int len) { + return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len); +} + +bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size) { + bufsize_t i = 0; + + if (size >= 3 && src[0] == '#') { + int codepoint = 0; + int num_digits = 0; + + if (_isdigit(src[1])) { + for (i = 1; i < size && _isdigit(src[i]); ++i) { + codepoint = (codepoint * 10) + (src[i] - '0'); + + if (codepoint >= 0x110000) { + // Keep counting digits but + // avoid integer overflow. + codepoint = 0x110000; + } + } + + num_digits = i - 1; + } + + else if (src[1] == 'x' || src[1] == 'X') { + for (i = 2; i < size && _isxdigit(src[i]); ++i) { + codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9); + + if (codepoint >= 0x110000) { + // Keep counting digits but + // avoid integer overflow. + codepoint = 0x110000; + } + } + + num_digits = i - 2; + } + + if (num_digits >= 1 && num_digits <= 8 && i < size && src[i] == ';') { + if (codepoint == 0 || (codepoint >= 0xD800 && codepoint < 0xE000) || + codepoint >= 0x110000) { + codepoint = 0xFFFD; + } + cmark_utf8proc_encode_char(codepoint, ob); + return i + 1; + } + } + + else { + if (size > CMARK_ENTITY_MAX_LENGTH) + size = CMARK_ENTITY_MAX_LENGTH; + + for (i = CMARK_ENTITY_MIN_LENGTH; i < size; ++i) { + if (src[i] == ' ') + break; + + if (src[i] == ';') { + const unsigned char *entity = S_lookup_entity(src, i); + + if (entity != NULL) { + cmark_strbuf_puts(ob, (const char *)entity); + return i + 1; + } + + break; + } + } + } + + return 0; +} + +int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size) { + bufsize_t i = 0, org, ent; + + while (i < size) { + org = i; + while (i < size && src[i] != '&') + i++; + + if (likely(i > org)) { + if (unlikely(org == 0)) { + if (i >= size) + return 0; + + cmark_strbuf_grow(ob, HOUDINI_UNESCAPED_SIZE(size)); + } + + cmark_strbuf_put(ob, src + org, i - org); + } + + /* escaping */ + if (i >= size) + break; + + i++; + + ent = houdini_unescape_ent(ob, src + i, size - i); + i += ent; + + /* not really an entity */ + if (ent == 0) + cmark_strbuf_putc(ob, '&'); + } + + return 1; +} + +void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size) { + if (!houdini_unescape_html(ob, src, size)) + cmark_strbuf_put(ob, src, size); +} + + +static const int S_leaf_mask = + (1 << CMARK_NODE_HTML_BLOCK) | (1 << CMARK_NODE_THEMATIC_BREAK) | + (1 << CMARK_NODE_CODE_BLOCK) | (1 << CMARK_NODE_TEXT) | + (1 << CMARK_NODE_SOFTBREAK) | (1 << CMARK_NODE_LINEBREAK) | + (1 << CMARK_NODE_CODE) | (1 << CMARK_NODE_HTML_INLINE); + +cmark_iter *cmark_iter_new(cmark_node *root) { + if (root == NULL) { + return NULL; + } + cmark_mem *mem = root->content.mem; + cmark_iter *iter = (cmark_iter *)mem->calloc(1, sizeof(cmark_iter)); + iter->mem = mem; + iter->root = root; + iter->cur.ev_type = CMARK_EVENT_NONE; + iter->cur.node = NULL; + iter->next.ev_type = CMARK_EVENT_ENTER; + iter->next.node = root; + return iter; +} + +void cmark_iter_free(cmark_iter *iter) { iter->mem->free(iter); } + +static bool S_is_leaf(cmark_node *node) { + return ((1 << node->type) & S_leaf_mask) != 0; +} + +cmark_event_type cmark_iter_next(cmark_iter *iter) { + cmark_event_type ev_type = iter->next.ev_type; + cmark_node *node = iter->next.node; + + iter->cur.ev_type = ev_type; + iter->cur.node = node; + + if (ev_type == CMARK_EVENT_DONE) { + return ev_type; + } + + /* roll forward to next item, setting both fields */ + if (ev_type == CMARK_EVENT_ENTER && !S_is_leaf(node)) { + if (node->first_child == NULL) { + /* stay on this node but exit */ + iter->next.ev_type = CMARK_EVENT_EXIT; + } else { + iter->next.ev_type = CMARK_EVENT_ENTER; + iter->next.node = node->first_child; + } + } else if (node == iter->root) { + /* don't move past root */ + iter->next.ev_type = CMARK_EVENT_DONE; + iter->next.node = NULL; + } else if (node->next) { + iter->next.ev_type = CMARK_EVENT_ENTER; + iter->next.node = node->next; + } else if (node->parent) { + iter->next.ev_type = CMARK_EVENT_EXIT; + iter->next.node = node->parent; + } else { + assert(false); + iter->next.ev_type = CMARK_EVENT_DONE; + iter->next.node = NULL; + } + + return ev_type; +} + +void cmark_iter_reset(cmark_iter *iter, cmark_node *current, + cmark_event_type event_type) { + iter->next.ev_type = event_type; + iter->next.node = current; + cmark_iter_next(iter); +} + +cmark_node *cmark_iter_get_node(cmark_iter *iter) { return iter->cur.node; } + +cmark_event_type cmark_iter_get_event_type(cmark_iter *iter) { + return iter->cur.ev_type; +} + +cmark_node *cmark_iter_get_root(cmark_iter *iter) { return iter->root; } + +void cmark_consolidate_text_nodes(cmark_node *root) { + if (root == NULL) { + return; + } + cmark_iter *iter = cmark_iter_new(root); + cmark_strbuf buf = CMARK_BUF_INIT(iter->mem); + cmark_event_type ev_type; + cmark_node *cur, *tmp, *next; + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + if (ev_type == CMARK_EVENT_ENTER && cur->type == CMARK_NODE_TEXT && + cur->next && cur->next->type == CMARK_NODE_TEXT) { + cmark_strbuf_clear(&buf); + cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len); + tmp = cur->next; + while (tmp && tmp->type == CMARK_NODE_TEXT) { + cmark_iter_next(iter); // advance pointer + cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len); + next = tmp->next; + cmark_node_free(tmp); + tmp = next; + } + cmark_chunk_free(iter->mem, &cur->as.literal); + cur->as.literal = cmark_chunk_buf_detach(&buf); + } + } + + cmark_strbuf_free(&buf); + cmark_iter_free(iter); +} + + +#define BUFFER_SIZE 100 + +// Functions to convert cmark_nodes to HTML strings. + +static void escape_html(cmark_strbuf *dest, const unsigned char *source, + bufsize_t length) { + houdini_escape_html0(dest, source, length, 0); +} + +static CMARK_INLINE void cr(cmark_strbuf *html) { + if (html->size && html->ptr[html->size - 1] != '\n') + cmark_strbuf_putc(html, '\n'); +} + +struct render_state { + cmark_strbuf *html; + cmark_node *plain; +}; + +static void S_render_sourcepos(cmark_node *node, cmark_strbuf *html, + int options) { + char buffer[BUFFER_SIZE]; + if (CMARK_OPT_SOURCEPOS & options) { + snprintf(buffer, BUFFER_SIZE, " data-sourcepos=\"%d:%d-%d:%d\"", + cmark_node_get_start_line(node), cmark_node_get_start_column(node), + cmark_node_get_end_line(node), cmark_node_get_end_column(node)); + cmark_strbuf_puts(html, buffer); + } +} + +static int S_render_node(cmark_node *node, cmark_event_type ev_type, + struct render_state *state, int options) { + cmark_node *parent; + cmark_node *grandparent; + cmark_strbuf *html = state->html; + char start_heading[] = "plain == node) { // back at original node + state->plain = NULL; + } + + if (state->plain != NULL) { + switch (node->type) { + case CMARK_NODE_TEXT: + case CMARK_NODE_CODE: + case CMARK_NODE_HTML_INLINE: + escape_html(html, node->as.literal.data, node->as.literal.len); + break; + + case CMARK_NODE_LINEBREAK: + case CMARK_NODE_SOFTBREAK: + cmark_strbuf_putc(html, ' '); + break; + + default: + break; + } + return 1; + } + + switch (node->type) { + case CMARK_NODE_DOCUMENT: + break; + + case CMARK_NODE_BLOCK_QUOTE: + if (entering) { + cr(html); + cmark_strbuf_puts(html, "\n"); + } else { + cr(html); + cmark_strbuf_puts(html, "\n"); + } + break; + + case CMARK_NODE_LIST: { + cmark_list_type list_type = node->as.list.list_type; + int start = node->as.list.start; + + if (entering) { + cr(html); + if (list_type == CMARK_BULLET_LIST) { + cmark_strbuf_puts(html, "\n"); + } else if (start == 1) { + cmark_strbuf_puts(html, "\n"); + } else { + snprintf(buffer, BUFFER_SIZE, "
    \n"); + } + } else { + cmark_strbuf_puts(html, + list_type == CMARK_BULLET_LIST ? "\n" : "
\n"); + } + break; + } + + case CMARK_NODE_ITEM: + if (entering) { + cr(html); + cmark_strbuf_puts(html, "'); + } else { + cmark_strbuf_puts(html, "\n"); + } + break; + + case CMARK_NODE_HEADING: + if (entering) { + cr(html); + start_heading[2] = (char)('0' + node->as.heading.level); + cmark_strbuf_puts(html, start_heading); + S_render_sourcepos(node, html, options); + cmark_strbuf_putc(html, '>'); + } else { + end_heading[3] = (char)('0' + node->as.heading.level); + cmark_strbuf_puts(html, end_heading); + cmark_strbuf_puts(html, ">\n"); + } + break; + + case CMARK_NODE_CODE_BLOCK: + cr(html); + + if (node->as.code.info.len == 0) { + cmark_strbuf_puts(html, ""); + } else { + bufsize_t first_tag = 0; + while (first_tag < node->as.code.info.len && + !cmark_isspace(node->as.code.info.data[first_tag])) { + first_tag += 1; + } + + cmark_strbuf_puts(html, "as.code.info.data, first_tag); + cmark_strbuf_puts(html, "\">"); + } + + escape_html(html, node->as.code.literal.data, node->as.code.literal.len); + cmark_strbuf_puts(html, "\n"); + break; + + case CMARK_NODE_HTML_BLOCK: + cr(html); + if (options & CMARK_OPT_SAFE) { + cmark_strbuf_puts(html, ""); + } else { + cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); + } + cr(html); + break; + + case CMARK_NODE_CUSTOM_BLOCK: + cr(html); + if (entering) { + cmark_strbuf_put(html, node->as.custom.on_enter.data, + node->as.custom.on_enter.len); + } else { + cmark_strbuf_put(html, node->as.custom.on_exit.data, + node->as.custom.on_exit.len); + } + cr(html); + break; + + case CMARK_NODE_THEMATIC_BREAK: + cr(html); + cmark_strbuf_puts(html, "\n"); + break; + + case CMARK_NODE_PARAGRAPH: + parent = cmark_node_parent(node); + grandparent = cmark_node_parent(parent); + if (grandparent != NULL && grandparent->type == CMARK_NODE_LIST) { + tight = grandparent->as.list.tight; + } else { + tight = false; + } + if (!tight) { + if (entering) { + cr(html); + cmark_strbuf_puts(html, "'); + } else { + cmark_strbuf_puts(html, "

\n"); + } + } + break; + + case CMARK_NODE_TEXT: + escape_html(html, node->as.literal.data, node->as.literal.len); + break; + + case CMARK_NODE_LINEBREAK: + cmark_strbuf_puts(html, "
\n"); + break; + + case CMARK_NODE_SOFTBREAK: + if (options & CMARK_OPT_HARDBREAKS) { + cmark_strbuf_puts(html, "
\n"); + } else if (options & CMARK_OPT_NOBREAKS) { + cmark_strbuf_putc(html, ' '); + } else { + cmark_strbuf_putc(html, '\n'); + } + break; + + case CMARK_NODE_CODE: + cmark_strbuf_puts(html, ""); + escape_html(html, node->as.literal.data, node->as.literal.len); + cmark_strbuf_puts(html, ""); + break; + + case CMARK_NODE_HTML_INLINE: + if (options & CMARK_OPT_SAFE) { + cmark_strbuf_puts(html, ""); + } else { + cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); + } + break; + + case CMARK_NODE_CUSTOM_INLINE: + if (entering) { + cmark_strbuf_put(html, node->as.custom.on_enter.data, + node->as.custom.on_enter.len); + } else { + cmark_strbuf_put(html, node->as.custom.on_exit.data, + node->as.custom.on_exit.len); + } + break; + + case CMARK_NODE_STRONG: + if (entering) { + cmark_strbuf_puts(html, ""); + } else { + cmark_strbuf_puts(html, ""); + } + break; + + case CMARK_NODE_EMPH: + if (entering) { + cmark_strbuf_puts(html, ""); + } else { + cmark_strbuf_puts(html, ""); + } + break; + + case CMARK_NODE_LINK: + if (entering) { + cmark_strbuf_puts(html, "as.link.url, 0))) { + houdini_escape_href(html, node->as.link.url.data, + node->as.link.url.len); + } + if (node->as.link.title.len) { + cmark_strbuf_puts(html, "\" title=\""); + escape_html(html, node->as.link.title.data, node->as.link.title.len); + } + cmark_strbuf_puts(html, "\">"); + } else { + cmark_strbuf_puts(html, ""); + } + break; + + case CMARK_NODE_IMAGE: + if (entering) { + cmark_strbuf_puts(html, "as.link.url, 0))) { + houdini_escape_href(html, node->as.link.url.data, + node->as.link.url.len); + } + cmark_strbuf_puts(html, "\" alt=\""); + state->plain = node; + } else { + if (node->as.link.title.len) { + cmark_strbuf_puts(html, "\" title=\""); + escape_html(html, node->as.link.title.data, node->as.link.title.len); + } + + cmark_strbuf_puts(html, "\" />"); + } + break; + + default: + assert(false); + break; + } + + // cmark_strbuf_putc(html, 'x'); + return 1; +} + +char *cmark_render_html(cmark_node *root, int options) { + char *result; + cmark_strbuf html = CMARK_BUF_INIT(cmark_node_mem(root)); + cmark_event_type ev_type; + cmark_node *cur; + struct render_state state = {&html, NULL}; + cmark_iter *iter = cmark_iter_new(root); + + while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + cur = cmark_iter_get_node(iter); + S_render_node(cur, ev_type, &state, options); + } + result = (char *)cmark_strbuf_detach(&html); + + cmark_iter_free(iter); + return result; +} + + + +/** + * According to the OWASP rules: + * + * & --> & + * < --> < + * > --> > + * " --> " + * ' --> ' ' is not recommended + * / --> / forward slash is included as it helps end an HTML entity + * + */ +static const char HTML_ESCAPE_TABLE[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const char *HTML_ESCAPES[] = {"", """, "&", "'", + "/", "<", ">"}; + +int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size, + int secure) { + bufsize_t i = 0, org, esc = 0; + + while (i < size) { + org = i; + while (i < size && (esc = HTML_ESCAPE_TABLE[src[i]]) == 0) + i++; + + if (i > org) + cmark_strbuf_put(ob, src + org, i - org); + + /* escaping */ + if (unlikely(i >= size)) + break; + + /* The forward slash is only escaped in secure mode */ + if ((src[i] == '/' || src[i] == '\'') && !secure) { + cmark_strbuf_putc(ob, src[i]); + } else { + cmark_strbuf_puts(ob, HTML_ESCAPES[esc]); + } + + i++; + } + + return 1; +} + +int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { + return houdini_escape_html0(ob, src, size, 1); +} + + +/* + * The following characters will not be escaped: + * + * -_.+!*'(),%#@?=;:/,+&$ alphanum + * + * Note that this character set is the addition of: + * + * - The characters which are safe to be in an URL + * - The characters which are *not* safe to be in + * an URL because they are RESERVED characters. + * + * We asume (lazily) that any RESERVED char that + * appears inside an URL is actually meant to + * have its native function (i.e. as an URL + * component/separator) and hence needs no escaping. + * + * There are two exceptions: the chacters & (amp) + * and ' (single quote) do not appear in the table. + * They are meant to appear in the URL as components, + * yet they require special HTML-entity escaping + * to generate valid HTML markup. + * + * All other characters will be escaped to %XX. + * + */ +static const char HREF_SAFE[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { + static const uint8_t hex_chars[] = "0123456789ABCDEF"; + bufsize_t i = 0, org; + uint8_t hex_str[3]; + + hex_str[0] = '%'; + + while (i < size) { + org = i; + while (i < size && HREF_SAFE[src[i]] != 0) + i++; + + if (likely(i > org)) + cmark_strbuf_put(ob, src + org, i - org); + + /* escaping */ + if (i >= size) + break; + + switch (src[i]) { + /* amp appears all the time in URLs, but needs + * HTML-entity escaping to be inside an href */ + case '&': + cmark_strbuf_puts(ob, "&"); + break; + + /* the single quote is a valid URL character + * according to the standard; it needs HTML + * entity escaping too */ + case '\'': + cmark_strbuf_puts(ob, "'"); + break; + +/* the space can be escaped to %20 or a plus + * sign. we're going with the generic escape + * for now. the plus thing is more commonly seen + * when building GET strings */ +#if 0 + case ' ': + cmark_strbuf_putc(ob, '+'); + break; +#endif + + /* every other character goes with a %XX escaping */ + default: + hex_str[1] = hex_chars[(src[i] >> 4) & 0xF]; + hex_str[2] = hex_chars[src[i] & 0xF]; + cmark_strbuf_put(ob, hex_str, 3); + } + + i++; + } + + return 1; +} ADDED src/cmark_amalgamation.h Index: src/cmark_amalgamation.h ================================================================== --- /dev/null +++ src/cmark_amalgamation.h @@ -0,0 +1,2019 @@ +#ifndef CMARK_H +#define CMARK_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif +#ifndef CMARK_CONFIG_H +#define CMARK_CONFIG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define HAVE_STDBOOL_H + +#ifdef HAVE_STDBOOL_H + #include +#elif !defined(__cplusplus) + typedef char bool; +#endif + +#define HAVE___BUILTIN_EXPECT + +#define HAVE___ATTRIBUTE__ + +#ifdef HAVE___ATTRIBUTE__ + #define CMARK_ATTRIBUTE(list) __attribute__ (list) +#else + #define CMARK_ATTRIBUTE(list) +#endif + +#ifndef CMARK_INLINE + #if defined(_MSC_VER) && !defined(__cplusplus) + #define CMARK_INLINE __inline + #else + #define CMARK_INLINE inline + #endif +#endif + +/* snprintf and vsnprintf fallbacks for MSVC before 2015, + due to Valentin Milea http://stackoverflow.com/questions/2915672/ +*/ + +#if defined(_MSC_VER) && _MSC_VER < 1900 + +#include +#include + +#define snprintf c99_snprintf +#define vsnprintf c99_vsnprintf + +CMARK_INLINE int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap) +{ + int count = -1; + + if (size != 0) + count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap); + if (count == -1) + count = _vscprintf(format, ap); + + return count; +} + +CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...) +{ + int count; + va_list ap; + + va_start(ap, format); + count = c99_vsnprintf(outBuf, size, format, ap); + va_end(ap); + + return count; +} + +#endif + +#ifdef __cplusplus +} +#endif + +#endif +/** # NAME + * + * **cmark** - CommonMark parsing, manipulating, and rendering + */ +#ifndef CMARK_EXPORT_H +#define CMARK_EXPORT_H + +#ifdef CMARK_STATIC_DEFINE +# define CMARK_EXPORT +# define CMARK_NO_EXPORT +#else +# ifndef CMARK_EXPORT +# ifdef libcmark_EXPORTS + /* We are building this library */ +# define CMARK_EXPORT __attribute__((visibility("default"))) +# else + /* We are using this library */ +# define CMARK_EXPORT __attribute__((visibility("default"))) +# endif +# endif + +# ifndef CMARK_NO_EXPORT +# define CMARK_NO_EXPORT __attribute__((visibility("hidden"))) +# endif +#endif + +#ifndef CMARK_DEPRECATED +# define CMARK_DEPRECATED __attribute__ ((__deprecated__)) +#endif + +#ifndef CMARK_DEPRECATED_EXPORT +# define CMARK_DEPRECATED_EXPORT CMARK_EXPORT CMARK_DEPRECATED +#endif + +#ifndef CMARK_DEPRECATED_NO_EXPORT +# define CMARK_DEPRECATED_NO_EXPORT CMARK_NO_EXPORT CMARK_DEPRECATED +#endif + +#if 0 /* DEFINE_NO_DEPRECATED */ +# ifndef CMARK_NO_DEPRECATED +# define CMARK_NO_DEPRECATED +# endif +#endif + +#endif +/** # DESCRIPTION + * + * ## Simple Interface + */ + +/** Convert 'text' (assumed to be a UTF-8 encoded string with length + * 'len') from CommonMark Markdown to HTML, returning a null-terminated, + * UTF-8-encoded string. It is the caller's responsibility + * to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_markdown_to_html(const char *text, size_t len, int options); + +/** ## Node Structure + */ + +typedef enum { + /* Error status */ + CMARK_NODE_NONE, + + /* Block */ + CMARK_NODE_DOCUMENT, + CMARK_NODE_BLOCK_QUOTE, + CMARK_NODE_LIST, + CMARK_NODE_ITEM, + CMARK_NODE_CODE_BLOCK, + CMARK_NODE_HTML_BLOCK, + CMARK_NODE_CUSTOM_BLOCK, + CMARK_NODE_PARAGRAPH, + CMARK_NODE_HEADING, + CMARK_NODE_THEMATIC_BREAK, + + CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, + CMARK_NODE_LAST_BLOCK = CMARK_NODE_THEMATIC_BREAK, + + /* Inline */ + CMARK_NODE_TEXT, + CMARK_NODE_SOFTBREAK, + CMARK_NODE_LINEBREAK, + CMARK_NODE_CODE, + CMARK_NODE_HTML_INLINE, + CMARK_NODE_CUSTOM_INLINE, + CMARK_NODE_EMPH, + CMARK_NODE_STRONG, + CMARK_NODE_LINK, + CMARK_NODE_IMAGE, + + CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT, + CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, +} cmark_node_type; + +/* For backwards compatibility: */ +#define CMARK_NODE_HEADER CMARK_NODE_HEADING +#define CMARK_NODE_HRULE CMARK_NODE_THEMATIC_BREAK +#define CMARK_NODE_HTML CMARK_NODE_HTML_BLOCK +#define CMARK_NODE_INLINE_HTML CMARK_NODE_HTML_INLINE + +typedef enum { + CMARK_NO_LIST, + CMARK_BULLET_LIST, + CMARK_ORDERED_LIST +} cmark_list_type; + +typedef enum { + CMARK_NO_DELIM, + CMARK_PERIOD_DELIM, + CMARK_PAREN_DELIM +} cmark_delim_type; + +typedef struct cmark_node cmark_node; +typedef struct cmark_parser cmark_parser; +typedef struct cmark_iter cmark_iter; + +/** + * ## Custom memory allocator support + */ + +/** Defines the memory allocation functions to be used by CMark + * when parsing and allocating a document tree + */ +typedef struct cmark_mem { + void *(*calloc)(size_t, size_t); + void *(*realloc)(void *, size_t); + void (*free)(void *); +} cmark_mem; + +/** + * ## Creating and Destroying Nodes + */ + +/** Creates a new node of type 'type'. Note that the node may have + * other required properties, which it is the caller's responsibility + * to assign. + */ +CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type); + +/** Same as `cmark_node_new`, but explicitly listing the memory + * allocator used to allocate the node. Note: be sure to use the same + * allocator for every node in a tree, or bad things can happen. + */ +CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type, + cmark_mem *mem); + +/** Frees the memory allocated for a node and any children. + */ +CMARK_EXPORT void cmark_node_free(cmark_node *node); + +/** + * ## Tree Traversal + */ + +/** Returns the next node in the sequence after 'node', or NULL if + * there is none. + */ +CMARK_EXPORT cmark_node *cmark_node_next(cmark_node *node); + +/** Returns the previous node in the sequence after 'node', or NULL if + * there is none. + */ +CMARK_EXPORT cmark_node *cmark_node_previous(cmark_node *node); + +/** Returns the parent of 'node', or NULL if there is none. + */ +CMARK_EXPORT cmark_node *cmark_node_parent(cmark_node *node); + +/** Returns the first child of 'node', or NULL if 'node' has no children. + */ +CMARK_EXPORT cmark_node *cmark_node_first_child(cmark_node *node); + +/** Returns the last child of 'node', or NULL if 'node' has no children. + */ +CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); + +/** + * ## Iterator + * + * An iterator will walk through a tree of nodes, starting from a root + * node, returning one node at a time, together with information about + * whether the node is being entered or exited. The iterator will + * first descend to a child node, if there is one. When there is no + * child, the iterator will go to the next sibling. When there is no + * next sibling, the iterator will return to the parent (but with + * a 'cmark_event_type' of `CMARK_EVENT_EXIT`). The iterator will + * return `CMARK_EVENT_DONE` when it reaches the root node again. + * One natural application is an HTML renderer, where an `ENTER` event + * outputs an open tag and an `EXIT` event outputs a close tag. + * An iterator might also be used to transform an AST in some systematic + * way, for example, turning all level-3 headings into regular paragraphs. + * + * void + * usage_example(cmark_node *root) { + * cmark_event_type ev_type; + * cmark_iter *iter = cmark_iter_new(root); + * + * while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + * cmark_node *cur = cmark_iter_get_node(iter); + * // Do something with `cur` and `ev_type` + * } + * + * cmark_iter_free(iter); + * } + * + * Iterators will never return `EXIT` events for leaf nodes, which are nodes + * of type: + * + * * CMARK_NODE_HTML_BLOCK + * * CMARK_NODE_THEMATIC_BREAK + * * CMARK_NODE_CODE_BLOCK + * * CMARK_NODE_TEXT + * * CMARK_NODE_SOFTBREAK + * * CMARK_NODE_LINEBREAK + * * CMARK_NODE_CODE + * * CMARK_NODE_HTML_INLINE + * + * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for + * leaf nodes. + */ + +typedef enum { + CMARK_EVENT_NONE, + CMARK_EVENT_DONE, + CMARK_EVENT_ENTER, + CMARK_EVENT_EXIT +} cmark_event_type; + +/** Creates a new iterator starting at 'root'. The current node and event + * type are undefined until 'cmark_iter_next' is called for the first time. + * The memory allocated for the iterator should be released using + * 'cmark_iter_free' when it is no longer needed. + */ +CMARK_EXPORT +cmark_iter *cmark_iter_new(cmark_node *root); + +/** Frees the memory allocated for an iterator. + */ +CMARK_EXPORT +void cmark_iter_free(cmark_iter *iter); + +/** Advances to the next node and returns the event type (`CMARK_EVENT_ENTER`, + * `CMARK_EVENT_EXIT` or `CMARK_EVENT_DONE`). + */ +CMARK_EXPORT +cmark_event_type cmark_iter_next(cmark_iter *iter); + +/** Returns the current node. + */ +CMARK_EXPORT +cmark_node *cmark_iter_get_node(cmark_iter *iter); + +/** Returns the current event type. + */ +CMARK_EXPORT +cmark_event_type cmark_iter_get_event_type(cmark_iter *iter); + +/** Returns the root node. + */ +CMARK_EXPORT +cmark_node *cmark_iter_get_root(cmark_iter *iter); + +/** Resets the iterator so that the current node is 'current' and + * the event type is 'event_type'. The new current node must be a + * descendant of the root node or the root node itself. + */ +CMARK_EXPORT +void cmark_iter_reset(cmark_iter *iter, cmark_node *current, + cmark_event_type event_type); + +/** + * ## Accessors + */ + +/** Returns the user data of 'node'. + */ +CMARK_EXPORT void *cmark_node_get_user_data(cmark_node *node); + +/** Sets arbitrary user data for 'node'. Returns 1 on success, + * 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_user_data(cmark_node *node, void *user_data); + +/** Returns the type of 'node', or `CMARK_NODE_NONE` on error. + */ +CMARK_EXPORT cmark_node_type cmark_node_get_type(cmark_node *node); + +/** Like 'cmark_node_get_type', but returns a string representation + of the type, or `""`. + */ +CMARK_EXPORT +const char *cmark_node_get_type_string(cmark_node *node); + +/** Returns the string contents of 'node', or an empty + string if none is set. + */ +CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node); + +/** Sets the string contents of 'node'. Returns 1 on success, + * 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_literal(cmark_node *node, const char *content); + +/** Returns the heading level of 'node', or 0 if 'node' is not a heading. + */ +CMARK_EXPORT int cmark_node_get_heading_level(cmark_node *node); + +/* For backwards compatibility */ +#define cmark_node_get_header_level cmark_node_get_heading_level +#define cmark_node_set_header_level cmark_node_set_heading_level + +/** Sets the heading level of 'node', returning 1 on success and 0 on error. + */ +CMARK_EXPORT int cmark_node_set_heading_level(cmark_node *node, int level); + +/** Returns the list type of 'node', or `CMARK_NO_LIST` if 'node' + * is not a list. + */ +CMARK_EXPORT cmark_list_type cmark_node_get_list_type(cmark_node *node); + +/** Sets the list type of 'node', returning 1 on success and 0 on error. + */ +CMARK_EXPORT int cmark_node_set_list_type(cmark_node *node, + cmark_list_type type); + +/** Returns the list delimiter type of 'node', or `CMARK_NO_DELIM` if 'node' + * is not a list. + */ +CMARK_EXPORT cmark_delim_type cmark_node_get_list_delim(cmark_node *node); + +/** Sets the list delimiter type of 'node', returning 1 on success and 0 + * on error. + */ +CMARK_EXPORT int cmark_node_set_list_delim(cmark_node *node, + cmark_delim_type delim); + +/** Returns starting number of 'node', if it is an ordered list, otherwise 0. + */ +CMARK_EXPORT int cmark_node_get_list_start(cmark_node *node); + +/** Sets starting number of 'node', if it is an ordered list. Returns 1 + * on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_list_start(cmark_node *node, int start); + +/** Returns 1 if 'node' is a tight list, 0 otherwise. + */ +CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node); + +/** Sets the "tightness" of a list. Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight); + +/** Returns the info string from a fenced code block. + */ +CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node); + +/** Sets the info string in a fenced code block, returning 1 on + * success and 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info); + +/** Returns the URL of a link or image 'node', or an empty string + if no URL is set. + */ +CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node); + +/** Sets the URL of a link or image 'node'. Returns 1 on success, + * 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url); + +/** Returns the title of a link or image 'node', or an empty + string if no title is set. + */ +CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node); + +/** Sets the title of a link or image 'node'. Returns 1 on success, + * 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title); + +/** Returns the literal "on enter" text for a custom 'node', or + an empty string if no on_enter is set. + */ +CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node); + +/** Sets the literal text to render "on enter" for a custom 'node'. + Any children of the node will be rendered after this text. + Returns 1 on success 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node, + const char *on_enter); + +/** Returns the literal "on exit" text for a custom 'node', or + an empty string if no on_exit is set. + */ +CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node); + +/** Sets the literal text to render "on exit" for a custom 'node'. + Any children of the node will be rendered before this text. + Returns 1 on success 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_on_exit(cmark_node *node, const char *on_exit); + +/** Returns the line on which 'node' begins. + */ +CMARK_EXPORT int cmark_node_get_start_line(cmark_node *node); + +/** Returns the column at which 'node' begins. + */ +CMARK_EXPORT int cmark_node_get_start_column(cmark_node *node); + +/** Returns the line on which 'node' ends. + */ +CMARK_EXPORT int cmark_node_get_end_line(cmark_node *node); + +/** Returns the column at which 'node' ends. + */ +CMARK_EXPORT int cmark_node_get_end_column(cmark_node *node); + +/** + * ## Tree Manipulation + */ + +/** Unlinks a 'node', removing it from the tree, but not freeing its + * memory. (Use 'cmark_node_free' for that.) + */ +CMARK_EXPORT void cmark_node_unlink(cmark_node *node); + +/** Inserts 'sibling' before 'node'. Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_insert_before(cmark_node *node, + cmark_node *sibling); + +/** Inserts 'sibling' after 'node'. Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling); + +/** Replaces 'oldnode' with 'newnode' and unlinks 'oldnode' (but does + * not free its memory). + * Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode); + +/** Adds 'child' to the beginning of the children of 'node'. + * Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_prepend_child(cmark_node *node, cmark_node *child); + +/** Adds 'child' to the end of the children of 'node'. + * Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child); + +/** Consolidates adjacent text nodes. + */ +CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root); + +/** + * ## Parsing + * + * Simple interface: + * + * cmark_node *document = cmark_parse_document("Hello *world*", 13, + * CMARK_OPT_DEFAULT); + * + * Streaming interface: + * + * cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); + * FILE *fp = fopen("myfile.md", "rb"); + * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { + * cmark_parser_feed(parser, buffer, bytes); + * if (bytes < sizeof(buffer)) { + * break; + * } + * } + * document = cmark_parser_finish(parser); + * cmark_parser_free(parser); + */ + +/** Creates a new parser object. + */ +CMARK_EXPORT +cmark_parser *cmark_parser_new(int options); + +/** Creates a new parser object with the given memory allocator + */ +CMARK_EXPORT +cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem); + +/** Frees memory allocated for a parser object. + */ +CMARK_EXPORT +void cmark_parser_free(cmark_parser *parser); + +/** Feeds a string of length 'len' to 'parser'. + */ +CMARK_EXPORT +void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); + +/** Finish parsing and return a pointer to a tree of nodes. + */ +CMARK_EXPORT +cmark_node *cmark_parser_finish(cmark_parser *parser); + +/** Parse a CommonMark document in 'buffer' of length 'len'. + * Returns a pointer to a tree of nodes. The memory allocated for + * the node tree should be released using 'cmark_node_free' + * when it is no longer needed. + */ +CMARK_EXPORT +cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); + +/** Parse a CommonMark document in file 'f', returning a pointer to + * a tree of nodes. The memory allocated for the node tree should be + * released using 'cmark_node_free' when it is no longer needed. + */ +CMARK_EXPORT +cmark_node *cmark_parse_file(FILE *f, int options); + +/** + * ## Rendering + */ + +/** Render a 'node' tree as XML. It is the caller's responsibility + * to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_render_xml(cmark_node *root, int options); + +/** Render a 'node' tree as an HTML fragment. It is up to the user + * to add an appropriate header and footer. It is the caller's + * responsibility to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_render_html(cmark_node *root, int options); + +/** Render a 'node' tree as a groff man page, without the header. + * It is the caller's responsibility to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_render_man(cmark_node *root, int options, int width); + +/** Render a 'node' tree as a commonmark document. + * It is the caller's responsibility to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_render_commonmark(cmark_node *root, int options, int width); + +/** Render a 'node' tree as a LaTeX document. + * It is the caller's responsibility to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_render_latex(cmark_node *root, int options, int width); + +/** + * ## Options + */ + +/** Default options. + */ +#define CMARK_OPT_DEFAULT 0 + +/** + * ### Options affecting rendering + */ + +/** Include a `data-sourcepos` attribute on all block elements. + */ +#define CMARK_OPT_SOURCEPOS (1 << 1) + +/** Render `softbreak` elements as hard line breaks. + */ +#define CMARK_OPT_HARDBREAKS (1 << 2) + +/** Suppress raw HTML and unsafe links (`javascript:`, `vbscript:`, + * `file:`, and `data:`, except for `image/png`, `image/gif`, + * `image/jpeg`, or `image/webp` mime types). Raw HTML is replaced + * by a placeholder HTML comment. Unsafe links are replaced by + * empty strings. + */ +#define CMARK_OPT_SAFE (1 << 3) + +/** Render `softbreak` elements as spaces. + */ +#define CMARK_OPT_NOBREAKS (1 << 4) + +/** + * ### Options affecting parsing + */ + +/** Normalize tree by consolidating adjacent text nodes. + */ +#define CMARK_OPT_NORMALIZE (1 << 8) + +/** Validate UTF-8 in the input before parsing, replacing illegal + * sequences with the replacement character U+FFFD. + */ +#define CMARK_OPT_VALIDATE_UTF8 (1 << 9) + +/** Convert straight quotes to curly, --- to em dashes, -- to en dashes. + */ +#define CMARK_OPT_SMART (1 << 10) + +/** + * ## Version information + */ + +/** The library version as integer for runtime checks. Also available as + * macro CMARK_VERSION for compile time checks. + * + * * Bits 16-23 contain the major version. + * * Bits 8-15 contain the minor version. + * * Bits 0-7 contain the patchlevel. + * + * In hexadecimal format, the number 0x010203 represents version 1.2.3. + */ +CMARK_EXPORT +int cmark_version(void); + +/** The library version string for runtime checks. Also available as + * macro CMARK_VERSION_STRING for compile time checks. + */ +CMARK_EXPORT +const char *cmark_version_string(void); + +/** # AUTHORS + * + * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer. + */ + +#ifndef CMARK_NO_SHORT_NAMES +#define NODE_DOCUMENT CMARK_NODE_DOCUMENT +#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE +#define NODE_LIST CMARK_NODE_LIST +#define NODE_ITEM CMARK_NODE_ITEM +#define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK +#define NODE_HTML_BLOCK CMARK_NODE_HTML_BLOCK +#define NODE_CUSTOM_BLOCK CMARK_NODE_CUSTOM_BLOCK +#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH +#define NODE_HEADING CMARK_NODE_HEADING +#define NODE_HEADER CMARK_NODE_HEADER +#define NODE_THEMATIC_BREAK CMARK_NODE_THEMATIC_BREAK +#define NODE_HRULE CMARK_NODE_HRULE +#define NODE_TEXT CMARK_NODE_TEXT +#define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK +#define NODE_LINEBREAK CMARK_NODE_LINEBREAK +#define NODE_CODE CMARK_NODE_CODE +#define NODE_HTML_INLINE CMARK_NODE_HTML_INLINE +#define NODE_CUSTOM_INLINE CMARK_NODE_CUSTOM_INLINE +#define NODE_EMPH CMARK_NODE_EMPH +#define NODE_STRONG CMARK_NODE_STRONG +#define NODE_LINK CMARK_NODE_LINK +#define NODE_IMAGE CMARK_NODE_IMAGE +#define BULLET_LIST CMARK_BULLET_LIST +#define ORDERED_LIST CMARK_ORDERED_LIST +#define PERIOD_DELIM CMARK_PERIOD_DELIM +#define PAREN_DELIM CMARK_PAREN_DELIM +#endif + +#ifdef __cplusplus +} +#endif + +#endif + +#ifndef CMARK_BUFFER_H +#define CMARK_BUFFER_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int32_t bufsize_t; + +typedef struct { + cmark_mem *mem; + unsigned char *ptr; + bufsize_t asize, size; +} cmark_strbuf; + +extern unsigned char cmark_strbuf__initbuf[]; + +#define CMARK_BUF_INIT(mem) \ + { mem, cmark_strbuf__initbuf, 0, 0 } + +/** + * Initialize a cmark_strbuf structure. + * + * For the cases where CMARK_BUF_INIT cannot be used to do static + * initialization. + */ +void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, + bufsize_t initial_size); + +/** + * Grow the buffer to hold at least `target_size` bytes. + */ +void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size); + +void cmark_strbuf_free(cmark_strbuf *buf); +void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b); + +bufsize_t cmark_strbuf_len(const cmark_strbuf *buf); + +int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b); + +unsigned char *cmark_strbuf_detach(cmark_strbuf *buf); +void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, + const cmark_strbuf *buf); + +static CMARK_INLINE const char *cmark_strbuf_cstr(const cmark_strbuf *buf) { + return (char *)buf->ptr; +} + +#define cmark_strbuf_at(buf, n) ((buf)->ptr[n]) + +void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, + bufsize_t len); +void cmark_strbuf_sets(cmark_strbuf *buf, const char *string); +void cmark_strbuf_putc(cmark_strbuf *buf, int c); +void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, + bufsize_t len); +void cmark_strbuf_puts(cmark_strbuf *buf, const char *string); +void cmark_strbuf_clear(cmark_strbuf *buf); + +bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos); +bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos); +void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n); +void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len); +void cmark_strbuf_rtrim(cmark_strbuf *buf); +void cmark_strbuf_trim(cmark_strbuf *buf); +void cmark_strbuf_normalize_whitespace(cmark_strbuf *s); +void cmark_strbuf_unescape(cmark_strbuf *s); + +#ifdef __cplusplus +} +#endif + +#endif + +#ifndef CMARK_CMARK_CTYPE_H +#define CMARK_CMARK_CTYPE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** Locale-independent versions of functions from ctype.h. + * We want cmark to behave the same no matter what the system locale. + */ + +int cmark_isspace(char c); + +int cmark_ispunct(char c); + +int cmark_isalnum(char c); + +int cmark_isdigit(char c); + +int cmark_isalpha(char c); + +#ifdef __cplusplus +} +#endif + +#endif + +#ifndef CMARK_CHUNK_H +#define CMARK_CHUNK_H + +#include +#include +#include + +#define CMARK_CHUNK_EMPTY \ + { NULL, 0, 0 } + +typedef struct { + unsigned char *data; + bufsize_t len; + bufsize_t alloc; // also implies a NULL-terminated string +} cmark_chunk; + +static CMARK_INLINE void cmark_chunk_free(cmark_mem *mem, cmark_chunk *c) { + if (c->alloc) + mem->free(c->data); + + c->data = NULL; + c->alloc = 0; + c->len = 0; +} + +static CMARK_INLINE void cmark_chunk_ltrim(cmark_chunk *c) { + assert(!c->alloc); + + while (c->len && cmark_isspace(c->data[0])) { + c->data++; + c->len--; + } +} + +static CMARK_INLINE void cmark_chunk_rtrim(cmark_chunk *c) { + assert(!c->alloc); + + while (c->len > 0) { + if (!cmark_isspace(c->data[c->len - 1])) + break; + + c->len--; + } +} + +static CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) { + cmark_chunk_ltrim(c); + cmark_chunk_rtrim(c); +} + +static CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, + bufsize_t offset) { + const unsigned char *p = + (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); + return p ? (bufsize_t)(p - ch->data) : ch->len; +} + +static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_mem *mem, + cmark_chunk *c) { + unsigned char *str; + + if (c->alloc) { + return (char *)c->data; + } + str = (unsigned char *)mem->calloc(c->len + 1, 1); + if (c->len > 0) { + memcpy(str, c->data, c->len); + } + str[c->len] = 0; + c->data = str; + c->alloc = 1; + + return (char *)str; +} + +static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c, + const char *str) { + unsigned char *old = c->alloc ? c->data : NULL; + if (str == NULL) { + c->len = 0; + c->data = NULL; + c->alloc = 0; + } else { + c->len = (bufsize_t)strlen(str); + c->data = (unsigned char *)mem->calloc(c->len + 1, 1); + c->alloc = 1; + memcpy(c->data, str, c->len + 1); + } + if (old != NULL) { + mem->free(old); + } +} + +static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { + bufsize_t len = data ? (bufsize_t)strlen(data) : 0; + cmark_chunk c = {(unsigned char *)data, len, 0}; + return c; +} + +static CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, + bufsize_t pos, bufsize_t len) { + cmark_chunk c = {ch->data + pos, len, 0}; + return c; +} + +static CMARK_INLINE cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) { + cmark_chunk c; + + c.len = buf->size; + c.data = cmark_strbuf_detach(buf); + c.alloc = 1; + + return c; +} + +#endif + +#ifndef CMARK_NODE_H +#define CMARK_NODE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + + +typedef struct { + cmark_list_type list_type; + int marker_offset; + int padding; + int start; + cmark_delim_type delimiter; + unsigned char bullet_char; + bool tight; +} cmark_list; + +typedef struct { + cmark_chunk info; + cmark_chunk literal; + uint8_t fence_length; + uint8_t fence_offset; + unsigned char fence_char; + int8_t fenced; +} cmark_code; + +typedef struct { + int level; + bool setext; +} cmark_heading; + +typedef struct { + cmark_chunk url; + cmark_chunk title; +} cmark_link; + +typedef struct { + cmark_chunk on_enter; + cmark_chunk on_exit; +} cmark_custom; + +enum cmark_node__internal_flags { + CMARK_NODE__OPEN = (1 << 0), + CMARK_NODE__LAST_LINE_BLANK = (1 << 1), +}; + +struct cmark_node { + cmark_strbuf content; + + struct cmark_node *next; + struct cmark_node *prev; + struct cmark_node *parent; + struct cmark_node *first_child; + struct cmark_node *last_child; + + void *user_data; + + int start_line; + int start_column; + int end_line; + int end_column; + uint16_t type; + uint16_t flags; + + union { + cmark_chunk literal; + cmark_list list; + cmark_code code; + cmark_heading heading; + cmark_link link; + cmark_custom custom; + int html_block_type; + } as; +}; + +static CMARK_INLINE cmark_mem *cmark_node_mem(cmark_node *node) { + return node->content.mem; +} +CMARK_EXPORT int cmark_node_check(cmark_node *node, FILE *out); + +#ifdef __cplusplus +} +#endif + +#endif +#ifndef CMARK_HOUDINI_H +#define CMARK_HOUDINI_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#ifdef HAVE___BUILTIN_EXPECT +#define likely(x) __builtin_expect((x), 1) +#define unlikely(x) __builtin_expect((x), 0) +#else +#define likely(x) (x) +#define unlikely(x) (x) +#endif + +#ifdef HOUDINI_USE_LOCALE +#define _isxdigit(c) isxdigit(c) +#define _isdigit(c) isdigit(c) +#else +/* + * Helper _isdigit methods -- do not trust the current locale + * */ +#define _isxdigit(c) (strchr("0123456789ABCDEFabcdef", (c)) != NULL) +#define _isdigit(c) ((c) >= '0' && (c) <= '9') +#endif + +#define HOUDINI_ESCAPED_SIZE(x) (((x)*12) / 10) +#define HOUDINI_UNESCAPED_SIZE(x) (x) + +extern bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size); +extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size); +extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size, int secure); +extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size); +extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size); +extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, + bufsize_t size); + +#ifdef __cplusplus +} +#endif + +#endif +#ifndef CMARK_H +#define CMARK_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** # NAME + * + * **cmark** - CommonMark parsing, manipulating, and rendering + */ + +/** # DESCRIPTION + * + * ## Simple Interface + */ + +/** Convert 'text' (assumed to be a UTF-8 encoded string with length + * 'len') from CommonMark Markdown to HTML, returning a null-terminated, + * UTF-8-encoded string. It is the caller's responsibility + * to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_markdown_to_html(const char *text, size_t len, int options); + +/** ## Node Structure + */ + +typedef enum { + /* Error status */ + CMARK_NODE_NONE, + + /* Block */ + CMARK_NODE_DOCUMENT, + CMARK_NODE_BLOCK_QUOTE, + CMARK_NODE_LIST, + CMARK_NODE_ITEM, + CMARK_NODE_CODE_BLOCK, + CMARK_NODE_HTML_BLOCK, + CMARK_NODE_CUSTOM_BLOCK, + CMARK_NODE_PARAGRAPH, + CMARK_NODE_HEADING, + CMARK_NODE_THEMATIC_BREAK, + + CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, + CMARK_NODE_LAST_BLOCK = CMARK_NODE_THEMATIC_BREAK, + + /* Inline */ + CMARK_NODE_TEXT, + CMARK_NODE_SOFTBREAK, + CMARK_NODE_LINEBREAK, + CMARK_NODE_CODE, + CMARK_NODE_HTML_INLINE, + CMARK_NODE_CUSTOM_INLINE, + CMARK_NODE_EMPH, + CMARK_NODE_STRONG, + CMARK_NODE_LINK, + CMARK_NODE_IMAGE, + + CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT, + CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, +} cmark_node_type; + +/* For backwards compatibility: */ +#define CMARK_NODE_HEADER CMARK_NODE_HEADING +#define CMARK_NODE_HRULE CMARK_NODE_THEMATIC_BREAK +#define CMARK_NODE_HTML CMARK_NODE_HTML_BLOCK +#define CMARK_NODE_INLINE_HTML CMARK_NODE_HTML_INLINE + +typedef enum { + CMARK_NO_LIST, + CMARK_BULLET_LIST, + CMARK_ORDERED_LIST +} cmark_list_type; + +typedef enum { + CMARK_NO_DELIM, + CMARK_PERIOD_DELIM, + CMARK_PAREN_DELIM +} cmark_delim_type; + +typedef struct cmark_node cmark_node; +typedef struct cmark_parser cmark_parser; +typedef struct cmark_iter cmark_iter; + +/** + * ## Custom memory allocator support + */ + +/** Defines the memory allocation functions to be used by CMark + * when parsing and allocating a document tree + */ +typedef struct cmark_mem { + void *(*calloc)(size_t, size_t); + void *(*realloc)(void *, size_t); + void (*free)(void *); +} cmark_mem; + +/** + * ## Creating and Destroying Nodes + */ + +/** Creates a new node of type 'type'. Note that the node may have + * other required properties, which it is the caller's responsibility + * to assign. + */ +CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type); + +/** Same as `cmark_node_new`, but explicitly listing the memory + * allocator used to allocate the node. Note: be sure to use the same + * allocator for every node in a tree, or bad things can happen. + */ +CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type, + cmark_mem *mem); + +/** Frees the memory allocated for a node and any children. + */ +CMARK_EXPORT void cmark_node_free(cmark_node *node); + +/** + * ## Tree Traversal + */ + +/** Returns the next node in the sequence after 'node', or NULL if + * there is none. + */ +CMARK_EXPORT cmark_node *cmark_node_next(cmark_node *node); + +/** Returns the previous node in the sequence after 'node', or NULL if + * there is none. + */ +CMARK_EXPORT cmark_node *cmark_node_previous(cmark_node *node); + +/** Returns the parent of 'node', or NULL if there is none. + */ +CMARK_EXPORT cmark_node *cmark_node_parent(cmark_node *node); + +/** Returns the first child of 'node', or NULL if 'node' has no children. + */ +CMARK_EXPORT cmark_node *cmark_node_first_child(cmark_node *node); + +/** Returns the last child of 'node', or NULL if 'node' has no children. + */ +CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); + +/** + * ## Iterator + * + * An iterator will walk through a tree of nodes, starting from a root + * node, returning one node at a time, together with information about + * whether the node is being entered or exited. The iterator will + * first descend to a child node, if there is one. When there is no + * child, the iterator will go to the next sibling. When there is no + * next sibling, the iterator will return to the parent (but with + * a 'cmark_event_type' of `CMARK_EVENT_EXIT`). The iterator will + * return `CMARK_EVENT_DONE` when it reaches the root node again. + * One natural application is an HTML renderer, where an `ENTER` event + * outputs an open tag and an `EXIT` event outputs a close tag. + * An iterator might also be used to transform an AST in some systematic + * way, for example, turning all level-3 headings into regular paragraphs. + * + * void + * usage_example(cmark_node *root) { + * cmark_event_type ev_type; + * cmark_iter *iter = cmark_iter_new(root); + * + * while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { + * cmark_node *cur = cmark_iter_get_node(iter); + * // Do something with `cur` and `ev_type` + * } + * + * cmark_iter_free(iter); + * } + * + * Iterators will never return `EXIT` events for leaf nodes, which are nodes + * of type: + * + * * CMARK_NODE_HTML_BLOCK + * * CMARK_NODE_THEMATIC_BREAK + * * CMARK_NODE_CODE_BLOCK + * * CMARK_NODE_TEXT + * * CMARK_NODE_SOFTBREAK + * * CMARK_NODE_LINEBREAK + * * CMARK_NODE_CODE + * * CMARK_NODE_HTML_INLINE + * + * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for + * leaf nodes. + */ + +typedef enum { + CMARK_EVENT_NONE, + CMARK_EVENT_DONE, + CMARK_EVENT_ENTER, + CMARK_EVENT_EXIT +} cmark_event_type; + +/** Creates a new iterator starting at 'root'. The current node and event + * type are undefined until 'cmark_iter_next' is called for the first time. + * The memory allocated for the iterator should be released using + * 'cmark_iter_free' when it is no longer needed. + */ +CMARK_EXPORT +cmark_iter *cmark_iter_new(cmark_node *root); + +/** Frees the memory allocated for an iterator. + */ +CMARK_EXPORT +void cmark_iter_free(cmark_iter *iter); + +/** Advances to the next node and returns the event type (`CMARK_EVENT_ENTER`, + * `CMARK_EVENT_EXIT` or `CMARK_EVENT_DONE`). + */ +CMARK_EXPORT +cmark_event_type cmark_iter_next(cmark_iter *iter); + +/** Returns the current node. + */ +CMARK_EXPORT +cmark_node *cmark_iter_get_node(cmark_iter *iter); + +/** Returns the current event type. + */ +CMARK_EXPORT +cmark_event_type cmark_iter_get_event_type(cmark_iter *iter); + +/** Returns the root node. + */ +CMARK_EXPORT +cmark_node *cmark_iter_get_root(cmark_iter *iter); + +/** Resets the iterator so that the current node is 'current' and + * the event type is 'event_type'. The new current node must be a + * descendant of the root node or the root node itself. + */ +CMARK_EXPORT +void cmark_iter_reset(cmark_iter *iter, cmark_node *current, + cmark_event_type event_type); + +/** + * ## Accessors + */ + +/** Returns the user data of 'node'. + */ +CMARK_EXPORT void *cmark_node_get_user_data(cmark_node *node); + +/** Sets arbitrary user data for 'node'. Returns 1 on success, + * 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_user_data(cmark_node *node, void *user_data); + +/** Returns the type of 'node', or `CMARK_NODE_NONE` on error. + */ +CMARK_EXPORT cmark_node_type cmark_node_get_type(cmark_node *node); + +/** Like 'cmark_node_get_type', but returns a string representation + of the type, or `""`. + */ +CMARK_EXPORT +const char *cmark_node_get_type_string(cmark_node *node); + +/** Returns the string contents of 'node', or an empty + string if none is set. + */ +CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node); + +/** Sets the string contents of 'node'. Returns 1 on success, + * 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_literal(cmark_node *node, const char *content); + +/** Returns the heading level of 'node', or 0 if 'node' is not a heading. + */ +CMARK_EXPORT int cmark_node_get_heading_level(cmark_node *node); + +/* For backwards compatibility */ +#define cmark_node_get_header_level cmark_node_get_heading_level +#define cmark_node_set_header_level cmark_node_set_heading_level + +/** Sets the heading level of 'node', returning 1 on success and 0 on error. + */ +CMARK_EXPORT int cmark_node_set_heading_level(cmark_node *node, int level); + +/** Returns the list type of 'node', or `CMARK_NO_LIST` if 'node' + * is not a list. + */ +CMARK_EXPORT cmark_list_type cmark_node_get_list_type(cmark_node *node); + +/** Sets the list type of 'node', returning 1 on success and 0 on error. + */ +CMARK_EXPORT int cmark_node_set_list_type(cmark_node *node, + cmark_list_type type); + +/** Returns the list delimiter type of 'node', or `CMARK_NO_DELIM` if 'node' + * is not a list. + */ +CMARK_EXPORT cmark_delim_type cmark_node_get_list_delim(cmark_node *node); + +/** Sets the list delimiter type of 'node', returning 1 on success and 0 + * on error. + */ +CMARK_EXPORT int cmark_node_set_list_delim(cmark_node *node, + cmark_delim_type delim); + +/** Returns starting number of 'node', if it is an ordered list, otherwise 0. + */ +CMARK_EXPORT int cmark_node_get_list_start(cmark_node *node); + +/** Sets starting number of 'node', if it is an ordered list. Returns 1 + * on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_list_start(cmark_node *node, int start); + +/** Returns 1 if 'node' is a tight list, 0 otherwise. + */ +CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node); + +/** Sets the "tightness" of a list. Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight); + +/** Returns the info string from a fenced code block. + */ +CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node); + +/** Sets the info string in a fenced code block, returning 1 on + * success and 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info); + +/** Returns the URL of a link or image 'node', or an empty string + if no URL is set. + */ +CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node); + +/** Sets the URL of a link or image 'node'. Returns 1 on success, + * 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url); + +/** Returns the title of a link or image 'node', or an empty + string if no title is set. + */ +CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node); + +/** Sets the title of a link or image 'node'. Returns 1 on success, + * 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title); + +/** Returns the literal "on enter" text for a custom 'node', or + an empty string if no on_enter is set. + */ +CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node); + +/** Sets the literal text to render "on enter" for a custom 'node'. + Any children of the node will be rendered after this text. + Returns 1 on success 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node, + const char *on_enter); + +/** Returns the literal "on exit" text for a custom 'node', or + an empty string if no on_exit is set. + */ +CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node); + +/** Sets the literal text to render "on exit" for a custom 'node'. + Any children of the node will be rendered before this text. + Returns 1 on success 0 on failure. + */ +CMARK_EXPORT int cmark_node_set_on_exit(cmark_node *node, const char *on_exit); + +/** Returns the line on which 'node' begins. + */ +CMARK_EXPORT int cmark_node_get_start_line(cmark_node *node); + +/** Returns the column at which 'node' begins. + */ +CMARK_EXPORT int cmark_node_get_start_column(cmark_node *node); + +/** Returns the line on which 'node' ends. + */ +CMARK_EXPORT int cmark_node_get_end_line(cmark_node *node); + +/** Returns the column at which 'node' ends. + */ +CMARK_EXPORT int cmark_node_get_end_column(cmark_node *node); + +/** + * ## Tree Manipulation + */ + +/** Unlinks a 'node', removing it from the tree, but not freeing its + * memory. (Use 'cmark_node_free' for that.) + */ +CMARK_EXPORT void cmark_node_unlink(cmark_node *node); + +/** Inserts 'sibling' before 'node'. Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_insert_before(cmark_node *node, + cmark_node *sibling); + +/** Inserts 'sibling' after 'node'. Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling); + +/** Replaces 'oldnode' with 'newnode' and unlinks 'oldnode' (but does + * not free its memory). + * Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode); + +/** Adds 'child' to the beginning of the children of 'node'. + * Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_prepend_child(cmark_node *node, cmark_node *child); + +/** Adds 'child' to the end of the children of 'node'. + * Returns 1 on success, 0 on failure. + */ +CMARK_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child); + +/** Consolidates adjacent text nodes. + */ +CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root); + +/** + * ## Parsing + * + * Simple interface: + * + * cmark_node *document = cmark_parse_document("Hello *world*", 13, + * CMARK_OPT_DEFAULT); + * + * Streaming interface: + * + * cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); + * FILE *fp = fopen("myfile.md", "rb"); + * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { + * cmark_parser_feed(parser, buffer, bytes); + * if (bytes < sizeof(buffer)) { + * break; + * } + * } + * document = cmark_parser_finish(parser); + * cmark_parser_free(parser); + */ + +/** Creates a new parser object. + */ +CMARK_EXPORT +cmark_parser *cmark_parser_new(int options); + +/** Creates a new parser object with the given memory allocator + */ +CMARK_EXPORT +cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem); + +/** Frees memory allocated for a parser object. + */ +CMARK_EXPORT +void cmark_parser_free(cmark_parser *parser); + +/** Feeds a string of length 'len' to 'parser'. + */ +CMARK_EXPORT +void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); + +/** Finish parsing and return a pointer to a tree of nodes. + */ +CMARK_EXPORT +cmark_node *cmark_parser_finish(cmark_parser *parser); + +/** Parse a CommonMark document in 'buffer' of length 'len'. + * Returns a pointer to a tree of nodes. The memory allocated for + * the node tree should be released using 'cmark_node_free' + * when it is no longer needed. + */ +CMARK_EXPORT +cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); + +/** Parse a CommonMark document in file 'f', returning a pointer to + * a tree of nodes. The memory allocated for the node tree should be + * released using 'cmark_node_free' when it is no longer needed. + */ +CMARK_EXPORT +cmark_node *cmark_parse_file(FILE *f, int options); + +/** + * ## Rendering + */ + +/** Render a 'node' tree as XML. It is the caller's responsibility + * to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_render_xml(cmark_node *root, int options); + +/** Render a 'node' tree as an HTML fragment. It is up to the user + * to add an appropriate header and footer. It is the caller's + * responsibility to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_render_html(cmark_node *root, int options); + +/** Render a 'node' tree as a groff man page, without the header. + * It is the caller's responsibility to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_render_man(cmark_node *root, int options, int width); + +/** Render a 'node' tree as a commonmark document. + * It is the caller's responsibility to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_render_commonmark(cmark_node *root, int options, int width); + +/** Render a 'node' tree as a LaTeX document. + * It is the caller's responsibility to free the returned buffer. + */ +CMARK_EXPORT +char *cmark_render_latex(cmark_node *root, int options, int width); + +/** + * ## Options + */ + +/** Default options. + */ +#define CMARK_OPT_DEFAULT 0 + +/** + * ### Options affecting rendering + */ + +/** Include a `data-sourcepos` attribute on all block elements. + */ +#define CMARK_OPT_SOURCEPOS (1 << 1) + +/** Render `softbreak` elements as hard line breaks. + */ +#define CMARK_OPT_HARDBREAKS (1 << 2) + +/** Suppress raw HTML and unsafe links (`javascript:`, `vbscript:`, + * `file:`, and `data:`, except for `image/png`, `image/gif`, + * `image/jpeg`, or `image/webp` mime types). Raw HTML is replaced + * by a placeholder HTML comment. Unsafe links are replaced by + * empty strings. + */ +#define CMARK_OPT_SAFE (1 << 3) + +/** Render `softbreak` elements as spaces. + */ +#define CMARK_OPT_NOBREAKS (1 << 4) + +/** + * ### Options affecting parsing + */ + +/** Normalize tree by consolidating adjacent text nodes. + */ +#define CMARK_OPT_NORMALIZE (1 << 8) + +/** Validate UTF-8 in the input before parsing, replacing illegal + * sequences with the replacement character U+FFFD. + */ +#define CMARK_OPT_VALIDATE_UTF8 (1 << 9) + +/** Convert straight quotes to curly, --- to em dashes, -- to en dashes. + */ +#define CMARK_OPT_SMART (1 << 10) + +/** + * ## Version information + */ + +/** The library version as integer for runtime checks. Also available as + * macro CMARK_VERSION for compile time checks. + * + * * Bits 16-23 contain the major version. + * * Bits 8-15 contain the minor version. + * * Bits 0-7 contain the patchlevel. + * + * In hexadecimal format, the number 0x010203 represents version 1.2.3. + */ +CMARK_EXPORT +int cmark_version(void); + +/** The library version string for runtime checks. Also available as + * macro CMARK_VERSION_STRING for compile time checks. + */ +CMARK_EXPORT +const char *cmark_version_string(void); + +/** # AUTHORS + * + * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer. + */ + +#ifndef CMARK_NO_SHORT_NAMES +#define NODE_DOCUMENT CMARK_NODE_DOCUMENT +#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE +#define NODE_LIST CMARK_NODE_LIST +#define NODE_ITEM CMARK_NODE_ITEM +#define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK +#define NODE_HTML_BLOCK CMARK_NODE_HTML_BLOCK +#define NODE_CUSTOM_BLOCK CMARK_NODE_CUSTOM_BLOCK +#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH +#define NODE_HEADING CMARK_NODE_HEADING +#define NODE_HEADER CMARK_NODE_HEADER +#define NODE_THEMATIC_BREAK CMARK_NODE_THEMATIC_BREAK +#define NODE_HRULE CMARK_NODE_HRULE +#define NODE_TEXT CMARK_NODE_TEXT +#define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK +#define NODE_LINEBREAK CMARK_NODE_LINEBREAK +#define NODE_CODE CMARK_NODE_CODE +#define NODE_HTML_INLINE CMARK_NODE_HTML_INLINE +#define NODE_CUSTOM_INLINE CMARK_NODE_CUSTOM_INLINE +#define NODE_EMPH CMARK_NODE_EMPH +#define NODE_STRONG CMARK_NODE_STRONG +#define NODE_LINK CMARK_NODE_LINK +#define NODE_IMAGE CMARK_NODE_IMAGE +#define BULLET_LIST CMARK_BULLET_LIST +#define ORDERED_LIST CMARK_ORDERED_LIST +#define PERIOD_DELIM CMARK_PERIOD_DELIM +#define PAREN_DELIM CMARK_PAREN_DELIM +#endif + +#ifdef __cplusplus +} +#endif + +#endif + +#ifndef CMARK_EXPORT_H +#define CMARK_EXPORT_H + +#ifdef CMARK_STATIC_DEFINE +# define CMARK_EXPORT +# define CMARK_NO_EXPORT +#else +# ifndef CMARK_EXPORT +# ifdef libcmark_EXPORTS + /* We are building this library */ +# define CMARK_EXPORT __attribute__((visibility("default"))) +# else + /* We are using this library */ +# define CMARK_EXPORT __attribute__((visibility("default"))) +# endif +# endif + +# ifndef CMARK_NO_EXPORT +# define CMARK_NO_EXPORT __attribute__((visibility("hidden"))) +# endif +#endif + +#ifndef CMARK_DEPRECATED +# define CMARK_DEPRECATED __attribute__ ((__deprecated__)) +#endif + +#ifndef CMARK_DEPRECATED_EXPORT +# define CMARK_DEPRECATED_EXPORT CMARK_EXPORT CMARK_DEPRECATED +#endif + +#ifndef CMARK_DEPRECATED_NO_EXPORT +# define CMARK_DEPRECATED_NO_EXPORT CMARK_NO_EXPORT CMARK_DEPRECATED +#endif + +#if 0 /* DEFINE_NO_DEPRECATED */ +# ifndef CMARK_NO_DEPRECATED +# define CMARK_NO_DEPRECATED +# endif +#endif + +#endif +#ifndef CMARK_VERSION_H +#define CMARK_VERSION_H + +#define CMARK_VERSION ((0 << 16) | (27 << 8) | 1) +#define CMARK_VERSION_STRING "0.27.1" + +#endif + + +#ifndef CMARK_AST_H +#define CMARK_AST_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MAX_LINK_LABEL_LENGTH 1000 + +struct cmark_parser { + struct cmark_mem *mem; + struct cmark_reference_map *refmap; + struct cmark_node *root; + struct cmark_node *current; + int line_number; + bufsize_t offset; + bufsize_t column; + bufsize_t first_nonspace; + bufsize_t first_nonspace_column; + int indent; + bool blank; + bool partially_consumed_tab; + cmark_strbuf curline; + bufsize_t last_line_length; + cmark_strbuf linebuf; + int options; + bool last_buffer_ended_with_cr; +}; + +#ifdef __cplusplus +} +#endif + +#endif + + +#ifndef CMARK_REFERENCES_H +#define CMARK_REFERENCES_H + + +#ifdef __cplusplus +extern "C" { +#endif + +#define REFMAP_SIZE 16 + +struct cmark_reference { + struct cmark_reference *next; + unsigned char *label; + cmark_chunk url; + cmark_chunk title; + unsigned int hash; +}; + +typedef struct cmark_reference cmark_reference; + +struct cmark_reference_map { + cmark_mem *mem; + cmark_reference *table[REFMAP_SIZE]; +}; + +typedef struct cmark_reference_map cmark_reference_map; + +cmark_reference_map *cmark_reference_map_new(cmark_mem *mem); +void cmark_reference_map_free(cmark_reference_map *map); +cmark_reference *cmark_reference_lookup(cmark_reference_map *map, + cmark_chunk *label); +extern void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, + cmark_chunk *url, cmark_chunk *title); + +#ifdef __cplusplus +} +#endif + +#endif + +#ifndef CMARK_UTF8_H +#define CMARK_UTF8_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, + bufsize_t len); +void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf); +int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst); +void cmark_utf8proc_check(cmark_strbuf *dest, const uint8_t *line, + bufsize_t size); +int cmark_utf8proc_is_space(int32_t uc); +int cmark_utf8proc_is_punctuation(int32_t uc); + +#ifdef __cplusplus +} +#endif + +#endif + + +#ifndef CMARK_INLINES_H +#define CMARK_INLINES_H + +#ifdef __cplusplus +extern "C" { +#endif + +cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url); +cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title); + +void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, + cmark_reference_map *refmap, int options); + +bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input, + cmark_reference_map *refmap); + +#ifdef __cplusplus +} +#endif + +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, + bufsize_t offset); +bufsize_t _scan_scheme(const unsigned char *p); +bufsize_t _scan_autolink_uri(const unsigned char *p); +bufsize_t _scan_autolink_email(const unsigned char *p); +bufsize_t _scan_html_tag(const unsigned char *p); +bufsize_t _scan_html_block_start(const unsigned char *p); +bufsize_t _scan_html_block_start_7(const unsigned char *p); +bufsize_t _scan_html_block_end_1(const unsigned char *p); +bufsize_t _scan_html_block_end_2(const unsigned char *p); +bufsize_t _scan_html_block_end_3(const unsigned char *p); +bufsize_t _scan_html_block_end_4(const unsigned char *p); +bufsize_t _scan_html_block_end_5(const unsigned char *p); +bufsize_t _scan_link_title(const unsigned char *p); +bufsize_t _scan_spacechars(const unsigned char *p); +bufsize_t _scan_atx_heading_start(const unsigned char *p); +bufsize_t _scan_setext_heading_line(const unsigned char *p); +bufsize_t _scan_thematic_break(const unsigned char *p); +bufsize_t _scan_open_code_fence(const unsigned char *p); +bufsize_t _scan_close_code_fence(const unsigned char *p); +bufsize_t _scan_entity(const unsigned char *p); +bufsize_t _scan_dangerous_url(const unsigned char *p); + +#define scan_scheme(c, n) _scan_at(&_scan_scheme, c, n) +#define scan_autolink_uri(c, n) _scan_at(&_scan_autolink_uri, c, n) +#define scan_autolink_email(c, n) _scan_at(&_scan_autolink_email, c, n) +#define scan_html_tag(c, n) _scan_at(&_scan_html_tag, c, n) +#define scan_html_block_start(c, n) _scan_at(&_scan_html_block_start, c, n) +#define scan_html_block_start_7(c, n) _scan_at(&_scan_html_block_start_7, c, n) +#define scan_html_block_end_1(c, n) _scan_at(&_scan_html_block_end_1, c, n) +#define scan_html_block_end_2(c, n) _scan_at(&_scan_html_block_end_2, c, n) +#define scan_html_block_end_3(c, n) _scan_at(&_scan_html_block_end_3, c, n) +#define scan_html_block_end_4(c, n) _scan_at(&_scan_html_block_end_4, c, n) +#define scan_html_block_end_5(c, n) _scan_at(&_scan_html_block_end_5, c, n) +#define scan_link_title(c, n) _scan_at(&_scan_link_title, c, n) +#define scan_spacechars(c, n) _scan_at(&_scan_spacechars, c, n) +#define scan_atx_heading_start(c, n) _scan_at(&_scan_atx_heading_start, c, n) +#define scan_setext_heading_line(c, n) \ + _scan_at(&_scan_setext_heading_line, c, n) +#define scan_thematic_break(c, n) _scan_at(&_scan_thematic_break, c, n) +#define scan_open_code_fence(c, n) _scan_at(&_scan_open_code_fence, c, n) +#define scan_close_code_fence(c, n) _scan_at(&_scan_close_code_fence, c, n) +#define scan_entity(c, n) _scan_at(&_scan_entity, c, n) +#define scan_dangerous_url(c, n) _scan_at(&_scan_dangerous_url, c, n) + +#ifdef __cplusplus +} +#endif + + +#ifndef CMARK_ITERATOR_H +#define CMARK_ITERATOR_H + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct { + cmark_event_type ev_type; + cmark_node *node; +} cmark_iter_state; + +struct cmark_iter { + cmark_mem *mem; + cmark_node *root; + cmark_iter_state cur; + cmark_iter_state next; +}; + +#ifdef __cplusplus +} +#endif + +#endif ADDED src/entities.inc Index: src/entities.inc ================================================================== --- /dev/null +++ src/entities.inc @@ -0,0 +1,2138 @@ +/* Autogenerated by tools/make_headers_inc.py */ + +struct cmark_entity_node { + unsigned char *entity; + unsigned char bytes[8]; +}; + +#define CMARK_ENTITY_MIN_LENGTH 2 +#define CMARK_ENTITY_MAX_LENGTH 32 +#define CMARK_NUM_ENTITIES 2125 + +static const struct cmark_entity_node cmark_entities[] = { +{(unsigned char*)"AElig", {195, 134, 0}}, +{(unsigned char*)"AMP", {38, 0}}, +{(unsigned char*)"Aacute", {195, 129, 0}}, +{(unsigned char*)"Abreve", {196, 130, 0}}, +{(unsigned char*)"Acirc", {195, 130, 0}}, +{(unsigned char*)"Acy", {208, 144, 0}}, +{(unsigned char*)"Afr", {240, 157, 148, 132, 0}}, +{(unsigned char*)"Agrave", {195, 128, 0}}, +{(unsigned char*)"Alpha", {206, 145, 0}}, +{(unsigned char*)"Amacr", {196, 128, 0}}, +{(unsigned char*)"And", {226, 169, 147, 0}}, +{(unsigned char*)"Aogon", {196, 132, 0}}, +{(unsigned char*)"Aopf", {240, 157, 148, 184, 0}}, +{(unsigned char*)"ApplyFunction", {226, 129, 161, 0}}, +{(unsigned char*)"Aring", {195, 133, 0}}, +{(unsigned char*)"Ascr", {240, 157, 146, 156, 0}}, +{(unsigned char*)"Assign", {226, 137, 148, 0}}, +{(unsigned char*)"Atilde", {195, 131, 0}}, +{(unsigned char*)"Auml", {195, 132, 0}}, +{(unsigned char*)"Backslash", {226, 136, 150, 0}}, +{(unsigned char*)"Barv", {226, 171, 167, 0}}, +{(unsigned char*)"Barwed", {226, 140, 134, 0}}, +{(unsigned char*)"Bcy", {208, 145, 0}}, +{(unsigned char*)"Because", {226, 136, 181, 0}}, +{(unsigned char*)"Bernoullis", {226, 132, 172, 0}}, +{(unsigned char*)"Beta", {206, 146, 0}}, +{(unsigned char*)"Bfr", {240, 157, 148, 133, 0}}, +{(unsigned char*)"Bopf", {240, 157, 148, 185, 0}}, +{(unsigned char*)"Breve", {203, 152, 0}}, +{(unsigned char*)"Bscr", {226, 132, 172, 0}}, +{(unsigned char*)"Bumpeq", {226, 137, 142, 0}}, +{(unsigned char*)"CHcy", {208, 167, 0}}, +{(unsigned char*)"COPY", {194, 169, 0}}, +{(unsigned char*)"Cacute", {196, 134, 0}}, +{(unsigned char*)"Cap", {226, 139, 146, 0}}, +{(unsigned char*)"CapitalDifferentialD", {226, 133, 133, 0}}, +{(unsigned char*)"Cayleys", {226, 132, 173, 0}}, +{(unsigned char*)"Ccaron", {196, 140, 0}}, +{(unsigned char*)"Ccedil", {195, 135, 0}}, +{(unsigned char*)"Ccirc", {196, 136, 0}}, +{(unsigned char*)"Cconint", {226, 136, 176, 0}}, +{(unsigned char*)"Cdot", {196, 138, 0}}, +{(unsigned char*)"Cedilla", {194, 184, 0}}, +{(unsigned char*)"CenterDot", {194, 183, 0}}, +{(unsigned char*)"Cfr", {226, 132, 173, 0}}, +{(unsigned char*)"Chi", {206, 167, 0}}, +{(unsigned char*)"CircleDot", {226, 138, 153, 0}}, +{(unsigned char*)"CircleMinus", {226, 138, 150, 0}}, +{(unsigned char*)"CirclePlus", {226, 138, 149, 0}}, +{(unsigned char*)"CircleTimes", {226, 138, 151, 0}}, +{(unsigned char*)"ClockwiseContourIntegral", {226, 136, 178, 0}}, +{(unsigned char*)"CloseCurlyDoubleQuote", {226, 128, 157, 0}}, +{(unsigned char*)"CloseCurlyQuote", {226, 128, 153, 0}}, +{(unsigned char*)"Colon", {226, 136, 183, 0}}, +{(unsigned char*)"Colone", {226, 169, 180, 0}}, +{(unsigned char*)"Congruent", {226, 137, 161, 0}}, +{(unsigned char*)"Conint", {226, 136, 175, 0}}, +{(unsigned char*)"ContourIntegral", {226, 136, 174, 0}}, +{(unsigned char*)"Copf", {226, 132, 130, 0}}, +{(unsigned char*)"Coproduct", {226, 136, 144, 0}}, +{(unsigned char*)"CounterClockwiseContourIntegral", {226, 136, 179, 0}}, +{(unsigned char*)"Cross", {226, 168, 175, 0}}, +{(unsigned char*)"Cscr", {240, 157, 146, 158, 0}}, +{(unsigned char*)"Cup", {226, 139, 147, 0}}, +{(unsigned char*)"CupCap", {226, 137, 141, 0}}, +{(unsigned char*)"DD", {226, 133, 133, 0}}, +{(unsigned char*)"DDotrahd", {226, 164, 145, 0}}, +{(unsigned char*)"DJcy", {208, 130, 0}}, +{(unsigned char*)"DScy", {208, 133, 0}}, +{(unsigned char*)"DZcy", {208, 143, 0}}, +{(unsigned char*)"Dagger", {226, 128, 161, 0}}, +{(unsigned char*)"Darr", {226, 134, 161, 0}}, +{(unsigned char*)"Dashv", {226, 171, 164, 0}}, +{(unsigned char*)"Dcaron", {196, 142, 0}}, +{(unsigned char*)"Dcy", {208, 148, 0}}, +{(unsigned char*)"Del", {226, 136, 135, 0}}, +{(unsigned char*)"Delta", {206, 148, 0}}, +{(unsigned char*)"Dfr", {240, 157, 148, 135, 0}}, +{(unsigned char*)"DiacriticalAcute", {194, 180, 0}}, +{(unsigned char*)"DiacriticalDot", {203, 153, 0}}, +{(unsigned char*)"DiacriticalDoubleAcute", {203, 157, 0}}, +{(unsigned char*)"DiacriticalGrave", {96, 0}}, +{(unsigned char*)"DiacriticalTilde", {203, 156, 0}}, +{(unsigned char*)"Diamond", {226, 139, 132, 0}}, +{(unsigned char*)"DifferentialD", {226, 133, 134, 0}}, +{(unsigned char*)"Dopf", {240, 157, 148, 187, 0}}, +{(unsigned char*)"Dot", {194, 168, 0}}, +{(unsigned char*)"DotDot", {226, 131, 156, 0}}, +{(unsigned char*)"DotEqual", {226, 137, 144, 0}}, +{(unsigned char*)"DoubleContourIntegral", {226, 136, 175, 0}}, +{(unsigned char*)"DoubleDot", {194, 168, 0}}, +{(unsigned char*)"DoubleDownArrow", {226, 135, 147, 0}}, +{(unsigned char*)"DoubleLeftArrow", {226, 135, 144, 0}}, +{(unsigned char*)"DoubleLeftRightArrow", {226, 135, 148, 0}}, +{(unsigned char*)"DoubleLeftTee", {226, 171, 164, 0}}, +{(unsigned char*)"DoubleLongLeftArrow", {226, 159, 184, 0}}, +{(unsigned char*)"DoubleLongLeftRightArrow", {226, 159, 186, 0}}, +{(unsigned char*)"DoubleLongRightArrow", {226, 159, 185, 0}}, +{(unsigned char*)"DoubleRightArrow", {226, 135, 146, 0}}, +{(unsigned char*)"DoubleRightTee", {226, 138, 168, 0}}, +{(unsigned char*)"DoubleUpArrow", {226, 135, 145, 0}}, +{(unsigned char*)"DoubleUpDownArrow", {226, 135, 149, 0}}, +{(unsigned char*)"DoubleVerticalBar", {226, 136, 165, 0}}, +{(unsigned char*)"DownArrow", {226, 134, 147, 0}}, +{(unsigned char*)"DownArrowBar", {226, 164, 147, 0}}, +{(unsigned char*)"DownArrowUpArrow", {226, 135, 181, 0}}, +{(unsigned char*)"DownBreve", {204, 145, 0}}, +{(unsigned char*)"DownLeftRightVector", {226, 165, 144, 0}}, +{(unsigned char*)"DownLeftTeeVector", {226, 165, 158, 0}}, +{(unsigned char*)"DownLeftVector", {226, 134, 189, 0}}, +{(unsigned char*)"DownLeftVectorBar", {226, 165, 150, 0}}, +{(unsigned char*)"DownRightTeeVector", {226, 165, 159, 0}}, +{(unsigned char*)"DownRightVector", {226, 135, 129, 0}}, +{(unsigned char*)"DownRightVectorBar", {226, 165, 151, 0}}, +{(unsigned char*)"DownTee", {226, 138, 164, 0}}, +{(unsigned char*)"DownTeeArrow", {226, 134, 167, 0}}, +{(unsigned char*)"Downarrow", {226, 135, 147, 0}}, +{(unsigned char*)"Dscr", {240, 157, 146, 159, 0}}, +{(unsigned char*)"Dstrok", {196, 144, 0}}, +{(unsigned char*)"ENG", {197, 138, 0}}, +{(unsigned char*)"ETH", {195, 144, 0}}, +{(unsigned char*)"Eacute", {195, 137, 0}}, +{(unsigned char*)"Ecaron", {196, 154, 0}}, +{(unsigned char*)"Ecirc", {195, 138, 0}}, +{(unsigned char*)"Ecy", {208, 173, 0}}, +{(unsigned char*)"Edot", {196, 150, 0}}, +{(unsigned char*)"Efr", {240, 157, 148, 136, 0}}, +{(unsigned char*)"Egrave", {195, 136, 0}}, +{(unsigned char*)"Element", {226, 136, 136, 0}}, +{(unsigned char*)"Emacr", {196, 146, 0}}, +{(unsigned char*)"EmptySmallSquare", {226, 151, 187, 0}}, +{(unsigned char*)"EmptyVerySmallSquare", {226, 150, 171, 0}}, +{(unsigned char*)"Eogon", {196, 152, 0}}, +{(unsigned char*)"Eopf", {240, 157, 148, 188, 0}}, +{(unsigned char*)"Epsilon", {206, 149, 0}}, +{(unsigned char*)"Equal", {226, 169, 181, 0}}, +{(unsigned char*)"EqualTilde", {226, 137, 130, 0}}, +{(unsigned char*)"Equilibrium", {226, 135, 140, 0}}, +{(unsigned char*)"Escr", {226, 132, 176, 0}}, +{(unsigned char*)"Esim", {226, 169, 179, 0}}, +{(unsigned char*)"Eta", {206, 151, 0}}, +{(unsigned char*)"Euml", {195, 139, 0}}, +{(unsigned char*)"Exists", {226, 136, 131, 0}}, +{(unsigned char*)"ExponentialE", {226, 133, 135, 0}}, +{(unsigned char*)"Fcy", {208, 164, 0}}, +{(unsigned char*)"Ffr", {240, 157, 148, 137, 0}}, +{(unsigned char*)"FilledSmallSquare", {226, 151, 188, 0}}, +{(unsigned char*)"FilledVerySmallSquare", {226, 150, 170, 0}}, +{(unsigned char*)"Fopf", {240, 157, 148, 189, 0}}, +{(unsigned char*)"ForAll", {226, 136, 128, 0}}, +{(unsigned char*)"Fouriertrf", {226, 132, 177, 0}}, +{(unsigned char*)"Fscr", {226, 132, 177, 0}}, +{(unsigned char*)"GJcy", {208, 131, 0}}, +{(unsigned char*)"GT", {62, 0}}, +{(unsigned char*)"Gamma", {206, 147, 0}}, +{(unsigned char*)"Gammad", {207, 156, 0}}, +{(unsigned char*)"Gbreve", {196, 158, 0}}, +{(unsigned char*)"Gcedil", {196, 162, 0}}, +{(unsigned char*)"Gcirc", {196, 156, 0}}, +{(unsigned char*)"Gcy", {208, 147, 0}}, +{(unsigned char*)"Gdot", {196, 160, 0}}, +{(unsigned char*)"Gfr", {240, 157, 148, 138, 0}}, +{(unsigned char*)"Gg", {226, 139, 153, 0}}, +{(unsigned char*)"Gopf", {240, 157, 148, 190, 0}}, +{(unsigned char*)"GreaterEqual", {226, 137, 165, 0}}, +{(unsigned char*)"GreaterEqualLess", {226, 139, 155, 0}}, +{(unsigned char*)"GreaterFullEqual", {226, 137, 167, 0}}, +{(unsigned char*)"GreaterGreater", {226, 170, 162, 0}}, +{(unsigned char*)"GreaterLess", {226, 137, 183, 0}}, +{(unsigned char*)"GreaterSlantEqual", {226, 169, 190, 0}}, +{(unsigned char*)"GreaterTilde", {226, 137, 179, 0}}, +{(unsigned char*)"Gscr", {240, 157, 146, 162, 0}}, +{(unsigned char*)"Gt", {226, 137, 171, 0}}, +{(unsigned char*)"HARDcy", {208, 170, 0}}, +{(unsigned char*)"Hacek", {203, 135, 0}}, +{(unsigned char*)"Hat", {94, 0}}, +{(unsigned char*)"Hcirc", {196, 164, 0}}, +{(unsigned char*)"Hfr", {226, 132, 140, 0}}, +{(unsigned char*)"HilbertSpace", {226, 132, 139, 0}}, +{(unsigned char*)"Hopf", {226, 132, 141, 0}}, +{(unsigned char*)"HorizontalLine", {226, 148, 128, 0}}, +{(unsigned char*)"Hscr", {226, 132, 139, 0}}, +{(unsigned char*)"Hstrok", {196, 166, 0}}, +{(unsigned char*)"HumpDownHump", {226, 137, 142, 0}}, +{(unsigned char*)"HumpEqual", {226, 137, 143, 0}}, +{(unsigned char*)"IEcy", {208, 149, 0}}, +{(unsigned char*)"IJlig", {196, 178, 0}}, +{(unsigned char*)"IOcy", {208, 129, 0}}, +{(unsigned char*)"Iacute", {195, 141, 0}}, +{(unsigned char*)"Icirc", {195, 142, 0}}, +{(unsigned char*)"Icy", {208, 152, 0}}, +{(unsigned char*)"Idot", {196, 176, 0}}, +{(unsigned char*)"Ifr", {226, 132, 145, 0}}, +{(unsigned char*)"Igrave", {195, 140, 0}}, +{(unsigned char*)"Im", {226, 132, 145, 0}}, +{(unsigned char*)"Imacr", {196, 170, 0}}, +{(unsigned char*)"ImaginaryI", {226, 133, 136, 0}}, +{(unsigned char*)"Implies", {226, 135, 146, 0}}, +{(unsigned char*)"Int", {226, 136, 172, 0}}, +{(unsigned char*)"Integral", {226, 136, 171, 0}}, +{(unsigned char*)"Intersection", {226, 139, 130, 0}}, +{(unsigned char*)"InvisibleComma", {226, 129, 163, 0}}, +{(unsigned char*)"InvisibleTimes", {226, 129, 162, 0}}, +{(unsigned char*)"Iogon", {196, 174, 0}}, +{(unsigned char*)"Iopf", {240, 157, 149, 128, 0}}, +{(unsigned char*)"Iota", {206, 153, 0}}, +{(unsigned char*)"Iscr", {226, 132, 144, 0}}, +{(unsigned char*)"Itilde", {196, 168, 0}}, +{(unsigned char*)"Iukcy", {208, 134, 0}}, +{(unsigned char*)"Iuml", {195, 143, 0}}, +{(unsigned char*)"Jcirc", {196, 180, 0}}, +{(unsigned char*)"Jcy", {208, 153, 0}}, +{(unsigned char*)"Jfr", {240, 157, 148, 141, 0}}, +{(unsigned char*)"Jopf", {240, 157, 149, 129, 0}}, +{(unsigned char*)"Jscr", {240, 157, 146, 165, 0}}, +{(unsigned char*)"Jsercy", {208, 136, 0}}, +{(unsigned char*)"Jukcy", {208, 132, 0}}, +{(unsigned char*)"KHcy", {208, 165, 0}}, +{(unsigned char*)"KJcy", {208, 140, 0}}, +{(unsigned char*)"Kappa", {206, 154, 0}}, +{(unsigned char*)"Kcedil", {196, 182, 0}}, +{(unsigned char*)"Kcy", {208, 154, 0}}, +{(unsigned char*)"Kfr", {240, 157, 148, 142, 0}}, +{(unsigned char*)"Kopf", {240, 157, 149, 130, 0}}, +{(unsigned char*)"Kscr", {240, 157, 146, 166, 0}}, +{(unsigned char*)"LJcy", {208, 137, 0}}, +{(unsigned char*)"LT", {60, 0}}, +{(unsigned char*)"Lacute", {196, 185, 0}}, +{(unsigned char*)"Lambda", {206, 155, 0}}, +{(unsigned char*)"Lang", {226, 159, 170, 0}}, +{(unsigned char*)"Laplacetrf", {226, 132, 146, 0}}, +{(unsigned char*)"Larr", {226, 134, 158, 0}}, +{(unsigned char*)"Lcaron", {196, 189, 0}}, +{(unsigned char*)"Lcedil", {196, 187, 0}}, +{(unsigned char*)"Lcy", {208, 155, 0}}, +{(unsigned char*)"LeftAngleBracket", {226, 159, 168, 0}}, +{(unsigned char*)"LeftArrow", {226, 134, 144, 0}}, +{(unsigned char*)"LeftArrowBar", {226, 135, 164, 0}}, +{(unsigned char*)"LeftArrowRightArrow", {226, 135, 134, 0}}, +{(unsigned char*)"LeftCeiling", {226, 140, 136, 0}}, +{(unsigned char*)"LeftDoubleBracket", {226, 159, 166, 0}}, +{(unsigned char*)"LeftDownTeeVector", {226, 165, 161, 0}}, +{(unsigned char*)"LeftDownVector", {226, 135, 131, 0}}, +{(unsigned char*)"LeftDownVectorBar", {226, 165, 153, 0}}, +{(unsigned char*)"LeftFloor", {226, 140, 138, 0}}, +{(unsigned char*)"LeftRightArrow", {226, 134, 148, 0}}, +{(unsigned char*)"LeftRightVector", {226, 165, 142, 0}}, +{(unsigned char*)"LeftTee", {226, 138, 163, 0}}, +{(unsigned char*)"LeftTeeArrow", {226, 134, 164, 0}}, +{(unsigned char*)"LeftTeeVector", {226, 165, 154, 0}}, +{(unsigned char*)"LeftTriangle", {226, 138, 178, 0}}, +{(unsigned char*)"LeftTriangleBar", {226, 167, 143, 0}}, +{(unsigned char*)"LeftTriangleEqual", {226, 138, 180, 0}}, +{(unsigned char*)"LeftUpDownVector", {226, 165, 145, 0}}, +{(unsigned char*)"LeftUpTeeVector", {226, 165, 160, 0}}, +{(unsigned char*)"LeftUpVector", {226, 134, 191, 0}}, +{(unsigned char*)"LeftUpVectorBar", {226, 165, 152, 0}}, +{(unsigned char*)"LeftVector", {226, 134, 188, 0}}, +{(unsigned char*)"LeftVectorBar", {226, 165, 146, 0}}, +{(unsigned char*)"Leftarrow", {226, 135, 144, 0}}, +{(unsigned char*)"Leftrightarrow", {226, 135, 148, 0}}, +{(unsigned char*)"LessEqualGreater", {226, 139, 154, 0}}, +{(unsigned char*)"LessFullEqual", {226, 137, 166, 0}}, +{(unsigned char*)"LessGreater", {226, 137, 182, 0}}, +{(unsigned char*)"LessLess", {226, 170, 161, 0}}, +{(unsigned char*)"LessSlantEqual", {226, 169, 189, 0}}, +{(unsigned char*)"LessTilde", {226, 137, 178, 0}}, +{(unsigned char*)"Lfr", {240, 157, 148, 143, 0}}, +{(unsigned char*)"Ll", {226, 139, 152, 0}}, +{(unsigned char*)"Lleftarrow", {226, 135, 154, 0}}, +{(unsigned char*)"Lmidot", {196, 191, 0}}, +{(unsigned char*)"LongLeftArrow", {226, 159, 181, 0}}, +{(unsigned char*)"LongLeftRightArrow", {226, 159, 183, 0}}, +{(unsigned char*)"LongRightArrow", {226, 159, 182, 0}}, +{(unsigned char*)"Longleftarrow", {226, 159, 184, 0}}, +{(unsigned char*)"Longleftrightarrow", {226, 159, 186, 0}}, +{(unsigned char*)"Longrightarrow", {226, 159, 185, 0}}, +{(unsigned char*)"Lopf", {240, 157, 149, 131, 0}}, +{(unsigned char*)"LowerLeftArrow", {226, 134, 153, 0}}, +{(unsigned char*)"LowerRightArrow", {226, 134, 152, 0}}, +{(unsigned char*)"Lscr", {226, 132, 146, 0}}, +{(unsigned char*)"Lsh", {226, 134, 176, 0}}, +{(unsigned char*)"Lstrok", {197, 129, 0}}, +{(unsigned char*)"Lt", {226, 137, 170, 0}}, +{(unsigned char*)"Map", {226, 164, 133, 0}}, +{(unsigned char*)"Mcy", {208, 156, 0}}, +{(unsigned char*)"MediumSpace", {226, 129, 159, 0}}, +{(unsigned char*)"Mellintrf", {226, 132, 179, 0}}, +{(unsigned char*)"Mfr", {240, 157, 148, 144, 0}}, +{(unsigned char*)"MinusPlus", {226, 136, 147, 0}}, +{(unsigned char*)"Mopf", {240, 157, 149, 132, 0}}, +{(unsigned char*)"Mscr", {226, 132, 179, 0}}, +{(unsigned char*)"Mu", {206, 156, 0}}, +{(unsigned char*)"NJcy", {208, 138, 0}}, +{(unsigned char*)"Nacute", {197, 131, 0}}, +{(unsigned char*)"Ncaron", {197, 135, 0}}, +{(unsigned char*)"Ncedil", {197, 133, 0}}, +{(unsigned char*)"Ncy", {208, 157, 0}}, +{(unsigned char*)"NegativeMediumSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NegativeThickSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NegativeThinSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NegativeVeryThinSpace", {226, 128, 139, 0}}, +{(unsigned char*)"NestedGreaterGreater", {226, 137, 171, 0}}, +{(unsigned char*)"NestedLessLess", {226, 137, 170, 0}}, +{(unsigned char*)"NewLine", {10, 0}}, +{(unsigned char*)"Nfr", {240, 157, 148, 145, 0}}, +{(unsigned char*)"NoBreak", {226, 129, 160, 0}}, +{(unsigned char*)"NonBreakingSpace", {194, 160, 0}}, +{(unsigned char*)"Nopf", {226, 132, 149, 0}}, +{(unsigned char*)"Not", {226, 171, 172, 0}}, +{(unsigned char*)"NotCongruent", {226, 137, 162, 0}}, +{(unsigned char*)"NotCupCap", {226, 137, 173, 0}}, +{(unsigned char*)"NotDoubleVerticalBar", {226, 136, 166, 0}}, +{(unsigned char*)"NotElement", {226, 136, 137, 0}}, +{(unsigned char*)"NotEqual", {226, 137, 160, 0}}, +{(unsigned char*)"NotEqualTilde", {226, 137, 130, 204, 184, 0}}, +{(unsigned char*)"NotExists", {226, 136, 132, 0}}, +{(unsigned char*)"NotGreater", {226, 137, 175, 0}}, +{(unsigned char*)"NotGreaterEqual", {226, 137, 177, 0}}, +{(unsigned char*)"NotGreaterFullEqual", {226, 137, 167, 204, 184, 0}}, +{(unsigned char*)"NotGreaterGreater", {226, 137, 171, 204, 184, 0}}, +{(unsigned char*)"NotGreaterLess", {226, 137, 185, 0}}, +{(unsigned char*)"NotGreaterSlantEqual", {226, 169, 190, 204, 184, 0}}, +{(unsigned char*)"NotGreaterTilde", {226, 137, 181, 0}}, +{(unsigned char*)"NotHumpDownHump", {226, 137, 142, 204, 184, 0}}, +{(unsigned char*)"NotHumpEqual", {226, 137, 143, 204, 184, 0}}, +{(unsigned char*)"NotLeftTriangle", {226, 139, 170, 0}}, +{(unsigned char*)"NotLeftTriangleBar", {226, 167, 143, 204, 184, 0}}, +{(unsigned char*)"NotLeftTriangleEqual", {226, 139, 172, 0}}, +{(unsigned char*)"NotLess", {226, 137, 174, 0}}, +{(unsigned char*)"NotLessEqual", {226, 137, 176, 0}}, +{(unsigned char*)"NotLessGreater", {226, 137, 184, 0}}, +{(unsigned char*)"NotLessLess", {226, 137, 170, 204, 184, 0}}, +{(unsigned char*)"NotLessSlantEqual", {226, 169, 189, 204, 184, 0}}, +{(unsigned char*)"NotLessTilde", {226, 137, 180, 0}}, +{(unsigned char*)"NotNestedGreaterGreater", {226, 170, 162, 204, 184, 0}}, +{(unsigned char*)"NotNestedLessLess", {226, 170, 161, 204, 184, 0}}, +{(unsigned char*)"NotPrecedes", {226, 138, 128, 0}}, +{(unsigned char*)"NotPrecedesEqual", {226, 170, 175, 204, 184, 0}}, +{(unsigned char*)"NotPrecedesSlantEqual", {226, 139, 160, 0}}, +{(unsigned char*)"NotReverseElement", {226, 136, 140, 0}}, +{(unsigned char*)"NotRightTriangle", {226, 139, 171, 0}}, +{(unsigned char*)"NotRightTriangleBar", {226, 167, 144, 204, 184, 0}}, +{(unsigned char*)"NotRightTriangleEqual", {226, 139, 173, 0}}, +{(unsigned char*)"NotSquareSubset", {226, 138, 143, 204, 184, 0}}, +{(unsigned char*)"NotSquareSubsetEqual", {226, 139, 162, 0}}, +{(unsigned char*)"NotSquareSuperset", {226, 138, 144, 204, 184, 0}}, +{(unsigned char*)"NotSquareSupersetEqual", {226, 139, 163, 0}}, +{(unsigned char*)"NotSubset", {226, 138, 130, 226, 131, 146, 0}}, +{(unsigned char*)"NotSubsetEqual", {226, 138, 136, 0}}, +{(unsigned char*)"NotSucceeds", {226, 138, 129, 0}}, +{(unsigned char*)"NotSucceedsEqual", {226, 170, 176, 204, 184, 0}}, +{(unsigned char*)"NotSucceedsSlantEqual", {226, 139, 161, 0}}, +{(unsigned char*)"NotSucceedsTilde", {226, 137, 191, 204, 184, 0}}, +{(unsigned char*)"NotSuperset", {226, 138, 131, 226, 131, 146, 0}}, +{(unsigned char*)"NotSupersetEqual", {226, 138, 137, 0}}, +{(unsigned char*)"NotTilde", {226, 137, 129, 0}}, +{(unsigned char*)"NotTildeEqual", {226, 137, 132, 0}}, +{(unsigned char*)"NotTildeFullEqual", {226, 137, 135, 0}}, +{(unsigned char*)"NotTildeTilde", {226, 137, 137, 0}}, +{(unsigned char*)"NotVerticalBar", {226, 136, 164, 0}}, +{(unsigned char*)"Nscr", {240, 157, 146, 169, 0}}, +{(unsigned char*)"Ntilde", {195, 145, 0}}, +{(unsigned char*)"Nu", {206, 157, 0}}, +{(unsigned char*)"OElig", {197, 146, 0}}, +{(unsigned char*)"Oacute", {195, 147, 0}}, +{(unsigned char*)"Ocirc", {195, 148, 0}}, +{(unsigned char*)"Ocy", {208, 158, 0}}, +{(unsigned char*)"Odblac", {197, 144, 0}}, +{(unsigned char*)"Ofr", {240, 157, 148, 146, 0}}, +{(unsigned char*)"Ograve", {195, 146, 0}}, +{(unsigned char*)"Omacr", {197, 140, 0}}, +{(unsigned char*)"Omega", {206, 169, 0}}, +{(unsigned char*)"Omicron", {206, 159, 0}}, +{(unsigned char*)"Oopf", {240, 157, 149, 134, 0}}, +{(unsigned char*)"OpenCurlyDoubleQuote", {226, 128, 156, 0}}, +{(unsigned char*)"OpenCurlyQuote", {226, 128, 152, 0}}, +{(unsigned char*)"Or", {226, 169, 148, 0}}, +{(unsigned char*)"Oscr", {240, 157, 146, 170, 0}}, +{(unsigned char*)"Oslash", {195, 152, 0}}, +{(unsigned char*)"Otilde", {195, 149, 0}}, +{(unsigned char*)"Otimes", {226, 168, 183, 0}}, +{(unsigned char*)"Ouml", {195, 150, 0}}, +{(unsigned char*)"OverBar", {226, 128, 190, 0}}, +{(unsigned char*)"OverBrace", {226, 143, 158, 0}}, +{(unsigned char*)"OverBracket", {226, 142, 180, 0}}, +{(unsigned char*)"OverParenthesis", {226, 143, 156, 0}}, +{(unsigned char*)"PartialD", {226, 136, 130, 0}}, +{(unsigned char*)"Pcy", {208, 159, 0}}, +{(unsigned char*)"Pfr", {240, 157, 148, 147, 0}}, +{(unsigned char*)"Phi", {206, 166, 0}}, +{(unsigned char*)"Pi", {206, 160, 0}}, +{(unsigned char*)"PlusMinus", {194, 177, 0}}, +{(unsigned char*)"Poincareplane", {226, 132, 140, 0}}, +{(unsigned char*)"Popf", {226, 132, 153, 0}}, +{(unsigned char*)"Pr", {226, 170, 187, 0}}, +{(unsigned char*)"Precedes", {226, 137, 186, 0}}, +{(unsigned char*)"PrecedesEqual", {226, 170, 175, 0}}, +{(unsigned char*)"PrecedesSlantEqual", {226, 137, 188, 0}}, +{(unsigned char*)"PrecedesTilde", {226, 137, 190, 0}}, +{(unsigned char*)"Prime", {226, 128, 179, 0}}, +{(unsigned char*)"Product", {226, 136, 143, 0}}, +{(unsigned char*)"Proportion", {226, 136, 183, 0}}, +{(unsigned char*)"Proportional", {226, 136, 157, 0}}, +{(unsigned char*)"Pscr", {240, 157, 146, 171, 0}}, +{(unsigned char*)"Psi", {206, 168, 0}}, +{(unsigned char*)"QUOT", {34, 0}}, +{(unsigned char*)"Qfr", {240, 157, 148, 148, 0}}, +{(unsigned char*)"Qopf", {226, 132, 154, 0}}, +{(unsigned char*)"Qscr", {240, 157, 146, 172, 0}}, +{(unsigned char*)"RBarr", {226, 164, 144, 0}}, +{(unsigned char*)"REG", {194, 174, 0}}, +{(unsigned char*)"Racute", {197, 148, 0}}, +{(unsigned char*)"Rang", {226, 159, 171, 0}}, +{(unsigned char*)"Rarr", {226, 134, 160, 0}}, +{(unsigned char*)"Rarrtl", {226, 164, 150, 0}}, +{(unsigned char*)"Rcaron", {197, 152, 0}}, +{(unsigned char*)"Rcedil", {197, 150, 0}}, +{(unsigned char*)"Rcy", {208, 160, 0}}, +{(unsigned char*)"Re", {226, 132, 156, 0}}, +{(unsigned char*)"ReverseElement", {226, 136, 139, 0}}, +{(unsigned char*)"ReverseEquilibrium", {226, 135, 139, 0}}, +{(unsigned char*)"ReverseUpEquilibrium", {226, 165, 175, 0}}, +{(unsigned char*)"Rfr", {226, 132, 156, 0}}, +{(unsigned char*)"Rho", {206, 161, 0}}, +{(unsigned char*)"RightAngleBracket", {226, 159, 169, 0}}, +{(unsigned char*)"RightArrow", {226, 134, 146, 0}}, +{(unsigned char*)"RightArrowBar", {226, 135, 165, 0}}, +{(unsigned char*)"RightArrowLeftArrow", {226, 135, 132, 0}}, +{(unsigned char*)"RightCeiling", {226, 140, 137, 0}}, +{(unsigned char*)"RightDoubleBracket", {226, 159, 167, 0}}, +{(unsigned char*)"RightDownTeeVector", {226, 165, 157, 0}}, +{(unsigned char*)"RightDownVector", {226, 135, 130, 0}}, +{(unsigned char*)"RightDownVectorBar", {226, 165, 149, 0}}, +{(unsigned char*)"RightFloor", {226, 140, 139, 0}}, +{(unsigned char*)"RightTee", {226, 138, 162, 0}}, +{(unsigned char*)"RightTeeArrow", {226, 134, 166, 0}}, +{(unsigned char*)"RightTeeVector", {226, 165, 155, 0}}, +{(unsigned char*)"RightTriangle", {226, 138, 179, 0}}, +{(unsigned char*)"RightTriangleBar", {226, 167, 144, 0}}, +{(unsigned char*)"RightTriangleEqual", {226, 138, 181, 0}}, +{(unsigned char*)"RightUpDownVector", {226, 165, 143, 0}}, +{(unsigned char*)"RightUpTeeVector", {226, 165, 156, 0}}, +{(unsigned char*)"RightUpVector", {226, 134, 190, 0}}, +{(unsigned char*)"RightUpVectorBar", {226, 165, 148, 0}}, +{(unsigned char*)"RightVector", {226, 135, 128, 0}}, +{(unsigned char*)"RightVectorBar", {226, 165, 147, 0}}, +{(unsigned char*)"Rightarrow", {226, 135, 146, 0}}, +{(unsigned char*)"Ropf", {226, 132, 157, 0}}, +{(unsigned char*)"RoundImplies", {226, 165, 176, 0}}, +{(unsigned char*)"Rrightarrow", {226, 135, 155, 0}}, +{(unsigned char*)"Rscr", {226, 132, 155, 0}}, +{(unsigned char*)"Rsh", {226, 134, 177, 0}}, +{(unsigned char*)"RuleDelayed", {226, 167, 180, 0}}, +{(unsigned char*)"SHCHcy", {208, 169, 0}}, +{(unsigned char*)"SHcy", {208, 168, 0}}, +{(unsigned char*)"SOFTcy", {208, 172, 0}}, +{(unsigned char*)"Sacute", {197, 154, 0}}, +{(unsigned char*)"Sc", {226, 170, 188, 0}}, +{(unsigned char*)"Scaron", {197, 160, 0}}, +{(unsigned char*)"Scedil", {197, 158, 0}}, +{(unsigned char*)"Scirc", {197, 156, 0}}, +{(unsigned char*)"Scy", {208, 161, 0}}, +{(unsigned char*)"Sfr", {240, 157, 148, 150, 0}}, +{(unsigned char*)"ShortDownArrow", {226, 134, 147, 0}}, +{(unsigned char*)"ShortLeftArrow", {226, 134, 144, 0}}, +{(unsigned char*)"ShortRightArrow", {226, 134, 146, 0}}, +{(unsigned char*)"ShortUpArrow", {226, 134, 145, 0}}, +{(unsigned char*)"Sigma", {206, 163, 0}}, +{(unsigned char*)"SmallCircle", {226, 136, 152, 0}}, +{(unsigned char*)"Sopf", {240, 157, 149, 138, 0}}, +{(unsigned char*)"Sqrt", {226, 136, 154, 0}}, +{(unsigned char*)"Square", {226, 150, 161, 0}}, +{(unsigned char*)"SquareIntersection", {226, 138, 147, 0}}, +{(unsigned char*)"SquareSubset", {226, 138, 143, 0}}, +{(unsigned char*)"SquareSubsetEqual", {226, 138, 145, 0}}, +{(unsigned char*)"SquareSuperset", {226, 138, 144, 0}}, +{(unsigned char*)"SquareSupersetEqual", {226, 138, 146, 0}}, +{(unsigned char*)"SquareUnion", {226, 138, 148, 0}}, +{(unsigned char*)"Sscr", {240, 157, 146, 174, 0}}, +{(unsigned char*)"Star", {226, 139, 134, 0}}, +{(unsigned char*)"Sub", {226, 139, 144, 0}}, +{(unsigned char*)"Subset", {226, 139, 144, 0}}, +{(unsigned char*)"SubsetEqual", {226, 138, 134, 0}}, +{(unsigned char*)"Succeeds", {226, 137, 187, 0}}, +{(unsigned char*)"SucceedsEqual", {226, 170, 176, 0}}, +{(unsigned char*)"SucceedsSlantEqual", {226, 137, 189, 0}}, +{(unsigned char*)"SucceedsTilde", {226, 137, 191, 0}}, +{(unsigned char*)"SuchThat", {226, 136, 139, 0}}, +{(unsigned char*)"Sum", {226, 136, 145, 0}}, +{(unsigned char*)"Sup", {226, 139, 145, 0}}, +{(unsigned char*)"Superset", {226, 138, 131, 0}}, +{(unsigned char*)"SupersetEqual", {226, 138, 135, 0}}, +{(unsigned char*)"Supset", {226, 139, 145, 0}}, +{(unsigned char*)"THORN", {195, 158, 0}}, +{(unsigned char*)"TRADE", {226, 132, 162, 0}}, +{(unsigned char*)"TSHcy", {208, 139, 0}}, +{(unsigned char*)"TScy", {208, 166, 0}}, +{(unsigned char*)"Tab", {9, 0}}, +{(unsigned char*)"Tau", {206, 164, 0}}, +{(unsigned char*)"Tcaron", {197, 164, 0}}, +{(unsigned char*)"Tcedil", {197, 162, 0}}, +{(unsigned char*)"Tcy", {208, 162, 0}}, +{(unsigned char*)"Tfr", {240, 157, 148, 151, 0}}, +{(unsigned char*)"Therefore", {226, 136, 180, 0}}, +{(unsigned char*)"Theta", {206, 152, 0}}, +{(unsigned char*)"ThickSpace", {226, 129, 159, 226, 128, 138, 0}}, +{(unsigned char*)"ThinSpace", {226, 128, 137, 0}}, +{(unsigned char*)"Tilde", {226, 136, 188, 0}}, +{(unsigned char*)"TildeEqual", {226, 137, 131, 0}}, +{(unsigned char*)"TildeFullEqual", {226, 137, 133, 0}}, +{(unsigned char*)"TildeTilde", {226, 137, 136, 0}}, +{(unsigned char*)"Topf", {240, 157, 149, 139, 0}}, +{(unsigned char*)"TripleDot", {226, 131, 155, 0}}, +{(unsigned char*)"Tscr", {240, 157, 146, 175, 0}}, +{(unsigned char*)"Tstrok", {197, 166, 0}}, +{(unsigned char*)"Uacute", {195, 154, 0}}, +{(unsigned char*)"Uarr", {226, 134, 159, 0}}, +{(unsigned char*)"Uarrocir", {226, 165, 137, 0}}, +{(unsigned char*)"Ubrcy", {208, 142, 0}}, +{(unsigned char*)"Ubreve", {197, 172, 0}}, +{(unsigned char*)"Ucirc", {195, 155, 0}}, +{(unsigned char*)"Ucy", {208, 163, 0}}, +{(unsigned char*)"Udblac", {197, 176, 0}}, +{(unsigned char*)"Ufr", {240, 157, 148, 152, 0}}, +{(unsigned char*)"Ugrave", {195, 153, 0}}, +{(unsigned char*)"Umacr", {197, 170, 0}}, +{(unsigned char*)"UnderBar", {95, 0}}, +{(unsigned char*)"UnderBrace", {226, 143, 159, 0}}, +{(unsigned char*)"UnderBracket", {226, 142, 181, 0}}, +{(unsigned char*)"UnderParenthesis", {226, 143, 157, 0}}, +{(unsigned char*)"Union", {226, 139, 131, 0}}, +{(unsigned char*)"UnionPlus", {226, 138, 142, 0}}, +{(unsigned char*)"Uogon", {197, 178, 0}}, +{(unsigned char*)"Uopf", {240, 157, 149, 140, 0}}, +{(unsigned char*)"UpArrow", {226, 134, 145, 0}}, +{(unsigned char*)"UpArrowBar", {226, 164, 146, 0}}, +{(unsigned char*)"UpArrowDownArrow", {226, 135, 133, 0}}, +{(unsigned char*)"UpDownArrow", {226, 134, 149, 0}}, +{(unsigned char*)"UpEquilibrium", {226, 165, 174, 0}}, +{(unsigned char*)"UpTee", {226, 138, 165, 0}}, +{(unsigned char*)"UpTeeArrow", {226, 134, 165, 0}}, +{(unsigned char*)"Uparrow", {226, 135, 145, 0}}, +{(unsigned char*)"Updownarrow", {226, 135, 149, 0}}, +{(unsigned char*)"UpperLeftArrow", {226, 134, 150, 0}}, +{(unsigned char*)"UpperRightArrow", {226, 134, 151, 0}}, +{(unsigned char*)"Upsi", {207, 146, 0}}, +{(unsigned char*)"Upsilon", {206, 165, 0}}, +{(unsigned char*)"Uring", {197, 174, 0}}, +{(unsigned char*)"Uscr", {240, 157, 146, 176, 0}}, +{(unsigned char*)"Utilde", {197, 168, 0}}, +{(unsigned char*)"Uuml", {195, 156, 0}}, +{(unsigned char*)"VDash", {226, 138, 171, 0}}, +{(unsigned char*)"Vbar", {226, 171, 171, 0}}, +{(unsigned char*)"Vcy", {208, 146, 0}}, +{(unsigned char*)"Vdash", {226, 138, 169, 0}}, +{(unsigned char*)"Vdashl", {226, 171, 166, 0}}, +{(unsigned char*)"Vee", {226, 139, 129, 0}}, +{(unsigned char*)"Verbar", {226, 128, 150, 0}}, +{(unsigned char*)"Vert", {226, 128, 150, 0}}, +{(unsigned char*)"VerticalBar", {226, 136, 163, 0}}, +{(unsigned char*)"VerticalLine", {124, 0}}, +{(unsigned char*)"VerticalSeparator", {226, 157, 152, 0}}, +{(unsigned char*)"VerticalTilde", {226, 137, 128, 0}}, +{(unsigned char*)"VeryThinSpace", {226, 128, 138, 0}}, +{(unsigned char*)"Vfr", {240, 157, 148, 153, 0}}, +{(unsigned char*)"Vopf", {240, 157, 149, 141, 0}}, +{(unsigned char*)"Vscr", {240, 157, 146, 177, 0}}, +{(unsigned char*)"Vvdash", {226, 138, 170, 0}}, +{(unsigned char*)"Wcirc", {197, 180, 0}}, +{(unsigned char*)"Wedge", {226, 139, 128, 0}}, +{(unsigned char*)"Wfr", {240, 157, 148, 154, 0}}, +{(unsigned char*)"Wopf", {240, 157, 149, 142, 0}}, +{(unsigned char*)"Wscr", {240, 157, 146, 178, 0}}, +{(unsigned char*)"Xfr", {240, 157, 148, 155, 0}}, +{(unsigned char*)"Xi", {206, 158, 0}}, +{(unsigned char*)"Xopf", {240, 157, 149, 143, 0}}, +{(unsigned char*)"Xscr", {240, 157, 146, 179, 0}}, +{(unsigned char*)"YAcy", {208, 175, 0}}, +{(unsigned char*)"YIcy", {208, 135, 0}}, +{(unsigned char*)"YUcy", {208, 174, 0}}, +{(unsigned char*)"Yacute", {195, 157, 0}}, +{(unsigned char*)"Ycirc", {197, 182, 0}}, +{(unsigned char*)"Ycy", {208, 171, 0}}, +{(unsigned char*)"Yfr", {240, 157, 148, 156, 0}}, +{(unsigned char*)"Yopf", {240, 157, 149, 144, 0}}, +{(unsigned char*)"Yscr", {240, 157, 146, 180, 0}}, +{(unsigned char*)"Yuml", {197, 184, 0}}, +{(unsigned char*)"ZHcy", {208, 150, 0}}, +{(unsigned char*)"Zacute", {197, 185, 0}}, +{(unsigned char*)"Zcaron", {197, 189, 0}}, +{(unsigned char*)"Zcy", {208, 151, 0}}, +{(unsigned char*)"Zdot", {197, 187, 0}}, +{(unsigned char*)"ZeroWidthSpace", {226, 128, 139, 0}}, +{(unsigned char*)"Zeta", {206, 150, 0}}, +{(unsigned char*)"Zfr", {226, 132, 168, 0}}, +{(unsigned char*)"Zopf", {226, 132, 164, 0}}, +{(unsigned char*)"Zscr", {240, 157, 146, 181, 0}}, +{(unsigned char*)"aacute", {195, 161, 0}}, +{(unsigned char*)"abreve", {196, 131, 0}}, +{(unsigned char*)"ac", {226, 136, 190, 0}}, +{(unsigned char*)"acE", {226, 136, 190, 204, 179, 0}}, +{(unsigned char*)"acd", {226, 136, 191, 0}}, +{(unsigned char*)"acirc", {195, 162, 0}}, +{(unsigned char*)"acute", {194, 180, 0}}, +{(unsigned char*)"acy", {208, 176, 0}}, +{(unsigned char*)"aelig", {195, 166, 0}}, +{(unsigned char*)"af", {226, 129, 161, 0}}, +{(unsigned char*)"afr", {240, 157, 148, 158, 0}}, +{(unsigned char*)"agrave", {195, 160, 0}}, +{(unsigned char*)"alefsym", {226, 132, 181, 0}}, +{(unsigned char*)"aleph", {226, 132, 181, 0}}, +{(unsigned char*)"alpha", {206, 177, 0}}, +{(unsigned char*)"amacr", {196, 129, 0}}, +{(unsigned char*)"amalg", {226, 168, 191, 0}}, +{(unsigned char*)"amp", {38, 0}}, +{(unsigned char*)"and", {226, 136, 167, 0}}, +{(unsigned char*)"andand", {226, 169, 149, 0}}, +{(unsigned char*)"andd", {226, 169, 156, 0}}, +{(unsigned char*)"andslope", {226, 169, 152, 0}}, +{(unsigned char*)"andv", {226, 169, 154, 0}}, +{(unsigned char*)"ang", {226, 136, 160, 0}}, +{(unsigned char*)"ange", {226, 166, 164, 0}}, +{(unsigned char*)"angle", {226, 136, 160, 0}}, +{(unsigned char*)"angmsd", {226, 136, 161, 0}}, +{(unsigned char*)"angmsdaa", {226, 166, 168, 0}}, +{(unsigned char*)"angmsdab", {226, 166, 169, 0}}, +{(unsigned char*)"angmsdac", {226, 166, 170, 0}}, +{(unsigned char*)"angmsdad", {226, 166, 171, 0}}, +{(unsigned char*)"angmsdae", {226, 166, 172, 0}}, +{(unsigned char*)"angmsdaf", {226, 166, 173, 0}}, +{(unsigned char*)"angmsdag", {226, 166, 174, 0}}, +{(unsigned char*)"angmsdah", {226, 166, 175, 0}}, +{(unsigned char*)"angrt", {226, 136, 159, 0}}, +{(unsigned char*)"angrtvb", {226, 138, 190, 0}}, +{(unsigned char*)"angrtvbd", {226, 166, 157, 0}}, +{(unsigned char*)"angsph", {226, 136, 162, 0}}, +{(unsigned char*)"angst", {195, 133, 0}}, +{(unsigned char*)"angzarr", {226, 141, 188, 0}}, +{(unsigned char*)"aogon", {196, 133, 0}}, +{(unsigned char*)"aopf", {240, 157, 149, 146, 0}}, +{(unsigned char*)"ap", {226, 137, 136, 0}}, +{(unsigned char*)"apE", {226, 169, 176, 0}}, +{(unsigned char*)"apacir", {226, 169, 175, 0}}, +{(unsigned char*)"ape", {226, 137, 138, 0}}, +{(unsigned char*)"apid", {226, 137, 139, 0}}, +{(unsigned char*)"apos", {39, 0}}, +{(unsigned char*)"approx", {226, 137, 136, 0}}, +{(unsigned char*)"approxeq", {226, 137, 138, 0}}, +{(unsigned char*)"aring", {195, 165, 0}}, +{(unsigned char*)"ascr", {240, 157, 146, 182, 0}}, +{(unsigned char*)"ast", {42, 0}}, +{(unsigned char*)"asymp", {226, 137, 136, 0}}, +{(unsigned char*)"asympeq", {226, 137, 141, 0}}, +{(unsigned char*)"atilde", {195, 163, 0}}, +{(unsigned char*)"auml", {195, 164, 0}}, +{(unsigned char*)"awconint", {226, 136, 179, 0}}, +{(unsigned char*)"awint", {226, 168, 145, 0}}, +{(unsigned char*)"bNot", {226, 171, 173, 0}}, +{(unsigned char*)"backcong", {226, 137, 140, 0}}, +{(unsigned char*)"backepsilon", {207, 182, 0}}, +{(unsigned char*)"backprime", {226, 128, 181, 0}}, +{(unsigned char*)"backsim", {226, 136, 189, 0}}, +{(unsigned char*)"backsimeq", {226, 139, 141, 0}}, +{(unsigned char*)"barvee", {226, 138, 189, 0}}, +{(unsigned char*)"barwed", {226, 140, 133, 0}}, +{(unsigned char*)"barwedge", {226, 140, 133, 0}}, +{(unsigned char*)"bbrk", {226, 142, 181, 0}}, +{(unsigned char*)"bbrktbrk", {226, 142, 182, 0}}, +{(unsigned char*)"bcong", {226, 137, 140, 0}}, +{(unsigned char*)"bcy", {208, 177, 0}}, +{(unsigned char*)"bdquo", {226, 128, 158, 0}}, +{(unsigned char*)"becaus", {226, 136, 181, 0}}, +{(unsigned char*)"because", {226, 136, 181, 0}}, +{(unsigned char*)"bemptyv", {226, 166, 176, 0}}, +{(unsigned char*)"bepsi", {207, 182, 0}}, +{(unsigned char*)"bernou", {226, 132, 172, 0}}, +{(unsigned char*)"beta", {206, 178, 0}}, +{(unsigned char*)"beth", {226, 132, 182, 0}}, +{(unsigned char*)"between", {226, 137, 172, 0}}, +{(unsigned char*)"bfr", {240, 157, 148, 159, 0}}, +{(unsigned char*)"bigcap", {226, 139, 130, 0}}, +{(unsigned char*)"bigcirc", {226, 151, 175, 0}}, +{(unsigned char*)"bigcup", {226, 139, 131, 0}}, +{(unsigned char*)"bigodot", {226, 168, 128, 0}}, +{(unsigned char*)"bigoplus", {226, 168, 129, 0}}, +{(unsigned char*)"bigotimes", {226, 168, 130, 0}}, +{(unsigned char*)"bigsqcup", {226, 168, 134, 0}}, +{(unsigned char*)"bigstar", {226, 152, 133, 0}}, +{(unsigned char*)"bigtriangledown", {226, 150, 189, 0}}, +{(unsigned char*)"bigtriangleup", {226, 150, 179, 0}}, +{(unsigned char*)"biguplus", {226, 168, 132, 0}}, +{(unsigned char*)"bigvee", {226, 139, 129, 0}}, +{(unsigned char*)"bigwedge", {226, 139, 128, 0}}, +{(unsigned char*)"bkarow", {226, 164, 141, 0}}, +{(unsigned char*)"blacklozenge", {226, 167, 171, 0}}, +{(unsigned char*)"blacksquare", {226, 150, 170, 0}}, +{(unsigned char*)"blacktriangle", {226, 150, 180, 0}}, +{(unsigned char*)"blacktriangledown", {226, 150, 190, 0}}, +{(unsigned char*)"blacktriangleleft", {226, 151, 130, 0}}, +{(unsigned char*)"blacktriangleright", {226, 150, 184, 0}}, +{(unsigned char*)"blank", {226, 144, 163, 0}}, +{(unsigned char*)"blk12", {226, 150, 146, 0}}, +{(unsigned char*)"blk14", {226, 150, 145, 0}}, +{(unsigned char*)"blk34", {226, 150, 147, 0}}, +{(unsigned char*)"block", {226, 150, 136, 0}}, +{(unsigned char*)"bne", {61, 226, 131, 165, 0}}, +{(unsigned char*)"bnequiv", {226, 137, 161, 226, 131, 165, 0}}, +{(unsigned char*)"bnot", {226, 140, 144, 0}}, +{(unsigned char*)"bopf", {240, 157, 149, 147, 0}}, +{(unsigned char*)"bot", {226, 138, 165, 0}}, +{(unsigned char*)"bottom", {226, 138, 165, 0}}, +{(unsigned char*)"bowtie", {226, 139, 136, 0}}, +{(unsigned char*)"boxDL", {226, 149, 151, 0}}, +{(unsigned char*)"boxDR", {226, 149, 148, 0}}, +{(unsigned char*)"boxDl", {226, 149, 150, 0}}, +{(unsigned char*)"boxDr", {226, 149, 147, 0}}, +{(unsigned char*)"boxH", {226, 149, 144, 0}}, +{(unsigned char*)"boxHD", {226, 149, 166, 0}}, +{(unsigned char*)"boxHU", {226, 149, 169, 0}}, +{(unsigned char*)"boxHd", {226, 149, 164, 0}}, +{(unsigned char*)"boxHu", {226, 149, 167, 0}}, +{(unsigned char*)"boxUL", {226, 149, 157, 0}}, +{(unsigned char*)"boxUR", {226, 149, 154, 0}}, +{(unsigned char*)"boxUl", {226, 149, 156, 0}}, +{(unsigned char*)"boxUr", {226, 149, 153, 0}}, +{(unsigned char*)"boxV", {226, 149, 145, 0}}, +{(unsigned char*)"boxVH", {226, 149, 172, 0}}, +{(unsigned char*)"boxVL", {226, 149, 163, 0}}, +{(unsigned char*)"boxVR", {226, 149, 160, 0}}, +{(unsigned char*)"boxVh", {226, 149, 171, 0}}, +{(unsigned char*)"boxVl", {226, 149, 162, 0}}, +{(unsigned char*)"boxVr", {226, 149, 159, 0}}, +{(unsigned char*)"boxbox", {226, 167, 137, 0}}, +{(unsigned char*)"boxdL", {226, 149, 149, 0}}, +{(unsigned char*)"boxdR", {226, 149, 146, 0}}, +{(unsigned char*)"boxdl", {226, 148, 144, 0}}, +{(unsigned char*)"boxdr", {226, 148, 140, 0}}, +{(unsigned char*)"boxh", {226, 148, 128, 0}}, +{(unsigned char*)"boxhD", {226, 149, 165, 0}}, +{(unsigned char*)"boxhU", {226, 149, 168, 0}}, +{(unsigned char*)"boxhd", {226, 148, 172, 0}}, +{(unsigned char*)"boxhu", {226, 148, 180, 0}}, +{(unsigned char*)"boxminus", {226, 138, 159, 0}}, +{(unsigned char*)"boxplus", {226, 138, 158, 0}}, +{(unsigned char*)"boxtimes", {226, 138, 160, 0}}, +{(unsigned char*)"boxuL", {226, 149, 155, 0}}, +{(unsigned char*)"boxuR", {226, 149, 152, 0}}, +{(unsigned char*)"boxul", {226, 148, 152, 0}}, +{(unsigned char*)"boxur", {226, 148, 148, 0}}, +{(unsigned char*)"boxv", {226, 148, 130, 0}}, +{(unsigned char*)"boxvH", {226, 149, 170, 0}}, +{(unsigned char*)"boxvL", {226, 149, 161, 0}}, +{(unsigned char*)"boxvR", {226, 149, 158, 0}}, +{(unsigned char*)"boxvh", {226, 148, 188, 0}}, +{(unsigned char*)"boxvl", {226, 148, 164, 0}}, +{(unsigned char*)"boxvr", {226, 148, 156, 0}}, +{(unsigned char*)"bprime", {226, 128, 181, 0}}, +{(unsigned char*)"breve", {203, 152, 0}}, +{(unsigned char*)"brvbar", {194, 166, 0}}, +{(unsigned char*)"bscr", {240, 157, 146, 183, 0}}, +{(unsigned char*)"bsemi", {226, 129, 143, 0}}, +{(unsigned char*)"bsim", {226, 136, 189, 0}}, +{(unsigned char*)"bsime", {226, 139, 141, 0}}, +{(unsigned char*)"bsol", {92, 0}}, +{(unsigned char*)"bsolb", {226, 167, 133, 0}}, +{(unsigned char*)"bsolhsub", {226, 159, 136, 0}}, +{(unsigned char*)"bull", {226, 128, 162, 0}}, +{(unsigned char*)"bullet", {226, 128, 162, 0}}, +{(unsigned char*)"bump", {226, 137, 142, 0}}, +{(unsigned char*)"bumpE", {226, 170, 174, 0}}, +{(unsigned char*)"bumpe", {226, 137, 143, 0}}, +{(unsigned char*)"bumpeq", {226, 137, 143, 0}}, +{(unsigned char*)"cacute", {196, 135, 0}}, +{(unsigned char*)"cap", {226, 136, 169, 0}}, +{(unsigned char*)"capand", {226, 169, 132, 0}}, +{(unsigned char*)"capbrcup", {226, 169, 137, 0}}, +{(unsigned char*)"capcap", {226, 169, 139, 0}}, +{(unsigned char*)"capcup", {226, 169, 135, 0}}, +{(unsigned char*)"capdot", {226, 169, 128, 0}}, +{(unsigned char*)"caps", {226, 136, 169, 239, 184, 128, 0}}, +{(unsigned char*)"caret", {226, 129, 129, 0}}, +{(unsigned char*)"caron", {203, 135, 0}}, +{(unsigned char*)"ccaps", {226, 169, 141, 0}}, +{(unsigned char*)"ccaron", {196, 141, 0}}, +{(unsigned char*)"ccedil", {195, 167, 0}}, +{(unsigned char*)"ccirc", {196, 137, 0}}, +{(unsigned char*)"ccups", {226, 169, 140, 0}}, +{(unsigned char*)"ccupssm", {226, 169, 144, 0}}, +{(unsigned char*)"cdot", {196, 139, 0}}, +{(unsigned char*)"cedil", {194, 184, 0}}, +{(unsigned char*)"cemptyv", {226, 166, 178, 0}}, +{(unsigned char*)"cent", {194, 162, 0}}, +{(unsigned char*)"centerdot", {194, 183, 0}}, +{(unsigned char*)"cfr", {240, 157, 148, 160, 0}}, +{(unsigned char*)"chcy", {209, 135, 0}}, +{(unsigned char*)"check", {226, 156, 147, 0}}, +{(unsigned char*)"checkmark", {226, 156, 147, 0}}, +{(unsigned char*)"chi", {207, 135, 0}}, +{(unsigned char*)"cir", {226, 151, 139, 0}}, +{(unsigned char*)"cirE", {226, 167, 131, 0}}, +{(unsigned char*)"circ", {203, 134, 0}}, +{(unsigned char*)"circeq", {226, 137, 151, 0}}, +{(unsigned char*)"circlearrowleft", {226, 134, 186, 0}}, +{(unsigned char*)"circlearrowright", {226, 134, 187, 0}}, +{(unsigned char*)"circledR", {194, 174, 0}}, +{(unsigned char*)"circledS", {226, 147, 136, 0}}, +{(unsigned char*)"circledast", {226, 138, 155, 0}}, +{(unsigned char*)"circledcirc", {226, 138, 154, 0}}, +{(unsigned char*)"circleddash", {226, 138, 157, 0}}, +{(unsigned char*)"cire", {226, 137, 151, 0}}, +{(unsigned char*)"cirfnint", {226, 168, 144, 0}}, +{(unsigned char*)"cirmid", {226, 171, 175, 0}}, +{(unsigned char*)"cirscir", {226, 167, 130, 0}}, +{(unsigned char*)"clubs", {226, 153, 163, 0}}, +{(unsigned char*)"clubsuit", {226, 153, 163, 0}}, +{(unsigned char*)"colon", {58, 0}}, +{(unsigned char*)"colone", {226, 137, 148, 0}}, +{(unsigned char*)"coloneq", {226, 137, 148, 0}}, +{(unsigned char*)"comma", {44, 0}}, +{(unsigned char*)"commat", {64, 0}}, +{(unsigned char*)"comp", {226, 136, 129, 0}}, +{(unsigned char*)"compfn", {226, 136, 152, 0}}, +{(unsigned char*)"complement", {226, 136, 129, 0}}, +{(unsigned char*)"complexes", {226, 132, 130, 0}}, +{(unsigned char*)"cong", {226, 137, 133, 0}}, +{(unsigned char*)"congdot", {226, 169, 173, 0}}, +{(unsigned char*)"conint", {226, 136, 174, 0}}, +{(unsigned char*)"copf", {240, 157, 149, 148, 0}}, +{(unsigned char*)"coprod", {226, 136, 144, 0}}, +{(unsigned char*)"copy", {194, 169, 0}}, +{(unsigned char*)"copysr", {226, 132, 151, 0}}, +{(unsigned char*)"crarr", {226, 134, 181, 0}}, +{(unsigned char*)"cross", {226, 156, 151, 0}}, +{(unsigned char*)"cscr", {240, 157, 146, 184, 0}}, +{(unsigned char*)"csub", {226, 171, 143, 0}}, +{(unsigned char*)"csube", {226, 171, 145, 0}}, +{(unsigned char*)"csup", {226, 171, 144, 0}}, +{(unsigned char*)"csupe", {226, 171, 146, 0}}, +{(unsigned char*)"ctdot", {226, 139, 175, 0}}, +{(unsigned char*)"cudarrl", {226, 164, 184, 0}}, +{(unsigned char*)"cudarrr", {226, 164, 181, 0}}, +{(unsigned char*)"cuepr", {226, 139, 158, 0}}, +{(unsigned char*)"cuesc", {226, 139, 159, 0}}, +{(unsigned char*)"cularr", {226, 134, 182, 0}}, +{(unsigned char*)"cularrp", {226, 164, 189, 0}}, +{(unsigned char*)"cup", {226, 136, 170, 0}}, +{(unsigned char*)"cupbrcap", {226, 169, 136, 0}}, +{(unsigned char*)"cupcap", {226, 169, 134, 0}}, +{(unsigned char*)"cupcup", {226, 169, 138, 0}}, +{(unsigned char*)"cupdot", {226, 138, 141, 0}}, +{(unsigned char*)"cupor", {226, 169, 133, 0}}, +{(unsigned char*)"cups", {226, 136, 170, 239, 184, 128, 0}}, +{(unsigned char*)"curarr", {226, 134, 183, 0}}, +{(unsigned char*)"curarrm", {226, 164, 188, 0}}, +{(unsigned char*)"curlyeqprec", {226, 139, 158, 0}}, +{(unsigned char*)"curlyeqsucc", {226, 139, 159, 0}}, +{(unsigned char*)"curlyvee", {226, 139, 142, 0}}, +{(unsigned char*)"curlywedge", {226, 139, 143, 0}}, +{(unsigned char*)"curren", {194, 164, 0}}, +{(unsigned char*)"curvearrowleft", {226, 134, 182, 0}}, +{(unsigned char*)"curvearrowright", {226, 134, 183, 0}}, +{(unsigned char*)"cuvee", {226, 139, 142, 0}}, +{(unsigned char*)"cuwed", {226, 139, 143, 0}}, +{(unsigned char*)"cwconint", {226, 136, 178, 0}}, +{(unsigned char*)"cwint", {226, 136, 177, 0}}, +{(unsigned char*)"cylcty", {226, 140, 173, 0}}, +{(unsigned char*)"dArr", {226, 135, 147, 0}}, +{(unsigned char*)"dHar", {226, 165, 165, 0}}, +{(unsigned char*)"dagger", {226, 128, 160, 0}}, +{(unsigned char*)"daleth", {226, 132, 184, 0}}, +{(unsigned char*)"darr", {226, 134, 147, 0}}, +{(unsigned char*)"dash", {226, 128, 144, 0}}, +{(unsigned char*)"dashv", {226, 138, 163, 0}}, +{(unsigned char*)"dbkarow", {226, 164, 143, 0}}, +{(unsigned char*)"dblac", {203, 157, 0}}, +{(unsigned char*)"dcaron", {196, 143, 0}}, +{(unsigned char*)"dcy", {208, 180, 0}}, +{(unsigned char*)"dd", {226, 133, 134, 0}}, +{(unsigned char*)"ddagger", {226, 128, 161, 0}}, +{(unsigned char*)"ddarr", {226, 135, 138, 0}}, +{(unsigned char*)"ddotseq", {226, 169, 183, 0}}, +{(unsigned char*)"deg", {194, 176, 0}}, +{(unsigned char*)"delta", {206, 180, 0}}, +{(unsigned char*)"demptyv", {226, 166, 177, 0}}, +{(unsigned char*)"dfisht", {226, 165, 191, 0}}, +{(unsigned char*)"dfr", {240, 157, 148, 161, 0}}, +{(unsigned char*)"dharl", {226, 135, 131, 0}}, +{(unsigned char*)"dharr", {226, 135, 130, 0}}, +{(unsigned char*)"diam", {226, 139, 132, 0}}, +{(unsigned char*)"diamond", {226, 139, 132, 0}}, +{(unsigned char*)"diamondsuit", {226, 153, 166, 0}}, +{(unsigned char*)"diams", {226, 153, 166, 0}}, +{(unsigned char*)"die", {194, 168, 0}}, +{(unsigned char*)"digamma", {207, 157, 0}}, +{(unsigned char*)"disin", {226, 139, 178, 0}}, +{(unsigned char*)"div", {195, 183, 0}}, +{(unsigned char*)"divide", {195, 183, 0}}, +{(unsigned char*)"divideontimes", {226, 139, 135, 0}}, +{(unsigned char*)"divonx", {226, 139, 135, 0}}, +{(unsigned char*)"djcy", {209, 146, 0}}, +{(unsigned char*)"dlcorn", {226, 140, 158, 0}}, +{(unsigned char*)"dlcrop", {226, 140, 141, 0}}, +{(unsigned char*)"dollar", {36, 0}}, +{(unsigned char*)"dopf", {240, 157, 149, 149, 0}}, +{(unsigned char*)"dot", {203, 153, 0}}, +{(unsigned char*)"doteq", {226, 137, 144, 0}}, +{(unsigned char*)"doteqdot", {226, 137, 145, 0}}, +{(unsigned char*)"dotminus", {226, 136, 184, 0}}, +{(unsigned char*)"dotplus", {226, 136, 148, 0}}, +{(unsigned char*)"dotsquare", {226, 138, 161, 0}}, +{(unsigned char*)"doublebarwedge", {226, 140, 134, 0}}, +{(unsigned char*)"downarrow", {226, 134, 147, 0}}, +{(unsigned char*)"downdownarrows", {226, 135, 138, 0}}, +{(unsigned char*)"downharpoonleft", {226, 135, 131, 0}}, +{(unsigned char*)"downharpoonright", {226, 135, 130, 0}}, +{(unsigned char*)"drbkarow", {226, 164, 144, 0}}, +{(unsigned char*)"drcorn", {226, 140, 159, 0}}, +{(unsigned char*)"drcrop", {226, 140, 140, 0}}, +{(unsigned char*)"dscr", {240, 157, 146, 185, 0}}, +{(unsigned char*)"dscy", {209, 149, 0}}, +{(unsigned char*)"dsol", {226, 167, 182, 0}}, +{(unsigned char*)"dstrok", {196, 145, 0}}, +{(unsigned char*)"dtdot", {226, 139, 177, 0}}, +{(unsigned char*)"dtri", {226, 150, 191, 0}}, +{(unsigned char*)"dtrif", {226, 150, 190, 0}}, +{(unsigned char*)"duarr", {226, 135, 181, 0}}, +{(unsigned char*)"duhar", {226, 165, 175, 0}}, +{(unsigned char*)"dwangle", {226, 166, 166, 0}}, +{(unsigned char*)"dzcy", {209, 159, 0}}, +{(unsigned char*)"dzigrarr", {226, 159, 191, 0}}, +{(unsigned char*)"eDDot", {226, 169, 183, 0}}, +{(unsigned char*)"eDot", {226, 137, 145, 0}}, +{(unsigned char*)"eacute", {195, 169, 0}}, +{(unsigned char*)"easter", {226, 169, 174, 0}}, +{(unsigned char*)"ecaron", {196, 155, 0}}, +{(unsigned char*)"ecir", {226, 137, 150, 0}}, +{(unsigned char*)"ecirc", {195, 170, 0}}, +{(unsigned char*)"ecolon", {226, 137, 149, 0}}, +{(unsigned char*)"ecy", {209, 141, 0}}, +{(unsigned char*)"edot", {196, 151, 0}}, +{(unsigned char*)"ee", {226, 133, 135, 0}}, +{(unsigned char*)"efDot", {226, 137, 146, 0}}, +{(unsigned char*)"efr", {240, 157, 148, 162, 0}}, +{(unsigned char*)"eg", {226, 170, 154, 0}}, +{(unsigned char*)"egrave", {195, 168, 0}}, +{(unsigned char*)"egs", {226, 170, 150, 0}}, +{(unsigned char*)"egsdot", {226, 170, 152, 0}}, +{(unsigned char*)"el", {226, 170, 153, 0}}, +{(unsigned char*)"elinters", {226, 143, 167, 0}}, +{(unsigned char*)"ell", {226, 132, 147, 0}}, +{(unsigned char*)"els", {226, 170, 149, 0}}, +{(unsigned char*)"elsdot", {226, 170, 151, 0}}, +{(unsigned char*)"emacr", {196, 147, 0}}, +{(unsigned char*)"empty", {226, 136, 133, 0}}, +{(unsigned char*)"emptyset", {226, 136, 133, 0}}, +{(unsigned char*)"emptyv", {226, 136, 133, 0}}, +{(unsigned char*)"emsp", {226, 128, 131, 0}}, +{(unsigned char*)"emsp13", {226, 128, 132, 0}}, +{(unsigned char*)"emsp14", {226, 128, 133, 0}}, +{(unsigned char*)"eng", {197, 139, 0}}, +{(unsigned char*)"ensp", {226, 128, 130, 0}}, +{(unsigned char*)"eogon", {196, 153, 0}}, +{(unsigned char*)"eopf", {240, 157, 149, 150, 0}}, +{(unsigned char*)"epar", {226, 139, 149, 0}}, +{(unsigned char*)"eparsl", {226, 167, 163, 0}}, +{(unsigned char*)"eplus", {226, 169, 177, 0}}, +{(unsigned char*)"epsi", {206, 181, 0}}, +{(unsigned char*)"epsilon", {206, 181, 0}}, +{(unsigned char*)"epsiv", {207, 181, 0}}, +{(unsigned char*)"eqcirc", {226, 137, 150, 0}}, +{(unsigned char*)"eqcolon", {226, 137, 149, 0}}, +{(unsigned char*)"eqsim", {226, 137, 130, 0}}, +{(unsigned char*)"eqslantgtr", {226, 170, 150, 0}}, +{(unsigned char*)"eqslantless", {226, 170, 149, 0}}, +{(unsigned char*)"equals", {61, 0}}, +{(unsigned char*)"equest", {226, 137, 159, 0}}, +{(unsigned char*)"equiv", {226, 137, 161, 0}}, +{(unsigned char*)"equivDD", {226, 169, 184, 0}}, +{(unsigned char*)"eqvparsl", {226, 167, 165, 0}}, +{(unsigned char*)"erDot", {226, 137, 147, 0}}, +{(unsigned char*)"erarr", {226, 165, 177, 0}}, +{(unsigned char*)"escr", {226, 132, 175, 0}}, +{(unsigned char*)"esdot", {226, 137, 144, 0}}, +{(unsigned char*)"esim", {226, 137, 130, 0}}, +{(unsigned char*)"eta", {206, 183, 0}}, +{(unsigned char*)"eth", {195, 176, 0}}, +{(unsigned char*)"euml", {195, 171, 0}}, +{(unsigned char*)"euro", {226, 130, 172, 0}}, +{(unsigned char*)"excl", {33, 0}}, +{(unsigned char*)"exist", {226, 136, 131, 0}}, +{(unsigned char*)"expectation", {226, 132, 176, 0}}, +{(unsigned char*)"exponentiale", {226, 133, 135, 0}}, +{(unsigned char*)"fallingdotseq", {226, 137, 146, 0}}, +{(unsigned char*)"fcy", {209, 132, 0}}, +{(unsigned char*)"female", {226, 153, 128, 0}}, +{(unsigned char*)"ffilig", {239, 172, 131, 0}}, +{(unsigned char*)"fflig", {239, 172, 128, 0}}, +{(unsigned char*)"ffllig", {239, 172, 132, 0}}, +{(unsigned char*)"ffr", {240, 157, 148, 163, 0}}, +{(unsigned char*)"filig", {239, 172, 129, 0}}, +{(unsigned char*)"fjlig", {102, 106, 0}}, +{(unsigned char*)"flat", {226, 153, 173, 0}}, +{(unsigned char*)"fllig", {239, 172, 130, 0}}, +{(unsigned char*)"fltns", {226, 150, 177, 0}}, +{(unsigned char*)"fnof", {198, 146, 0}}, +{(unsigned char*)"fopf", {240, 157, 149, 151, 0}}, +{(unsigned char*)"forall", {226, 136, 128, 0}}, +{(unsigned char*)"fork", {226, 139, 148, 0}}, +{(unsigned char*)"forkv", {226, 171, 153, 0}}, +{(unsigned char*)"fpartint", {226, 168, 141, 0}}, +{(unsigned char*)"frac12", {194, 189, 0}}, +{(unsigned char*)"frac13", {226, 133, 147, 0}}, +{(unsigned char*)"frac14", {194, 188, 0}}, +{(unsigned char*)"frac15", {226, 133, 149, 0}}, +{(unsigned char*)"frac16", {226, 133, 153, 0}}, +{(unsigned char*)"frac18", {226, 133, 155, 0}}, +{(unsigned char*)"frac23", {226, 133, 148, 0}}, +{(unsigned char*)"frac25", {226, 133, 150, 0}}, +{(unsigned char*)"frac34", {194, 190, 0}}, +{(unsigned char*)"frac35", {226, 133, 151, 0}}, +{(unsigned char*)"frac38", {226, 133, 156, 0}}, +{(unsigned char*)"frac45", {226, 133, 152, 0}}, +{(unsigned char*)"frac56", {226, 133, 154, 0}}, +{(unsigned char*)"frac58", {226, 133, 157, 0}}, +{(unsigned char*)"frac78", {226, 133, 158, 0}}, +{(unsigned char*)"frasl", {226, 129, 132, 0}}, +{(unsigned char*)"frown", {226, 140, 162, 0}}, +{(unsigned char*)"fscr", {240, 157, 146, 187, 0}}, +{(unsigned char*)"gE", {226, 137, 167, 0}}, +{(unsigned char*)"gEl", {226, 170, 140, 0}}, +{(unsigned char*)"gacute", {199, 181, 0}}, +{(unsigned char*)"gamma", {206, 179, 0}}, +{(unsigned char*)"gammad", {207, 157, 0}}, +{(unsigned char*)"gap", {226, 170, 134, 0}}, +{(unsigned char*)"gbreve", {196, 159, 0}}, +{(unsigned char*)"gcirc", {196, 157, 0}}, +{(unsigned char*)"gcy", {208, 179, 0}}, +{(unsigned char*)"gdot", {196, 161, 0}}, +{(unsigned char*)"ge", {226, 137, 165, 0}}, +{(unsigned char*)"gel", {226, 139, 155, 0}}, +{(unsigned char*)"geq", {226, 137, 165, 0}}, +{(unsigned char*)"geqq", {226, 137, 167, 0}}, +{(unsigned char*)"geqslant", {226, 169, 190, 0}}, +{(unsigned char*)"ges", {226, 169, 190, 0}}, +{(unsigned char*)"gescc", {226, 170, 169, 0}}, +{(unsigned char*)"gesdot", {226, 170, 128, 0}}, +{(unsigned char*)"gesdoto", {226, 170, 130, 0}}, +{(unsigned char*)"gesdotol", {226, 170, 132, 0}}, +{(unsigned char*)"gesl", {226, 139, 155, 239, 184, 128, 0}}, +{(unsigned char*)"gesles", {226, 170, 148, 0}}, +{(unsigned char*)"gfr", {240, 157, 148, 164, 0}}, +{(unsigned char*)"gg", {226, 137, 171, 0}}, +{(unsigned char*)"ggg", {226, 139, 153, 0}}, +{(unsigned char*)"gimel", {226, 132, 183, 0}}, +{(unsigned char*)"gjcy", {209, 147, 0}}, +{(unsigned char*)"gl", {226, 137, 183, 0}}, +{(unsigned char*)"glE", {226, 170, 146, 0}}, +{(unsigned char*)"gla", {226, 170, 165, 0}}, +{(unsigned char*)"glj", {226, 170, 164, 0}}, +{(unsigned char*)"gnE", {226, 137, 169, 0}}, +{(unsigned char*)"gnap", {226, 170, 138, 0}}, +{(unsigned char*)"gnapprox", {226, 170, 138, 0}}, +{(unsigned char*)"gne", {226, 170, 136, 0}}, +{(unsigned char*)"gneq", {226, 170, 136, 0}}, +{(unsigned char*)"gneqq", {226, 137, 169, 0}}, +{(unsigned char*)"gnsim", {226, 139, 167, 0}}, +{(unsigned char*)"gopf", {240, 157, 149, 152, 0}}, +{(unsigned char*)"grave", {96, 0}}, +{(unsigned char*)"gscr", {226, 132, 138, 0}}, +{(unsigned char*)"gsim", {226, 137, 179, 0}}, +{(unsigned char*)"gsime", {226, 170, 142, 0}}, +{(unsigned char*)"gsiml", {226, 170, 144, 0}}, +{(unsigned char*)"gt", {62, 0}}, +{(unsigned char*)"gtcc", {226, 170, 167, 0}}, +{(unsigned char*)"gtcir", {226, 169, 186, 0}}, +{(unsigned char*)"gtdot", {226, 139, 151, 0}}, +{(unsigned char*)"gtlPar", {226, 166, 149, 0}}, +{(unsigned char*)"gtquest", {226, 169, 188, 0}}, +{(unsigned char*)"gtrapprox", {226, 170, 134, 0}}, +{(unsigned char*)"gtrarr", {226, 165, 184, 0}}, +{(unsigned char*)"gtrdot", {226, 139, 151, 0}}, +{(unsigned char*)"gtreqless", {226, 139, 155, 0}}, +{(unsigned char*)"gtreqqless", {226, 170, 140, 0}}, +{(unsigned char*)"gtrless", {226, 137, 183, 0}}, +{(unsigned char*)"gtrsim", {226, 137, 179, 0}}, +{(unsigned char*)"gvertneqq", {226, 137, 169, 239, 184, 128, 0}}, +{(unsigned char*)"gvnE", {226, 137, 169, 239, 184, 128, 0}}, +{(unsigned char*)"hArr", {226, 135, 148, 0}}, +{(unsigned char*)"hairsp", {226, 128, 138, 0}}, +{(unsigned char*)"half", {194, 189, 0}}, +{(unsigned char*)"hamilt", {226, 132, 139, 0}}, +{(unsigned char*)"hardcy", {209, 138, 0}}, +{(unsigned char*)"harr", {226, 134, 148, 0}}, +{(unsigned char*)"harrcir", {226, 165, 136, 0}}, +{(unsigned char*)"harrw", {226, 134, 173, 0}}, +{(unsigned char*)"hbar", {226, 132, 143, 0}}, +{(unsigned char*)"hcirc", {196, 165, 0}}, +{(unsigned char*)"hearts", {226, 153, 165, 0}}, +{(unsigned char*)"heartsuit", {226, 153, 165, 0}}, +{(unsigned char*)"hellip", {226, 128, 166, 0}}, +{(unsigned char*)"hercon", {226, 138, 185, 0}}, +{(unsigned char*)"hfr", {240, 157, 148, 165, 0}}, +{(unsigned char*)"hksearow", {226, 164, 165, 0}}, +{(unsigned char*)"hkswarow", {226, 164, 166, 0}}, +{(unsigned char*)"hoarr", {226, 135, 191, 0}}, +{(unsigned char*)"homtht", {226, 136, 187, 0}}, +{(unsigned char*)"hookleftarrow", {226, 134, 169, 0}}, +{(unsigned char*)"hookrightarrow", {226, 134, 170, 0}}, +{(unsigned char*)"hopf", {240, 157, 149, 153, 0}}, +{(unsigned char*)"horbar", {226, 128, 149, 0}}, +{(unsigned char*)"hscr", {240, 157, 146, 189, 0}}, +{(unsigned char*)"hslash", {226, 132, 143, 0}}, +{(unsigned char*)"hstrok", {196, 167, 0}}, +{(unsigned char*)"hybull", {226, 129, 131, 0}}, +{(unsigned char*)"hyphen", {226, 128, 144, 0}}, +{(unsigned char*)"iacute", {195, 173, 0}}, +{(unsigned char*)"ic", {226, 129, 163, 0}}, +{(unsigned char*)"icirc", {195, 174, 0}}, +{(unsigned char*)"icy", {208, 184, 0}}, +{(unsigned char*)"iecy", {208, 181, 0}}, +{(unsigned char*)"iexcl", {194, 161, 0}}, +{(unsigned char*)"iff", {226, 135, 148, 0}}, +{(unsigned char*)"ifr", {240, 157, 148, 166, 0}}, +{(unsigned char*)"igrave", {195, 172, 0}}, +{(unsigned char*)"ii", {226, 133, 136, 0}}, +{(unsigned char*)"iiiint", {226, 168, 140, 0}}, +{(unsigned char*)"iiint", {226, 136, 173, 0}}, +{(unsigned char*)"iinfin", {226, 167, 156, 0}}, +{(unsigned char*)"iiota", {226, 132, 169, 0}}, +{(unsigned char*)"ijlig", {196, 179, 0}}, +{(unsigned char*)"imacr", {196, 171, 0}}, +{(unsigned char*)"image", {226, 132, 145, 0}}, +{(unsigned char*)"imagline", {226, 132, 144, 0}}, +{(unsigned char*)"imagpart", {226, 132, 145, 0}}, +{(unsigned char*)"imath", {196, 177, 0}}, +{(unsigned char*)"imof", {226, 138, 183, 0}}, +{(unsigned char*)"imped", {198, 181, 0}}, +{(unsigned char*)"in", {226, 136, 136, 0}}, +{(unsigned char*)"incare", {226, 132, 133, 0}}, +{(unsigned char*)"infin", {226, 136, 158, 0}}, +{(unsigned char*)"infintie", {226, 167, 157, 0}}, +{(unsigned char*)"inodot", {196, 177, 0}}, +{(unsigned char*)"int", {226, 136, 171, 0}}, +{(unsigned char*)"intcal", {226, 138, 186, 0}}, +{(unsigned char*)"integers", {226, 132, 164, 0}}, +{(unsigned char*)"intercal", {226, 138, 186, 0}}, +{(unsigned char*)"intlarhk", {226, 168, 151, 0}}, +{(unsigned char*)"intprod", {226, 168, 188, 0}}, +{(unsigned char*)"iocy", {209, 145, 0}}, +{(unsigned char*)"iogon", {196, 175, 0}}, +{(unsigned char*)"iopf", {240, 157, 149, 154, 0}}, +{(unsigned char*)"iota", {206, 185, 0}}, +{(unsigned char*)"iprod", {226, 168, 188, 0}}, +{(unsigned char*)"iquest", {194, 191, 0}}, +{(unsigned char*)"iscr", {240, 157, 146, 190, 0}}, +{(unsigned char*)"isin", {226, 136, 136, 0}}, +{(unsigned char*)"isinE", {226, 139, 185, 0}}, +{(unsigned char*)"isindot", {226, 139, 181, 0}}, +{(unsigned char*)"isins", {226, 139, 180, 0}}, +{(unsigned char*)"isinsv", {226, 139, 179, 0}}, +{(unsigned char*)"isinv", {226, 136, 136, 0}}, +{(unsigned char*)"it", {226, 129, 162, 0}}, +{(unsigned char*)"itilde", {196, 169, 0}}, +{(unsigned char*)"iukcy", {209, 150, 0}}, +{(unsigned char*)"iuml", {195, 175, 0}}, +{(unsigned char*)"jcirc", {196, 181, 0}}, +{(unsigned char*)"jcy", {208, 185, 0}}, +{(unsigned char*)"jfr", {240, 157, 148, 167, 0}}, +{(unsigned char*)"jmath", {200, 183, 0}}, +{(unsigned char*)"jopf", {240, 157, 149, 155, 0}}, +{(unsigned char*)"jscr", {240, 157, 146, 191, 0}}, +{(unsigned char*)"jsercy", {209, 152, 0}}, +{(unsigned char*)"jukcy", {209, 148, 0}}, +{(unsigned char*)"kappa", {206, 186, 0}}, +{(unsigned char*)"kappav", {207, 176, 0}}, +{(unsigned char*)"kcedil", {196, 183, 0}}, +{(unsigned char*)"kcy", {208, 186, 0}}, +{(unsigned char*)"kfr", {240, 157, 148, 168, 0}}, +{(unsigned char*)"kgreen", {196, 184, 0}}, +{(unsigned char*)"khcy", {209, 133, 0}}, +{(unsigned char*)"kjcy", {209, 156, 0}}, +{(unsigned char*)"kopf", {240, 157, 149, 156, 0}}, +{(unsigned char*)"kscr", {240, 157, 147, 128, 0}}, +{(unsigned char*)"lAarr", {226, 135, 154, 0}}, +{(unsigned char*)"lArr", {226, 135, 144, 0}}, +{(unsigned char*)"lAtail", {226, 164, 155, 0}}, +{(unsigned char*)"lBarr", {226, 164, 142, 0}}, +{(unsigned char*)"lE", {226, 137, 166, 0}}, +{(unsigned char*)"lEg", {226, 170, 139, 0}}, +{(unsigned char*)"lHar", {226, 165, 162, 0}}, +{(unsigned char*)"lacute", {196, 186, 0}}, +{(unsigned char*)"laemptyv", {226, 166, 180, 0}}, +{(unsigned char*)"lagran", {226, 132, 146, 0}}, +{(unsigned char*)"lambda", {206, 187, 0}}, +{(unsigned char*)"lang", {226, 159, 168, 0}}, +{(unsigned char*)"langd", {226, 166, 145, 0}}, +{(unsigned char*)"langle", {226, 159, 168, 0}}, +{(unsigned char*)"lap", {226, 170, 133, 0}}, +{(unsigned char*)"laquo", {194, 171, 0}}, +{(unsigned char*)"larr", {226, 134, 144, 0}}, +{(unsigned char*)"larrb", {226, 135, 164, 0}}, +{(unsigned char*)"larrbfs", {226, 164, 159, 0}}, +{(unsigned char*)"larrfs", {226, 164, 157, 0}}, +{(unsigned char*)"larrhk", {226, 134, 169, 0}}, +{(unsigned char*)"larrlp", {226, 134, 171, 0}}, +{(unsigned char*)"larrpl", {226, 164, 185, 0}}, +{(unsigned char*)"larrsim", {226, 165, 179, 0}}, +{(unsigned char*)"larrtl", {226, 134, 162, 0}}, +{(unsigned char*)"lat", {226, 170, 171, 0}}, +{(unsigned char*)"latail", {226, 164, 153, 0}}, +{(unsigned char*)"late", {226, 170, 173, 0}}, +{(unsigned char*)"lates", {226, 170, 173, 239, 184, 128, 0}}, +{(unsigned char*)"lbarr", {226, 164, 140, 0}}, +{(unsigned char*)"lbbrk", {226, 157, 178, 0}}, +{(unsigned char*)"lbrace", {123, 0}}, +{(unsigned char*)"lbrack", {91, 0}}, +{(unsigned char*)"lbrke", {226, 166, 139, 0}}, +{(unsigned char*)"lbrksld", {226, 166, 143, 0}}, +{(unsigned char*)"lbrkslu", {226, 166, 141, 0}}, +{(unsigned char*)"lcaron", {196, 190, 0}}, +{(unsigned char*)"lcedil", {196, 188, 0}}, +{(unsigned char*)"lceil", {226, 140, 136, 0}}, +{(unsigned char*)"lcub", {123, 0}}, +{(unsigned char*)"lcy", {208, 187, 0}}, +{(unsigned char*)"ldca", {226, 164, 182, 0}}, +{(unsigned char*)"ldquo", {226, 128, 156, 0}}, +{(unsigned char*)"ldquor", {226, 128, 158, 0}}, +{(unsigned char*)"ldrdhar", {226, 165, 167, 0}}, +{(unsigned char*)"ldrushar", {226, 165, 139, 0}}, +{(unsigned char*)"ldsh", {226, 134, 178, 0}}, +{(unsigned char*)"le", {226, 137, 164, 0}}, +{(unsigned char*)"leftarrow", {226, 134, 144, 0}}, +{(unsigned char*)"leftarrowtail", {226, 134, 162, 0}}, +{(unsigned char*)"leftharpoondown", {226, 134, 189, 0}}, +{(unsigned char*)"leftharpoonup", {226, 134, 188, 0}}, +{(unsigned char*)"leftleftarrows", {226, 135, 135, 0}}, +{(unsigned char*)"leftrightarrow", {226, 134, 148, 0}}, +{(unsigned char*)"leftrightarrows", {226, 135, 134, 0}}, +{(unsigned char*)"leftrightharpoons", {226, 135, 139, 0}}, +{(unsigned char*)"leftrightsquigarrow", {226, 134, 173, 0}}, +{(unsigned char*)"leftthreetimes", {226, 139, 139, 0}}, +{(unsigned char*)"leg", {226, 139, 154, 0}}, +{(unsigned char*)"leq", {226, 137, 164, 0}}, +{(unsigned char*)"leqq", {226, 137, 166, 0}}, +{(unsigned char*)"leqslant", {226, 169, 189, 0}}, +{(unsigned char*)"les", {226, 169, 189, 0}}, +{(unsigned char*)"lescc", {226, 170, 168, 0}}, +{(unsigned char*)"lesdot", {226, 169, 191, 0}}, +{(unsigned char*)"lesdoto", {226, 170, 129, 0}}, +{(unsigned char*)"lesdotor", {226, 170, 131, 0}}, +{(unsigned char*)"lesg", {226, 139, 154, 239, 184, 128, 0}}, +{(unsigned char*)"lesges", {226, 170, 147, 0}}, +{(unsigned char*)"lessapprox", {226, 170, 133, 0}}, +{(unsigned char*)"lessdot", {226, 139, 150, 0}}, +{(unsigned char*)"lesseqgtr", {226, 139, 154, 0}}, +{(unsigned char*)"lesseqqgtr", {226, 170, 139, 0}}, +{(unsigned char*)"lessgtr", {226, 137, 182, 0}}, +{(unsigned char*)"lesssim", {226, 137, 178, 0}}, +{(unsigned char*)"lfisht", {226, 165, 188, 0}}, +{(unsigned char*)"lfloor", {226, 140, 138, 0}}, +{(unsigned char*)"lfr", {240, 157, 148, 169, 0}}, +{(unsigned char*)"lg", {226, 137, 182, 0}}, +{(unsigned char*)"lgE", {226, 170, 145, 0}}, +{(unsigned char*)"lhard", {226, 134, 189, 0}}, +{(unsigned char*)"lharu", {226, 134, 188, 0}}, +{(unsigned char*)"lharul", {226, 165, 170, 0}}, +{(unsigned char*)"lhblk", {226, 150, 132, 0}}, +{(unsigned char*)"ljcy", {209, 153, 0}}, +{(unsigned char*)"ll", {226, 137, 170, 0}}, +{(unsigned char*)"llarr", {226, 135, 135, 0}}, +{(unsigned char*)"llcorner", {226, 140, 158, 0}}, +{(unsigned char*)"llhard", {226, 165, 171, 0}}, +{(unsigned char*)"lltri", {226, 151, 186, 0}}, +{(unsigned char*)"lmidot", {197, 128, 0}}, +{(unsigned char*)"lmoust", {226, 142, 176, 0}}, +{(unsigned char*)"lmoustache", {226, 142, 176, 0}}, +{(unsigned char*)"lnE", {226, 137, 168, 0}}, +{(unsigned char*)"lnap", {226, 170, 137, 0}}, +{(unsigned char*)"lnapprox", {226, 170, 137, 0}}, +{(unsigned char*)"lne", {226, 170, 135, 0}}, +{(unsigned char*)"lneq", {226, 170, 135, 0}}, +{(unsigned char*)"lneqq", {226, 137, 168, 0}}, +{(unsigned char*)"lnsim", {226, 139, 166, 0}}, +{(unsigned char*)"loang", {226, 159, 172, 0}}, +{(unsigned char*)"loarr", {226, 135, 189, 0}}, +{(unsigned char*)"lobrk", {226, 159, 166, 0}}, +{(unsigned char*)"longleftarrow", {226, 159, 181, 0}}, +{(unsigned char*)"longleftrightarrow", {226, 159, 183, 0}}, +{(unsigned char*)"longmapsto", {226, 159, 188, 0}}, +{(unsigned char*)"longrightarrow", {226, 159, 182, 0}}, +{(unsigned char*)"looparrowleft", {226, 134, 171, 0}}, +{(unsigned char*)"looparrowright", {226, 134, 172, 0}}, +{(unsigned char*)"lopar", {226, 166, 133, 0}}, +{(unsigned char*)"lopf", {240, 157, 149, 157, 0}}, +{(unsigned char*)"loplus", {226, 168, 173, 0}}, +{(unsigned char*)"lotimes", {226, 168, 180, 0}}, +{(unsigned char*)"lowast", {226, 136, 151, 0}}, +{(unsigned char*)"lowbar", {95, 0}}, +{(unsigned char*)"loz", {226, 151, 138, 0}}, +{(unsigned char*)"lozenge", {226, 151, 138, 0}}, +{(unsigned char*)"lozf", {226, 167, 171, 0}}, +{(unsigned char*)"lpar", {40, 0}}, +{(unsigned char*)"lparlt", {226, 166, 147, 0}}, +{(unsigned char*)"lrarr", {226, 135, 134, 0}}, +{(unsigned char*)"lrcorner", {226, 140, 159, 0}}, +{(unsigned char*)"lrhar", {226, 135, 139, 0}}, +{(unsigned char*)"lrhard", {226, 165, 173, 0}}, +{(unsigned char*)"lrm", {226, 128, 142, 0}}, +{(unsigned char*)"lrtri", {226, 138, 191, 0}}, +{(unsigned char*)"lsaquo", {226, 128, 185, 0}}, +{(unsigned char*)"lscr", {240, 157, 147, 129, 0}}, +{(unsigned char*)"lsh", {226, 134, 176, 0}}, +{(unsigned char*)"lsim", {226, 137, 178, 0}}, +{(unsigned char*)"lsime", {226, 170, 141, 0}}, +{(unsigned char*)"lsimg", {226, 170, 143, 0}}, +{(unsigned char*)"lsqb", {91, 0}}, +{(unsigned char*)"lsquo", {226, 128, 152, 0}}, +{(unsigned char*)"lsquor", {226, 128, 154, 0}}, +{(unsigned char*)"lstrok", {197, 130, 0}}, +{(unsigned char*)"lt", {60, 0}}, +{(unsigned char*)"ltcc", {226, 170, 166, 0}}, +{(unsigned char*)"ltcir", {226, 169, 185, 0}}, +{(unsigned char*)"ltdot", {226, 139, 150, 0}}, +{(unsigned char*)"lthree", {226, 139, 139, 0}}, +{(unsigned char*)"ltimes", {226, 139, 137, 0}}, +{(unsigned char*)"ltlarr", {226, 165, 182, 0}}, +{(unsigned char*)"ltquest", {226, 169, 187, 0}}, +{(unsigned char*)"ltrPar", {226, 166, 150, 0}}, +{(unsigned char*)"ltri", {226, 151, 131, 0}}, +{(unsigned char*)"ltrie", {226, 138, 180, 0}}, +{(unsigned char*)"ltrif", {226, 151, 130, 0}}, +{(unsigned char*)"lurdshar", {226, 165, 138, 0}}, +{(unsigned char*)"luruhar", {226, 165, 166, 0}}, +{(unsigned char*)"lvertneqq", {226, 137, 168, 239, 184, 128, 0}}, +{(unsigned char*)"lvnE", {226, 137, 168, 239, 184, 128, 0}}, +{(unsigned char*)"mDDot", {226, 136, 186, 0}}, +{(unsigned char*)"macr", {194, 175, 0}}, +{(unsigned char*)"male", {226, 153, 130, 0}}, +{(unsigned char*)"malt", {226, 156, 160, 0}}, +{(unsigned char*)"maltese", {226, 156, 160, 0}}, +{(unsigned char*)"map", {226, 134, 166, 0}}, +{(unsigned char*)"mapsto", {226, 134, 166, 0}}, +{(unsigned char*)"mapstodown", {226, 134, 167, 0}}, +{(unsigned char*)"mapstoleft", {226, 134, 164, 0}}, +{(unsigned char*)"mapstoup", {226, 134, 165, 0}}, +{(unsigned char*)"marker", {226, 150, 174, 0}}, +{(unsigned char*)"mcomma", {226, 168, 169, 0}}, +{(unsigned char*)"mcy", {208, 188, 0}}, +{(unsigned char*)"mdash", {226, 128, 148, 0}}, +{(unsigned char*)"measuredangle", {226, 136, 161, 0}}, +{(unsigned char*)"mfr", {240, 157, 148, 170, 0}}, +{(unsigned char*)"mho", {226, 132, 167, 0}}, +{(unsigned char*)"micro", {194, 181, 0}}, +{(unsigned char*)"mid", {226, 136, 163, 0}}, +{(unsigned char*)"midast", {42, 0}}, +{(unsigned char*)"midcir", {226, 171, 176, 0}}, +{(unsigned char*)"middot", {194, 183, 0}}, +{(unsigned char*)"minus", {226, 136, 146, 0}}, +{(unsigned char*)"minusb", {226, 138, 159, 0}}, +{(unsigned char*)"minusd", {226, 136, 184, 0}}, +{(unsigned char*)"minusdu", {226, 168, 170, 0}}, +{(unsigned char*)"mlcp", {226, 171, 155, 0}}, +{(unsigned char*)"mldr", {226, 128, 166, 0}}, +{(unsigned char*)"mnplus", {226, 136, 147, 0}}, +{(unsigned char*)"models", {226, 138, 167, 0}}, +{(unsigned char*)"mopf", {240, 157, 149, 158, 0}}, +{(unsigned char*)"mp", {226, 136, 147, 0}}, +{(unsigned char*)"mscr", {240, 157, 147, 130, 0}}, +{(unsigned char*)"mstpos", {226, 136, 190, 0}}, +{(unsigned char*)"mu", {206, 188, 0}}, +{(unsigned char*)"multimap", {226, 138, 184, 0}}, +{(unsigned char*)"mumap", {226, 138, 184, 0}}, +{(unsigned char*)"nGg", {226, 139, 153, 204, 184, 0}}, +{(unsigned char*)"nGt", {226, 137, 171, 226, 131, 146, 0}}, +{(unsigned char*)"nGtv", {226, 137, 171, 204, 184, 0}}, +{(unsigned char*)"nLeftarrow", {226, 135, 141, 0}}, +{(unsigned char*)"nLeftrightarrow", {226, 135, 142, 0}}, +{(unsigned char*)"nLl", {226, 139, 152, 204, 184, 0}}, +{(unsigned char*)"nLt", {226, 137, 170, 226, 131, 146, 0}}, +{(unsigned char*)"nLtv", {226, 137, 170, 204, 184, 0}}, +{(unsigned char*)"nRightarrow", {226, 135, 143, 0}}, +{(unsigned char*)"nVDash", {226, 138, 175, 0}}, +{(unsigned char*)"nVdash", {226, 138, 174, 0}}, +{(unsigned char*)"nabla", {226, 136, 135, 0}}, +{(unsigned char*)"nacute", {197, 132, 0}}, +{(unsigned char*)"nang", {226, 136, 160, 226, 131, 146, 0}}, +{(unsigned char*)"nap", {226, 137, 137, 0}}, +{(unsigned char*)"napE", {226, 169, 176, 204, 184, 0}}, +{(unsigned char*)"napid", {226, 137, 139, 204, 184, 0}}, +{(unsigned char*)"napos", {197, 137, 0}}, +{(unsigned char*)"napprox", {226, 137, 137, 0}}, +{(unsigned char*)"natur", {226, 153, 174, 0}}, +{(unsigned char*)"natural", {226, 153, 174, 0}}, +{(unsigned char*)"naturals", {226, 132, 149, 0}}, +{(unsigned char*)"nbsp", {194, 160, 0}}, +{(unsigned char*)"nbump", {226, 137, 142, 204, 184, 0}}, +{(unsigned char*)"nbumpe", {226, 137, 143, 204, 184, 0}}, +{(unsigned char*)"ncap", {226, 169, 131, 0}}, +{(unsigned char*)"ncaron", {197, 136, 0}}, +{(unsigned char*)"ncedil", {197, 134, 0}}, +{(unsigned char*)"ncong", {226, 137, 135, 0}}, +{(unsigned char*)"ncongdot", {226, 169, 173, 204, 184, 0}}, +{(unsigned char*)"ncup", {226, 169, 130, 0}}, +{(unsigned char*)"ncy", {208, 189, 0}}, +{(unsigned char*)"ndash", {226, 128, 147, 0}}, +{(unsigned char*)"ne", {226, 137, 160, 0}}, +{(unsigned char*)"neArr", {226, 135, 151, 0}}, +{(unsigned char*)"nearhk", {226, 164, 164, 0}}, +{(unsigned char*)"nearr", {226, 134, 151, 0}}, +{(unsigned char*)"nearrow", {226, 134, 151, 0}}, +{(unsigned char*)"nedot", {226, 137, 144, 204, 184, 0}}, +{(unsigned char*)"nequiv", {226, 137, 162, 0}}, +{(unsigned char*)"nesear", {226, 164, 168, 0}}, +{(unsigned char*)"nesim", {226, 137, 130, 204, 184, 0}}, +{(unsigned char*)"nexist", {226, 136, 132, 0}}, +{(unsigned char*)"nexists", {226, 136, 132, 0}}, +{(unsigned char*)"nfr", {240, 157, 148, 171, 0}}, +{(unsigned char*)"ngE", {226, 137, 167, 204, 184, 0}}, +{(unsigned char*)"nge", {226, 137, 177, 0}}, +{(unsigned char*)"ngeq", {226, 137, 177, 0}}, +{(unsigned char*)"ngeqq", {226, 137, 167, 204, 184, 0}}, +{(unsigned char*)"ngeqslant", {226, 169, 190, 204, 184, 0}}, +{(unsigned char*)"nges", {226, 169, 190, 204, 184, 0}}, +{(unsigned char*)"ngsim", {226, 137, 181, 0}}, +{(unsigned char*)"ngt", {226, 137, 175, 0}}, +{(unsigned char*)"ngtr", {226, 137, 175, 0}}, +{(unsigned char*)"nhArr", {226, 135, 142, 0}}, +{(unsigned char*)"nharr", {226, 134, 174, 0}}, +{(unsigned char*)"nhpar", {226, 171, 178, 0}}, +{(unsigned char*)"ni", {226, 136, 139, 0}}, +{(unsigned char*)"nis", {226, 139, 188, 0}}, +{(unsigned char*)"nisd", {226, 139, 186, 0}}, +{(unsigned char*)"niv", {226, 136, 139, 0}}, +{(unsigned char*)"njcy", {209, 154, 0}}, +{(unsigned char*)"nlArr", {226, 135, 141, 0}}, +{(unsigned char*)"nlE", {226, 137, 166, 204, 184, 0}}, +{(unsigned char*)"nlarr", {226, 134, 154, 0}}, +{(unsigned char*)"nldr", {226, 128, 165, 0}}, +{(unsigned char*)"nle", {226, 137, 176, 0}}, +{(unsigned char*)"nleftarrow", {226, 134, 154, 0}}, +{(unsigned char*)"nleftrightarrow", {226, 134, 174, 0}}, +{(unsigned char*)"nleq", {226, 137, 176, 0}}, +{(unsigned char*)"nleqq", {226, 137, 166, 204, 184, 0}}, +{(unsigned char*)"nleqslant", {226, 169, 189, 204, 184, 0}}, +{(unsigned char*)"nles", {226, 169, 189, 204, 184, 0}}, +{(unsigned char*)"nless", {226, 137, 174, 0}}, +{(unsigned char*)"nlsim", {226, 137, 180, 0}}, +{(unsigned char*)"nlt", {226, 137, 174, 0}}, +{(unsigned char*)"nltri", {226, 139, 170, 0}}, +{(unsigned char*)"nltrie", {226, 139, 172, 0}}, +{(unsigned char*)"nmid", {226, 136, 164, 0}}, +{(unsigned char*)"nopf", {240, 157, 149, 159, 0}}, +{(unsigned char*)"not", {194, 172, 0}}, +{(unsigned char*)"notin", {226, 136, 137, 0}}, +{(unsigned char*)"notinE", {226, 139, 185, 204, 184, 0}}, +{(unsigned char*)"notindot", {226, 139, 181, 204, 184, 0}}, +{(unsigned char*)"notinva", {226, 136, 137, 0}}, +{(unsigned char*)"notinvb", {226, 139, 183, 0}}, +{(unsigned char*)"notinvc", {226, 139, 182, 0}}, +{(unsigned char*)"notni", {226, 136, 140, 0}}, +{(unsigned char*)"notniva", {226, 136, 140, 0}}, +{(unsigned char*)"notnivb", {226, 139, 190, 0}}, +{(unsigned char*)"notnivc", {226, 139, 189, 0}}, +{(unsigned char*)"npar", {226, 136, 166, 0}}, +{(unsigned char*)"nparallel", {226, 136, 166, 0}}, +{(unsigned char*)"nparsl", {226, 171, 189, 226, 131, 165, 0}}, +{(unsigned char*)"npart", {226, 136, 130, 204, 184, 0}}, +{(unsigned char*)"npolint", {226, 168, 148, 0}}, +{(unsigned char*)"npr", {226, 138, 128, 0}}, +{(unsigned char*)"nprcue", {226, 139, 160, 0}}, +{(unsigned char*)"npre", {226, 170, 175, 204, 184, 0}}, +{(unsigned char*)"nprec", {226, 138, 128, 0}}, +{(unsigned char*)"npreceq", {226, 170, 175, 204, 184, 0}}, +{(unsigned char*)"nrArr", {226, 135, 143, 0}}, +{(unsigned char*)"nrarr", {226, 134, 155, 0}}, +{(unsigned char*)"nrarrc", {226, 164, 179, 204, 184, 0}}, +{(unsigned char*)"nrarrw", {226, 134, 157, 204, 184, 0}}, +{(unsigned char*)"nrightarrow", {226, 134, 155, 0}}, +{(unsigned char*)"nrtri", {226, 139, 171, 0}}, +{(unsigned char*)"nrtrie", {226, 139, 173, 0}}, +{(unsigned char*)"nsc", {226, 138, 129, 0}}, +{(unsigned char*)"nsccue", {226, 139, 161, 0}}, +{(unsigned char*)"nsce", {226, 170, 176, 204, 184, 0}}, +{(unsigned char*)"nscr", {240, 157, 147, 131, 0}}, +{(unsigned char*)"nshortmid", {226, 136, 164, 0}}, +{(unsigned char*)"nshortparallel", {226, 136, 166, 0}}, +{(unsigned char*)"nsim", {226, 137, 129, 0}}, +{(unsigned char*)"nsime", {226, 137, 132, 0}}, +{(unsigned char*)"nsimeq", {226, 137, 132, 0}}, +{(unsigned char*)"nsmid", {226, 136, 164, 0}}, +{(unsigned char*)"nspar", {226, 136, 166, 0}}, +{(unsigned char*)"nsqsube", {226, 139, 162, 0}}, +{(unsigned char*)"nsqsupe", {226, 139, 163, 0}}, +{(unsigned char*)"nsub", {226, 138, 132, 0}}, +{(unsigned char*)"nsubE", {226, 171, 133, 204, 184, 0}}, +{(unsigned char*)"nsube", {226, 138, 136, 0}}, +{(unsigned char*)"nsubset", {226, 138, 130, 226, 131, 146, 0}}, +{(unsigned char*)"nsubseteq", {226, 138, 136, 0}}, +{(unsigned char*)"nsubseteqq", {226, 171, 133, 204, 184, 0}}, +{(unsigned char*)"nsucc", {226, 138, 129, 0}}, +{(unsigned char*)"nsucceq", {226, 170, 176, 204, 184, 0}}, +{(unsigned char*)"nsup", {226, 138, 133, 0}}, +{(unsigned char*)"nsupE", {226, 171, 134, 204, 184, 0}}, +{(unsigned char*)"nsupe", {226, 138, 137, 0}}, +{(unsigned char*)"nsupset", {226, 138, 131, 226, 131, 146, 0}}, +{(unsigned char*)"nsupseteq", {226, 138, 137, 0}}, +{(unsigned char*)"nsupseteqq", {226, 171, 134, 204, 184, 0}}, +{(unsigned char*)"ntgl", {226, 137, 185, 0}}, +{(unsigned char*)"ntilde", {195, 177, 0}}, +{(unsigned char*)"ntlg", {226, 137, 184, 0}}, +{(unsigned char*)"ntriangleleft", {226, 139, 170, 0}}, +{(unsigned char*)"ntrianglelefteq", {226, 139, 172, 0}}, +{(unsigned char*)"ntriangleright", {226, 139, 171, 0}}, +{(unsigned char*)"ntrianglerighteq", {226, 139, 173, 0}}, +{(unsigned char*)"nu", {206, 189, 0}}, +{(unsigned char*)"num", {35, 0}}, +{(unsigned char*)"numero", {226, 132, 150, 0}}, +{(unsigned char*)"numsp", {226, 128, 135, 0}}, +{(unsigned char*)"nvDash", {226, 138, 173, 0}}, +{(unsigned char*)"nvHarr", {226, 164, 132, 0}}, +{(unsigned char*)"nvap", {226, 137, 141, 226, 131, 146, 0}}, +{(unsigned char*)"nvdash", {226, 138, 172, 0}}, +{(unsigned char*)"nvge", {226, 137, 165, 226, 131, 146, 0}}, +{(unsigned char*)"nvgt", {62, 226, 131, 146, 0}}, +{(unsigned char*)"nvinfin", {226, 167, 158, 0}}, +{(unsigned char*)"nvlArr", {226, 164, 130, 0}}, +{(unsigned char*)"nvle", {226, 137, 164, 226, 131, 146, 0}}, +{(unsigned char*)"nvlt", {60, 226, 131, 146, 0}}, +{(unsigned char*)"nvltrie", {226, 138, 180, 226, 131, 146, 0}}, +{(unsigned char*)"nvrArr", {226, 164, 131, 0}}, +{(unsigned char*)"nvrtrie", {226, 138, 181, 226, 131, 146, 0}}, +{(unsigned char*)"nvsim", {226, 136, 188, 226, 131, 146, 0}}, +{(unsigned char*)"nwArr", {226, 135, 150, 0}}, +{(unsigned char*)"nwarhk", {226, 164, 163, 0}}, +{(unsigned char*)"nwarr", {226, 134, 150, 0}}, +{(unsigned char*)"nwarrow", {226, 134, 150, 0}}, +{(unsigned char*)"nwnear", {226, 164, 167, 0}}, +{(unsigned char*)"oS", {226, 147, 136, 0}}, +{(unsigned char*)"oacute", {195, 179, 0}}, +{(unsigned char*)"oast", {226, 138, 155, 0}}, +{(unsigned char*)"ocir", {226, 138, 154, 0}}, +{(unsigned char*)"ocirc", {195, 180, 0}}, +{(unsigned char*)"ocy", {208, 190, 0}}, +{(unsigned char*)"odash", {226, 138, 157, 0}}, +{(unsigned char*)"odblac", {197, 145, 0}}, +{(unsigned char*)"odiv", {226, 168, 184, 0}}, +{(unsigned char*)"odot", {226, 138, 153, 0}}, +{(unsigned char*)"odsold", {226, 166, 188, 0}}, +{(unsigned char*)"oelig", {197, 147, 0}}, +{(unsigned char*)"ofcir", {226, 166, 191, 0}}, +{(unsigned char*)"ofr", {240, 157, 148, 172, 0}}, +{(unsigned char*)"ogon", {203, 155, 0}}, +{(unsigned char*)"ograve", {195, 178, 0}}, +{(unsigned char*)"ogt", {226, 167, 129, 0}}, +{(unsigned char*)"ohbar", {226, 166, 181, 0}}, +{(unsigned char*)"ohm", {206, 169, 0}}, +{(unsigned char*)"oint", {226, 136, 174, 0}}, +{(unsigned char*)"olarr", {226, 134, 186, 0}}, +{(unsigned char*)"olcir", {226, 166, 190, 0}}, +{(unsigned char*)"olcross", {226, 166, 187, 0}}, +{(unsigned char*)"oline", {226, 128, 190, 0}}, +{(unsigned char*)"olt", {226, 167, 128, 0}}, +{(unsigned char*)"omacr", {197, 141, 0}}, +{(unsigned char*)"omega", {207, 137, 0}}, +{(unsigned char*)"omicron", {206, 191, 0}}, +{(unsigned char*)"omid", {226, 166, 182, 0}}, +{(unsigned char*)"ominus", {226, 138, 150, 0}}, +{(unsigned char*)"oopf", {240, 157, 149, 160, 0}}, +{(unsigned char*)"opar", {226, 166, 183, 0}}, +{(unsigned char*)"operp", {226, 166, 185, 0}}, +{(unsigned char*)"oplus", {226, 138, 149, 0}}, +{(unsigned char*)"or", {226, 136, 168, 0}}, +{(unsigned char*)"orarr", {226, 134, 187, 0}}, +{(unsigned char*)"ord", {226, 169, 157, 0}}, +{(unsigned char*)"order", {226, 132, 180, 0}}, +{(unsigned char*)"orderof", {226, 132, 180, 0}}, +{(unsigned char*)"ordf", {194, 170, 0}}, +{(unsigned char*)"ordm", {194, 186, 0}}, +{(unsigned char*)"origof", {226, 138, 182, 0}}, +{(unsigned char*)"oror", {226, 169, 150, 0}}, +{(unsigned char*)"orslope", {226, 169, 151, 0}}, +{(unsigned char*)"orv", {226, 169, 155, 0}}, +{(unsigned char*)"oscr", {226, 132, 180, 0}}, +{(unsigned char*)"oslash", {195, 184, 0}}, +{(unsigned char*)"osol", {226, 138, 152, 0}}, +{(unsigned char*)"otilde", {195, 181, 0}}, +{(unsigned char*)"otimes", {226, 138, 151, 0}}, +{(unsigned char*)"otimesas", {226, 168, 182, 0}}, +{(unsigned char*)"ouml", {195, 182, 0}}, +{(unsigned char*)"ovbar", {226, 140, 189, 0}}, +{(unsigned char*)"par", {226, 136, 165, 0}}, +{(unsigned char*)"para", {194, 182, 0}}, +{(unsigned char*)"parallel", {226, 136, 165, 0}}, +{(unsigned char*)"parsim", {226, 171, 179, 0}}, +{(unsigned char*)"parsl", {226, 171, 189, 0}}, +{(unsigned char*)"part", {226, 136, 130, 0}}, +{(unsigned char*)"pcy", {208, 191, 0}}, +{(unsigned char*)"percnt", {37, 0}}, +{(unsigned char*)"period", {46, 0}}, +{(unsigned char*)"permil", {226, 128, 176, 0}}, +{(unsigned char*)"perp", {226, 138, 165, 0}}, +{(unsigned char*)"pertenk", {226, 128, 177, 0}}, +{(unsigned char*)"pfr", {240, 157, 148, 173, 0}}, +{(unsigned char*)"phi", {207, 134, 0}}, +{(unsigned char*)"phiv", {207, 149, 0}}, +{(unsigned char*)"phmmat", {226, 132, 179, 0}}, +{(unsigned char*)"phone", {226, 152, 142, 0}}, +{(unsigned char*)"pi", {207, 128, 0}}, +{(unsigned char*)"pitchfork", {226, 139, 148, 0}}, +{(unsigned char*)"piv", {207, 150, 0}}, +{(unsigned char*)"planck", {226, 132, 143, 0}}, +{(unsigned char*)"planckh", {226, 132, 142, 0}}, +{(unsigned char*)"plankv", {226, 132, 143, 0}}, +{(unsigned char*)"plus", {43, 0}}, +{(unsigned char*)"plusacir", {226, 168, 163, 0}}, +{(unsigned char*)"plusb", {226, 138, 158, 0}}, +{(unsigned char*)"pluscir", {226, 168, 162, 0}}, +{(unsigned char*)"plusdo", {226, 136, 148, 0}}, +{(unsigned char*)"plusdu", {226, 168, 165, 0}}, +{(unsigned char*)"pluse", {226, 169, 178, 0}}, +{(unsigned char*)"plusmn", {194, 177, 0}}, +{(unsigned char*)"plussim", {226, 168, 166, 0}}, +{(unsigned char*)"plustwo", {226, 168, 167, 0}}, +{(unsigned char*)"pm", {194, 177, 0}}, +{(unsigned char*)"pointint", {226, 168, 149, 0}}, +{(unsigned char*)"popf", {240, 157, 149, 161, 0}}, +{(unsigned char*)"pound", {194, 163, 0}}, +{(unsigned char*)"pr", {226, 137, 186, 0}}, +{(unsigned char*)"prE", {226, 170, 179, 0}}, +{(unsigned char*)"prap", {226, 170, 183, 0}}, +{(unsigned char*)"prcue", {226, 137, 188, 0}}, +{(unsigned char*)"pre", {226, 170, 175, 0}}, +{(unsigned char*)"prec", {226, 137, 186, 0}}, +{(unsigned char*)"precapprox", {226, 170, 183, 0}}, +{(unsigned char*)"preccurlyeq", {226, 137, 188, 0}}, +{(unsigned char*)"preceq", {226, 170, 175, 0}}, +{(unsigned char*)"precnapprox", {226, 170, 185, 0}}, +{(unsigned char*)"precneqq", {226, 170, 181, 0}}, +{(unsigned char*)"precnsim", {226, 139, 168, 0}}, +{(unsigned char*)"precsim", {226, 137, 190, 0}}, +{(unsigned char*)"prime", {226, 128, 178, 0}}, +{(unsigned char*)"primes", {226, 132, 153, 0}}, +{(unsigned char*)"prnE", {226, 170, 181, 0}}, +{(unsigned char*)"prnap", {226, 170, 185, 0}}, +{(unsigned char*)"prnsim", {226, 139, 168, 0}}, +{(unsigned char*)"prod", {226, 136, 143, 0}}, +{(unsigned char*)"profalar", {226, 140, 174, 0}}, +{(unsigned char*)"profline", {226, 140, 146, 0}}, +{(unsigned char*)"profsurf", {226, 140, 147, 0}}, +{(unsigned char*)"prop", {226, 136, 157, 0}}, +{(unsigned char*)"propto", {226, 136, 157, 0}}, +{(unsigned char*)"prsim", {226, 137, 190, 0}}, +{(unsigned char*)"prurel", {226, 138, 176, 0}}, +{(unsigned char*)"pscr", {240, 157, 147, 133, 0}}, +{(unsigned char*)"psi", {207, 136, 0}}, +{(unsigned char*)"puncsp", {226, 128, 136, 0}}, +{(unsigned char*)"qfr", {240, 157, 148, 174, 0}}, +{(unsigned char*)"qint", {226, 168, 140, 0}}, +{(unsigned char*)"qopf", {240, 157, 149, 162, 0}}, +{(unsigned char*)"qprime", {226, 129, 151, 0}}, +{(unsigned char*)"qscr", {240, 157, 147, 134, 0}}, +{(unsigned char*)"quaternions", {226, 132, 141, 0}}, +{(unsigned char*)"quatint", {226, 168, 150, 0}}, +{(unsigned char*)"quest", {63, 0}}, +{(unsigned char*)"questeq", {226, 137, 159, 0}}, +{(unsigned char*)"quot", {34, 0}}, +{(unsigned char*)"rAarr", {226, 135, 155, 0}}, +{(unsigned char*)"rArr", {226, 135, 146, 0}}, +{(unsigned char*)"rAtail", {226, 164, 156, 0}}, +{(unsigned char*)"rBarr", {226, 164, 143, 0}}, +{(unsigned char*)"rHar", {226, 165, 164, 0}}, +{(unsigned char*)"race", {226, 136, 189, 204, 177, 0}}, +{(unsigned char*)"racute", {197, 149, 0}}, +{(unsigned char*)"radic", {226, 136, 154, 0}}, +{(unsigned char*)"raemptyv", {226, 166, 179, 0}}, +{(unsigned char*)"rang", {226, 159, 169, 0}}, +{(unsigned char*)"rangd", {226, 166, 146, 0}}, +{(unsigned char*)"range", {226, 166, 165, 0}}, +{(unsigned char*)"rangle", {226, 159, 169, 0}}, +{(unsigned char*)"raquo", {194, 187, 0}}, +{(unsigned char*)"rarr", {226, 134, 146, 0}}, +{(unsigned char*)"rarrap", {226, 165, 181, 0}}, +{(unsigned char*)"rarrb", {226, 135, 165, 0}}, +{(unsigned char*)"rarrbfs", {226, 164, 160, 0}}, +{(unsigned char*)"rarrc", {226, 164, 179, 0}}, +{(unsigned char*)"rarrfs", {226, 164, 158, 0}}, +{(unsigned char*)"rarrhk", {226, 134, 170, 0}}, +{(unsigned char*)"rarrlp", {226, 134, 172, 0}}, +{(unsigned char*)"rarrpl", {226, 165, 133, 0}}, +{(unsigned char*)"rarrsim", {226, 165, 180, 0}}, +{(unsigned char*)"rarrtl", {226, 134, 163, 0}}, +{(unsigned char*)"rarrw", {226, 134, 157, 0}}, +{(unsigned char*)"ratail", {226, 164, 154, 0}}, +{(unsigned char*)"ratio", {226, 136, 182, 0}}, +{(unsigned char*)"rationals", {226, 132, 154, 0}}, +{(unsigned char*)"rbarr", {226, 164, 141, 0}}, +{(unsigned char*)"rbbrk", {226, 157, 179, 0}}, +{(unsigned char*)"rbrace", {125, 0}}, +{(unsigned char*)"rbrack", {93, 0}}, +{(unsigned char*)"rbrke", {226, 166, 140, 0}}, +{(unsigned char*)"rbrksld", {226, 166, 142, 0}}, +{(unsigned char*)"rbrkslu", {226, 166, 144, 0}}, +{(unsigned char*)"rcaron", {197, 153, 0}}, +{(unsigned char*)"rcedil", {197, 151, 0}}, +{(unsigned char*)"rceil", {226, 140, 137, 0}}, +{(unsigned char*)"rcub", {125, 0}}, +{(unsigned char*)"rcy", {209, 128, 0}}, +{(unsigned char*)"rdca", {226, 164, 183, 0}}, +{(unsigned char*)"rdldhar", {226, 165, 169, 0}}, +{(unsigned char*)"rdquo", {226, 128, 157, 0}}, +{(unsigned char*)"rdquor", {226, 128, 157, 0}}, +{(unsigned char*)"rdsh", {226, 134, 179, 0}}, +{(unsigned char*)"real", {226, 132, 156, 0}}, +{(unsigned char*)"realine", {226, 132, 155, 0}}, +{(unsigned char*)"realpart", {226, 132, 156, 0}}, +{(unsigned char*)"reals", {226, 132, 157, 0}}, +{(unsigned char*)"rect", {226, 150, 173, 0}}, +{(unsigned char*)"reg", {194, 174, 0}}, +{(unsigned char*)"rfisht", {226, 165, 189, 0}}, +{(unsigned char*)"rfloor", {226, 140, 139, 0}}, +{(unsigned char*)"rfr", {240, 157, 148, 175, 0}}, +{(unsigned char*)"rhard", {226, 135, 129, 0}}, +{(unsigned char*)"rharu", {226, 135, 128, 0}}, +{(unsigned char*)"rharul", {226, 165, 172, 0}}, +{(unsigned char*)"rho", {207, 129, 0}}, +{(unsigned char*)"rhov", {207, 177, 0}}, +{(unsigned char*)"rightarrow", {226, 134, 146, 0}}, +{(unsigned char*)"rightarrowtail", {226, 134, 163, 0}}, +{(unsigned char*)"rightharpoondown", {226, 135, 129, 0}}, +{(unsigned char*)"rightharpoonup", {226, 135, 128, 0}}, +{(unsigned char*)"rightleftarrows", {226, 135, 132, 0}}, +{(unsigned char*)"rightleftharpoons", {226, 135, 140, 0}}, +{(unsigned char*)"rightrightarrows", {226, 135, 137, 0}}, +{(unsigned char*)"rightsquigarrow", {226, 134, 157, 0}}, +{(unsigned char*)"rightthreetimes", {226, 139, 140, 0}}, +{(unsigned char*)"ring", {203, 154, 0}}, +{(unsigned char*)"risingdotseq", {226, 137, 147, 0}}, +{(unsigned char*)"rlarr", {226, 135, 132, 0}}, +{(unsigned char*)"rlhar", {226, 135, 140, 0}}, +{(unsigned char*)"rlm", {226, 128, 143, 0}}, +{(unsigned char*)"rmoust", {226, 142, 177, 0}}, +{(unsigned char*)"rmoustache", {226, 142, 177, 0}}, +{(unsigned char*)"rnmid", {226, 171, 174, 0}}, +{(unsigned char*)"roang", {226, 159, 173, 0}}, +{(unsigned char*)"roarr", {226, 135, 190, 0}}, +{(unsigned char*)"robrk", {226, 159, 167, 0}}, +{(unsigned char*)"ropar", {226, 166, 134, 0}}, +{(unsigned char*)"ropf", {240, 157, 149, 163, 0}}, +{(unsigned char*)"roplus", {226, 168, 174, 0}}, +{(unsigned char*)"rotimes", {226, 168, 181, 0}}, +{(unsigned char*)"rpar", {41, 0}}, +{(unsigned char*)"rpargt", {226, 166, 148, 0}}, +{(unsigned char*)"rppolint", {226, 168, 146, 0}}, +{(unsigned char*)"rrarr", {226, 135, 137, 0}}, +{(unsigned char*)"rsaquo", {226, 128, 186, 0}}, +{(unsigned char*)"rscr", {240, 157, 147, 135, 0}}, +{(unsigned char*)"rsh", {226, 134, 177, 0}}, +{(unsigned char*)"rsqb", {93, 0}}, +{(unsigned char*)"rsquo", {226, 128, 153, 0}}, +{(unsigned char*)"rsquor", {226, 128, 153, 0}}, +{(unsigned char*)"rthree", {226, 139, 140, 0}}, +{(unsigned char*)"rtimes", {226, 139, 138, 0}}, +{(unsigned char*)"rtri", {226, 150, 185, 0}}, +{(unsigned char*)"rtrie", {226, 138, 181, 0}}, +{(unsigned char*)"rtrif", {226, 150, 184, 0}}, +{(unsigned char*)"rtriltri", {226, 167, 142, 0}}, +{(unsigned char*)"ruluhar", {226, 165, 168, 0}}, +{(unsigned char*)"rx", {226, 132, 158, 0}}, +{(unsigned char*)"sacute", {197, 155, 0}}, +{(unsigned char*)"sbquo", {226, 128, 154, 0}}, +{(unsigned char*)"sc", {226, 137, 187, 0}}, +{(unsigned char*)"scE", {226, 170, 180, 0}}, +{(unsigned char*)"scap", {226, 170, 184, 0}}, +{(unsigned char*)"scaron", {197, 161, 0}}, +{(unsigned char*)"sccue", {226, 137, 189, 0}}, +{(unsigned char*)"sce", {226, 170, 176, 0}}, +{(unsigned char*)"scedil", {197, 159, 0}}, +{(unsigned char*)"scirc", {197, 157, 0}}, +{(unsigned char*)"scnE", {226, 170, 182, 0}}, +{(unsigned char*)"scnap", {226, 170, 186, 0}}, +{(unsigned char*)"scnsim", {226, 139, 169, 0}}, +{(unsigned char*)"scpolint", {226, 168, 147, 0}}, +{(unsigned char*)"scsim", {226, 137, 191, 0}}, +{(unsigned char*)"scy", {209, 129, 0}}, +{(unsigned char*)"sdot", {226, 139, 133, 0}}, +{(unsigned char*)"sdotb", {226, 138, 161, 0}}, +{(unsigned char*)"sdote", {226, 169, 166, 0}}, +{(unsigned char*)"seArr", {226, 135, 152, 0}}, +{(unsigned char*)"searhk", {226, 164, 165, 0}}, +{(unsigned char*)"searr", {226, 134, 152, 0}}, +{(unsigned char*)"searrow", {226, 134, 152, 0}}, +{(unsigned char*)"sect", {194, 167, 0}}, +{(unsigned char*)"semi", {59, 0}}, +{(unsigned char*)"seswar", {226, 164, 169, 0}}, +{(unsigned char*)"setminus", {226, 136, 150, 0}}, +{(unsigned char*)"setmn", {226, 136, 150, 0}}, +{(unsigned char*)"sext", {226, 156, 182, 0}}, +{(unsigned char*)"sfr", {240, 157, 148, 176, 0}}, +{(unsigned char*)"sfrown", {226, 140, 162, 0}}, +{(unsigned char*)"sharp", {226, 153, 175, 0}}, +{(unsigned char*)"shchcy", {209, 137, 0}}, +{(unsigned char*)"shcy", {209, 136, 0}}, +{(unsigned char*)"shortmid", {226, 136, 163, 0}}, +{(unsigned char*)"shortparallel", {226, 136, 165, 0}}, +{(unsigned char*)"shy", {194, 173, 0}}, +{(unsigned char*)"sigma", {207, 131, 0}}, +{(unsigned char*)"sigmaf", {207, 130, 0}}, +{(unsigned char*)"sigmav", {207, 130, 0}}, +{(unsigned char*)"sim", {226, 136, 188, 0}}, +{(unsigned char*)"simdot", {226, 169, 170, 0}}, +{(unsigned char*)"sime", {226, 137, 131, 0}}, +{(unsigned char*)"simeq", {226, 137, 131, 0}}, +{(unsigned char*)"simg", {226, 170, 158, 0}}, +{(unsigned char*)"simgE", {226, 170, 160, 0}}, +{(unsigned char*)"siml", {226, 170, 157, 0}}, +{(unsigned char*)"simlE", {226, 170, 159, 0}}, +{(unsigned char*)"simne", {226, 137, 134, 0}}, +{(unsigned char*)"simplus", {226, 168, 164, 0}}, +{(unsigned char*)"simrarr", {226, 165, 178, 0}}, +{(unsigned char*)"slarr", {226, 134, 144, 0}}, +{(unsigned char*)"smallsetminus", {226, 136, 150, 0}}, +{(unsigned char*)"smashp", {226, 168, 179, 0}}, +{(unsigned char*)"smeparsl", {226, 167, 164, 0}}, +{(unsigned char*)"smid", {226, 136, 163, 0}}, +{(unsigned char*)"smile", {226, 140, 163, 0}}, +{(unsigned char*)"smt", {226, 170, 170, 0}}, +{(unsigned char*)"smte", {226, 170, 172, 0}}, +{(unsigned char*)"smtes", {226, 170, 172, 239, 184, 128, 0}}, +{(unsigned char*)"softcy", {209, 140, 0}}, +{(unsigned char*)"sol", {47, 0}}, +{(unsigned char*)"solb", {226, 167, 132, 0}}, +{(unsigned char*)"solbar", {226, 140, 191, 0}}, +{(unsigned char*)"sopf", {240, 157, 149, 164, 0}}, +{(unsigned char*)"spades", {226, 153, 160, 0}}, +{(unsigned char*)"spadesuit", {226, 153, 160, 0}}, +{(unsigned char*)"spar", {226, 136, 165, 0}}, +{(unsigned char*)"sqcap", {226, 138, 147, 0}}, +{(unsigned char*)"sqcaps", {226, 138, 147, 239, 184, 128, 0}}, +{(unsigned char*)"sqcup", {226, 138, 148, 0}}, +{(unsigned char*)"sqcups", {226, 138, 148, 239, 184, 128, 0}}, +{(unsigned char*)"sqsub", {226, 138, 143, 0}}, +{(unsigned char*)"sqsube", {226, 138, 145, 0}}, +{(unsigned char*)"sqsubset", {226, 138, 143, 0}}, +{(unsigned char*)"sqsubseteq", {226, 138, 145, 0}}, +{(unsigned char*)"sqsup", {226, 138, 144, 0}}, +{(unsigned char*)"sqsupe", {226, 138, 146, 0}}, +{(unsigned char*)"sqsupset", {226, 138, 144, 0}}, +{(unsigned char*)"sqsupseteq", {226, 138, 146, 0}}, +{(unsigned char*)"squ", {226, 150, 161, 0}}, +{(unsigned char*)"square", {226, 150, 161, 0}}, +{(unsigned char*)"squarf", {226, 150, 170, 0}}, +{(unsigned char*)"squf", {226, 150, 170, 0}}, +{(unsigned char*)"srarr", {226, 134, 146, 0}}, +{(unsigned char*)"sscr", {240, 157, 147, 136, 0}}, +{(unsigned char*)"ssetmn", {226, 136, 150, 0}}, +{(unsigned char*)"ssmile", {226, 140, 163, 0}}, +{(unsigned char*)"sstarf", {226, 139, 134, 0}}, +{(unsigned char*)"star", {226, 152, 134, 0}}, +{(unsigned char*)"starf", {226, 152, 133, 0}}, +{(unsigned char*)"straightepsilon", {207, 181, 0}}, +{(unsigned char*)"straightphi", {207, 149, 0}}, +{(unsigned char*)"strns", {194, 175, 0}}, +{(unsigned char*)"sub", {226, 138, 130, 0}}, +{(unsigned char*)"subE", {226, 171, 133, 0}}, +{(unsigned char*)"subdot", {226, 170, 189, 0}}, +{(unsigned char*)"sube", {226, 138, 134, 0}}, +{(unsigned char*)"subedot", {226, 171, 131, 0}}, +{(unsigned char*)"submult", {226, 171, 129, 0}}, +{(unsigned char*)"subnE", {226, 171, 139, 0}}, +{(unsigned char*)"subne", {226, 138, 138, 0}}, +{(unsigned char*)"subplus", {226, 170, 191, 0}}, +{(unsigned char*)"subrarr", {226, 165, 185, 0}}, +{(unsigned char*)"subset", {226, 138, 130, 0}}, +{(unsigned char*)"subseteq", {226, 138, 134, 0}}, +{(unsigned char*)"subseteqq", {226, 171, 133, 0}}, +{(unsigned char*)"subsetneq", {226, 138, 138, 0}}, +{(unsigned char*)"subsetneqq", {226, 171, 139, 0}}, +{(unsigned char*)"subsim", {226, 171, 135, 0}}, +{(unsigned char*)"subsub", {226, 171, 149, 0}}, +{(unsigned char*)"subsup", {226, 171, 147, 0}}, +{(unsigned char*)"succ", {226, 137, 187, 0}}, +{(unsigned char*)"succapprox", {226, 170, 184, 0}}, +{(unsigned char*)"succcurlyeq", {226, 137, 189, 0}}, +{(unsigned char*)"succeq", {226, 170, 176, 0}}, +{(unsigned char*)"succnapprox", {226, 170, 186, 0}}, +{(unsigned char*)"succneqq", {226, 170, 182, 0}}, +{(unsigned char*)"succnsim", {226, 139, 169, 0}}, +{(unsigned char*)"succsim", {226, 137, 191, 0}}, +{(unsigned char*)"sum", {226, 136, 145, 0}}, +{(unsigned char*)"sung", {226, 153, 170, 0}}, +{(unsigned char*)"sup", {226, 138, 131, 0}}, +{(unsigned char*)"sup1", {194, 185, 0}}, +{(unsigned char*)"sup2", {194, 178, 0}}, +{(unsigned char*)"sup3", {194, 179, 0}}, +{(unsigned char*)"supE", {226, 171, 134, 0}}, +{(unsigned char*)"supdot", {226, 170, 190, 0}}, +{(unsigned char*)"supdsub", {226, 171, 152, 0}}, +{(unsigned char*)"supe", {226, 138, 135, 0}}, +{(unsigned char*)"supedot", {226, 171, 132, 0}}, +{(unsigned char*)"suphsol", {226, 159, 137, 0}}, +{(unsigned char*)"suphsub", {226, 171, 151, 0}}, +{(unsigned char*)"suplarr", {226, 165, 187, 0}}, +{(unsigned char*)"supmult", {226, 171, 130, 0}}, +{(unsigned char*)"supnE", {226, 171, 140, 0}}, +{(unsigned char*)"supne", {226, 138, 139, 0}}, +{(unsigned char*)"supplus", {226, 171, 128, 0}}, +{(unsigned char*)"supset", {226, 138, 131, 0}}, +{(unsigned char*)"supseteq", {226, 138, 135, 0}}, +{(unsigned char*)"supseteqq", {226, 171, 134, 0}}, +{(unsigned char*)"supsetneq", {226, 138, 139, 0}}, +{(unsigned char*)"supsetneqq", {226, 171, 140, 0}}, +{(unsigned char*)"supsim", {226, 171, 136, 0}}, +{(unsigned char*)"supsub", {226, 171, 148, 0}}, +{(unsigned char*)"supsup", {226, 171, 150, 0}}, +{(unsigned char*)"swArr", {226, 135, 153, 0}}, +{(unsigned char*)"swarhk", {226, 164, 166, 0}}, +{(unsigned char*)"swarr", {226, 134, 153, 0}}, +{(unsigned char*)"swarrow", {226, 134, 153, 0}}, +{(unsigned char*)"swnwar", {226, 164, 170, 0}}, +{(unsigned char*)"szlig", {195, 159, 0}}, +{(unsigned char*)"target", {226, 140, 150, 0}}, +{(unsigned char*)"tau", {207, 132, 0}}, +{(unsigned char*)"tbrk", {226, 142, 180, 0}}, +{(unsigned char*)"tcaron", {197, 165, 0}}, +{(unsigned char*)"tcedil", {197, 163, 0}}, +{(unsigned char*)"tcy", {209, 130, 0}}, +{(unsigned char*)"tdot", {226, 131, 155, 0}}, +{(unsigned char*)"telrec", {226, 140, 149, 0}}, +{(unsigned char*)"tfr", {240, 157, 148, 177, 0}}, +{(unsigned char*)"there4", {226, 136, 180, 0}}, +{(unsigned char*)"therefore", {226, 136, 180, 0}}, +{(unsigned char*)"theta", {206, 184, 0}}, +{(unsigned char*)"thetasym", {207, 145, 0}}, +{(unsigned char*)"thetav", {207, 145, 0}}, +{(unsigned char*)"thickapprox", {226, 137, 136, 0}}, +{(unsigned char*)"thicksim", {226, 136, 188, 0}}, +{(unsigned char*)"thinsp", {226, 128, 137, 0}}, +{(unsigned char*)"thkap", {226, 137, 136, 0}}, +{(unsigned char*)"thksim", {226, 136, 188, 0}}, +{(unsigned char*)"thorn", {195, 190, 0}}, +{(unsigned char*)"tilde", {203, 156, 0}}, +{(unsigned char*)"times", {195, 151, 0}}, +{(unsigned char*)"timesb", {226, 138, 160, 0}}, +{(unsigned char*)"timesbar", {226, 168, 177, 0}}, +{(unsigned char*)"timesd", {226, 168, 176, 0}}, +{(unsigned char*)"tint", {226, 136, 173, 0}}, +{(unsigned char*)"toea", {226, 164, 168, 0}}, +{(unsigned char*)"top", {226, 138, 164, 0}}, +{(unsigned char*)"topbot", {226, 140, 182, 0}}, +{(unsigned char*)"topcir", {226, 171, 177, 0}}, +{(unsigned char*)"topf", {240, 157, 149, 165, 0}}, +{(unsigned char*)"topfork", {226, 171, 154, 0}}, +{(unsigned char*)"tosa", {226, 164, 169, 0}}, +{(unsigned char*)"tprime", {226, 128, 180, 0}}, +{(unsigned char*)"trade", {226, 132, 162, 0}}, +{(unsigned char*)"triangle", {226, 150, 181, 0}}, +{(unsigned char*)"triangledown", {226, 150, 191, 0}}, +{(unsigned char*)"triangleleft", {226, 151, 131, 0}}, +{(unsigned char*)"trianglelefteq", {226, 138, 180, 0}}, +{(unsigned char*)"triangleq", {226, 137, 156, 0}}, +{(unsigned char*)"triangleright", {226, 150, 185, 0}}, +{(unsigned char*)"trianglerighteq", {226, 138, 181, 0}}, +{(unsigned char*)"tridot", {226, 151, 172, 0}}, +{(unsigned char*)"trie", {226, 137, 156, 0}}, +{(unsigned char*)"triminus", {226, 168, 186, 0}}, +{(unsigned char*)"triplus", {226, 168, 185, 0}}, +{(unsigned char*)"trisb", {226, 167, 141, 0}}, +{(unsigned char*)"tritime", {226, 168, 187, 0}}, +{(unsigned char*)"trpezium", {226, 143, 162, 0}}, +{(unsigned char*)"tscr", {240, 157, 147, 137, 0}}, +{(unsigned char*)"tscy", {209, 134, 0}}, +{(unsigned char*)"tshcy", {209, 155, 0}}, +{(unsigned char*)"tstrok", {197, 167, 0}}, +{(unsigned char*)"twixt", {226, 137, 172, 0}}, +{(unsigned char*)"twoheadleftarrow", {226, 134, 158, 0}}, +{(unsigned char*)"twoheadrightarrow", {226, 134, 160, 0}}, +{(unsigned char*)"uArr", {226, 135, 145, 0}}, +{(unsigned char*)"uHar", {226, 165, 163, 0}}, +{(unsigned char*)"uacute", {195, 186, 0}}, +{(unsigned char*)"uarr", {226, 134, 145, 0}}, +{(unsigned char*)"ubrcy", {209, 158, 0}}, +{(unsigned char*)"ubreve", {197, 173, 0}}, +{(unsigned char*)"ucirc", {195, 187, 0}}, +{(unsigned char*)"ucy", {209, 131, 0}}, +{(unsigned char*)"udarr", {226, 135, 133, 0}}, +{(unsigned char*)"udblac", {197, 177, 0}}, +{(unsigned char*)"udhar", {226, 165, 174, 0}}, +{(unsigned char*)"ufisht", {226, 165, 190, 0}}, +{(unsigned char*)"ufr", {240, 157, 148, 178, 0}}, +{(unsigned char*)"ugrave", {195, 185, 0}}, +{(unsigned char*)"uharl", {226, 134, 191, 0}}, +{(unsigned char*)"uharr", {226, 134, 190, 0}}, +{(unsigned char*)"uhblk", {226, 150, 128, 0}}, +{(unsigned char*)"ulcorn", {226, 140, 156, 0}}, +{(unsigned char*)"ulcorner", {226, 140, 156, 0}}, +{(unsigned char*)"ulcrop", {226, 140, 143, 0}}, +{(unsigned char*)"ultri", {226, 151, 184, 0}}, +{(unsigned char*)"umacr", {197, 171, 0}}, +{(unsigned char*)"uml", {194, 168, 0}}, +{(unsigned char*)"uogon", {197, 179, 0}}, +{(unsigned char*)"uopf", {240, 157, 149, 166, 0}}, +{(unsigned char*)"uparrow", {226, 134, 145, 0}}, +{(unsigned char*)"updownarrow", {226, 134, 149, 0}}, +{(unsigned char*)"upharpoonleft", {226, 134, 191, 0}}, +{(unsigned char*)"upharpoonright", {226, 134, 190, 0}}, +{(unsigned char*)"uplus", {226, 138, 142, 0}}, +{(unsigned char*)"upsi", {207, 133, 0}}, +{(unsigned char*)"upsih", {207, 146, 0}}, +{(unsigned char*)"upsilon", {207, 133, 0}}, +{(unsigned char*)"upuparrows", {226, 135, 136, 0}}, +{(unsigned char*)"urcorn", {226, 140, 157, 0}}, +{(unsigned char*)"urcorner", {226, 140, 157, 0}}, +{(unsigned char*)"urcrop", {226, 140, 142, 0}}, +{(unsigned char*)"uring", {197, 175, 0}}, +{(unsigned char*)"urtri", {226, 151, 185, 0}}, +{(unsigned char*)"uscr", {240, 157, 147, 138, 0}}, +{(unsigned char*)"utdot", {226, 139, 176, 0}}, +{(unsigned char*)"utilde", {197, 169, 0}}, +{(unsigned char*)"utri", {226, 150, 181, 0}}, +{(unsigned char*)"utrif", {226, 150, 180, 0}}, +{(unsigned char*)"uuarr", {226, 135, 136, 0}}, +{(unsigned char*)"uuml", {195, 188, 0}}, +{(unsigned char*)"uwangle", {226, 166, 167, 0}}, +{(unsigned char*)"vArr", {226, 135, 149, 0}}, +{(unsigned char*)"vBar", {226, 171, 168, 0}}, +{(unsigned char*)"vBarv", {226, 171, 169, 0}}, +{(unsigned char*)"vDash", {226, 138, 168, 0}}, +{(unsigned char*)"vangrt", {226, 166, 156, 0}}, +{(unsigned char*)"varepsilon", {207, 181, 0}}, +{(unsigned char*)"varkappa", {207, 176, 0}}, +{(unsigned char*)"varnothing", {226, 136, 133, 0}}, +{(unsigned char*)"varphi", {207, 149, 0}}, +{(unsigned char*)"varpi", {207, 150, 0}}, +{(unsigned char*)"varpropto", {226, 136, 157, 0}}, +{(unsigned char*)"varr", {226, 134, 149, 0}}, +{(unsigned char*)"varrho", {207, 177, 0}}, +{(unsigned char*)"varsigma", {207, 130, 0}}, +{(unsigned char*)"varsubsetneq", {226, 138, 138, 239, 184, 128, 0}}, +{(unsigned char*)"varsubsetneqq", {226, 171, 139, 239, 184, 128, 0}}, +{(unsigned char*)"varsupsetneq", {226, 138, 139, 239, 184, 128, 0}}, +{(unsigned char*)"varsupsetneqq", {226, 171, 140, 239, 184, 128, 0}}, +{(unsigned char*)"vartheta", {207, 145, 0}}, +{(unsigned char*)"vartriangleleft", {226, 138, 178, 0}}, +{(unsigned char*)"vartriangleright", {226, 138, 179, 0}}, +{(unsigned char*)"vcy", {208, 178, 0}}, +{(unsigned char*)"vdash", {226, 138, 162, 0}}, +{(unsigned char*)"vee", {226, 136, 168, 0}}, +{(unsigned char*)"veebar", {226, 138, 187, 0}}, +{(unsigned char*)"veeeq", {226, 137, 154, 0}}, +{(unsigned char*)"vellip", {226, 139, 174, 0}}, +{(unsigned char*)"verbar", {124, 0}}, +{(unsigned char*)"vert", {124, 0}}, +{(unsigned char*)"vfr", {240, 157, 148, 179, 0}}, +{(unsigned char*)"vltri", {226, 138, 178, 0}}, +{(unsigned char*)"vnsub", {226, 138, 130, 226, 131, 146, 0}}, +{(unsigned char*)"vnsup", {226, 138, 131, 226, 131, 146, 0}}, +{(unsigned char*)"vopf", {240, 157, 149, 167, 0}}, +{(unsigned char*)"vprop", {226, 136, 157, 0}}, +{(unsigned char*)"vrtri", {226, 138, 179, 0}}, +{(unsigned char*)"vscr", {240, 157, 147, 139, 0}}, +{(unsigned char*)"vsubnE", {226, 171, 139, 239, 184, 128, 0}}, +{(unsigned char*)"vsubne", {226, 138, 138, 239, 184, 128, 0}}, +{(unsigned char*)"vsupnE", {226, 171, 140, 239, 184, 128, 0}}, +{(unsigned char*)"vsupne", {226, 138, 139, 239, 184, 128, 0}}, +{(unsigned char*)"vzigzag", {226, 166, 154, 0}}, +{(unsigned char*)"wcirc", {197, 181, 0}}, +{(unsigned char*)"wedbar", {226, 169, 159, 0}}, +{(unsigned char*)"wedge", {226, 136, 167, 0}}, +{(unsigned char*)"wedgeq", {226, 137, 153, 0}}, +{(unsigned char*)"weierp", {226, 132, 152, 0}}, +{(unsigned char*)"wfr", {240, 157, 148, 180, 0}}, +{(unsigned char*)"wopf", {240, 157, 149, 168, 0}}, +{(unsigned char*)"wp", {226, 132, 152, 0}}, +{(unsigned char*)"wr", {226, 137, 128, 0}}, +{(unsigned char*)"wreath", {226, 137, 128, 0}}, +{(unsigned char*)"wscr", {240, 157, 147, 140, 0}}, +{(unsigned char*)"xcap", {226, 139, 130, 0}}, +{(unsigned char*)"xcirc", {226, 151, 175, 0}}, +{(unsigned char*)"xcup", {226, 139, 131, 0}}, +{(unsigned char*)"xdtri", {226, 150, 189, 0}}, +{(unsigned char*)"xfr", {240, 157, 148, 181, 0}}, +{(unsigned char*)"xhArr", {226, 159, 186, 0}}, +{(unsigned char*)"xharr", {226, 159, 183, 0}}, +{(unsigned char*)"xi", {206, 190, 0}}, +{(unsigned char*)"xlArr", {226, 159, 184, 0}}, +{(unsigned char*)"xlarr", {226, 159, 181, 0}}, +{(unsigned char*)"xmap", {226, 159, 188, 0}}, +{(unsigned char*)"xnis", {226, 139, 187, 0}}, +{(unsigned char*)"xodot", {226, 168, 128, 0}}, +{(unsigned char*)"xopf", {240, 157, 149, 169, 0}}, +{(unsigned char*)"xoplus", {226, 168, 129, 0}}, +{(unsigned char*)"xotime", {226, 168, 130, 0}}, +{(unsigned char*)"xrArr", {226, 159, 185, 0}}, +{(unsigned char*)"xrarr", {226, 159, 182, 0}}, +{(unsigned char*)"xscr", {240, 157, 147, 141, 0}}, +{(unsigned char*)"xsqcup", {226, 168, 134, 0}}, +{(unsigned char*)"xuplus", {226, 168, 132, 0}}, +{(unsigned char*)"xutri", {226, 150, 179, 0}}, +{(unsigned char*)"xvee", {226, 139, 129, 0}}, +{(unsigned char*)"xwedge", {226, 139, 128, 0}}, +{(unsigned char*)"yacute", {195, 189, 0}}, +{(unsigned char*)"yacy", {209, 143, 0}}, +{(unsigned char*)"ycirc", {197, 183, 0}}, +{(unsigned char*)"ycy", {209, 139, 0}}, +{(unsigned char*)"yen", {194, 165, 0}}, +{(unsigned char*)"yfr", {240, 157, 148, 182, 0}}, +{(unsigned char*)"yicy", {209, 151, 0}}, +{(unsigned char*)"yopf", {240, 157, 149, 170, 0}}, +{(unsigned char*)"yscr", {240, 157, 147, 142, 0}}, +{(unsigned char*)"yucy", {209, 142, 0}}, +{(unsigned char*)"yuml", {195, 191, 0}}, +{(unsigned char*)"zacute", {197, 186, 0}}, +{(unsigned char*)"zcaron", {197, 190, 0}}, +{(unsigned char*)"zcy", {208, 183, 0}}, +{(unsigned char*)"zdot", {197, 188, 0}}, +{(unsigned char*)"zeetrf", {226, 132, 168, 0}}, +{(unsigned char*)"zeta", {206, 182, 0}}, +{(unsigned char*)"zfr", {240, 157, 148, 183, 0}}, +{(unsigned char*)"zhcy", {208, 182, 0}}, +{(unsigned char*)"zigrarr", {226, 135, 157, 0}}, +{(unsigned char*)"zopf", {240, 157, 149, 171, 0}}, +{(unsigned char*)"zscr", {240, 157, 147, 143, 0}}, +{(unsigned char*)"zwj", {226, 128, 141, 0}}, +{(unsigned char*)"zwnj", {226, 128, 140, 0}}, +}; Index: src/main.mk ================================================================== --- src/main.mk +++ src/main.mk @@ -648,10 +648,11 @@ $(LINENOISE_OBJ.$(USE_LINENOISE)) \ $(OBJDIR)/shell.o \ $(OBJDIR)/th.o \ $(OBJDIR)/th_lang.o \ $(OBJDIR)/th_tcl.o \ + $(OBJDIR)/cmark_amalgamation.o \ $(OBJDIR)/cson_amalgamation.o $(APPNAME): $(OBJDIR)/headers $(OBJDIR)/codecheck1 $(OBJ) $(EXTRAOBJ) $(OBJDIR)/codecheck1 $(TRANS_SRC) @@ -1856,12 +1857,14 @@ $(XTCC) $(MINIZ_OPTIONS) -c $(SRCDIR)/miniz.c -o $@ $(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c $(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $@ +$(OBJDIR)/cmark_amalgamation.o: $(SRCDIR)/cmark_amalgamation.c + $(XTCC) -c $(SRCDIR)/cmark_amalgamation.c -o $@ # # The list of all the targets that do not correspond to real files. This stops # 'make' from getting confused when someone makes an error in a rule. # .PHONY: all install test clean Index: src/markdown_html.c ================================================================== --- src/markdown_html.c +++ src/markdown_html.c @@ -19,10 +19,11 @@ ** XHTML output. */ #include "config.h" #include "markdown_html.h" +#include "cmark_amalgamation.h" #if INTERFACE void markdown_to_html( struct Blob *input_markdown, @@ -405,48 +406,28 @@ void markdown_to_html( struct Blob *input_markdown, /* Markdown content to be rendered */ struct Blob *output_title, /* Put title here. May be NULL */ struct Blob *output_body /* Put document body here. */ ){ - struct mkd_renderer html_renderer = { - /* prolog and epilog */ - html_prolog, - html_epilog, - - /* block level elements */ - html_blockcode, - html_blockquote, - html_raw_block, - html_header, - html_hrule, - html_list, - html_list_item, - html_paragraph, - html_table, - html_table_cell, - html_table_row, - - /* span level elements */ - html_autolink, - html_code_span, - html_double_emphasis, - html_emphasis, - html_image, - html_line_break, - html_link, - html_raw_span, - html_triple_emphasis, - - /* low level elements */ - 0, /* entities are copied verbatim */ - html_normal_text, - - /* misc. parameters */ - 64, /* maximum stack */ - "*_", /* emphasis characters */ - 0 /* opaque data */ - }; - html_renderer.opaque = output_title; - if( output_title ) blob_reset(output_title); blob_reset(output_body); - markdown(output_body, input_markdown, &html_renderer); + char * markdown_string = blob_str(input_markdown); + if( output_title ) { + blob_reset(output_title); + if (strlen(markdown_string) > 0 && markdown_string[0] == '#' ) { + if (strlen(markdown_string + 1) > 0) { + char * title_start = markdown_string + 1; + int i = 0; + while (markdown_string[i]!='\0' && + (markdown_string[i]!='\n' && markdown_string[i]!='\r') ) { + i++; + } + blob_append(output_title, title_start, i); + markdown_string = markdown_string+i; + } + } + } + char *cmark_result = cmark_markdown_to_html(markdown_string, strlen(markdown_string), 0 ); + html_prolog(output_body,0); + blob_append(output_body, cmark_result, strlen(cmark_result)); + html_epilog(output_body,0); + free(cmark_result); } ADDED test/commonmark_tests.json Index: test/commonmark_tests.json ================================================================== --- /dev/null +++ test/commonmark_tests.json @@ -0,0 +1,4970 @@ +[ + { + "markdown": "\tfoo\tbaz\t\tbim\n", + "html": "
foo\tbaz\t\tbim\n
\n", + "example": 1, + "start_line": 348, + "end_line": 353, + "section": "Tabs" + }, + { + "markdown": " \tfoo\tbaz\t\tbim\n", + "html": "
foo\tbaz\t\tbim\n
\n", + "example": 2, + "start_line": 355, + "end_line": 360, + "section": "Tabs" + }, + { + "markdown": " a\ta\n ὐ\ta\n", + "html": "
a\ta\nὐ\ta\n
\n", + "example": 3, + "start_line": 362, + "end_line": 369, + "section": "Tabs" + }, + { + "markdown": " - foo\n\n\tbar\n", + "html": "
    \n
  • \n

    foo

    \n

    bar

    \n
  • \n
\n", + "example": 4, + "start_line": 375, + "end_line": 386, + "section": "Tabs" + }, + { + "markdown": "- foo\n\n\t\tbar\n", + "html": "
    \n
  • \n

    foo

    \n
      bar\n
    \n
  • \n
\n", + "example": 5, + "start_line": 388, + "end_line": 400, + "section": "Tabs" + }, + { + "markdown": ">\t\tfoo\n", + "html": "
\n
  foo\n
\n
\n", + "example": 6, + "start_line": 411, + "end_line": 418, + "section": "Tabs" + }, + { + "markdown": "-\t\tfoo\n", + "html": "
    \n
  • \n
      foo\n
    \n
  • \n
\n", + "example": 7, + "start_line": 420, + "end_line": 429, + "section": "Tabs" + }, + { + "markdown": " foo\n\tbar\n", + "html": "
foo\nbar\n
\n", + "example": 8, + "start_line": 432, + "end_line": 439, + "section": "Tabs" + }, + { + "markdown": " - foo\n - bar\n\t - baz\n", + "html": "
    \n
  • foo\n
      \n
    • bar\n
        \n
      • baz
      • \n
      \n
    • \n
    \n
  • \n
\n", + "example": 9, + "start_line": 441, + "end_line": 457, + "section": "Tabs" + }, + { + "markdown": "#\tFoo\n", + "html": "

Foo

\n", + "example": 10, + "start_line": 459, + "end_line": 463, + "section": "Tabs" + }, + { + "markdown": "*\t*\t*\t\n", + "html": "
\n", + "example": 11, + "start_line": 465, + "end_line": 469, + "section": "Tabs" + }, + { + "markdown": "- `one\n- two`\n", + "html": "
    \n
  • `one
  • \n
  • two`
  • \n
\n", + "example": 12, + "start_line": 492, + "end_line": 500, + "section": "Precedence" + }, + { + "markdown": "***\n---\n___\n", + "html": "
\n
\n
\n", + "example": 13, + "start_line": 531, + "end_line": 539, + "section": "Thematic breaks" + }, + { + "markdown": "+++\n", + "html": "

+++

\n", + "example": 14, + "start_line": 544, + "end_line": 548, + "section": "Thematic breaks" + }, + { + "markdown": "===\n", + "html": "

===

\n", + "example": 15, + "start_line": 551, + "end_line": 555, + "section": "Thematic breaks" + }, + { + "markdown": "--\n**\n__\n", + "html": "

--\n**\n__

\n", + "example": 16, + "start_line": 560, + "end_line": 568, + "section": "Thematic breaks" + }, + { + "markdown": " ***\n ***\n ***\n", + "html": "
\n
\n
\n", + "example": 17, + "start_line": 573, + "end_line": 581, + "section": "Thematic breaks" + }, + { + "markdown": " ***\n", + "html": "
***\n
\n", + "example": 18, + "start_line": 586, + "end_line": 591, + "section": "Thematic breaks" + }, + { + "markdown": "Foo\n ***\n", + "html": "

Foo\n***

\n", + "example": 19, + "start_line": 594, + "end_line": 600, + "section": "Thematic breaks" + }, + { + "markdown": "_____________________________________\n", + "html": "
\n", + "example": 20, + "start_line": 605, + "end_line": 609, + "section": "Thematic breaks" + }, + { + "markdown": " - - -\n", + "html": "
\n", + "example": 21, + "start_line": 614, + "end_line": 618, + "section": "Thematic breaks" + }, + { + "markdown": " ** * ** * ** * **\n", + "html": "
\n", + "example": 22, + "start_line": 621, + "end_line": 625, + "section": "Thematic breaks" + }, + { + "markdown": "- - - -\n", + "html": "
\n", + "example": 23, + "start_line": 628, + "end_line": 632, + "section": "Thematic breaks" + }, + { + "markdown": "- - - - \n", + "html": "
\n", + "example": 24, + "start_line": 637, + "end_line": 641, + "section": "Thematic breaks" + }, + { + "markdown": "_ _ _ _ a\n\na------\n\n---a---\n", + "html": "

_ _ _ _ a

\n

a------

\n

---a---

\n", + "example": 25, + "start_line": 646, + "end_line": 656, + "section": "Thematic breaks" + }, + { + "markdown": " *-*\n", + "html": "

-

\n", + "example": 26, + "start_line": 662, + "end_line": 666, + "section": "Thematic breaks" + }, + { + "markdown": "- foo\n***\n- bar\n", + "html": "
    \n
  • foo
  • \n
\n
\n
    \n
  • bar
  • \n
\n", + "example": 27, + "start_line": 671, + "end_line": 683, + "section": "Thematic breaks" + }, + { + "markdown": "Foo\n***\nbar\n", + "html": "

Foo

\n
\n

bar

\n", + "example": 28, + "start_line": 688, + "end_line": 696, + "section": "Thematic breaks" + }, + { + "markdown": "Foo\n---\nbar\n", + "html": "

Foo

\n

bar

\n", + "example": 29, + "start_line": 705, + "end_line": 712, + "section": "Thematic breaks" + }, + { + "markdown": "* Foo\n* * *\n* Bar\n", + "html": "
    \n
  • Foo
  • \n
\n
\n
    \n
  • Bar
  • \n
\n", + "example": 30, + "start_line": 718, + "end_line": 730, + "section": "Thematic breaks" + }, + { + "markdown": "- Foo\n- * * *\n", + "html": "
    \n
  • Foo
  • \n
  • \n
    \n
  • \n
\n", + "example": 31, + "start_line": 735, + "end_line": 745, + "section": "Thematic breaks" + }, + { + "markdown": "# foo\n## foo\n### foo\n#### foo\n##### foo\n###### foo\n", + "html": "

foo

\n

foo

\n

foo

\n

foo

\n
foo
\n
foo
\n", + "example": 32, + "start_line": 764, + "end_line": 778, + "section": "ATX headings" + }, + { + "markdown": "####### foo\n", + "html": "

####### foo

\n", + "example": 33, + "start_line": 783, + "end_line": 787, + "section": "ATX headings" + }, + { + "markdown": "#5 bolt\n\n#hashtag\n", + "html": "

#5 bolt

\n

#hashtag

\n", + "example": 34, + "start_line": 798, + "end_line": 805, + "section": "ATX headings" + }, + { + "markdown": "\\## foo\n", + "html": "

## foo

\n", + "example": 35, + "start_line": 810, + "end_line": 814, + "section": "ATX headings" + }, + { + "markdown": "# foo *bar* \\*baz\\*\n", + "html": "

foo bar *baz*

\n", + "example": 36, + "start_line": 819, + "end_line": 823, + "section": "ATX headings" + }, + { + "markdown": "# foo \n", + "html": "

foo

\n", + "example": 37, + "start_line": 828, + "end_line": 832, + "section": "ATX headings" + }, + { + "markdown": " ### foo\n ## foo\n # foo\n", + "html": "

foo

\n

foo

\n

foo

\n", + "example": 38, + "start_line": 837, + "end_line": 845, + "section": "ATX headings" + }, + { + "markdown": " # foo\n", + "html": "
# foo\n
\n", + "example": 39, + "start_line": 850, + "end_line": 855, + "section": "ATX headings" + }, + { + "markdown": "foo\n # bar\n", + "html": "

foo\n# bar

\n", + "example": 40, + "start_line": 858, + "end_line": 864, + "section": "ATX headings" + }, + { + "markdown": "## foo ##\n ### bar ###\n", + "html": "

foo

\n

bar

\n", + "example": 41, + "start_line": 869, + "end_line": 875, + "section": "ATX headings" + }, + { + "markdown": "# foo ##################################\n##### foo ##\n", + "html": "

foo

\n
foo
\n", + "example": 42, + "start_line": 880, + "end_line": 886, + "section": "ATX headings" + }, + { + "markdown": "### foo ### \n", + "html": "

foo

\n", + "example": 43, + "start_line": 891, + "end_line": 895, + "section": "ATX headings" + }, + { + "markdown": "### foo ### b\n", + "html": "

foo ### b

\n", + "example": 44, + "start_line": 902, + "end_line": 906, + "section": "ATX headings" + }, + { + "markdown": "# foo#\n", + "html": "

foo#

\n", + "example": 45, + "start_line": 911, + "end_line": 915, + "section": "ATX headings" + }, + { + "markdown": "### foo \\###\n## foo #\\##\n# foo \\#\n", + "html": "

foo ###

\n

foo ###

\n

foo #

\n", + "example": 46, + "start_line": 921, + "end_line": 929, + "section": "ATX headings" + }, + { + "markdown": "****\n## foo\n****\n", + "html": "
\n

foo

\n
\n", + "example": 47, + "start_line": 935, + "end_line": 943, + "section": "ATX headings" + }, + { + "markdown": "Foo bar\n# baz\nBar foo\n", + "html": "

Foo bar

\n

baz

\n

Bar foo

\n", + "example": 48, + "start_line": 946, + "end_line": 954, + "section": "ATX headings" + }, + { + "markdown": "## \n#\n### ###\n", + "html": "

\n

\n

\n", + "example": 49, + "start_line": 959, + "end_line": 967, + "section": "ATX headings" + }, + { + "markdown": "Foo *bar*\n=========\n\nFoo *bar*\n---------\n", + "html": "

Foo bar

\n

Foo bar

\n", + "example": 50, + "start_line": 1002, + "end_line": 1011, + "section": "Setext headings" + }, + { + "markdown": "Foo *bar\nbaz*\n====\n", + "html": "

Foo bar\nbaz

\n", + "example": 51, + "start_line": 1016, + "end_line": 1023, + "section": "Setext headings" + }, + { + "markdown": "Foo\n-------------------------\n\nFoo\n=\n", + "html": "

Foo

\n

Foo

\n", + "example": 52, + "start_line": 1028, + "end_line": 1037, + "section": "Setext headings" + }, + { + "markdown": " Foo\n---\n\n Foo\n-----\n\n Foo\n ===\n", + "html": "

Foo

\n

Foo

\n

Foo

\n", + "example": 53, + "start_line": 1043, + "end_line": 1056, + "section": "Setext headings" + }, + { + "markdown": " Foo\n ---\n\n Foo\n---\n", + "html": "
Foo\n---\n\nFoo\n
\n
\n", + "example": 54, + "start_line": 1061, + "end_line": 1074, + "section": "Setext headings" + }, + { + "markdown": "Foo\n ---- \n", + "html": "

Foo

\n", + "example": 55, + "start_line": 1080, + "end_line": 1085, + "section": "Setext headings" + }, + { + "markdown": "Foo\n ---\n", + "html": "

Foo\n---

\n", + "example": 56, + "start_line": 1090, + "end_line": 1096, + "section": "Setext headings" + }, + { + "markdown": "Foo\n= =\n\nFoo\n--- -\n", + "html": "

Foo\n= =

\n

Foo

\n
\n", + "example": 57, + "start_line": 1101, + "end_line": 1112, + "section": "Setext headings" + }, + { + "markdown": "Foo \n-----\n", + "html": "

Foo

\n", + "example": 58, + "start_line": 1117, + "end_line": 1122, + "section": "Setext headings" + }, + { + "markdown": "Foo\\\n----\n", + "html": "

Foo\\

\n", + "example": 59, + "start_line": 1127, + "end_line": 1132, + "section": "Setext headings" + }, + { + "markdown": "`Foo\n----\n`\n\n\n", + "html": "

`Foo

\n

`

\n

<a title="a lot

\n

of dashes"/>

\n", + "example": 60, + "start_line": 1138, + "end_line": 1151, + "section": "Setext headings" + }, + { + "markdown": "> Foo\n---\n", + "html": "
\n

Foo

\n
\n
\n", + "example": 61, + "start_line": 1157, + "end_line": 1165, + "section": "Setext headings" + }, + { + "markdown": "> foo\nbar\n===\n", + "html": "
\n

foo\nbar\n===

\n
\n", + "example": 62, + "start_line": 1168, + "end_line": 1178, + "section": "Setext headings" + }, + { + "markdown": "- Foo\n---\n", + "html": "
    \n
  • Foo
  • \n
\n
\n", + "example": 63, + "start_line": 1181, + "end_line": 1189, + "section": "Setext headings" + }, + { + "markdown": "Foo\nBar\n---\n", + "html": "

Foo\nBar

\n", + "example": 64, + "start_line": 1196, + "end_line": 1203, + "section": "Setext headings" + }, + { + "markdown": "---\nFoo\n---\nBar\n---\nBaz\n", + "html": "
\n

Foo

\n

Bar

\n

Baz

\n", + "example": 65, + "start_line": 1209, + "end_line": 1221, + "section": "Setext headings" + }, + { + "markdown": "\n====\n", + "html": "

====

\n", + "example": 66, + "start_line": 1226, + "end_line": 1231, + "section": "Setext headings" + }, + { + "markdown": "---\n---\n", + "html": "
\n
\n", + "example": 67, + "start_line": 1238, + "end_line": 1244, + "section": "Setext headings" + }, + { + "markdown": "- foo\n-----\n", + "html": "
    \n
  • foo
  • \n
\n
\n", + "example": 68, + "start_line": 1247, + "end_line": 1255, + "section": "Setext headings" + }, + { + "markdown": " foo\n---\n", + "html": "
foo\n
\n
\n", + "example": 69, + "start_line": 1258, + "end_line": 1265, + "section": "Setext headings" + }, + { + "markdown": "> foo\n-----\n", + "html": "
\n

foo

\n
\n
\n", + "example": 70, + "start_line": 1268, + "end_line": 1276, + "section": "Setext headings" + }, + { + "markdown": "\\> foo\n------\n", + "html": "

> foo

\n", + "example": 71, + "start_line": 1282, + "end_line": 1287, + "section": "Setext headings" + }, + { + "markdown": "Foo\n\nbar\n---\nbaz\n", + "html": "

Foo

\n

bar

\n

baz

\n", + "example": 72, + "start_line": 1313, + "end_line": 1323, + "section": "Setext headings" + }, + { + "markdown": "Foo\nbar\n\n---\n\nbaz\n", + "html": "

Foo\nbar

\n
\n

baz

\n", + "example": 73, + "start_line": 1329, + "end_line": 1341, + "section": "Setext headings" + }, + { + "markdown": "Foo\nbar\n* * *\nbaz\n", + "html": "

Foo\nbar

\n
\n

baz

\n", + "example": 74, + "start_line": 1347, + "end_line": 1357, + "section": "Setext headings" + }, + { + "markdown": "Foo\nbar\n\\---\nbaz\n", + "html": "

Foo\nbar\n---\nbaz

\n", + "example": 75, + "start_line": 1362, + "end_line": 1372, + "section": "Setext headings" + }, + { + "markdown": " a simple\n indented code block\n", + "html": "
a simple\n  indented code block\n
\n", + "example": 76, + "start_line": 1390, + "end_line": 1397, + "section": "Indented code blocks" + }, + { + "markdown": " - foo\n\n bar\n", + "html": "
    \n
  • \n

    foo

    \n

    bar

    \n
  • \n
\n", + "example": 77, + "start_line": 1404, + "end_line": 1415, + "section": "Indented code blocks" + }, + { + "markdown": "1. foo\n\n - bar\n", + "html": "
    \n
  1. \n

    foo

    \n
      \n
    • bar
    • \n
    \n
  2. \n
\n", + "example": 78, + "start_line": 1418, + "end_line": 1431, + "section": "Indented code blocks" + }, + { + "markdown": "
\n *hi*\n\n - one\n", + "html": "
<a/>\n*hi*\n\n- one\n
\n", + "example": 79, + "start_line": 1438, + "end_line": 1449, + "section": "Indented code blocks" + }, + { + "markdown": " chunk1\n\n chunk2\n \n \n \n chunk3\n", + "html": "
chunk1\n\nchunk2\n\n\n\nchunk3\n
\n", + "example": 80, + "start_line": 1454, + "end_line": 1471, + "section": "Indented code blocks" + }, + { + "markdown": " chunk1\n \n chunk2\n", + "html": "
chunk1\n  \n  chunk2\n
\n", + "example": 81, + "start_line": 1477, + "end_line": 1486, + "section": "Indented code blocks" + }, + { + "markdown": "Foo\n bar\n\n", + "html": "

Foo\nbar

\n", + "example": 82, + "start_line": 1492, + "end_line": 1499, + "section": "Indented code blocks" + }, + { + "markdown": " foo\nbar\n", + "html": "
foo\n
\n

bar

\n", + "example": 83, + "start_line": 1506, + "end_line": 1513, + "section": "Indented code blocks" + }, + { + "markdown": "# Heading\n foo\nHeading\n------\n foo\n----\n", + "html": "

Heading

\n
foo\n
\n

Heading

\n
foo\n
\n
\n", + "example": 84, + "start_line": 1519, + "end_line": 1534, + "section": "Indented code blocks" + }, + { + "markdown": " foo\n bar\n", + "html": "
    foo\nbar\n
\n", + "example": 85, + "start_line": 1539, + "end_line": 1546, + "section": "Indented code blocks" + }, + { + "markdown": "\n \n foo\n \n\n", + "html": "
foo\n
\n", + "example": 86, + "start_line": 1552, + "end_line": 1561, + "section": "Indented code blocks" + }, + { + "markdown": " foo \n", + "html": "
foo  \n
\n", + "example": 87, + "start_line": 1566, + "end_line": 1571, + "section": "Indented code blocks" + }, + { + "markdown": "```\n<\n >\n```\n", + "html": "
<\n >\n
\n", + "example": 88, + "start_line": 1621, + "end_line": 1630, + "section": "Fenced code blocks" + }, + { + "markdown": "~~~\n<\n >\n~~~\n", + "html": "
<\n >\n
\n", + "example": 89, + "start_line": 1635, + "end_line": 1644, + "section": "Fenced code blocks" + }, + { + "markdown": "```\naaa\n~~~\n```\n", + "html": "
aaa\n~~~\n
\n", + "example": 90, + "start_line": 1650, + "end_line": 1659, + "section": "Fenced code blocks" + }, + { + "markdown": "~~~\naaa\n```\n~~~\n", + "html": "
aaa\n```\n
\n", + "example": 91, + "start_line": 1662, + "end_line": 1671, + "section": "Fenced code blocks" + }, + { + "markdown": "````\naaa\n```\n``````\n", + "html": "
aaa\n```\n
\n", + "example": 92, + "start_line": 1676, + "end_line": 1685, + "section": "Fenced code blocks" + }, + { + "markdown": "~~~~\naaa\n~~~\n~~~~\n", + "html": "
aaa\n~~~\n
\n", + "example": 93, + "start_line": 1688, + "end_line": 1697, + "section": "Fenced code blocks" + }, + { + "markdown": "```\n", + "html": "
\n", + "example": 94, + "start_line": 1703, + "end_line": 1707, + "section": "Fenced code blocks" + }, + { + "markdown": "`````\n\n```\naaa\n", + "html": "
\n```\naaa\n
\n", + "example": 95, + "start_line": 1710, + "end_line": 1720, + "section": "Fenced code blocks" + }, + { + "markdown": "> ```\n> aaa\n\nbbb\n", + "html": "
\n
aaa\n
\n
\n

bbb

\n", + "example": 96, + "start_line": 1723, + "end_line": 1734, + "section": "Fenced code blocks" + }, + { + "markdown": "```\n\n \n```\n", + "html": "
\n  \n
\n", + "example": 97, + "start_line": 1739, + "end_line": 1748, + "section": "Fenced code blocks" + }, + { + "markdown": "```\n```\n", + "html": "
\n", + "example": 98, + "start_line": 1753, + "end_line": 1758, + "section": "Fenced code blocks" + }, + { + "markdown": " ```\n aaa\naaa\n```\n", + "html": "
aaa\naaa\n
\n", + "example": 99, + "start_line": 1765, + "end_line": 1774, + "section": "Fenced code blocks" + }, + { + "markdown": " ```\naaa\n aaa\naaa\n ```\n", + "html": "
aaa\naaa\naaa\n
\n", + "example": 100, + "start_line": 1777, + "end_line": 1788, + "section": "Fenced code blocks" + }, + { + "markdown": " ```\n aaa\n aaa\n aaa\n ```\n", + "html": "
aaa\n aaa\naaa\n
\n", + "example": 101, + "start_line": 1791, + "end_line": 1802, + "section": "Fenced code blocks" + }, + { + "markdown": " ```\n aaa\n ```\n", + "html": "
```\naaa\n```\n
\n", + "example": 102, + "start_line": 1807, + "end_line": 1816, + "section": "Fenced code blocks" + }, + { + "markdown": "```\naaa\n ```\n", + "html": "
aaa\n
\n", + "example": 103, + "start_line": 1822, + "end_line": 1829, + "section": "Fenced code blocks" + }, + { + "markdown": " ```\naaa\n ```\n", + "html": "
aaa\n
\n", + "example": 104, + "start_line": 1832, + "end_line": 1839, + "section": "Fenced code blocks" + }, + { + "markdown": "```\naaa\n ```\n", + "html": "
aaa\n    ```\n
\n", + "example": 105, + "start_line": 1844, + "end_line": 1852, + "section": "Fenced code blocks" + }, + { + "markdown": "``` ```\naaa\n", + "html": "

\naaa

\n", + "example": 106, + "start_line": 1858, + "end_line": 1864, + "section": "Fenced code blocks" + }, + { + "markdown": "~~~~~~\naaa\n~~~ ~~\n", + "html": "
aaa\n~~~ ~~\n
\n", + "example": 107, + "start_line": 1867, + "end_line": 1875, + "section": "Fenced code blocks" + }, + { + "markdown": "foo\n```\nbar\n```\nbaz\n", + "html": "

foo

\n
bar\n
\n

baz

\n", + "example": 108, + "start_line": 1881, + "end_line": 1892, + "section": "Fenced code blocks" + }, + { + "markdown": "foo\n---\n~~~\nbar\n~~~\n# baz\n", + "html": "

foo

\n
bar\n
\n

baz

\n", + "example": 109, + "start_line": 1898, + "end_line": 1910, + "section": "Fenced code blocks" + }, + { + "markdown": "```ruby\ndef foo(x)\n return 3\nend\n```\n", + "html": "
def foo(x)\n  return 3\nend\n
\n", + "example": 110, + "start_line": 1918, + "end_line": 1929, + "section": "Fenced code blocks" + }, + { + "markdown": "~~~~ ruby startline=3 $%@#$\ndef foo(x)\n return 3\nend\n~~~~~~~\n", + "html": "
def foo(x)\n  return 3\nend\n
\n", + "example": 111, + "start_line": 1932, + "end_line": 1943, + "section": "Fenced code blocks" + }, + { + "markdown": "````;\n````\n", + "html": "
\n", + "example": 112, + "start_line": 1946, + "end_line": 1951, + "section": "Fenced code blocks" + }, + { + "markdown": "``` aa ```\nfoo\n", + "html": "

aa\nfoo

\n", + "example": 113, + "start_line": 1956, + "end_line": 1962, + "section": "Fenced code blocks" + }, + { + "markdown": "```\n``` aaa\n```\n", + "html": "
``` aaa\n
\n", + "example": 114, + "start_line": 1967, + "end_line": 1974, + "section": "Fenced code blocks" + }, + { + "markdown": "\n \n \n \n
\n hi\n
\n\nokay.\n", + "html": "\n \n \n \n
\n hi\n
\n

okay.

\n", + "example": 115, + "start_line": 2042, + "end_line": 2061, + "section": "HTML blocks" + }, + { + "markdown": "
\n*foo*\n", + "example": 117, + "start_line": 2077, + "end_line": 2083, + "section": "HTML blocks" + }, + { + "markdown": "
\n\n*Markdown*\n\n
\n", + "html": "
\n

Markdown

\n
\n", + "example": 118, + "start_line": 2088, + "end_line": 2098, + "section": "HTML blocks" + }, + { + "markdown": "
\n
\n", + "html": "
\n
\n", + "example": 119, + "start_line": 2104, + "end_line": 2112, + "section": "HTML blocks" + }, + { + "markdown": "
\n
\n", + "html": "
\n
\n", + "example": 120, + "start_line": 2115, + "end_line": 2123, + "section": "HTML blocks" + }, + { + "markdown": "
\n*foo*\n\n*bar*\n", + "html": "
\n*foo*\n

bar

\n", + "example": 121, + "start_line": 2127, + "end_line": 2136, + "section": "HTML blocks" + }, + { + "markdown": "
\n", + "html": "\n", + "example": 125, + "start_line": 2176, + "end_line": 2180, + "section": "HTML blocks" + }, + { + "markdown": "
\nfoo\n
\n", + "html": "
\nfoo\n
\n", + "example": 126, + "start_line": 2183, + "end_line": 2191, + "section": "HTML blocks" + }, + { + "markdown": "
\n``` c\nint x = 33;\n```\n", + "html": "
\n``` c\nint x = 33;\n```\n", + "example": 127, + "start_line": 2200, + "end_line": 2210, + "section": "HTML blocks" + }, + { + "markdown": "\n*bar*\n\n", + "html": "\n*bar*\n\n", + "example": 128, + "start_line": 2217, + "end_line": 2225, + "section": "HTML blocks" + }, + { + "markdown": "\n*bar*\n\n", + "html": "\n*bar*\n\n", + "example": 129, + "start_line": 2230, + "end_line": 2238, + "section": "HTML blocks" + }, + { + "markdown": "\n*bar*\n\n", + "html": "\n*bar*\n\n", + "example": 130, + "start_line": 2241, + "end_line": 2249, + "section": "HTML blocks" + }, + { + "markdown": "\n*bar*\n", + "html": "\n*bar*\n", + "example": 131, + "start_line": 2252, + "end_line": 2258, + "section": "HTML blocks" + }, + { + "markdown": "\n*foo*\n\n", + "html": "\n*foo*\n\n", + "example": 132, + "start_line": 2267, + "end_line": 2275, + "section": "HTML blocks" + }, + { + "markdown": "\n\n*foo*\n\n\n", + "html": "\n

foo

\n
\n", + "example": 133, + "start_line": 2282, + "end_line": 2292, + "section": "HTML blocks" + }, + { + "markdown": "*foo*\n", + "html": "

foo

\n", + "example": 134, + "start_line": 2300, + "end_line": 2304, + "section": "HTML blocks" + }, + { + "markdown": "
\nimport Text.HTML.TagSoup\n\nmain :: IO ()\nmain = print $ parseTags tags\n
\nokay\n", + "html": "
\nimport Text.HTML.TagSoup\n\nmain :: IO ()\nmain = print $ parseTags tags\n
\n

okay

\n", + "example": 135, + "start_line": 2316, + "end_line": 2332, + "section": "HTML blocks" + }, + { + "markdown": "\nokay\n", + "html": "\n

okay

\n", + "example": 136, + "start_line": 2337, + "end_line": 2351, + "section": "HTML blocks" + }, + { + "markdown": "\nh1 {color:red;}\n\np {color:blue;}\n\nokay\n", + "html": "\nh1 {color:red;}\n\np {color:blue;}\n\n

okay

\n", + "example": 137, + "start_line": 2356, + "end_line": 2372, + "section": "HTML blocks" + }, + { + "markdown": "\n\nfoo\n", + "html": "\n\nfoo\n", + "example": 138, + "start_line": 2379, + "end_line": 2389, + "section": "HTML blocks" + }, + { + "markdown": ">
\n> foo\n\nbar\n", + "html": "
\n
\nfoo\n
\n

bar

\n", + "example": 139, + "start_line": 2392, + "end_line": 2403, + "section": "HTML blocks" + }, + { + "markdown": "-
\n- foo\n", + "html": "
    \n
  • \n
    \n
  • \n
  • foo
  • \n
\n", + "example": 140, + "start_line": 2406, + "end_line": 2416, + "section": "HTML blocks" + }, + { + "markdown": "\n*foo*\n", + "html": "\n

foo

\n", + "example": 141, + "start_line": 2421, + "end_line": 2427, + "section": "HTML blocks" + }, + { + "markdown": "*bar*\n*baz*\n", + "html": "*bar*\n

baz

\n", + "example": 142, + "start_line": 2430, + "end_line": 2436, + "section": "HTML blocks" + }, + { + "markdown": "1. *bar*\n", + "html": "1. *bar*\n", + "example": 143, + "start_line": 2442, + "end_line": 2450, + "section": "HTML blocks" + }, + { + "markdown": "\nokay\n", + "html": "\n

okay

\n", + "example": 144, + "start_line": 2455, + "end_line": 2467, + "section": "HTML blocks" + }, + { + "markdown": "';\n\n?>\nokay\n", + "html": "';\n\n?>\n

okay

\n", + "example": 145, + "start_line": 2473, + "end_line": 2487, + "section": "HTML blocks" + }, + { + "markdown": "\n", + "html": "\n", + "example": 146, + "start_line": 2492, + "end_line": 2496, + "section": "HTML blocks" + }, + { + "markdown": "\nokay\n", + "html": "\n

okay

\n", + "example": 147, + "start_line": 2501, + "end_line": 2529, + "section": "HTML blocks" + }, + { + "markdown": " \n\n \n", + "html": " \n
<!-- foo -->\n
\n", + "example": 148, + "start_line": 2534, + "end_line": 2542, + "section": "HTML blocks" + }, + { + "markdown": "
\n\n
\n", + "html": "
\n
<div>\n
\n", + "example": 149, + "start_line": 2545, + "end_line": 2553, + "section": "HTML blocks" + }, + { + "markdown": "Foo\n
\nbar\n
\n", + "html": "

Foo

\n
\nbar\n
\n", + "example": 150, + "start_line": 2559, + "end_line": 2569, + "section": "HTML blocks" + }, + { + "markdown": "
\nbar\n
\n*foo*\n", + "html": "
\nbar\n
\n*foo*\n", + "example": 151, + "start_line": 2575, + "end_line": 2585, + "section": "HTML blocks" + }, + { + "markdown": "Foo\n\nbaz\n", + "html": "

Foo\n\nbaz

\n", + "example": 152, + "start_line": 2590, + "end_line": 2598, + "section": "HTML blocks" + }, + { + "markdown": "
\n\n*Emphasized* text.\n\n
\n", + "html": "
\n

Emphasized text.

\n
\n", + "example": 153, + "start_line": 2631, + "end_line": 2641, + "section": "HTML blocks" + }, + { + "markdown": "
\n*Emphasized* text.\n
\n", + "html": "
\n*Emphasized* text.\n
\n", + "example": 154, + "start_line": 2644, + "end_line": 2652, + "section": "HTML blocks" + }, + { + "markdown": "\n\n\n\n\n\n\n\n
\nHi\n
\n", + "html": "\n\n\n\n
\nHi\n
\n", + "example": 155, + "start_line": 2666, + "end_line": 2686, + "section": "HTML blocks" + }, + { + "markdown": "\n\n \n\n \n\n \n\n
\n Hi\n
\n", + "html": "\n \n
<td>\n  Hi\n</td>\n
\n \n
\n", + "example": 156, + "start_line": 2693, + "end_line": 2714, + "section": "HTML blocks" + }, + { + "markdown": "[foo]: /url \"title\"\n\n[foo]\n", + "html": "

foo

\n", + "example": 157, + "start_line": 2741, + "end_line": 2747, + "section": "Link reference definitions" + }, + { + "markdown": " [foo]: \n /url \n 'the title' \n\n[foo]\n", + "html": "

foo

\n", + "example": 158, + "start_line": 2750, + "end_line": 2758, + "section": "Link reference definitions" + }, + { + "markdown": "[Foo*bar\\]]:my_(url) 'title (with parens)'\n\n[Foo*bar\\]]\n", + "html": "

Foo*bar]

\n", + "example": 159, + "start_line": 2761, + "end_line": 2767, + "section": "Link reference definitions" + }, + { + "markdown": "[Foo bar]:\n\n'title'\n\n[Foo bar]\n", + "html": "

Foo bar

\n", + "example": 160, + "start_line": 2770, + "end_line": 2778, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]: /url '\ntitle\nline1\nline2\n'\n\n[foo]\n", + "html": "

foo

\n", + "example": 161, + "start_line": 2783, + "end_line": 2797, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]: /url 'title\n\nwith blank line'\n\n[foo]\n", + "html": "

[foo]: /url 'title

\n

with blank line'

\n

[foo]

\n", + "example": 162, + "start_line": 2802, + "end_line": 2812, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]:\n/url\n\n[foo]\n", + "html": "

foo

\n", + "example": 163, + "start_line": 2817, + "end_line": 2824, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]:\n\n[foo]\n", + "html": "

[foo]:

\n

[foo]

\n", + "example": 164, + "start_line": 2829, + "end_line": 2836, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]: /url\\bar\\*baz \"foo\\\"bar\\baz\"\n\n[foo]\n", + "html": "

foo

\n", + "example": 165, + "start_line": 2842, + "end_line": 2848, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]\n\n[foo]: url\n", + "html": "

foo

\n", + "example": 166, + "start_line": 2853, + "end_line": 2859, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]\n\n[foo]: first\n[foo]: second\n", + "html": "

foo

\n", + "example": 167, + "start_line": 2865, + "end_line": 2872, + "section": "Link reference definitions" + }, + { + "markdown": "[FOO]: /url\n\n[Foo]\n", + "html": "

Foo

\n", + "example": 168, + "start_line": 2878, + "end_line": 2884, + "section": "Link reference definitions" + }, + { + "markdown": "[ΑΓΩ]: /φου\n\n[αγω]\n", + "html": "

αγω

\n", + "example": 169, + "start_line": 2887, + "end_line": 2893, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]: /url\n", + "html": "", + "example": 170, + "start_line": 2899, + "end_line": 2902, + "section": "Link reference definitions" + }, + { + "markdown": "[\nfoo\n]: /url\nbar\n", + "html": "

bar

\n", + "example": 171, + "start_line": 2907, + "end_line": 2914, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]: /url \"title\" ok\n", + "html": "

[foo]: /url "title" ok

\n", + "example": 172, + "start_line": 2920, + "end_line": 2924, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]: /url\n\"title\" ok\n", + "html": "

"title" ok

\n", + "example": 173, + "start_line": 2929, + "end_line": 2934, + "section": "Link reference definitions" + }, + { + "markdown": " [foo]: /url \"title\"\n\n[foo]\n", + "html": "
[foo]: /url "title"\n
\n

[foo]

\n", + "example": 174, + "start_line": 2940, + "end_line": 2948, + "section": "Link reference definitions" + }, + { + "markdown": "```\n[foo]: /url\n```\n\n[foo]\n", + "html": "
[foo]: /url\n
\n

[foo]

\n", + "example": 175, + "start_line": 2954, + "end_line": 2964, + "section": "Link reference definitions" + }, + { + "markdown": "Foo\n[bar]: /baz\n\n[bar]\n", + "html": "

Foo\n[bar]: /baz

\n

[bar]

\n", + "example": 176, + "start_line": 2969, + "end_line": 2978, + "section": "Link reference definitions" + }, + { + "markdown": "# [Foo]\n[foo]: /url\n> bar\n", + "html": "

Foo

\n
\n

bar

\n
\n", + "example": 177, + "start_line": 2984, + "end_line": 2993, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]: /foo-url \"foo\"\n[bar]: /bar-url\n \"bar\"\n[baz]: /baz-url\n\n[foo],\n[bar],\n[baz]\n", + "html": "

foo,\nbar,\nbaz

\n", + "example": 178, + "start_line": 2999, + "end_line": 3012, + "section": "Link reference definitions" + }, + { + "markdown": "[foo]\n\n> [foo]: /url\n", + "html": "

foo

\n
\n
\n", + "example": 179, + "start_line": 3020, + "end_line": 3028, + "section": "Link reference definitions" + }, + { + "markdown": "aaa\n\nbbb\n", + "html": "

aaa

\n

bbb

\n", + "example": 180, + "start_line": 3043, + "end_line": 3050, + "section": "Paragraphs" + }, + { + "markdown": "aaa\nbbb\n\nccc\nddd\n", + "html": "

aaa\nbbb

\n

ccc\nddd

\n", + "example": 181, + "start_line": 3055, + "end_line": 3066, + "section": "Paragraphs" + }, + { + "markdown": "aaa\n\n\nbbb\n", + "html": "

aaa

\n

bbb

\n", + "example": 182, + "start_line": 3071, + "end_line": 3079, + "section": "Paragraphs" + }, + { + "markdown": " aaa\n bbb\n", + "html": "

aaa\nbbb

\n", + "example": 183, + "start_line": 3084, + "end_line": 3090, + "section": "Paragraphs" + }, + { + "markdown": "aaa\n bbb\n ccc\n", + "html": "

aaa\nbbb\nccc

\n", + "example": 184, + "start_line": 3096, + "end_line": 3104, + "section": "Paragraphs" + }, + { + "markdown": " aaa\nbbb\n", + "html": "

aaa\nbbb

\n", + "example": 185, + "start_line": 3110, + "end_line": 3116, + "section": "Paragraphs" + }, + { + "markdown": " aaa\nbbb\n", + "html": "
aaa\n
\n

bbb

\n", + "example": 186, + "start_line": 3119, + "end_line": 3126, + "section": "Paragraphs" + }, + { + "markdown": "aaa \nbbb \n", + "html": "

aaa
\nbbb

\n", + "example": 187, + "start_line": 3133, + "end_line": 3139, + "section": "Paragraphs" + }, + { + "markdown": " \n\naaa\n \n\n# aaa\n\n \n", + "html": "

aaa

\n

aaa

\n", + "example": 188, + "start_line": 3150, + "end_line": 3162, + "section": "Blank lines" + }, + { + "markdown": "> # Foo\n> bar\n> baz\n", + "html": "
\n

Foo

\n

bar\nbaz

\n
\n", + "example": 189, + "start_line": 3216, + "end_line": 3226, + "section": "Block quotes" + }, + { + "markdown": "># Foo\n>bar\n> baz\n", + "html": "
\n

Foo

\n

bar\nbaz

\n
\n", + "example": 190, + "start_line": 3231, + "end_line": 3241, + "section": "Block quotes" + }, + { + "markdown": " > # Foo\n > bar\n > baz\n", + "html": "
\n

Foo

\n

bar\nbaz

\n
\n", + "example": 191, + "start_line": 3246, + "end_line": 3256, + "section": "Block quotes" + }, + { + "markdown": " > # Foo\n > bar\n > baz\n", + "html": "
> # Foo\n> bar\n> baz\n
\n", + "example": 192, + "start_line": 3261, + "end_line": 3270, + "section": "Block quotes" + }, + { + "markdown": "> # Foo\n> bar\nbaz\n", + "html": "
\n

Foo

\n

bar\nbaz

\n
\n", + "example": 193, + "start_line": 3276, + "end_line": 3286, + "section": "Block quotes" + }, + { + "markdown": "> bar\nbaz\n> foo\n", + "html": "
\n

bar\nbaz\nfoo

\n
\n", + "example": 194, + "start_line": 3292, + "end_line": 3302, + "section": "Block quotes" + }, + { + "markdown": "> foo\n---\n", + "html": "
\n

foo

\n
\n
\n", + "example": 195, + "start_line": 3316, + "end_line": 3324, + "section": "Block quotes" + }, + { + "markdown": "> - foo\n- bar\n", + "html": "
\n
    \n
  • foo
  • \n
\n
\n
    \n
  • bar
  • \n
\n", + "example": 196, + "start_line": 3336, + "end_line": 3348, + "section": "Block quotes" + }, + { + "markdown": "> foo\n bar\n", + "html": "
\n
foo\n
\n
\n
bar\n
\n", + "example": 197, + "start_line": 3354, + "end_line": 3364, + "section": "Block quotes" + }, + { + "markdown": "> ```\nfoo\n```\n", + "html": "
\n
\n
\n

foo

\n
\n", + "example": 198, + "start_line": 3367, + "end_line": 3377, + "section": "Block quotes" + }, + { + "markdown": "> foo\n - bar\n", + "html": "
\n

foo\n- bar

\n
\n", + "example": 199, + "start_line": 3383, + "end_line": 3391, + "section": "Block quotes" + }, + { + "markdown": ">\n", + "html": "
\n
\n", + "example": 200, + "start_line": 3407, + "end_line": 3412, + "section": "Block quotes" + }, + { + "markdown": ">\n> \n> \n", + "html": "
\n
\n", + "example": 201, + "start_line": 3415, + "end_line": 3422, + "section": "Block quotes" + }, + { + "markdown": ">\n> foo\n> \n", + "html": "
\n

foo

\n
\n", + "example": 202, + "start_line": 3427, + "end_line": 3435, + "section": "Block quotes" + }, + { + "markdown": "> foo\n\n> bar\n", + "html": "
\n

foo

\n
\n
\n

bar

\n
\n", + "example": 203, + "start_line": 3440, + "end_line": 3451, + "section": "Block quotes" + }, + { + "markdown": "> foo\n> bar\n", + "html": "
\n

foo\nbar

\n
\n", + "example": 204, + "start_line": 3462, + "end_line": 3470, + "section": "Block quotes" + }, + { + "markdown": "> foo\n>\n> bar\n", + "html": "
\n

foo

\n

bar

\n
\n", + "example": 205, + "start_line": 3475, + "end_line": 3484, + "section": "Block quotes" + }, + { + "markdown": "foo\n> bar\n", + "html": "

foo

\n
\n

bar

\n
\n", + "example": 206, + "start_line": 3489, + "end_line": 3497, + "section": "Block quotes" + }, + { + "markdown": "> aaa\n***\n> bbb\n", + "html": "
\n

aaa

\n
\n
\n
\n

bbb

\n
\n", + "example": 207, + "start_line": 3503, + "end_line": 3515, + "section": "Block quotes" + }, + { + "markdown": "> bar\nbaz\n", + "html": "
\n

bar\nbaz

\n
\n", + "example": 208, + "start_line": 3521, + "end_line": 3529, + "section": "Block quotes" + }, + { + "markdown": "> bar\n\nbaz\n", + "html": "
\n

bar

\n
\n

baz

\n", + "example": 209, + "start_line": 3532, + "end_line": 3541, + "section": "Block quotes" + }, + { + "markdown": "> bar\n>\nbaz\n", + "html": "
\n

bar

\n
\n

baz

\n", + "example": 210, + "start_line": 3544, + "end_line": 3553, + "section": "Block quotes" + }, + { + "markdown": "> > > foo\nbar\n", + "html": "
\n
\n
\n

foo\nbar

\n
\n
\n
\n", + "example": 211, + "start_line": 3560, + "end_line": 3572, + "section": "Block quotes" + }, + { + "markdown": ">>> foo\n> bar\n>>baz\n", + "html": "
\n
\n
\n

foo\nbar\nbaz

\n
\n
\n
\n", + "example": 212, + "start_line": 3575, + "end_line": 3589, + "section": "Block quotes" + }, + { + "markdown": "> code\n\n> not code\n", + "html": "
\n
code\n
\n
\n
\n

not code

\n
\n", + "example": 213, + "start_line": 3597, + "end_line": 3609, + "section": "Block quotes" + }, + { + "markdown": "A paragraph\nwith two lines.\n\n indented code\n\n> A block quote.\n", + "html": "

A paragraph\nwith two lines.

\n
indented code\n
\n
\n

A block quote.

\n
\n", + "example": 214, + "start_line": 3648, + "end_line": 3663, + "section": "List items" + }, + { + "markdown": "1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n", + "html": "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
\n", + "example": 215, + "start_line": 3670, + "end_line": 3689, + "section": "List items" + }, + { + "markdown": "- one\n\n two\n", + "html": "
    \n
  • one
  • \n
\n

two

\n", + "example": 216, + "start_line": 3703, + "end_line": 3712, + "section": "List items" + }, + { + "markdown": "- one\n\n two\n", + "html": "
    \n
  • \n

    one

    \n

    two

    \n
  • \n
\n", + "example": 217, + "start_line": 3715, + "end_line": 3726, + "section": "List items" + }, + { + "markdown": " - one\n\n two\n", + "html": "
    \n
  • one
  • \n
\n
 two\n
\n", + "example": 218, + "start_line": 3729, + "end_line": 3739, + "section": "List items" + }, + { + "markdown": " - one\n\n two\n", + "html": "
    \n
  • \n

    one

    \n

    two

    \n
  • \n
\n", + "example": 219, + "start_line": 3742, + "end_line": 3753, + "section": "List items" + }, + { + "markdown": " > > 1. one\n>>\n>> two\n", + "html": "
\n
\n
    \n
  1. \n

    one

    \n

    two

    \n
  2. \n
\n
\n
\n", + "example": 220, + "start_line": 3764, + "end_line": 3779, + "section": "List items" + }, + { + "markdown": ">>- one\n>>\n > > two\n", + "html": "
\n
\n
    \n
  • one
  • \n
\n

two

\n
\n
\n", + "example": 221, + "start_line": 3791, + "end_line": 3804, + "section": "List items" + }, + { + "markdown": "-one\n\n2.two\n", + "html": "

-one

\n

2.two

\n", + "example": 222, + "start_line": 3810, + "end_line": 3817, + "section": "List items" + }, + { + "markdown": "- foo\n\n\n bar\n", + "html": "
    \n
  • \n

    foo

    \n

    bar

    \n
  • \n
\n", + "example": 223, + "start_line": 3823, + "end_line": 3835, + "section": "List items" + }, + { + "markdown": "1. foo\n\n ```\n bar\n ```\n\n baz\n\n > bam\n", + "html": "
    \n
  1. \n

    foo

    \n
    bar\n
    \n

    baz

    \n
    \n

    bam

    \n
    \n
  2. \n
\n", + "example": 224, + "start_line": 3840, + "end_line": 3862, + "section": "List items" + }, + { + "markdown": "- Foo\n\n bar\n\n\n baz\n", + "html": "
    \n
  • \n

    Foo

    \n
    bar\n\n\nbaz\n
    \n
  • \n
\n", + "example": 225, + "start_line": 3868, + "end_line": 3886, + "section": "List items" + }, + { + "markdown": "123456789. ok\n", + "html": "
    \n
  1. ok
  2. \n
\n", + "example": 226, + "start_line": 3890, + "end_line": 3896, + "section": "List items" + }, + { + "markdown": "1234567890. not ok\n", + "html": "

1234567890. not ok

\n", + "example": 227, + "start_line": 3899, + "end_line": 3903, + "section": "List items" + }, + { + "markdown": "0. ok\n", + "html": "
    \n
  1. ok
  2. \n
\n", + "example": 228, + "start_line": 3908, + "end_line": 3914, + "section": "List items" + }, + { + "markdown": "003. ok\n", + "html": "
    \n
  1. ok
  2. \n
\n", + "example": 229, + "start_line": 3917, + "end_line": 3923, + "section": "List items" + }, + { + "markdown": "-1. not ok\n", + "html": "

-1. not ok

\n", + "example": 230, + "start_line": 3928, + "end_line": 3932, + "section": "List items" + }, + { + "markdown": "- foo\n\n bar\n", + "html": "
    \n
  • \n

    foo

    \n
    bar\n
    \n
  • \n
\n", + "example": 231, + "start_line": 3952, + "end_line": 3964, + "section": "List items" + }, + { + "markdown": " 10. foo\n\n bar\n", + "html": "
    \n
  1. \n

    foo

    \n
    bar\n
    \n
  2. \n
\n", + "example": 232, + "start_line": 3969, + "end_line": 3981, + "section": "List items" + }, + { + "markdown": " indented code\n\nparagraph\n\n more code\n", + "html": "
indented code\n
\n

paragraph

\n
more code\n
\n", + "example": 233, + "start_line": 3988, + "end_line": 4000, + "section": "List items" + }, + { + "markdown": "1. indented code\n\n paragraph\n\n more code\n", + "html": "
    \n
  1. \n
    indented code\n
    \n

    paragraph

    \n
    more code\n
    \n
  2. \n
\n", + "example": 234, + "start_line": 4003, + "end_line": 4019, + "section": "List items" + }, + { + "markdown": "1. indented code\n\n paragraph\n\n more code\n", + "html": "
    \n
  1. \n
     indented code\n
    \n

    paragraph

    \n
    more code\n
    \n
  2. \n
\n", + "example": 235, + "start_line": 4025, + "end_line": 4041, + "section": "List items" + }, + { + "markdown": " foo\n\nbar\n", + "html": "

foo

\n

bar

\n", + "example": 236, + "start_line": 4052, + "end_line": 4059, + "section": "List items" + }, + { + "markdown": "- foo\n\n bar\n", + "html": "
    \n
  • foo
  • \n
\n

bar

\n", + "example": 237, + "start_line": 4062, + "end_line": 4071, + "section": "List items" + }, + { + "markdown": "- foo\n\n bar\n", + "html": "
    \n
  • \n

    foo

    \n

    bar

    \n
  • \n
\n", + "example": 238, + "start_line": 4079, + "end_line": 4090, + "section": "List items" + }, + { + "markdown": "-\n foo\n-\n ```\n bar\n ```\n-\n baz\n", + "html": "
    \n
  • foo
  • \n
  • \n
    bar\n
    \n
  • \n
  • \n
    baz\n
    \n
  • \n
\n", + "example": 239, + "start_line": 4107, + "end_line": 4128, + "section": "List items" + }, + { + "markdown": "- \n foo\n", + "html": "
    \n
  • foo
  • \n
\n", + "example": 240, + "start_line": 4133, + "end_line": 4140, + "section": "List items" + }, + { + "markdown": "-\n\n foo\n", + "html": "
    \n
  • \n
\n

foo

\n", + "example": 241, + "start_line": 4147, + "end_line": 4156, + "section": "List items" + }, + { + "markdown": "- foo\n-\n- bar\n", + "html": "
    \n
  • foo
  • \n
  • \n
  • bar
  • \n
\n", + "example": 242, + "start_line": 4161, + "end_line": 4171, + "section": "List items" + }, + { + "markdown": "- foo\n- \n- bar\n", + "html": "
    \n
  • foo
  • \n
  • \n
  • bar
  • \n
\n", + "example": 243, + "start_line": 4176, + "end_line": 4186, + "section": "List items" + }, + { + "markdown": "1. foo\n2.\n3. bar\n", + "html": "
    \n
  1. foo
  2. \n
  3. \n
  4. bar
  5. \n
\n", + "example": 244, + "start_line": 4191, + "end_line": 4201, + "section": "List items" + }, + { + "markdown": "*\n", + "html": "
    \n
  • \n
\n", + "example": 245, + "start_line": 4206, + "end_line": 4212, + "section": "List items" + }, + { + "markdown": "foo\n*\n\nfoo\n1.\n", + "html": "

foo\n*

\n

foo\n1.

\n", + "example": 246, + "start_line": 4216, + "end_line": 4227, + "section": "List items" + }, + { + "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n", + "html": "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
\n", + "example": 247, + "start_line": 4238, + "end_line": 4257, + "section": "List items" + }, + { + "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n", + "html": "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
\n", + "example": 248, + "start_line": 4262, + "end_line": 4281, + "section": "List items" + }, + { + "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n", + "html": "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
\n", + "example": 249, + "start_line": 4286, + "end_line": 4305, + "section": "List items" + }, + { + "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n", + "html": "
1.  A paragraph\n    with two lines.\n\n        indented code\n\n    > A block quote.\n
\n", + "example": 250, + "start_line": 4310, + "end_line": 4325, + "section": "List items" + }, + { + "markdown": " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote.\n", + "html": "
    \n
  1. \n

    A paragraph\nwith two lines.

    \n
    indented code\n
    \n
    \n

    A block quote.

    \n
    \n
  2. \n
\n", + "example": 251, + "start_line": 4340, + "end_line": 4359, + "section": "List items" + }, + { + "markdown": " 1. A paragraph\n with two lines.\n", + "html": "
    \n
  1. A paragraph\nwith two lines.
  2. \n
\n", + "example": 252, + "start_line": 4364, + "end_line": 4372, + "section": "List items" + }, + { + "markdown": "> 1. > Blockquote\ncontinued here.\n", + "html": "
\n
    \n
  1. \n
    \n

    Blockquote\ncontinued here.

    \n
    \n
  2. \n
\n
\n", + "example": 253, + "start_line": 4377, + "end_line": 4391, + "section": "List items" + }, + { + "markdown": "> 1. > Blockquote\n> continued here.\n", + "html": "
\n
    \n
  1. \n
    \n

    Blockquote\ncontinued here.

    \n
    \n
  2. \n
\n
\n", + "example": 254, + "start_line": 4394, + "end_line": 4408, + "section": "List items" + }, + { + "markdown": "- foo\n - bar\n - baz\n - boo\n", + "html": "
    \n
  • foo\n
      \n
    • bar\n
        \n
      • baz\n
          \n
        • boo
        • \n
        \n
      • \n
      \n
    • \n
    \n
  • \n
\n", + "example": 255, + "start_line": 4421, + "end_line": 4442, + "section": "List items" + }, + { + "markdown": "- foo\n - bar\n - baz\n - boo\n", + "html": "
    \n
  • foo
  • \n
  • bar
  • \n
  • baz
  • \n
  • boo
  • \n
\n", + "example": 256, + "start_line": 4447, + "end_line": 4459, + "section": "List items" + }, + { + "markdown": "10) foo\n - bar\n", + "html": "
    \n
  1. foo\n
      \n
    • bar
    • \n
    \n
  2. \n
\n", + "example": 257, + "start_line": 4464, + "end_line": 4475, + "section": "List items" + }, + { + "markdown": "10) foo\n - bar\n", + "html": "
    \n
  1. foo
  2. \n
\n
    \n
  • bar
  • \n
\n", + "example": 258, + "start_line": 4480, + "end_line": 4490, + "section": "List items" + }, + { + "markdown": "- - foo\n", + "html": "
    \n
  • \n
      \n
    • foo
    • \n
    \n
  • \n
\n", + "example": 259, + "start_line": 4495, + "end_line": 4505, + "section": "List items" + }, + { + "markdown": "1. - 2. foo\n", + "html": "
    \n
  1. \n
      \n
    • \n
        \n
      1. foo
      2. \n
      \n
    • \n
    \n
  2. \n
\n", + "example": 260, + "start_line": 4508, + "end_line": 4522, + "section": "List items" + }, + { + "markdown": "- # Foo\n- Bar\n ---\n baz\n", + "html": "
    \n
  • \n

    Foo

    \n
  • \n
  • \n

    Bar

    \nbaz
  • \n
\n", + "example": 261, + "start_line": 4527, + "end_line": 4541, + "section": "List items" + }, + { + "markdown": "- foo\n- bar\n+ baz\n", + "html": "
    \n
  • foo
  • \n
  • bar
  • \n
\n
    \n
  • baz
  • \n
\n", + "example": 262, + "start_line": 4763, + "end_line": 4775, + "section": "Lists" + }, + { + "markdown": "1. foo\n2. bar\n3) baz\n", + "html": "
    \n
  1. foo
  2. \n
  3. bar
  4. \n
\n
    \n
  1. baz
  2. \n
\n", + "example": 263, + "start_line": 4778, + "end_line": 4790, + "section": "Lists" + }, + { + "markdown": "Foo\n- bar\n- baz\n", + "html": "

Foo

\n
    \n
  • bar
  • \n
  • baz
  • \n
\n", + "example": 264, + "start_line": 4797, + "end_line": 4807, + "section": "Lists" + }, + { + "markdown": "The number of windows in my house is\n14. The number of doors is 6.\n", + "html": "

The number of windows in my house is\n14. The number of doors is 6.

\n", + "example": 265, + "start_line": 4874, + "end_line": 4880, + "section": "Lists" + }, + { + "markdown": "The number of windows in my house is\n1. The number of doors is 6.\n", + "html": "

The number of windows in my house is

\n
    \n
  1. The number of doors is 6.
  2. \n
\n", + "example": 266, + "start_line": 4884, + "end_line": 4892, + "section": "Lists" + }, + { + "markdown": "- foo\n\n- bar\n\n\n- baz\n", + "html": "
    \n
  • \n

    foo

    \n
  • \n
  • \n

    bar

    \n
  • \n
  • \n

    baz

    \n
  • \n
\n", + "example": 267, + "start_line": 4898, + "end_line": 4917, + "section": "Lists" + }, + { + "markdown": "- foo\n - bar\n - baz\n\n\n bim\n", + "html": "
    \n
  • foo\n
      \n
    • bar\n
        \n
      • \n

        baz

        \n

        bim

        \n
      • \n
      \n
    • \n
    \n
  • \n
\n", + "example": 268, + "start_line": 4919, + "end_line": 4941, + "section": "Lists" + }, + { + "markdown": "- foo\n- bar\n\n\n\n- baz\n- bim\n", + "html": "
    \n
  • foo
  • \n
  • bar
  • \n
\n\n
    \n
  • baz
  • \n
  • bim
  • \n
\n", + "example": 269, + "start_line": 4949, + "end_line": 4967, + "section": "Lists" + }, + { + "markdown": "- foo\n\n notcode\n\n- foo\n\n\n\n code\n", + "html": "
    \n
  • \n

    foo

    \n

    notcode

    \n
  • \n
  • \n

    foo

    \n
  • \n
\n\n
code\n
\n", + "example": 270, + "start_line": 4970, + "end_line": 4993, + "section": "Lists" + }, + { + "markdown": "- a\n - b\n - c\n - d\n - e\n - f\n - g\n - h\n- i\n", + "html": "
    \n
  • a
  • \n
  • b
  • \n
  • c
  • \n
  • d
  • \n
  • e
  • \n
  • f
  • \n
  • g
  • \n
  • h
  • \n
  • i
  • \n
\n", + "example": 271, + "start_line": 5001, + "end_line": 5023, + "section": "Lists" + }, + { + "markdown": "1. a\n\n 2. b\n\n 3. c\n", + "html": "
    \n
  1. \n

    a

    \n
  2. \n
  3. \n

    b

    \n
  4. \n
  5. \n

    c

    \n
  6. \n
\n", + "example": 272, + "start_line": 5026, + "end_line": 5044, + "section": "Lists" + }, + { + "markdown": "- a\n- b\n\n- c\n", + "html": "
    \n
  • \n

    a

    \n
  • \n
  • \n

    b

    \n
  • \n
  • \n

    c

    \n
  • \n
\n", + "example": 273, + "start_line": 5050, + "end_line": 5067, + "section": "Lists" + }, + { + "markdown": "* a\n*\n\n* c\n", + "html": "
    \n
  • \n

    a

    \n
  • \n
  • \n
  • \n

    c

    \n
  • \n
\n", + "example": 274, + "start_line": 5072, + "end_line": 5087, + "section": "Lists" + }, + { + "markdown": "- a\n- b\n\n c\n- d\n", + "html": "
    \n
  • \n

    a

    \n
  • \n
  • \n

    b

    \n

    c

    \n
  • \n
  • \n

    d

    \n
  • \n
\n", + "example": 275, + "start_line": 5094, + "end_line": 5113, + "section": "Lists" + }, + { + "markdown": "- a\n- b\n\n [ref]: /url\n- d\n", + "html": "
    \n
  • \n

    a

    \n
  • \n
  • \n

    b

    \n
  • \n
  • \n

    d

    \n
  • \n
\n", + "example": 276, + "start_line": 5116, + "end_line": 5134, + "section": "Lists" + }, + { + "markdown": "- a\n- ```\n b\n\n\n ```\n- c\n", + "html": "
    \n
  • a
  • \n
  • \n
    b\n\n\n
    \n
  • \n
  • c
  • \n
\n", + "example": 277, + "start_line": 5139, + "end_line": 5158, + "section": "Lists" + }, + { + "markdown": "- a\n - b\n\n c\n- d\n", + "html": "
    \n
  • a\n
      \n
    • \n

      b

      \n

      c

      \n
    • \n
    \n
  • \n
  • d
  • \n
\n", + "example": 278, + "start_line": 5165, + "end_line": 5183, + "section": "Lists" + }, + { + "markdown": "* a\n > b\n >\n* c\n", + "html": "
    \n
  • a\n
    \n

    b

    \n
    \n
  • \n
  • c
  • \n
\n", + "example": 279, + "start_line": 5189, + "end_line": 5203, + "section": "Lists" + }, + { + "markdown": "- a\n > b\n ```\n c\n ```\n- d\n", + "html": "
    \n
  • a\n
    \n

    b

    \n
    \n
    c\n
    \n
  • \n
  • d
  • \n
\n", + "example": 280, + "start_line": 5209, + "end_line": 5227, + "section": "Lists" + }, + { + "markdown": "- a\n", + "html": "
    \n
  • a
  • \n
\n", + "example": 281, + "start_line": 5232, + "end_line": 5238, + "section": "Lists" + }, + { + "markdown": "- a\n - b\n", + "html": "
    \n
  • a\n
      \n
    • b
    • \n
    \n
  • \n
\n", + "example": 282, + "start_line": 5241, + "end_line": 5252, + "section": "Lists" + }, + { + "markdown": "1. ```\n foo\n ```\n\n bar\n", + "html": "
    \n
  1. \n
    foo\n
    \n

    bar

    \n
  2. \n
\n", + "example": 283, + "start_line": 5258, + "end_line": 5272, + "section": "Lists" + }, + { + "markdown": "* foo\n * bar\n\n baz\n", + "html": "
    \n
  • \n

    foo

    \n
      \n
    • bar
    • \n
    \n

    baz

    \n
  • \n
\n", + "example": 284, + "start_line": 5277, + "end_line": 5292, + "section": "Lists" + }, + { + "markdown": "- a\n - b\n - c\n\n- d\n - e\n - f\n", + "html": "
    \n
  • \n

    a

    \n
      \n
    • b
    • \n
    • c
    • \n
    \n
  • \n
  • \n

    d

    \n
      \n
    • e
    • \n
    • f
    • \n
    \n
  • \n
\n", + "example": 285, + "start_line": 5295, + "end_line": 5320, + "section": "Lists" + }, + { + "markdown": "`hi`lo`\n", + "html": "

hilo`

\n", + "example": 286, + "start_line": 5329, + "end_line": 5333, + "section": "Inlines" + }, + { + "markdown": "\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\\\\\]\\^\\_\\`\\{\\|\\}\\~\n", + "html": "

!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~

\n", + "example": 287, + "start_line": 5343, + "end_line": 5347, + "section": "Backslash escapes" + }, + { + "markdown": "\\\t\\A\\a\\ \\3\\φ\\«\n", + "html": "

\\\t\\A\\a\\ \\3\\φ\\«

\n", + "example": 288, + "start_line": 5353, + "end_line": 5357, + "section": "Backslash escapes" + }, + { + "markdown": "\\*not emphasized*\n\\
not a tag\n\\[not a link](/foo)\n\\`not code`\n1\\. not a list\n\\* not a list\n\\# not a heading\n\\[foo]: /url \"not a reference\"\n", + "html": "

*not emphasized*\n<br/> not a tag\n[not a link](/foo)\n`not code`\n1. not a list\n* not a list\n# not a heading\n[foo]: /url "not a reference"

\n", + "example": 289, + "start_line": 5363, + "end_line": 5381, + "section": "Backslash escapes" + }, + { + "markdown": "\\\\*emphasis*\n", + "html": "

\\emphasis

\n", + "example": 290, + "start_line": 5386, + "end_line": 5390, + "section": "Backslash escapes" + }, + { + "markdown": "foo\\\nbar\n", + "html": "

foo
\nbar

\n", + "example": 291, + "start_line": 5395, + "end_line": 5401, + "section": "Backslash escapes" + }, + { + "markdown": "`` \\[\\` ``\n", + "html": "

\\[\\`

\n", + "example": 292, + "start_line": 5407, + "end_line": 5411, + "section": "Backslash escapes" + }, + { + "markdown": " \\[\\]\n", + "html": "
\\[\\]\n
\n", + "example": 293, + "start_line": 5414, + "end_line": 5419, + "section": "Backslash escapes" + }, + { + "markdown": "~~~\n\\[\\]\n~~~\n", + "html": "
\\[\\]\n
\n", + "example": 294, + "start_line": 5422, + "end_line": 5429, + "section": "Backslash escapes" + }, + { + "markdown": "\n", + "html": "

http://example.com?find=\\*

\n", + "example": 295, + "start_line": 5432, + "end_line": 5436, + "section": "Backslash escapes" + }, + { + "markdown": "\n", + "html": "\n", + "example": 296, + "start_line": 5439, + "end_line": 5443, + "section": "Backslash escapes" + }, + { + "markdown": "[foo](/bar\\* \"ti\\*tle\")\n", + "html": "

foo

\n", + "example": 297, + "start_line": 5449, + "end_line": 5453, + "section": "Backslash escapes" + }, + { + "markdown": "[foo]\n\n[foo]: /bar\\* \"ti\\*tle\"\n", + "html": "

foo

\n", + "example": 298, + "start_line": 5456, + "end_line": 5462, + "section": "Backslash escapes" + }, + { + "markdown": "``` foo\\+bar\nfoo\n```\n", + "html": "
foo\n
\n", + "example": 299, + "start_line": 5465, + "end_line": 5472, + "section": "Backslash escapes" + }, + { + "markdown": "  & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸\n", + "html": "

  & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸

\n", + "example": 300, + "start_line": 5492, + "end_line": 5500, + "section": "Entity and numeric character references" + }, + { + "markdown": "# Ӓ Ϡ � �\n", + "html": "

# Ӓ Ϡ � �

\n", + "example": 301, + "start_line": 5511, + "end_line": 5515, + "section": "Entity and numeric character references" + }, + { + "markdown": "" ആ ಫ\n", + "html": "

" ആ ಫ

\n", + "example": 302, + "start_line": 5524, + "end_line": 5528, + "section": "Entity and numeric character references" + }, + { + "markdown": "  &x; &#; &#x;\n&ThisIsNotDefined; &hi?;\n", + "html": "

&nbsp &x; &#; &#x;\n&ThisIsNotDefined; &hi?;

\n", + "example": 303, + "start_line": 5533, + "end_line": 5539, + "section": "Entity and numeric character references" + }, + { + "markdown": "©\n", + "html": "

&copy

\n", + "example": 304, + "start_line": 5546, + "end_line": 5550, + "section": "Entity and numeric character references" + }, + { + "markdown": "&MadeUpEntity;\n", + "html": "

&MadeUpEntity;

\n", + "example": 305, + "start_line": 5556, + "end_line": 5560, + "section": "Entity and numeric character references" + }, + { + "markdown": "\n", + "html": "\n", + "example": 306, + "start_line": 5567, + "end_line": 5571, + "section": "Entity and numeric character references" + }, + { + "markdown": "[foo](/föö \"föö\")\n", + "html": "

foo

\n", + "example": 307, + "start_line": 5574, + "end_line": 5578, + "section": "Entity and numeric character references" + }, + { + "markdown": "[foo]\n\n[foo]: /föö \"föö\"\n", + "html": "

foo

\n", + "example": 308, + "start_line": 5581, + "end_line": 5587, + "section": "Entity and numeric character references" + }, + { + "markdown": "``` föö\nfoo\n```\n", + "html": "
foo\n
\n", + "example": 309, + "start_line": 5590, + "end_line": 5597, + "section": "Entity and numeric character references" + }, + { + "markdown": "`föö`\n", + "html": "

f&ouml;&ouml;

\n", + "example": 310, + "start_line": 5603, + "end_line": 5607, + "section": "Entity and numeric character references" + }, + { + "markdown": " föfö\n", + "html": "
f&ouml;f&ouml;\n
\n", + "example": 311, + "start_line": 5610, + "end_line": 5615, + "section": "Entity and numeric character references" + }, + { + "markdown": "`foo`\n", + "html": "

foo

\n", + "example": 312, + "start_line": 5632, + "end_line": 5636, + "section": "Code spans" + }, + { + "markdown": "`` foo ` bar ``\n", + "html": "

foo ` bar

\n", + "example": 313, + "start_line": 5642, + "end_line": 5646, + "section": "Code spans" + }, + { + "markdown": "` `` `\n", + "html": "

``

\n", + "example": 314, + "start_line": 5652, + "end_line": 5656, + "section": "Code spans" + }, + { + "markdown": "``\nfoo\n``\n", + "html": "

foo

\n", + "example": 315, + "start_line": 5661, + "end_line": 5667, + "section": "Code spans" + }, + { + "markdown": "`foo bar\n baz`\n", + "html": "

foo bar baz

\n", + "example": 316, + "start_line": 5673, + "end_line": 5678, + "section": "Code spans" + }, + { + "markdown": "`a  b`\n", + "html": "

a  b

\n", + "example": 317, + "start_line": 5684, + "end_line": 5688, + "section": "Code spans" + }, + { + "markdown": "`foo `` bar`\n", + "html": "

foo `` bar

\n", + "example": 318, + "start_line": 5704, + "end_line": 5708, + "section": "Code spans" + }, + { + "markdown": "`foo\\`bar`\n", + "html": "

foo\\bar`

\n", + "example": 319, + "start_line": 5714, + "end_line": 5718, + "section": "Code spans" + }, + { + "markdown": "*foo`*`\n", + "html": "

*foo*

\n", + "example": 320, + "start_line": 5730, + "end_line": 5734, + "section": "Code spans" + }, + { + "markdown": "[not a `link](/foo`)\n", + "html": "

[not a link](/foo)

\n", + "example": 321, + "start_line": 5739, + "end_line": 5743, + "section": "Code spans" + }, + { + "markdown": "``\n", + "html": "

<a href="">`

\n", + "example": 322, + "start_line": 5749, + "end_line": 5753, + "section": "Code spans" + }, + { + "markdown": "
`\n", + "html": "

`

\n", + "example": 323, + "start_line": 5758, + "end_line": 5762, + "section": "Code spans" + }, + { + "markdown": "``\n", + "html": "

<http://foo.bar.baz>`

\n", + "example": 324, + "start_line": 5767, + "end_line": 5771, + "section": "Code spans" + }, + { + "markdown": "`\n", + "html": "

http://foo.bar.`baz`

\n", + "example": 325, + "start_line": 5776, + "end_line": 5780, + "section": "Code spans" + }, + { + "markdown": "```foo``\n", + "html": "

```foo``

\n", + "example": 326, + "start_line": 5786, + "end_line": 5790, + "section": "Code spans" + }, + { + "markdown": "`foo\n", + "html": "

`foo

\n", + "example": 327, + "start_line": 5793, + "end_line": 5797, + "section": "Code spans" + }, + { + "markdown": "*foo bar*\n", + "html": "

foo bar

\n", + "example": 328, + "start_line": 6005, + "end_line": 6009, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "a * foo bar*\n", + "html": "

a * foo bar*

\n", + "example": 329, + "start_line": 6015, + "end_line": 6019, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "a*\"foo\"*\n", + "html": "

a*"foo"*

\n", + "example": 330, + "start_line": 6026, + "end_line": 6030, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "* a *\n", + "html": "

* a *

\n", + "example": 331, + "start_line": 6035, + "end_line": 6039, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo*bar*\n", + "html": "

foobar

\n", + "example": 332, + "start_line": 6044, + "end_line": 6048, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "5*6*78\n", + "html": "

5678

\n", + "example": 333, + "start_line": 6051, + "end_line": 6055, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_foo bar_\n", + "html": "

foo bar

\n", + "example": 334, + "start_line": 6060, + "end_line": 6064, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_ foo bar_\n", + "html": "

_ foo bar_

\n", + "example": 335, + "start_line": 6070, + "end_line": 6074, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "a_\"foo\"_\n", + "html": "

a_"foo"_

\n", + "example": 336, + "start_line": 6080, + "end_line": 6084, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo_bar_\n", + "html": "

foo_bar_

\n", + "example": 337, + "start_line": 6089, + "end_line": 6093, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "5_6_78\n", + "html": "

5_6_78

\n", + "example": 338, + "start_line": 6096, + "end_line": 6100, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "пристаням_стремятся_\n", + "html": "

пристаням_стремятся_

\n", + "example": 339, + "start_line": 6103, + "end_line": 6107, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "aa_\"bb\"_cc\n", + "html": "

aa_"bb"_cc

\n", + "example": 340, + "start_line": 6113, + "end_line": 6117, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo-_(bar)_\n", + "html": "

foo-(bar)

\n", + "example": 341, + "start_line": 6124, + "end_line": 6128, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_foo*\n", + "html": "

_foo*

\n", + "example": 342, + "start_line": 6136, + "end_line": 6140, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo bar *\n", + "html": "

*foo bar *

\n", + "example": 343, + "start_line": 6146, + "end_line": 6150, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo bar\n*\n", + "html": "

*foo bar\n*

\n", + "example": 344, + "start_line": 6155, + "end_line": 6161, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*(*foo)\n", + "html": "

*(*foo)

\n", + "example": 345, + "start_line": 6168, + "end_line": 6172, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*(*foo*)*\n", + "html": "

(foo)

\n", + "example": 346, + "start_line": 6178, + "end_line": 6182, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo*bar\n", + "html": "

foobar

\n", + "example": 347, + "start_line": 6187, + "end_line": 6191, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_foo bar _\n", + "html": "

_foo bar _

\n", + "example": 348, + "start_line": 6200, + "end_line": 6204, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_(_foo)\n", + "html": "

_(_foo)

\n", + "example": 349, + "start_line": 6210, + "end_line": 6214, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_(_foo_)_\n", + "html": "

(foo)

\n", + "example": 350, + "start_line": 6219, + "end_line": 6223, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_foo_bar\n", + "html": "

_foo_bar

\n", + "example": 351, + "start_line": 6228, + "end_line": 6232, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_пристаням_стремятся\n", + "html": "

_пристаням_стремятся

\n", + "example": 352, + "start_line": 6235, + "end_line": 6239, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_foo_bar_baz_\n", + "html": "

foo_bar_baz

\n", + "example": 353, + "start_line": 6242, + "end_line": 6246, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_(bar)_.\n", + "html": "

(bar).

\n", + "example": 354, + "start_line": 6253, + "end_line": 6257, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo bar**\n", + "html": "

foo bar

\n", + "example": 355, + "start_line": 6262, + "end_line": 6266, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "** foo bar**\n", + "html": "

** foo bar**

\n", + "example": 356, + "start_line": 6272, + "end_line": 6276, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "a**\"foo\"**\n", + "html": "

a**"foo"**

\n", + "example": 357, + "start_line": 6283, + "end_line": 6287, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo**bar**\n", + "html": "

foobar

\n", + "example": 358, + "start_line": 6292, + "end_line": 6296, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo bar__\n", + "html": "

foo bar

\n", + "example": 359, + "start_line": 6301, + "end_line": 6305, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__ foo bar__\n", + "html": "

__ foo bar__

\n", + "example": 360, + "start_line": 6311, + "end_line": 6315, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__\nfoo bar__\n", + "html": "

__\nfoo bar__

\n", + "example": 361, + "start_line": 6319, + "end_line": 6325, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "a__\"foo\"__\n", + "html": "

a__"foo"__

\n", + "example": 362, + "start_line": 6331, + "end_line": 6335, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo__bar__\n", + "html": "

foo__bar__

\n", + "example": 363, + "start_line": 6340, + "end_line": 6344, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "5__6__78\n", + "html": "

5__6__78

\n", + "example": 364, + "start_line": 6347, + "end_line": 6351, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "пристаням__стремятся__\n", + "html": "

пристаням__стремятся__

\n", + "example": 365, + "start_line": 6354, + "end_line": 6358, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo, __bar__, baz__\n", + "html": "

foo, bar, baz

\n", + "example": 366, + "start_line": 6361, + "end_line": 6365, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo-__(bar)__\n", + "html": "

foo-(bar)

\n", + "example": 367, + "start_line": 6372, + "end_line": 6376, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo bar **\n", + "html": "

**foo bar **

\n", + "example": 368, + "start_line": 6385, + "end_line": 6389, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**(**foo)\n", + "html": "

**(**foo)

\n", + "example": 369, + "start_line": 6398, + "end_line": 6402, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*(**foo**)*\n", + "html": "

(foo)

\n", + "example": 370, + "start_line": 6408, + "end_line": 6412, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**Gomphocarpus (*Gomphocarpus physocarpus*, syn.\n*Asclepias physocarpa*)**\n", + "html": "

Gomphocarpus (Gomphocarpus physocarpus, syn.\nAsclepias physocarpa)

\n", + "example": 371, + "start_line": 6415, + "end_line": 6421, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo \"*bar*\" foo**\n", + "html": "

foo "bar" foo

\n", + "example": 372, + "start_line": 6424, + "end_line": 6428, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo**bar\n", + "html": "

foobar

\n", + "example": 373, + "start_line": 6433, + "end_line": 6437, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo bar __\n", + "html": "

__foo bar __

\n", + "example": 374, + "start_line": 6445, + "end_line": 6449, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__(__foo)\n", + "html": "

__(__foo)

\n", + "example": 375, + "start_line": 6455, + "end_line": 6459, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_(__foo__)_\n", + "html": "

(foo)

\n", + "example": 376, + "start_line": 6465, + "end_line": 6469, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo__bar\n", + "html": "

__foo__bar

\n", + "example": 377, + "start_line": 6474, + "end_line": 6478, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__пристаням__стремятся\n", + "html": "

__пристаням__стремятся

\n", + "example": 378, + "start_line": 6481, + "end_line": 6485, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo__bar__baz__\n", + "html": "

foo__bar__baz

\n", + "example": 379, + "start_line": 6488, + "end_line": 6492, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__(bar)__.\n", + "html": "

(bar).

\n", + "example": 380, + "start_line": 6499, + "end_line": 6503, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo [bar](/url)*\n", + "html": "

foo bar

\n", + "example": 381, + "start_line": 6511, + "end_line": 6515, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo\nbar*\n", + "html": "

foo\nbar

\n", + "example": 382, + "start_line": 6518, + "end_line": 6524, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_foo __bar__ baz_\n", + "html": "

foo bar baz

\n", + "example": 383, + "start_line": 6530, + "end_line": 6534, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_foo _bar_ baz_\n", + "html": "

foo bar baz

\n", + "example": 384, + "start_line": 6537, + "end_line": 6541, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo_ bar_\n", + "html": "

foo bar

\n", + "example": 385, + "start_line": 6544, + "end_line": 6548, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo *bar**\n", + "html": "

foo bar

\n", + "example": 386, + "start_line": 6551, + "end_line": 6555, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo **bar** baz*\n", + "html": "

foo bar baz

\n", + "example": 387, + "start_line": 6558, + "end_line": 6562, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo**bar**baz*\n", + "html": "

foobarbaz

\n", + "example": 388, + "start_line": 6564, + "end_line": 6568, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "***foo** bar*\n", + "html": "

foo bar

\n", + "example": 389, + "start_line": 6589, + "end_line": 6593, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo **bar***\n", + "html": "

foo bar

\n", + "example": 390, + "start_line": 6596, + "end_line": 6600, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo**bar***\n", + "html": "

foobar

\n", + "example": 391, + "start_line": 6603, + "end_line": 6607, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo **bar *baz* bim** bop*\n", + "html": "

foo bar baz bim bop

\n", + "example": 392, + "start_line": 6612, + "end_line": 6616, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo [*bar*](/url)*\n", + "html": "

foo bar

\n", + "example": 393, + "start_line": 6619, + "end_line": 6623, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "** is not an empty emphasis\n", + "html": "

** is not an empty emphasis

\n", + "example": 394, + "start_line": 6628, + "end_line": 6632, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**** is not an empty strong emphasis\n", + "html": "

**** is not an empty strong emphasis

\n", + "example": 395, + "start_line": 6635, + "end_line": 6639, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo [bar](/url)**\n", + "html": "

foo bar

\n", + "example": 396, + "start_line": 6648, + "end_line": 6652, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo\nbar**\n", + "html": "

foo\nbar

\n", + "example": 397, + "start_line": 6655, + "end_line": 6661, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo _bar_ baz__\n", + "html": "

foo bar baz

\n", + "example": 398, + "start_line": 6667, + "end_line": 6671, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo __bar__ baz__\n", + "html": "

foo bar baz

\n", + "example": 399, + "start_line": 6674, + "end_line": 6678, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "____foo__ bar__\n", + "html": "

foo bar

\n", + "example": 400, + "start_line": 6681, + "end_line": 6685, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo **bar****\n", + "html": "

foo bar

\n", + "example": 401, + "start_line": 6688, + "end_line": 6692, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo *bar* baz**\n", + "html": "

foo bar baz

\n", + "example": 402, + "start_line": 6695, + "end_line": 6699, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo*bar*baz**\n", + "html": "

foobarbaz

\n", + "example": 403, + "start_line": 6702, + "end_line": 6706, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "***foo* bar**\n", + "html": "

foo bar

\n", + "example": 404, + "start_line": 6709, + "end_line": 6713, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo *bar***\n", + "html": "

foo bar

\n", + "example": 405, + "start_line": 6716, + "end_line": 6720, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo *bar **baz**\nbim* bop**\n", + "html": "

foo bar baz\nbim bop

\n", + "example": 406, + "start_line": 6725, + "end_line": 6731, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo [*bar*](/url)**\n", + "html": "

foo bar

\n", + "example": 407, + "start_line": 6734, + "end_line": 6738, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__ is not an empty emphasis\n", + "html": "

__ is not an empty emphasis

\n", + "example": 408, + "start_line": 6743, + "end_line": 6747, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "____ is not an empty strong emphasis\n", + "html": "

____ is not an empty strong emphasis

\n", + "example": 409, + "start_line": 6750, + "end_line": 6754, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo ***\n", + "html": "

foo ***

\n", + "example": 410, + "start_line": 6760, + "end_line": 6764, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo *\\**\n", + "html": "

foo *

\n", + "example": 411, + "start_line": 6767, + "end_line": 6771, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo *_*\n", + "html": "

foo _

\n", + "example": 412, + "start_line": 6774, + "end_line": 6778, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo *****\n", + "html": "

foo *****

\n", + "example": 413, + "start_line": 6781, + "end_line": 6785, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo **\\***\n", + "html": "

foo *

\n", + "example": 414, + "start_line": 6788, + "end_line": 6792, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo **_**\n", + "html": "

foo _

\n", + "example": 415, + "start_line": 6795, + "end_line": 6799, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo*\n", + "html": "

*foo

\n", + "example": 416, + "start_line": 6806, + "end_line": 6810, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo**\n", + "html": "

foo*

\n", + "example": 417, + "start_line": 6813, + "end_line": 6817, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "***foo**\n", + "html": "

*foo

\n", + "example": 418, + "start_line": 6820, + "end_line": 6824, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "****foo*\n", + "html": "

***foo

\n", + "example": 419, + "start_line": 6827, + "end_line": 6831, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo***\n", + "html": "

foo*

\n", + "example": 420, + "start_line": 6834, + "end_line": 6838, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo****\n", + "html": "

foo***

\n", + "example": 421, + "start_line": 6841, + "end_line": 6845, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo ___\n", + "html": "

foo ___

\n", + "example": 422, + "start_line": 6851, + "end_line": 6855, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo _\\__\n", + "html": "

foo _

\n", + "example": 423, + "start_line": 6858, + "end_line": 6862, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo _*_\n", + "html": "

foo *

\n", + "example": 424, + "start_line": 6865, + "end_line": 6869, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo _____\n", + "html": "

foo _____

\n", + "example": 425, + "start_line": 6872, + "end_line": 6876, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo __\\___\n", + "html": "

foo _

\n", + "example": 426, + "start_line": 6879, + "end_line": 6883, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "foo __*__\n", + "html": "

foo *

\n", + "example": 427, + "start_line": 6886, + "end_line": 6890, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo_\n", + "html": "

_foo

\n", + "example": 428, + "start_line": 6893, + "end_line": 6897, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_foo__\n", + "html": "

foo_

\n", + "example": 429, + "start_line": 6904, + "end_line": 6908, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "___foo__\n", + "html": "

_foo

\n", + "example": 430, + "start_line": 6911, + "end_line": 6915, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "____foo_\n", + "html": "

___foo

\n", + "example": 431, + "start_line": 6918, + "end_line": 6922, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo___\n", + "html": "

foo_

\n", + "example": 432, + "start_line": 6925, + "end_line": 6929, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_foo____\n", + "html": "

foo___

\n", + "example": 433, + "start_line": 6932, + "end_line": 6936, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo**\n", + "html": "

foo

\n", + "example": 434, + "start_line": 6942, + "end_line": 6946, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*_foo_*\n", + "html": "

foo

\n", + "example": 435, + "start_line": 6949, + "end_line": 6953, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__foo__\n", + "html": "

foo

\n", + "example": 436, + "start_line": 6956, + "end_line": 6960, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_*foo*_\n", + "html": "

foo

\n", + "example": 437, + "start_line": 6963, + "end_line": 6967, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "****foo****\n", + "html": "

foo

\n", + "example": 438, + "start_line": 6973, + "end_line": 6977, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "____foo____\n", + "html": "

foo

\n", + "example": 439, + "start_line": 6980, + "end_line": 6984, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "******foo******\n", + "html": "

foo

\n", + "example": 440, + "start_line": 6991, + "end_line": 6995, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "***foo***\n", + "html": "

foo

\n", + "example": 441, + "start_line": 7000, + "end_line": 7004, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_____foo_____\n", + "html": "

foo

\n", + "example": 442, + "start_line": 7007, + "end_line": 7011, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo _bar* baz_\n", + "html": "

foo _bar baz_

\n", + "example": 443, + "start_line": 7016, + "end_line": 7020, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo __bar *baz bim__ bam*\n", + "html": "

foo bar *baz bim bam

\n", + "example": 444, + "start_line": 7023, + "end_line": 7027, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**foo **bar baz**\n", + "html": "

**foo bar baz

\n", + "example": 445, + "start_line": 7032, + "end_line": 7036, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*foo *bar baz*\n", + "html": "

*foo bar baz

\n", + "example": 446, + "start_line": 7039, + "end_line": 7043, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*[bar*](/url)\n", + "html": "

*bar*

\n", + "example": 447, + "start_line": 7048, + "end_line": 7052, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_foo [bar_](/url)\n", + "html": "

_foo bar_

\n", + "example": 448, + "start_line": 7055, + "end_line": 7059, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*\n", + "html": "

*

\n", + "example": 449, + "start_line": 7062, + "end_line": 7066, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**\n", + "html": "

**

\n", + "example": 450, + "start_line": 7069, + "end_line": 7073, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__\n", + "html": "

__

\n", + "example": 451, + "start_line": 7076, + "end_line": 7080, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "*a `*`*\n", + "html": "

a *

\n", + "example": 452, + "start_line": 7083, + "end_line": 7087, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "_a `_`_\n", + "html": "

a _

\n", + "example": 453, + "start_line": 7090, + "end_line": 7094, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "**a\n", + "html": "

**ahttp://foo.bar/?q=**

\n", + "example": 454, + "start_line": 7097, + "end_line": 7101, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "__a\n", + "html": "

__ahttp://foo.bar/?q=__

\n", + "example": 455, + "start_line": 7104, + "end_line": 7108, + "section": "Emphasis and strong emphasis" + }, + { + "markdown": "[link](/uri \"title\")\n", + "html": "

link

\n", + "example": 456, + "start_line": 7183, + "end_line": 7187, + "section": "Links" + }, + { + "markdown": "[link](/uri)\n", + "html": "

link

\n", + "example": 457, + "start_line": 7192, + "end_line": 7196, + "section": "Links" + }, + { + "markdown": "[link]()\n", + "html": "

link

\n", + "example": 458, + "start_line": 7201, + "end_line": 7205, + "section": "Links" + }, + { + "markdown": "[link](<>)\n", + "html": "

link

\n", + "example": 459, + "start_line": 7208, + "end_line": 7212, + "section": "Links" + }, + { + "markdown": "[link](/my uri)\n", + "html": "

[link](/my uri)

\n", + "example": 460, + "start_line": 7218, + "end_line": 7222, + "section": "Links" + }, + { + "markdown": "[link]()\n", + "html": "

[link](</my uri>)

\n", + "example": 461, + "start_line": 7225, + "end_line": 7229, + "section": "Links" + }, + { + "markdown": "[link](foo\nbar)\n", + "html": "

[link](foo\nbar)

\n", + "example": 462, + "start_line": 7232, + "end_line": 7238, + "section": "Links" + }, + { + "markdown": "[link]()\n", + "html": "

[link]()

\n", + "example": 463, + "start_line": 7241, + "end_line": 7247, + "section": "Links" + }, + { + "markdown": "[link](\\(foo\\))\n", + "html": "

link

\n", + "example": 464, + "start_line": 7251, + "end_line": 7255, + "section": "Links" + }, + { + "markdown": "[link](foo(and(bar)))\n", + "html": "

link

\n", + "example": 465, + "start_line": 7260, + "end_line": 7264, + "section": "Links" + }, + { + "markdown": "[link](foo\\(and\\(bar\\))\n", + "html": "

link

\n", + "example": 466, + "start_line": 7269, + "end_line": 7273, + "section": "Links" + }, + { + "markdown": "[link]()\n", + "html": "

link

\n", + "example": 467, + "start_line": 7276, + "end_line": 7280, + "section": "Links" + }, + { + "markdown": "[link](foo\\)\\:)\n", + "html": "

link

\n", + "example": 468, + "start_line": 7286, + "end_line": 7290, + "section": "Links" + }, + { + "markdown": "[link](#fragment)\n\n[link](http://example.com#fragment)\n\n[link](http://example.com?foo=3#frag)\n", + "html": "

link

\n

link

\n

link

\n", + "example": 469, + "start_line": 7295, + "end_line": 7305, + "section": "Links" + }, + { + "markdown": "[link](foo\\bar)\n", + "html": "

link

\n", + "example": 470, + "start_line": 7311, + "end_line": 7315, + "section": "Links" + }, + { + "markdown": "[link](foo%20bä)\n", + "html": "

link

\n", + "example": 471, + "start_line": 7327, + "end_line": 7331, + "section": "Links" + }, + { + "markdown": "[link](\"title\")\n", + "html": "

link

\n", + "example": 472, + "start_line": 7338, + "end_line": 7342, + "section": "Links" + }, + { + "markdown": "[link](/url \"title\")\n[link](/url 'title')\n[link](/url (title))\n", + "html": "

link\nlink\nlink

\n", + "example": 473, + "start_line": 7347, + "end_line": 7355, + "section": "Links" + }, + { + "markdown": "[link](/url \"title \\\""\")\n", + "html": "

link

\n", + "example": 474, + "start_line": 7361, + "end_line": 7365, + "section": "Links" + }, + { + "markdown": "[link](/url \"title\")\n", + "html": "

link

\n", + "example": 475, + "start_line": 7371, + "end_line": 7375, + "section": "Links" + }, + { + "markdown": "[link](/url \"title \"and\" title\")\n", + "html": "

[link](/url "title "and" title")

\n", + "example": 476, + "start_line": 7380, + "end_line": 7384, + "section": "Links" + }, + { + "markdown": "[link](/url 'title \"and\" title')\n", + "html": "

link

\n", + "example": 477, + "start_line": 7389, + "end_line": 7393, + "section": "Links" + }, + { + "markdown": "[link]( /uri\n \"title\" )\n", + "html": "

link

\n", + "example": 478, + "start_line": 7413, + "end_line": 7418, + "section": "Links" + }, + { + "markdown": "[link] (/uri)\n", + "html": "

[link] (/uri)

\n", + "example": 479, + "start_line": 7424, + "end_line": 7428, + "section": "Links" + }, + { + "markdown": "[link [foo [bar]]](/uri)\n", + "html": "

link [foo [bar]]

\n", + "example": 480, + "start_line": 7434, + "end_line": 7438, + "section": "Links" + }, + { + "markdown": "[link] bar](/uri)\n", + "html": "

[link] bar](/uri)

\n", + "example": 481, + "start_line": 7441, + "end_line": 7445, + "section": "Links" + }, + { + "markdown": "[link [bar](/uri)\n", + "html": "

[link bar

\n", + "example": 482, + "start_line": 7448, + "end_line": 7452, + "section": "Links" + }, + { + "markdown": "[link \\[bar](/uri)\n", + "html": "

link [bar

\n", + "example": 483, + "start_line": 7455, + "end_line": 7459, + "section": "Links" + }, + { + "markdown": "[link *foo **bar** `#`*](/uri)\n", + "html": "

link foo bar #

\n", + "example": 484, + "start_line": 7464, + "end_line": 7468, + "section": "Links" + }, + { + "markdown": "[![moon](moon.jpg)](/uri)\n", + "html": "

\"moon\"

\n", + "example": 485, + "start_line": 7471, + "end_line": 7475, + "section": "Links" + }, + { + "markdown": "[foo [bar](/uri)](/uri)\n", + "html": "

[foo bar](/uri)

\n", + "example": 486, + "start_line": 7480, + "end_line": 7484, + "section": "Links" + }, + { + "markdown": "[foo *[bar [baz](/uri)](/uri)*](/uri)\n", + "html": "

[foo [bar baz](/uri)](/uri)

\n", + "example": 487, + "start_line": 7487, + "end_line": 7491, + "section": "Links" + }, + { + "markdown": "![[[foo](uri1)](uri2)](uri3)\n", + "html": "

\"[foo](uri2)\"

\n", + "example": 488, + "start_line": 7494, + "end_line": 7498, + "section": "Links" + }, + { + "markdown": "*[foo*](/uri)\n", + "html": "

*foo*

\n", + "example": 489, + "start_line": 7504, + "end_line": 7508, + "section": "Links" + }, + { + "markdown": "[foo *bar](baz*)\n", + "html": "

foo *bar

\n", + "example": 490, + "start_line": 7511, + "end_line": 7515, + "section": "Links" + }, + { + "markdown": "*foo [bar* baz]\n", + "html": "

foo [bar baz]

\n", + "example": 491, + "start_line": 7521, + "end_line": 7525, + "section": "Links" + }, + { + "markdown": "[foo \n", + "html": "

[foo

\n", + "example": 492, + "start_line": 7531, + "end_line": 7535, + "section": "Links" + }, + { + "markdown": "[foo`](/uri)`\n", + "html": "

[foo](/uri)

\n", + "example": 493, + "start_line": 7538, + "end_line": 7542, + "section": "Links" + }, + { + "markdown": "[foo\n", + "html": "

[foohttp://example.com/?search=](uri)

\n", + "example": 494, + "start_line": 7545, + "end_line": 7549, + "section": "Links" + }, + { + "markdown": "[foo][bar]\n\n[bar]: /url \"title\"\n", + "html": "

foo

\n", + "example": 495, + "start_line": 7580, + "end_line": 7586, + "section": "Links" + }, + { + "markdown": "[link [foo [bar]]][ref]\n\n[ref]: /uri\n", + "html": "

link [foo [bar]]

\n", + "example": 496, + "start_line": 7595, + "end_line": 7601, + "section": "Links" + }, + { + "markdown": "[link \\[bar][ref]\n\n[ref]: /uri\n", + "html": "

link [bar

\n", + "example": 497, + "start_line": 7604, + "end_line": 7610, + "section": "Links" + }, + { + "markdown": "[link *foo **bar** `#`*][ref]\n\n[ref]: /uri\n", + "html": "

link foo bar #

\n", + "example": 498, + "start_line": 7615, + "end_line": 7621, + "section": "Links" + }, + { + "markdown": "[![moon](moon.jpg)][ref]\n\n[ref]: /uri\n", + "html": "

\"moon\"

\n", + "example": 499, + "start_line": 7624, + "end_line": 7630, + "section": "Links" + }, + { + "markdown": "[foo [bar](/uri)][ref]\n\n[ref]: /uri\n", + "html": "

[foo bar]ref

\n", + "example": 500, + "start_line": 7635, + "end_line": 7641, + "section": "Links" + }, + { + "markdown": "[foo *bar [baz][ref]*][ref]\n\n[ref]: /uri\n", + "html": "

[foo bar baz]ref

\n", + "example": 501, + "start_line": 7644, + "end_line": 7650, + "section": "Links" + }, + { + "markdown": "*[foo*][ref]\n\n[ref]: /uri\n", + "html": "

*foo*

\n", + "example": 502, + "start_line": 7659, + "end_line": 7665, + "section": "Links" + }, + { + "markdown": "[foo *bar][ref]\n\n[ref]: /uri\n", + "html": "

foo *bar

\n", + "example": 503, + "start_line": 7668, + "end_line": 7674, + "section": "Links" + }, + { + "markdown": "[foo \n\n[ref]: /uri\n", + "html": "

[foo

\n", + "example": 504, + "start_line": 7680, + "end_line": 7686, + "section": "Links" + }, + { + "markdown": "[foo`][ref]`\n\n[ref]: /uri\n", + "html": "

[foo][ref]

\n", + "example": 505, + "start_line": 7689, + "end_line": 7695, + "section": "Links" + }, + { + "markdown": "[foo\n\n[ref]: /uri\n", + "html": "

[foohttp://example.com/?search=][ref]

\n", + "example": 506, + "start_line": 7698, + "end_line": 7704, + "section": "Links" + }, + { + "markdown": "[foo][BaR]\n\n[bar]: /url \"title\"\n", + "html": "

foo

\n", + "example": 507, + "start_line": 7709, + "end_line": 7715, + "section": "Links" + }, + { + "markdown": "[Толпой][Толпой] is a Russian word.\n\n[ТОЛПОЙ]: /url\n", + "html": "

Толпой is a Russian word.

\n", + "example": 508, + "start_line": 7720, + "end_line": 7726, + "section": "Links" + }, + { + "markdown": "[Foo\n bar]: /url\n\n[Baz][Foo bar]\n", + "html": "

Baz

\n", + "example": 509, + "start_line": 7732, + "end_line": 7739, + "section": "Links" + }, + { + "markdown": "[foo] [bar]\n\n[bar]: /url \"title\"\n", + "html": "

[foo] bar

\n", + "example": 510, + "start_line": 7745, + "end_line": 7751, + "section": "Links" + }, + { + "markdown": "[foo]\n[bar]\n\n[bar]: /url \"title\"\n", + "html": "

[foo]\nbar

\n", + "example": 511, + "start_line": 7754, + "end_line": 7762, + "section": "Links" + }, + { + "markdown": "[foo]: /url1\n\n[foo]: /url2\n\n[bar][foo]\n", + "html": "

bar

\n", + "example": 512, + "start_line": 7795, + "end_line": 7803, + "section": "Links" + }, + { + "markdown": "[bar][foo\\!]\n\n[foo!]: /url\n", + "html": "

[bar][foo!]

\n", + "example": 513, + "start_line": 7810, + "end_line": 7816, + "section": "Links" + }, + { + "markdown": "[foo][ref[]\n\n[ref[]: /uri\n", + "html": "

[foo][ref[]

\n

[ref[]: /uri

\n", + "example": 514, + "start_line": 7822, + "end_line": 7829, + "section": "Links" + }, + { + "markdown": "[foo][ref[bar]]\n\n[ref[bar]]: /uri\n", + "html": "

[foo][ref[bar]]

\n

[ref[bar]]: /uri

\n", + "example": 515, + "start_line": 7832, + "end_line": 7839, + "section": "Links" + }, + { + "markdown": "[[[foo]]]\n\n[[[foo]]]: /url\n", + "html": "

[[[foo]]]

\n

[[[foo]]]: /url

\n", + "example": 516, + "start_line": 7842, + "end_line": 7849, + "section": "Links" + }, + { + "markdown": "[foo][ref\\[]\n\n[ref\\[]: /uri\n", + "html": "

foo

\n", + "example": 517, + "start_line": 7852, + "end_line": 7858, + "section": "Links" + }, + { + "markdown": "[bar\\\\]: /uri\n\n[bar\\\\]\n", + "html": "

bar\\

\n", + "example": 518, + "start_line": 7863, + "end_line": 7869, + "section": "Links" + }, + { + "markdown": "[]\n\n[]: /uri\n", + "html": "

[]

\n

[]: /uri

\n", + "example": 519, + "start_line": 7874, + "end_line": 7881, + "section": "Links" + }, + { + "markdown": "[\n ]\n\n[\n ]: /uri\n", + "html": "

[\n]

\n

[\n]: /uri

\n", + "example": 520, + "start_line": 7884, + "end_line": 7895, + "section": "Links" + }, + { + "markdown": "[foo][]\n\n[foo]: /url \"title\"\n", + "html": "

foo

\n", + "example": 521, + "start_line": 7907, + "end_line": 7913, + "section": "Links" + }, + { + "markdown": "[*foo* bar][]\n\n[*foo* bar]: /url \"title\"\n", + "html": "

foo bar

\n", + "example": 522, + "start_line": 7916, + "end_line": 7922, + "section": "Links" + }, + { + "markdown": "[Foo][]\n\n[foo]: /url \"title\"\n", + "html": "

Foo

\n", + "example": 523, + "start_line": 7927, + "end_line": 7933, + "section": "Links" + }, + { + "markdown": "[foo] \n[]\n\n[foo]: /url \"title\"\n", + "html": "

foo\n[]

\n", + "example": 524, + "start_line": 7940, + "end_line": 7948, + "section": "Links" + }, + { + "markdown": "[foo]\n\n[foo]: /url \"title\"\n", + "html": "

foo

\n", + "example": 525, + "start_line": 7960, + "end_line": 7966, + "section": "Links" + }, + { + "markdown": "[*foo* bar]\n\n[*foo* bar]: /url \"title\"\n", + "html": "

foo bar

\n", + "example": 526, + "start_line": 7969, + "end_line": 7975, + "section": "Links" + }, + { + "markdown": "[[*foo* bar]]\n\n[*foo* bar]: /url \"title\"\n", + "html": "

[foo bar]

\n", + "example": 527, + "start_line": 7978, + "end_line": 7984, + "section": "Links" + }, + { + "markdown": "[[bar [foo]\n\n[foo]: /url\n", + "html": "

[[bar foo

\n", + "example": 528, + "start_line": 7987, + "end_line": 7993, + "section": "Links" + }, + { + "markdown": "[Foo]\n\n[foo]: /url \"title\"\n", + "html": "

Foo

\n", + "example": 529, + "start_line": 7998, + "end_line": 8004, + "section": "Links" + }, + { + "markdown": "[foo] bar\n\n[foo]: /url\n", + "html": "

foo bar

\n", + "example": 530, + "start_line": 8009, + "end_line": 8015, + "section": "Links" + }, + { + "markdown": "\\[foo]\n\n[foo]: /url \"title\"\n", + "html": "

[foo]

\n", + "example": 531, + "start_line": 8021, + "end_line": 8027, + "section": "Links" + }, + { + "markdown": "[foo*]: /url\n\n*[foo*]\n", + "html": "

*foo*

\n", + "example": 532, + "start_line": 8033, + "end_line": 8039, + "section": "Links" + }, + { + "markdown": "[foo][bar]\n\n[foo]: /url1\n[bar]: /url2\n", + "html": "

foo

\n", + "example": 533, + "start_line": 8045, + "end_line": 8052, + "section": "Links" + }, + { + "markdown": "[foo][]\n\n[foo]: /url1\n", + "html": "

foo

\n", + "example": 534, + "start_line": 8054, + "end_line": 8060, + "section": "Links" + }, + { + "markdown": "[foo]()\n\n[foo]: /url1\n", + "html": "

foo

\n", + "example": 535, + "start_line": 8064, + "end_line": 8070, + "section": "Links" + }, + { + "markdown": "[foo](not a link)\n\n[foo]: /url1\n", + "html": "

foo(not a link)

\n", + "example": 536, + "start_line": 8072, + "end_line": 8078, + "section": "Links" + }, + { + "markdown": "[foo][bar][baz]\n\n[baz]: /url\n", + "html": "

[foo]bar

\n", + "example": 537, + "start_line": 8083, + "end_line": 8089, + "section": "Links" + }, + { + "markdown": "[foo][bar][baz]\n\n[baz]: /url1\n[bar]: /url2\n", + "html": "

foobaz

\n", + "example": 538, + "start_line": 8095, + "end_line": 8102, + "section": "Links" + }, + { + "markdown": "[foo][bar][baz]\n\n[baz]: /url1\n[foo]: /url2\n", + "html": "

[foo]bar

\n", + "example": 539, + "start_line": 8108, + "end_line": 8115, + "section": "Links" + }, + { + "markdown": "![foo](/url \"title\")\n", + "html": "

\"foo\"

\n", + "example": 540, + "start_line": 8131, + "end_line": 8135, + "section": "Images" + }, + { + "markdown": "![foo *bar*]\n\n[foo *bar*]: train.jpg \"train & tracks\"\n", + "html": "

\"foo

\n", + "example": 541, + "start_line": 8138, + "end_line": 8144, + "section": "Images" + }, + { + "markdown": "![foo ![bar](/url)](/url2)\n", + "html": "

\"foo

\n", + "example": 542, + "start_line": 8147, + "end_line": 8151, + "section": "Images" + }, + { + "markdown": "![foo [bar](/url)](/url2)\n", + "html": "

\"foo

\n", + "example": 543, + "start_line": 8154, + "end_line": 8158, + "section": "Images" + }, + { + "markdown": "![foo *bar*][]\n\n[foo *bar*]: train.jpg \"train & tracks\"\n", + "html": "

\"foo

\n", + "example": 544, + "start_line": 8168, + "end_line": 8174, + "section": "Images" + }, + { + "markdown": "![foo *bar*][foobar]\n\n[FOOBAR]: train.jpg \"train & tracks\"\n", + "html": "

\"foo

\n", + "example": 545, + "start_line": 8177, + "end_line": 8183, + "section": "Images" + }, + { + "markdown": "![foo](train.jpg)\n", + "html": "

\"foo\"

\n", + "example": 546, + "start_line": 8186, + "end_line": 8190, + "section": "Images" + }, + { + "markdown": "My ![foo bar](/path/to/train.jpg \"title\" )\n", + "html": "

My \"foo

\n", + "example": 547, + "start_line": 8193, + "end_line": 8197, + "section": "Images" + }, + { + "markdown": "![foo]()\n", + "html": "

\"foo\"

\n", + "example": 548, + "start_line": 8200, + "end_line": 8204, + "section": "Images" + }, + { + "markdown": "![](/url)\n", + "html": "

\"\"

\n", + "example": 549, + "start_line": 8207, + "end_line": 8211, + "section": "Images" + }, + { + "markdown": "![foo][bar]\n\n[bar]: /url\n", + "html": "

\"foo\"

\n", + "example": 550, + "start_line": 8216, + "end_line": 8222, + "section": "Images" + }, + { + "markdown": "![foo][bar]\n\n[BAR]: /url\n", + "html": "

\"foo\"

\n", + "example": 551, + "start_line": 8225, + "end_line": 8231, + "section": "Images" + }, + { + "markdown": "![foo][]\n\n[foo]: /url \"title\"\n", + "html": "

\"foo\"

\n", + "example": 552, + "start_line": 8236, + "end_line": 8242, + "section": "Images" + }, + { + "markdown": "![*foo* bar][]\n\n[*foo* bar]: /url \"title\"\n", + "html": "

\"foo

\n", + "example": 553, + "start_line": 8245, + "end_line": 8251, + "section": "Images" + }, + { + "markdown": "![Foo][]\n\n[foo]: /url \"title\"\n", + "html": "

\"Foo\"

\n", + "example": 554, + "start_line": 8256, + "end_line": 8262, + "section": "Images" + }, + { + "markdown": "![foo] \n[]\n\n[foo]: /url \"title\"\n", + "html": "

\"foo\"\n[]

\n", + "example": 555, + "start_line": 8268, + "end_line": 8276, + "section": "Images" + }, + { + "markdown": "![foo]\n\n[foo]: /url \"title\"\n", + "html": "

\"foo\"

\n", + "example": 556, + "start_line": 8281, + "end_line": 8287, + "section": "Images" + }, + { + "markdown": "![*foo* bar]\n\n[*foo* bar]: /url \"title\"\n", + "html": "

\"foo

\n", + "example": 557, + "start_line": 8290, + "end_line": 8296, + "section": "Images" + }, + { + "markdown": "![[foo]]\n\n[[foo]]: /url \"title\"\n", + "html": "

![[foo]]

\n

[[foo]]: /url "title"

\n", + "example": 558, + "start_line": 8301, + "end_line": 8308, + "section": "Images" + }, + { + "markdown": "![Foo]\n\n[foo]: /url \"title\"\n", + "html": "

\"Foo\"

\n", + "example": 559, + "start_line": 8313, + "end_line": 8319, + "section": "Images" + }, + { + "markdown": "!\\[foo]\n\n[foo]: /url \"title\"\n", + "html": "

![foo]

\n", + "example": 560, + "start_line": 8325, + "end_line": 8331, + "section": "Images" + }, + { + "markdown": "\\![foo]\n\n[foo]: /url \"title\"\n", + "html": "

!foo

\n", + "example": 561, + "start_line": 8337, + "end_line": 8343, + "section": "Images" + }, + { + "markdown": "\n", + "html": "

http://foo.bar.baz

\n", + "example": 562, + "start_line": 8370, + "end_line": 8374, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

http://foo.bar.baz/test?q=hello&id=22&boolean

\n", + "example": 563, + "start_line": 8377, + "end_line": 8381, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

irc://foo.bar:2233/baz

\n", + "example": 564, + "start_line": 8384, + "end_line": 8388, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

MAILTO:FOO@BAR.BAZ

\n", + "example": 565, + "start_line": 8393, + "end_line": 8397, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

a+b+c:d

\n", + "example": 566, + "start_line": 8405, + "end_line": 8409, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

made-up-scheme://foo,bar

\n", + "example": 567, + "start_line": 8412, + "end_line": 8416, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

http://../

\n", + "example": 568, + "start_line": 8419, + "end_line": 8423, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

localhost:5001/foo

\n", + "example": 569, + "start_line": 8426, + "end_line": 8430, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

<http://foo.bar/baz bim>

\n", + "example": 570, + "start_line": 8435, + "end_line": 8439, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

http://example.com/\\[\\

\n", + "example": 571, + "start_line": 8444, + "end_line": 8448, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

foo@bar.example.com

\n", + "example": 572, + "start_line": 8466, + "end_line": 8470, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

foo+special@Bar.baz-bar0.com

\n", + "example": 573, + "start_line": 8473, + "end_line": 8477, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

<foo+@bar.example.com>

\n", + "example": 574, + "start_line": 8482, + "end_line": 8486, + "section": "Autolinks" + }, + { + "markdown": "<>\n", + "html": "

<>

\n", + "example": 575, + "start_line": 8491, + "end_line": 8495, + "section": "Autolinks" + }, + { + "markdown": "< http://foo.bar >\n", + "html": "

< http://foo.bar >

\n", + "example": 576, + "start_line": 8498, + "end_line": 8502, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

<m:abc>

\n", + "example": 577, + "start_line": 8505, + "end_line": 8509, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

<foo.bar.baz>

\n", + "example": 578, + "start_line": 8512, + "end_line": 8516, + "section": "Autolinks" + }, + { + "markdown": "http://example.com\n", + "html": "

http://example.com

\n", + "example": 579, + "start_line": 8519, + "end_line": 8523, + "section": "Autolinks" + }, + { + "markdown": "foo@bar.example.com\n", + "html": "

foo@bar.example.com

\n", + "example": 580, + "start_line": 8526, + "end_line": 8530, + "section": "Autolinks" + }, + { + "markdown": "\n", + "html": "

\n", + "example": 581, + "start_line": 8608, + "end_line": 8612, + "section": "Raw HTML" + }, + { + "markdown": "\n", + "html": "

\n", + "example": 582, + "start_line": 8617, + "end_line": 8621, + "section": "Raw HTML" + }, + { + "markdown": "\n", + "html": "

\n", + "example": 583, + "start_line": 8626, + "end_line": 8632, + "section": "Raw HTML" + }, + { + "markdown": "\n", + "html": "

\n", + "example": 584, + "start_line": 8637, + "end_line": 8643, + "section": "Raw HTML" + }, + { + "markdown": "Foo \n", + "html": "

Foo

\n", + "example": 585, + "start_line": 8648, + "end_line": 8652, + "section": "Raw HTML" + }, + { + "markdown": "<33> <__>\n", + "html": "

<33> <__>

\n", + "example": 586, + "start_line": 8657, + "end_line": 8661, + "section": "Raw HTML" + }, + { + "markdown": "
\n", + "html": "

<a h*#ref="hi">

\n", + "example": 587, + "start_line": 8666, + "end_line": 8670, + "section": "Raw HTML" + }, + { + "markdown": "
\n", + "html": "

<a href="hi'> <a href=hi'>

\n", + "example": 588, + "start_line": 8675, + "end_line": 8679, + "section": "Raw HTML" + }, + { + "markdown": "< a><\nfoo>\n", + "html": "

< a><\nfoo><bar/ >

\n", + "example": 589, + "start_line": 8684, + "end_line": 8690, + "section": "Raw HTML" + }, + { + "markdown": "
\n", + "html": "

<a href='bar'title=title>

\n", + "example": 590, + "start_line": 8695, + "end_line": 8699, + "section": "Raw HTML" + }, + { + "markdown": "
\n", + "html": "

\n", + "example": 591, + "start_line": 8704, + "end_line": 8708, + "section": "Raw HTML" + }, + { + "markdown": "\n", + "html": "

</a href="foo">

\n", + "example": 592, + "start_line": 8713, + "end_line": 8717, + "section": "Raw HTML" + }, + { + "markdown": "foo \n", + "html": "

foo

\n", + "example": 593, + "start_line": 8722, + "end_line": 8728, + "section": "Raw HTML" + }, + { + "markdown": "foo \n", + "html": "

foo <!-- not a comment -- two hyphens -->

\n", + "example": 594, + "start_line": 8731, + "end_line": 8735, + "section": "Raw HTML" + }, + { + "markdown": "foo foo -->\n\nfoo \n", + "html": "

foo <!--> foo -->

\n

foo <!-- foo--->

\n", + "example": 595, + "start_line": 8740, + "end_line": 8747, + "section": "Raw HTML" + }, + { + "markdown": "foo \n", + "html": "

foo

\n", + "example": 596, + "start_line": 8752, + "end_line": 8756, + "section": "Raw HTML" + }, + { + "markdown": "foo \n", + "html": "

foo

\n", + "example": 597, + "start_line": 8761, + "end_line": 8765, + "section": "Raw HTML" + }, + { + "markdown": "foo &<]]>\n", + "html": "

foo &<]]>

\n", + "example": 598, + "start_line": 8770, + "end_line": 8774, + "section": "Raw HTML" + }, + { + "markdown": "foo \n", + "html": "

foo

\n", + "example": 599, + "start_line": 8780, + "end_line": 8784, + "section": "Raw HTML" + }, + { + "markdown": "foo \n", + "html": "

foo

\n", + "example": 600, + "start_line": 8789, + "end_line": 8793, + "section": "Raw HTML" + }, + { + "markdown": "\n", + "html": "

<a href=""">

\n", + "example": 601, + "start_line": 8796, + "end_line": 8800, + "section": "Raw HTML" + }, + { + "markdown": "foo \nbaz\n", + "html": "

foo
\nbaz

\n", + "example": 602, + "start_line": 8810, + "end_line": 8816, + "section": "Hard line breaks" + }, + { + "markdown": "foo\\\nbaz\n", + "html": "

foo
\nbaz

\n", + "example": 603, + "start_line": 8822, + "end_line": 8828, + "section": "Hard line breaks" + }, + { + "markdown": "foo \nbaz\n", + "html": "

foo
\nbaz

\n", + "example": 604, + "start_line": 8833, + "end_line": 8839, + "section": "Hard line breaks" + }, + { + "markdown": "foo \n bar\n", + "html": "

foo
\nbar

\n", + "example": 605, + "start_line": 8844, + "end_line": 8850, + "section": "Hard line breaks" + }, + { + "markdown": "foo\\\n bar\n", + "html": "

foo
\nbar

\n", + "example": 606, + "start_line": 8853, + "end_line": 8859, + "section": "Hard line breaks" + }, + { + "markdown": "*foo \nbar*\n", + "html": "

foo
\nbar

\n", + "example": 607, + "start_line": 8865, + "end_line": 8871, + "section": "Hard line breaks" + }, + { + "markdown": "*foo\\\nbar*\n", + "html": "

foo
\nbar

\n", + "example": 608, + "start_line": 8874, + "end_line": 8880, + "section": "Hard line breaks" + }, + { + "markdown": "`code \nspan`\n", + "html": "

code span

\n", + "example": 609, + "start_line": 8885, + "end_line": 8890, + "section": "Hard line breaks" + }, + { + "markdown": "`code\\\nspan`\n", + "html": "

code\\ span

\n", + "example": 610, + "start_line": 8893, + "end_line": 8898, + "section": "Hard line breaks" + }, + { + "markdown": "
\n", + "html": "

\n", + "example": 611, + "start_line": 8903, + "end_line": 8909, + "section": "Hard line breaks" + }, + { + "markdown": "\n", + "html": "

\n", + "example": 612, + "start_line": 8912, + "end_line": 8918, + "section": "Hard line breaks" + }, + { + "markdown": "foo\\\n", + "html": "

foo\\

\n", + "example": 613, + "start_line": 8925, + "end_line": 8929, + "section": "Hard line breaks" + }, + { + "markdown": "foo \n", + "html": "

foo

\n", + "example": 614, + "start_line": 8932, + "end_line": 8936, + "section": "Hard line breaks" + }, + { + "markdown": "### foo\\\n", + "html": "

foo\\

\n", + "example": 615, + "start_line": 8939, + "end_line": 8943, + "section": "Hard line breaks" + }, + { + "markdown": "### foo \n", + "html": "

foo

\n", + "example": 616, + "start_line": 8946, + "end_line": 8950, + "section": "Hard line breaks" + }, + { + "markdown": "foo\nbaz\n", + "html": "

foo\nbaz

\n", + "example": 617, + "start_line": 8961, + "end_line": 8967, + "section": "Soft line breaks" + }, + { + "markdown": "foo \n baz\n", + "html": "

foo\nbaz

\n", + "example": 618, + "start_line": 8973, + "end_line": 8979, + "section": "Soft line breaks" + }, + { + "markdown": "hello $.;'there\n", + "html": "

hello $.;'there

\n", + "example": 619, + "start_line": 8993, + "end_line": 8997, + "section": "Textual content" + }, + { + "markdown": "Foo χρῆν\n", + "html": "

Foo χρῆν

\n", + "example": 620, + "start_line": 9000, + "end_line": 9004, + "section": "Textual content" + }, + { + "markdown": "Multiple spaces\n", + "html": "

Multiple spaces

\n", + "example": 621, + "start_line": 9009, + "end_line": 9013, + "section": "Textual content" + } +] ADDED test/commonmark_tests.tcl Index: test/commonmark_tests.tcl ================================================================== --- /dev/null +++ test/commonmark_tests.tcl @@ -0,0 +1,58 @@ +package require rl_json +package require tdom + +set f [open "commonmark_tests.json"] +fconfigure $f -encoding utf-8 +set data [read $f] +close $f + +set tests [rl_json::json parse $data] + +proc normalize {html} { + if {![catch {[[dom parse -html "$html"] documentElement] asHTML} res]} { + return [string range $res 6 end-7] + } else { + return $html + } +} + +set errored 0 +set failed 0 +set passed 0 +foreach test $tests { + dict with test { + puts --------------- + puts -nonewline "Test: $example" + set f [open "in.md" w+] + fconfigure $f -encoding utf-8 + puts $f [subst -nocommands -novariable $markdown]\n + close $f + set expected [normalize [subst -nocommands -novariables [string trim $html]]] + if {[catch { + set data [exec ../fossil test-markdown-render in.md] + + # remove pre/post amble + set data [split $data \n] + set data [lrange $data 1 end-2] + set result [normalize [string trim [join $data \n]]] + } err]} { + incr errored + set result "crashed" + puts stderr $err + puts "crashed" + } elseif {$result ne $expected} { + incr failed + puts " failed, -: expected, +: actual:" + foreach line [split $expected \n] { puts "-:$line" } + foreach line [split $result \n] { puts "+:$line" } + } else { + incr passed + puts " passed" + foreach line [split $expected \n] { puts "-:$line" } + foreach line [split $result \n] { puts "+:$line" } + } + } +} + +puts "Passed: $passed, failed: $failed, errored: $errored" +file delete in.md Index: test/markdown-test1.md ================================================================== --- test/markdown-test1.md +++ test/markdown-test1.md @@ -1,8 +1,6 @@ - -Markdown Formatter Test Document -================================ +# Markdown Formatter Test Document This document is designed to test the markdown formatter. * A bullet item. * A subitem @@ -21,5 +19,9 @@ Other Features -------------- Text can show *emphasis* or _emphasis_ or **strong emphassis**. + +``` +Fenced code block +```