Esempio n. 1
0
        bool ProcessToBinToDo(StringBuilder sb, GenMember oGenMember, string oVal)
        {
            bool bRes = false;

            if (oGenMember.bToDoString)
            {
                bRes = true;
                if ("spPr" == oGenMember.sName)
                {
                    sb.AppendFormat("window.global_pptx_content_writer.WriteSpPr(oThis.memory, {0});\r\n", oVal);
                }
                else if ("txPr" == oGenMember.sName || "rich" == oGenMember.sName)
                {
                    sb.AppendFormat("window.global_pptx_content_writer.WriteTextBody(oThis.memory, {0});\r\n", oVal);
                }
                else if ("clrMapOvr" == oGenMember.sName)
                {
                    sb.AppendFormat("//todo;\r\n", oVal);
                }
                else
                {
                    bRes = false;
                }
            }
            return(bRes);
        }
Esempio n. 2
0
        bool ProcessFromBinToDo(StringBuilder sb, GenMember oGenMember, string oVal)
        {
            bool bRes = false;

            if (oGenMember.bToDoString)
            {
                bRes = true;
                if ("spPr" == oGenMember.sName)
                {
                    sb.AppendFormat("res = c_oSerConstants.ReadUnknown;\r\n");
                    //sb.AppendFormat("var oPPTXContentLoader = new CPPTXContentLoader();\r\n");
                    //sb.AppendFormat("{0} = oPPTXContentLoader.ReadShapeProperty(this.stream);\r\n", oVal);
                }
                else if ("txPr" == oGenMember.sName || "rich" == oGenMember.sName)
                {
                    sb.AppendFormat("res = c_oSerConstants.ReadUnknown;\r\n");
                    //sb.AppendFormat("{0} = new CTitle();\r\n", oVal);
                    //sb.AppendFormat("var oPPTXContentLoader = new CPPTXContentLoader();\r\n");
                    //sb.AppendFormat("oPPTXContentLoader.ReadTextBody(null, this.stream,  {0});\r\n", oVal);
                }
                else if ("clrMapOvr" == oGenMember.sName)
                {
                    sb.AppendFormat("res = c_oSerConstants.ReadUnknown;\r\n");
                    //sb.AppendFormat("var clrMapOvr = this.ReadClrOverride(length);\r\n");
                }
                else
                {
                    bRes = false;
                }
            }
            return(bRes);
        }
Esempio n. 3
0
 void ProcessMemberToBin(StringBuilder sb, GenClass oGenClass, GenMember oGenMember, string oVal)
 {
     sb.AppendFormat("if(null != {0})\r\n", oVal);
     sb.AppendFormat("{{\r\n");
     sb.AppendFormat("this.bs.WriteItem({0}, function(){{\r\n", Utils.GetSerEnumElemName(oGenClass.sName, oGenMember.sName));
     if (oGenMember.bToDo || !CanProcessToDoString(oGenMember))
     {
         sb.AppendFormat("//todo\r\n");
     }
     if (!ProcessToBinToDo(sb, oGenMember, oVal))
     {
         if (null != oGenMember.sType)
         {
             GenClass oTemp;
             if (m_mapProcessedClasses.TryGetValue(oGenMember.sType, out oTemp))
             {
                 if (oTemp.bIsEnum)
                 {
                     ProcessJsTypeToBin(sb, oVal, typeof(byte));
                 }
                 else
                 {
                     sb.AppendFormat("oThis.Write{0}({1});\r\n", oGenMember.sType, oVal);
                 }
             }
         }
         else if (null != oGenMember.oSystemType)
         {
             ProcessJsTypeToBin(sb, oVal, oGenMember.oSystemType);
         }
     }
     sb.AppendFormat("}});\r\n", Utils.GetSerEnumElemName(oGenClass.sName, oGenMember.sName));
     sb.AppendFormat("}}\r\n");
 }
