Esempio n. 1
0
        public override void Transform(ExtensionHtmlRenderer extensionHtmlRenderer, SnippetBlock block, Snippet astNode)
        {
            string           fullFilePath = IO.Path.Combine(_renderSettings.SourceFolder.Absolute.FullPath, astNode.FileName);
            string           content      = IO.File.ReadAllText(fullFilePath);
            MarkdownDocument document     = Markdown.Parse(content, extensionHtmlRenderer.Pipeline);

            MarkdownDocument blockToInsert = GetByHeadingName(document, astNode.HeadingName);
            int contextLevel       = block.GetHeadingLevel();
            int levelDiff          = 0;
            int blockToInsertLevel = blockToInsert.GetHeadingLevel();

            switch (astNode.InsertionMechanism)
            {
            case InsertionMechanism.AsSibling: levelDiff = contextLevel - blockToInsertLevel; break;

            case InsertionMechanism.AsChild: levelDiff = contextLevel - blockToInsertLevel + 1; break;

            case InsertionMechanism.H1: levelDiff = 1 - blockToInsertLevel; break;

            case InsertionMechanism.H2: levelDiff = 2 - blockToInsertLevel; break;

            case InsertionMechanism.H3: levelDiff = 3 - blockToInsertLevel; break;

            case InsertionMechanism.H4: levelDiff = 4 - blockToInsertLevel; break;

            case InsertionMechanism.H5: levelDiff = 5 - blockToInsertLevel; break;

            case InsertionMechanism.H6: levelDiff = 6 - blockToInsertLevel; break;
            }
            // what to do with child headings past 6? Bound to 6?
            blockToInsert.IncreaseHeadingLevel(levelDiff);
            Replace(block, blockToInsert);
        }
Esempio n. 2
0
        public override void Render(ExtensionHtmlRenderer renderer, GitHistory gitHistory, IFormatState formatState)
        {
            var repo = new Repository(@"c:\users\ruudp\desktop\markdig");
            //var commits = repo.Commits.QueryBy("README.md").ToList();
            var sb = new StringBuilder();

            sb.AppendLine("<table>");
            sb.AppendLine("<thead>");
            sb.AppendLine("<tr>");
            foreach (var field in gitHistory.Fields)
            {
                sb.AppendLine($@"<td>{field.Name}</td>");
            }
            sb.AppendLine("</tr>");

            sb.AppendLine("</thead>");

            foreach (var tag in repo.Tags)
            {
                sb.AppendLine("<tr>");
                Commit commit = tag.Target as Commit;
                foreach (var field in gitHistory.Fields)
                {
                    var text = field.GetTagText(tag);
                    sb.AppendLine($@"<td>{text}</td>");
                }
                var sha = new string(commit.Sha.Take(7).ToArray());
                sb.AppendLine("</tr>");
            }
            sb.AppendLine("</table>");
            renderer.Write(sb.ToString());
        }
