示例#1
0
            /// <summary>
            /// 获取参数描述
            /// </summary>
            /// <param name="method"></param>
            /// <param name="parameter"></param>
            /// <returns></returns>
            public unsafe string Get(MethodInfo method, ParameterInfo parameter)
            {
                xmlNode xmlNode = get(method);

                if (xmlNode.Type == emit.xmlNode.type.Node)
                {
                    string parameterName = parameter.Name;
                    xmlParser.attributeIndex attribute = default(xmlParser.attributeIndex);
                    fixed(char *nameFixed = "name", parameterFixed = parameterName)
                    {
                        foreach (keyValue <subString, xmlNode> node in xmlNode.Nodes)
                        {
                            if (node.Value.Type != emit.xmlNode.type.Node && node.Key.Equals("param") &&
                                node.Value.GetAttribute(nameFixed, 4, ref attribute) &&
                                attribute.Length == parameterName.Length)
                            {
                                fixed(char *attributeFixed = node.Key.value)
                                {
                                    if (fastCSharp.unsafer.memory.SimpleEqual((byte *)parameterFixed, (byte *)(attributeFixed + attribute.StartIndex), parameterName.Length << 1))
                                    {
                                        return(node.Value.String.Length == 0 ? string.Empty : node.Value.String.ToString());
                                    }
                                }
                            }
                        }
                    }
                }
                return(string.Empty);
            }
示例#2
0
        /// <summary>
        /// 从指定的xml文件构建XML_File对象
        /// </summary>
        public XML_File(string filePath)
        {
            this.filePath = filePath;
            string xml = FileProcess.fileToString(filePath);

            list = xmlNode.Parse(xml);

            if (list.Count > 1)
            {
                contentNode = list[1];
            }
        }
示例#3
0
 /// <summary>
 /// 获取程序集信息
 /// </summary>
 /// <param name="assembly"></param>
 /// <returns></returns>
 private unsafe static assembly get(Assembly assembly)
 {
     if (assembly != null)
     {
         assembly value;
         if (assemblyLock.TryGetValue(assembly, out value))
         {
             return(value);
         }
         try
         {
             string fileName = assembly.Location;
             if (fileName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase))
             {
                 if (File.Exists(fileName = fileName.Substring(0, fileName.Length - 3) + "xml"))
                 {
                     xmlNode xmlNode = fastCSharp.emit.xmlParser.Parse <xmlNode>(File.ReadAllText(fileName, Encoding.UTF8), xmlParserConfig)["members"];
                     if (xmlNode.Type == emit.xmlNode.type.Node)
                     {
                         fixed(char *nameFixed = "name")
                         {
                             value = new assembly();
                             xmlParser.attributeIndex attribute = default(xmlParser.attributeIndex);
                             foreach (keyValue <subString, xmlNode> node in xmlNode.Nodes)
                             {
                                 if (node.Value.Type == emit.xmlNode.type.Node && node.Key.Equals("member"))
                                 {
                                     if (node.Value.GetAttribute(nameFixed, 4, ref attribute) && attribute.Length > 2)
                                     {
                                         value.LoadMember(subString.Unsafe(node.Key.value, attribute.StartIndex, attribute.Length), node.Value);
                                     }
                                 }
                             }
                         }
                     }
                     else
                     {
                         log.Error.Real("XML文档解析失败 " + fileName, new System.Diagnostics.StackFrame(), false);
                     }
                 }
                 else
                 {
                     log.Default.Real("没有找到XML文档注释 " + fileName, new System.Diagnostics.StackFrame(), false);
                 }
             }
             assemblyLock.Set(assembly, value);
         }
         finally { assemblyLock.Exit(); }
         return(value);
     }
     return(null);
 }
示例#4
0
        private void button1_Click(object sender, EventArgs e)
        {
            string  xmlTarget = FileProcess.fileToString(dirDest.Text);
            xmlNode N         = xmlNode.Parse(xmlTarget)[1];
            //String tmp = "";

            List <String> cmds = new List <String>();

            cmds.Add("remove GAME_MAIN_ACTIVITY/intent-filter");
            cmds.Add("add THIS_MAIN_ACTIVITY to GAME_MAIN_ACTIVITY");
            cmds.Add("remove THIS_MAIN_ACTIVITY");
            xmlNode.Combine(dirAdd.Text, dirDest.Text, dirDest.Text.Replace(".xml", "_合并.xml"), true, cmds);
        }