Esempio n. 4
0
        void ParseArguments(CodeAttributeArgumentCollection oArguments, GenMember oGenMember)
        {
            CodePrimitiveExpression oPrimitiveExpression = null;
            CodeTypeOfExpression    oTypeOfExpression    = null;
            string sNamespace = null;
            bool?  bForm      = null;

            foreach (CodeAttributeArgument argument in oArguments)
            {
                if ("" == argument.Name)
                {
                    if (argument.Value is CodePrimitiveExpression)
                    {
                        oPrimitiveExpression = argument.Value as CodePrimitiveExpression;
                    }
                    else if (argument.Value is CodeTypeOfExpression)
                    {
                        oTypeOfExpression = argument.Value as CodeTypeOfExpression;
                    }
                }
                else if ("Namespace" == argument.Name)
                {
                    sNamespace = ((CodePrimitiveExpression)argument.Value).Value.ToString();
                }
                else if ("Form" == argument.Name)
                {
                    string sValue = ((CodeFieldReferenceExpression)argument.Value).FieldName;
                    if ("Qualified" == sValue)
                    {
                        bForm = true;
                    }
                    else if ("Unqualified" == sValue)
                    {
                        bForm = false;
                    }
                }
            }
            if (null != oPrimitiveExpression)
            {
                oGenMember.sName = oPrimitiveExpression.Value.ToString();
            }
            if (null != oTypeOfExpression)
            {
                InitMemberType(oGenMember, oTypeOfExpression.Type.BaseType);
            }
            if (null != sNamespace)
            {
                oGenMember.sNamespace = sNamespace;
            }
            if (bForm.HasValue)
            {
                oGenMember.bQualified = bForm.Value;
            }
        }
Esempio n. 5
0
        bool CanProcessToDoString(GenMember oGenMember)
        {
            bool bRes = true;

            if (oGenMember.bToDoString)
            {
                bRes = false;
                if ("spPr" == oGenMember.sName || "clrMapOvr" == oGenMember.sName || "txPr" == oGenMember.sName || "rich" == oGenMember.sName)
                {
                    bRes = true;
                }
            }
            return(bRes);
        }
Esempio n. 6
0
 void InitMemberType(GenMember oGenMember, string sBaseType)
 {
     if (-1 != sBaseType.IndexOf("System."))
     {
         oGenMember.oSystemType = Type.GetType(sBaseType);
         if (null == oGenMember.oSystemType)
         {
             oGenMember.oSystemType = typeof(string);
         }
     }
     else
     {
         oGenMember.sType = sBaseType;
     }
 }
Esempio n. 7
0
 void ProcessArrayTypesToBin(StringBuilder sb, GenClass oGenClass, GenMember oGenMember)
 {
     sb.AppendFormat("{0}.prototype.toBin{1} = function(eType, oVal){{\r\n", Utils.gc_sBinaryChartWriter, oGenMember.sArrayTypesEnumName);
     sb.AppendFormat("var oThis = this;\r\n");
     sb.AppendFormat("switch(eType)\r\n{{\r\n");
     for (int i = 0; i < oGenMember.aArrayTypes.Count; ++i)
     {
         GenMember oTempMember = oGenMember.aArrayTypes[i];
         sb.AppendFormat("case {0}:\r\n{{\r\n", Utils.GetEnumElemName(oGenMember.sArrayTypesEnumName, oTempMember.sName));
         ProcessMemberToBin(sb, oGenClass, oTempMember, "oVal");
         sb.AppendFormat("}}\r\nbreak;\r\n");
     }
     sb.AppendFormat("}}\r\n");
     sb.AppendFormat("}}\r\n");
 }
Esempio n. 8
0
 public void ProcessEnums(StringBuilder sb, List <GenClass> aGenClasses)
 {
     for (int i = 0; i < aGenClasses.Count; ++i)
     {
         GenClass oGenClass = aGenClasses[i];
         for (int j = 0; j < oGenClass.aMembers.Count; ++j)
         {
             GenMember oGenMember = oGenClass.aMembers[j];
             if (!oGenMember.bInternal)
             {
                 sb.AppendFormat("var {0} = {1};\r\n", Utils.GetEnumElemName(oGenClass.sName, oGenMember.sName), j);
             }
         }
         sb.AppendFormat("\r\n");
     }
 }
