code: private void parseArgs(MessageArgsParser parser) {
      while (tag.peek() != Chars.EOF) {
        tag.skip(COMMA_WS);
  
        // Look for the argument key
        if (!tag.seek(IDENTIFIER, choice)) {
          return;
        }
  
        // Parse the <key>(:<value>)? sequence
        String key = choice.toString();
        tag.jump(choice);
        if (tag.seek(ARG_SEP, choice)) {
          tag.jump(choice);
          if (tag.seek(ARG_VAL, choice)) {
            tag.jump(choice);
            parser.set(key, choice.toString());
          } else {
            parser.set(key, "");
          }
        } else {
          parser.set(key, "");
          if (!tag.seek(COMMA_WS, choice)) {
            return;
          }
        }
      }
    }
docs: Parse a list of zero or more arguments of the form:  <key>:<value>.  The ":<value>" is
  optional and will set the key = null.