⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resourcestatement.java

📁 外国人写的c#语法解析器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
  
  /**
   * Converts the given node, which must be a generic control node in a dialog, to XML
   * 
   * @param node The node to convert.
   * @param element The target element where to add the result to.
   */
  private void convertGenericControl(AST node, Element element)
  {
    Element controlElement = new Element("control");
    element.addContent(controlElement);
    controlElement.setAttribute("type", "generic");
    
    processEntryWithEvaluation(node, "control-text", controlElement);
    node = node.getNextSibling();
    processEntryWithEvaluation(node, "id", controlElement);
    node = node.getNextSibling();
    processEntryWithEvaluation(node, "class-name", controlElement);
    node = node.getNextSibling();
    processEntryWithEvaluation(node, "style", controlElement);

    // Dialog(Ex) generic control trailing.
    node = node.getNextSibling();
    processEntryWithEvaluation(node, "left", controlElement);
    node = node.getNextSibling();
    processEntryWithEvaluation(node, "top", controlElement);
    node = node.getNextSibling();
    processEntryWithEvaluation(node, "width", controlElement);
    node = node.getNextSibling();
    processEntryWithEvaluation(node, "height", controlElement);
    
    // The following entries only appear for DialogEx resource entries.
    node = node.getNextSibling();
    if (node != null)
    {
      processEntryWithEvaluation(node, "exstyle", controlElement);
      node = node.getNextSibling();
      if (node != null)
      {
        processEntryWithEvaluation(node, "help-id", controlElement);

        if (node.getNextSibling() != null)
        {
          Element dataElement = new Element("control-data");
          controlElement.addContent(dataElement);
          do
          {
            node = node.getNextSibling();
            processEntryWithEvaluation(node, "data-element", dataElement);
          }
          while (node != null);
        }
      }
    }
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Converts a "icon" entry to XML.
   * 
   * @param sourceNode The node containing the AST data to convert.
   * @param resourceElement The entry to which the new nodes must be added.
   */
  private void convertIconEntry(AST sourceNode, Element resourceElement)
  {
    resourceElement.setAttribute("type", "icon");

    AST currentNode = sourceNode.getFirstChild();
    if (currentNode != null)
    {
      if (currentNode.getType() == RCParserTokenTypes.RESOURCE_ATTRIBUTES)
      {
        convertResourceAttributes(resourceElement, currentNode);
        currentNode = currentNode.getNextSibling();
      }

      // Must be a file name node.
      String filename = currentNode.getText();
      if (filename.startsWith("\""))
        filename = filename.substring(1, filename.length());
      resourceElement.setAttribute("file-name", filename);
    }    
  }

  //------------------------------------------------------------------------------------------------

  /**
   * Converts a language entry to XML.
   * 
   * @param node The node to convert. Must be a language node.
   * @param target The XML node where to add the new content to.
   */
  private void convertLanguageEntry(AST node, Element target)
  {
    String languageID = "LANG_DEFAULT";
    AST languageNode = node.getFirstChild();
    languageID = languageNode.getText();
    String subLanguageID = "SUBLANG_DEFAULT";
    AST subLanguageNode = null;
    subLanguageNode = languageNode.getNextSibling();
    subLanguageID = subLanguageNode.getText();
    
    Element baseElement = new Element("language");
    target.addContent(baseElement);
    
    Element languageElement = new Element("language-value");
    baseElement.addContent(languageElement);
    languageElement.setAttribute("name", languageID);
    Object value = evaluate(languageID, languageNode.getLine(), languageNode.getColumn());
    if (value == null)
      reportError("Could not evaluate \"" + languageID + "\".");
    else
      languageElement.setAttribute("value", value.toString());

    Element subLanguageElement = new Element("sub-language-value");
    baseElement.addContent(subLanguageElement);
    subLanguageElement.setAttribute("name", subLanguageID);
    value = evaluate(subLanguageID, subLanguageNode.getLine(), subLanguageNode.getColumn());
    if (value == null)
      reportError("Could not evaluate \"" + subLanguageID + "\".");
    else
      subLanguageElement.setAttribute("value", value.toString());
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Converts a "menu" entry to XML.
   * 
   * @param sourceNode The node containing the AST data to convert.
   * @param resourceElement The entry to which the new nodes must be added.
   */
  private void convertMenuEntry(AST sourceNode, Element resourceElement)
  {
    resourceElement.setAttribute("type", "menu");

    AST currentNode = sourceNode.getFirstChild();
    if (currentNode != null)
    {
      if (currentNode.getType() == RCParserTokenTypes.RESOURCE_ATTRIBUTES)
      {
        convertResourceAttributes(resourceElement, currentNode);
        currentNode = currentNode.getNextSibling();
      }

      // Optional common resource info part.
      if (currentNode != null)
      {
        while (currentNode.getType() == RCParserTokenTypes.COMMON_RESOURCE_INFO)
        {
          convertCommonResourceInfo(currentNode, resourceElement);
          currentNode = currentNode.getNextSibling();
        }
      }

      while (currentNode != null)
      {
        convertMenuItem(currentNode, resourceElement);
        currentNode = currentNode.getNextSibling();
      }
    }    
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Converts a "menuex" entry to XML.
   * 
   * @param sourceNode The node containing the AST data to convert.
   * @param resourceElement The entry to which the new nodes must be added.
   */
  private void convertMenuExEntry(AST sourceNode, Element resourceElement)
  {
    resourceElement.setAttribute("type", "menuex");

    AST currentNode = sourceNode.getFirstChild();
    if (currentNode != null)
    {
      if (currentNode.getType() == RCParserTokenTypes.RESOURCE_ATTRIBUTES)
      {
        convertResourceAttributes(resourceElement, currentNode);
        currentNode = currentNode.getNextSibling();
      }

      // Optional common resource info part.
      if (currentNode != null)
      {
        while (currentNode.getType() == RCParserTokenTypes.COMMON_RESOURCE_INFO)
        {
          convertCommonResourceInfo(currentNode, resourceElement);
          currentNode = currentNode.getNextSibling();
        }
      }

      while (currentNode != null)
      {
        convertMenuExItem(currentNode, resourceElement);
        currentNode = currentNode.getNextSibling();
      }
    }    
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Recursively called method to create a nested structure of menu items.
   * 
   * @param node The node containing the entry to convert.
   * @param element The target XML element to add the converted stuff to.
   */
  private void convertMenuExItem(AST node, Element element)
  {
    if (node.getType() == RCParserTokenTypes.LITERAL_menuitem)
    {
      node = node.getFirstChild();
      Element menuItemElement = new Element("menu-item");
      element.addContent(menuItemElement);
      menuItemElement.setAttribute("text", node.getText());
      
      node = node.getNextSibling();
      if (node != null && node.getType() == RCParserTokenTypes.EXPR)
      {
        Object value = evaluate(node);
        if (value != null)
          menuItemElement.setAttribute("id", value.toString());
        else
          menuItemElement.setAttribute("id", convertExpressionToText(node.getFirstChild()));
        node = node.getNextSibling();
        if (node != null && node.getType() == RCParserTokenTypes.EXPR)
        {
          value = evaluate(node);
          if (value != null)
            menuItemElement.setAttribute("type", value.toString());
          else
            menuItemElement.setAttribute("type", convertExpressionToText(node.getFirstChild()));
          node = node.getNextSibling();
          if (node != null && node.getType() == RCParserTokenTypes.EXPR)
          {
            value = evaluate(node);
            if (value != null)
              menuItemElement.setAttribute("state", value.toString());
            else
              menuItemElement.setAttribute("state", convertExpressionToText(node.getFirstChild()));
          }
        }
      }
    }
    else
    {
      // Found a popup menu definition.
      node = node.getFirstChild();
      Element menuItemElement = new Element("popup");
      element.addContent(menuItemElement);
      menuItemElement.setAttribute("text", node.getText());
      
      node = node.getNextSibling();
      if (node != null && node.getType() == RCParserTokenTypes.EXPR)
      {
        Object value = evaluate(node);
        if (value != null)
          menuItemElement.setAttribute("id", value.toString());
        else
          menuItemElement.setAttribute("id", convertExpressionToText(node.getFirstChild()));
        node = node.getNextSibling();
        if (node != null && node.getType() == RCParserTokenTypes.EXPR)
        {
          value = evaluate(node);
          if (value != null)
            menuItemElement.setAttribute("type", value.toString());
          else
            menuItemElement.setAttribute("type", convertExpressionToText(node.getFirstChild()));
          node = node.getNextSibling();
          if (node != null && node.getType() == RCParserTokenTypes.EXPR)
          {
            value = evaluate(node);
            if (value != null)
              menuItemElement.setAttribute("state", value.toString());
            else
              menuItemElement.setAttribute("state", convertExpressionToText(node.getFirstChild()));
            node = node.getNextSibling();
            if (node != null && node.getType() == RCParserTokenTypes.EXPR)
            {
              value = evaluate(node);
              if (value != null)
                menuItemElement.setAttribute("help-id", value.toString());
              else
                menuItemElement.setAttribute("help-id", convertExpressionToText(node.getFirstChild()));
            }
          }
        }
      }
      while (node != null)
      {
        convertMenuExItem(node, menuItemElement);
        node = node.getNextSibling();
      }
    }
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Recursively called method to create a nested structure of menu items.
   * 
   * @param node The node containing the entry to convert.
   * @param element The target XML element to add the converted stuff to.
   */
  private void convertMenuItem(AST node, Element element)
  {
    if (node.getType() == RCParserTokenTypes.LITERAL_menuitem)
    {
      node = node.getFirstChild();
      Element menuItemElement = new Element("menu-item");
      element.addContent(menuItemElement);
      menuItemElement.setAttribute("text", node.getText());
      
      node = node.getNextSibling();
      if (node != null)
      {
        String expression = node.getText();
        Object value = evaluate(expression, node.getLine(), node.getColumn());
        menuItemElement.setAttribute("result", expression);
        if (value != null)
          menuItemElement.setAttribute("result-value", value.toString());
  
        // Optional menu options.
        node = node.getNextSibling();
        while (node != null)
        {
          Element optionElement = new Element("option");
          menuItemElement.addContent(optionElement);
          optionElement.setAttribute("value", node.getText());
          node = node.getNextSibling();
        }
      }
    }
    else
    {
      // Found a popup menu definition.
      node = node.getFirstChild();
      Element menuItemElement = new Element("popup");
      element.addContent(menuItemElement);
      menuItemElement.setAttribute("text", node.getText());
      
      // Optional menu options.
      node = node.getNextSibling();
      while ((node != null) && (node.getType() != RCParserTokenTypes.LITERAL_menuitem) && 
        (node.getType() != RCParserTokenTypes.LITERAL_popup))
      {
        Element optionElement = new Element("option");
        menuItemElement.addContent(optionElement);
        optionElement.setAttribute("value", node.getText());
        node = node.getNextSibling();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -