public void Export(IProgress <double> progress = null) { Release[] releases = this.collectionManager.Releases.ToArray(); double processed = 0; double total = releases.Length; foreach (Release release in releases) { string entryName = "Releases\\" + FilenameGenerator.FixFilename(release.JoinedAlbumArtists + " - " + release.Title) + ".xml"; foreach (Stream stream in this.GetEntryOutputStream(entryName, release.DateModified, release)) { XmlWriterSettings writerSettings = new XmlWriterSettings() { ConformanceLevel = ConformanceLevel.Document, Indent = true }; using (XmlWriter writer = XmlTextWriter.Create(stream, writerSettings)) { this.ExportRelease(writer, release); } } if (progress != null) { ++processed; progress.Report(processed / total); } } }
void AddRow(TextWriter writer, TypeWrapper info, string cssImageClass) { writer.WriteLine("<tr>"); // funky but works var imageClassDisplayName = string.Format("{0}{1}", cssImageClass.Substring(0, 1).ToUpper(), cssImageClass.Substring(1)); writer.WriteLine("<td>"); writer.WriteLine("<img class=\"{0}\" src=\"{2}/resources/blank.gif\" title=\"{1}\" alt=\"{1}\"/>", cssImageClass, imageClassDisplayName, RootRelativePath); writer.WriteLine("</td>"); writer.WriteLine("<td>"); writer.WriteLine("<a href=\"./{0}\">{1}</a>", FilenameGenerator.GenerateFilename(info), info.GetDisplayName(false)); writer.WriteLine("</td>"); writer.WriteLine("<td>"); var docs = NDocUtilities.FindDocumentation(NDocUtilities.GetDocumentationInstance(info.DocId), info); var html = NDocUtilities.TransformDocumentationToHTML(docs, "summary", Artifacts.ManifestAssemblyContext.SdkAssembly, this._version); writer.WriteLine(html); writer.WriteLine("</td>"); writer.WriteLine("</tr>"); }
void AddConstructor(TextWriter writer, ConstructorInfoWrapper info) { writer.WriteLine("<tr>"); writer.WriteLine("<td>"); writer.WriteLine("<img class=\"publicMethod\" src=\"{0}/resources/blank.gif\" title=\"Public Method\" alt=\"Public Method\"/>", RootRelativePath); if (info.IsStatic) { writer.WriteLine("<img class=\"static\" src=\"{0}/resources/blank.gif\" title=\"Static Method\" alt=\"Static Method\"/>", RootRelativePath); } writer.WriteLine("</td>"); writer.WriteLine("<td>"); var filename = FilenameGenerator.GenerateFilename(info); var parameters = FormatParameters(info.GetParameters()); var hrefLink = string.Format("<a href=\"./{0}\">{1}({2})</a>", filename, info.DeclaringType.Name, parameters); writer.WriteLine(hrefLink); writer.WriteLine("</td>"); writer.WriteLine("<td>"); var docs = NDocUtilities.FindDocumentation(this._currentNDoc, info); var html = NDocUtilities.TransformDocumentationToHTML(docs, "summary", this.Artifacts.AssemblyWrapper, this._version); writer.WriteLine(html); writer.WriteLine("</td>"); writer.WriteLine("</tr>"); }
void AddEvent(TextWriter writer, EventInfoWrapper info) { writer.WriteLine("<tr>"); writer.WriteLine("<td>"); writer.WriteLine("<img class=\"event\" src=\"{0}/resources/blank.gif\" title=\"Event\" alt=\"Event\"/>", RootRelativePath); if (info.IsStatic) { writer.WriteLine("<img class=\"static\" src=\"{0}/resources/blank.gif\" title=\"Static Event\" alt=\"Static Event\"/>", RootRelativePath); } writer.WriteLine("</td>"); writer.WriteLine("<td>"); writer.WriteLine("<a href=\"./{0}\">{1}</a>", FilenameGenerator.GenerateFilename(info), info.Name); writer.WriteLine("</td>"); writer.WriteLine("<td>"); var docs = NDocUtilities.FindDocumentation(this._currentNDoc, info); var html = NDocUtilities.TransformDocumentationToHTML(docs, "summary", Artifacts.AssemblyWrapper, this._version); writer.WriteLine(html); writer.WriteLine("</td>"); writer.WriteLine("</tr>"); }
public void GenerateJsonSettingsFilename_ReturnsCorrectFilename() { FilenameGenerator fileNameGenerator = new FilenameGenerator(Mock.Of <ILocalizedNames>(), Mock.Of <IDateTimeProvider>()); string filename = fileNameGenerator.GenerateJsonSettingsFilename(); Assert.That(filename, Is.EqualTo("settings.json")); }
public void GeneratePdfDocumentFilename_NullIAttendanceListData_ThrowsArgumentNullException() { FilenameGenerator fileNameProvider = new FilenameGenerator(Mock.Of <ILocalizedNames>(), Mock.Of <IDateTimeProvider>()); TestDelegate executeGeneratePdfDocumentFilename = () => fileNameProvider.GeneratePdfDocumentFilename(null); Assert.That(executeGeneratePdfDocumentFilename, Throws.ArgumentNullException); }
public void Scenario1() { // composition root var fs = new Mock <IFileSystem>(); var filenameGenerator = new FilenameGenerator(); var output = new FileOutput(filenameGenerator, fs.Object); var codeGenerator = new CodeGenerator( new Parser(), new MemberGenerator(), new ClassNameGenerator() ); var app = new App(fs.Object, codeGenerator, output); // set up the mocks const string CODE = @"interface ITest { int A { get; } string B { get; set; } int Test(); void SomeMethod(int a, string b); int GetStuff(bool flag); }"; fs.Setup(it => it.ReadText("ITest.cs")).Returns(CODE); // invoke the generator app.GenerateDecorator("ITest.cs"); // verify the result fs.Verify( it => it.WriteText( @"TestDecorator.cs", @"public class TestDecorator : ITest { public TestDecorator(ITest decorated) { this.decorated = decorated; } public int A => decorated.A; public string B { get => decorated.B; set => decorated.B = value; } public int Test() => decorated.Test(); public void SomeMethod(int a, string b) => decorated.SomeMethod(a, b); public int GetStuff(bool flag) => decorated.GetStuff(flag); // private readonly ITest decorated; }")); }
public void TestGenerateValidFilename() { //Arrange DateTime date = new DateTime(2017, 1, 23, 13, 47, 52); //Act var filename = FilenameGenerator.CreateFilename("My test filename", FileType.ExcelXlsx, date); //Assert Assert.AreEqual("My test filename_20170123_13h47m52s.xlsx", filename); }
/// <summary> /// Generates a CSV file with grid based counts of number of species observations for each selected taxon. /// </summary> /// <param name="filename"> /// The filename (without file extension). /// </param> /// <param name="convertCountToOccurrenceBoolean"> /// If set to <c>true</c> the observation count will be written as 1 if the count > 0 and 0 if count = 0; /// If set to <c>false</c> the observation count will be written. /// </param> /// <returns> /// A CSV file. /// </returns> private FileResult TaxonSpecificGridStatisticsOnSpeciesObservationCountsAsCsv(string filename, bool convertCountToOccurrenceBoolean) { SpeciesObservationGridCalculator resultCalculator = new SpeciesObservationGridCalculator(GetCurrentUser(), SessionHandler.MySettings); TaxonSpecificGridSpeciesObservationCountResult result = resultCalculator.CalculateMultipleSpeciesObservationGrid(); TaxonSpecificSpeciesObservationCountGridCsv file = FileExportManager.GetTaxonSpecificGridStatisticsOnSpeciesObservationCountsAsCsv(result, convertCountToOccurrenceBoolean); MemoryStream returnStream = file.ToStream(); SetServerDone(); return(File( returnStream.ToArray(), "text/csv", FilenameGenerator.CreateFilename(filename, FileType.Csv))); }
protected virtual void WriteFooter(TextWriter writer) { writer.WriteLine("<div id=\"pageFooter\">"); writer.WriteLine("<span class=\"newline linkto\"><a href=\"javascript:void(0)\" onclick=\"AWSHelpObj.displayLink('{0}/{1}', '{2}')\">Link to this page</a></span>", this.GenerateFilepath(), FilenameGenerator.Escape(this.GenerateFilename()), FilenameGenerator.Escape(this.GetTOCID())); writer.WriteLine("<span class=\"divider\"> </span>"); writer.WriteLine(FeedbackSection, GenerateFeedbackHTML()); writer.WriteLine("<div id=\"awsdocs-legal-zone-copyright\"></div>"); writer.WriteLine("</div>"); WriteScriptFiles(writer); }
/// <summary> /// Generates an GeoJson (.geojson) file with grid statistics on species richness. /// </summary> /// <returns>A .geojson file.</returns> public FileResult GridStatisticsOnSpeciesRichnessAsGeoJson() { TaxonGridCalculator resultCalculator = null; string geojson = null; resultCalculator = new TaxonGridCalculator(GetCurrentUser(), SessionHandler.MySettings); geojson = resultCalculator.GetTaxonGridAsGeoJson(); SetServerDone(); byte[] bytes = System.Text.Encoding.UTF8.GetBytes(geojson); return(File( bytes, "application/json", FilenameGenerator.CreateFilename("SpeciesRichnessGrid", FileType.GeoJSON))); }
/// <summary> /// Generates an GeoJson (.geojson) file with grid statistics on species observation counts. /// </summary> /// <returns>A .geojson file.</returns> public FileResult GridStatisticsOnSpeciesObservationCountsAsGeoJson() { SpeciesObservationGridCalculator resultCalculator = null; string geojson = null; CalculatedDataItem <FeatureCollection> result; resultCalculator = new SpeciesObservationGridCalculator(GetCurrentUser(), SessionHandler.MySettings); geojson = resultCalculator.GetSpeciesObservationGridAsGeoJson(); SetServerDone(); byte[] bytes = System.Text.Encoding.UTF8.GetBytes(geojson); return(File( bytes, "application/json", FilenameGenerator.CreateFilename("SpeciesObservationCountsGrid", FileType.GeoJSON))); }
public static string CreateCrossReferenceTagReplacement(AbstractTypeProvider typeProvider, string crefTypeName, FrameworkVersion version) { const string amazonNamespaceRoot = "Amazon."; var target = string.Empty; string url = null; string typeName; if (crefTypeName.Length > 2 && crefTypeName[1] == ':') // cref M:, T:, P:, F: indicators { typeName = crefTypeName.Substring(2); } else { typeName = crefTypeName; } var typeWrapper = typeProvider.GetType(typeName); if (typeWrapper != null) { url = string.Format("./{0}", FilenameGenerator.GenerateFilename(typeWrapper)); } else if (typeName.StartsWith("system.", StringComparison.OrdinalIgnoreCase)) { url = string.Format(NDocUtilities.MSDN_TYPE_URL_PATTERN, typeName.ToLower()); target = "target=_new"; } // If we couldn't generate a url to use with an anchor tag, make the typename italic+bold so // that it at least stands out. if (url == null) { return(string.Format("<i><b>{0}</b></i>", typeName)); } // If the type is one of ours, strip the namespace from the display text to condense things // a little if (typeName.StartsWith(amazonNamespaceRoot, StringComparison.Ordinal)) { var lastPeriodIndex = typeName.LastIndexOf('.'); typeName = typeName.Substring(lastPeriodIndex + 1); } return(string.Format("<a href=\"{0}\" {2}>{1}</a>", url, typeName, target)); }
/// <summary> /// Renders the species observation grid map to a png file. /// </summary> /// <returns>A png image.</returns> public ActionResult SpeciesObservationGridMapImage() { SetServerDone(); try { FileStreamResult fileStream = CreateImageUsingPhantomJs(Url.Action("SpeciesObservationGridMap", "Result"), "mainPanel", 1.5); return(File( fileStream.FileStream, "image/png", FilenameGenerator.CreateFilename("SpeciesObservationGridMap", FileType.Png))); } catch (Exception e) { Logger.WriteException(e); throw new Exception("An error occurred when generating the image.", e); } }
void WriteNamespaceToc(JsonWriter writer, string ns) { var assemblyWrapper = _generatedNamespaces[ns]; var tocId = ns.Replace(".", "_"); var nsFilePath = Path.Combine("./" + Options.ContentSubFolderName, GenerationManifest.OutputSubFolderFromNamespace(ns), FilenameGenerator.GenerateNamespaceFilename(ns)).Replace('\\', '/'); writer.WritePropertyName(ns); writer.WriteObjectStart(); writer.WritePropertyName("id"); writer.Write(tocId); writer.WritePropertyName("href"); writer.Write(nsFilePath); writer.WritePropertyName("nodes"); writer.WriteObjectStart(); foreach (var type in assemblyWrapper.GetTypesForNamespace(ns).OrderBy(x => x.Name)) { var filePath = Path.Combine("./" + Options.ContentSubFolderName, GenerationManifest.OutputSubFolderFromNamespace(type.Namespace), FilenameGenerator.GenerateFilename(type)).Replace('\\', '/'); writer.WritePropertyName(type.GetDisplayName(false)); writer.WriteObjectStart(); writer.WritePropertyName("id"); writer.Write(type.GetDisplayName(true).Replace(".", "_")); writer.WritePropertyName("href"); writer.Write(filePath); writer.WriteObjectEnd(); } writer.WriteObjectEnd(); writer.WriteObjectEnd(); }
public void GeneratePdfDocumentFilename_GivenData_ReturnsCorrectFileName(Month month, int year, DateTime dateTime, string expectedResult) { ILocalizedNames localizedNames = Mock.Of <ILocalizedNames>(l => l.GetMonthName(Month.January) == "January" && l.GetMonthName(Month.February) == "February" && l.GetMonthName(Month.March) == "March" && l.GetMonthName(Month.April) == "April" && l.GetMonthName(Month.May) == "May" && l.GetMonthName(Month.June) == "June" && l.GetMonthName(Month.July) == "July" && l.GetMonthName(Month.September) == "September" && l.GetMonthName(Month.October) == "October" && l.GetMonthName(Month.November) == "November" && l.GetMonthName(Month.December) == "December"); IAttendanceListData attendanceListData = Mock.Of <IAttendanceListData>(a => a.Month == month && a.Year == year); IDateTimeProvider dateTimeProvider = Mock.Of <IDateTimeProvider>(d => d.Now == dateTime); FilenameGenerator fileNameGenerator = new FilenameGenerator(localizedNames, dateTimeProvider); string fileName = fileNameGenerator.GeneratePdfDocumentFilename(attendanceListData); Assert.That(fileName, Is.EqualTo(expectedResult)); }
void AddEvent(TextWriter writer, EventInfoWrapper info) { writer.WriteLine("<tr>"); writer.WriteLine("<td>"); writer.WriteLine("<img class=\"event\" src=\"{0}/resources/blank.gif\" title=\"Event\" alt=\"Event\"/>", RootRelativePath); if (info.IsStatic) { writer.WriteLine("<img class=\"static\" src=\"{0}/resources/blank.gif\" title=\"Static Event\" alt=\"Static Event\"/>", RootRelativePath); } writer.WriteLine("</td>"); writer.WriteLine("<td>"); writer.WriteLine("<a href=\"{0}/items/{1}/{2}\">{3}</a>", RootRelativePath, GenerationManifest.OutputSubFolderFromNamespace(info.DeclaringType.Namespace), FilenameGenerator.GenerateFilename(info), info.Name); writer.WriteLine("</td>"); writer.WriteLine("<td>"); string html = string.Empty; var isInherited = !info.DeclaringType.Equals(_versionType); if (isInherited) { html = string.Format("Inherited from {0}.{1}.", info.DeclaringType.Namespace, info.DeclaringType.Name); } else { var docs = NDocUtilities.FindDocumentation(info); html = NDocUtilities.TransformDocumentationToHTML(docs, "summary", Artifacts.AssemblyWrapper, this._version); } writer.WriteLine(html); writer.WriteLine("</td>"); writer.WriteLine("</tr>"); }
private Settings DeserializeSettings() { try { LocalizedNames localizedNames = new LocalizedNames(); DirectoryProvider directoryProvider = new DirectoryProvider(localizedNames); FilenameGenerator filenameGenerator = new FilenameGenerator(localizedNames, _dateTimeProvider); string applicationDirectory = directoryProvider.GetApplicationDirectoryPath(); string settingsFilename = filenameGenerator.GenerateJsonSettingsFilename(); FileReader fileReader = new FileReader(); string json = fileReader.ReadJsonFile(applicationDirectory, settingsFilename); SettingsSerializer serializer = new SettingsSerializer(); return(serializer.Deserialize(json)); } catch (Exception) { return(null); } }
void AddMethod(TextWriter writer, MethodInfoWrapper info) { writer.WriteLine("<tr>"); writer.WriteLine("<td>"); writer.WriteLine("<img class=\"publicMethod\" src=\"{0}/resources/blank.gif\" title=\"Public Method\" alt=\"Public Method\"/>", RootRelativePath); if (info.IsStatic) { writer.WriteLine("<img class=\"static\" src=\"{0}/resources/blank.gif\" title=\"Static Method\" alt=\"Static Method\"/>", RootRelativePath); } writer.WriteLine("</td>"); writer.WriteLine("<td>"); writer.WriteLine("<a href=\"{0}/items/{1}/{2}\">{3}({4})</a>", RootRelativePath, GenerationManifest.OutputSubFolderFromNamespace(info.DeclaringType.Namespace), FilenameGenerator.GenerateFilename(info), info.Name, FormatParameters(info.GetParameters())); writer.WriteLine("</td>"); writer.WriteLine("<td>"); string html = string.Empty; if (_versionType.Namespace != info.DeclaringType.Namespace) { html = string.Format("Inherited from {0}.{1}.", info.DeclaringType.Namespace, info.DeclaringType.Name); } else { var docs = NDocUtilities.FindDocumentation(this._currentNDoc, info); html = NDocUtilities.TransformDocumentationToHTML(docs, "summary", Artifacts.AssemblyWrapper, this._version); } writer.WriteLine(html); writer.WriteLine("</td>"); writer.WriteLine("</tr>"); }
/// <summary> /// Method that generates an CSV file with species observations. /// </summary> /// <param name="presentationCoordinateSystem">Coordinate system to use.</param> /// <param name="columnsSet">Which columns set to use.</param> /// <param name="columnsHeadersType">Columns headers type to use.</param> /// <returns>A CSV file.</returns> public FileResult SpeciesObservationsAsCsv( int?presentationCoordinateSystem, int?columnsSet, int?columnsHeadersType) { if (NoFilterSelected) { throw new Exception("Too much data! You must set taxa filter or spatial filter."); } var coordinateSystemId = GetCoordinateSystemIdFromArgument( presentationCoordinateSystem, SessionHandler.MySettings.Presentation.Map.DownloadCoordinateSystemId); SpeciesObservationTableColumnsSetId speciesObservationTableColumnsSetId = GetSpeciesObservationTableColumnsSetIdFromArgument( columnsSet, SessionHandler.MySettings.Presentation.Table.SpeciesObservationTable.SpeciesObservationTableColumnsSetId); bool useLabelAsColumnHeader = GetUselabelAsColumnHeaderFromArgument( columnsHeadersType, SessionHandler.MySettings.Presentation.Table.SpeciesObservationTable.UseLabelAsColumnHeader); SpeciesObservationResultCalculator resultCalculator = new SpeciesObservationResultCalculator(GetCurrentUser(), SessionHandler.MySettings); List <Dictionary <ViewTableField, string> > result = resultCalculator.GetTableResult( coordinateSystemId, speciesObservationTableColumnsSetId); SpeciesObservationsCsv file = FileExportManager.GetSpeciesObservationsAsCsv( result, useLabelAsColumnHeader); MemoryStream returnStream = file.ToStream(); SetServerDone(); return(File( returnStream.ToArray(), "text/csv", FilenameGenerator.CreateFilename("SpeciesObservations", FileType.Csv))); }
private void Generate() { IList <IPerson> people = GetPeopleList(); // Generate data DaysOffData daysOff = new DaysOffData(Year); AttendanceListData listData = new AttendanceListData(daysOff, people, Month, Year); // Create document generator LocalizedNames localizedNames = new LocalizedNames(); AttendanceListDocumentGenerator documentGenerator = new AttendanceListDocumentGenerator(listData, localizedNames); // Set document generator settings documentGenerator.EnableColors = EnableColors; documentGenerator.EnableHolidaysTexts = EnableHolidaysTexts; documentGenerator.EnableSundaysTexts = EnableSundaysTexts; documentGenerator.EnableTableStretching = EnableTableStretching; // Generate a document Document document = documentGenerator.GenerateDocument(); // Get directory path and filename DirectoryProvider directoryProvider = new DirectoryProvider(localizedNames); FilenameGenerator filenameGenerator = new FilenameGenerator(localizedNames, _dateTimeProvider); string path = directoryProvider.GetDocumentsDirectoryPath(); string filename = filenameGenerator.GeneratePdfDocumentFilename(listData); // Save document FileSaver fileSaver = new FileSaver(); fileSaver.SavePdfDocument(document, path, filename); // And open it FileOpener fileOpener = new FileOpener(); fileOpener.OpenFile(path, filename); SerializeSettings(directoryProvider, filenameGenerator, fileSaver); }
private string GenerateFeedbackHTML() { var filename = FilenameGenerator.Escape(Path.GetFileNameWithoutExtension(GenerateFilename())); const string baseUrl = "https://docs.aws.amazon.com/forms/aws-doc-feedback"; var queryString = string.Format("?service_name={0}&file_name={1}", "NET-Ref-V3", // service_name filename // guide_name ); var fullUrl = baseUrl + queryString; const string feedbackContentFormat = "<span id=\"feedback\">" + "<!-- BEGIN-FEEDBACK-SECTION -->" + "Did this page help you? " + "<a href=\"http://docs.aws.amazon.com/sdkfornet/latest/apidocs/feedbackyes.html?topic_id={0}\" target=\"_blank\">Yes</a> " + "<a href=\"http://docs.aws.amazon.com/sdkfornet/latest/apidocs/feedbackno.html?topic_id={0}\" target=\"_blank\">No</a> " + "<a href=\"{1}\" target=\"_blank\">Tell us about it...</a>" + "</span>" + "<!-- END-FEEDBACK-SECTION -->"; string feedbackContent = string.Format(feedbackContentFormat, filename, fullUrl); return(feedbackContent); }
/// <summary> /// Generates an GeoJson (.geojson) file with the spatial filter. /// </summary> /// <returns>A .geojson file.</returns> public FileResult SpatialFilterAsGeoJson() { FeatureCollection featureCollection; try { SpatialFilterViewManager viewManager = new SpatialFilterViewManager(GetCurrentUser(), SessionHandler.MySettings); featureCollection = viewManager.GetSpatialFilterAsFeatureCollection(); featureCollection.CRS = new NamedCRS(SessionHandler.MySettings.Presentation.Map.PresentationCoordinateSystemId.EpsgCode()); } catch (Exception) { throw; } SetServerDone(); string geojson = JsonConvert.SerializeObject(featureCollection, JsonHelper.GetDefaultJsonSerializerSettings()); byte[] bytes = System.Text.Encoding.UTF8.GetBytes(geojson); return(File( bytes, "application/json", FilenameGenerator.CreateFilename("SpatialFilter", FileType.GeoJSON))); }
public ShouldMatchConfigurationBuilder WithFilenameGenerator(FilenameGenerator filenameGenerator) { return(Configure(c => c.FilenameGenerator = filenameGenerator)); }
protected override string GenerateFilename() { return(FilenameGenerator.GenerateFilename(this._fieldInfo)); }
protected override void Act() { Sut = new FilenameGenerator(FilenameConstructer); }
public void It_Should_Create_File() { FilenameGenerator.AssertWasCalled(x => x.Generate()); }
protected override string GenerateFilename() { return(FilenameGenerator.GenerateNamespaceFilename(this._namespaceName)); }
protected override string GenerateFilename() { return(FilenameGenerator.GenerateFilename(this._versionType)); }
public void Write() { var filename = Path.Combine(Artifacts.OutputFolder, GenerateFilepath(), GenerateFilename()); try { RootRelativePath = ComputeRelativePathToRoot(filename); } catch (PathTooLongException) { Console.WriteLine("Path is too long for file : {0}", filename); throw; } var directory = new FileInfo(filename).Directory.FullName; if (!Directory.Exists(directory)) { Console.WriteLine("\t\tcreating directory: {0}", directory); Directory.CreateDirectory(directory); } using (var writer = new StringWriter()) { writer.WriteLine("<html>"); writer.WriteLine("<head>"); writer.WriteLine("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"/>"); writer.WriteLine("<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}/resources/style.css\"/>", RootRelativePath); writer.WriteLine("<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}/resources/syntaxhighlighter/shCore.css\">", RootRelativePath); writer.WriteLine("<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}/resources/syntaxhighlighter/shThemeDefault.css\">", RootRelativePath); writer.WriteLine("<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}/resources/sdkstyle.css\"/>", RootRelativePath); // every page needs a title, meta description and canonical url to satisfy indexing. The summary/synopsis // text for an element has proven unreliable as a useful source for info the search results so stay with // the page title for now writer.WriteLine("<meta name=\"description\" content=\"{0}\">", GetTitle()); writer.WriteLine("<title>{0} | AWS SDK for .NET V3</title>", GetTitle()); writer.WriteLine("<script type=\"text/javascript\" src=\"/assets/js/awsdocs-boot.js\"></script>"); writer.WriteLine("<link rel=\"canonical\" href=\"http://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page={0}&tocid={1}\"/>", FilenameGenerator.Escape(this.GenerateFilename()), FilenameGenerator.Escape(this.GetTOCID())); writer.WriteLine("</head>"); writer.WriteLine("<body>"); // every page needs two hidden divs giving the search indexer the product title and guide name writer.WriteLine("<div id=\"product_name\">AWS SDK Version 3 for .NET</div>"); writer.WriteLine("<div id=\"guide_name\">API Reference</div>"); WriteRegionDisclaimer(writer); this.WriteHeader(writer); this.WriteToolbar(writer); writer.WriteLine("<div id=\"pageContent\">"); this.WriteContent(writer); writer.WriteLine("</div>"); this.WriteFooter(writer); writer.WriteLine("</body>"); writer.WriteLine("</html>"); // normalize all line endings so any docs committed into Git present a consistent // set of line terminators for core.autocrlf to work with var content = new StringBuilder(writer.ToString()); content.Replace("\r\n", "\n").Replace("\n", "\r\n"); using (var fileWriter = new StreamWriter(filename)) { fileWriter.Write(content); } } }