code: protected DCTree blockTag() {
          int p = bp;
          try {
              nextChar();
              if (isIdentifierStart(ch)) {
                  Name name = readTagName();
                  TagParser tp = tagParsers.get(name);
                  if (tp == null) {
                      List<DCTree> content = blockContent();
                      return m.at(p).UnknownBlockTag(name, content);
                  } else {
                      switch (tp.getKind()) {
                          case BLOCK:
                              return tp.parse(p);
                          case INLINE:
                              return erroneous("dc.bad.inline.tag", p);
                      }
                  }
              }
              blockContent();
  
              return erroneous("dc.no.tag.name", p);
          } catch (ParseException e) {
              blockContent();
              return erroneous(e.getMessage(), p);
          }
      }
docs: Read a single block tag, including its content.
  Standard tags parse their content appropriately.
  Non-standard tags are represented by {@link UnknownBlockTag}.