亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? resourcestatement.java

?? 外國人寫的c#語法解析器
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
    {
      Element entry = new Element("entry");
      String expression = currentNode.getText();
      Object value = evaluate(expression, currentNode.getLine(), currentNode.getColumn());
      entry.setAttribute("value", convertToString(value));
      resourceElement.addContent(entry);
      currentNode = currentNode.getNextSibling();
    }
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Converts a "toolbar" 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 convertToolbarEntry(AST sourceNode, Element resourceElement)
  {
    resourceElement.setAttribute("type", "toolbar");

    AST currentNode = sourceNode.getFirstChild();
    if (currentNode != null)
    {
      if (currentNode.getType() == RCParserTokenTypes.RESOURCE_ATTRIBUTES)
      {
        convertResourceAttributes(resourceElement, currentNode);
        currentNode = currentNode.getNextSibling();
      }
      
      // The next two entries are button width and height.
      processEntryWithEvaluation(currentNode, "button-width", resourceElement);
      currentNode = currentNode.getNextSibling();
      processEntryWithEvaluation(currentNode, "button-height", resourceElement);
      currentNode = currentNode.getNextSibling();
      
      // After the button sizes follows the list of toolbar buttons.
      while (currentNode != null)
      {
        switch (currentNode.getType())
        {
          case RCParserTokenTypes.LITERAL_button:
          {
            AST idNode = currentNode.getFirstChild();
            processEntryWithEvaluation(idNode, "button", resourceElement);
            break;
          }
          case RCParserTokenTypes.LITERAL_separator:
          {
            Element separatorElement = new Element("Separator");
            resourceElement.addContent(separatorElement);
            break;
          }
          default:
            // Actually this should never happen as the parser already takes care to find the
            // correct syntax.
            reportError("Invalid toolbar content definition.");
        }
        currentNode = currentNode.getNextSibling();
      }
    }  
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Converts the given symbol value into a string that can be placed into a DOM element.
   * If the object is a string literal then it gets unquoted first.
   * 
   * @param value The value to convert.
   * @return The converted value as string.
   */
  private String convertToString(Object value)
  {
    if (value instanceof AST)
    {
      value = evaluate((AST) value);
    }
    else
      if (value instanceof String)
      {
        String string = (String) value;
        if (string.startsWith("\""))
          return string.substring(1, string.length() - 1);
        else
          return string;
      }
    return value.toString();
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Converts a user defined 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 convertUserDefinedEntry(AST sourceNode, Element resourceElement)
  {
    resourceElement.setAttribute("type", "user-defined");
    AST currentNode = sourceNode.getFirstChild();
    resourceElement.setAttribute("resource-type", currentNode.getText());
    currentNode = currentNode.getNextSibling();
    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();
        }
      }

      if (currentNode != null)
      {
        if (currentNode.getType() == RCParserTokenTypes.FILE_NAME)
        {
          Element fileNameElement = new Element("data");
          resourceElement.addContent(fileNameElement);
          String filename = currentNode.getFirstChild().getText();
          if (filename.startsWith("\""))
            filename = filename.substring(1, filename.length());
          fileNameElement.setAttribute("file-name", filename);
        }
        else
        {
          // Must be raw data, e.g. single literals (string, character, integer etc.) or
          // a collection of hex numbers enclosed by single quotes.
          convertRawDataToXML(currentNode, resourceElement);
        }
      }
    }    
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * Converts a "versioninfo" 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 convertVersionInfoEntry(AST sourceNode, Element resourceElement)
  {
    resourceElement.setAttribute("type", "version-info");

    AST currentNode = sourceNode.getFirstChild();

    // Optional fixed version info part.
    if (currentNode != null)
    {
      while (currentNode.getType() == RCParserTokenTypes.VERSION_FIXED_INFO)
      {
        AST infoNode = currentNode.getFirstChild();
        Element infoElement = new Element("info-detail");
        infoElement.setAttribute("name", infoNode.getText());
        resourceElement.addContent(infoElement);
        convertExpressionList(infoNode.getFirstChild(), infoElement);

        currentNode = currentNode.getNextSibling();
      }
    }

    // Optional common resource info part.
    if (currentNode != null)
    {
      while (currentNode.getType() == RCParserTokenTypes.COMMON_RESOURCE_INFO)
      {
        convertCommonResourceInfo(currentNode, resourceElement);
        currentNode = currentNode.getNextSibling();
      }
    }
    
    // Finally the main content.
    while (currentNode != null)
    {
      switch (currentNode.getType())
      {
        case RCParserTokenTypes.STRING_FILE_INFO:
        {
          Element infoElement = new Element("string-file-info");
          resourceElement.addContent(infoElement);

          AST blockNode = currentNode.getFirstChild();
          while (blockNode != null)
          {
            Element blockElement = new Element("block");
            infoElement.addContent(blockElement);
            
            AST entryNode = blockNode.getFirstChild();
            processEntryWithEvaluationAsAttribute(entryNode, "charset", blockElement);
            entryNode = entryNode.getNextSibling();
            while (entryNode != null)
            {
              Element valueElement = new Element("value");
              blockElement.addContent(valueElement);
              
              AST valueNode = entryNode.getFirstChild();
              valueElement.setAttribute("name", convertToString(valueNode));
              valueNode = valueNode.getNextSibling();
              valueElement.setAttribute("value", convertToString(valueNode));
              
              entryNode = entryNode.getNextSibling();
            }
            
            blockNode = blockNode.getNextSibling();
          }
          break;
        }
        case RCParserTokenTypes.VAR_FILE_INFO:
        {
          Element infoElement = new Element("var-file-info");
          resourceElement.addContent(infoElement);

          AST entryNode = currentNode.getFirstChild();
          while (entryNode != null)
          {
            Element valueElement = new Element("value");
            infoElement.addContent(valueElement);
            
            AST valueNode = entryNode.getFirstChild();
            valueElement.setAttribute("name", convertToString(valueNode.getText()));
            convertExpressionList(valueNode.getNextSibling(), valueElement);
            entryNode = entryNode.getNextSibling();
          }
          break;
        }
      }
      
      currentNode = currentNode.getNextSibling();
    }
  }

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

  /**
   * Adds a new XML node with name <b>name</b> to target. The AST node's value is added as
   * an attribute with name <b>symbol</b> and if that symbol can be evaluated to a single value
   * then this value is also added as attribute with name <b>symbol-value</b>.
   * If the current AST node does not represent a symbol then it is taken as expression, evaluated
   * and added as single attribute <b>value</b>.
   * 
   * @param node The AST node to parse.
   * @param name The name for the new XML node to create.
   * @param target The target XML node to which the new XML node must be added.
   * @return The newly created child XML node.
   */
  private Element processEntryWithEvaluation(AST node, String name, Element target)
  {
    String symbol = node.getText();
    Element element = new Element(name);
    target.addContent(element);
    if (node != null)
    {
      if (node.getType() == RCParserTokenTypes.IDENTIFIER)
      {
        element.setAttribute("symbol", symbol);
        Object symbolValue = evaluate(symbol, node.getLine(), node.getColumn());
        if (symbolValue != null)
          element.setAttribute("symbol-value", convertToString(symbolValue));
      }
      else
        if (node.getType() == RCParserTokenTypes.EXPR)
        {
          Object value = evaluate(node);
          if (value != null)
            element.setAttribute("value", convertToString(value));
          else
            element.setAttribute("value", convertExpressionToText(node.getFirstChild()));
        }
        else
        {
          // There is only a scalar value or an expression. Try to evaluate it and add the result as 
          // attribute to the new XML node. If it cannot be evaluated then add the pure text data.
          Object symbolValue = evaluate(symbol, node.getLine(), node.getColumn());
          if (symbolValue == null)
            element.setAttribute("value", symbol);
          else
            element.setAttribute("value", convertToString(symbolValue));
        }
    }

    return element;
  }

  //------------------------------------------------------------------------------------------------
  
  /**
   * This method is very similar as {@see ResourceStatement#processEntryWithEvaluation}. What is
   * different here is that the result is added as attribute to the target node.
   * 
   * @param node The AST node to parse.
   * @param name The name for the attribute to use.
   * @param target The target XML node to which the attribute is to be attached.
   */
  private void processEntryWithEvaluationAsAttribute(AST node, String name, Element target)
  {
    if (node != null)
    {
      if (node.getType() == RCParserTokenTypes.IDENTIFIER)
      {
        Object value = evaluate(node.getText(), node.getLine(), node.getColumn());
        if (value != null)
          target.setAttribute(name, convertToString(value));
        else
          target.setAttribute(name, convertExpressionToText(node.getFirstChild()));
      }
      else
        if (node.getType() == RCParserTokenTypes.EXPR)
        {
          Object value = evaluate(node);
          if (value != null)
            target.setAttribute(name, convertToString(value));
          else
            target.setAttribute(name, convertExpressionToText(node.getFirstChild()));
        }
        else
        {
          // There is only a scalar value or an expression.
          Object symbolValue = evaluate(node.getText(), node.getLine(), node.getColumn());
          if (symbolValue == null)
            target.setAttribute("value", node.getText());
          else
            target.setAttribute("value", convertToString(symbolValue));
        }
    }
  }

  //------------------------------------------------------------------------------------------------
  
  /** 
   * Conversion routine to create an XML subtree from the current AST subtree.
   * 
   * @param target The target node in the XML DOM where to add the converted data.
   */
  public void convert(Element target)
  {
    switch (getAstNode().getType())
    {
      case RCParserTokenTypes.LITER

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美va亚洲va香蕉在线| 久久久久久久综合| 精品动漫一区二区三区在线观看| 国产日韩欧美制服另类| 午夜精品久久久久| 成人国产在线观看| 精品国产制服丝袜高跟| 亚洲一区二区在线视频| heyzo一本久久综合| 欧美大片一区二区三区| 亚洲激情综合网| 成人一区二区在线观看| 日韩一区二区电影在线| 亚洲一二三四区不卡| 国产不卡在线视频| 2022国产精品视频| 奇米一区二区三区| 欧美另类一区二区三区| 一区二区三区在线观看动漫| 国产91富婆露脸刺激对白 | 亚洲国产精品视频| 粉嫩一区二区三区性色av| 欧美一级视频精品观看| 亚洲一区二区视频在线观看| 色综合夜色一区| 中文字幕精品在线不卡| 国产精品2024| 久久综合九色综合欧美就去吻| 肉色丝袜一区二区| 欧美日韩国产成人在线91| 亚洲人亚洲人成电影网站色| 成人综合激情网| 国产调教视频一区| 国产精品66部| 国产精品久久毛片av大全日韩| 国产黄色精品网站| 国产亚洲精品超碰| 不卡免费追剧大全电视剧网站| 国产精品色呦呦| av激情成人网| 亚洲精品国产无天堂网2021| 色一区在线观看| 亚洲超碰97人人做人人爱| 在线观看日韩精品| 亚洲成人av福利| 日韩午夜三级在线| 精品一区二区日韩| 国产日本欧美一区二区| 91在线porny国产在线看| 国产精品电影院| 日本丶国产丶欧美色综合| 亚洲综合一区在线| 欧美丰满嫩嫩电影| 国产精品一区在线观看乱码 | 日韩三级免费观看| 精品一区二区三区香蕉蜜桃| 国产免费成人在线视频| 一本在线高清不卡dvd| 亚洲国产日韩一区二区| 日韩欧美资源站| 国产精品羞羞答答xxdd| 亚洲色图在线看| 欧美日韩综合色| 久久99精品久久久久| 中文字幕制服丝袜成人av| 欧美在线免费观看亚洲| 精品在线视频一区| 国产精品毛片a∨一区二区三区| 欧美性色aⅴ视频一区日韩精品| 蜜臀精品一区二区三区在线观看 | 最新国产成人在线观看| 6080国产精品一区二区| 成人午夜又粗又硬又大| 天天操天天色综合| 国产喂奶挤奶一区二区三区| 欧美在线看片a免费观看| 久久99国产精品免费| 亚洲激情网站免费观看| 精品捆绑美女sm三区| 色婷婷av一区二区三区之一色屋| 久久国内精品视频| 亚洲乱码国产乱码精品精的特点| 日韩精品资源二区在线| 成人av资源下载| 奇米色一区二区| 亚洲人精品一区| 久久精品亚洲乱码伦伦中文| 欧美日韩国产不卡| 99久久国产综合色|国产精品| 久久aⅴ国产欧美74aaa| 亚洲网友自拍偷拍| 国产精品乱人伦| 精品美女被调教视频大全网站| 一本一道久久a久久精品综合蜜臀| 国产精品亚洲人在线观看| 欧美aaa在线| 一级中文字幕一区二区| 国产精品毛片大码女人| 久久影院电视剧免费观看| 8v天堂国产在线一区二区| 色中色一区二区| 成人激情午夜影院| 国产资源在线一区| 美女任你摸久久 | 欧美精品九九99久久| av在线不卡观看免费观看| 国产乱码精品1区2区3区| 激情丁香综合五月| 奇米影视在线99精品| 日韩精品欧美成人高清一区二区| 一区二区欧美在线观看| 亚洲三级在线免费观看| 国产精品国产精品国产专区不片| 久久久另类综合| 久久久久国产精品免费免费搜索| 精品日韩在线观看| 久久婷婷国产综合精品青草| 欧美一二三四在线| 日韩欧美在线综合网| 日韩精品一区二区三区老鸭窝| 欧美一区二区三区视频免费播放 | 久久久综合网站| 久久久91精品国产一区二区三区| 久久久九九九九| 久久免费美女视频| 中文天堂在线一区| 国产精品乱码久久久久久| 国产精品国产精品国产专区不片| 专区另类欧美日韩| 一区二区三区在线影院| 图片区日韩欧美亚洲| 美国欧美日韩国产在线播放| 激情综合五月婷婷| 成人久久视频在线观看| 色激情天天射综合网| 91.麻豆视频| 欧美va亚洲va在线观看蝴蝶网| 国产欧美一区视频| 亚洲三级在线免费| 日韩电影在线看| 国产精品伊人色| 一本大道久久a久久精品综合| 欧美午夜视频网站| 日韩精品中文字幕一区二区三区 | 亚洲激情网站免费观看| 五月激情综合网| 粉嫩嫩av羞羞动漫久久久| 日本黄色一区二区| 欧美mv日韩mv亚洲| 国产精品网曝门| 天堂蜜桃一区二区三区| 国产精品66部| 欧美日韩极品在线观看一区| 久久久久久亚洲综合影院红桃| 亚洲激情自拍偷拍| 狠狠色综合日日| 一本一道久久a久久精品综合蜜臀| 欧美日韩电影在线| 国产视频一区二区三区在线观看| 亚洲尤物视频在线| 韩国av一区二区三区在线观看| 99re成人精品视频| 欧美一区二区三区四区五区| 亚洲三级久久久| 精品在线视频一区| 欧美日韩精品高清| 国产精品毛片大码女人| 麻豆国产一区二区| 91成人看片片| 亚洲国产高清不卡| 免费av网站大全久久| 91在线精品秘密一区二区| 日韩精品在线看片z| 一区二区三区小说| 成人美女在线观看| 欧美xxx久久| 偷拍日韩校园综合在线| 91免费观看视频在线| 久久久一区二区三区捆绑**| 日韩在线一区二区| 色播五月激情综合网| 国产午夜精品理论片a级大结局| 丝袜亚洲精品中文字幕一区| 91蝌蚪国产九色| 亚洲国产精品99久久久久久久久| 毛片av中文字幕一区二区| 欧美性videosxxxxx| 亚洲精品精品亚洲| 94-欧美-setu| 国产精品色婷婷久久58| 狠狠狠色丁香婷婷综合激情| 日韩一区二区免费高清| 亚洲18色成人| 欧美日韩精品是欧美日韩精品| 亚洲精品国产第一综合99久久 | 国产一区二区三区av电影 | 日韩高清中文字幕一区| 欧美色图一区二区三区| 一区二区三区在线视频观看58 | 精品成人一区二区|