Esempio n. 3
0
        public override void Transform(ExtensionHtmlRenderer extensionHtmlRenderer, ObjectTextBlock block, ObjectText astNode)
        {
            var pb = new MarkdownPipelineBuilder()
                     .UseSoftlineBreakAsHardlineBreak()
                     .UseAdvancedExtensions();
            var pipeline = pb.Build();

            var path         = new Path(astNode.PackageName);
            var elements     = _provider.GetElements(path, recursive: false);
            var sb           = new StringBuilder();
            var headingLevel = block.GetHeadingLevel();

            void transform(MarkdownDocument md)
            {
                md.IncreaseHeadingLevel(1);
            }

            foreach (var element in elements)
            {
                sb.AppendLine($@"# {element.Name}");
                var notes = Helper.Converter(element.Notes, transform, pipeline);
                sb.AppendLine(element.Notes);
            }
            var document = Markdown.Parse(sb.ToString(), pipeline);

            document.IncreaseHeadingLevel(headingLevel);
            Replace(block, document);
        }
        public override void Render(ExtensionHtmlRenderer renderer, MsSqlTable msSqlTable, IFormatState formatState)
        {
            var table = GetTable(msSqlTable.Name);
            var sb    = new StringBuilder();

            sb.AppendLine($@"<table class='sql-table'>");

            sb.AppendLine($@"<thead>");
            sb.AppendLine($@"<tr><th colspan='2'>{msSqlTable.Name}</th></tr>");
            sb.AppendLine($@"</thead>");

            sb.AppendLine($@"<tbody class='sql-fields'>");
            foreach (var field in table.Fields)
            {
                sb.AppendLine($@"<tr>");
                if (field.IsNullable || field.IsPrimaryKey)
                {
                    string nullable   = field.IsNullable ? "*" : "";
                    string primaryKey = field.IsPrimaryKey ? "PK" : "";
                    sb.AppendLine($@"<td>{nullable}{primaryKey}</td>");
                }
                else
                {
                    sb.AppendLine($@"<td></td>");
                }
                sb.AppendLine($@"<td>{field.ToText()}</td></tr>");
            }
            sb.AppendLine($@"</tbody>");

            sb.AppendLine($@"<tbody class='sql-foreign-keys-header'>");
            sb.AppendLine($@"<tr><td colspan='2'>Foreign keys</td></tr>");
            sb.AppendLine($@"</tbody'>");
            sb.AppendLine($@"<tbody class='sql-foreign-keys'>");
            foreach (var fk in table.ForeignKeys)
            {
                sb.AppendLine($@"<tr><td></td><td>{fk.Name} {fk.Table}.{fk.Column} ↔ {fk.ReferencedTable}.{fk.ReferencedColumn}</td></tr>");
            }
            sb.AppendLine($@"</tbody>");

            sb.AppendLine($@"<tbody class='sql-indexes-header'>");
            sb.AppendLine($@"<tr><td colspan='2'>Indexes</td></tr>");
            sb.AppendLine($@"</tbody'>");
            sb.AppendLine($@"<tbody class='sql-indexes'>");
            foreach (var index in table.Indexes)
            {
                sb.AppendLine($@"<tr><td></td><td>{index.Name}({index.IndexType})</td></tr>");
            }
            sb.AppendLine($@"</tbody>");

            //sb.AppendLine($@"<tbody>");
            //sb.AppendLine($@"<tr><td>{table.PrimaryKey.Name}({table.PrimaryKey.Type})</td></tr>");
            //sb.AppendLine($@"</tbody>");
            sb.AppendLine("</table>");
            renderer.Write(sb.ToString());
        }
Esempio n. 5
0
        public override void Render(ExtensionHtmlRenderer renderer, RequirementsTableName table, IFormatState formatState)
        {
            var package = _provider.GetElementsByPackage(new Path(table.Name));

            if (package != null)
            {
                var sb = new StringBuilder();
                Format(package, sb, formatState.HeadingLevel);
                renderer.Write(sb.ToString());
            }
        }
        public void Transform(ExtensionHtmlRenderer extensionHtmlRenderer, FencedCodeBlock block, object astNode)
        {
            NestedBlock nestedBlock = astNode as NestedBlock;
            // 1. parse markdown
            // 2. normalize markdown headings
            // 3. replace fencedblock with markdown node
            var node  = Markdown.Parse(nestedBlock.Markdown);
            var index = block.Parent.IndexOf(block);

            block.Parent.Insert(index, node);
            block.Parent.RemoveAt(index + 1);
        }
