private void processObject(PageSection section, StructNode objectNode) throws IOException {
    String name = objectNode.getName();
    String objectExpression = name.substring(0, name.length() - 1).trim();

    List<String> objectNames =
        findAllMatchingObjectNamesForExpression(objectExpression, objectNode);

    for (String objectName : objectNames) {
      if (objectNode.getChildNodes() != null && objectNode.getChildNodes().size() > 0) {
        ObjectSpecs objectSpecs = findObjectSpecsInSection(section, objectName);
        if (objectSpecs == null) {
          objectSpecs = new ObjectSpecs(objectName);
          section.addObjects(objectSpecs);
        }

        for (StructNode specNode : objectNode.getChildNodes()) {
          if (isRule(specNode.getName())) {
            processObjectLevelRule(objectSpecs, specNode);
          } else {
            processSpec(objectSpecs, specNode);
          }
        }
      }
    }
  }
 public void process(StructNode sectionNode) throws IOException {
   if (sectionNode.getChildNodes() != null) {
     String sectionName =
         sectionNode.getName().substring(1, sectionNode.getName().length() - 1).trim();
     PageSection section = findSection(sectionName);
     if (section == null) {
       section = new PageSection(sectionName);
       if (parentSection != null) {
         parentSection.addSubSection(section);
       } else {
         pageSpecHandler.addSection(section);
       }
     }
     processSection(section, sectionNode.getChildNodes());
   }
 }