code: public Map<String, String> getKeywordMap() {
          if (keywords == null) {
              TreeMap<String, String> m = null;
              if (setToKeywordStart()) {
                  // trim spaces and convert to lower case, both keywords and values.
                  do {
                      String key = getKeyword();
                      if (key.length() == 0) {
                          break;
                      }
                      char c = next();
                      if (c != KEYWORD_ASSIGN) {
                          // throw new IllegalArgumentException("key '" + key + "' missing a value.");
                          if (c == DONE) {
                              break;
                          } else {
                              continue;
                          }
                      }
                      String value = getValue();
                      if (value.length() == 0) {
                          // throw new IllegalArgumentException("key '" + key + "' missing a value.");
                          continue;
                      }
                      if (m == null) {
                          m = new TreeMap<String, String>(getKeyComparator());
                      } else if (m.containsKey(key)) {
                          // throw new IllegalArgumentException("key '" + key + "' already has a value.");
                          continue;
                      }
                      m.put(key, value);
                  } while (next() == ITEM_SEPARATOR);
              }
              keywords = m != null ? m : Collections.<String, String>emptyMap();
          }
  
          return keywords;
      }
docs: Returns a map of the keywords and values, or null if there are none.