Esempio n. 9
0
 public void ProcessToBin(StringBuilder sb, GenClass oGenClass)
 {
     sb.AppendFormat("{0}.prototype.Write{1} = function(oVal){{\r\n", Utils.gc_sBinaryChartWriter, oGenClass.sName);
     sb.AppendFormat("var oThis = this;\r\n");
     for (int i = 0; i < oGenClass.aMembers.Count; ++i)
     {
         GenMember oGenMember = oGenClass.aMembers[i];
         if (!oGenMember.bInternal)
         {
             if (oGenMember.bIsArray)
             {
                 sb.AppendFormat("if(null != oVal.{0})\r\n{{\r\n", Utils.GetMemberElemName(oGenMember.sName));
                 sb.AppendFormat("for(var i = 0, length = oVal.{0}.length; i < length; ++i)\r\n", Utils.GetMemberElemName(oGenMember.sName));
                 sb.AppendFormat("{{\r\n");
                 if (null != oGenMember.aArrayTypes)
                 {
                     sb.AppendFormat("var eType = oVal.{0}[i];\r\n", Utils.GetMemberElemName(oGenMember.sArrayTypesElementName));
                     sb.AppendFormat("this.toBin{0}(eType, oVal.{1}[i]);\r\n", oGenMember.sArrayTypesEnumName, Utils.GetMemberElemName(oGenMember.sName));
                 }
                 else
                 {
                     sb.AppendFormat("var oCurVal = oVal.{0}[i];\r\n", Utils.GetMemberElemName(oGenMember.sName));
                     ProcessMemberToBin(sb, oGenClass, oGenMember, "oCurVal");
                 }
                 sb.AppendFormat("}}\r\n");
                 sb.AppendFormat("}}\r\n");
             }
             else
             {
                 sb.AppendFormat("var oCurVal = oVal.{0};\r\n", Utils.GetMemberElemName(oGenMember.sName));
                 ProcessMemberToBin(sb, oGenClass, oGenMember, "oCurVal");
             }
         }
     }
     sb.AppendFormat("}}\r\n");
     for (int i = 0; i < oGenClass.aMembers.Count; ++i)
     {
         GenMember oGenMember = oGenClass.aMembers[i];
         if (!oGenMember.bInternal)
         {
             if (null != oGenMember.aArrayTypes)
             {
                 ProcessArrayTypesToBin(sb, oGenClass, oGenMember);
             }
         }
     }
 }
Esempio n. 10
0
        public void ProcessFromBin(StringBuilder sb, GenClass oGenClass)
        {
            if (oGenClass.bIsRoot)
            {
                sb.AppendFormat("{0}.prototype.ExternalRead{1} = function(length, val){{\r\n", Utils.gc_sBinaryChartReader, oGenClass.sName);
                sb.AppendFormat("var res = c_oSerConstants.ReadOk;\r\n");
                sb.AppendFormat("var oThis = this;\r\n");
                sb.AppendFormat("res = this.bcr.Read1(length, function(t, l){{\r\n");
                sb.AppendFormat("return oThis.Read{0}(t, l, val);\r\n", oGenClass.sName);
                sb.AppendFormat("}});\r\n");
                sb.AppendFormat("return res;\r\n");
                sb.AppendFormat("}}\r\n");
            }
            sb.AppendFormat("{0}.prototype.Read{1} = function(type, length, val){{\r\n", Utils.gc_sBinaryChartReader, oGenClass.sName);
            sb.AppendFormat("var res = c_oSerConstants.ReadOk;\r\n");
            sb.AppendFormat("var oThis = this;\r\n");
            int nCounter = 0;

            for (int j = 0; j < oGenClass.aMembers.Count; ++j)
            {
                GenMember oGenMember = oGenClass.aMembers[j];
                if (!oGenMember.bInternal)
                {
                    if (null != oGenMember.aArrayTypes)
                    {
                        for (int k = 0; k < oGenMember.aArrayTypes.Count; ++k)
                        {
                            nCounter = ProcessMemberFromBin(sb, "val", oGenClass, oGenMember.aArrayTypes[k], oGenMember, nCounter);
                        }
                    }
                    else
                    {
                        nCounter = ProcessMemberFromBin(sb, "val", oGenClass, oGenMember, null, nCounter);
                    }
                }
            }
            sb.AppendFormat("else\r\nres = c_oSerConstants.ReadUnknown;\r\nreturn res;\r\n}}\r\n", oGenClass.sName);
        }
