code: private void parseMatch(I_CmsXmlContentLocation linkFormatterLoc, boolean strict) throws ParseException {
  
          Set<String> containerTypes = new HashSet<String>();
          I_CmsXmlContentValueLocation typesLoc = linkFormatterLoc.getSubValue(path(N_MATCH, N_TYPES));
          I_CmsXmlContentValueLocation widthLoc = linkFormatterLoc.getSubValue(path(N_MATCH, N_WIDTH));
          if (typesLoc != null) {
              List<I_CmsXmlContentValueLocation> singleTypeLocs = typesLoc.getSubValues(N_CONTAINER_TYPE);
              for (I_CmsXmlContentValueLocation singleTypeLoc : singleTypeLocs) {
                  String containerType = singleTypeLoc.getValue().getStringValue(m_cms).trim();
                  containerTypes.add(containerType);
              }
              m_containerTypes = containerTypes;
          } else if (widthLoc != null) {
              String widthStr = getString(widthLoc, N_WIDTH, null);
              String maxWidthStr = getString(widthLoc, N_MAX_WIDTH, null);
              try {
                  m_width = Integer.parseInt(widthStr);
              } catch (Exception e) {
                  throw new ParseException("Invalid container width: [" + widthStr + "]", e);
              }
              try {
                  m_maxWidth = Integer.parseInt(maxWidthStr);
              } catch (Exception e) {
                  m_maxWidth = Integer.MAX_VALUE;
                  LOG.debug(maxWidthStr, e);
              }
          } else {
              if (strict) {
                  throw new ParseException("Neither container types nor container widths defined!");
              } else {
                  m_width = -1;
                  m_maxWidth = Integer.MAX_VALUE;
              }
          }
      }
docs: Parses the matching criteria (container types or widths) for the formatter.<p>
  
  @param linkFormatterLoc the formatter value location
  @param strict if we should throw an error for incomplete match
  
  @throws ParseException if parsing goes wrong