private TranslatorOutputItem Combine(TranslatorOutputItem target, List <TranslatorOutputItem> outputs, string fileName, string message, TranslatorOutputKind outputKind, TranslatorOutputType[] filter = null) { this.Log.Trace("There are " + outputs.Count + " " + message); if (outputs.Count <= 0) { this.Log.Trace("Skipping combining " + message + " as empty."); return(null); } if (filter == null) { filter = new[] { TranslatorOutputType.JavaScript }; } if (target != null) { this.Log.Trace("Using exisiting target " + target.Name); } else { this.Log.Trace("Using " + fileName + " as a fileName for combined " + message); } StringBuilder buffer = null; StringBuilder minifiedBuffer = null; if (this.AssemblyInfo.OutputFormatting != JavaScriptOutputType.Minified) { buffer = target != null ? target.Content.Builder : new StringBuilder(); } if (this.AssemblyInfo.OutputFormatting != JavaScriptOutputType.Formatted) { minifiedBuffer = (target != null && target.MinifiedVersion != null) ? target.MinifiedVersion.Content.Builder : new StringBuilder(); } bool firstLine = true; foreach (var output in outputs) { if (filter != null && !filter.Contains(output.OutputType)) { continue; } string formattedContent = null; string minifiedContent = null; if (!output.IsEmpty) { formattedContent = output.Content.GetContentAsString(); } if (output.MinifiedVersion != null && !output.MinifiedVersion.IsEmpty) { minifiedContent = output.MinifiedVersion.Content.GetContentAsString(); } if (formattedContent == null && minifiedContent == null) { output.IsEmpty = true; if (output.MinifiedVersion != null) { output.MinifiedVersion.IsEmpty = true; } this.Log.Trace("Skipping " + output.Name + " as it does not have formatted content nor minified."); continue; } if (buffer != null) { if (!firstLine) { firstLine = false; NewLine(buffer); } firstLine = false; if (formattedContent != null) { buffer.Append(formattedContent); } else if (minifiedContent != null) { buffer.Append(minifiedContent); } } if (minifiedBuffer != null) { if (minifiedContent != null) { minifiedBuffer.Append(minifiedContent); } else { this.Log.Warn("Output " + output.Name + " does not contain minified version"); } } output.IsEmpty = true; if (output.MinifiedVersion != null) { output.MinifiedVersion.IsEmpty = true; } } if (target != null) { return(target); } var adjustedFileName = fileName.Replace(":", "_"); var fileNameLenth = fileName.Length; while (Path.IsPathRooted(adjustedFileName)) { adjustedFileName = adjustedFileName.TrimStart(Path.DirectorySeparatorChar, '/', '\\'); if (adjustedFileName.Length == fileNameLenth) { break; } fileNameLenth = adjustedFileName.Length; } if (adjustedFileName != fileName) { fileName = adjustedFileName; this.Log.Trace("Adjusted fileName: " + fileName); } var checkExtentionFileName = FileHelper.CheckFileNameAndOutputType(fileName, TranslatorOutputType.JavaScript); if (checkExtentionFileName != null) { fileName = checkExtentionFileName; this.Log.Trace("Extention checked fileName: " + fileName); } var r = new TranslatorOutputItem { Content = buffer, OutputType = TranslatorOutputType.JavaScript, OutputKind = outputKind | TranslatorOutputKind.Combined, Name = fileName }; if (minifiedBuffer != null) { var minifiedName = FileHelper.GetMinifiedJSFileName(r.Name); r.MinifiedVersion = new TranslatorOutputItem { IsMinified = true, Name = minifiedName, OutputType = r.OutputType, OutputKind = r.OutputKind | TranslatorOutputKind.Minified, Location = r.Location, Content = minifiedBuffer }; } return(r); }
internal static bool AddOutputItem(List <TranslatorOutputItem> target, string fileName, TranslatorOutputItemContent content, TranslatorOutputKind outputKind, string location = null, string assembly = null) { var fileHelper = new FileHelper(); var outputType = fileHelper.GetOutputType(fileName); TranslatorOutputItem output = null; bool isMinJs = fileHelper.IsMinJS(fileName); var searchName = fileName; if (isMinJs) { searchName = fileHelper.GetNonMinifiedJSFileName(fileName); } output = target.FirstOrDefault(x => string.Compare(x.Name, searchName, StringComparison.InvariantCultureIgnoreCase) == 0); if (output != null) { bool isAdded; if (isMinJs) { isAdded = output.MinifiedVersion == null; output.MinifiedVersion = new TranslatorOutputItem { Name = fileName, OutputType = outputType, OutputKind = outputKind | TranslatorOutputKind.Minified, Location = location, Content = content, IsMinified = true, Assembly = assembly }; } else { isAdded = output.IsEmpty; output.IsEmpty = false; } return(isAdded); } output = new TranslatorOutputItem { Name = searchName, OutputType = outputType, OutputKind = outputKind, Location = location, Content = new TranslatorOutputItemContent((string)null), Assembly = assembly }; if (isMinJs) { output.IsEmpty = true; output.MinifiedVersion = new TranslatorOutputItem { Name = fileName, OutputType = outputType, OutputKind = outputKind | TranslatorOutputKind.Minified, Location = location, Content = content, IsMinified = true, Assembly = assembly }; } else { output.Content = content; } target.Add(output); return(true); }