Esempio n. 11
0
 public void ProcessSerEnums(StringBuilder sb, List <GenClass> aGenClasses)
 {
     for (int i = 0; i < aGenClasses.Count; ++i)
     {
         GenClass oGenClass = aGenClasses[i];
         int      nCounter  = 0;
         for (int j = 0; j < oGenClass.aMembers.Count; ++j)
         {
             GenMember oGenMember = oGenClass.aMembers[j];
             if (!oGenMember.bInternal)
             {
                 sb.AppendFormat("var {0} = {1};\r\n", Utils.GetSerEnumElemName(oGenClass.sName, oGenMember.sName), nCounter++);
                 if (null != oGenMember.aArrayTypes)
                 {
                     for (int k = 0; k < oGenMember.aArrayTypes.Count; ++k)
                     {
                         sb.AppendFormat("var {0} = {1};\r\n", Utils.GetSerEnumElemName(oGenClass.sName, oGenMember.aArrayTypes[k].sName), nCounter++);
                     }
                 }
             }
         }
         sb.AppendFormat("\r\n");
     }
 }
Esempio n. 12
0
        GenMember PreProcessProperty(List <GenClass> aGenClasses, CodeMemberProperty codeMemberProperty, GenClass oGenClass, ref int nItemsElementName)
        {
            GenMember oGenMember = new GenMember(codeMemberProperty.Name);
            bool      bIgnore    = false;

            InitMemberType(oGenMember, codeMemberProperty.Type.BaseType);
            if (null != codeMemberProperty.Type.ArrayElementType)
            {
                oGenMember.bIsArray = true;
            }
            List <GenMember> aWrappedMemebers = null;

            for (int i = 0; i < codeMemberProperty.CustomAttributes.Count; i++)
            {
                CodeAttributeDeclaration attribute = codeMemberProperty.CustomAttributes[i];
                if (attribute.Name == "System.Xml.Serialization.XmlAttributeAttribute")
                {
                    oGenMember.bQualified   = false;
                    oGenMember.bIsAttribute = true;
                    ParseArguments(attribute.Arguments, oGenMember);
                    //todo могут быть повторы имен атрибутов и child nodes.
                }
                else if (attribute.Name == "System.ComponentModel.DefaultValueAttribute")
                {
                    if (attribute.Arguments.Count > 0)
                    {
                        CodeExpression oCodeExpression = attribute.Arguments[attribute.Arguments.Count - 1].Value;
                        //todo other
                        if (oCodeExpression is CodePrimitiveExpression)
                        {
                            oGenMember.sDefAttribute = ((oCodeExpression as CodePrimitiveExpression)).Value.ToString();
                        }
                        else if (oCodeExpression is CodeFieldReferenceExpression)
                        {
                            oGenMember.sDefAttribute = ((oCodeExpression as CodeFieldReferenceExpression)).FieldName;
                        }
                    }
                }
                else if (attribute.Name == "System.Xml.Serialization.XmlIgnoreAttribute")
                {
                    bIgnore = true;
                }
                else if (attribute.Name == "System.Xml.Serialization.XmlElementAttribute")
                {
                    GenMember oTemp = oGenMember;
                    if (null != oGenMember.oSystemType && oGenMember.oSystemType == typeof(object))
                    {
                        oTemp = new GenMember(null);
                    }
                    ParseArguments(attribute.Arguments, oTemp);
                    if (null != oGenMember.oSystemType && oGenMember.oSystemType == typeof(object))
                    {
                        if (null != oTemp.sName)
                        {
                            if (false == oGenMember.bIsArray)
                            {
                                bIgnore = true;
                                oGenClass.aMembers.Add(oTemp);
                            }
                            else
                            {
                                bIgnore = false;
                                if (null == oGenMember.aArrayTypes)
                                {
                                    oGenMember.aArrayTypes = new List <GenMember>();
                                }
                                oGenMember.aArrayTypes.Add(oTemp);
                            }
                        }
                    }
                }
                else if (attribute.Name == "System.Xml.Serialization.XmlArrayItemAttribute")
                {
                    GenMember oWrapMemeber = new GenMember(null);
                    ParseArguments(attribute.Arguments, oWrapMemeber);
                    if (null != oWrapMemeber.sName)
                    {
                        if (null == aWrappedMemebers)
                        {
                            aWrappedMemebers = new List <GenMember>();
                        }
                        aWrappedMemebers.Add(oWrapMemeber);
                    }
                }
                else if (attribute.Name == "System.Xml.Serialization.XmlArrayAttribute")
                {
                    ParseArguments(attribute.Arguments, oGenMember);
                }
                //todo не всегда прописан
                //else if (attribute.Name == "System.Xml.Serialization.XmlChoiceIdentifierAttribute")
                //{
                //    if (attribute.Arguments.Count > 0)
                //    {
                //        CodePrimitiveExpression oPrimitiveExpression = attribute.Arguments[0].Value as CodePrimitiveExpression;
                //        oGenMember.sChoiceIdentifier = oPrimitiveExpression.Value.ToString();
                //    }
                //}
            }
            if (bIgnore)
            {
                return(null);
            }
            else
            {
                if (oGenMember.bIsArray && null != aWrappedMemebers)
                {
                    //todo не проверен случай
                    //[System.Xml.Serialization.XmlArrayItemAttribute("ahPolar", typeof(CT_PolarAdjustHandle), IsNullable=false)]
                    //[System.Xml.Serialization.XmlArrayItemAttribute("ahXY", typeof(CT_XYAdjustHandle), IsNullable=false)]
                    //public object[] ahLst {

                    //создаем wrap class чтобы не работать с двумерными массивами
                    string   sNewName     = Utils.GetClassName(oGenMember.sName);
                    GenClass oNewGenClass = new GenClass(sNewName, oGenMember.sNamespace);
                    if (null == oNewGenClass.sNamespace)
                    {
                        oNewGenClass.sNamespace = oGenClass.sNamespace;
                    }
                    //помещаем класс указанный в атрибутах в aMembers
                    for (int i = 0; i < aWrappedMemebers.Count; ++i)
                    {
                        GenMember oWrappedMemeber = aWrappedMemebers[i];
                        if (null == oWrappedMemeber.sType && null == oWrappedMemeber.oSystemType)
                        {
                            oWrappedMemeber.sType       = oGenMember.sType;
                            oWrappedMemeber.oSystemType = oGenMember.oSystemType;
                        }
                        oWrappedMemeber.bIsArray   = true;
                        oWrappedMemeber.sNamespace = oNewGenClass.sNamespace;
                        oNewGenClass.aMembers.Add(oWrappedMemeber);
                    }
                    //проверяем нет ли такого типа
                    bool     bExist      = false;
                    bool     bNeedCreate = true;
                    GenClass oPrevGenClass;
                    if (m_mapGeneratedClasses.TryGetValue(sNewName, out oPrevGenClass))
                    {
                        bExist = true;
                        if (oNewGenClass.sName == oPrevGenClass.sName && oNewGenClass.sNamespace == oPrevGenClass.sNamespace && oNewGenClass.aMembers.Count == oPrevGenClass.aMembers.Count)
                        {
                            bNeedCreate = false;
                            for (int i = 0; i < oNewGenClass.aMembers.Count; ++i)
                            {
                                GenMember oGenMember1 = oNewGenClass.aMembers[i];
                                GenMember oGenMember2 = oPrevGenClass.aMembers[i];
                                if (oGenMember1.sName != oGenMember2.sName || oGenMember1.sType != oGenMember2.sType || oGenMember1.oSystemType != oGenMember2.oSystemType)
                                {
                                    bNeedCreate = true;
                                }
                            }
                        }
                    }
                    if (bNeedCreate)
                    {
                        if (bExist)
                        {
                            int      nCount = 1;
                            GenClass oTemp;
                            while (m_mapGeneratedClasses.TryGetValue(sNewName = Utils.GetClassName(oGenMember.sName + nCount), out oTemp))
                            {
                                nCount++;
                            }
                            oNewGenClass.sName = sNewName;
                        }
                        aGenClasses.Add(oNewGenClass);
                        m_mapGeneratedClasses[oNewGenClass.sName] = oNewGenClass;
                    }
                    //меняем oGenMember, чтобы он ссылался на oNewGenClass
                    if (codeMemberProperty.Type.ArrayElementType.ArrayRank > 0)
                    {
                        oGenMember.bIsArray = true;
                    }
                    else
                    {
                        oGenMember.bIsArray = false;
                    }
                    oGenMember.oSystemType = null;
                    oGenMember.sType       = oNewGenClass.sName;
                }
                if (oGenMember.bIsArray && null != oGenMember.aArrayTypes)
                {
                    //добавляем enum для member и дополнительный массив для типов
                    GenClass oNewEnum = new GenClass(Utils.gc_sItemsChoiceType + m_nItemsChoiceTypeCount++, oGenClass.sNamespace);
                    oNewEnum.bInternal = true;
                    oNewEnum.bIsEnum   = true;
                    for (int i = 0; i < oGenMember.aArrayTypes.Count; ++i)
                    {
                        oNewEnum.aMembers.Add(new GenMember(oGenMember.aArrayTypes[i].sName));
                    }
                    GenMember oNewPairArray = new GenMember(Utils.gc_sItemsElementName + nItemsElementName++);
                    oNewPairArray.bInternal           = true;
                    oNewPairArray.bIsArray            = true;
                    oNewPairArray.sType               = oNewEnum.sName;
                    oGenMember.sArrayTypesElementName = oNewPairArray.sName;
                    oGenMember.sArrayTypesEnumName    = oNewEnum.sName;
                    oGenClass.aMembers.Add(oNewPairArray);
                    aGenClasses.Add(oNewEnum);
                }
                return(oGenMember);
            }
        }
