<commit_before>/* Todo:
 *  - Comments justifying and explaining every rule.
 */

lexer grammar CreoleTokens;

/* ***** Headings ***** */

HSt  : LINE '='+ {getText().trim().length() <= 6}? {setText(getText().trim());} ;
HEnd : ' '* '='+? ;

/* ***** Lists ***** */

U1 : LINE '@';
U2 : LINE '@@' ;
U3 : LINE '@@@' ;
U4 : LINE '@@@@' ;
U5 : LINE '@@@@@' ;

O1 : LINE '#' ;
O2 : LINE '##' ;
O3 : LINE '###' ;
O4 : LINE '####' ;
O5 : LINE '#####' ;

/* ***** Horizontal Rules ***** */

Rule : LINE '---' '-'+?;

/* ***** Tables ***** */

CellSep : '|' ;
TdStart : '|' ;
ThStart : '|=' ;

/* ***** Inline Formatting ***** */

Bold     : '**' ;
Italic   : '//' ;
Sthrough : '--' ;
NoWiki   : '{{{' -> mode(PREFORMATTED_INLINE) ;

/* ***** Links ***** */

LiSt  : '[[' -> mode(LINK) ;
ImSt  : '{{' -> mode(LINK) ;

/* ***** Breaks ***** */

InlineBrk : '\\\\' ;

ParBreak  : LineBreak LineBreak+ ;

LineBreak : '\r'? '\n'+? ;

/* ***** Links ***** */

RawUrl    : ALNUM+ ':' ~('['|']'|'"'|'\''|'('|')')+ ~(' '|'['|']'|'"'|'\''|'('|')'|','|'.')+?;

WikiWords : (ALNUM+ ':')? (UPPER ((ALNUM|'.')* ALNUM)*) (UPPER ((ALNUM|'.')* ALNUM)*)+;

/* ***** Miscellaneous ***** */

Any : . ;
WS  : (' '|'\t'|'\r'|'\n')+ -> skip ;

fragment LINE  : ({getCharPositionInLine()==0}? WS? | LineBreak WS?);
fragment ALNUM : (ALPHA | DIGIT) ;
fragment ALPHA : (UPPER | LOWER) ;
fragment UPPER : ('A'..'Z') ;
fragment LOWER : ('a'..'z') ;
fragment DIGIT : ('0'..'9') ;

/* ***** Contextual stuff ***** */


mode LINK;

LiEnd : ']]' -> mode(DEFAULT_MODE) ;
ImEnd : '}}' -> mode(DEFAULT_MODE) ;

Sep : '|' ;

InLink : ~(']'|'}'|'|')+ ;

mode PREFORMATTED_INLINE;

AnyInlineText : ~('\r'|'\n') -> more;

AnyBlockText : AnyInlineText '\n' -> mode(PREFORMATTED_BLOCK), more ;

EndNoWikiInline : '}}}' (~'}' {_input.seek(_input.index()-1);} | EOF) -> mode(DEFAULT_MODE) ;

mode PREFORMATTED_BLOCK;

AnyText   : (' }}}' | . ) -> more ;

EndNoWikiBlock : '}}}' -> mode(DEFAULT_MODE) ;
<commit_msg>Trim whitespace between header prefix and text<commit_after>/* Todo:
 *  - Comments justifying and explaining every rule.
 */

lexer grammar CreoleTokens;

/* ***** Headings ***** */

HSt  : LINE '='+ WS? {getText().trim().length() <= 6}? {setText(getText().trim());} ;
HEnd : ' '* '='+? ;

/* ***** Lists ***** */

U1 : LINE '@';
U2 : LINE '@@' ;
U3 : LINE '@@@' ;
U4 : LINE '@@@@' ;
U5 : LINE '@@@@@' ;

O1 : LINE '#' ;
O2 : LINE '##' ;
O3 : LINE '###' ;
O4 : LINE '####' ;
O5 : LINE '#####' ;

/* ***** Horizontal Rules ***** */

Rule : LINE '---' '-'+?;

/* ***** Tables ***** */

CellSep : '|' ;
TdStart : '|' ;
ThStart : '|=' ;

/* ***** Inline Formatting ***** */

Bold     : '**' ;
Italic   : '//' ;
Sthrough : '--' ;
NoWiki   : '{{{' -> mode(PREFORMATTED_INLINE) ;

/* ***** Links ***** */

LiSt  : '[[' -> mode(LINK) ;
ImSt  : '{{' -> mode(LINK) ;

/* ***** Breaks ***** */

InlineBrk : '\\\\' ;

ParBreak  : LineBreak LineBreak+ ;

LineBreak : '\r'? '\n'+? ;

/* ***** Links ***** */

RawUrl    : ALNUM+ ':' ~('['|']'|'"'|'\''|'('|')')+ ~(' '|'['|']'|'"'|'\''|'('|')'|','|'.')+?;

WikiWords : (ALNUM+ ':')? (UPPER ((ALNUM|'.')* ALNUM)*) (UPPER ((ALNUM|'.')* ALNUM)*)+;

/* ***** Miscellaneous ***** */

Any : . ;
WS  : (' '|'\t'|'\r'|'\n')+ -> skip ;

fragment LINE  : ({getCharPositionInLine()==0}? WS? | LineBreak WS?);
fragment ALNUM : (ALPHA | DIGIT) ;
fragment ALPHA : (UPPER | LOWER) ;
fragment UPPER : ('A'..'Z') ;
fragment LOWER : ('a'..'z') ;
fragment DIGIT : ('0'..'9') ;

/* ***** Contextual stuff ***** */


mode LINK;

LiEnd : ']]' -> mode(DEFAULT_MODE) ;
ImEnd : '}}' -> mode(DEFAULT_MODE) ;

Sep : '|' ;

InLink : ~(']'|'}'|'|')+ ;

mode PREFORMATTED_INLINE;

AnyInlineText : ~('\r'|'\n') -> more;

AnyBlockText : AnyInlineText '\n' -> mode(PREFORMATTED_BLOCK), more ;

EndNoWikiInline : '}}}' (~'}' {_input.seek(_input.index()-1);} | EOF) -> mode(DEFAULT_MODE) ;

mode PREFORMATTED_BLOCK;

AnyText   : (' }}}' | . ) -> more ;

EndNoWikiBlock : '}}}' -> mode(DEFAULT_MODE) ;

{'fraction_non_alphanumeric': 0.33669609079445145, 'fraction_numerical': 0.007566204287515763, 'mean_word_length': 3.320261437908497, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6721004', 'n_tokens_mistral': 1796, 'n_tokens_neox': 1707, 'n_words': 279}