├── .gitattributes
├── .gitignore
├── Images
└── oxyplot.svg
├── LICENSE
├── Markdig.Extensions.ScriptCs.ConsoleApp
├── App.config
├── Example output
│ ├── modest.css
│ ├── output.htm
│ ├── output.pdf
│ └── style.css
├── Markdig.Extensions.ScriptCs.ConsoleApp.csproj
├── Oxyplot.csx
├── Program.cs
├── Properties
│ └── AssemblyInfo.cs
├── StringConstants.cs
├── input.md
├── modest.css
├── packages.config
└── style.css
├── Markdig.Extensions.ScriptCs.sln
├── Markdig.Extensions.ScriptCs
├── Markdig.Extensions.ScriptCs.csproj
├── MarkdownDocument.cs
├── Properties
│ └── AssemblyInfo.cs
├── ScriptCsBlock.cs
├── ScriptCsBlockParser.cs
├── ScriptCsBlockRenderer.cs
├── ScriptCsExtension.cs
├── ScriptCsInline.cs
├── ScriptCsInlineParser.cs
├── ScriptCsInlineRenderer.cs
├── ScriptCsOptions.cs
├── ScriptCsRenderer.cs
├── app.config
└── packages.config
└── README.md
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.suo
8 | *.user
9 | *.userosscache
10 | *.sln.docstates
11 |
12 | # User-specific files (MonoDevelop/Xamarin Studio)
13 | *.userprefs
14 |
15 | # Build results
16 | [Dd]ebug/
17 | [Dd]ebugPublic/
18 | [Rr]elease/
19 | [Rr]eleases/
20 | x64/
21 | x86/
22 | bld/
23 | [Bb]in/
24 | [Oo]bj/
25 | [Ll]og/
26 |
27 | # Visual Studio 2015 cache/options directory
28 | .vs/
29 | # Uncomment if you have tasks that create the project's static files in wwwroot
30 | #wwwroot/
31 |
32 | # MSTest test Results
33 | [Tt]est[Rr]esult*/
34 | [Bb]uild[Ll]og.*
35 |
36 | # NUNIT
37 | *.VisualState.xml
38 | TestResult.xml
39 |
40 | # Build Results of an ATL Project
41 | [Dd]ebugPS/
42 | [Rr]eleasePS/
43 | dlldata.c
44 |
45 | # .NET Core
46 | project.lock.json
47 | project.fragment.lock.json
48 | artifacts/
49 | **/Properties/launchSettings.json
50 |
51 | *_i.c
52 | *_p.c
53 | *_i.h
54 | *.ilk
55 | *.meta
56 | *.obj
57 | *.pch
58 | *.pdb
59 | *.pgc
60 | *.pgd
61 | *.rsp
62 | *.sbr
63 | *.tlb
64 | *.tli
65 | *.tlh
66 | *.tmp
67 | *.tmp_proj
68 | *.log
69 | *.vspscc
70 | *.vssscc
71 | .builds
72 | *.pidb
73 | *.svclog
74 | *.scc
75 |
76 | # Chutzpah Test files
77 | _Chutzpah*
78 |
79 | # Visual C++ cache files
80 | ipch/
81 | *.aps
82 | *.ncb
83 | *.opendb
84 | *.opensdf
85 | *.sdf
86 | *.cachefile
87 | *.VC.db
88 | *.VC.VC.opendb
89 |
90 | # Visual Studio profiler
91 | *.psess
92 | *.vsp
93 | *.vspx
94 | *.sap
95 |
96 | # TFS 2012 Local Workspace
97 | $tf/
98 |
99 | # Guidance Automation Toolkit
100 | *.gpState
101 |
102 | # ReSharper is a .NET coding add-in
103 | _ReSharper*/
104 | *.[Rr]e[Ss]harper
105 | *.DotSettings.user
106 |
107 | # JustCode is a .NET coding add-in
108 | .JustCode
109 |
110 | # TeamCity is a build add-in
111 | _TeamCity*
112 |
113 | # DotCover is a Code Coverage Tool
114 | *.dotCover
115 |
116 | # Visual Studio code coverage results
117 | *.coverage
118 | *.coveragexml
119 |
120 | # NCrunch
121 | _NCrunch_*
122 | .*crunch*.local.xml
123 | nCrunchTemp_*
124 |
125 | # MightyMoose
126 | *.mm.*
127 | AutoTest.Net/
128 |
129 | # Web workbench (sass)
130 | .sass-cache/
131 |
132 | # Installshield output folder
133 | [Ee]xpress/
134 |
135 | # DocProject is a documentation generator add-in
136 | DocProject/buildhelp/
137 | DocProject/Help/*.HxT
138 | DocProject/Help/*.HxC
139 | DocProject/Help/*.hhc
140 | DocProject/Help/*.hhk
141 | DocProject/Help/*.hhp
142 | DocProject/Help/Html2
143 | DocProject/Help/html
144 |
145 | # Click-Once directory
146 | publish/
147 |
148 | # Publish Web Output
149 | *.[Pp]ublish.xml
150 | *.azurePubxml
151 | # TODO: Comment the next line if you want to checkin your web deploy settings
152 | # but database connection strings (with potential passwords) will be unencrypted
153 | *.pubxml
154 | *.publishproj
155 |
156 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
157 | # checkin your Azure Web App publish settings, but sensitive information contained
158 | # in these scripts will be unencrypted
159 | PublishScripts/
160 |
161 | # NuGet Packages
162 | *.nupkg
163 | # The packages folder can be ignored because of Package Restore
164 | **/packages/*
165 | # except build/, which is used as an MSBuild target.
166 | !**/packages/build/
167 | # Uncomment if necessary however generally it will be regenerated when needed
168 | #!**/packages/repositories.config
169 | # NuGet v3's project.json files produces more ignorable files
170 | *.nuget.props
171 | *.nuget.targets
172 |
173 | # Microsoft Azure Build Output
174 | csx/
175 | *.build.csdef
176 |
177 | # Microsoft Azure Emulator
178 | ecf/
179 | rcf/
180 |
181 | # Windows Store app package directories and files
182 | AppPackages/
183 | BundleArtifacts/
184 | Package.StoreAssociation.xml
185 | _pkginfo.txt
186 |
187 | # Visual Studio cache files
188 | # files ending in .cache can be ignored
189 | *.[Cc]ache
190 | # but keep track of directories ending in .cache
191 | !*.[Cc]ache/
192 |
193 | # Others
194 | ClientBin/
195 | ~$*
196 | *~
197 | *.dbmdl
198 | *.dbproj.schemaview
199 | *.jfm
200 | *.pfx
201 | *.publishsettings
202 | orleans.codegen.cs
203 |
204 | # Since there are multiple workflows, uncomment next line to ignore bower_components
205 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
206 | #bower_components/
207 |
208 | # RIA/Silverlight projects
209 | Generated_Code/
210 |
211 | # Backup & report files from converting an old project file
212 | # to a newer Visual Studio version. Backup files are not needed,
213 | # because we have git ;-)
214 | _UpgradeReport_Files/
215 | Backup*/
216 | UpgradeLog*.XML
217 | UpgradeLog*.htm
218 |
219 | # SQL Server files
220 | *.mdf
221 | *.ldf
222 | *.ndf
223 |
224 | # Business Intelligence projects
225 | *.rdl.data
226 | *.bim.layout
227 | *.bim_*.settings
228 |
229 | # Microsoft Fakes
230 | FakesAssemblies/
231 |
232 | # GhostDoc plugin setting file
233 | *.GhostDoc.xml
234 |
235 | # Node.js Tools for Visual Studio
236 | .ntvs_analysis.dat
237 | node_modules/
238 |
239 | # Typescript v1 declaration files
240 | typings/
241 |
242 | # Visual Studio 6 build log
243 | *.plg
244 |
245 | # Visual Studio 6 workspace options file
246 | *.opt
247 |
248 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
249 | *.vbw
250 |
251 | # Visual Studio LightSwitch build output
252 | **/*.HTMLClient/GeneratedArtifacts
253 | **/*.DesktopClient/GeneratedArtifacts
254 | **/*.DesktopClient/ModelManifest.xml
255 | **/*.Server/GeneratedArtifacts
256 | **/*.Server/ModelManifest.xml
257 | _Pvt_Extensions
258 |
259 | # Paket dependency manager
260 | .paket/paket.exe
261 | paket-files/
262 |
263 | # FAKE - F# Make
264 | .fake/
265 |
266 | # JetBrains Rider
267 | .idea/
268 | *.sln.iml
269 |
270 | # CodeRush
271 | .cr/
272 |
273 | # Python Tools for Visual Studio (PTVS)
274 | __pycache__/
275 | *.pyc
276 |
277 | # Cake - Uncomment if you are using it
278 | # tools/**
279 | # !tools/packages.config
280 |
281 | # Telerik's JustMock configuration file
282 | *.jmconfig
283 |
284 | # BizTalk build output
285 | *.btp.cs
286 | *.btm.cs
287 | *.odx.cs
288 | *.xsd.cs
289 |
--------------------------------------------------------------------------------
/Images/oxyplot.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 macaba
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Markdig.Extensions.ScriptCs.ConsoleApp/App.config:
--------------------------------------------------------------------------------
1 |
2 |
Instantiate the Markdig.Extensions.ScriptCs into the scripting runtime:
19 |
20 | ```ScriptCs
21 | #r Markdig.Extensions.ScriptCs.dll
22 | using Markdig.Extensions.ScriptCs;
23 | ```
24 |
This only needs to be done once in your document.
27 |This generates some simple HTML from ScriptCs
29 |
31 | MarkdownDocument.Instance.InsertHtml("<p>Hello World!</p>");
32 |
Hello World!
This generates some simple Markdown from ScriptCs (which is then processed into HTML)
37 |
39 | MarkdownDocument.Instance.InsertMarkdown("Hello World!");
40 |
Hello World!
44 |This uses inline code tags to generate some markdown.
46 |This is some `ScriptCs MarkdownDocument.Instance.InsertMarkdown("_italic_");` text.
48 |
49 | This is some italic text.
51 |This is some `ScriptCs MarkdownDocument.Instance.InsertHtml("<em>italic</em>");` text.
53 |
54 | This is some italic text.
56 |This generates a ScriptCs exception by using invalid code.
58 |60 | var fakeModel = new FakeModel { Title = "Test" }; 61 |
ScriptCs exception:
65 | (1,21): error CS0246: The type or namespace name 'FakeModel' could not be found (are you missing a using directive or an assembly reference?)
66 |
67 | Left
71 |Middle
73 |Right
75 |Left half
80 |Right half
82 |87 | #r OxyPlot.dll 88 | #r System.Runtime.dll 89 | using OxyPlot; 90 | using OxyPlot.Series; 91 | var myModel = new PlotModel { Title = "Example 1" }; 92 | myModel.Series.Add(new FunctionSeries(Math.Cos, 0, 10, 0.1, "cos(x)")); 93 | var exporter = new SvgExporter { Width = 800, Height = 400 }; 94 | MarkdownDocument.Instance.InsertHtml(exporter.ExportToString(myModel)); 95 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae fermentum dui. Morbi eu scelerisque ligula. Vivamus placerat erat urna, nec dictum lacus varius eu. Ut eu enim quis elit tempor congue quis eu tortor. Duis sed finibus erat. Curabitur venenatis, est quis consectetur porta, eros lacus gravida augue, vitae consequat nibh dui ut urna. Cras at orci quis felis congue volutpat non in mauris. Donec posuere risus felis, et egestas sapien ultrices in. Aliquam elementum imperdiet est, ullamcorper fermentum mauris imperdiet ornare.
198 |Phasellus erat ex, egestas faucibus tellus vel, volutpat feugiat est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce ornare metus ut risus viverra, ut vulputate nisl ullamcorper. Pellentesque auctor volutpat dictum. Sed vel justo massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce consectetur sit amet est quis aliquam. Cras fermentum blandit justo, sed sagittis felis pharetra at. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque id felis est. Curabitur ac massa at arcu laoreet gravida. Quisque pretium sagittis dignissim. Curabitur consequat eget purus et sollicitudin. Vivamus hendrerit sodales egestas. Ut pretium dui id erat interdum bibendum. Nulla vitae ligula in sem congue pulvinar id in libero.
199 |Donec efficitur sollicitudin pulvinar. Sed quis diam a nibh scelerisque luctus. Aenean varius ullamcorper vulputate. Pellentesque facilisis rutrum lacus, ut bibendum magna dignissim non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse porttitor mauris quis rhoncus blandit. Aliquam ac imperdiet risus. Vestibulum imperdiet dolor eu tortor consectetur sollicitudin. Maecenas malesuada accumsan volutpat. Quisque et elementum ligula.
200 |Nullam augue odio, facilisis in enim id, tincidunt dapibus metus. Quisque sed faucibus ex. Suspendisse lacus libero, porta sed metus vel, tempor mattis magna. Vivamus vulputate mi vel purus fringilla ultricies. Fusce vitae consequat odio, eu porttitor nulla. Nunc nec maximus massa. Praesent porttitor porta dignissim. Nunc lacinia tempus convallis.
201 |Nunc at metus eleifend, luctus ligula eu, vehicula leo. Fusce ultrices dui at ante laoreet auctor. Fusce non augue vel erat ultrices tristique a et sem. Pellentesque at elementum est. Quisque consectetur commodo metus, non molestie felis gravida a. Nam molestie feugiat aliquet. Pellentesque augue odio, tristique id arcu ac, rhoncus dapibus quam. Integer congue a lectus at congue. Donec accumsan elementum tempor. Praesent auctor bibendum ipsum quis ultricies. Pellentesque congue malesuada ligula, id mattis turpis ullamcorper pulvinar. Cras mi tellus, porttitor eu mauris eget, elementum dapibus nulla.
202 |Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae fermentum dui. Morbi eu scelerisque ligula. Vivamus placerat erat urna, nec dictum lacus varius eu. Ut eu enim quis elit tempor congue quis eu tortor. Duis sed finibus erat. Curabitur venenatis, est quis consectetur porta, eros lacus gravida augue, vitae consequat nibh dui ut urna. Cras at orci quis felis congue volutpat non in mauris. Donec posuere risus felis, et egestas sapien ultrices in. Aliquam elementum imperdiet est, ullamcorper fermentum mauris imperdiet ornare.
203 |Phasellus erat ex, egestas faucibus tellus vel, volutpat feugiat est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce ornare metus ut risus viverra, ut vulputate nisl ullamcorper. Pellentesque auctor volutpat dictum. Sed vel justo massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce consectetur sit amet est quis aliquam. Cras fermentum blandit justo, sed sagittis felis pharetra at. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque id felis est. Curabitur ac massa at arcu laoreet gravida. Quisque pretium sagittis dignissim. Curabitur consequat eget purus et sollicitudin. Vivamus hendrerit sodales egestas. Ut pretium dui id erat interdum bibendum. Nulla vitae ligula in sem congue pulvinar id in libero.
204 |Donec efficitur sollicitudin pulvinar. Sed quis diam a nibh scelerisque luctus. Aenean varius ullamcorper vulputate. Pellentesque facilisis rutrum lacus, ut bibendum magna dignissim non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse porttitor mauris quis rhoncus blandit. Aliquam ac imperdiet risus. Vestibulum imperdiet dolor eu tortor consectetur sollicitudin. Maecenas malesuada accumsan volutpat. Quisque et elementum ligula.
205 |Nullam augue odio, facilisis in enim id, tincidunt dapibus metus. Quisque sed faucibus ex. Suspendisse lacus libero, porta sed metus vel, tempor mattis magna. Vivamus vulputate mi vel purus fringilla ultricies. Fusce vitae consequat odio, eu porttitor nulla. Nunc nec maximus massa. Praesent porttitor porta dignissim. Nunc lacinia tempus convallis.
206 |Nunc at metus eleifend, luctus ligula eu, vehicula leo. Fusce ultrices dui at ante laoreet auctor. Fusce non augue vel erat ultrices tristique a et sem. Pellentesque at elementum est. Quisque consectetur commodo metus, non molestie felis gravida a. Nam molestie feugiat aliquet. Pellentesque augue odio, tristique id arcu ac, rhoncus dapibus quam. Integer congue a lectus at congue. Donec accumsan elementum tempor. Praesent auctor bibendum ipsum quis ultricies. Pellentesque congue malesuada ligula, id mattis turpis ullamcorper pulvinar. Cras mi tellus, porttitor eu mauris eget, elementum dapibus nulla.
207 |Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae fermentum dui. Morbi eu scelerisque ligula. Vivamus placerat erat urna, nec dictum lacus varius eu. Ut eu enim quis elit tempor congue quis eu tortor. Duis sed finibus erat. Curabitur venenatis, est quis consectetur porta, eros lacus gravida augue, vitae consequat nibh dui ut urna. Cras at orci quis felis congue volutpat non in mauris. Donec posuere risus felis, et egestas sapien ultrices in. Aliquam elementum imperdiet est, ullamcorper fermentum mauris imperdiet ornare.
208 |Phasellus erat ex, egestas faucibus tellus vel, volutpat feugiat est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce ornare metus ut risus viverra, ut vulputate nisl ullamcorper. Pellentesque auctor volutpat dictum. Sed vel justo massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce consectetur sit amet est quis aliquam. Cras fermentum blandit justo, sed sagittis felis pharetra at. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque id felis est. Curabitur ac massa at arcu laoreet gravida. Quisque pretium sagittis dignissim. Curabitur consequat eget purus et sollicitudin. Vivamus hendrerit sodales egestas. Ut pretium dui id erat interdum bibendum. Nulla vitae ligula in sem congue pulvinar id in libero.
209 |Donec efficitur sollicitudin pulvinar. Sed quis diam a nibh scelerisque luctus. Aenean varius ullamcorper vulputate. Pellentesque facilisis rutrum lacus, ut bibendum magna dignissim non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse porttitor mauris quis rhoncus blandit. Aliquam ac imperdiet risus. Vestibulum imperdiet dolor eu tortor consectetur sollicitudin. Maecenas malesuada accumsan volutpat. Quisque et elementum ligula.
210 |Nullam augue odio, facilisis in enim id, tincidunt dapibus metus. Quisque sed faucibus ex. Suspendisse lacus libero, porta sed metus vel, tempor mattis magna. Vivamus vulputate mi vel purus fringilla ultricies. Fusce vitae consequat odio, eu porttitor nulla. Nunc nec maximus massa. Praesent porttitor porta dignissim. Nunc lacinia tempus convallis.
211 |Nunc at metus eleifend, luctus ligula eu, vehicula leo. Fusce ultrices dui at ante laoreet auctor. Fusce non augue vel erat ultrices tristique a et sem. Pellentesque at elementum est. Quisque consectetur commodo metus, non molestie felis gravida a. Nam molestie feugiat aliquet. Pellentesque augue odio, tristique id arcu ac, rhoncus dapibus quam. Integer congue a lectus at congue. Donec accumsan elementum tempor. Praesent auctor bibendum ipsum quis ultricies. Pellentesque congue malesuada ligula, id mattis turpis ullamcorper pulvinar. Cras mi tellus, porttitor eu mauris eget, elementum dapibus nulla.
212 |The current UTC date-time is:
215 | 05/02/2018 12:32:52Hello World!
"); 27 | ``` 28 | 29 | #### Output 30 | ```ScriptCs 31 | MarkdownDocument.Instance.InsertHtml("Hello World!
"); 32 | ``` 33 | 34 | ## Markdown {.pb_before} 35 | This generates some simple Markdown from ScriptCs (which is then processed into HTML) 36 | 37 | #### Code 38 | ```C# 39 | MarkdownDocument.Instance.InsertMarkdown("Hello World!"); 40 | ``` 41 | 42 | #### Output 43 | ```ScriptCs 44 | MarkdownDocument.Instance.InsertMarkdown("Hello World!"); 45 | ``` 46 | 47 | ## Inline {.pb_before} 48 | This uses inline code tags to generate some markdown. 49 | 50 | #### Code 51 | ``` 52 | This is some `ScriptCs MarkdownDocument.Instance.InsertMarkdown("_italic_");` text. 53 | ``` 54 | 55 | #### Output 56 | This is some `ScriptCs MarkdownDocument.Instance.InsertMarkdown("_italic_");` text. 57 | 58 | #### Code 59 | ``` 60 | This is some `ScriptCs MarkdownDocument.Instance.InsertHtml("italic");` text. 61 | ``` 62 | 63 | #### Output 64 | This is some `ScriptCs MarkdownDocument.Instance.InsertHtml("italic");` text. 65 | 66 | ## Exception Handling {.pb_before} 67 | This generates a ScriptCs exception by using invalid code. 68 | 69 | #### Code 70 | ```C# 71 | var fakeModel = new FakeModel { Title = "Test" }; 72 | ``` 73 | 74 | #### Output 75 | ```ScriptCs 76 | var fakeModel = new FakeModel { Title = "Test" }; 77 | ``` 78 | 79 | This generates an exception by referring to a missing DLL. 80 | 81 | #### Code 82 | ```C# 83 | #r Missing.dll 84 | MarkdownDocument.Instance.InsertMarkdown("This code block will not complete, but subsequent ones will."); 85 | ``` 86 | 87 | #### Output 88 | ```ScriptCs 89 | #r Missing.dll 90 | MarkdownDocument.Instance.InsertMarkdown("This code block will not complete, but subsequent ones will."); 91 | ``` 92 | 93 | ## Bootstrap Layout {.pb_before} 94 | 95 | #### Simple content 96 | ::::{.row} 97 | :::{.col-md-4} 98 | Left{.text-center} 99 | ::: 100 | :::{.col-md-4} 101 | Middle{.text-center} 102 | ::: 103 | :::{.col-md-4} 104 | Right{.text-center} 105 | ::: 106 | :::: 107 | 108 | #### Content from ScriptCs 109 | ::::{.row} 110 | :::{.col-md-6} 111 | ```ScriptCs 112 | MarkdownDocument.Instance.InsertMarkdown("Left half{.text-center}"); 113 | ``` 114 | ::: 115 | :::{.col-md-6} 116 | ```ScriptCs 117 | MarkdownDocument.Instance.InsertMarkdown("Right half{.text-center}"); 118 | ``` 119 | ::: 120 | :::: 121 | 122 | ## OxyPlot {.pb_before} 123 | 124 | #### Code 125 | ```C# 126 | #r OxyPlot.dll 127 | #r System.Runtime.dll 128 | using OxyPlot; 129 | using OxyPlot.Series; 130 | var myModel = new PlotModel { Title = "Example 1" }; 131 | myModel.Series.Add(new FunctionSeries(Math.Cos, 0, 10, 0.1, "cos(x)")); 132 | var exporter = new SvgExporter { Width = 800, Height = 400 }; 133 | MarkdownDocument.Instance.InsertHtml(exporter.ExportToString(myModel)); 134 | ``` 135 | 136 | #### Output 137 | ```ScriptCs 138 | #r OxyPlot.dll 139 | #r System.Runtime.dll 140 | using OxyPlot; 141 | using OxyPlot.Series; 142 | var myModel = new PlotModel { Title = "Example 1" }; 143 | myModel.Series.Add(new FunctionSeries(Math.Cos, 0, 10, 0.1, "cos(x)")); 144 | var exporter = new SvgExporter { Width = 800, Height = 400 }; 145 | MarkdownDocument.Instance.InsertHtml(exporter.ExportToString(myModel)); 146 | ``` 147 | 148 | ```ScriptCs 149 | #load OxyPlot.csx 150 | RenderChart(); 151 | ``` 152 | 153 | ## Ipsum Lorem {.pb_before} 154 | 155 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae fermentum dui. Morbi eu scelerisque ligula. Vivamus placerat erat urna, nec dictum lacus varius eu. Ut eu enim quis elit tempor congue quis eu tortor. Duis sed finibus erat. Curabitur venenatis, est quis consectetur porta, eros lacus gravida augue, vitae consequat nibh dui ut urna. Cras at orci quis felis congue volutpat non in mauris. Donec posuere risus felis, et egestas sapien ultrices in. Aliquam elementum imperdiet est, ullamcorper fermentum mauris imperdiet ornare. 156 | 157 | Phasellus erat ex, egestas faucibus tellus vel, volutpat feugiat est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce ornare metus ut risus viverra, ut vulputate nisl ullamcorper. Pellentesque auctor volutpat dictum. Sed vel justo massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce consectetur sit amet est quis aliquam. Cras fermentum blandit justo, sed sagittis felis pharetra at. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque id felis est. Curabitur ac massa at arcu laoreet gravida. Quisque pretium sagittis dignissim. Curabitur consequat eget purus et sollicitudin. Vivamus hendrerit sodales egestas. Ut pretium dui id erat interdum bibendum. Nulla vitae ligula in sem congue pulvinar id in libero. 158 | 159 | Donec efficitur sollicitudin pulvinar. Sed quis diam a nibh scelerisque luctus. Aenean varius ullamcorper vulputate. Pellentesque facilisis rutrum lacus, ut bibendum magna dignissim non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse porttitor mauris quis rhoncus blandit. Aliquam ac imperdiet risus. Vestibulum imperdiet dolor eu tortor consectetur sollicitudin. Maecenas malesuada accumsan volutpat. Quisque et elementum ligula. 160 | 161 | Nullam augue odio, facilisis in enim id, tincidunt dapibus metus. Quisque sed faucibus ex. Suspendisse lacus libero, porta sed metus vel, tempor mattis magna. Vivamus vulputate mi vel purus fringilla ultricies. Fusce vitae consequat odio, eu porttitor nulla. Nunc nec maximus massa. Praesent porttitor porta dignissim. Nunc lacinia tempus convallis. 162 | 163 | Nunc at metus eleifend, luctus ligula eu, vehicula leo. Fusce ultrices dui at ante laoreet auctor. Fusce non augue vel erat ultrices tristique a et sem. Pellentesque at elementum est. Quisque consectetur commodo metus, non molestie felis gravida a. Nam molestie feugiat aliquet. Pellentesque augue odio, tristique id arcu ac, rhoncus dapibus quam. Integer congue a lectus at congue. Donec accumsan elementum tempor. Praesent auctor bibendum ipsum quis ultricies. Pellentesque congue malesuada ligula, id mattis turpis ullamcorper pulvinar. Cras mi tellus, porttitor eu mauris eget, elementum dapibus nulla. 164 | 165 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae fermentum dui. Morbi eu scelerisque ligula. Vivamus placerat erat urna, nec dictum lacus varius eu. Ut eu enim quis elit tempor congue quis eu tortor. Duis sed finibus erat. Curabitur venenatis, est quis consectetur porta, eros lacus gravida augue, vitae consequat nibh dui ut urna. Cras at orci quis felis congue volutpat non in mauris. Donec posuere risus felis, et egestas sapien ultrices in. Aliquam elementum imperdiet est, ullamcorper fermentum mauris imperdiet ornare. 166 | 167 | Phasellus erat ex, egestas faucibus tellus vel, volutpat feugiat est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce ornare metus ut risus viverra, ut vulputate nisl ullamcorper. Pellentesque auctor volutpat dictum. Sed vel justo massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce consectetur sit amet est quis aliquam. Cras fermentum blandit justo, sed sagittis felis pharetra at. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque id felis est. Curabitur ac massa at arcu laoreet gravida. Quisque pretium sagittis dignissim. Curabitur consequat eget purus et sollicitudin. Vivamus hendrerit sodales egestas. Ut pretium dui id erat interdum bibendum. Nulla vitae ligula in sem congue pulvinar id in libero. 168 | 169 | Donec efficitur sollicitudin pulvinar. Sed quis diam a nibh scelerisque luctus. Aenean varius ullamcorper vulputate. Pellentesque facilisis rutrum lacus, ut bibendum magna dignissim non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse porttitor mauris quis rhoncus blandit. Aliquam ac imperdiet risus. Vestibulum imperdiet dolor eu tortor consectetur sollicitudin. Maecenas malesuada accumsan volutpat. Quisque et elementum ligula. 170 | 171 | Nullam augue odio, facilisis in enim id, tincidunt dapibus metus. Quisque sed faucibus ex. Suspendisse lacus libero, porta sed metus vel, tempor mattis magna. Vivamus vulputate mi vel purus fringilla ultricies. Fusce vitae consequat odio, eu porttitor nulla. Nunc nec maximus massa. Praesent porttitor porta dignissim. Nunc lacinia tempus convallis. 172 | 173 | Nunc at metus eleifend, luctus ligula eu, vehicula leo. Fusce ultrices dui at ante laoreet auctor. Fusce non augue vel erat ultrices tristique a et sem. Pellentesque at elementum est. Quisque consectetur commodo metus, non molestie felis gravida a. Nam molestie feugiat aliquet. Pellentesque augue odio, tristique id arcu ac, rhoncus dapibus quam. Integer congue a lectus at congue. Donec accumsan elementum tempor. Praesent auctor bibendum ipsum quis ultricies. Pellentesque congue malesuada ligula, id mattis turpis ullamcorper pulvinar. Cras mi tellus, porttitor eu mauris eget, elementum dapibus nulla. 174 | 175 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae fermentum dui. Morbi eu scelerisque ligula. Vivamus placerat erat urna, nec dictum lacus varius eu. Ut eu enim quis elit tempor congue quis eu tortor. Duis sed finibus erat. Curabitur venenatis, est quis consectetur porta, eros lacus gravida augue, vitae consequat nibh dui ut urna. Cras at orci quis felis congue volutpat non in mauris. Donec posuere risus felis, et egestas sapien ultrices in. Aliquam elementum imperdiet est, ullamcorper fermentum mauris imperdiet ornare. 176 | 177 | Phasellus erat ex, egestas faucibus tellus vel, volutpat feugiat est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce ornare metus ut risus viverra, ut vulputate nisl ullamcorper. Pellentesque auctor volutpat dictum. Sed vel justo massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce consectetur sit amet est quis aliquam. Cras fermentum blandit justo, sed sagittis felis pharetra at. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque id felis est. Curabitur ac massa at arcu laoreet gravida. Quisque pretium sagittis dignissim. Curabitur consequat eget purus et sollicitudin. Vivamus hendrerit sodales egestas. Ut pretium dui id erat interdum bibendum. Nulla vitae ligula in sem congue pulvinar id in libero. 178 | 179 | Donec efficitur sollicitudin pulvinar. Sed quis diam a nibh scelerisque luctus. Aenean varius ullamcorper vulputate. Pellentesque facilisis rutrum lacus, ut bibendum magna dignissim non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse porttitor mauris quis rhoncus blandit. Aliquam ac imperdiet risus. Vestibulum imperdiet dolor eu tortor consectetur sollicitudin. Maecenas malesuada accumsan volutpat. Quisque et elementum ligula. 180 | 181 | Nullam augue odio, facilisis in enim id, tincidunt dapibus metus. Quisque sed faucibus ex. Suspendisse lacus libero, porta sed metus vel, tempor mattis magna. Vivamus vulputate mi vel purus fringilla ultricies. Fusce vitae consequat odio, eu porttitor nulla. Nunc nec maximus massa. Praesent porttitor porta dignissim. Nunc lacinia tempus convallis. 182 | 183 | Nunc at metus eleifend, luctus ligula eu, vehicula leo. Fusce ultrices dui at ante laoreet auctor. Fusce non augue vel erat ultrices tristique a et sem. Pellentesque at elementum est. Quisque consectetur commodo metus, non molestie felis gravida a. Nam molestie feugiat aliquet. Pellentesque augue odio, tristique id arcu ac, rhoncus dapibus quam. Integer congue a lectus at congue. Donec accumsan elementum tempor. Praesent auctor bibendum ipsum quis ultricies. Pellentesque congue malesuada ligula, id mattis turpis ullamcorper pulvinar. Cras mi tellus, porttitor eu mauris eget, elementum dapibus nulla. 184 | 185 | ## Misc {.pb_before} 186 | 187 | #### DateTime.UtcNow 188 | The current UTC date-time is: 189 | ```ScriptCs 190 | MarkdownDocument.Instance.InsertHtml(DateTime.UtcNow.ToString()); 191 | ``` -------------------------------------------------------------------------------- /Markdig.Extensions.ScriptCs.ConsoleApp/modest.css: -------------------------------------------------------------------------------- 1 | @media print { 2 | *, 3 | *:before, 4 | *:after { 5 | background: transparent !important; 6 | color: #000 !important; 7 | box-shadow: none !important; 8 | text-shadow: none !important; 9 | } 10 | 11 | a, 12 | a:visited { 13 | text-decoration: underline; 14 | } 15 | 16 | a[href]:after { 17 | content: " (" attr(href) ")"; 18 | } 19 | 20 | abbr[title]:after { 21 | content: " (" attr(title) ")"; 22 | } 23 | 24 | a[href^="#"]:after, 25 | a[href^="javascript:"]:after { 26 | content: ""; 27 | } 28 | 29 | pre, 30 | blockquote { 31 | border: 1px solid #999; 32 | page-break-inside: avoid; 33 | } 34 | 35 | thead { 36 | display: table-header-group; 37 | } 38 | 39 | tr, 40 | img { 41 | page-break-inside: avoid; 42 | } 43 | 44 | img { 45 | max-width: 100% !important; 46 | } 47 | 48 | p, 49 | h2, 50 | h3 { 51 | orphans: 3; 52 | widows: 3; 53 | } 54 | 55 | h2, 56 | h3 { 57 | page-break-after: avoid; 58 | } 59 | } 60 | 61 | pre, 62 | code { 63 | font-family: Menlo, Monaco, "Courier New", monospace; 64 | } 65 | 66 | pre { 67 | padding: .5rem; 68 | line-height: 1.25; 69 | overflow-x: scroll; 70 | } 71 | 72 | a, 73 | a:visited { 74 | color: #3498db; 75 | } 76 | 77 | a:hover, 78 | a:focus, 79 | a:active { 80 | color: #2980b9; 81 | } 82 | 83 | .modest-no-decoration { 84 | text-decoration: none; 85 | } 86 | 87 | html { 88 | font-size: 12px; 89 | } 90 | 91 | @media screen and (min-width: 32rem) and (max-width: 48rem) { 92 | html { 93 | font-size: 15px; 94 | } 95 | } 96 | 97 | @media screen and (min-width: 48rem) { 98 | html { 99 | font-size: 16px; 100 | } 101 | } 102 | 103 | body { 104 | line-height: 1.85; 105 | } 106 | 107 | p, 108 | .modest-p { 109 | font-size: 1rem; 110 | margin-bottom: 1.3rem; 111 | } 112 | 113 | h1, 114 | .modest-h1, 115 | h2, 116 | .modest-h2, 117 | h3, 118 | .modest-h3, 119 | h4, 120 | .modest-h4 { 121 | margin: 1.414rem 0 .5rem; 122 | font-weight: inherit; 123 | line-height: 1.42; 124 | } 125 | 126 | h1, 127 | .modest-h1 { 128 | margin-top: 0; 129 | font-size: 3.998rem; 130 | } 131 | 132 | h2, 133 | .modest-h2 { 134 | font-size: 2.827rem; 135 | } 136 | 137 | h3, 138 | .modest-h3 { 139 | font-size: 1.999rem; 140 | } 141 | 142 | h4, 143 | .modest-h4 { 144 | font-size: 1.414rem; 145 | } 146 | 147 | h5, 148 | .modest-h5 { 149 | font-size: 1.121rem; 150 | } 151 | 152 | h6, 153 | .modest-h6 { 154 | font-size: .88rem; 155 | } 156 | 157 | small, 158 | .modest-small { 159 | font-size: .707em; 160 | } 161 | 162 | /* https://github.com/mrmrs/fluidity */ 163 | 164 | img, 165 | canvas, 166 | iframe, 167 | video, 168 | svg, 169 | select, 170 | textarea { 171 | max-width: 100%; 172 | } 173 | 174 | @import url(http://fonts.googleapis.com/css?family=Open+Sans+Condensed:300,300italic,700); 175 | 176 | @import url(http://fonts.googleapis.com/css?family=Arimo:700,700italic); 177 | 178 | html { 179 | font-size: 18px; 180 | max-width: 100%; 181 | } 182 | 183 | body { 184 | color: #444; 185 | font-family: 'Open Sans Condensed', sans-serif; 186 | font-weight: 300; 187 | margin: 0 auto; 188 | max-width: 48rem; 189 | line-height: 1.45; 190 | padding: .25rem; 191 | } 192 | 193 | h1, 194 | h2, 195 | h3, 196 | h4, 197 | h5, 198 | h6 { 199 | font-family: Arimo, Helvetica, sans-serif; 200 | } 201 | 202 | h1, 203 | h2, 204 | h3 { 205 | border-bottom: 2px solid #fafafa; 206 | margin-bottom: 1.15rem; 207 | padding-bottom: .5rem; 208 | text-align: center; 209 | } 210 | 211 | blockquote { 212 | border-left: 8px solid #fafafa; 213 | padding: 1rem; 214 | } 215 | 216 | pre, 217 | code { 218 | background-color: #fafafa; 219 | } -------------------------------------------------------------------------------- /Markdig.Extensions.ScriptCs.ConsoleApp/packages.config: -------------------------------------------------------------------------------- 1 | 2 |")) 54 | markdown = markdown.Substring(3); 55 | if (markdown.EndsWith("
\n")) 56 | markdown = markdown.Substring(0, markdown.Length - 5); 57 | } 58 | 59 | renderer.Write(markdown); 60 | } 61 | } 62 | MarkdownDocument.Instance.Reset(); 63 | } 64 | catch (Exception ex) 65 | { 66 | renderer.Write(Markdown.ToHtml(BuildMarkdownExceptionMessage(ex, options.ExceptionStackTrace), pipeline)); 67 | } 68 | } 69 | else 70 | { 71 | renderer.Write(script); 72 | } 73 | } 74 | } 75 | 76 | public string BuildMarkdownExceptionMessage(Exception exception, bool stackTrace) 77 | { 78 | string message = "```" + Environment.NewLine + "ScriptCs exception:" + Environment.NewLine + exception.Message; 79 | if (exception is FileNotFoundException) 80 | { 81 | message += " (" + ((FileNotFoundException)exception).FileName + ")"; 82 | } 83 | if (stackTrace) 84 | { 85 | message = message + Environment.NewLine; 86 | message = message + exception.StackTrace; 87 | } 88 | message = message + Environment.NewLine + "```" + Environment.NewLine; 89 | return message; 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /Markdig.Extensions.ScriptCs/app.config: -------------------------------------------------------------------------------- 1 | 2 |Hello World!
"); 59 | ``` 60 | ```` 61 | 62 | ##### Output: 63 | 64 | Hello World! 65 | 66 | ## OxyPlot 67 | 68 | ##### Markdown: 69 | ```` 70 | ```ScriptCs 71 | #r OxyPlot.dll 72 | #r System.Runtime.dll 73 | using OxyPlot; 74 | using OxyPlot.Series; 75 | var myModel = new PlotModel { Title = "Example 1" }; 76 | myModel.Series.Add(new FunctionSeries(Math.Cos, 0, 10, 0.1, "cos(x)")); 77 | var exporter = new SvgExporter { Width = 800, Height = 400 }; 78 | MarkdownDocument.Instance.InsertHtml(exporter.ExportToString(myModel)); 79 | ``` 80 | ```` 81 | 82 | ##### Output: 83 |  84 | 85 | ## Separation of code from content 86 | 87 | It is possible to separate large amounts of code into `csx` files which can be referenced in the markdown. The `csx` file must be located in the bin directory. 88 | 89 | ##### Markdown: 90 | ```` 91 | ```ScriptCs 92 | #load OxyPlot.csx 93 | RenderChart(); 94 | ``` 95 | ```` 96 | 97 | ##### OxyPlot.csx: 98 | ``` 99 | #r OxyPlot.dll 100 | #r System.Runtime.dll 101 | using OxyPlot; 102 | using OxyPlot.Series; 103 | 104 | public void RenderChart() 105 | { 106 | var myModel = new PlotModel { Title = "Example 1" }; 107 | myModel.Series.Add(new FunctionSeries(Math.Cos, 0, 10, 0.1, "cos(x)")); 108 | var exporter = new SvgExporter { Width = 800, Height = 400 }; 109 | MarkdownDocument.Instance.InsertHtml(exporter.ExportToString(myModel)); 110 | } 111 | ``` 112 | 113 | ## Exception handling 114 | 115 | ##### Markdown: 116 | 117 | ```` 118 | ```ScriptCs 119 | var fakeModel = new FakeModel { Title = "Test" }; 120 | ``` 121 | ```` 122 | 123 | ##### Output: 124 | 125 | ``` 126 | ScriptCs exception: 127 | (1,21): error CS0246: The type or namespace name 'FakeModel' could not be found (are you missing a using directive or an assembly reference?) 128 | ``` 129 | 130 | ## More examples 131 | 132 | This PDF was generated by the Chrome print dialog from the HTML generated by Markdig using input.md as the source. It coincidentally shows the use of CSS to get page breaks in the PDF output. 133 | https://github.com/macaba/Markdig.Extensions.ScriptCs/blob/master/Markdig.Extensions.ScriptCs.ConsoleApp/Example%20output/output.pdf 134 | --------------------------------------------------------------------------------