first commit
diff --git a/src/encoding/BinaryXMLDecoder.js b/src/encoding/BinaryXMLDecoder.js
new file mode 100644
index 0000000..4a8b1c4
--- /dev/null
+++ b/src/encoding/BinaryXMLDecoder.js
@@ -0,0 +1,89 @@
+var MARK_LEN=512;
+var DEBUG_MAX_LEN = 32768;
+
+var BinaryXMLDecoder = new BinaryXMLDecoder(_Istream){
+ this.Istream = _Istream;
+
+};
+
+
+BinaryXMLDecoder.prototype.readStartElement =function(
+ //String
+ startTag,
+ //TreeMap<String, String>
+ attributes) {
+
+ try {
+ BinaryXMLCodec.TypeAndVal tv = BinaryXMLCodec.decodeTypeAndVal(this.Istream);
+
+ if (null == tv) {
+ throw new Exception("Expected start element: " + startTag + " got something not a tag.");
+ }
+
+ String decodedTag = null;
+
+ if (tv.type() == BinaryXMLCodec.XML_TAG) {
+
+ decodedTag = BinaryXMLCodec.decodeUString(this.Istream, tv.val()+1);
+
+ } else if (tv.type() == BinaryXMLCodec.XML_DTAG) {
+ decodedTag = tagToString(tv.val());
+ }
+
+ if ((null == decodedTag) || (!decodedTag.equals(startTag))) {
+ throw new Exception("Expected start element: " + startTag + " got: " + decodedTag + "(" + tv.val() + ")");
+ }
+
+ if (null != attributes) {
+ readAttributes(attributes);
+ }
+
+ } catch (e) {
+ throw new Exception("readStartElement", e);
+ }
+};
+
+BinaryXMLDecoder.prototype.readAttributes = function(
+ //TreeMap<String,String>
+ attributes){
+
+ if (null == attributes) {
+ return;
+ }
+
+ try {
+
+ BinaryXMLCodec.TypeAndVal nextTV = BinaryXMLCodec.peekTypeAndVal(_istream);
+
+ while ((null != nextTV) && ((BinaryXMLCodec.XML_ATTR == nextTV.type()) ||
+ (BinaryXMLCodec.XML_DATTR == nextTV.type()))) {
+
+ BinaryXMLCodec.TypeAndVal thisTV = BinaryXMLCodec.decodeTypeAndVal(this.Istream);
+
+ var attributeName = null;
+ if (BinaryXMLCodec.XML_ATTR == thisTV.type()) {
+
+ attributeName = BinaryXMLCodec.decodeUString(_istream, thisTV.val()+1);
+
+ } else if (BinaryXMLCodec.XML_DATTR == thisTV.type()) {
+ // DKS TODO are attributes same or different dictionary?
+ attributeName = tagToString(thisTV.val());
+ if (null == attributeName) {
+ throw new ContentDecodingException("Unknown DATTR value" + thisTV.val());
+ }
+ }
+
+ var attributeValue = BinaryXMLCodec.decodeUString(_istream);
+
+ attributes.put(attributeName, attributeValue);
+
+ nextTV = BinaryXMLCodec.peekTypeAndVal(_istream);
+ }
+
+ } catch ( e) {
+
+ throw new ContentDecodingException("readStartElement", e);
+ }
+};
+
+//TODO
\ No newline at end of file