diff --git a/Sources/libMultiMarkdown/include/libMultiMarkdown.h b/Sources/libMultiMarkdown/include/libMultiMarkdown.h index 8da8be5..6ee276b 100644 --- a/Sources/libMultiMarkdown/include/libMultiMarkdown.h +++ b/Sources/libMultiMarkdown/include/libMultiMarkdown.h @@ -471,6 +471,7 @@ enum token_types { TEXT_EMPTY, TEXT_HASH, TEXT_LINEBREAK, + TEXT_LINEBREAK_SP, TEXT_NL, TEXT_NL_SP, TEXT_NUMBER_POSS_LIST, diff --git a/Sources/libMultiMarkdown/lexer.c b/Sources/libMultiMarkdown/lexer.c index de74f2f..3d62918 100644 --- a/Sources/libMultiMarkdown/lexer.c +++ b/Sources/libMultiMarkdown/lexer.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.15.3 on Sun Jul 23 08:32:21 2017 */ +/* Generated by re2c 0.14.3 on Sun Jul 23 17:28:33 2017 */ /** MultiMarkdown 6 -- Lightweight markup processor to produce HTML, LaTeX, and more. @@ -80,6 +80,7 @@ int scan(Scanner * s, const char * stop) { { YYCTYPE yych; unsigned int yyaccept = 0; + yych = *YYCURSOR; switch (yych) { case 0x00: @@ -168,24 +169,24 @@ int scan(Scanner * s, const char * stop) { case 'y': case 'z': case 0x7F: goto yy66; - case '\t': goto yy49; + case '\t': goto yy51; case '\n': goto yy3; case '\r': goto yy5; - case ' ': goto yy51; - case '!': goto yy22; - case '"': goto yy32; + case ' ': goto yy6; + case '!': goto yy25; + case '"': goto yy34; case '#': goto yy53; - case '$': goto yy45; + case '$': goto yy47; case '%': goto yy55; - case '&': goto yy39; - case '\'': goto yy34; - case '(': goto yy24; - case ')': goto yy26; + case '&': goto yy41; + case '\'': goto yy36; + case '(': goto yy26; + case ')': goto yy28; case '*': goto yy58; - case '+': goto yy8; - case '-': goto yy10; - case '.': goto yy36; - case '/': goto yy41; + case '+': goto yy11; + case '-': goto yy13; + case '.': goto yy38; + case '/': goto yy43; case '0': case '1': case '2': @@ -196,21 +197,21 @@ int scan(Scanner * s, const char * stop) { case '7': case '8': case '9': goto yy57; - case ':': goto yy37; - case '<': goto yy12; - case '=': goto yy16; - case '>': goto yy28; - case '[': goto yy18; - case '\\': goto yy43; - case ']': goto yy20; - case '^': goto yy47; + case ':': goto yy39; + case '<': goto yy15; + case '=': goto yy19; + case '>': goto yy30; + case '[': goto yy21; + case '\\': goto yy45; + case ']': goto yy23; + case '^': goto yy49; case '_': goto yy60; case '`': goto yy62; - case '{': goto yy6; + case '{': goto yy9; case '|': goto yy64; - case '}': goto yy30; - case '~': goto yy14; - case 0xC2: goto yy52; + case '}': goto yy32; + case '~': goto yy17; + case 0xC2: goto yy8; case 0xC3: case 0xC4: case 0xC5: @@ -268,12 +269,12 @@ yy2: switch (yyaccept) { case 0: goto yy4; case 1: goto yy7; - case 2: goto yy9; - case 3: goto yy13; - case 4: goto yy15; - case 5: goto yy17; - case 6: goto yy23; - case 7: goto yy40; + case 2: goto yy10; + case 3: goto yy12; + case 4: goto yy16; + case 5: goto yy18; + case 6: goto yy20; + case 7: goto yy42; case 8: goto yy54; case 9: goto yy81; case 10: goto yy89; @@ -282,15 +283,16 @@ yy2: case 13: goto yy112; case 14: goto yy121; case 15: goto yy128; - case 16: goto yy135; - case 17: goto yy145; - default: goto yy303; + case 16: goto yy284; + case 17: goto yy307; + case 18: goto yy314; + default: goto yy326; } yy3: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case ' ': goto yy324; + case ' ': goto yy333; default: goto yy4; } yy4: @@ -300,274 +302,24 @@ yy5: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '\n': goto yy3; - case ' ': goto yy324; + case ' ': goto yy333; default: goto yy4; } yy6: + YYCTXMARKER = YYCURSOR + 1; yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case '+': goto yy307; - case '-': goto yy306; - case '=': goto yy300; - case '>': goto yy305; - case '{': goto yy302; - case '~': goto yy304; + case '\t': goto yy309; + case '\n': goto yy331; + case '\r': goto yy332; + case ' ': goto yy306; + case 0xC2: goto yy308; default: goto yy7; } yy7: - { return TEXT_BRACE_LEFT; } -yy8: - yyaccept = 2; - yych = *(YYMARKER = ++YYCURSOR); - switch (yych) { - case '+': goto yy297; - default: goto yy9; - } -yy9: - { return PLUS; } -yy10: - ++YYCURSOR; - switch ((yych = *YYCURSOR)) { - case '-': goto yy289; - default: goto yy11; - } -yy11: - { return DASH_N; } -yy12: - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - switch (yych) { - case '!': goto yy282; - case '<': goto yy283; - default: goto yy13; - } -yy13: - { return ANGLE_LEFT; } -yy14: - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - switch (yych) { - case '>': goto yy278; - case '~': goto yy277; - default: goto yy15; - } -yy15: - { return SUBSCRIPT; } -yy16: - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - switch (yych) { - case '=': goto yy274; - default: goto yy17; - } -yy17: - { return EQUAL; } -yy18: - ++YYCURSOR; - switch ((yych = *YYCURSOR)) { - case '#': goto yy270; - case '%': goto yy264; - case '>': goto yy272; - case '?': goto yy266; - case '^': goto yy268; - default: goto yy19; - } -yy19: - { return BRACKET_LEFT; } -yy20: - ++YYCURSOR; - { return BRACKET_RIGHT; } -yy22: - ++YYCURSOR; - switch ((yych = *YYCURSOR)) { - case '[': goto yy262; - default: goto yy23; - } -yy23: { goto scan; } -yy24: - ++YYCURSOR; - { return PAREN_LEFT; } -yy26: - ++YYCURSOR; - { return PAREN_RIGHT; } -yy28: - ++YYCURSOR; - { return ANGLE_RIGHT; } -yy30: - ++YYCURSOR; - switch ((yych = *YYCURSOR)) { - case '}': goto yy260; - default: goto yy31; - } -yy31: - { return TEXT_BRACE_RIGHT; } -yy32: - ++YYCURSOR; - { return QUOTE_DOUBLE; } -yy34: - ++YYCURSOR; - switch ((yych = *YYCURSOR)) { - case '\'': goto yy258; - default: goto yy35; - } -yy35: - { return QUOTE_SINGLE; } -yy36: - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - switch (yych) { - case ' ': goto yy250; - case '.': goto yy251; - default: goto yy23; - } -yy37: - ++YYCURSOR; - { return COLON; } -yy39: - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - switch (yych) { - case '#': goto yy234; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - case 'G': - case 'H': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'U': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'Z': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - case 'h': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'n': - case 'o': - case 'p': - case 'q': - case 'r': - case 's': - case 't': - case 'u': - case 'v': - case 'w': - case 'x': - case 'y': - case 'z': goto yy231; - case 'A': - case 'a': goto yy233; - default: goto yy40; - } -yy40: - { return AMPERSAND; } -yy41: - ++YYCURSOR; - { return SLASH; } -yy43: - ++YYCURSOR; - switch ((yych = *YYCURSOR)) { - case '\n': goto yy154; - case '\r': goto yy156; - case ' ': goto yy159; - case '!': goto yy219; - case '"': goto yy209; - case '#': goto yy189; - case '$': goto yy187; - case '%': goto yy185; - case '&': goto yy173; - case '\'': goto yy207; - case '(': goto yy201; - case ')': goto yy199; - case '*': goto yy165; - case '+': goto yy183; - case ',': goto yy215; - case '-': goto yy181; - case '.': goto yy221; - case '/': goto yy169; - case ':': goto yy211; - case ';': goto yy213; - case '<': goto yy177; - case '=': goto yy179; - case '>': goto yy175; - case '?': goto yy217; - case '@': goto yy171; - case '[': goto yy193; - case '\\': goto yy157; - case ']': goto yy191; - case '^': goto yy167; - case '_': goto yy163; - case '`': goto yy205; - case '{': goto yy197; - case '|': goto yy161; - case '}': goto yy195; - case '~': goto yy203; - default: goto yy44; - } -yy44: - { return TEXT_BACKSLASH; } -yy45: - ++YYCURSOR; - switch ((yych = *YYCURSOR)) { - case '$': goto yy152; - default: goto yy46; - } -yy46: - { return MATH_DOLLAR_SINGLE; } -yy47: - ++YYCURSOR; - { return SUPERSCRIPT; } -yy49: - ++YYCURSOR; - { return INDENT_TAB; } -yy51: - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - YYCTXMARKER = YYCURSOR; - switch (yych) { - case '\t': goto yy137; - case '\n': goto yy150; - case '\r': goto yy151; - case ' ': goto yy134; - case 0xC2: goto yy136; - default: goto yy23; - } -yy52: +yy8: yych = *++YYCURSOR; switch (yych) { case 0x80: @@ -633,13 +385,263 @@ yy52: case 0xBD: case 0xBE: case 0xBF: goto yy66; - case 0xA0: goto yy133; + case 0xA0: goto yy305; default: goto yy2; } +yy9: + yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '+': goto yy288; + case '-': goto yy287; + case '=': goto yy281; + case '>': goto yy286; + case '{': goto yy283; + case '~': goto yy285; + default: goto yy10; + } +yy10: + { return TEXT_BRACE_LEFT; } +yy11: + yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '+': goto yy278; + default: goto yy12; + } +yy12: + { return PLUS; } +yy13: + ++YYCURSOR; + switch ((yych = *YYCURSOR)) { + case '-': goto yy270; + default: goto yy14; + } +yy14: + { return DASH_N; } +yy15: + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '!': goto yy263; + case '<': goto yy264; + default: goto yy16; + } +yy16: + { return ANGLE_LEFT; } +yy17: + yyaccept = 5; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '>': goto yy259; + case '~': goto yy258; + default: goto yy18; + } +yy18: + { return SUBSCRIPT; } +yy19: + yyaccept = 6; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '=': goto yy255; + default: goto yy20; + } +yy20: + { return EQUAL; } +yy21: + ++YYCURSOR; + switch ((yych = *YYCURSOR)) { + case '#': goto yy251; + case '%': goto yy245; + case '>': goto yy253; + case '?': goto yy247; + case '^': goto yy249; + default: goto yy22; + } +yy22: + { return BRACKET_LEFT; } +yy23: + ++YYCURSOR; + { return BRACKET_RIGHT; } +yy25: + yych = *++YYCURSOR; + switch (yych) { + case '[': goto yy243; + default: goto yy7; + } +yy26: + ++YYCURSOR; + { return PAREN_LEFT; } +yy28: + ++YYCURSOR; + { return PAREN_RIGHT; } +yy30: + ++YYCURSOR; + { return ANGLE_RIGHT; } +yy32: + ++YYCURSOR; + switch ((yych = *YYCURSOR)) { + case '}': goto yy241; + default: goto yy33; + } +yy33: + { return TEXT_BRACE_RIGHT; } +yy34: + ++YYCURSOR; + { return QUOTE_DOUBLE; } +yy36: + ++YYCURSOR; + switch ((yych = *YYCURSOR)) { + case '\'': goto yy239; + default: goto yy37; + } +yy37: + { return QUOTE_SINGLE; } +yy38: + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case ' ': goto yy231; + case '.': goto yy232; + default: goto yy7; + } +yy39: + ++YYCURSOR; + { return COLON; } +yy41: + yyaccept = 7; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '#': goto yy215; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy212; + case 'A': + case 'a': goto yy214; + default: goto yy42; + } +yy42: + { return AMPERSAND; } +yy43: + ++YYCURSOR; + { return SLASH; } +yy45: + ++YYCURSOR; + switch ((yych = *YYCURSOR)) { + case '\n': goto yy135; + case '\r': goto yy137; + case ' ': goto yy140; + case '!': goto yy200; + case '"': goto yy190; + case '#': goto yy170; + case '$': goto yy168; + case '%': goto yy166; + case '&': goto yy154; + case '\'': goto yy188; + case '(': goto yy182; + case ')': goto yy180; + case '*': goto yy146; + case '+': goto yy164; + case ',': goto yy196; + case '-': goto yy162; + case '.': goto yy202; + case '/': goto yy150; + case ':': goto yy192; + case ';': goto yy194; + case '<': goto yy158; + case '=': goto yy160; + case '>': goto yy156; + case '?': goto yy198; + case '@': goto yy152; + case '[': goto yy174; + case '\\': goto yy138; + case ']': goto yy172; + case '^': goto yy148; + case '_': goto yy144; + case '`': goto yy186; + case '{': goto yy178; + case '|': goto yy142; + case '}': goto yy176; + case '~': goto yy184; + default: goto yy46; + } +yy46: + { return TEXT_BACKSLASH; } +yy47: + ++YYCURSOR; + switch ((yych = *YYCURSOR)) { + case '$': goto yy133; + default: goto yy48; + } +yy48: + { return MATH_DOLLAR_SINGLE; } +yy49: + ++YYCURSOR; + { return SUPERSCRIPT; } +yy51: + ++YYCURSOR; + { return INDENT_TAB; } yy53: + YYCTXMARKER = YYCURSOR + 1; yyaccept = 8; yych = *(YYMARKER = ++YYCURSOR); - YYCTXMARKER = YYCURSOR; switch (yych) { case '\t': case '\n': @@ -655,7 +657,7 @@ yy55: ++YYCURSOR; { return TEXT_PERCENT; } yy57: - yyaccept = 6; + yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '.': goto yy77; @@ -669,7 +671,7 @@ yy57: case '7': case '8': case '9': goto yy78; - default: goto yy23; + default: goto yy7; } yy58: ++YYCURSOR; @@ -691,7 +693,7 @@ yy65: { return PIPE; } yy66: yych = *++YYCURSOR; - goto yy23; + goto yy7; yy67: yych = *++YYCURSOR; switch (yych) { @@ -1027,8 +1029,8 @@ yy76: default: goto yy63; } yy77: + YYCTXMARKER = YYCURSOR + 1; yych = *++YYCURSOR; - YYCTXMARKER = YYCURSOR; switch (yych) { case '\t': case ' ': goto yy83; @@ -1083,8 +1085,8 @@ yy85: default: goto yy2; } yy86: + YYCTXMARKER = YYCURSOR + 1; yych = *++YYCURSOR; - YYCTXMARKER = YYCURSOR; switch (yych) { case '\t': case '\n': @@ -1161,8 +1163,8 @@ yy100: default: goto yy99; } yy101: + YYCTXMARKER = YYCURSOR + 1; yych = *++YYCURSOR; - YYCTXMARKER = YYCURSOR; switch (yych) { case '\t': case '\n': @@ -1173,8 +1175,8 @@ yy101: default: goto yy2; } yy102: + YYCTXMARKER = YYCURSOR + 1; yych = *++YYCURSOR; - YYCTXMARKER = YYCURSOR; switch (yych) { case '\t': case '\n': @@ -1251,8 +1253,8 @@ yy116: default: goto yy115; } yy117: + YYCTXMARKER = YYCURSOR + 1; yych = *++YYCURSOR; - YYCTXMARKER = YYCURSOR; switch (yych) { case '\t': case '\n': @@ -1263,8 +1265,8 @@ yy117: default: goto yy2; } yy118: + YYCTXMARKER = YYCURSOR + 1; yych = *++YYCURSOR; - YYCTXMARKER = YYCURSOR; switch (yych) { case '\t': case '\n': @@ -1340,243 +1342,141 @@ yy132: default: goto yy131; } yy133: - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - YYCTXMARKER = YYCURSOR; - switch (yych) { - case '\t': goto yy137; - case ' ': goto yy134; - case 0xC2: goto yy136; - default: goto yy23; - } -yy134: - yyaccept = 16; - yych = *(YYMARKER = ++YYCURSOR); - switch (yych) { - case '\n': goto yy141; - case '\r': goto yy143; - case ' ': goto yy139; - case 0xC2: goto yy140; - default: goto yy135; - } -yy135: - { return NON_INDENT_SPACE; } -yy136: - yych = *++YYCURSOR; - switch (yych) { - case 0xA0: goto yy134; - default: goto yy2; - } -yy137: - ++YYCURSOR; - YYCURSOR = YYCTXMARKER; - { return NON_INDENT_SPACE; } -yy139: - yyaccept = 16; - yych = *(YYMARKER = ++YYCURSOR); - switch (yych) { - case '\n': goto yy141; - case '\r': goto yy143; - case ' ': goto yy144; - case 0xC2: goto yy146; - default: goto yy135; - } -yy140: - yych = *++YYCURSOR; - switch (yych) { - case 0xA0: goto yy139; - default: goto yy2; - } -yy141: - ++YYCURSOR; -yy142: - { return TEXT_LINEBREAK; } -yy143: - yych = *++YYCURSOR; - switch (yych) { - case '\n': goto yy141; - default: goto yy142; - } -yy144: - yyaccept = 17; - yych = *(YYMARKER = ++YYCURSOR); - switch (yych) { - case '\n': goto yy141; - case '\r': goto yy143; - case ' ': goto yy147; - case 0xC2: goto yy149; - default: goto yy145; - } -yy145: - { return INDENT_SPACE; } -yy146: - yych = *++YYCURSOR; - switch (yych) { - case 0xA0: goto yy144; - default: goto yy2; - } -yy147: - ++YYCURSOR; - yych = *YYCURSOR; - switch (yych) { - case '\n': goto yy141; - case '\r': goto yy143; - case ' ': goto yy147; - case 0xC2: goto yy149; - default: goto yy2; - } -yy149: - ++YYCURSOR; - yych = *YYCURSOR; - switch (yych) { - case 0xA0: goto yy147; - default: goto yy2; - } -yy150: - yych = *++YYCURSOR; - goto yy4; -yy151: - yych = *++YYCURSOR; - switch (yych) { - case '\n': goto yy150; - default: goto yy4; - } -yy152: ++YYCURSOR; { return MATH_DOLLAR_DOUBLE; } -yy154: +yy135: ++YYCURSOR; -yy155: +yy136: { return TEXT_LINEBREAK; } -yy156: +yy137: yych = *++YYCURSOR; switch (yych) { - case '\n': goto yy154; - default: goto yy155; + case '\n': goto yy135; + default: goto yy136; } -yy157: +yy138: ++YYCURSOR; switch ((yych = *YYCURSOR)) { - case '(': goto yy223; - case ')': goto yy225; - case '[': goto yy227; - case ']': goto yy229; - default: goto yy158; + case '(': goto yy204; + case ')': goto yy206; + case '[': goto yy208; + case ']': goto yy210; + default: goto yy139; } +yy139: + { return ESCAPED_CHARACTER; } +yy140: + ++YYCURSOR; + { return ESCAPED_CHARACTER; } +yy142: + ++YYCURSOR; + { return ESCAPED_CHARACTER; } +yy144: + ++YYCURSOR; + { return ESCAPED_CHARACTER; } +yy146: + ++YYCURSOR; + { return ESCAPED_CHARACTER; } +yy148: + ++YYCURSOR; + { return ESCAPED_CHARACTER; } +yy150: + ++YYCURSOR; + { return ESCAPED_CHARACTER; } +yy152: + ++YYCURSOR; + { return ESCAPED_CHARACTER; } +yy154: + ++YYCURSOR; + { return ESCAPED_CHARACTER; } +yy156: + ++YYCURSOR; + { return ESCAPED_CHARACTER; } yy158: - { return ESCAPED_CHARACTER; } -yy159: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy161: +yy160: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy163: +yy162: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy165: +yy164: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy167: +yy166: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy169: +yy168: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy171: +yy170: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy173: +yy172: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy175: +yy174: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy177: +yy176: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy179: +yy178: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy181: +yy180: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy183: +yy182: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy185: +yy184: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy187: +yy186: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy189: +yy188: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy191: +yy190: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy193: +yy192: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy195: +yy194: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy197: +yy196: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy199: +yy198: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy201: +yy200: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy203: +yy202: ++YYCURSOR; { return ESCAPED_CHARACTER; } -yy205: - ++YYCURSOR; - { return ESCAPED_CHARACTER; } -yy207: - ++YYCURSOR; - { return ESCAPED_CHARACTER; } -yy209: - ++YYCURSOR; - { return ESCAPED_CHARACTER; } -yy211: - ++YYCURSOR; - { return ESCAPED_CHARACTER; } -yy213: - ++YYCURSOR; - { return ESCAPED_CHARACTER; } -yy215: - ++YYCURSOR; - { return ESCAPED_CHARACTER; } -yy217: - ++YYCURSOR; - { return ESCAPED_CHARACTER; } -yy219: - ++YYCURSOR; - { return ESCAPED_CHARACTER; } -yy221: - ++YYCURSOR; - { return ESCAPED_CHARACTER; } -yy223: +yy204: ++YYCURSOR; { return MATH_PAREN_OPEN; } -yy225: +yy206: ++YYCURSOR; { return MATH_PAREN_CLOSE; } -yy227: +yy208: ++YYCURSOR; { return MATH_BRACKET_OPEN; } -yy229: +yy210: ++YYCURSOR; { return MATH_BRACKET_CLOSE; } -yy231: +yy212: ++YYCURSOR; yych = *YYCURSOR; -yy232: +yy213: switch (yych) { case '0': case '1': @@ -1639,18 +1539,18 @@ yy232: case 'w': case 'x': case 'y': - case 'z': goto yy231; - case ';': goto yy245; + case 'z': goto yy212; + case ';': goto yy226; default: goto yy2; } -yy233: +yy214: yych = *++YYCURSOR; switch (yych) { case 'M': - case 'm': goto yy244; - default: goto yy232; + case 'm': goto yy225; + default: goto yy213; } -yy234: +yy215: yych = *++YYCURSOR; switch (yych) { case '0': @@ -1662,18 +1562,18 @@ yy234: case '6': case '7': case '8': - case '9': goto yy236; + case '9': goto yy217; case 'X': - case 'x': goto yy235; + case 'x': goto yy216; default: goto yy2; } -yy235: +yy216: yych = *++YYCURSOR; switch (yych) { case ';': goto yy2; - default: goto yy241; + default: goto yy222; } -yy236: +yy217: ++YYCURSOR; yych = *YYCURSOR; switch (yych) { @@ -1686,17 +1586,17 @@ yy236: case '6': case '7': case '8': - case '9': goto yy236; - case ';': goto yy238; + case '9': goto yy217; + case ';': goto yy219; default: goto yy2; } -yy238: +yy219: ++YYCURSOR; { return HTML_ENTITY; } -yy240: +yy221: ++YYCURSOR; yych = *YYCURSOR; -yy241: +yy222: switch (yych) { case '0': case '1': @@ -1745,246 +1645,311 @@ yy241: case 'c': case 'd': case 'e': - case 'f': goto yy240; - case ';': goto yy242; + case 'f': goto yy221; + case ';': goto yy223; default: goto yy2; } -yy242: +yy223: ++YYCURSOR; { return HTML_ENTITY; } -yy244: +yy225: yych = *++YYCURSOR; switch (yych) { case 'P': - case 'p': goto yy247; - default: goto yy232; + case 'p': goto yy228; + default: goto yy213; } -yy245: +yy226: ++YYCURSOR; { return HTML_ENTITY; } -yy247: +yy228: yych = *++YYCURSOR; switch (yych) { - case ';': goto yy248; - default: goto yy232; + case ';': goto yy229; + default: goto yy213; } -yy248: +yy229: ++YYCURSOR; { return AMPERSAND_LONG; } -yy250: +yy231: yych = *++YYCURSOR; switch (yych) { - case '.': goto yy254; + case '.': goto yy235; default: goto yy2; } -yy251: +yy232: yych = *++YYCURSOR; switch (yych) { - case '.': goto yy252; + case '.': goto yy233; default: goto yy2; } -yy252: +yy233: ++YYCURSOR; { return ELLIPSIS; } -yy254: +yy235: yych = *++YYCURSOR; switch (yych) { - case ' ': goto yy255; + case ' ': goto yy236; default: goto yy2; } +yy236: + yych = *++YYCURSOR; + switch (yych) { + case '.': goto yy237; + default: goto yy2; + } +yy237: + ++YYCURSOR; + { return ELLIPSIS; } +yy239: + ++YYCURSOR; + { return QUOTE_RIGHT_ALT; } +yy241: + ++YYCURSOR; + { return BRACE_DOUBLE_RIGHT; } +yy243: + ++YYCURSOR; + { return BRACKET_IMAGE_LEFT; } +yy245: + ++YYCURSOR; + { return BRACKET_VARIABLE_LEFT; } +yy247: + ++YYCURSOR; + { return BRACKET_GLOSSARY_LEFT; } +yy249: + ++YYCURSOR; + { return BRACKET_FOOTNOTE_LEFT; } +yy251: + ++YYCURSOR; + { return BRACKET_CITATION_LEFT; } +yy253: + ++YYCURSOR; + { return BRACKET_ABBREVIATION_LEFT; } yy255: yych = *++YYCURSOR; switch (yych) { - case '.': goto yy256; + case '}': goto yy256; default: goto yy2; } yy256: - ++YYCURSOR; - { return ELLIPSIS; } -yy258: - ++YYCURSOR; - { return QUOTE_RIGHT_ALT; } -yy260: - ++YYCURSOR; - { return BRACE_DOUBLE_RIGHT; } -yy262: - ++YYCURSOR; - { return BRACKET_IMAGE_LEFT; } -yy264: - ++YYCURSOR; - { return BRACKET_VARIABLE_LEFT; } -yy266: - ++YYCURSOR; - { return BRACKET_GLOSSARY_LEFT; } -yy268: - ++YYCURSOR; - { return BRACKET_FOOTNOTE_LEFT; } -yy270: - ++YYCURSOR; - { return BRACKET_CITATION_LEFT; } -yy272: - ++YYCURSOR; - { return BRACKET_ABBREVIATION_LEFT; } -yy274: - yych = *++YYCURSOR; - switch (yych) { - case '}': goto yy275; - default: goto yy2; - } -yy275: ++YYCURSOR; { return CRITIC_HI_CLOSE; } -yy277: +yy258: yych = *++YYCURSOR; switch (yych) { - case '}': goto yy280; + case '}': goto yy261; default: goto yy2; } -yy278: +yy259: ++YYCURSOR; { return CRITIC_SUB_DIV; } -yy280: +yy261: ++YYCURSOR; { return CRITIC_SUB_CLOSE; } -yy282: +yy263: yych = *++YYCURSOR; switch (yych) { - case '-': goto yy286; + case '-': goto yy267; default: goto yy2; } -yy283: +yy264: yych = *++YYCURSOR; switch (yych) { - case '}': goto yy284; + case '}': goto yy265; default: goto yy2; } -yy284: +yy265: ++YYCURSOR; { return CRITIC_COM_CLOSE; } +yy267: + yych = *++YYCURSOR; + switch (yych) { + case '-': goto yy268; + default: goto yy2; + } +yy268: + ++YYCURSOR; + { return HTML_COMMENT_START; } +yy270: + ++YYCURSOR; + switch ((yych = *YYCURSOR)) { + case '-': goto yy276; + case '>': goto yy274; + case '}': goto yy272; + default: goto yy271; + } +yy271: + { return DASH_N; } +yy272: + ++YYCURSOR; + { return CRITIC_DEL_CLOSE; } +yy274: + ++YYCURSOR; + { return HTML_COMMENT_STOP; } +yy276: + ++YYCURSOR; + { return DASH_M; } +yy278: + yych = *++YYCURSOR; + switch (yych) { + case '}': goto yy279; + default: goto yy2; + } +yy279: + ++YYCURSOR; + { return CRITIC_ADD_CLOSE; } +yy281: + ++YYCURSOR; + switch ((yych = *YYCURSOR)) { + case '=': goto yy303; + default: goto yy282; + } +yy282: + { return RAW_FILTER_LEFT; } +yy283: + yyaccept = 16; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case 'T': goto yy297; + default: goto yy284; + } +yy284: + { return BRACE_DOUBLE_LEFT; } +yy285: + yych = *++YYCURSOR; + switch (yych) { + case '~': goto yy295; + default: goto yy2; + } yy286: yych = *++YYCURSOR; switch (yych) { - case '-': goto yy287; + case '>': goto yy293; default: goto yy2; } yy287: - ++YYCURSOR; - { return HTML_COMMENT_START; } + yych = *++YYCURSOR; + switch (yych) { + case '-': goto yy291; + default: goto yy2; + } +yy288: + yych = *++YYCURSOR; + switch (yych) { + case '+': goto yy289; + default: goto yy2; + } yy289: ++YYCURSOR; - switch ((yych = *YYCURSOR)) { - case '-': goto yy295; - case '>': goto yy293; - case '}': goto yy291; - default: goto yy290; - } -yy290: - { return DASH_N; } + { return CRITIC_ADD_OPEN; } yy291: ++YYCURSOR; - { return CRITIC_DEL_CLOSE; } + { return CRITIC_DEL_OPEN; } yy293: ++YYCURSOR; - { return HTML_COMMENT_STOP; } + { return CRITIC_COM_OPEN; } yy295: ++YYCURSOR; - { return DASH_M; } + { return CRITIC_SUB_OPEN; } yy297: yych = *++YYCURSOR; switch (yych) { - case '}': goto yy298; + case 'O': goto yy298; default: goto yy2; } yy298: - ++YYCURSOR; - { return CRITIC_ADD_CLOSE; } + yych = *++YYCURSOR; + switch (yych) { + case 'C': goto yy299; + default: goto yy2; + } +yy299: + yych = *++YYCURSOR; + switch (yych) { + case '}': goto yy300; + default: goto yy2; + } yy300: - ++YYCURSOR; - switch ((yych = *YYCURSOR)) { - case '=': goto yy322; - default: goto yy301; + yych = *++YYCURSOR; + switch (yych) { + case '}': goto yy301; + default: goto yy2; } yy301: - { return RAW_FILTER_LEFT; } -yy302: + ++YYCURSOR; + { return TOC; } +yy303: + ++YYCURSOR; + { return CRITIC_HI_OPEN; } +yy305: + YYCTXMARKER = YYCURSOR + 1; + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '\t': goto yy309; + case ' ': goto yy306; + case 0xC2: goto yy308; + default: goto yy7; + } +yy306: + yyaccept = 17; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '\n': goto yy313; + case '\r': goto yy315; + case ' ': goto yy311; + case 0xC2: goto yy312; + default: goto yy307; + } +yy307: + { return NON_INDENT_SPACE; } +yy308: + yych = *++YYCURSOR; + switch (yych) { + case 0xA0: goto yy306; + default: goto yy2; + } +yy309: + ++YYCURSOR; + YYCURSOR = YYCTXMARKER; + { return NON_INDENT_SPACE; } +yy311: + yyaccept = 17; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '\n': goto yy313; + case '\r': goto yy315; + case ' ': goto yy325; + case 0xC2: goto yy327; + default: goto yy307; + } +yy312: + yych = *++YYCURSOR; + switch (yych) { + case 0xA0: goto yy311; + default: goto yy2; + } +yy313: yyaccept = 18; yych = *(YYMARKER = ++YYCURSOR); switch (yych) { - case 'T': goto yy316; - default: goto yy303; + case ' ': goto yy316; + default: goto yy314; } -yy303: - { return BRACE_DOUBLE_LEFT; } -yy304: - yych = *++YYCURSOR; - switch (yych) { - case '~': goto yy314; - default: goto yy2; - } -yy305: - yych = *++YYCURSOR; - switch (yych) { - case '>': goto yy312; - default: goto yy2; - } -yy306: - yych = *++YYCURSOR; - switch (yych) { - case '-': goto yy310; - default: goto yy2; - } -yy307: - yych = *++YYCURSOR; - switch (yych) { - case '+': goto yy308; - default: goto yy2; - } -yy308: - ++YYCURSOR; - { return CRITIC_ADD_OPEN; } -yy310: - ++YYCURSOR; - { return CRITIC_DEL_OPEN; } -yy312: - ++YYCURSOR; - { return CRITIC_COM_OPEN; } yy314: - ++YYCURSOR; - { return CRITIC_SUB_OPEN; } + { return TEXT_LINEBREAK; } +yy315: + yyaccept = 18; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '\n': goto yy313; + case ' ': goto yy316; + default: goto yy314; + } yy316: + YYCTXMARKER = YYCURSOR + 1; yych = *++YYCURSOR; switch (yych) { - case 'O': goto yy317; - default: goto yy2; - } -yy317: - yych = *++YYCURSOR; - switch (yych) { - case 'C': goto yy318; - default: goto yy2; - } -yy318: - yych = *++YYCURSOR; - switch (yych) { - case '}': goto yy319; - default: goto yy2; - } -yy319: - yych = *++YYCURSOR; - switch (yych) { - case '}': goto yy320; - default: goto yy2; - } -yy320: - ++YYCURSOR; - { return TOC; } -yy322: - ++YYCURSOR; - { return CRITIC_HI_OPEN; } -yy324: - yych = *++YYCURSOR; - YYCTXMARKER = YYCURSOR; - switch (yych) { case 0x00: case 0x01: case 0x02: @@ -2108,7 +2073,7 @@ yy324: case '|': case '}': case '~': - case 0x7F: goto yy325; + case 0x7F: goto yy317; case 0xC2: case 0xC3: case 0xC4: @@ -2138,8 +2103,8 @@ yy324: case 0xDC: case 0xDD: case 0xDE: - case 0xDF: goto yy327; - case 0xE0: goto yy328; + case 0xDF: goto yy319; + case 0xE0: goto yy320; case 0xE1: case 0xE2: case 0xE3: @@ -2154,247 +2119,566 @@ yy324: case 0xEC: case 0xED: case 0xEE: - case 0xEF: goto yy329; - case 0xF0: goto yy330; + case 0xEF: goto yy321; + case 0xF0: goto yy322; case 0xF1: case 0xF2: - case 0xF3: goto yy331; - case 0xF4: goto yy332; + case 0xF3: goto yy323; + case 0xF4: goto yy324; + default: goto yy2; + } +yy317: + ++YYCURSOR; + YYCURSOR = YYCTXMARKER; + { return TEXT_LINEBREAK_SP; } +yy319: + yych = *++YYCURSOR; + switch (yych) { + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: goto yy317; + default: goto yy2; + } +yy320: + yych = *++YYCURSOR; + switch (yych) { + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: goto yy319; + default: goto yy2; + } +yy321: + yych = *++YYCURSOR; + switch (yych) { + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: goto yy319; + default: goto yy2; + } +yy322: + yych = *++YYCURSOR; + switch (yych) { + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: goto yy321; + default: goto yy2; + } +yy323: + yych = *++YYCURSOR; + switch (yych) { + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: goto yy321; + default: goto yy2; + } +yy324: + yych = *++YYCURSOR; + switch (yych) { + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: goto yy321; default: goto yy2; } yy325: - ++YYCURSOR; - YYCURSOR = YYCTXMARKER; - { return TEXT_NL_SP; } + yyaccept = 19; + yych = *(YYMARKER = ++YYCURSOR); + switch (yych) { + case '\n': goto yy313; + case '\r': goto yy315; + case ' ': goto yy328; + case 0xC2: goto yy330; + default: goto yy326; + } +yy326: + { return INDENT_SPACE; } yy327: yych = *++YYCURSOR; switch (yych) { - case 0x80: - case 0x81: - case 0x82: - case 0x83: - case 0x84: - case 0x85: - case 0x86: - case 0x87: - case 0x88: - case 0x89: - case 0x8A: - case 0x8B: - case 0x8C: - case 0x8D: - case 0x8E: - case 0x8F: - case 0x90: - case 0x91: - case 0x92: - case 0x93: - case 0x94: - case 0x95: - case 0x96: - case 0x97: - case 0x98: - case 0x99: - case 0x9A: - case 0x9B: - case 0x9C: - case 0x9D: - case 0x9E: - case 0x9F: - case 0xA0: - case 0xA1: - case 0xA2: - case 0xA3: - case 0xA4: - case 0xA5: - case 0xA6: - case 0xA7: - case 0xA8: - case 0xA9: - case 0xAA: - case 0xAB: - case 0xAC: - case 0xAD: - case 0xAE: - case 0xAF: - case 0xB0: - case 0xB1: - case 0xB2: - case 0xB3: - case 0xB4: - case 0xB5: - case 0xB6: - case 0xB7: - case 0xB8: - case 0xB9: - case 0xBA: - case 0xBB: - case 0xBC: - case 0xBD: - case 0xBE: - case 0xBF: goto yy325; + case 0xA0: goto yy325; default: goto yy2; } yy328: - yych = *++YYCURSOR; + ++YYCURSOR; + yych = *YYCURSOR; switch (yych) { - case 0xA0: - case 0xA1: - case 0xA2: - case 0xA3: - case 0xA4: - case 0xA5: - case 0xA6: - case 0xA7: - case 0xA8: - case 0xA9: - case 0xAA: - case 0xAB: - case 0xAC: - case 0xAD: - case 0xAE: - case 0xAF: - case 0xB0: - case 0xB1: - case 0xB2: - case 0xB3: - case 0xB4: - case 0xB5: - case 0xB6: - case 0xB7: - case 0xB8: - case 0xB9: - case 0xBA: - case 0xBB: - case 0xBC: - case 0xBD: - case 0xBE: - case 0xBF: goto yy327; - default: goto yy2; - } -yy329: - yych = *++YYCURSOR; - switch (yych) { - case 0x80: - case 0x81: - case 0x82: - case 0x83: - case 0x84: - case 0x85: - case 0x86: - case 0x87: - case 0x88: - case 0x89: - case 0x8A: - case 0x8B: - case 0x8C: - case 0x8D: - case 0x8E: - case 0x8F: - case 0x90: - case 0x91: - case 0x92: - case 0x93: - case 0x94: - case 0x95: - case 0x96: - case 0x97: - case 0x98: - case 0x99: - case 0x9A: - case 0x9B: - case 0x9C: - case 0x9D: - case 0x9E: - case 0x9F: - case 0xA0: - case 0xA1: - case 0xA2: - case 0xA3: - case 0xA4: - case 0xA5: - case 0xA6: - case 0xA7: - case 0xA8: - case 0xA9: - case 0xAA: - case 0xAB: - case 0xAC: - case 0xAD: - case 0xAE: - case 0xAF: - case 0xB0: - case 0xB1: - case 0xB2: - case 0xB3: - case 0xB4: - case 0xB5: - case 0xB6: - case 0xB7: - case 0xB8: - case 0xB9: - case 0xBA: - case 0xBB: - case 0xBC: - case 0xBD: - case 0xBE: - case 0xBF: goto yy327; + case '\n': goto yy313; + case '\r': goto yy315; + case ' ': goto yy328; + case 0xC2: goto yy330; default: goto yy2; } yy330: - yych = *++YYCURSOR; + ++YYCURSOR; + yych = *YYCURSOR; switch (yych) { - case 0x90: - case 0x91: - case 0x92: - case 0x93: - case 0x94: - case 0x95: - case 0x96: - case 0x97: - case 0x98: - case 0x99: - case 0x9A: - case 0x9B: - case 0x9C: - case 0x9D: - case 0x9E: - case 0x9F: - case 0xA0: - case 0xA1: - case 0xA2: - case 0xA3: - case 0xA4: - case 0xA5: - case 0xA6: - case 0xA7: - case 0xA8: - case 0xA9: - case 0xAA: - case 0xAB: - case 0xAC: - case 0xAD: - case 0xAE: - case 0xAF: - case 0xB0: - case 0xB1: - case 0xB2: - case 0xB3: - case 0xB4: - case 0xB5: - case 0xB6: - case 0xB7: - case 0xB8: - case 0xB9: - case 0xBA: - case 0xBB: - case 0xBC: - case 0xBD: - case 0xBE: - case 0xBF: goto yy329; + case 0xA0: goto yy328; default: goto yy2; } yy331: + yych = *++YYCURSOR; + goto yy4; +yy332: + yych = *++YYCURSOR; + switch (yych) { + case '\n': goto yy331; + default: goto yy4; + } +yy333: + YYCTXMARKER = YYCURSOR + 1; + yych = *++YYCURSOR; + switch (yych) { + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case '\v': + case '\f': + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': + case 0x7F: goto yy334; + case 0xC2: + case 0xC3: + case 0xC4: + case 0xC5: + case 0xC6: + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD5: + case 0xD6: + case 0xD7: + case 0xD8: + case 0xD9: + case 0xDA: + case 0xDB: + case 0xDC: + case 0xDD: + case 0xDE: + case 0xDF: goto yy336; + case 0xE0: goto yy337; + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xED: + case 0xEE: + case 0xEF: goto yy338; + case 0xF0: goto yy339; + case 0xF1: + case 0xF2: + case 0xF3: goto yy340; + case 0xF4: goto yy341; + default: goto yy2; + } +yy334: + ++YYCURSOR; + YYCURSOR = YYCTXMARKER; + { return TEXT_NL_SP; } +yy336: yych = *++YYCURSOR; switch (yych) { case 0x80: @@ -2460,10 +2744,238 @@ yy331: case 0xBC: case 0xBD: case 0xBE: - case 0xBF: goto yy329; + case 0xBF: goto yy334; default: goto yy2; } -yy332: +yy337: + yych = *++YYCURSOR; + switch (yych) { + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: goto yy336; + default: goto yy2; + } +yy338: + yych = *++YYCURSOR; + switch (yych) { + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: goto yy336; + default: goto yy2; + } +yy339: + yych = *++YYCURSOR; + switch (yych) { + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: goto yy338; + default: goto yy2; + } +yy340: + yych = *++YYCURSOR; + switch (yych) { + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: goto yy338; + default: goto yy2; + } +yy341: ++YYCURSOR; switch ((yych = *YYCURSOR)) { case 0x80: @@ -2481,7 +2993,7 @@ yy332: case 0x8C: case 0x8D: case 0x8E: - case 0x8F: goto yy329; + case 0x8F: goto yy338; default: goto yy2; } } diff --git a/Sources/libMultiMarkdown/lexer.re b/Sources/libMultiMarkdown/lexer.re index db280f1..291f270 100644 --- a/Sources/libMultiMarkdown/lexer.re +++ b/Sources/libMultiMarkdown/lexer.re @@ -97,7 +97,7 @@ int scan(Scanner * s, const char * stop) { // NL with single space -- this would otherwise be wrapped into a TEXT_PLAIN NL ' ' / [^ \t\r\n] { return TEXT_NL_SP; } - + TEXT_LINEBREAK ' ' / [^ \t\r\n] { return TEXT_LINEBREAK_SP; } "{{TOC}}" { return TOC; } diff --git a/Sources/libMultiMarkdown/mmd.c b/Sources/libMultiMarkdown/mmd.c index aae9858..8a2bce7 100644 --- a/Sources/libMultiMarkdown/mmd.c +++ b/Sources/libMultiMarkdown/mmd.c @@ -374,26 +374,30 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { const char * source = e->dstr->str; token * t = NULL; + token * first_child = line->child; + short temp_short; size_t scan_len; // Skip non-indenting space - if (line->child->type == NON_INDENT_SPACE) { - token_remove_first_child(line); - } else if (line->child->type == TEXT_PLAIN && line->child->len == 1) { - if (source[line->child->start] == ' ') { - token_remove_first_child(line); + if (first_child->type == NON_INDENT_SPACE) { + //token_remove_first_child(line); + first_child = first_child->next; + } else if (first_child->type == TEXT_PLAIN && first_child->len == 1) { + if (source[first_child->start] == ' ') { + //token_remove_first_child(line); + first_child = first_child->next; } } - if (line->child == NULL) { + if (first_child == NULL) { line->type = LINE_EMPTY; return; } - switch (line->child->type) { + switch (first_child->type) { case INDENT_TAB: - if (line_is_empty(line->child)) { + if (line_is_empty(first_child)) { line->type = LINE_EMPTY; e->allow_meta = false; } else { @@ -403,7 +407,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { break; case INDENT_SPACE: - if (line_is_empty(line->child)) { + if (line_is_empty(first_child)) { line->type = LINE_EMPTY; e->allow_meta = false; } else { @@ -423,7 +427,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { case ANGLE_RIGHT: line->type = LINE_BLOCKQUOTE; - line->child->type = MARKER_BLOCKQUOTE; + first_child->type = MARKER_BLOCKQUOTE; break; case BACKTICK: @@ -432,10 +436,10 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { break; } - scan_len = scan_fence_end(&source[line->child->start]); + scan_len = scan_fence_end(&source[first_child->start]); if (scan_len) { - switch (line->child->len) { + switch (first_child->len) { case 3: line->type = LINE_FENCE_BACKTICK_3; break; @@ -451,10 +455,10 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { break; } else { - scan_len = scan_fence_start(&source[line->child->start]); + scan_len = scan_fence_start(&source[first_child->start]); if (scan_len) { - switch (line->child->len) { + switch (first_child->len) { case 3: line->type = LINE_FENCE_BACKTICK_START_3; break; @@ -482,7 +486,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { break; } - if (scan_definition(&source[line->child->start])) { + if (scan_definition(&source[first_child->start])) { line->type = LINE_DEFINITION; } @@ -494,12 +498,12 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { case HASH4: case HASH5: case HASH6: - if (scan_atx(&source[line->child->start])) { - line->type = (line->child->type - HASH1) + LINE_ATX_1; - line->child->type = (line->type - LINE_ATX_1) + MARKER_H1; + if (scan_atx(&source[first_child->start])) { + line->type = (first_child->type - HASH1) + LINE_ATX_1; + first_child->type = (line->type - LINE_ATX_1) + MARKER_H1; // Strip trailing whitespace from '#' sequence - line->child->len = line->child->type - MARKER_H1 + 1; + first_child->len = first_child->type - MARKER_H1 + 1; // Strip trailing '#' sequence if present if (line->child->tail->type == TEXT_NL) { @@ -522,7 +526,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { break; case HTML_COMMENT_START: - if (!line->child->next || !line->child->next->next) { + if (!first_child->next || !first_child->next->next) { line->type = LINE_START_COMMENT; } else { line->type = LINE_PLAIN; @@ -531,7 +535,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { break; case HTML_COMMENT_STOP: - if (!line->child->next || !line->child->next->next) { + if (!first_child->next || !first_child->next->next) { line->type = LINE_STOP_COMMENT; } else { line->type = LINE_PLAIN; @@ -540,19 +544,19 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { break; case TEXT_NUMBER_POSS_LIST: - switch (source[line->child->next->start]) { + switch (source[first_child->next->start]) { case ' ': case '\t': line->type = LINE_LIST_ENUMERATED; - line->child->type = MARKER_LIST_ENUMERATOR; + first_child->type = MARKER_LIST_ENUMERATOR; - switch (line->child->next->type) { + switch (first_child->next->type) { case TEXT_PLAIN: // Strip whitespace between bullet and text - while (char_is_whitespace(source[line->child->next->start])) { - line->child->next->start++; - line->child->next->len--; + while (char_is_whitespace(source[first_child->next->start])) { + first_child->next->start++; + first_child->next->len--; } break; @@ -560,7 +564,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { case INDENT_SPACE: case INDENT_TAB: case NON_INDENT_SPACE: - t = line->child; + t = first_child; while (t->next && ((t->next->type == INDENT_SPACE) || (t->next->type == INDENT_TAB) || @@ -575,7 +579,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { default: line->type = LINE_PLAIN; - line->child->type = TEXT_PLAIN; + first_child->type = TEXT_PLAIN; break; } @@ -584,7 +588,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { case EQUAL: // Could this be a setext heading marker? - if (scan_setext(&source[line->child->start])) { + if (scan_setext(&source[first_child->start])) { line->type = LINE_SETEXT_1; } else { line->type = LINE_PLAIN; @@ -594,7 +598,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { case DASH_N: case DASH_M: - if (scan_setext(&source[line->child->start])) { + if (scan_setext(&source[first_child->start])) { line->type = LINE_SETEXT_2; break; } @@ -602,14 +606,14 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { case STAR: case UL: // Could this be a horizontal rule? - t = line->child->next; - temp_short = line->child->len; + t = first_child->next; + temp_short = first_child->len; while (t) { switch (t->type) { case DASH_N: case DASH_M: - if (t->type == line->child->type) { + if (t->type == first_child->type) { t = t->next; if (t) { @@ -624,7 +628,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { case STAR: case UL: - if (t->type == line->child->type) { + if (t->type == first_child->type) { t = t->next; temp_short++; } else { @@ -668,7 +672,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { break; } - if (line->child->type == UL) { + if (first_child->type == UL) { // Revert to plain for this type line->type = LINE_PLAIN; break; @@ -676,29 +680,29 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { // If longer than 1 character, then it can't be a list marker, so it's a // plain line - if (line->child->len > 1) { + if (first_child->len > 1) { line->type = LINE_PLAIN; break; } case PLUS: - if (!line->child->next) { + if (!first_child->next) { // TODO: Should this be an empty list item instead?? line->type = LINE_PLAIN; } else { - switch (source[line->child->next->start]) { + switch (source[first_child->next->start]) { case ' ': case '\t': line->type = LINE_LIST_BULLETED; - line->child->type = MARKER_LIST_BULLET; + first_child->type = MARKER_LIST_BULLET; - switch (line->child->next->type) { + switch (first_child->next->type) { case TEXT_PLAIN: // Strip whitespace between bullet and text - while (char_is_whitespace(source[line->child->next->start])) { - line->child->next->start++; - line->child->next->len--; + while (char_is_whitespace(source[first_child->next->start])) { + first_child->next->start++; + first_child->next->len--; } break; @@ -706,7 +710,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { case INDENT_SPACE: case INDENT_TAB: case NON_INDENT_SPACE: - t = line->child; + t = first_child; while (t->next && ((t->next->type == INDENT_SPACE) || (t->next->type == INDENT_TAB) || @@ -821,7 +825,7 @@ void mmd_assign_line_type(mmd_engine * e, token * line) { if ((line->type == LINE_PLAIN) && !(e->extensions & EXT_COMPATIBILITY)) { // Check if this is a potential table line - token * walker = line->child; + token * walker = first_child; while (walker != NULL) { if (walker->type == PIPE) { @@ -1014,12 +1018,24 @@ token * mmd_tokenize_string(mmd_engine * e, size_t start, size_t len, bool stop_ break; case TEXT_NL_SP: - t = token_new(TEXT_NL, (size_t)(s.start - e->dstr->str), (size_t)(s.cur - s.start - 1)); + case TEXT_LINEBREAK_SP: case TEXT_LINEBREAK: case TEXT_NL: + // We hit the end of a line - if (type != TEXT_NL_SP) - t = token_new(type, (size_t)(s.start - e->dstr->str), (size_t)(s.cur - s.start)); + switch (type) { + case TEXT_NL_SP: + t = token_new(TEXT_NL, (size_t)(s.start - e->dstr->str), (size_t)(s.cur - s.start) - 1); + break; + + case TEXT_LINEBREAK_SP: + t = token_new(TEXT_LINEBREAK, (size_t)(s.start - e->dstr->str), (size_t)(s.cur - s.start) - 1); + break; + + default: + t = token_new(type, (size_t)(s.start - e->dstr->str), (size_t)(s.cur - s.start)); + break; + } token_append_child(line, t); @@ -1043,13 +1059,23 @@ token * mmd_tokenize_string(mmd_engine * e, size_t start, size_t len, bool stop_ } } - if (type == TEXT_NL_SP) { - line = token_new(0, s.cur - e->dstr->str - 1, 0); - t = token_new(NON_INDENT_SPACE, (size_t)(s.cur - e->dstr->str - 1), 1); - token_append_child(line, t); - } else { - line = token_new(0, s.cur - e->dstr->str, 0); - } + switch (type) { + case TEXT_NL_SP: + line = token_new(0, s.cur - e->dstr->str - 1, 0); + t = token_new(NON_INDENT_SPACE, (size_t)(s.cur - e->dstr->str - 1), 1); + token_append_child(line, t); + break; + + case TEXT_LINEBREAK_SP: + line = token_new(0, s.cur - e->dstr->str - 1, 0); + t = token_new(NON_INDENT_SPACE, (size_t)(s.cur - e->dstr->str - 1), 1); + token_append_child(line, t); + break; + + default: + line = token_new(0, s.cur - e->dstr->str, 0); + break; + } break; @@ -1961,7 +1987,7 @@ void strip_line_tokens_from_block(mmd_engine * e, token * block) { #ifndef NDEBUG fprintf(stderr, "Strip line tokens from %d (%lu:%lu) (child %d)\n", block->type, block->start, block->len, block->child->type); - token_tree_describe(block, NULL); + token_tree_describe(block, e->dstr->str); #endif token * l = block->child; @@ -1997,6 +2023,11 @@ void strip_line_tokens_from_block(mmd_engine * e, token * block) { // Move contents of line directly into the parent block while (l != NULL) { + // Remove leading non-indent space from line + if (block->type != BLOCK_CODE_FENCED && l->child && l->child->type == NON_INDENT_SPACE) { + token_remove_first_child(l); + } + switch (l->type) { case LINE_SETEXT_1: case LINE_SETEXT_2: @@ -2036,11 +2067,6 @@ void strip_line_tokens_from_block(mmd_engine * e, token * block) { case LINE_STOP_COMMENT: handle_line: - // Remove leading non-indent space from line - if (block->type != BLOCK_CODE_FENCED && l->child && l->child->type == NON_INDENT_SPACE) { - token_remove_first_child(l); - } - case LINE_INDENTED_TAB: case LINE_INDENTED_SPACE: diff --git a/tests/MMD6Tests/Fenced Code Blocks.fodt b/tests/MMD6Tests/Fenced Code Blocks.fodt index aad64e7..f674b0d 100644 --- a/tests/MMD6Tests/Fenced Code Blocks.fodt +++ b/tests/MMD6Tests/Fenced Code Blocks.fodt @@ -303,7 +303,7 @@ office:mimetype="application/vnd.oasis.opendocument.text"> <p>foo</p> -foobarbar foo +foobar bar foo foo diff --git a/tests/MMD6Tests/Fenced Code Blocks.html b/tests/MMD6Tests/Fenced Code Blocks.html index b048f38..e52a091 100644 --- a/tests/MMD6Tests/Fenced Code Blocks.html +++ b/tests/MMD6Tests/Fenced Code Blocks.html @@ -42,7 +42,7 @@ bar bar -bar + bar foo diff --git a/tests/MMD6Tests/Fenced Code Blocks.tex b/tests/MMD6Tests/Fenced Code Blocks.tex index c770be1..4a710c3 100644 --- a/tests/MMD6Tests/Fenced Code Blocks.tex +++ b/tests/MMD6Tests/Fenced Code Blocks.tex @@ -48,7 +48,7 @@ foo bar -bar + bar foo \end{verbatim}