public void parseRefdata(string refDataFilePath)
        {
            //need to parse this way to avoid tabs in the script code to be changed into spaces (normalization rules)
            var reader = new XmlTextReader(new FileStream(refDataFilePath, FileMode.Open,
                                                          FileAccess.Read, FileShare.ReadWrite));

            // parse file into XDocument
            this.xDoc = XDocument.Load(reader);
            var scriptNodes = new List <XElement>();

            //loop DataRow elements
            foreach (var dataRow in xDoc.Descendants("DataRow"))
            {
                var category = dataRow.Elements("Column")
                               .SingleOrDefault(e => e.Attribute("name").Value == "ScriptCategory")
                               .Attribute("value").Value;
                //figure out if this is script, Group or ScriptDebugging
                if (category == "3955A83E-9E54-4810-8053-FACC68CD4782")
                {
                    //Process Group
                    //get group name
                    var groupName = dataRow.Elements("Column")
                                    .SingleOrDefault(e => e.Attribute("name").Value == "Script")
                                    .Attribute("value").Value;
                    //get group id
                    var groupID = dataRow.Elements("Column")
                                  .SingleOrDefault(e => e.Attribute("name").Value == "ScriptName")
                                  .Attribute("value").Value;
                    //create group
                    var group = new ScriptGroup(groupName, groupID, dataRow);
                    //add group to dictionary
                    this.scriptGroups.Add(groupID, group);
                }
                else if (category == "605A62F7-BCD0-4845-A8D0-7DC45B4D2E3F")
                {
                    //Script
                    scriptNodes.Add(dataRow);
                }
            }
            //after all groups have been processed, process scripts
            foreach (var scriptNode in scriptNodes)
            {
                //get scriptname
                var scriptNameField = scriptNode.Elements("Column")
                                      .SingleOrDefault(e => e.Attribute("name").Value == "Notes")
                                      .Attribute("value").Value;
                //parse out script name. Should be between <Script Name="ScriptName" Type="Internal" Language="VBScript"/>
                var    start      = "<Script Name= ".Length;
                var    end        = scriptNameField.IndexOf('"', start);
                var    scriptName = scriptNameField.Substring(start, end - start);
                Script script;
                //get groupID
                var groupID = scriptNode.Elements("Column")
                              .SingleOrDefault(e => e.Attribute("name").Value == "ScriptAuthor")
                              .Attribute("value").Value;
                if (this.scriptGroups.TryGetValue(groupID, out var scriptGroup))
                {
                    script = new Script(scriptName, scriptGroup, scriptNode, this.settings);
                }
                else
                {
                    script = new Script(scriptName, groupID, scriptNode, this.settings);
                    this.individualScripts.Add(script);
                }
                this.scripts.Add(script);
            }
            // get the includable scripts
            getIncludableScripts();
            //get the script dependencies
            foreach (var script in this.scripts)
            {
                this.getScriptDependencies(script);
            }
        }
Beispiel #2
0
 public Script(string scriptName, ScriptGroup scriptGroup, XElement xElement, SplitterSettings settings)
     : this(scriptName, scriptGroup.id, xElement, settings)
 {
     this.group = scriptGroup;
     this.group.scripts.Add(this);
 }