static void CopyDesignRules(string designRuleFile, Eagle.designrules designRules)
        {
            try
            {
                using (StreamReader druIn = new StreamReader(designRuleFile))
                {

                    // initialize the design rules section
                    designRules.name = Path.GetFileNameWithoutExtension(designRuleFile);
                    designRules.description.Clear();
                    designRules.param.Clear();

                    var line = druIn.ReadLine();
                    var regex = new Regex("[a-zA-Z]*\\[(.*)\\]");
                    while (line != null)
                    {
                        string[] nameValues = line.Split('=');
                        if (nameValues.Count() < 2)
                        {
                            // error 
                            continue;
                        }
                        var name = nameValues[0].Trim();
                        var value = nameValues[1].Trim();

                        if (name.Contains("description"))
                        {
                            var desc = new Eagle.description();
                            desc.Text.Add(value);
                            Console.WriteLine(name);
                            desc.language = regex.Replace(name, "$1");
                            Console.WriteLine(desc.language);
                            designRules.description.Add(desc);
                        }
                        else
                        {
                            var param = new Eagle.param();
                            param.name = name;
                            param.value = value;
                            designRules.param.Add(param);
                        }

                        // read the next line
                        line = druIn.ReadLine();
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in reading design rules file {0}", e.Message);
            }

        }
 public static bool LoadFromFile(string fileName, out param obj) {
     System.Exception exception = null;
     return LoadFromFile(fileName, out obj, out exception);
 }
 public static bool Deserialize(string xml, out param obj) {
     System.Exception exception = null;
     return Deserialize(xml, out obj, out exception);
 }
 /// <summary>
 /// Deserializes xml markup from file into an param object
 /// </summary>
 /// <param name="fileName">string xml file to load and deserialize</param>
 /// <param name="obj">Output param object</param>
 /// <param name="exception">output Exception value if deserialize failed</param>
 /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
 public static bool LoadFromFile(string fileName, out param obj, out System.Exception exception) {
     exception = null;
     obj = default(param);
     try {
         obj = LoadFromFile(fileName);
         return true;
     }
     catch (System.Exception ex) {
         exception = ex;
         return false;
     }
 }
 /// <summary>
 /// Deserializes workflow markup into an param object
 /// </summary>
 /// <param name="xml">string workflow markup to deserialize</param>
 /// <param name="obj">Output param object</param>
 /// <param name="exception">output Exception value if deserialize failed</param>
 /// <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
 public static bool Deserialize(string xml, out param obj, out System.Exception exception) {
     exception = null;
     obj = default(param);
     try {
         obj = Deserialize(xml);
         return true;
     }
     catch (System.Exception ex) {
         exception = ex;
         return false;
     }
 }