Esempio n. 7
0
        public override void Render(ExtensionHtmlRenderer renderer, PanZoomImage panZoomImage, IFormatState formatState)
        {
            var    bytes  = System.IO.File.ReadAllBytes(panZoomImage.Uri);
            var    base64 = Convert.ToBase64String(bytes);
            string html   = $@"
				<div>
					<img src='data:image/png;base64,{base64}' id='{_id}'>
				</div>
                <script>
					var panzoomEl{_id} = document.getElementById('{_id}');
					var panzoom{_id} = panzoom(panzoomEl{_id}, {{ bounds: true }});
				</script>"                ;

            _id++;
            renderer.Write(html);
        }
 public override void Render(ExtensionHtmlRenderer renderer, Diagram diagram, IFormatState formatState)
 {
     if (diagram.Path != null)
     {
         var path = new Path(diagram.Path);
         RenderDiagram(path, renderer);
     }
     if (diagram.PackagePath != null)
     {
         var path  = new Path(diagram.PackagePath);
         var paths = _provider.GetDiagramPaths(path);
         foreach (var diagramPath in paths)
         {
             RenderDiagram(diagramPath, renderer);
         }
     }
 }
        public override void Render(ExtensionHtmlRenderer renderer, ExcelTableSelection excelSelection, IFormatState formatState)
        {
            var excelTable = new ExcelTable {
                Rows = new List <Row>()
            };

            using (var stream = IO.File.Open(excelSelection.FileName, IO.FileMode.Open, IO.FileAccess.Read))
            {
                using (var reader = ExcelReaderFactory.CreateReader(stream))
                {
                    DataSet       result = reader.AsDataSet();
                    DataTable     sheet  = result.Tables[excelSelection.Sheet];
                    CellReference from   = CellReference.Parse(excelSelection.CellsFrom);
                    CellReference to     = CellReference.Parse(excelSelection.CellsTo);
                    for (int i = from.Row - 1; i <= to.Row - 1; i++)
                    {
                        //var row = sheet.Rows[i];
                        var row = new Row {
                            Cells = new List <string>()
                        };
                        for (int j = from.Column; j <= to.Column; j++)
                        {
                            var value = sheet.Rows[i].ItemArray[j].ToString();
                            row.Cells.Add(value);
                        }
                        excelTable.Rows.Add(row);
                    }
                    // The result of each spreadsheet is in result.Tables
                }
            }
            var sb = new StringBuilder();

            sb.AppendLine("<table class='excel-table'>");
            foreach (var row in excelTable.Rows)
            {
                sb.AppendLine("<tr>");
                foreach (var column in row.Cells)
                {
                    sb.AppendLine($@"<td>{column}</td>");
                }
                sb.AppendLine("</tr>");
            }
            sb.AppendLine("</table>");
            renderer.Write(sb.ToString());
        }
        public override void Transform(
            ExtensionHtmlRenderer renderer,
            TableOfContentBlock block,
            TableOfContent astNode)
        {
            List <Heading> headings = renderer.ContainerBlock.GetHeadings();
            var            sb       = new StringBuilder();

            sb.AppendLine("# Table of Content");
            foreach (var heading in headings)
            {
                var tabs = new string('\t', heading.Level - 1);
                sb.AppendLine(tabs + "- " + heading.Title);
            }
            MarkdownDocument document = Markdown.Parse(sb.ToString());

            Replace(block, document);
        }
        public override void Render(ExtensionHtmlRenderer renderer, Diagram diagram, IFormatState formatState)
        {
            var(element, elementsEnumerable) = _provider.GetBpmnElements(new Path(diagram.Name));
            var elements = elementsEnumerable.ToList();

            elements.Sort(new BpmnElement.AliasComparer());
            var sb = new StringBuilder();

            sb.AppendLine($@"<h1>{element.Name}</h1>");
            foreach (var e in elements)
            {
                string name = string.IsNullOrEmpty(e.Name) ? e.Alias : e.Name;
                sb.AppendLine($@"<h2>{name}</h2>");
                sb.AppendLine($@"<p>Lane: {e.Lane}</p>");
                sb.AppendLine($@"<p>Description:<br>");
                sb.AppendLine($@"{e.Notes}</p>");
            }
            renderer.Write(sb.ToString());
        }
