Пример #1
0
  public List<BBCodeItem> parse(String text) {
    List<BBCodeItem> bbCodeItems = new ArrayList<>();

    BBCodeLexer bbCodeLexer = new BBCodeLexer(text);
    Stack<String> tags = new Stack<>();
    IntegerWrapper marker = new IntegerWrapper();

    BBCodeToken bbCodeToken = null;

    while ((bbCodeToken = bbCodeLexer.getNextBBCodeToken()) != null) {
      handleData(bbCodeItems, bbCodeLexer, marker, bbCodeToken, text);

      if (bbCodeToken.getStartTag() == null) {
        handleTagEnd(bbCodeItems, tags, bbCodeToken);

        continue;
      }

      handleTagStart(bbCodeItems, tags, bbCodeToken);

      String startTag = bbCodeToken.getStartTag();

      if (!startTag.equals("code")) {
        continue;
      }

      while (true) {
        bbCodeToken = bbCodeLexer.getNextBBCodeToken();

        if (bbCodeToken == null) {
          break;
        }

        String endTag = GetterUtil.getString(bbCodeToken.getEndTag());

        if (endTag.equals("code")) {
          break;
        }
      }

      handleData(bbCodeItems, bbCodeLexer, marker, bbCodeToken, text);

      if (bbCodeToken != null) {
        handleTagEnd(bbCodeItems, tags, bbCodeToken);
      } else {
        break;
      }
    }

    handleData(bbCodeItems, bbCodeLexer, marker, null, text);
    handleTagEnd(bbCodeItems, tags, null);

    return bbCodeItems;
  }
Пример #2
0
  protected void handleData(
      List<BBCodeItem> bbCodeItems,
      BBCodeLexer bbCodeLexer,
      IntegerWrapper marker,
      BBCodeToken bbCodeToken,
      String data) {

    int length = data.length();

    int lastIndex = length;

    if (bbCodeToken != null) {
      length = bbCodeToken.getStart();

      lastIndex = bbCodeLexer.getLastIndex();
    }

    if (length > marker.getValue()) {
      BBCodeItem bbCodeItem =
          new BBCodeItem(TYPE_DATA, null, data.substring(marker.getValue(), length));

      bbCodeItems.add(bbCodeItem);
    }

    marker.setValue(lastIndex);
  }