///////////////////////////////////////////////////////////////////////////
// Copyright (C) Wizardry and Steamworks 2011 - License: GNU GPLv3 //
// Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
// rights of fair usage, the disclaimer and warranty conditions. //
///////////////////////////////////////////////////////////////////////////
string wasStAX_GetNodeValue(string xmlStream, string node) {
list stream = llParseString2List(xmlStream, [" "], ["<", ">", "/"]);
integer size = llGetListLength(stream);
list StAX = [];
string value = "";
integer ptr = 0;
do {
string current = llList2String(stream, ptr);
string lookback = llList2String(stream, ptr-1);
if(current != "/" && lookback == "<") {
StAX += current;
jump next_tag;
}
if(lookback == "/") {
StAX = llDeleteSubList(StAX, -1, -1);
jump next_tag;
}
if(current != ">" && current != "/" && current != "<")
if(llList2String(StAX,llGetListLength(StAX)-1) == node)
value += current + " ";
@next_tag;
} while(++ptr<size);
if(llGetListLength(StAX) != 0) {
llSay(DEBUG_CHANNEL, "The following tags may be unmatched: " + llDumpList2String(StAX, ",") + ". Please check your file.");
}
return value;
}
key nQuery = NULL_KEY;
integer xLine = 0;
list xList = [];
//pragma inline
string xName = "Input";
string sCnt = "";
default
{
state_entry() {
if(llGetInventoryType(xName) != INVENTORY_NOTECARD) {
llOwnerSay("Failed to find notecard.");
return;
}
nQuery = llGetNotecardLine(xName, xLine);
}
dataserver(key id, string data) {
if(id != nQuery) return;
if(data == EOF) {
llOwnerSay(wasStAX_GetNodeValue(sCnt, "description"));
llOwnerSay(wasStAX_GetNodeValue(sCnt, "usage"));
return;
};
if(data == "") jump next_line;
sCnt += data;
@next_line;
nQuery = llGetNotecardLine(xName, ++xLine);
}
changed(integer change) {
if(change & CHANGED_INVENTORY) llResetScript();
}
}