mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-09-28 05:07:42 +00:00
Fix for FireFox plists breaking with text over 4096 bytes.
Closes #842. Reviewed by me.
This commit is contained in:
@@ -300,7 +300,7 @@ var XML_XML = "xml",
|
||||
|
||||
#define NODE_NAME(anXMLNode) (String(anXMLNode.nodeName))
|
||||
#define NODE_TYPE(anXMLNode) (anXMLNode.nodeType)
|
||||
#define NODE_VALUE(anXMLNode) (String(anXMLNode.nodeValue))
|
||||
#define TEXT_CONTENT(anXMLNode) (anXMLNode.textContent || (anXMLNode.textContent !== "" && textContent([anXMLNode])))
|
||||
#define FIRST_CHILD(anXMLNode) (anXMLNode.firstChild)
|
||||
#define NEXT_SIBLING(anXMLNode) (anXMLNode.nextSibling)
|
||||
#define PARENT_NODE(anXMLNode) (anXMLNode.parentNode)
|
||||
@@ -317,8 +317,25 @@ var XML_XML = "xml",
|
||||
#define PLIST_NEXT_SIBLING(anXMLNode) while ((anXMLNode = NEXT_SIBLING(anXMLNode)) && IS_WHITESPACE(anXMLNode)) ;
|
||||
#define PLIST_FIRST_CHILD(anXMLNode) anXMLNode = FIRST_CHILD(anXMLNode); if (anXMLNode !== NULL && IS_WHITESPACE(anXMLNode)) PLIST_NEXT_SIBLING(anXMLNode)
|
||||
|
||||
// FIXME: no first child?
|
||||
#define CHILD_VALUE(anXMLNode) (NODE_VALUE(FIRST_CHILD(anXMLNode)))
|
||||
var textContent = function(nodes)
|
||||
{
|
||||
var text = "",
|
||||
index = 0,
|
||||
count = nodes.length;
|
||||
|
||||
for (; index < count; ++index)
|
||||
{
|
||||
var node = nodes[index];
|
||||
|
||||
if (node.nodeType === 3 || node.nodeType === 4)
|
||||
text += node.nodeValue;
|
||||
|
||||
else if (node.nodeType !== 8)
|
||||
text += textContent(node.childNodes);
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
var _plist_traverseNextNode = function(anXMLNode, stayWithin, stack)
|
||||
{
|
||||
@@ -549,7 +566,7 @@ CFPropertyList.propertyListFromXML = function(/*String | XMLNode*/ aStringOrXMLN
|
||||
|
||||
if (NODE_NAME(XMLNode) === PLIST_KEY)
|
||||
{
|
||||
key = CHILD_VALUE(XMLNode);
|
||||
key = TEXT_CONTENT(XMLNode);
|
||||
PLIST_NEXT_SIBLING(XMLNode);
|
||||
}
|
||||
|
||||
@@ -562,15 +579,15 @@ CFPropertyList.propertyListFromXML = function(/*String | XMLNode*/ aStringOrXMLN
|
||||
containers.push(object);
|
||||
break;
|
||||
|
||||
case PLIST_NUMBER_REAL: object = parseFloat(CHILD_VALUE(XMLNode));
|
||||
case PLIST_NUMBER_REAL: object = parseFloat(TEXT_CONTENT(XMLNode));
|
||||
break;
|
||||
case PLIST_NUMBER_INTEGER: object = parseInt(CHILD_VALUE(XMLNode), 10);
|
||||
case PLIST_NUMBER_INTEGER: object = parseInt(TEXT_CONTENT(XMLNode), 10);
|
||||
break;
|
||||
|
||||
case PLIST_STRING: if (HAS_ATTRIBUTE_VALUE(XMLNode, "type", "base64"))
|
||||
object = FIRST_CHILD(XMLNode) ? CFData.decodeBase64ToString(CHILD_VALUE(XMLNode)) : "";
|
||||
object = FIRST_CHILD(XMLNode) ? CFData.decodeBase64ToString(TEXT_CONTENT(XMLNode)) : "";
|
||||
else
|
||||
object = decodeHTMLComponent(FIRST_CHILD(XMLNode) ? CHILD_VALUE(XMLNode) : "");
|
||||
object = decodeHTMLComponent(FIRST_CHILD(XMLNode) ? TEXT_CONTENT(XMLNode) : "");
|
||||
|
||||
break;
|
||||
|
||||
@@ -580,7 +597,7 @@ CFPropertyList.propertyListFromXML = function(/*String | XMLNode*/ aStringOrXMLN
|
||||
break;
|
||||
|
||||
case PLIST_DATA: object = new CFMutableData();
|
||||
object.bytes = FIRST_CHILD(XMLNode) ? CFData.decodeBase64ToArray(CHILD_VALUE(XMLNode), YES) : [];
|
||||
object.bytes = FIRST_CHILD(XMLNode) ? CFData.decodeBase64ToArray(TEXT_CONTENT(XMLNode), YES) : [];
|
||||
break;
|
||||
|
||||
default: throw new Error("*** " + NODE_NAME(XMLNode) + " tag not recognized in Plist.");
|
||||
|
||||
Reference in New Issue
Block a user