Esempio n. 13
0
        GenClass PreProcessClass(List <GenClass> aGenClasses, CodeTypeDeclaration type)
        {
            GenClass oGenClass = null;
            //получаем xml namespace
            string sNamespace       = null;
            bool   bIncludeInSchema = true;
            bool   bIsRoot          = false;

            for (int i = 0; i < type.CustomAttributes.Count; i++)
            {
                CodeAttributeDeclaration attribute = type.CustomAttributes[i];
                if (attribute.Name == "System.Xml.Serialization.XmlTypeAttribute")
                {
                    foreach (CodeAttributeArgument argument in attribute.Arguments)
                    {
                        if (argument.Name == "Namespace")
                        {
                            sNamespace = ((CodePrimitiveExpression)argument.Value).Value.ToString();
                        }
                        else if (argument.Name == "IncludeInSchema")
                        {
                            bIncludeInSchema = Convert.ToBoolean(((CodePrimitiveExpression)argument.Value).Value);
                        }
                        //todo argument.Name == "TypeName"
                    }
                }
                else if (attribute.Name == "System.Xml.Serialization.XmlRootAttribute")
                {
                    bIsRoot = true;
                    string sName = null;//todo
                    foreach (CodeAttributeArgument argument in attribute.Arguments)
                    {
                        if (argument.Name == "Namespace")
                        {
                            sNamespace = ((CodePrimitiveExpression)argument.Value).Value.ToString();
                        }
                        else if ("" == argument.Name)
                        {
                            sName = ((CodePrimitiveExpression)argument.Value).Value.ToString();
                        }
                    }
                }
            }
            if (bIncludeInSchema)
            {
                oGenClass         = new GenClass(type.Name, sNamespace);
                oGenClass.bIsRoot = bIsRoot;
                int nItemsElementName = 0;
                if (type.IsEnum)
                {
                    oGenClass.bIsEnum = true;
                    for (int i = 0; i < type.Members.Count; ++i)
                    {
                        CodeTypeMember member     = type.Members[i];
                        GenMember      oGenMember = new GenMember(member.Name);
                        for (int j = 0; j < member.CustomAttributes.Count; j++)
                        {
                            CodeAttributeDeclaration attribute = member.CustomAttributes[j];
                            if (attribute.Name == "System.Xml.Serialization.XmlEnumAttribute")
                            {
                                ParseArguments(attribute.Arguments, oGenMember);
                            }
                        }
                        oGenClass.aMembers.Add(oGenMember);
                    }
                }
                else
                {
                    for (int i = 0; i < type.Members.Count; ++i)
                    {
                        CodeTypeMember member = type.Members[i];
                        //CodeMemberField пропускаем
                        CodeMemberProperty codeMemberProperty = member as CodeMemberProperty;
                        if (codeMemberProperty != null)
                        {
                            GenMember oNewGenMember = PreProcessProperty(aGenClasses, codeMemberProperty, oGenClass, ref nItemsElementName);
                            if (null != oNewGenMember)
                            {
                                oGenClass.aMembers.Add(oNewGenMember);
                            }
                        }
                    }
                }
            }
            return(oGenClass);
        }
