📄 resourcestatement.java
字号:
/**
* 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 + -