Esempio n. 12
0
        public override void Transform(ExtensionHtmlRenderer extensionHtmlRenderer, XmlSnippetBlock block, XmlSnippet astNode)
        {
            // get xml content using xpath
            // create new xml fcb with xml content
            // replace
            var       xmlFile              = new File(_renderSettings.SourceFolder, astNode.File);
            XDocument document             = XDocument.Load(xmlFile.AbsolutePath);
            IEnumerable <XElement> queried = document.Root.XPathSelectElements(astNode.Xpath);
            var sb = new StringBuilder();

            sb.AppendLine("```xml");
            foreach (var element in queried)
            {
                sb.AppendLine(element.ToString());
            }
            sb.AppendLine("```");
            MarkdownDocument markdownDocument = Markdown.Parse(sb.ToString());

            Replace(block, markdownDocument);
        }
        public override void Render(ExtensionHtmlRenderer renderer, TableOfContent model, IFormatState formatState)
        {
            List <Heading> headings = renderer.ContainerBlock.GetHeadings();
            var            sb       = new StringBuilder();

            sb.AppendLine("<nav>");
            sb.AppendLine("<div class='title'>Contents</div>");
            foreach (var heading in headings)
            {
                var id = HtmlHelper.Unescape(heading.HeadingBlock.GetAttributes().Id);
                sb.AppendLine($@"<a href='#{id}' class='nav-level-{heading.Level}'>{heading.Title}</a>");
            }
            sb.AppendLine("</nav>");
            renderer.Write(sb.ToString());

            var dynamicCss = GenerateCss(model);

            if (dynamicCss != null)
            {
                renderer.RegisterDynamicCss(dynamicCss);
            }
        }
Esempio n. 14
0
        public override void Transform(ExtensionHtmlRenderer extensionHtmlRenderer, WorkflowNotesBlock block, Diagram diagram)
        {
            var(element, elementsEnumerable) = _provider.GetBpmnElements(new EaProvider.Path(diagram.Name));
            var elements = elementsEnumerable.ToList();

            elements.Sort(new BpmnElement.AliasComparer());
            var sb = new StringBuilder();

            sb.AppendLine($@"# {element.Name}");
            var converter = new Html2Markdown.Converter();

            foreach (BpmnElement e in elements)
            {
                string           name    = string.IsNullOrEmpty(e.Name) ? e.Alias : e.Name;
                string           notes   = converter.Convert(e.Notes);
                MarkdownDocument notesMd = Markdown.Parse(notes);
                notesMd.IncreaseHeadingLevel(2);
                string normalizedNotes = null;
                using (var writer = new StringWriter())
                {
                    var pipeline = new MarkdownPipelineBuilder().Build();
                    pipeline.Extensions.AddIfNotAlready <SoftlineBreakAsHardlineExtension>();
                    var renderer = new NormalizeRenderer(writer);
                    pipeline.Setup(renderer);
                    renderer.Render(notesMd);
                    writer.Flush();
                    normalizedNotes = writer.ToString();
                }

                sb.AppendLine($@"## {name}");
                sb.AppendLine($@"Lane: {e.Lane}");
                sb.AppendLine();
                sb.AppendLine($@"Description:");
                sb.AppendLine(normalizedNotes);
            }
            MarkdownDocument document = Markdown.Parse(sb.ToString());

            Replace(block, document);
        }
Esempio n. 15
0
        private static void RegisterBlocks(ExtensionHtmlRenderer renderer)
        {
            renderer.RegisterBlock <FolderFromDiskBlock, FolderFromDiskExtension>();
            renderer.RegisterBlock <FolderListBlock, FolderListExtension>();
            renderer.RegisterBlock <NestedBlockBlock, NestedBlockExtension>();
            renderer.RegisterBlock <SnippetBlock, SnippetExtension>();
            renderer.RegisterBlock <PanZoomImageBlock, PanZoomImageExtension>();
            renderer.RegisterBlock <ExcelTableBlock, ExcelTableExtension>();
            renderer.RegisterBlock <MsSqlTableBlock, MsSqlTableExtension>();
            renderer.RegisterBlock <GitHistoryBlock, GitHistoryExtension>();
            renderer.RegisterBlock <GitGraphBlock, GitGraphExtension>();
            renderer.RegisterBlock <WorkflowNotesBlock, WorkflowNotesExtension>();
            renderer.RegisterBlock <BpmnGraphBlock, BpmnGraphExtension>();
            renderer.RegisterBlock <DiagramBlock, DiagramImageExtension>();
            renderer.RegisterBlock <TableNotesBlock, TableNotesExtension>();
            renderer.RegisterBlock <ObjectTextBlock, ObjectTextExtension>();
            renderer.RegisterBlock <DatamodelApiBlock, DatamodelApiExtension>();
            renderer.RegisterBlock <TableOfContentBlock, TableOfContentExtension>();
            //renderer.RegisterBlock<NoteParagraphBlock, NoteExtension>();
            renderer.RegisterBlock <XmlSnippetBlock, XmlSnippetExtension>();

            renderer.RegisterInline <KeyboardKeysInline, KeyboardKeysExtension>();
        }
        private void RenderDiagram(Path diagramPath, ExtensionHtmlRenderer renderer)
        {
            var  folder = _renderSettings.ImageFolder;
            File file   = _provider.GetDiagramFile(diagramPath, folder);

            if (IO.File.Exists(file.AbsolutePath))
            {
                if (_renderSettings.EmbedImages)
                {
                    var bytes  = IO.File.ReadAllBytes(file.AbsolutePath);
                    var base64 = Convert.ToBase64String(bytes);
                    renderer.Write($@"<img src='data:image/png;base64,{base64}' />");
                }
                else
                {
                    renderer.Write($@"<img src='{file.RelativePath}' />");
                }
            }
            else
            {
                renderer.Write($@"<p>something went wrong retrieving the image [{diagramPath}]</p>");
            }
        }