Esempio n. 14
0
        List <GenClass> FilterClasses(List <GenClass> aInput)
        {
            List <GenClass> aRes = new List <GenClass>();

            string[] aTargetNamespaces = new string[] { "http://purl.oclc.org/ooxml/drawingml/chart", "http://purl.oclc.org/ooxml/officeDocument/relationships", "http://purl.oclc.org/ooxml/officeDocument/sharedTypes", "http://schemas.openxmlformats.org/markup-compatibility/2006", "http://schemas.microsoft.com/office/drawing/2007/8/2/chart" };
            string[] aTodoNamespaces   = new string[] { "http://purl.oclc.org/ooxml/officeDocument/relationships" };
            string[] aStringNamespaces = new string[] { "http://purl.oclc.org/ooxml/drawingml/chartDrawing", "http://purl.oclc.org/ooxml/drawingml/main" };
            Dictionary <string, GenClass> mapAllClasses = new Dictionary <string, GenClass>();

            for (int i = 0; i < aInput.Count; ++i)
            {
                GenClass oGenClass = aInput[i];
                if (0 == aTargetNamespaces.Length || -1 != Array.IndexOf(aTargetNamespaces, oGenClass.sNamespace))
                {
                    aRes.Add(oGenClass);
                }
                mapAllClasses[oGenClass.sName] = oGenClass;
            }
            //специально для chart
            for (int i = 0; i < aRes.Count; ++i)
            {
                GenClass oGenClass = aRes[i];
                for (int j = 0; j < oGenClass.aMembers.Count; ++j)
                {
                    GenMember oGenMember = oGenClass.aMembers[j];
                    string    sNamespace = oGenMember.sNamespace;
                    GenClass  oTempClass;
                    if (null == sNamespace && null != oGenMember.sType && mapAllClasses.TryGetValue(oGenMember.sType, out oTempClass))
                    {
                        sNamespace = oTempClass.sNamespace;
                    }
                    if (null != sNamespace)
                    {
                        if (-1 != Array.IndexOf(aTodoNamespaces, sNamespace))
                        {
                            oGenMember.bToDo = true;
                        }
                        if (-1 != Array.IndexOf(aStringNamespaces, sNamespace))
                        {
                            oGenMember.bToDoString = true;
                            oGenMember.sType       = null;
                            oGenMember.oSystemType = typeof(string);
                        }
                    }
                    if (null != oGenMember.aArrayTypes)
                    {
                        for (int k = 0; k < oGenMember.aArrayTypes.Count; ++k)
                        {
                            GenMember oGenMemberArrayTypes = oGenMember.aArrayTypes[k];
                            sNamespace = oGenMemberArrayTypes.sNamespace;
                            if (null == sNamespace && null != oGenMemberArrayTypes.sType && mapAllClasses.TryGetValue(oGenMemberArrayTypes.sType, out oTempClass))
                            {
                                sNamespace = oTempClass.sNamespace;
                            }
                            if (null != sNamespace)
                            {
                                if (-1 != Array.IndexOf(aTodoNamespaces, sNamespace))
                                {
                                    oGenMemberArrayTypes.bToDo = true;
                                }
                                if (-1 != Array.IndexOf(aStringNamespaces, sNamespace))
                                {
                                    oGenMemberArrayTypes.bToDoString = true;
                                    oGenMemberArrayTypes.sType       = null;
                                    oGenMemberArrayTypes.oSystemType = typeof(string);
                                }
                            }
                        }
                    }
                }
            }
            return(aRes);
        }
