예제 #1
0
        internal IEnumerable <TargetFile> GenerateTargetFilesList(IEnumerable <SrcDoc> sourceFiles)
        {
            Dictionary <string, TargetFile> targetfiles = new Dictionary <string, TargetFile>(StringComparer.OrdinalIgnoreCase);

            foreach (var srcdoc in sourceFiles)
            {
                PackerDirectiveNode targetfileDirective = null;

                try { targetfileDirective = srcdoc.PackerDirectives?.SingleOrDefault(_ => _.Name == "targetFile"); }
                catch (InvalidOperationException ex)
                {
                    throw new ApplicationException(
                              $"The file '{srcdoc.Document.Name}' has multiple targetfile packer directives.",
                              ex);
                }

                if (targetfileDirective == null)
                {
                    targetfileDirective = new PackerDirectiveNode {
                        Name    = "targetFile",
                        Options = PackOptions.TargetFile ?? "lib.cs"
                    };
                }

                if (targetfiles.ContainsKey(targetfileDirective.Options) == false)
                {
                    //add new targetfile to targetfiles list
                    var targetfile = new TargetFile(targetfileDirective.Options);
                    targetfiles.Add(targetfileDirective.Options, targetfile);

                    if (PackOptions.Verbose)
                    {
                        Console.WriteLine($"New target file: {targetfile.Name}");
                    }
                }

                //add this sourcedoc to targetfile
                targetfiles[targetfileDirective.Options].SourceDocs.Add(srcdoc);
            }

            return(targetfiles.Values);
        }
예제 #2
0
        private void _ParseLine(string line, List <PackerDirectiveNode> directives, int lineIndex)
        {
            Match m;

            if ((m = packerDirectivesRegex.Match(line)).Success == true)
            {
                string[] groups = m.Groups[1].Value.Split(';');
                foreach (var g in groups)
                {
                    string[] split = g.Split('=');

                    var node = new PackerDirectiveNode()
                    {
                        Name       = split[0],
                        Options    = (split.Length < 2 ? "" : split[1].TrimEnd()),
                        LineNumber = lineIndex + 1
                    };

                    directives.Add(node);
                }
            }
        }