docs: public final void mRULE_RICH_TEXT_END() throws RecognitionException {
          try {
              int _type = RULE_RICH_TEXT_END;
              int _channel = DEFAULT_TOKEN_CHANNEL;
              // InternalSARL.g:16908:20: ( '\\uFFFD' ( RULE_IN_RICH_STRING )* ( '\\'\\'\\'' | ( '\\'' ( '\\'' )? )? EOF ) )
              // InternalSARL.g:16908:22: '\\uFFFD' ( RULE_IN_RICH_STRING )* ( '\\'\\'\\'' | ( '\\'' ( '\\'' )? )? EOF )
              {
              match('\uFFFD'); 
              // InternalSARL.g:16908:31: ( RULE_IN_RICH_STRING )*
              loop15:
              do {
                  int alt15=2;
                  int LA15_0 = input.LA(1);
  
                  if ( (LA15_0=='\'') ) {
                      int LA15_1 = input.LA(2);
  
                      if ( (LA15_1=='\'') ) {
                          int LA15_4 = input.LA(3);
  
                          if ( ((LA15_4>='\u0000' && LA15_4<='&')||(LA15_4>='(' && LA15_4<='\uFFFC')||(LA15_4>='\uFFFE' && LA15_4<='\uFFFF')) ) {
                              alt15=1;
                          }
  
  
                      }
                      else if ( ((LA15_1>='\u0000' && LA15_1<='&')||(LA15_1>='(' && LA15_1<='\uFFFC')||(LA15_1>='\uFFFE' && LA15_1<='\uFFFF')) ) {
                          alt15=1;
                      }
  
  
                  }
                  else if ( ((LA15_0>='\u0000' && LA15_0<='&')||(LA15_0>='(' && LA15_0<='\uFFFC')||(LA15_0>='\uFFFE' && LA15_0<='\uFFFF')) ) {
                      alt15=1;
                  }
  
  
                  switch (alt15) {
              	case 1 :
              	    // InternalSARL.g:16908:31: RULE_IN_RICH_STRING
              	    {
              	    mRULE_IN_RICH_STRING(); 
  
              	    }
              	    break;
  
              	default :
              	    break loop15;
                  }
              } while (true);
  
              // InternalSARL.g:16908:52: ( '\\'\\'\\'' | ( '\\'' ( '\\'' )? )? EOF )
              int alt18=2;
              int LA18_0 = input.LA(1);
  
              if ( (LA18_0=='\'') ) {
                  int LA18_1 = input.LA(2);
  
                  if ( (LA18_1=='\'') ) {
                      int LA18_3 = input.LA(3);
  
                      if ( (LA18_3=='\'') ) {
                          alt18=1;
                      }
                      else {
                          alt18=2;}
                  }
                  else {
                      alt18=2;}
              }
              else {
                  alt18=2;}
              switch (alt18) {
                  case 1 :
                      // InternalSARL.g:16908:53: '\\'\\'\\''
                      {
                      match("'''"); 
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:16908:62: ( '\\'' ( '\\'' )? )? EOF
                      {
                      // InternalSARL.g:16908:62: ( '\\'' ( '\\'' )? )?
                      int alt17=2;
                      int LA17_0 = input.LA(1);
  
                      if ( (LA17_0=='\'') ) {
                          alt17=1;
                      }
                      switch (alt17) {
                          case 1 :
                              // InternalSARL.g:16908:63: '\\'' ( '\\'' )?
                              {
                              match('\''); 
                              // InternalSARL.g:16908:68: ( '\\'' )?
                              int alt16=2;
                              int LA16_0 = input.LA(1);
  
                              if ( (LA16_0=='\'') ) {
                                  alt16=1;
                              }
                              switch (alt16) {
                                  case 1 :
                                      // InternalSARL.g:16908:68: '\\''
                                      {
                                      match('\''); 
  
                                      }
                                      break;
  
                              }
  
  
                              }
                              break;
  
                      }
  
                      match(EOF); 
  
                      }
                      break;
  
              }
  
  
              }
  
              state.type = _type;
              state.channel = _channel;
          }
          finally {
          }
      }