code: function richtext(state, startLine, endLine, silent, opts) {
    let pos = state.bMarks[startLine] + state.tShift[startLine],
      max = state.eMarks[startLine],
      contentEndLine;
  
    if (pos >= max) {
      return false;
    }
  
    let line = state.getLines(startLine, startLine + 1, 0, false);
  
    if (!line.startsWith(RICHTEXT_OPEN_MARKER)) {
      return false;
    }
  
    if (silent) {
      return true;
    }
  
    let nextLine = startLine + 1;
    let content = "";
  
    for (; nextLine < endLine; nextLine++) {
      let line = state.getLines(nextLine, nextLine + 1, 0, false);
  
      if (line.trim() === RICHTEXT_CLOSE_MARKER) {
        contentEndLine = nextLine - 1;
        break;
      }
      content += line + "\n";
    }
  
    state.line = contentEndLine + 2;
  
    // convert md subcontent to uu5string
    let uu5content = opts.markdownToUu5.render(content, state.env);
  
    state.tokens.push({
      type: "UU5.RichText.Block",
      uu5string: uu5content
    });
    return true;
  }
docs: Block parser for UU5.RichText.Block .
  
  The rich text block is using following signature:
  
  {richtext}
  ...richtext content...
  
  {/richtext}
  
  @param state
  @param startLine
  @param endLine
  @param silent
  @returns {boolean}