示例#5
0
        // 从public.xml创建res资源索引信息
        public static Dictionary <String, List <xmlNode> > getResDic(String publicXML, Cmd.Callback call = null)
        {
            // 按type类型分类子节点。 如节点,<public type="attr" name="pstsIndicatorColor" id="0x7f010004" />
            Dictionary <String, List <xmlNode> > resDic = new Dictionary <String, List <xmlNode> >();

            if (File.Exists(publicXML))
            {
                try
                {
                    String         xml  = FileProcess.fileToString(publicXML); // 获取新生成的public.xml文件内容
                    List <xmlNode> list = xmlNode.Parse(xml);                  // 解析xml文件内容
                    if (!(list.Count > 1 || !list[1].name.Equals("resources")))
                    {
                        return(resDic);                                                            // 第二个节点不是<resources>,则不再解析
                    }
                    // 获取<resources>节点
                    xmlNode root = list[1];
                    foreach (xmlNode iteam in root.childs)
                    {
                        String typeName = iteam.attributes.Get("type"); // 获取节点的type类型
                        if (!resDic.ContainsKey(typeName))              // 生成新的list
                        {
                            List <xmlNode> newTypeList = new List <xmlNode>();
                            resDic.Add(typeName, newTypeList);
                        }

                        List <xmlNode> typeList = resDic[typeName];     // 获取type类型对应的节点list
                        if (!typeList.Contains(iteam))                  // 添加节点到对应的typeList中
                        {
                            typeList.Add(iteam);
                        }
                    }

                    resDic.Add("AllType", root.childs);                 // 记录所有节点id信息
                }
                catch (Exception ex)
                {
                    if (call != null)
                    {
                        call("【E】- " + publicXML + "文件解析异常!\r\n " + ex.ToString());
                    }
                }
            }
            else if (call != null)
            {
                call("【E】- " + publicXML + "文件不存在,无资源id信息...");
            }

            return(resDic);
        }
示例#6
0
            /// <summary>
            /// 加载数据记录
            /// </summary>
            /// <param name="name">名称</param>
            /// <param name="node"></param>
            public void LoadMember(subString name, xmlNode node)
            {//https://msdn.microsoft.com/zh-cn/library/fsbx0t7x(v=vs.80).aspx
             //对于泛型类型,类型名称后跟反勾号,再跟一个数字,指示泛型类型参数的个数。例如,
             //<member name="T:SampleClass`2"> 是定义为 public class SampleClass<T, U> 的类型的标记。
                if (name[1] == ':')
                {
                    char code = name[0];
                    switch (code & 7)
                    {
                    case 'T' & 7:    //类型:类、接口、结构、枚举、委托
                        if (code == 'T')
                        {
                            types[name.Substring(2)] = node;
                        }
                        break;

                    case 'F' & 7:    //字段
                        if (code == 'F')
                        {
                            fields[name.Substring(2)] = node;
                        }
                        break;

                    case 'P' & 7:    //属性(包括索引程序或其他索引属性)
                        if (code == 'P')
                        {
                            properties[name.Substring(2)] = node;
                        }
                        break;

                    case 'M' & 7:    //方法(包括一些特殊方法,例如构造函数、运算符等)
                        if (code == 'M')
                        {
                            methods[name.Substring(2)] = node;
                        }
                        break;
                        //case 'E' & 7://事件
                        //    break;
                        //case 'N' & 7://命名空间
                        //case '!' & 7://错误字符串
                        //break;
                    }
                }
            }
示例#7
0
 /// <summary>
 /// 获取节点字符串
 /// </summary>
 /// <param name="node">成员节点</param>
 /// <param name="name">节点名称</param>
 /// <returns>字符串</returns>
 private static string get(xmlNode node, string name)
 {
     return((node = node[name]).String.Length != 0 ? node.String.ToString() : string.Empty);
 }
示例#8
0
        /// <summary>
        /// Нахождение целевого объета
        /// </summary>
        /// <param name="node">Узел с @oid целевого объекта</param>
        /// <returns></returns>
        private Object GetSourceTargetObject(xmlNode node)
        {
            string oid = node.XQuery("string(@oid)");

            return(Class.GetObject(oid));
        }
示例#9
0
        /// <summary>
        /// Нахождение целевого объета
        /// </summary>
        /// <param name="targObject">Узел с @oid целевого объекта</param>
        /// <returns></returns>
        private Object GetCurrentTargetObject(xmlNode targObject)
        {
            string oid = targObject.XQuery("string(@oid)");

            return(Class.GetObject(oid));
        }