Esempio n. 15
0
 int ProcessMemberFromBin(StringBuilder sb, string sVal, GenClass oGenClass, GenMember oGenMember, GenMember oGenMemberContainer, int nCounter)
 {
     if (0 != nCounter)
     {
         sb.AppendFormat("else ");
     }
     sb.AppendFormat("if({0} === type){{\r\n", Utils.GetSerEnumElemName(oGenClass.sName, oGenMember.sName));
     if (oGenMember.bToDo || !CanProcessToDoString(oGenMember))
     {
         sb.AppendFormat("//todo\r\n");
     }
     sb.AppendFormat("var oNewVal;\r\n");
     if (!ProcessFromBinToDo(sb, oGenMember, "oNewVal"))
     {
         if (null != oGenMember.sType)
         {
             GenClass oTempClass;
             if (m_mapProcessedClasses.TryGetValue(oGenMember.sType, out oTempClass))
             {
                 if (oTempClass.bIsEnum)
                 {
                     sb.AppendFormat("oNewVal = {0};\r\n", ProcessJsTypeFromBin(sb, typeof(byte)));
                 }
                 else
                 {
                     sb.AppendFormat("oNewVal = {{}};\r\n");
                     sb.AppendFormat("res = this.bcr.Read1(length, function(t, l){{\r\n");
                     sb.AppendFormat("return oThis.Read{0}(t, l, oNewVal);\r\n", oTempClass.sName);
                     sb.AppendFormat("}});\r\n");
                 }
             }
         }
         else if (null != oGenMember.oSystemType)
         {
             sb.AppendFormat("oNewVal = {0};\r\n", ProcessJsTypeFromBin(sb, oGenMember.oSystemType));
         }
         else
         {
             sb.AppendFormat("res = c_oSerConstants.ReadUnknown;\r\n");
         }
     }
     if (null != oGenMemberContainer)
     {
         sb.AppendFormat("if(null == {0}.{1})\r\n", sVal, Utils.GetMemberElemName(oGenMemberContainer.sArrayTypesElementName));
         sb.AppendFormat("{0}.{1} = [];\r\n", sVal, Utils.GetMemberElemName(oGenMemberContainer.sArrayTypesElementName));
         sb.AppendFormat("{0}.{1}.push({2});\r\n", sVal, Utils.GetMemberElemName(oGenMemberContainer.sArrayTypesElementName), Utils.GetEnumElemName(oGenMemberContainer.sArrayTypesEnumName, oGenMember.sName));
         sb.AppendFormat("if(null == {0}.{1})\r\n", sVal, Utils.GetMemberElemName(oGenMemberContainer.sName));
         sb.AppendFormat("{0}.{1} = [];\r\n", sVal, Utils.GetMemberElemName(oGenMemberContainer.sName));
         sb.AppendFormat("{0}.{1}.push(oNewVal);\r\n", sVal, Utils.GetMemberElemName(oGenMemberContainer.sName));
     }
     else
     {
         if (oGenMember.bIsArray)
         {
             sb.AppendFormat("if(null == {0}.{1})\r\n", sVal, Utils.GetMemberElemName(oGenMember.sName));
             sb.AppendFormat("{0}.{1} = [];\r\n", sVal, Utils.GetMemberElemName(oGenMember.sName));
             sb.AppendFormat("{0}.{1}.push(oNewVal);\r\n", sVal, Utils.GetMemberElemName(oGenMember.sName));
         }
         else
         {
             sb.AppendFormat("{0}.{1} = oNewVal;\r\n", sVal, Utils.GetMemberElemName(oGenMember.sName));
         }
     }
     sb.AppendFormat("}}\r\n");
     nCounter++;
     return(nCounter);
 }