You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ha...@apache.org on 2016/04/11 00:48:27 UTC
[16/49] git commit: [flex-asjs] [refs/heads/develop] - concat and
toXMLString
concat and toXMLString
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/4be10bf8
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/4be10bf8
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/4be10bf8
Branch: refs/heads/develop
Commit: 4be10bf8371dd4d89d10477e328b2459d8865de7
Parents: 266cf0b
Author: Harbs <ha...@in-tools.com>
Authored: Thu Feb 11 10:43:58 2016 +0200
Committer: Harbs <ha...@in-tools.com>
Committed: Thu Feb 11 10:43:58 2016 +0200
----------------------------------------------------------------------
frameworks/projects/XML/as/src/Namespace.as | 2 +-
frameworks/projects/XML/as/src/XML.as | 133 ++++++++++++++++++++++-
frameworks/projects/XML/as/src/XMLList.as | 11 +-
3 files changed, 143 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4be10bf8/frameworks/projects/XML/as/src/Namespace.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/Namespace.as b/frameworks/projects/XML/as/src/Namespace.as
index ab5e56e..95bb405 100644
--- a/frameworks/projects/XML/as/src/Namespace.as
+++ b/frameworks/projects/XML/as/src/Namespace.as
@@ -109,7 +109,7 @@ package
_uri = value;
}
- private var _prefix:String;
+ private var _prefix:String = null;
public function get prefix():String
{
return _prefix;
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4be10bf8/frameworks/projects/XML/as/src/XML.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/XML.as b/frameworks/projects/XML/as/src/XML.as
index b6abbe9..69d94b5 100644
--- a/frameworks/projects/XML/as/src/XML.as
+++ b/frameworks/projects/XML/as/src/XML.as
@@ -225,6 +225,24 @@ package
return xml;
}
+ static private function namespaceInArray(ns:Namespace,arr:Array,considerPrefix:Boolean=true):Boolean
+ {
+ if(!arr)
+ return false;
+ var i:int;
+ for(i=0;i<arr.length;i++)
+ {
+ if(ns.uri == arr[i].uri)
+ {
+ if(!considerPrefix)
+ return true;
+ if(ns.prefix == arr[i].prefix)
+ return true;
+ }
+ }
+ return false;
+ }
+
static private function trimXMLWhitespace(value:String):String
{
return value.replace(/^\s+|\s+$/gm,'');
@@ -599,6 +617,26 @@ package
return list;
}
+ public function concat(list:*):XMLList
+ {
+ if(list is XML)
+ {
+ var newList:XMLList = new XMLList();
+ newList.appendChild(list);
+ list = newList;
+ }
+ if(!(list is XMLList))
+ throw new TypeError("invalid type");
+
+ var retVal:XMLList = new XMLList();
+ retVal.appendChild(this);
+ var item:XML;
+ for each(item in list)
+ retVal.appendChild(item);
+
+ return retVal;
+ }
+
/**
* Compares the XML object against the given value parameter.
*
@@ -1976,7 +2014,7 @@ package
* @return
*
*/
- public function toXMLString(indentLevel:int=0):String
+ public function toXMLString(indentLevel:int=0,ancestors:Array=[]):String
{
/*
Given an XML object x and an optional argument AncestorNamespaces and an optional argument IndentLevel, ToXMLString converts it to an XML encoded string s by taking the following steps:
@@ -2058,6 +2096,7 @@ package
NOTE Implementations may also preserve insignificant whitespace (e.g., inside and between element tags) and attribute quoting conventions in ToXMLString().
*/
var i:int;
+ var ns:Namespace;
var strArr:Array = [];
var indentArr:Array = [];
@@ -2086,6 +2125,98 @@ package
// We excluded the other types, so it's a normal element
//TODO I'm here...
// step 8.
+ //ancestors
+ var declarations:Array = [];
+ for(i=0;i<_namespaces.length;i++)
+ {
+ if(!namespaceInArray(_namespaces[i],ancestors))
+ declarations.push(new Namespace(_namespaces[i]));
+ }
+ //11
+ for(i=0;i<_attributes.length)
+ {
+ ns = new Namespace(_attributes[i].name().getNamespace(ancestors.concat(declarations)));
+ if(ns.prefix === null)
+ {
+ ns.prefix = "";
+ declarations.push(ns);
+ }
+ }
+ ns = new Namespace(name().getNamespace(ancestors.concat(declarations)));
+ if(ns.prefix === null)
+ {
+ ns.prefix = "";
+ declarations.push(ns);
+ }
+ strArray.push("<");
+ if(ns.prefix)
+ strArr.push(ns.prefix+":");
+ strArray.push(name().localName);
+
+ //attributes and namespace declarations... (15-16)
+ for(i=0;i<declarations.length;i++)
+ {
+ strArray.push(" xmlns");
+ if(declarations[i].prefix)
+ {
+ strArray.push(":");
+ strArray.push(declarations[i].prefix);
+ }
+ strArray.push('="');
+ strArray.push(escapeAttributeValue(declarations[i].uri));
+ strArray.push('"');
+
+ }
+ for(i=0;i<_attributes.length;i++)
+ {
+ strArray.push(" ");
+ // the following seems to be the spec, but it does not make sense to me.
+ //var ans:Namespace = _attributes[i].name().getNamespace(ancestors);
+ var aName:QName = _attributes[i].name();
+ var ans:Namespace = aName.getNamespace(ancestors.concat(declarations));
+ if(ans.prefix)
+ {
+ strArray.push(ans.prefix);
+ strArray.push(":");
+ }
+ strArray.push(aName.localName);
+ strArray.push('="');
+ strArray.push(escapeAttributeValue(_attributes[i].getValue()));
+ strArray.push('"');
+ }
+ // now write elements or close the tag if none exist
+ if(_children.length == 0)
+ {
+ strArray.push("/>");
+ return strArray.join("");
+ }
+ strArray.push(">");
+ var indentChildren:Boolean = _children.length > 1 || (_children.length == 1 && _children[0].nodeKind() != "text");
+ var nextIndentLevel:int;
+ if(XML.prettyPrinting && indentChildren)
+ nextIndentLevel = indentLevel + prettyIndent;
+ else
+ nextIndentLevel = 0;
+ for(i=0;i<_children.length;i++)
+ {
+ //
+ if(XML.prettyPrinting && indentChildren)
+ strArray.push("\n");
+ strArray.push(_children[i].toXMLString(nextIndentLevel,ancestors.concat(declarations)));
+ }
+ if(XML.prettyPrinting && indentChildren)
+ {
+ strArray.push("\n");
+ strArray.push(new Array(indentLevel + 1).join(' '));
+ }
+ strArray.push("</");
+ if(ns.prefix)
+ {
+ strArray.push(ns.prefix);
+ strArray.push(":");
+ }
+ strArray.push(ns.localName);
+ strArray.push(">");
return strArray.join("");
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/4be10bf8/frameworks/projects/XML/as/src/XMLList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/XMLList.as b/frameworks/projects/XML/as/src/XMLList.as
index 264ef3c..e34b765 100644
--- a/frameworks/projects/XML/as/src/XMLList.as
+++ b/frameworks/projects/XML/as/src/XMLList.as
@@ -254,8 +254,17 @@ package
return retVal;
}
- public function concat(list:XMLList):XMLList
+ public function concat(list:*):XMLList
{
+ if(list is XML)
+ {
+ var newList:XMLList = new XMLList();
+ newList.appendChild(list);
+ list = newList;
+ }
+ if(!(list is XMLList))
+ throw new TypeError("invalid type");
+
var retVal:XMLList = this.copy();
var item:XML;
for each(item in list)