Esempio n. 17
0
        public override void Render(ExtensionHtmlRenderer renderer, BpmnGraph bpmnGraph, IFormatState formatState)
        {
            var sb      = new StringBuilder();
            var bpmnXml = IO.File.ReadAllText(bpmnGraph.FileUri);

            // Loading BPMN xml from filesystem results in a CORS error
            sb.AppendLine($@"
				<div class='box' style='height: {bpmnGraph.Height};'>
				  <div class='row content' id='canvas' ></div>
				</div>
				<script>
					var nav = document.getElementById('nav');
					var bpmnViewer = new BpmnJS({{ container: '#canvas' }});
					bpmnViewer.importXML(`{bpmnXml}`, function(err) {{
						if (err) {{
							return console.error('could not import BPMN 2.0 diagram', err);
						}}
						//var canvas = bpmnViewer.get('canvas');
						//canvas.zoom('fit-height');
					}});
				</script>"                );
            renderer.Write(sb.ToString());
        }
        public override void Render(ExtensionHtmlRenderer renderer, KeyboardKeys keyboardKeys, IFormatState formatState)
        {
            var html = string.Join(string.Empty, keyboardKeys.Keys.Select(k => $@"<kbd>{k}</kbd>"));

            renderer.Write(html);
        }
Esempio n. 19
0
        public override void Render(ExtensionHtmlRenderer renderer, FM.Folder model, IFormatState formatState)
        {
            void write(string value) => renderer.Write(value);

            Output(model, 1, write);
        }
 public void Render(ExtensionHtmlRenderer renderer, Note model, IFormatState formatState)
 {
     renderer.RegisterDynamicCss(Css.First());
 }
Esempio n. 21
0
        public override void Render(ExtensionHtmlRenderer renderer, DatamodelApi model, IFormatState formatState)
        {
            var file = new File(_renderSettings.SourceFolder, model.FileName ?? "schema.json");

            //if (file.Exists() && !_renderSettings.ForceRefreshData)
            //{
            //	return;
            //}
            bool IncludeTable(Element e)
            {
                if (e.Stereotype != "table" && e.Type != "Enumeration")
                {
                    return(false);
                }
                return(e.TaggedValue("IsMigrationApi"));
            }

            bool IncludeEnum(Element e)
            {
                return(e.Type == "Enumeration" && e.TaggedValue("IsMigrationApi"));
            }

            var path   = new Path(model.PackagePath);
            var tables = _eaProvider
                         .GetElements(path, IncludeTable, "DataModelApiTables", true);

            var schema = new JSchema
            {
                SchemaVersion = new Uri("http://json-schema.org/draft-07/schema#"),
                Type          = JSchemaType.Object,
                Title         = "SOSPES Permit datamodel migration API",
            };
            var enums          = new Dictionary <string, IList <JToken> >();
            var requiredTables = new List <string>();
            IEnumerable <Element> enumElements = null;

            if (model.EnumsPackagePath != null)
            {
                var enumPath = new Path(model.EnumsPackagePath);
                enumElements = _eaProvider.GetElements(enumPath, IncludeEnum, "DataModelApiEnums", true);
            }
            else
            {
                enumElements = tables.Where(t => t.Type == "Enumeration");
            }

            foreach (var table in enumElements)
            {
                var values = new List <JToken>();
                foreach (var enumValue in table.Attributes)
                {
                    values.Add(enumValue.Name);
                }
                foreach (var enumValue in table.Attributes)
                {
                    values.Add(enumValue.DefaultValue);
                }
                enums.Add(table.Name, values);
            }
            foreach (var table in tables.Where(t => t.Type != "Enumeration"))
            {
                var tableArraySchema = new JSchema
                {
                    Type = JSchemaType.Array
                };
                void transform(MarkdownDocument md)
                {
                    md.IncreaseHeadingLevel(3);
                }

                var sanitizedNotes = table.Notes.Replace("\\r\\n", "\n");
                var notes          = Helper.Converter2(table.Notes, transform, renderer.Pipeline);
                var tableSchema    = new JSchema
                {
                    Description = notes,
                    Title       = table.Name,
                    Type        = JSchemaType.Object,
                    Format      = "Date-time",
                };
                tableArraySchema.Items.Add(tableSchema);
                var required = new List <string>();
                //
                foreach (var attribute in table.Attributes)
                {
                    if (!attribute.TaggedValue("IsMigrationApi"))
                    {
                        continue;
                    }

                    bool isEnum = attribute.Name.EndsWith("EnumId");
                    var(schemaType, format) = ToJsonType(attribute);
                    var columnSchema = new JSchema
                    {
                        Type        = isEnum ? JSchemaType.Integer | JSchemaType.String : schemaType,
                        Description = attribute.Notes,
                        Format      = format
                    };
                    if (isEnum)
                    {
                        string         enumName = attribute.Name.Replace("EnumId", string.Empty);
                        IList <JToken> @enum    = enums[enumName];
                        foreach (var enumValue in @enum)
                        {
                            columnSchema.Enum.Add(enumValue);
                        }
                        //var enumValueComments = new JSchema
                        //{

                        //};
                        //JToken derpy = "";
                        //enumValueComments.Properties.Add("enumValueName", (JToken)"");
                        //columnSchema.Properties.Add("meta:enum", enumValueComments);
                    }
                    if (attribute.Length != 0)
                    {
                        columnSchema.MaximumLength = attribute.Length;
                    }
                    if (!attribute.Nullable)
                    {
                        required.Add(attribute.Name);
                    }
                    tableSchema.Properties.Add(attribute.Name, columnSchema);
                }
                if (table.TaggedValue("IncludeCreatedDateTimeInMigrationApi"))
                {
                    var createdDateTime = new JSchema
                    {
                        Type        = JSchemaType.String,
                        Description = "Creation DateTime"
                    };
                    tableSchema.Properties.Add("CreatedDateTime", createdDateTime);
                }
                required.ForEach(r => tableSchema.Required.Add(r));
                schema.Properties.Add(table.Name + "List", tableArraySchema);
                requiredTables.Add(table.Name);
            }
            requiredTables.ForEach(rt => schema.Required.Add(rt));
            renderer.Write(schema.ToString());
            using (System.IO.StreamWriter textWriter = System.IO.File.CreateText(file.AbsolutePath))
                using (var jsonWriter = new JsonTextWriter(textWriter))
                {
                    jsonWriter.Formatting = Formatting.Indented;
                    schema.WriteTo(jsonWriter);
                    jsonWriter.Flush();
                }
        }
Esempio n. 22
0
        public override void Render(ExtensionHtmlRenderer renderer, GitGraph gitGraph, IFormatState formatState)
        {
            // first commit should have a branch name
            var    script        = new StringBuilder();
            var    branches      = new HashSet <BranchName>();
            string currentBranch = null;

            foreach (var commit in gitGraph.Commits)
            {
                if (!branches.Contains(commit.BranchName))
                {
                    branches.Add(commit.BranchName);
                    var branch = commit.BranchName.Name;
                    currentBranch = branch;
                    script.AppendLine($"const {branch} = gitGraph.branch('{branch}');");
                }
                if (commit.Branch != null && !branches.Contains(commit.Branch))
                {
                    branches.Add(commit.Branch);
                    var branch = commit.Branch.Name;
                    currentBranch = branch;
                    script.AppendLine($"const {branch} = gitGraph.branch('{branch}');");
                }
                string authorText = null;
                if (commit.Author == null)
                {
                    authorText = "null";
                }
                else if (commit.Author != null && commit.Author.Email == null)
                {
                    authorText = $@"'{commit.Author.Name}'";
                }
                else if (commit.Author != null && commit.Author.Email == null)
                {
                    authorText = $@"'{commit.Author.Name} <{commit.Author.Email}>'";
                }
                string author = null;
                if (!string.IsNullOrEmpty(authorText))
                {
                    author = $@"author: {authorText}";
                }

                string tag = null;
                if (commit.Tag != null)
                {
                    script.AppendLine($@"{currentBranch}.tag('{commit.Tag.Name}')");
                }
                var    subject    = $@"subject: '{commit.Title}'";
                string commitArgs = null;
                if (author != null)
                {
                    commitArgs = $@"{{{subject}, {author}}}";
                }
                else
                {
                    commitArgs = $@"{{{subject}}}";
                }
                script.AppendLine($"{commit.BranchName.Name}.commit({commitArgs});");
                if (commit.Merge != null)
                {
                    script.AppendLine($"{commit.Merge.Name}.merge('{commit.BranchName.Name}');");
                }
            }
            var sb = new StringBuilder();

            sb.Append($@"
                <div>
                    <div id='derpy'></div>
                    <script type='text/javascript'>
                        const graphContainer = document.getElementById('derpy');
                        const gitGraph = GitgraphJS.createGitgraph(graphContainer);
                        {script.ToString()}
                    </script>
                </div>");
            renderer.Write(sb.ToString());
        }
Esempio n. 23
0
        private static void File(string fullFilePath, Container container, RenderSettings settings)
        {
            string body         = null;
            string summaries    = null;
            string cssHeader    = null;
            string jsHeader     = null;
            var    sourceFolder = new AbsoluteFolder(Path.GetDirectoryName(fullFilePath));

            if (settings == null)
            {
                settings = RenderSettings.DefaultWiki(sourceFolder);
            }

            using (var scope = ThreadScopedLifestyle.BeginScope(container))
                using (var writer = new StringWriter())
                {
                    MarkdownPipeline pipeline = CreatePipeline(container);
                    var markdown         = System.IO.File.ReadAllText(fullFilePath);
                    var markdownDocument = Markdown.Parse(markdown, pipeline);
                    var renderer         = new ExtensionHtmlRenderer(writer, markdownDocument, settings, pipeline);
                    renderer.RegisterDynamicCss(new Code("markdown-extensions", "0.0.1", () =>
                                                         Assembly.GetExecutingAssembly().GetFileContent("vscode-markdown.css")));

                    pipeline.Setup(renderer);
                    RegisterBlocks(renderer);

                    renderer.Parse(container);
                    renderer.Validate(container);
                    renderer.Transform();
                    renderer.Render(markdownDocument);
                    var fileName = Path.GetFileName(fullFilePath);
                    renderer.RenderMarkdown(fileName, markdownDocument);
                    writer.Flush();
                    body = writer.ToString();

                    using (var summaryWriter = new StringWriter())
                    {
                        // a bit of a hack to use different writer for summaries
                        renderer.Writer = summaryWriter;
                        renderer.RenderSummaries(markdownDocument);
                        summaryWriter.Flush();
                        summaries = summaryWriter.ToString();
                    }

                    cssHeader = renderer.RenderCssHeader();
                    jsHeader  = renderer.RenderJavascriptHeader();
                }
            var    document = $@"
				<html>
					<head>
						{jsHeader}
						{cssHeader}
					</head>
					<body>
						{summaries}
						<main>
						{body}
						</main>
					</body>
				</html>"                ;
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fullFilePath);
            var    file = new File(settings.OutputFolder, fileNameWithoutExtension + ".html");

            System.IO.File.WriteAllText(file.AbsolutePath, document);
        }
Esempio n. 24
0
        private static void AggregateCheatSheet(Container container)
        {
            Dictionary <string, string> cheatSheetByExtensionName = container
                                                                    .GetAllInstances <IExtensionInfo>()
                                                                    .ToDictionary(x => x.Name, x => x.CheatSheet);
            var    sb               = new StringBuilder();
            int    i                = 1;
            var    body             = new StringBuilder();
            string cssHeader        = null;
            string javascriptHeader = null;

            using (ThreadScopedLifestyle.BeginScope(container))
            {
                foreach (var entry in cheatSheetByExtensionName)
                {
                    var markdown = entry.Value;
                    var writer   = new StringWriter();
                    var pipeline = CreatePipeline(container);
                    var document = Markdown.Parse(markdown, pipeline);
                    var renderer = new ExtensionHtmlRenderer(writer, document, new RenderSettings(), pipeline);
                    pipeline.Setup(renderer);
                    RegisterBlocks(renderer);
                    renderer.Parse(container);
                    // validate errors
                    renderer.Transform();
                    // run validations
                    renderer.Render(document);
                    writer.Flush();

                    cssHeader        = renderer.RenderCssHeader();
                    javascriptHeader = renderer.RenderJavascriptHeader();

                    string isChecked = i == 1 ? "checked" : "";
                    string name      = entry.Key;
                    string md        = entry.Value;
                    string html      = writer.ToString();

                    var tab = $@"
						<section>
							<input type='radio' name='sections' id='option{i}' {isChecked}>
							<label for='option{i}'>{name}</label>
							<article>{html}</article>
						</section>"                        ;
                    body.AppendLine(tab);
                    i += 1;
                }
            }
            var htmlDocument = $@"
				<html>
					<head>
						{javascriptHeader}
						{cssHeader}
					</head>
					<body>
						<div class='tabordion'>
							{body}
						</div>
					</body>
				</html>"                ;

            System.IO.File.WriteAllText("CheatSheet.html", htmlDocument);
        }
        public override void Transform(ExtensionHtmlRenderer extensionHtmlRenderer, TableNotesBlock block, TableNotes tableNotes)
        {
            IEnumerable <Element> tables = null;

            if (tableNotes.PackagePath != null)
            {
                var package = _provider.GetElementsByPackage(tableNotes.PackagePath);
                tables = package
                         .GetElementsRecursively()
                         .Where(e => TableNotes.Include(tableNotes, e));
            }
            else
            {
                //tables = _provider
                //	.GetElements(e => e.Stereotype == "table")
                //	.Where(e => TableNotes.Include(tableNotes, e));
                throw new NotImplementedException();
            }

            var all = new StringBuilder();

            void transform(MarkdownDocument md)
            {
                md.IncreaseHeadingLevel(1);
            }

            foreach (var table in tables)
            {
                var sb = new StringBuilder();
                sb.AppendLine($@"## {table.Name}");
                bool hasTableNotes = false;

                if (!string.IsNullOrEmpty(table.Notes))
                {
                    hasTableNotes = true;
                    var notes = Helper.Converter(table.Notes, transform, extensionHtmlRenderer.Pipeline);
                    sb.AppendLine(notes);
                }
                bool hasFieldNotes = false;
                sb.AppendLine($@"### Properties");
                foreach (var taggedValue in table.TaggedValues)
                {
                    if (string.IsNullOrEmpty(taggedValue.Value))
                    {
                        continue;
                    }
                    sb.AppendLine($@"- **{taggedValue.Key}**: {taggedValue.Value}");
                }

                sb.AppendLine($@"### Attributes");
                foreach (var attribute in table.Attributes)
                {
                    if (string.IsNullOrEmpty(attribute.Notes))
                    {
                        continue;
                    }
                    hasFieldNotes = true;
                    var notes = Helper.Converter(attribute.Notes, transform, extensionHtmlRenderer.Pipeline);
                    sb.AppendLine($@"#### {attribute.Name}");
                    sb.AppendLine(notes);
                }
                bool hasNotes = hasTableNotes || hasFieldNotes;
                if (hasNotes)
                {
                    all.Append(sb);
                }
            }

            MarkdownDocument document = Markdown.Parse(all.ToString(), extensionHtmlRenderer.Pipeline);

            Replace(block, document);
        }