docs: private static Map<String, String> parseAttributes(String attrString) throws ParseException {
  
        AttributeString str = new AttributeString(attrString);
        Map<String, String> attributes = Maps.newLinkedHashMapWithExpectedSize(4); //Preserve order...
        AttrState state = AttrState.NAME;
        String currName = "";
        String currString = "";
        int currPos = 0;
        while((currString = str.nextString()) != null) {
           switch(state) {
              case NAME:
                 if(str.ch == '=') {
                    currName = currString;
                    state = AttrState.VALUE;
                 } else {
                    attributes.put(String.format("$%d", currPos++), currString);
                 }
                 break;
              case VALUE:
                 attributes.put(currName.toLowerCase(), currString);
                 state = AttrState.NAME;
                 break;
           }
        }
        return attributes;
     }