From 375d767b1ca78547a7176e901920a1e7a56fc2d8 Mon Sep 17 00:00:00 2001 From: mndrake Date: Sun, 24 Nov 2013 09:36:52 -0800 Subject: [PATCH 01/11] Create gh-pages branch via GitHub --- images/bg_hr.png | Bin 0 -> 943 bytes images/blacktocat.png | Bin 0 -> 1428 bytes images/icon_download.png | Bin 0 -> 1162 bytes images/sprite_download.png | Bin 0 -> 16799 bytes index.html | 89 ++++++++ javascripts/main.js | 1 + params.json | 1 + stylesheets/pygment_trac.css | 70 ++++++ stylesheets/stylesheet.css | 423 +++++++++++++++++++++++++++++++++++ 9 files changed, 584 insertions(+) create mode 100644 images/bg_hr.png create mode 100644 images/blacktocat.png create mode 100644 images/icon_download.png create mode 100644 images/sprite_download.png create mode 100644 index.html create mode 100644 javascripts/main.js create mode 100644 params.json create mode 100644 stylesheets/pygment_trac.css create mode 100644 stylesheets/stylesheet.css diff --git a/images/bg_hr.png b/images/bg_hr.png new file mode 100644 index 0000000000000000000000000000000000000000..7973bd69888c7e10ccad1111d555ceabb7cd99b6 GIT binary patch literal 943 zcmaJ=O^ee&7!FiK7FWCot{@Ck@nrMW&tx0B-6VAbrk1u~FTzffX&bu9#AIsIdef8t z!QZfdz=K}>3m(LO;6X3qN}Y6@>cJYA%)G<%Jn!ec>9im1@7>wsIBwrMF}iHO!q%;8 zSJ@xEd~(FL18NRvkBsOXMVM>4WQc*~qcQGc17IjxRnj!O_^B1gan0x#EWT48PK->5B2>mI;LIx zC*FSw$Nfc!g)WZCEOJ=mM)}lLsOk|$ltg_(&ax_YCWMlBLPDVT%D_gB7o_$YZ`-OB z#1sV%whRq21>W;qwN$N?OUGtQQe;JvOsQrna;+v+j8dth=*?orHHb6waX>S!yXCgT zo!oR3{E&GzaOAzfZYv@_Sf{LdyJInS>TS60&R9%yCs$y>2x(*gYIJtRrYAja$Ceq} z!N&oc_K1!3-Ft`U>`CM;quEbB4KG%!MovB*9_3!QzFhqHwrbwK|Doo-y>auDJNSP6 T=d)j*_4El@X4^PFK7I8YBT*xD literal 0 HcmV?d00001 diff --git a/images/blacktocat.png b/images/blacktocat.png new file mode 100644 index 0000000000000000000000000000000000000000..6e264fe57a2e35a2855405ac7d4102c3f6ddcdae GIT binary patch literal 1428 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..1f5a068 --- /dev/null +++ b/index.html @@ -0,0 +1,89 @@ + + + + + + + + + + + Exceldnadoc + + + + + +
+
+ View on GitHub + +

Exceldnadoc

+

command-line utility to create a compiled HTML Help Workshop file (.chm) for ExcelDna

+ +
+ Download this project as a .zip file + Download this project as a tar.gz file +
+
+
+ + +
+
+

+Welcome to GitHub Pages.

+ +

This automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:

+ +
$ cd your_repo_root/repo_name
+$ git fetch origin
+$ git checkout gh-pages
+
+ +

If you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.

+ +

+Designer Templates

+ +

We've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.

+ +

+Rather Drive Stick?

+ +

If you prefer to not use the automatic generator, push a branch named gh-pages to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.

+ +

+Authors and Contributors

+ +

You can @mention a GitHub username to generate a link to their profile. The resulting <a> element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.

+ +

+Support or Contact

+ +

Having trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.

+
+
+ + + + + + + + + + diff --git a/javascripts/main.js b/javascripts/main.js new file mode 100644 index 0000000..d8135d3 --- /dev/null +++ b/javascripts/main.js @@ -0,0 +1 @@ +console.log('This would be the main JS file.'); diff --git a/params.json b/params.json new file mode 100644 index 0000000..9e1bc4f --- /dev/null +++ b/params.json @@ -0,0 +1 @@ +{"name":"Exceldnadoc","tagline":"command-line utility to create a compiled HTML Help Workshop file (.chm) for ExcelDna","body":"### Welcome to GitHub Pages.\r\nThis automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:\r\n\r\n```\r\n$ cd your_repo_root/repo_name\r\n$ git fetch origin\r\n$ git checkout gh-pages\r\n```\r\n\r\nIf you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.\r\n\r\n### Designer Templates\r\nWe've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.\r\n\r\n### Rather Drive Stick?\r\nIf you prefer to not use the automatic generator, push a branch named `gh-pages` to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.\r\n\r\n### Authors and Contributors\r\nYou can @mention a GitHub username to generate a link to their profile. The resulting `` element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.\r\n\r\n### Support or Contact\r\nHaving trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.\r\n","google":"UA-42066235-4","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css new file mode 100644 index 0000000..e65cedf --- /dev/null +++ b/stylesheets/pygment_trac.css @@ -0,0 +1,70 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f0f3f3; } +.highlight .c { color: #0099FF; font-style: italic } /* Comment */ +.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #006699; font-weight: bold } /* Keyword */ +.highlight .o { color: #555555 } /* Operator */ +.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #009999 } /* Comment.Preproc */ +.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */ +.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ +.highlight .go { color: #AAAAAA } /* Generic.Output */ +.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #99CC66 } /* Generic.Traceback */ +.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #006699 } /* Keyword.Pseudo */ +.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #FF6600 } /* Literal.Number */ +.highlight .s { color: #CC3300 } /* Literal.String */ +.highlight .na { color: #330099 } /* Name.Attribute */ +.highlight .nb { color: #336666 } /* Name.Builtin */ +.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */ +.highlight .no { color: #336600 } /* Name.Constant */ +.highlight .nd { color: #9999FF } /* Name.Decorator */ +.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #CC00FF } /* Name.Function */ +.highlight .nl { color: #9999FF } /* Name.Label */ +.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #003333 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #FF6600 } /* Literal.Number.Float */ +.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */ +.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */ +.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */ +.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */ +.highlight .sc { color: #CC3300 } /* Literal.String.Char */ +.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #CC3300 } /* Literal.String.Double */ +.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */ +.highlight .si { color: #AA0000 } /* Literal.String.Interpol */ +.highlight .sx { color: #CC3300 } /* Literal.String.Other */ +.highlight .sr { color: #33AAAA } /* Literal.String.Regex */ +.highlight .s1 { color: #CC3300 } /* Literal.String.Single */ +.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */ +.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #003333 } /* Name.Variable.Class */ +.highlight .vg { color: #003333 } /* Name.Variable.Global */ +.highlight .vi { color: #003333 } /* Name.Variable.Instance */ +.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */ + +.type-csharp .highlight .k { color: #0000FF } +.type-csharp .highlight .kt { color: #0000FF } +.type-csharp .highlight .nf { color: #000000; font-weight: normal } +.type-csharp .highlight .nc { color: #2B91AF } +.type-csharp .highlight .nn { color: #000000 } +.type-csharp .highlight .s { color: #A31515 } +.type-csharp .highlight .sc { color: #A31515 } diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css new file mode 100644 index 0000000..7a08b01 --- /dev/null +++ b/stylesheets/stylesheet.css @@ -0,0 +1,423 @@ +/******************************************************************************* +Slate Theme for GitHub Pages +by Jason Costello, @jsncostello +*******************************************************************************/ + +@import url(pygment_trac.css); + +/******************************************************************************* +MeyerWeb Reset +*******************************************************************************/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + vertical-align: baseline; +} + +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + +ol, ul { + list-style: none; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +/******************************************************************************* +Theme Styles +*******************************************************************************/ + +body { + box-sizing: border-box; + color:#373737; + background: #212121; + font-size: 16px; + font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; + line-height: 1.5; + -webkit-font-smoothing: antialiased; +} + +h1, h2, h3, h4, h5, h6 { + margin: 10px 0; + font-weight: 700; + color:#222222; + font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; + letter-spacing: -1px; +} + +h1 { + font-size: 36px; + font-weight: 700; +} + +h2 { + padding-bottom: 10px; + font-size: 32px; + background: url('../images/bg_hr.png') repeat-x bottom; +} + +h3 { + font-size: 24px; +} + +h4 { + font-size: 21px; +} + +h5 { + font-size: 18px; +} + +h6 { + font-size: 16px; +} + +p { + margin: 10px 0 15px 0; +} + +footer p { + color: #f2f2f2; +} + +a { + text-decoration: none; + color: #007edf; + text-shadow: none; + + transition: color 0.5s ease; + transition: text-shadow 0.5s ease; + -webkit-transition: color 0.5s ease; + -webkit-transition: text-shadow 0.5s ease; + -moz-transition: color 0.5s ease; + -moz-transition: text-shadow 0.5s ease; + -o-transition: color 0.5s ease; + -o-transition: text-shadow 0.5s ease; + -ms-transition: color 0.5s ease; + -ms-transition: text-shadow 0.5s ease; +} + +a:hover, a:focus {text-decoration: underline;} + +footer a { + color: #F2F2F2; + text-decoration: underline; +} + +em { + font-style: italic; +} + +strong { + font-weight: bold; +} + +img { + position: relative; + margin: 0 auto; + max-width: 739px; + padding: 5px; + margin: 10px 0 10px 0; + border: 1px solid #ebebeb; + + box-shadow: 0 0 5px #ebebeb; + -webkit-box-shadow: 0 0 5px #ebebeb; + -moz-box-shadow: 0 0 5px #ebebeb; + -o-box-shadow: 0 0 5px #ebebeb; + -ms-box-shadow: 0 0 5px #ebebeb; +} + +p img { + display: inline; + margin: 0; + padding: 0; + vertical-align: middle; + text-align: center; + border: none; +} + +pre, code { + width: 100%; + color: #222; + background-color: #fff; + + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; + font-size: 14px; + + border-radius: 2px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; +} + +pre { + width: 100%; + padding: 10px; + box-shadow: 0 0 10px rgba(0,0,0,.1); + overflow: auto; +} + +code { + padding: 3px; + margin: 0 3px; + box-shadow: 0 0 10px rgba(0,0,0,.1); +} + +pre code { + display: block; + box-shadow: none; +} + +blockquote { + color: #666; + margin-bottom: 20px; + padding: 0 0 0 20px; + border-left: 3px solid #bbb; +} + + +ul, ol, dl { + margin-bottom: 15px +} + +ul { + list-style: inside; + padding-left: 20px; +} + +ol { + list-style: decimal inside; + padding-left: 20px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + padding-left: 20px; + font-style: italic; +} + +dl p { + padding-left: 20px; + font-style: italic; +} + +hr { + height: 1px; + margin-bottom: 5px; + border: none; + background: url('../images/bg_hr.png') repeat-x center; +} + +table { + border: 1px solid #373737; + margin-bottom: 20px; + text-align: left; + } + +th { + font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; + padding: 10px; + background: #373737; + color: #fff; + } + +td { + padding: 10px; + border: 1px solid #373737; + } + +form { + background: #f2f2f2; + padding: 20px; +} + +/******************************************************************************* +Full-Width Styles +*******************************************************************************/ + +.outer { + width: 100%; +} + +.inner { + position: relative; + max-width: 640px; + padding: 20px 10px; + margin: 0 auto; +} + +#forkme_banner { + display: block; + position: absolute; + top:0; + right: 10px; + z-index: 10; + padding: 10px 50px 10px 10px; + color: #fff; + background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; + font-weight: 700; + box-shadow: 0 0 10px rgba(0,0,0,.5); + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +#header_wrap { + background: #212121; + background: -moz-linear-gradient(top, #373737, #212121); + background: -webkit-linear-gradient(top, #373737, #212121); + background: -ms-linear-gradient(top, #373737, #212121); + background: -o-linear-gradient(top, #373737, #212121); + background: linear-gradient(top, #373737, #212121); +} + +#header_wrap .inner { + padding: 50px 10px 30px 10px; +} + +#project_title { + margin: 0; + color: #fff; + font-size: 42px; + font-weight: 700; + text-shadow: #111 0px 0px 10px; +} + +#project_tagline { + color: #fff; + font-size: 24px; + font-weight: 300; + background: none; + text-shadow: #111 0px 0px 10px; +} + +#downloads { + position: absolute; + width: 210px; + z-index: 10; + bottom: -40px; + right: 0; + height: 70px; + background: url('../images/icon_download.png') no-repeat 0% 90%; +} + +.zip_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom left; +} + +.tar_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom right; + margin-left: 10px; +} + +.zip_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top left; +} + +.tar_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top right; +} + +#main_content_wrap { + background: #f2f2f2; + border-top: 1px solid #111; + border-bottom: 1px solid #111; +} + +#main_content { + padding-top: 40px; +} + +#footer_wrap { + background: #212121; +} + + + +/******************************************************************************* +Small Device Styles +*******************************************************************************/ + +@media screen and (max-width: 480px) { + body { + font-size:14px; + } + + #downloads { + display: none; + } + + .inner { + min-width: 320px; + max-width: 480px; + } + + #project_title { + font-size: 32px; + } + + h1 { + font-size: 28px; + } + + h2 { + font-size: 24px; + } + + h3 { + font-size: 21px; + } + + h4 { + font-size: 18px; + } + + h5 { + font-size: 14px; + } + + h6 { + font-size: 12px; + } + + code, pre { + min-width: 320px; + max-width: 480px; + font-size: 11px; + } + +} From 99f3f409f9e665ab3c9b9dda2aff124d20227798 Mon Sep 17 00:00:00 2001 From: Dave Carlson Date: Fri, 24 Jan 2014 20:30:45 -0600 Subject: [PATCH 02/11] Update generated documentation for version 0.1.16 --- content/style.css | 188 ++++++++++++++++++++++++++++++++++++++++++++++ content/tips.js | 46 ++++++++++++ help.png | Bin 0 -> 112716 bytes 3 files changed, 234 insertions(+) create mode 100644 content/style.css create mode 100644 content/tips.js create mode 100644 help.png diff --git a/content/style.css b/content/style.css new file mode 100644 index 0000000..c4f8259 --- /dev/null +++ b/content/style.css @@ -0,0 +1,188 @@ +@import url(http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Gudea); + +/*-------------------------------------------------------------------------- + Formatting for F# code snippets +/*--------------------------------------------------------------------------*/ + +/* identifier */ +span.i { color:#d1d1d1; } +/* string */ +span.s { color:#d4b43c; } +/* keywords */ +span.k { color:#4e98dc; } +/* comment */ +span.c { color:#96C71D; } +/* operators */ +span.o { color:#af75c1; } +/* numbers */ +span.n { color:#96C71D; } +/* line number */ +span.l { color:#80b0b0; } + +/* inactive code */ +span.inactive { color:#808080; } +/* preprocessor */ +span.prep { color:#af75c1; } +/* fsi output */ +span.fsi { color:#808080; } + +/* omitted */ +span.omitted { + background:#3c4e52; + border-radius:5px; + color:#808080; + padding:0px 0px 1px 0px; +} +/* tool tip */ +div.tip { + background:#475b5f; + border-radius:4px; + font:11pt 'Droid Sans', arial, sans-serif; + padding:6px 8px 6px 8px; + display:none; + color:#d1d1d1; +} +table.pre pre { + padding:0px; + margin:0px; + border:none; +} +table.pre, pre.fssnip, pre { + line-height:13pt; + border:1px solid #d8d8d8; + border-collapse:separate; + white-space:pre; + font: 9pt 'Droid Sans Mono',consolas,monospace; + width:90%; + margin:10px 20px 20px 20px; + background-color:#212d30; + padding:10px; + border-radius:5px; + color:#d1d1d1; +} +table.pre pre { + padding:0px; + margin:0px; + border-radius:0px; + width: 100%; +} +table.pre td { + padding:0px; + white-space:normal; + margin:0px; +} +table.pre td.lines { + width:30px; +} + +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +body { + font-family: Gudea, serif; + padding-top: 0px; + padding-bottom: 40px; +} + +pre { + word-wrap: inherit; +} + +/* Format the heading - nicer spacing etc. */ +.masthead { + overflow: hidden; +} +.masthead ul, .masthead li { + margin-bottom:0px; +} +.masthead .nav li { + margin-top: 15px; + font-size:110%; +} +.masthead h3 { + margin-bottom:5px; + font-size:170%; +} +hr { + margin:0px 0px 20px 0px; +} + +/* Make table headings and td.title bold */ +td.title, thead { + font-weight:bold; +} + +/* Format the right-side menu */ +#menu { + margin-top:50px; + font-size:11pt; + padding-left:20px; +} + +#menu .nav-header { + font-size:12pt; + color:#606060; + margin-top:20px; +} + +#menu li { + line-height:25px; +} + +/* Change font sizes for headings etc. */ +#main h1 { font-size: 26pt; margin:10px 0px 15px 0px; } +#main h2 { font-size: 20pt; margin:20px 0px 0px 0px; } +#main h3 { font-size: 14pt; margin:15px 0px 0px 0px; } +#main p { font-size: 12pt; margin:5px 0px 15px 0px; } +#main ul { font-size: 12pt; margin-top:10px; } +#main li { font-size: 12pt; margin: 5px 0px 5px 0px; } + +/*-------------------------------------------------------------------------- + Formatting for API reference +/*--------------------------------------------------------------------------*/ + +.type-list .type-name, .module-list .module-name { + width:25%; + font-weight:bold; +} +.member-list .member-name { + width:35%; +} +#main .xmldoc h2 { + font-size:14pt; + margin:10px 0px 0px 0px; +} +#main .xmldoc h3 { + font-size:12pt; + margin:10px 0px 0px 0px; +} +/*-------------------------------------------------------------------------- + Additional formatting for the homepage +/*--------------------------------------------------------------------------*/ + +#nuget { + margin-top:20px; + font-size: 11pt; + padding:20px; +} + +#nuget pre { + font-size:11pt; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; + background: #404040; + border-style:none; + color: #e0e0e0; + margin-top:15px; +} + +/* Hide snippets on the home page snippet & nicely format table */ +#hp-snippet td.lines { + display: none; +} +#hp-snippet .table { + width:80%; + margin-left:30px; +} diff --git a/content/tips.js b/content/tips.js new file mode 100644 index 0000000..2b125ba --- /dev/null +++ b/content/tips.js @@ -0,0 +1,46 @@ +var currentTip = null; +var currentTipElement = null; + +function hideTip(evt, name, unique) { + var el = document.getElementById(name); + el.style.display = "none"; + currentTip = null; +} + +function findPos(obj) { + // no idea why, but it behaves differently in webbrowser component + if (window.location.search == "?inapp") + return [obj.offsetLeft + 10, obj.offsetTop + 30]; + + var curleft = 0; + var curtop = obj.offsetHeight; + while (obj) { + curleft += obj.offsetLeft; + curtop += obj.offsetTop; + obj = obj.offsetParent; + }; + return [curleft, curtop]; +} + +function hideUsingEsc(e) { + if (!e) { e = event; } + hideTip(e, currentTipElement, currentTip); +} + +function showTip(evt, name, unique, owner) { + document.onkeydown = hideUsingEsc; + if (currentTip == unique) return; + currentTip = unique; + currentTipElement = name; + + var pos = findPos(owner ? owner : (evt.srcElement ? evt.srcElement : evt.target)); + var posx = pos[0]; + var posy = pos[1]; + + var el = document.getElementById(name); + var parent = (document.documentElement == null) ? document.body : document.documentElement; + el.style.position = "absolute"; + el.style.left = posx + "px"; + el.style.top = posy + "px"; + el.style.display = "block"; +} \ No newline at end of file diff --git a/help.png b/help.png new file mode 100644 index 0000000000000000000000000000000000000000..8c3ddca0b731f13c5e8f655898b6b76d7bede852 GIT binary patch literal 112716 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 Ahw(+=Urn=tsK@31G!^PyL)rd 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 Date: Fri, 24 Jan 2014 21:00:41 -0600 Subject: [PATCH 03/11] Update generated documentation for version 0.1.16 --- csharp_example.html | 98 +++++++++++++ csharp_simple.html | 117 ++++++++++++++++ example.html | 331 ++++++++++++++++++++++++++++++++++++++++++++ index.html | 166 +++++++++++----------- introduction.html | 304 ++++++++++++++++++++++++++++++++++++++++ presentation.html | 225 ++++++++++++++++++++++++++++++ 6 files changed, 1159 insertions(+), 82 deletions(-) create mode 100644 csharp_example.html create mode 100644 csharp_simple.html create mode 100644 example.html create mode 100644 introduction.html create mode 100644 presentation.html diff --git a/csharp_example.html b/csharp_example.html new file mode 100644 index 0000000..9e180c0 --- /dev/null +++ b/csharp_example.html @@ -0,0 +1,98 @@ + + + + + csharp_example + + + + + + + + + + + + + + + + + Fork me on GitHub + + diff --git a/csharp_simple.html b/csharp_simple.html new file mode 100644 index 0000000..0dd869d --- /dev/null +++ b/csharp_simple.html @@ -0,0 +1,117 @@ + + + + + csharp_simple + + + + + + + + + + + + + + + +
+ +
+
+
+ +

C# Simple Example

+ +

Review the GitHub site for an example of this in a MVVM app.

+ +
using System;
+using Arcadia;
+
+public class SimpleCalculationEngine : CalculationEngine
+{
+    public SimpleCalculationEngine()
+        : base()
+    {
+        // NodeFunc wrappers around static methods
+
+        var add2 = new NodeFunc<Tuple<int, int>, int>
+                    (x => SimpleMethods.Add2(x.Item1, x.Item2));
+        var add3 = new NodeFunc<Tuple<int, int, int>, int>
+                    (x => SimpleMethods.Add3(x.Item1, x.Item2, x.Item3));
+
+        // input nodes
+
+        var in0 = AddInput(1);
+        var in1 = AddInput(1);
+        var in2 = AddInput(1);
+        var in3 = AddInput(1);
+        var in4 = AddInput(1);
+        var in5 = AddInput(1);
+        var in6 = AddInput(1);
+        var in7 = AddInput(1);
+        var in8 = AddInput(1);
+        var in9 = AddInput(1);
+        var in10 = AddInput(1);
+        var in11 = AddInput(1);
+        var in12 = AddInput(1);
+        var in13 = AddInput(1);
+
+        // output nodes
+
+        //main calculation chain
+
+        var out0 = AddOutput(Tuple.Create(in0, in1), add2);
+        var out1 = AddOutput(Tuple.Create(in2, in3), add2);
+        var out2 = AddOutput(Tuple.Create(in4, in5, in6), add3);
+        var out3 = AddOutput(Tuple.Create(in7, in8), add2);
+        var out4 = AddOutput(Tuple.Create(out1, out2), add2);
+        var out5 = AddOutput(Tuple.Create(out0, out3), add2);
+        var out6 = AddOutput(Tuple.Create(in9, in10), add2);
+        var out7 = AddOutput(Tuple.Create(in11, in12), add2);
+        var out8 = AddOutput(Tuple.Create(out4, out6), add2);
+        var out9 = AddOutput(Tuple.Create(out5, out7, out8), add3);
+
+        // secondary calculation chain
+        var out10 = AddOutput(Tuple.Create(out0, out5), add2);
+
+        // single input -> output example
+        var out11 = AddOutput(in13, new NodeFunc<int, int>(x => x));
+    }
+}
+ + +
+
+ +
+
+
+ Fork me on GitHub + + diff --git a/example.html b/example.html new file mode 100644 index 0000000..3284207 --- /dev/null +++ b/example.html @@ -0,0 +1,331 @@ + + + + + example + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + +
+  1: 
+  2: 
+  3: 
+  4: 
+  5: 
+  6: 
+  7: 
+  8: 
+  9: 
+ 10: 
+ 11: 
+ 12: 
+ 13: 
+ 14: 
+ 15: 
+ 16: 
+ 17: 
+ 18: 
+ 19: 
+ 20: 
+ 21: 
+ 22: 
+ 23: 
+ 24: 
+ 25: 
+ 26: 
+ 27: 
+ 28: 
+ 29: 
+ 30: 
+ 31: 
+ 32: 
+ 33: 
+ 34: 
+ 35: 
+ 36: 
+ 37: 
+ 38: 
+ 39: 
+ 40: 
+ 41: 
+ 42: 
+ 43: 
+ 44: 
+ 45: 
+ 46: 
+ 47: 
+ 48: 
+ 49: 
+ 50: 
+ 51: 
+ 52: 
+ 53: 
+ 54: 
+ 55: 
+ 56: 
+ 57: 
+ 58: 
+ 59: 
+ 60: 
+ 61: 
+ 62: 
+ 63: 
+ 64: 
+ 65: 
+ 66: 
+ 67: 
+ 68: 
+ 69: 
+ 70: 
+ 71: 
+ 72: 
+ 73: 
+ 74: 
+ 75: 
+ 76: 
+ 77: 
+ 78: 
+ 79: 
+ 80: 
+ 81: 
+ 82: 
+ 83: 
+ 84: 
+ 85: 
+ 86: 
+ 87: 
+ 88: 
+ 89: 
+ 90: 
+ 91: 
+ 92: 
+ 93: 
+ 94: 
+ 95: 
+ 96: 
+ 97: 
+ 98: 
+ 99: 
+100: 
+101: 
+102: 
+103: 
+104: 
+105: 
+106: 
+107: 
+108: 
+109: 
+110: 
+111: 
+
+
+//(*** hide ***)
+// This block of code is omitted in the generated HTML documentation. Use 
+// it to define helpers that you do not want to show in the documentation.
+#I "../../bin"
+#r "../../bin/Arcadia.dll"
+
+// would normally
+
+
+
+open Arcadia
+
+open System
+open System.ComponentModel
+open Arcadia.ViewModel
+
+type Product = 
+    { ID : int
+      Name : string
+      UnitPrice : float }
+
+type Inventory = 
+    { Products : Product [] }
+
+type OrderItem() = 
+    inherit ObservableObject()
+    let mutable productId = 0
+    let mutable units = 0
+    
+    member this.ProductId 
+        with get () = productId
+        and set v = 
+            productId <- v
+            this.RaisePropertyChanged "ProductId"
+    
+    member this.Units 
+        with get () = units
+        and set v = 
+            units <- v
+            this.RaisePropertyChanged "Units"
+
+type Order() = 
+    inherit ObservableObject()
+    let mutable id = 0
+    let mutable date = DateTime.Now
+    let mutable items = BindingList<OrderItem>()
+    let mutable tax = 0.
+    
+    member this.ID 
+        with get () = id
+        and set v = 
+            id <- v
+            this.RaisePropertyChanged "ID"
+    
+    member this.Date 
+        with get () = date
+        and set v = 
+            date <- v
+            this.RaisePropertyChanged "Date"
+    
+    member this.Items 
+        with get () = items
+        and set v = 
+            items <- v
+            items.ListChanged.Add(fun _ -> this.RaisePropertyChanged "Items")
+            this.RaisePropertyChanged "Items"
+    
+    member this.Tax 
+        with get () = tax
+        and set v = 
+            tax <- v
+            this.RaisePropertyChanged "Tax"
+
+type OrderResult = 
+    { TotalUnits : int
+      PreTaxAmount : float
+      TaxAmount : float
+      TotalAmount : float }
+
+
+module OrderMethods = 
+    let getOrderResult(order : Order, inventory : Inventory) = 
+        let price = seq [ for p in inventory.Products -> (p.ID, p.UnitPrice) ] |> dict
+        let preTaxAmount = order.Items |> Seq.sumBy(fun i -> price.[i.ProductId] * float i.Units)
+        { TotalUnits = order.Items |> Seq.sumBy(fun i -> i.Units)
+          PreTaxAmount = preTaxAmount
+          TaxAmount = preTaxAmount * order.Tax
+          TotalAmount = preTaxAmount * (1. + order.Tax) }
+
+type OrderCalculationEngine(data : IDataService) as this = 
+    inherit CalculationEngine()
+    
+    // helper functions to add input/output nodes
+    let input nodeId x = this.AddInput(x, nodeId)
+    let output nodeId nodes f = this.AddOutput(nodes, NodeFunc(f), nodeId)
+
+    // input backing fields
+
+    let inventory = input "Inventory" <| data.LoadInventory()
+    let order = input "Order" <| data.LoadOrder()
+
+    // output backing fields
+
+    let orderResult = output "OrderResult" (order, inventory) OrderMethods.getOrderResult
+
+    // input nodes
+    member this.Inventory = inventory
+    member this.Order = order
+
+    // output nodes
+    member this.OrderResult = orderResult
+
+ +
namespace System
+
namespace System.ComponentModel
+
type Product =
  {ID: int;
   Name: string;
   UnitPrice: float;}

Full name: Example.Product
+
Product.ID: int
+
Multiple items
val int : value:'T -> int (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.int

--------------------
type int<'Measure> = int

Full name: Microsoft.FSharp.Core.int<_>

--------------------
type int = int32

Full name: Microsoft.FSharp.Core.int
+
Product.Name: string
+
Multiple items
val string : value:'T -> string

Full name: Microsoft.FSharp.Core.Operators.string

--------------------
type string = String

Full name: Microsoft.FSharp.Core.string
+
Product.UnitPrice: float
+
Multiple items
val float : value:'T -> float (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.float

--------------------
type float<'Measure> = float

Full name: Microsoft.FSharp.Core.float<_>

--------------------
type float = Double

Full name: Microsoft.FSharp.Core.float
+
type Inventory =
  {Products: Product [];}

Full name: Example.Inventory
+
Inventory.Products: Product []
+
Multiple items
type OrderItem =
  inherit obj
  new : unit -> OrderItem
  member ProductId : 'a
  member Units : 'a
  member ProductId : 'a with set
  member Units : 'a with set

Full name: Example.OrderItem

--------------------
new : unit -> OrderItem
+
val set : elements:seq<'T> -> Set<'T> (requires comparison)

Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.set
+
Multiple items
type Order =
  inherit obj
  new : unit -> Order
  member Date : 'a
  member ID : 'a
  member Items : seq<obj>
  member Tax : float
  member Date : 'a with set
  member ID : 'a with set
  member Items : 'a with set
  member Tax : 'a with set

Full name: Example.Order

--------------------
new : unit -> Order
+
val id : x:'T -> 'T

Full name: Microsoft.FSharp.Core.Operators.id
+
Multiple items
type DateTime =
  struct
    new : ticks:int64 -> DateTime + 10 overloads
    member Add : value:TimeSpan -> DateTime
    member AddDays : value:float -> DateTime
    member AddHours : value:float -> DateTime
    member AddMilliseconds : value:float -> DateTime
    member AddMinutes : value:float -> DateTime
    member AddMonths : months:int -> DateTime
    member AddSeconds : value:float -> DateTime
    member AddTicks : value:int64 -> DateTime
    member AddYears : value:int -> DateTime
    ...
  end

Full name: System.DateTime

--------------------
DateTime()
   (+0 other overloads)
DateTime(ticks: int64) : unit
   (+0 other overloads)
DateTime(ticks: int64, kind: DateTimeKind) : unit
   (+0 other overloads)
DateTime(year: int, month: int, day: int) : unit
   (+0 other overloads)
DateTime(year: int, month: int, day: int, calendar: Globalization.Calendar) : unit
   (+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int) : unit
   (+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int, kind: DateTimeKind) : unit
   (+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int, calendar: Globalization.Calendar) : unit
   (+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int, millisecond: int) : unit
   (+0 other overloads)
DateTime(year: int, month: int, day: int, hour: int, minute: int, second: int, millisecond: int, kind: DateTimeKind) : unit
   (+0 other overloads)
+
property DateTime.Now: DateTime
+
Multiple items
type BindingList<'T> =
  inherit Collection<'T>
  new : unit -> BindingList<'T> + 1 overload
  member AddNew : unit -> 'T
  member AllowEdit : bool with get, set
  member AllowNew : bool with get, set
  member AllowRemove : bool with get, set
  member CancelNew : itemIndex:int -> unit
  member EndNew : itemIndex:int -> unit
  member RaiseListChangedEvents : bool with get, set
  member ResetBindings : unit -> unit
  member ResetItem : position:int -> unit
  ...

Full name: System.ComponentModel.BindingList<_>

--------------------
BindingList() : unit
BindingList(list: Collections.Generic.IList<'T>) : unit
+
type OrderResult =
  {TotalUnits: int;
   PreTaxAmount: float;
   TaxAmount: float;
   TotalAmount: float;}

Full name: Example.OrderResult
+
OrderResult.TotalUnits: int
+
OrderResult.PreTaxAmount: float
+
OrderResult.TaxAmount: float
+
OrderResult.TotalAmount: float
+
val getOrderResult : order:Order * inventory:Inventory -> OrderResult

Full name: Example.OrderMethods.getOrderResult
+
val order : Order
+
val inventory : Inventory
+
val price : Collections.Generic.IDictionary<int,float>
+
Multiple items
val seq : sequence:seq<'T> -> seq<'T>

Full name: Microsoft.FSharp.Core.Operators.seq

--------------------
type seq<'T> = Collections.Generic.IEnumerable<'T>

Full name: Microsoft.FSharp.Collections.seq<_>
+
val p : Product
+
val dict : keyValuePairs:seq<'Key * 'Value> -> Collections.Generic.IDictionary<'Key,'Value> (requires equality)

Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.dict
+
val preTaxAmount : float
+
property Order.Items: seq<obj>
+
module Seq

from Microsoft.FSharp.Collections
+
val sumBy : projection:('T -> 'U) -> source:seq<'T> -> 'U (requires member ( + ) and member get_Zero)

Full name: Microsoft.FSharp.Collections.Seq.sumBy
+
val i : obj
+
property Order.Tax: float
+
Multiple items
type OrderCalculationEngine =
  inherit obj
  new : data:'a -> OrderCalculationEngine
  member Inventory : 'a
  member Order : 'a
  member OrderResult : 'a

Full name: Example.OrderCalculationEngine

--------------------
new : data:'a -> OrderCalculationEngine
+
val data : 'a
+
val this : OrderCalculationEngine
+
module OrderMethods

from Example
+
Multiple items
member OrderCalculationEngine.Inventory : 'a

Full name: Example.OrderCalculationEngine.Inventory

--------------------
type Inventory =
  {Products: Product [];}

Full name: Example.Inventory
+
Multiple items
member OrderCalculationEngine.Order : 'a

Full name: Example.OrderCalculationEngine.Order

--------------------
type Order =
  inherit obj
  new : unit -> Order
  member Date : 'a
  member ID : 'a
  member Items : seq<obj>
  member Tax : float
  member Date : 'a with set
  member ID : 'a with set
  member Items : 'a with set
  member Tax : 'a with set

Full name: Example.Order

--------------------
new : unit -> Order
+
Multiple items
member OrderCalculationEngine.OrderResult : 'a

Full name: Example.OrderCalculationEngine.OrderResult

--------------------
type OrderResult =
  {TotalUnits: int;
   PreTaxAmount: float;
   TaxAmount: float;
   TotalAmount: float;}

Full name: Example.OrderResult
+ +
+
+ +
+
+
+ Fork me on GitHub + + diff --git a/index.html b/index.html index 1f5a068..44fe1ac 100644 --- a/index.html +++ b/index.html @@ -1,89 +1,91 @@ - - + - - - - - - - Exceldnadoc + + Arcadia - Asynchronous MVVM Models + + + + + + + + + + + + + + - - - -
-
- View on GitHub - -

Exceldnadoc

-

command-line utility to create a compiled HTML Help Workshop file (.chm) for ExcelDna

- -
- Download this project as a .zip file - Download this project as a tar.gz file -
-
-
- - -
-
-

-Welcome to GitHub Pages.

- -

This automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:

- -
$ cd your_repo_root/repo_name
-$ git fetch origin
-$ git checkout gh-pages
-
- -

If you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.

- -

-Designer Templates

- -

We've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.

- -

-Rather Drive Stick?

- -

If you prefer to not use the automatic generator, push a branch named gh-pages to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.

- -

-Authors and Contributors

- -

You can @mention a GitHub username to generate a link to their profile. The resulting <a> element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.

- -

-Support or Contact

- -

Having trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.

-
+
+ +
+
+
+ +

Arcadia - Asynchronous MVVM Models

+ +
+
+
+
+ The ExcelDnaDoc library can be installed from NuGet: +
PM> Install-Package ExcelDnaDoc
- - - +
+
+ +

Alternatively, you can download the source as a ZIP file or download +the compiled binaries as a ZIP.

+ +

Samples & documentation

+ +
    +
  • Introduction to the Arcadia library and purpose of library with F# Example.

  • +
  • API Reference all public types, modules and functions in the library.

  • +
+ +

Contributing and copyright

+ +

The project is hosted on GitHub where you can report issues, fork +the project and submit pull requests.

+ +

The library is available under the MIT license, which allows modification and +redistribution for both commercial and non-commercial purposes. For more information see the +License file in the GitHub repository.

+ + +
+
+ +
+
- - - - - + Fork me on GitHub - + diff --git a/introduction.html b/introduction.html new file mode 100644 index 0000000..320633e --- /dev/null +++ b/introduction.html @@ -0,0 +1,304 @@ + + + + + Introduction to Arcadia + + + + + + + + + + + + + + + + +
+ +
+
+
+ +

Introduction to Arcadia

+ +

Arcadia is an asynchronous calculation framework inspired by a discussion by Tobias Gedell on Eden YouTube video.

+ +

The main points of the discussion on Eden that stuck with me were :

+ +
    +
  1. Laziness and partial recalc
  2. +
  3. Caching
  4. +
  5. Asynchronous result production
  6. +
  7. Automatic parallelization
  8. +
  9. Optional manual calculation
  10. +
  11. Cancellation
  12. +
+ +

Currently I have implemented the above plus basic error handling (changes the node with error to an Error status, no logging of error currently.)

+ +

TO DO LIST
+logging
+redo/undo
+serialization/persistense of CalculationEngine to database

+ +

Arcadia is implemented using .Net generics so calculation "nodes" do not need to implement just a single numberic value. Inputs/Outputs can be any POCO/recordset/struct that you want.

+ +

Node Dependency Graph

+ +

Here is a dependency graph with input nodes (green) and output nodes (blue). We will use this as an illustration of the dependency tree that we will now try to replicate using simple integer based nodes.

+ + + +

F# Example - simple integers

+ +

First lets define some simple functions to represent some slow running functions.

+ + + + +
+1: 
+2: 
+3: 
+4: 
+5: 
+6: 
+7: 
+8: 
+9: 
+
+
+open System.Threading
+
+let add2 (x1,x2) = 
+    Thread.Sleep 500
+    x1 + x2
+
+let add3 (x1,x2,x3) =
+    Thread.Sleep 1000
+    x1 + x2 + x3
+
+ +

Now lets create a calculation engine that does simple addition at nodes based on the dependency graph we saw earlier. An optional custom ID can be assigned to a node. +If no node ID is given then InputNodes will be named in0, in1, in2, ... and OutputNodes will be named out0, out1, out2, ...

+ + + + +
+ 1: 
+ 2: 
+ 3: 
+ 4: 
+ 5: 
+ 6: 
+ 7: 
+ 8: 
+ 9: 
+10: 
+11: 
+12: 
+13: 
+14: 
+15: 
+16: 
+17: 
+18: 
+19: 
+20: 
+21: 
+22: 
+23: 
+24: 
+25: 
+26: 
+27: 
+28: 
+29: 
+30: 
+31: 
+32: 
+33: 
+34: 
+35: 
+
+
+open Arcadia
+
+type SimpleCalcEngine() as this =
+    inherit CalculationEngine()
+
+    let input v = this.AddInput v
+    let output nodes func = this.AddOutput(nodes, NodeFunc(func))
+
+    // input nodes
+    let in0 = input 1
+    let in1 = input 1
+    let in2 = input 1
+    let in3 = input 1
+    let in4 = input 1
+    let in5 = input 1
+    let in6 = input 1
+    let in7 = input 1
+    let in8 = input 1
+    let in9 = input 1
+    let in10 = input 1
+    let in11 = input 1
+    let in12 = input 1
+    
+    // output nodes
+    let out0 = output (in0,in1) add2
+    let out1 = output (in2,in3) add2
+    let out2 = output (in4,in5,in6) add3
+    let out3 = output (in7,in8) add2
+    let out4 = output (out1,out2) add2
+    let out5 = output (out0,out3) add2
+    let out6 = output (in9,in10) add2
+    let out7 = output (in11,in12) add2
+    let out8 = output (out4,out6) add2
+    let out9 = output (out5,out7,out8) add3
+    let out10 = output (out0,out5) add2
+
+ +

Test out our Calculation Engine

+ +

Create an instance of the calculation engine and turn on automatic calculations. +Run the following a statement at a time and see how it works.

+ + + + +
+ 1: 
+ 2: 
+ 3: 
+ 4: 
+ 5: 
+ 6: 
+ 7: 
+ 8: 
+ 9: 
+10: 
+11: 
+12: 
+13: 
+
+
+let ce = SimpleCalcEngine()
+
+/// print out the status and value of a given node.
+let nodeValue(nodeId) = 
+    let n = ce.Node<int>(nodeId)
+    printfn "%s status:%A value:%i" (n.Id) (n.Status) (n.Value)
+
+nodeValue "out9" // returns "out9 status:Dirty value:0"
+
+ce.Calculation.Automatic <- true
+
+// check again (will need to wait a few seconds while calculations complete)
+nodeValue "out9" // returns "out9 status:Valid value:13"
+
+ +

You can also do manual calculations if you didn't want to have everything calculating automatically.

+ + + + +
+ 1: 
+ 2: 
+ 3: 
+ 4: 
+ 5: 
+ 6: 
+ 7: 
+ 8: 
+ 9: 
+10: 
+11: 
+12: 
+13: 
+14: 
+15: 
+16: 
+
+
+// set calculations back to manual
+ce.Calculation.Automatic <- false
+
+// set the value of in1 to 3 
+ce.Node("in1").Value <- 3
+
+// check the value of nodes dependent on in1
+nodeValue "out9" // returns out9 status: Dirty value:13
+nodeValue "out10" // returns out10 status: Dirty value: 6
+
+// if we want to get the updated value we can request an update
+ce.Node<int>("out9").AsyncCalculate()
+
+// wait a couple of seconds (or not and see a Dirty result for out9)
+nodeValue "out9" // returns out9 status: Valid value:15
+nodeValue "out10" // returns out10 status: Dirty value: 6
+
+ +

Since out9 does not depend on out10 it did not recalculate (point 1 from our starting list).

+ +

Here is the above example implemented in C#.

+ +

An example of how this can be implemented in an MVVM application can be found on the GitHub site in the src/Samples folder.

+ +
namespace System
+
namespace System.Threading
+
val add2 : x1:int * x2:int -> int

Full name: Introduction.add2
+
val x1 : int
+
val x2 : int
+
Multiple items
type Thread =
  inherit CriticalFinalizerObject
  new : start:ThreadStart -> Thread + 3 overloads
  member Abort : unit -> unit + 1 overload
  member ApartmentState : ApartmentState with get, set
  member CurrentCulture : CultureInfo with get, set
  member CurrentUICulture : CultureInfo with get, set
  member DisableComObjectEagerCleanup : unit -> unit
  member ExecutionContext : ExecutionContext
  member GetApartmentState : unit -> ApartmentState
  member GetCompressedStack : unit -> CompressedStack
  member GetHashCode : unit -> int
  ...

Full name: System.Threading.Thread

--------------------
Thread(start: ThreadStart) : unit
Thread(start: ParameterizedThreadStart) : unit
Thread(start: ThreadStart, maxStackSize: int) : unit
Thread(start: ParameterizedThreadStart, maxStackSize: int) : unit
+
Thread.Sleep(timeout: System.TimeSpan) : unit
Thread.Sleep(millisecondsTimeout: int) : unit
+
val add3 : x1:int * x2:int * x3:int -> int

Full name: Introduction.add3
+
val x3 : int
+
Multiple items
type SimpleCalcEngine =
  inherit obj
  new : unit -> SimpleCalcEngine

Full name: Introduction.SimpleCalcEngine

--------------------
new : unit -> SimpleCalcEngine
+
val this : SimpleCalcEngine
+
val ce : SimpleCalcEngine

Full name: Introduction.ce
+
val nodeValue : nodeId:'a -> unit

Full name: Introduction.nodeValue


 print out the status and value of a given node.
+
val nodeId : 'a
+
val n : obj
+
Multiple items
val int : value:'T -> int (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.int

--------------------
type int<'Measure> = int

Full name: Microsoft.FSharp.Core.int<_>

--------------------
type int = int32

Full name: Microsoft.FSharp.Core.int
+
val printfn : format:Printf.TextWriterFormat<'T> -> 'T

Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn
+ +
+
+ +
+
+
+ Fork me on GitHub + + diff --git a/presentation.html b/presentation.html new file mode 100644 index 0000000..96f7fb3 --- /dev/null +++ b/presentation.html @@ -0,0 +1,225 @@ + + + + + presentation + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + +
+ 1: 
+ 2: 
+ 3: 
+ 4: 
+ 5: 
+ 6: 
+ 7: 
+ 8: 
+ 9: 
+10: 
+11: 
+12: 
+13: 
+14: 
+15: 
+16: 
+17: 
+18: 
+19: 
+20: 
+21: 
+22: 
+23: 
+24: 
+25: 
+26: 
+27: 
+28: 
+29: 
+30: 
+31: 
+32: 
+33: 
+34: 
+35: 
+36: 
+37: 
+38: 
+39: 
+40: 
+41: 
+42: 
+43: 
+44: 
+45: 
+46: 
+47: 
+48: 
+49: 
+50: 
+51: 
+52: 
+53: 
+54: 
+55: 
+
+
+open System.Threading
+open System.Diagnostics
+
+            // Input of value * changed
+type Node = | Input of int ref * Event<unit>
+            // Output of node1 * node2 * nodeFunction * initialValue * dirty * changed
+            | Output of Node * Node * (int -> int -> int) * int ref * bool ref * Event<unit>
+
+let rec eval (node : Node) : Async<int> =
+    match node with
+    |Input(n, _) -> async { return n.Value }
+    |Output(n1,n2,f, initValue, dirty, _) ->
+        async {
+            if dirty.Value then
+                let! v = Async.Parallel [ eval n1; eval n2 ]
+                initValue := f v.[0] v.[1]
+                dirty := false
+            return initValue.Value }
+
+let setValue (node : Node) (v : int) =
+    match node with
+    | Input(n, e) -> 
+        n := v
+        e.Trigger()
+    | Output(_) -> failwith "cannot set value of output node"
+
+let input i = Input(ref i, Event<unit>())
+let func n1 n2 f = 
+    let initValue = ref 0
+    let dirty = ref true
+    let event = Event<unit>()
+
+    let getEvent (node : Node) = match node with Input(_, e) | Output(_, _, _, _, _, e) -> e
+    (getEvent n1).Publish.Add(fun _ -> dirty := true; event.Trigger())
+    (getEvent n2).Publish.Add(fun _ -> dirty := true; event.Trigger())
+
+    Output(n1, n2, f, initValue, dirty, event)
+
+let i1 = input 1
+let i2 = input 3
+let i3 = input 5
+
+let n1 = func i1 i2 (fun x1 x2 -> printfn "*** eval n1, thread %i" Thread.CurrentThread.ManagedThreadId ; x1+x2)
+let n2 = func i2 i3 (fun x1 x2 -> printfn "*** eval n2, thread %i" Thread.CurrentThread.ManagedThreadId ; x1+x2)
+let n3 = func n1 n2 (fun x1 x2 -> printfn "*** eval n3, thread %i" Thread.CurrentThread.ManagedThreadId ; x1+x2)
+
+
+let evalAsync (node : Node) =
+    async { let! v = eval node in printfn "node value %i" v } |> Async.Start
+
+
+evalAsync n3
+
+
+setValue i1 100
+
+ +
namespace System
+
namespace System.Threading
+
namespace System.Diagnostics
+
type Node =
  | Input of int ref * Event<unit>
  | Output of Node * Node * (int -> int -> int) * int ref * bool ref * Event<unit>

Full name: Presentation.Node
+
union case Node.Input: int ref * Event<unit> -> Node
+
Multiple items
val int : value:'T -> int (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.int

--------------------
type int<'Measure> = int

Full name: Microsoft.FSharp.Core.int<_>

--------------------
type int = int32

Full name: Microsoft.FSharp.Core.int
+
Multiple items
val ref : value:'T -> 'T ref

Full name: Microsoft.FSharp.Core.Operators.ref

--------------------
type 'T ref = Ref<'T>

Full name: Microsoft.FSharp.Core.ref<_>
+
Multiple items
module Event

from Microsoft.FSharp.Control

--------------------
type Event<'Delegate,'Args (requires delegate and 'Delegate :> Delegate)> =
  new : unit -> Event<'Delegate,'Args>
  member Trigger : sender:obj * args:'Args -> unit
  member Publish : IEvent<'Delegate,'Args>

Full name: Microsoft.FSharp.Control.Event<_,_>

--------------------
type Event<'T> =
  new : unit -> Event<'T>
  member Trigger : arg:'T -> unit
  member Publish : IEvent<'T>

Full name: Microsoft.FSharp.Control.Event<_>

--------------------
new : unit -> Event<'Delegate,'Args>

--------------------
new : unit -> Event<'T>
+
type unit = Unit

Full name: Microsoft.FSharp.Core.unit
+
union case Node.Output: Node * Node * (int -> int -> int) * int ref * bool ref * Event<unit> -> Node
+
type bool = System.Boolean

Full name: Microsoft.FSharp.Core.bool
+
val eval : node:Node -> Async<int>

Full name: Presentation.eval
+
val node : Node
+
Multiple items
type Async<'T>

Full name: Microsoft.FSharp.Control.Async<_>

--------------------
type Async
static member AsBeginEnd : computation:('Arg -> Async<'T>) -> ('Arg * AsyncCallback * obj -> IAsyncResult) * (IAsyncResult -> 'T) * (IAsyncResult -> unit)
static member AwaitEvent : event:IEvent<'Del,'T> * ?cancelAction:(unit -> unit) -> Async<'T> (requires delegate and 'Del :> Delegate)
static member AwaitIAsyncResult : iar:IAsyncResult * ?millisecondsTimeout:int -> Async<bool>
static member AwaitTask : task:Task<'T> -> Async<'T>
static member AwaitWaitHandle : waitHandle:WaitHandle * ?millisecondsTimeout:int -> Async<bool>
static member CancelDefaultToken : unit -> unit
static member Catch : computation:Async<'T> -> Async<Choice<'T,exn>>
static member FromBeginEnd : beginAction:(AsyncCallback * obj -> IAsyncResult) * endAction:(IAsyncResult -> 'T) * ?cancelAction:(unit -> unit) -> Async<'T>
static member FromBeginEnd : arg:'Arg1 * beginAction:('Arg1 * AsyncCallback * obj -> IAsyncResult) * endAction:(IAsyncResult -> 'T) * ?cancelAction:(unit -> unit) -> Async<'T>
static member FromBeginEnd : arg1:'Arg1 * arg2:'Arg2 * beginAction:('Arg1 * 'Arg2 * AsyncCallback * obj -> IAsyncResult) * endAction:(IAsyncResult -> 'T) * ?cancelAction:(unit -> unit) -> Async<'T>
static member FromBeginEnd : arg1:'Arg1 * arg2:'Arg2 * arg3:'Arg3 * beginAction:('Arg1 * 'Arg2 * 'Arg3 * AsyncCallback * obj -> IAsyncResult) * endAction:(IAsyncResult -> 'T) * ?cancelAction:(unit -> unit) -> Async<'T>
static member FromContinuations : callback:(('T -> unit) * (exn -> unit) * (OperationCanceledException -> unit) -> unit) -> Async<'T>
static member Ignore : computation:Async<'T> -> Async<unit>
static member OnCancel : interruption:(unit -> unit) -> Async<IDisposable>
static member Parallel : computations:seq<Async<'T>> -> Async<'T []>
static member RunSynchronously : computation:Async<'T> * ?timeout:int * ?cancellationToken:CancellationToken -> 'T
static member Sleep : millisecondsDueTime:int -> Async<unit>
static member Start : computation:Async<unit> * ?cancellationToken:CancellationToken -> unit
static member StartAsTask : computation:Async<'T> * ?taskCreationOptions:TaskCreationOptions * ?cancellationToken:CancellationToken -> Task<'T>
static member StartChild : computation:Async<'T> * ?millisecondsTimeout:int -> Async<Async<'T>>
static member StartChildAsTask : computation:Async<'T> * ?taskCreationOptions:TaskCreationOptions -> Async<Task<'T>>
static member StartImmediate : computation:Async<unit> * ?cancellationToken:CancellationToken -> unit
static member StartWithContinuations : computation:Async<'T> * continuation:('T -> unit) * exceptionContinuation:(exn -> unit) * cancellationContinuation:(OperationCanceledException -> unit) * ?cancellationToken:CancellationToken -> unit
static member SwitchToContext : syncContext:SynchronizationContext -> Async<unit>
static member SwitchToNewThread : unit -> Async<unit>
static member SwitchToThreadPool : unit -> Async<unit>
static member TryCancelled : computation:Async<'T> * compensation:(OperationCanceledException -> unit) -> Async<'T>
static member CancellationToken : Async<CancellationToken>
static member DefaultCancellationToken : CancellationToken

Full name: Microsoft.FSharp.Control.Async
+
val n : int ref
+
val async : AsyncBuilder

Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.async
+
property Ref.Value: int
+
val n1 : Node
+
val n2 : Node
+
val f : (int -> int -> int)
+
val initValue : int ref
+
val dirty : bool ref
+
property Ref.Value: bool
+
val v : int []
+
static member Async.Parallel : computations:seq<Async<'T>> -> Async<'T []>
+
val setValue : node:Node -> v:int -> unit

Full name: Presentation.setValue
+
val v : int
+
val e : Event<unit>
+
member Event.Trigger : arg:'T -> unit
+
val failwith : message:string -> 'T

Full name: Microsoft.FSharp.Core.Operators.failwith
+
val input : i:int -> Node

Full name: Presentation.input
+
val i : int
+
val func : n1:Node -> n2:Node -> f:(int -> int -> int) -> Node

Full name: Presentation.func
+
val event : Event<unit>
+
val getEvent : (Node -> Event<unit>)
+
val i1 : Node

Full name: Presentation.i1
+
val i2 : Node

Full name: Presentation.i2
+
val i3 : Node

Full name: Presentation.i3
+
val n1 : Node

Full name: Presentation.n1
+
val x1 : int
+
val x2 : int
+
val printfn : format:Printf.TextWriterFormat<'T> -> 'T

Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn
+
Multiple items
type Thread =
  inherit CriticalFinalizerObject
  new : start:ThreadStart -> Thread + 3 overloads
  member Abort : unit -> unit + 1 overload
  member ApartmentState : ApartmentState with get, set
  member CurrentCulture : CultureInfo with get, set
  member CurrentUICulture : CultureInfo with get, set
  member DisableComObjectEagerCleanup : unit -> unit
  member ExecutionContext : ExecutionContext
  member GetApartmentState : unit -> ApartmentState
  member GetCompressedStack : unit -> CompressedStack
  member GetHashCode : unit -> int
  ...

Full name: System.Threading.Thread

--------------------
Thread(start: ThreadStart) : unit
Thread(start: ParameterizedThreadStart) : unit
Thread(start: ThreadStart, maxStackSize: int) : unit
Thread(start: ParameterizedThreadStart, maxStackSize: int) : unit
+
property Thread.CurrentThread: Thread
+
property Thread.ManagedThreadId: int
+
val n2 : Node

Full name: Presentation.n2
+
val n3 : Node

Full name: Presentation.n3
+
val evalAsync : node:Node -> unit

Full name: Presentation.evalAsync
+
static member Async.Start : computation:Async<unit> * ?cancellationToken:CancellationToken -> unit
+ +
+
+ +
+
+
+ Fork me on GitHub + + From b898975dfb731c9c7a838c03afece0bb6c6b5226 Mon Sep 17 00:00:00 2001 From: Dave Carlson Date: Fri, 24 Jan 2014 21:32:39 -0600 Subject: [PATCH 04/11] Update generated documentation for version 0.1.16 --- index.html | 272 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 268 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 44fe1ac..23065d7 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - Arcadia - Asynchronous MVVM Models + <title>ExcelDnaDoc @@ -33,7 +33,16 @@

ExcelDnaDoc

-

Arcadia - Asynchronous MVVM Models

+

ExcelDnaDoc

+ +

ExcelDnaDoc is a command-line utility to create a compiled HTML Help Workshop file (.chm) for ExcelDna.

+ +
    +
  • single help file created even if multiple library are specified in the "dna" file.
  • +
  • can use customized templates and content
  • +
+ +

Use the issues log to report any issues or give feedback for future enhancements.

@@ -49,11 +58,261 @@

Arcadia - Asynchronous MVVM Models

Alternatively, you can download the source as a ZIP file or download the compiled binaries as a ZIP.

+

To build a compiled help file (.chm) the HTML Help Workshop (HHW) must be installed +(http://msdn.microsoft.com/en-us/library/windows/desktop/ms669985(v=vs.85).aspx). +ExcelDnaDoc expects HHW to be installed at C:\Program Files (x86)\HTML Help Workshop\. +If it is installed at another location change packages/ExcelDnaDoc/tools/ExcelDnaDoc.exe.config +to reference the proper directory before compiling your project.

+ +

When installed from NuGet it will edit the default .dna file installed by Excel-DNA and adds post +build steps to build the .chm documentation file whenever the project is build.

+ +

Notes

+ +

Uses the ExcelFunction, ExcelArgument, and ExcelCommand attributes in Excel-DNA to build +documentation for your Excel-DNA add-in.

+ +

The following fields are can be used to create documentation :

+ +

ExcelFunction Attribute

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

if not given the actual method name is used

Description

if not used no description will be included in documentation

Category

if not given functions will be grouped under " Functions"

HelpTopic

can be used to link function to generated help in Excel's function wizard

+ + +

ExcelArgument Attribute

+ + + + + + + + + + + + + + + + + + +

Name

if not given the actual parameter name is used

Description

if not used no description will be included in documentation

+ + +

ExcelCommand Attribute

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

if not given the actual parameter name is used

Description

if not used no description will be included in documentation

HelpTopic

can be used to link function to generated help in Excel's function wizard

ShortCut

if not used no shortcut will be included in documentation

+ + +

If ExcelDna.Documentation is included as a reference (default in NuGet package) then an additional +attribute ExcelFunctionDoc is available as a replacement to the ExcelFunction attribute +which includes additional fields that can be used for additional documentation.

+ +

ExcelFunctionDoc Attribute

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

if not given the actual method name is used

Description

if not used no description will be included in documentation

Category

if not given functions will be grouped under " Functions"

HelpTopic

can be used to link function to generated help in Excel's function wizard

Returns

description of the return value

Summary

longer discussion of function included in documentation

Remarks

remarks on usage and / or possible errors

+ + +

Example

+ +

F# +`fsharp +namespace DocTest +open ExcelDna.Integration +open ExcelDna.Documentation

+ +

module Math =

+ + + + +
+1: 
+2: 
+3: 
+4: 
+5: 
+6: 
+7: 
+
+
+let addThem
+    (
+        [<ExcelArgument(Name = "Arg1", Description = "the first argument")>]a,
+        [<ExcelArgument(Name = "Arg2", Description = "the second argument")>]b
+    ) = 
+
+    a+b
+
+ +

`

+ +

C# +`csharp +namespace DocTest +{ + using ExcelDna.Integration;

+ + + + +
+ 1: 
+ 2: 
+ 3: 
+ 4: 
+ 5: 
+ 6: 
+ 7: 
+ 8: 
+ 9: 
+10: 
+11: 
+12: 
+
+
+public class Text 
+{
+    [ExcelFunction( Name = "Text.ConcatThem", 
+                    Description = "concatenates two strings", 
+                    HelpTopic = "DocTest-AddIn.chm!1002")]
+    public static object ConcatThem(
+        [ExcelArgument(Description="the first string")] object a, 
+        [ExcelArgument(Description="the second string")] object b)
+    {
+        return string.Concat(a.ToString(), b.ToString());
+    }
+}
+
+ +

} +`

+ +

Command Line Usage

+ + + + +
+1: 
+
+
+ExcelDnaDoc.exe dnaPath  
+
+ +

dnaPath The path to the primary .dna file for the ExcelDna add-in.

+ +

Example: ExcelDnaDoc.exe <build folder>\SampleLib-AddIn.dna
+ The HTML Help Workshop content will be created in <build folder>\HelpContent\.

+ +

External libraries will be searched for UDFs and Commands +that are exposed to Excel and documented using the ExcelFunctionAttribute and the ExcelArgumentAttribute.

+ +

If The ExcelDna.Documentation library has been referenced then the ExcelFunctionDocAttribute +is also available to include additional documentation fields that will not be exposed in the Excel Function +Wizard, but will be included in the HTML Help Workshop content.

+ +

Dependencies

+ +

NuGet Package Manager(http://nuget.codeplex.com/)
+ FAKE (F# MAKE) (http://fsharp.github.io/FAKE/)
+ Excel-DNA (http://exceldna.codeplex.com/)
+ RazorEngine(https://github.com/Antaris/RazorEngine)
+ HTML Help Workshop(http://msdn.microsoft.com/en-us/library/windows/desktop/ms669985(v=vs.85).aspx)

+

Samples & documentation

    -
  • Introduction to the Arcadia library and purpose of library with F# Example.

  • -
  • API Reference all public types, modules and functions in the library.

  • +
  • API Reference all public types, modules and functions in the library.

Contributing and copyright

@@ -65,6 +324,11 @@

Contributing and copyright

redistribution for both commercial and non-commercial purposes. For more information see the License file in the GitHub repository.

+
val addThem : a:int * b:int -> int

Full name: index.addThem
+
val a : int
+
val b : int
+
Multiple items
val string : value:'T -> string

Full name: Microsoft.FSharp.Core.Operators.string

--------------------
type string = System.String

Full name: Microsoft.FSharp.Core.string
+
System.Int32.ToString() : string
System.Int32.ToString(provider: System.IFormatProvider) : string
System.Int32.ToString(format: string) : string
System.Int32.ToString(format: string, provider: System.IFormatProvider) : string
From b9695a63c4342cf8ffcce4ffcdf19e451c60104e Mon Sep 17 00:00:00 2001 From: Dave Carlson Date: Fri, 24 Jan 2014 21:57:31 -0600 Subject: [PATCH 05/11] Update generated documentation for version 0.1.16 --- index.html | 145 +++++++++++++++++++++++----------------------- introduction.html | 5 -- 2 files changed, 74 insertions(+), 76 deletions(-) diff --git a/index.html b/index.html index 23065d7..5be3157 100644 --- a/index.html +++ b/index.html @@ -58,8 +58,7 @@

ExcelDnaDoc

Alternatively, you can download the source as a ZIP file or download the compiled binaries as a ZIP.

-

To build a compiled help file (.chm) the HTML Help Workshop (HHW) must be installed -(http://msdn.microsoft.com/en-us/library/windows/desktop/ms669985(v=vs.85).aspx). +

To build a compiled help file (.chm) the HTML Help Workshop (HHW) must be installed. ExcelDnaDoc expects HHW to be installed at C:\Program Files (x86)\HTML Help Workshop\. If it is installed at another location change packages/ExcelDnaDoc/tools/ExcelDnaDoc.exe.config to reference the proper directory before compiling your project.

@@ -204,44 +203,6 @@

ExcelFunctionDoc Attribute

Example

-

F# -`fsharp -namespace DocTest -open ExcelDna.Integration -open ExcelDna.Documentation

- -

module Math =

- - - - -
-1: 
-2: 
-3: 
-4: 
-5: 
-6: 
-7: 
-
-
-let addThem
-    (
-        [<ExcelArgument(Name = "Arg1", Description = "the first argument")>]a,
-        [<ExcelArgument(Name = "Arg2", Description = "the second argument")>]b
-    ) = 
-
-    a+b
-
- -

`

- -

C# -`csharp -namespace DocTest -{ - using ExcelDna.Integration;

-
  1: 
  2: 
@@ -255,28 +216,81 @@ 

Example

10: 11: 12: +13: +14: +15: +16: +17: +18: +19: +20: +21: +22: +23: +24: +25: +26: +27: +28: +29: +30: +31: +32: +33: +34: +35: +36: +37: +38: +39: +40:
-public class Text 
+**F#**
+[lang=fsharp]
+namespace DocTest
+open ExcelDna.Integration
+open ExcelDna.Documentation
+
+module Math =
+
+    [<ExcelFunctionDoc( Name = "Math.AddThem", Category = "Math", 
+                        Description = "adds two numbers", 
+                        HelpTopic = "DocTest-AddIn.chm!1001",
+                        Summary = "really all it does is add two number ... I promise.",
+                        Returns = "the sum of the two arguments")>]
+    let addThem
+        (
+            [<ExcelArgument(Name = "Arg1", Description = "the first argument")>]a,
+            [<ExcelArgument(Name = "Arg2", Description = "the second argument")>]b
+        ) = 
+
+        a+b
+
+**C#**
+[lang=csharp]
+namespace DocTest
 {
-    [ExcelFunction( Name = "Text.ConcatThem", 
-                    Description = "concatenates two strings", 
-                    HelpTopic = "DocTest-AddIn.chm!1002")]
-    public static object ConcatThem(
-        [ExcelArgument(Description="the first string")] object a, 
-        [ExcelArgument(Description="the second string")] object b)
+    using ExcelDna.Integration;
+
+    public class Text 
     {
-        return string.Concat(a.ToString(), b.ToString());
+        [ExcelFunction( Name = "Text.ConcatThem", 
+                        Description = "concatenates two strings", 
+                        HelpTopic = "DocTest-AddIn.chm!1002")]
+        public static object ConcatThem(
+            [ExcelArgument(Description="the first string")] object a, 
+            [ExcelArgument(Description="the second string")] object b)
+        {
+            return string.Concat(a.ToString(), b.ToString());
+        }
     }
 }
-

} -`

-

Command Line Usage

- -
@@ -301,19 +315,16 @@ 

Command Line Usage

is also available to include additional documentation fields that will not be exposed in the Excel Function Wizard, but will be included in the HTML Help Workshop content.

-

Dependencies

+

Dependencies that Must be Installed to use ExcelDnaDoc NuGet Package

-

NuGet Package Manager(http://nuget.codeplex.com/)
- FAKE (F# MAKE) (http://fsharp.github.io/FAKE/)
- Excel-DNA (http://exceldna.codeplex.com/)
- RazorEngine(https://github.com/Antaris/RazorEngine)
- HTML Help Workshop(http://msdn.microsoft.com/en-us/library/windows/desktop/ms669985(v=vs.85).aspx)

+

[NuGet Package Manager] (http://nuget.codeplex.com/)
+ [Excel-DNA] (http://exceldna.codeplex.com/)
+ HTML Help Workshop

-

Samples & documentation

+

Outside Projects Used by ExcelDnaDoc (do not need to be installed by user)

-
    -
  • API Reference all public types, modules and functions in the library.
  • -
+

[FAKE (F# MAKE)] (http://fsharp.github.io/FAKE/)
+ [RazorEngine] (https://github.com/Antaris/RazorEngine)

Contributing and copyright

@@ -324,11 +335,8 @@

Contributing and copyright

redistribution for both commercial and non-commercial purposes. For more information see the License file in the GitHub repository.

-
val addThem : a:int * b:int -> int

Full name: index.addThem
-
val a : int
-
val b : int
-
Multiple items
val string : value:'T -> string

Full name: Microsoft.FSharp.Core.Operators.string

--------------------
type string = System.String

Full name: Microsoft.FSharp.Core.string
-
System.Int32.ToString() : string
System.Int32.ToString(provider: System.IFormatProvider) : string
System.Int32.ToString(format: string) : string
System.Int32.ToString(format: string, provider: System.IFormatProvider) : string
+
val using : resource:'T -> action:('T -> 'U) -> 'U (requires 'T :> System.IDisposable)

Full name: Microsoft.FSharp.Core.Operators.using
+
Multiple items
val string : value:'T -> string

Full name: Microsoft.FSharp.Core.Operators.string

--------------------
type string = System.String

Full name: Microsoft.FSharp.Core.string
@@ -341,11 +349,6 @@

Contributing and copyright

  • License
  • Release Notes
  • - -
  • Introduction
  • - - -
  • API Reference
  • diff --git a/introduction.html b/introduction.html index 320633e..cafa5ef 100644 --- a/introduction.html +++ b/introduction.html @@ -290,11 +290,6 @@

    Test out our Calculation Engine

  • License
  • Release Notes
  • - -
  • Introduction
  • - - -
  • API Reference
  • From d0a15e871622eefe123ea113fc7e045c85b3424f Mon Sep 17 00:00:00 2001 From: Dave Carlson Date: Fri, 24 Jan 2014 22:02:47 -0600 Subject: [PATCH 06/11] Update generated documentation for version 0.1.16 --- index.html | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index 5be3157..35bb0dd 100644 --- a/index.html +++ b/index.html @@ -315,16 +315,13 @@

    Command Line Usage

    is also available to include additional documentation fields that will not be exposed in the Excel Function Wizard, but will be included in the HTML Help Workshop content.

    -

    Dependencies that Must be Installed to use ExcelDnaDoc NuGet Package

    +

    This Project Uses

    -

    [NuGet Package Manager] (http://nuget.codeplex.com/)
    - [Excel-DNA] (http://exceldna.codeplex.com/)
    - HTML Help Workshop

    - -

    Outside Projects Used by ExcelDnaDoc (do not need to be installed by user)

    - -

    [FAKE (F# MAKE)] (http://fsharp.github.io/FAKE/)
    - [RazorEngine] (https://github.com/Antaris/RazorEngine)

    +

    Excel-DNA
    + FAKE (F# MAKE)
    + HTML Help Workshop
    + NuGet Package Manager
    + RazorEngine

    Contributing and copyright

    From eb866be945492223bd6bdfd527e7ea87a7662cee Mon Sep 17 00:00:00 2001 From: Dave Carlson Date: Fri, 24 Jan 2014 22:05:43 -0600 Subject: [PATCH 07/11] Update generated documentation for version 0.1.16 --- index.html | 60 ++++++++++++++++-------------------------------------- 1 file changed, 18 insertions(+), 42 deletions(-) diff --git a/index.html b/index.html index 35bb0dd..0b421a8 100644 --- a/index.html +++ b/index.html @@ -203,6 +203,8 @@

    ExcelFunctionDoc Attribute

    Example

    +

    F#

    + + +
      1: 
      2: 
    @@ -222,33 +224,9 @@ 

    Example

    16: 17: 18: -19: -20: -21: -22: -23: -24: -25: -26: -27: -28: -29: -30: -31: -32: -33: -34: -35: -36: -37: -38: -39: -40:
    -**F#**
    -[lang=fsharp]
     namespace DocTest
     open ExcelDna.Integration
     open ExcelDna.Documentation
    @@ -266,30 +244,30 @@ 

    Example

    [<ExcelArgument(Name = "Arg2", Description = "the second argument")>]b ) = - a+b + a+b
    +
    -**C#** -[lang=csharp] -namespace DocTest +

    C#

    + +
    namespace DocTest
     {
    -    using ExcelDna.Integration;
    +    using ExcelDna.Integration;
     
    -    public class Text 
    +    public class Text 
         {
    -        [ExcelFunction( Name = "Text.ConcatThem", 
    -                        Description = "concatenates two strings", 
    -                        HelpTopic = "DocTest-AddIn.chm!1002")]
    -        public static object ConcatThem(
    -            [ExcelArgument(Description="the first string")] object a, 
    -            [ExcelArgument(Description="the second string")] object b)
    +        [ExcelFunction( Name = "Text.ConcatThem", 
    +                        Description = "concatenates two strings", 
    +                        HelpTopic = "DocTest-AddIn.chm!1002")]
    +        public static object ConcatThem(
    +            [ExcelArgument(Description="the first string")] object a, 
    +            [ExcelArgument(Description="the second string")] object b)
             {
    -            return string.Concat(a.ToString(), b.ToString());
    +            return string.Concat(a.ToString(), b.ToString());
             }
         }
     }
    -

    Command Line Usage

    @@ -332,8 +310,6 @@

    Contributing and copyright

    redistribution for both commercial and non-commercial purposes. For more information see the License file in the GitHub repository.

    -
    val using : resource:'T -> action:('T -> 'U) -> 'U (requires 'T :> System.IDisposable)

    Full name: Microsoft.FSharp.Core.Operators.using
    -
    Multiple items
    val string : value:'T -> string

    Full name: Microsoft.FSharp.Core.Operators.string

    --------------------
    type string = System.String

    Full name: Microsoft.FSharp.Core.string
    From 0a88a1beb58b596036dd542d334e43c91535012d Mon Sep 17 00:00:00 2001 From: Dave Carlson Date: Fri, 24 Jan 2014 22:09:29 -0600 Subject: [PATCH 08/11] Update generated documentation for version 0.1.16 --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 0b421a8..8ef335b 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - ExcelDnaDoc + <title>ExcelDnaDoc - Documentation Builder for Excel-DNA @@ -33,7 +33,7 @@

    ExcelDnaDoc

    -

    ExcelDnaDoc

    +

    ExcelDnaDoc - Documentation Builder for Excel-DNA

    ExcelDnaDoc is a command-line utility to create a compiled HTML Help Workshop file (.chm) for ExcelDna.

    From 41b3070d8bc5590fe86487539d821b2a1932fbe5 Mon Sep 17 00:00:00 2001 From: Dave Carlson Date: Fri, 24 Jan 2014 22:13:33 -0600 Subject: [PATCH 09/11] Update generated documentation for version 0.1.16 --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 8ef335b..486c18a 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - ExcelDnaDoc - Documentation Builder for Excel-DNA + <title>ExcelDnaDoc - Excel-DNA Help file Generator @@ -33,7 +33,7 @@

    ExcelDnaDoc

    -

    ExcelDnaDoc - Documentation Builder for Excel-DNA

    +

    ExcelDnaDoc - Excel-DNA Help file Generator

    ExcelDnaDoc is a command-line utility to create a compiled HTML Help Workshop file (.chm) for ExcelDna.

    From 70e59c859668b15af96f6dc21ccfc9274c8ebc70 Mon Sep 17 00:00:00 2001 From: David Carlson Date: Sun, 10 Jul 2016 14:14:30 -0700 Subject: [PATCH 10/11] Update generated documentation for version 0.2.0-beta --- content/style.css | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/content/style.css b/content/style.css index c4f8259..8af780c 100644 --- a/content/style.css +++ b/content/style.css @@ -1,4 +1,4 @@ -@import url(http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Gudea); +@import url(http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Gudea:400,700,400italic); /*-------------------------------------------------------------------------- Formatting for F# code snippets @@ -131,12 +131,13 @@ td.title, thead { } /* Change font sizes for headings etc. */ -#main h1 { font-size: 26pt; margin:10px 0px 15px 0px; } -#main h2 { font-size: 20pt; margin:20px 0px 0px 0px; } -#main h3 { font-size: 14pt; margin:15px 0px 0px 0px; } +#main h1 { font-size: 26pt; margin:10px 0px 15px 0px; font-weight:400; } +#main h2 { font-size: 20pt; margin:20px 0px 0px 0px; font-weight:400; } +#main h3 { font-size: 14pt; margin:15px 0px 0px 0px; font-weight:400; } #main p { font-size: 12pt; margin:5px 0px 15px 0px; } #main ul { font-size: 12pt; margin-top:10px; } #main li { font-size: 12pt; margin: 5px 0px 5px 0px; } +#main strong { font-weight:700; } /*-------------------------------------------------------------------------- Formatting for API reference From 9bf1d605430f2d930926fce1b0c2e2b5b462d6e7 Mon Sep 17 00:00:00 2001 From: Govert van Drimmelen Date: Tue, 30 Jun 2020 17:11:07 +0200 Subject: [PATCH 11/11] Update generated documentation for version 1.1.0-beta --- content/style.css | 378 +++++++++++++++++++++++----------------------- content/tips.js | 90 +++++------ 2 files changed, 234 insertions(+), 234 deletions(-) diff --git a/content/style.css b/content/style.css index 8af780c..5ec3581 100644 --- a/content/style.css +++ b/content/style.css @@ -1,189 +1,189 @@ -@import url(http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Gudea:400,700,400italic); - -/*-------------------------------------------------------------------------- - Formatting for F# code snippets -/*--------------------------------------------------------------------------*/ - -/* identifier */ -span.i { color:#d1d1d1; } -/* string */ -span.s { color:#d4b43c; } -/* keywords */ -span.k { color:#4e98dc; } -/* comment */ -span.c { color:#96C71D; } -/* operators */ -span.o { color:#af75c1; } -/* numbers */ -span.n { color:#96C71D; } -/* line number */ -span.l { color:#80b0b0; } - -/* inactive code */ -span.inactive { color:#808080; } -/* preprocessor */ -span.prep { color:#af75c1; } -/* fsi output */ -span.fsi { color:#808080; } - -/* omitted */ -span.omitted { - background:#3c4e52; - border-radius:5px; - color:#808080; - padding:0px 0px 1px 0px; -} -/* tool tip */ -div.tip { - background:#475b5f; - border-radius:4px; - font:11pt 'Droid Sans', arial, sans-serif; - padding:6px 8px 6px 8px; - display:none; - color:#d1d1d1; -} -table.pre pre { - padding:0px; - margin:0px; - border:none; -} -table.pre, pre.fssnip, pre { - line-height:13pt; - border:1px solid #d8d8d8; - border-collapse:separate; - white-space:pre; - font: 9pt 'Droid Sans Mono',consolas,monospace; - width:90%; - margin:10px 20px 20px 20px; - background-color:#212d30; - padding:10px; - border-radius:5px; - color:#d1d1d1; -} -table.pre pre { - padding:0px; - margin:0px; - border-radius:0px; - width: 100%; -} -table.pre td { - padding:0px; - white-space:normal; - margin:0px; -} -table.pre td.lines { - width:30px; -} - -/*-------------------------------------------------------------------------- - Formatting for page & standard document content -/*--------------------------------------------------------------------------*/ - -body { - font-family: Gudea, serif; - padding-top: 0px; - padding-bottom: 40px; -} - -pre { - word-wrap: inherit; -} - -/* Format the heading - nicer spacing etc. */ -.masthead { - overflow: hidden; -} -.masthead ul, .masthead li { - margin-bottom:0px; -} -.masthead .nav li { - margin-top: 15px; - font-size:110%; -} -.masthead h3 { - margin-bottom:5px; - font-size:170%; -} -hr { - margin:0px 0px 20px 0px; -} - -/* Make table headings and td.title bold */ -td.title, thead { - font-weight:bold; -} - -/* Format the right-side menu */ -#menu { - margin-top:50px; - font-size:11pt; - padding-left:20px; -} - -#menu .nav-header { - font-size:12pt; - color:#606060; - margin-top:20px; -} - -#menu li { - line-height:25px; -} - -/* Change font sizes for headings etc. */ -#main h1 { font-size: 26pt; margin:10px 0px 15px 0px; font-weight:400; } -#main h2 { font-size: 20pt; margin:20px 0px 0px 0px; font-weight:400; } -#main h3 { font-size: 14pt; margin:15px 0px 0px 0px; font-weight:400; } -#main p { font-size: 12pt; margin:5px 0px 15px 0px; } -#main ul { font-size: 12pt; margin-top:10px; } -#main li { font-size: 12pt; margin: 5px 0px 5px 0px; } -#main strong { font-weight:700; } - -/*-------------------------------------------------------------------------- - Formatting for API reference -/*--------------------------------------------------------------------------*/ - -.type-list .type-name, .module-list .module-name { - width:25%; - font-weight:bold; -} -.member-list .member-name { - width:35%; -} -#main .xmldoc h2 { - font-size:14pt; - margin:10px 0px 0px 0px; -} -#main .xmldoc h3 { - font-size:12pt; - margin:10px 0px 0px 0px; -} -/*-------------------------------------------------------------------------- - Additional formatting for the homepage -/*--------------------------------------------------------------------------*/ - -#nuget { - margin-top:20px; - font-size: 11pt; - padding:20px; -} - -#nuget pre { - font-size:11pt; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - border-radius: 0px; - background: #404040; - border-style:none; - color: #e0e0e0; - margin-top:15px; -} - -/* Hide snippets on the home page snippet & nicely format table */ -#hp-snippet td.lines { - display: none; -} -#hp-snippet .table { - width:80%; - margin-left:30px; -} +@import url(http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Gudea:400,700,400italic); + +/*-------------------------------------------------------------------------- + Formatting for F# code snippets +/*--------------------------------------------------------------------------*/ + +/* identifier */ +span.i { color:#d1d1d1; } +/* string */ +span.s { color:#d4b43c; } +/* keywords */ +span.k { color:#4e98dc; } +/* comment */ +span.c { color:#96C71D; } +/* operators */ +span.o { color:#af75c1; } +/* numbers */ +span.n { color:#96C71D; } +/* line number */ +span.l { color:#80b0b0; } + +/* inactive code */ +span.inactive { color:#808080; } +/* preprocessor */ +span.prep { color:#af75c1; } +/* fsi output */ +span.fsi { color:#808080; } + +/* omitted */ +span.omitted { + background:#3c4e52; + border-radius:5px; + color:#808080; + padding:0px 0px 1px 0px; +} +/* tool tip */ +div.tip { + background:#475b5f; + border-radius:4px; + font:11pt 'Droid Sans', arial, sans-serif; + padding:6px 8px 6px 8px; + display:none; + color:#d1d1d1; +} +table.pre pre { + padding:0px; + margin:0px; + border:none; +} +table.pre, pre.fssnip, pre { + line-height:13pt; + border:1px solid #d8d8d8; + border-collapse:separate; + white-space:pre; + font: 9pt 'Droid Sans Mono',consolas,monospace; + width:90%; + margin:10px 20px 20px 20px; + background-color:#212d30; + padding:10px; + border-radius:5px; + color:#d1d1d1; +} +table.pre pre { + padding:0px; + margin:0px; + border-radius:0px; + width: 100%; +} +table.pre td { + padding:0px; + white-space:normal; + margin:0px; +} +table.pre td.lines { + width:30px; +} + +/*-------------------------------------------------------------------------- + Formatting for page & standard document content +/*--------------------------------------------------------------------------*/ + +body { + font-family: Gudea, serif; + padding-top: 0px; + padding-bottom: 40px; +} + +pre { + word-wrap: inherit; +} + +/* Format the heading - nicer spacing etc. */ +.masthead { + overflow: hidden; +} +.masthead ul, .masthead li { + margin-bottom:0px; +} +.masthead .nav li { + margin-top: 15px; + font-size:110%; +} +.masthead h3 { + margin-bottom:5px; + font-size:170%; +} +hr { + margin:0px 0px 20px 0px; +} + +/* Make table headings and td.title bold */ +td.title, thead { + font-weight:bold; +} + +/* Format the right-side menu */ +#menu { + margin-top:50px; + font-size:11pt; + padding-left:20px; +} + +#menu .nav-header { + font-size:12pt; + color:#606060; + margin-top:20px; +} + +#menu li { + line-height:25px; +} + +/* Change font sizes for headings etc. */ +#main h1 { font-size: 26pt; margin:10px 0px 15px 0px; font-weight:400; } +#main h2 { font-size: 20pt; margin:20px 0px 0px 0px; font-weight:400; } +#main h3 { font-size: 14pt; margin:15px 0px 0px 0px; font-weight:400; } +#main p { font-size: 12pt; margin:5px 0px 15px 0px; } +#main ul { font-size: 12pt; margin-top:10px; } +#main li { font-size: 12pt; margin: 5px 0px 5px 0px; } +#main strong { font-weight:700; } + +/*-------------------------------------------------------------------------- + Formatting for API reference +/*--------------------------------------------------------------------------*/ + +.type-list .type-name, .module-list .module-name { + width:25%; + font-weight:bold; +} +.member-list .member-name { + width:35%; +} +#main .xmldoc h2 { + font-size:14pt; + margin:10px 0px 0px 0px; +} +#main .xmldoc h3 { + font-size:12pt; + margin:10px 0px 0px 0px; +} +/*-------------------------------------------------------------------------- + Additional formatting for the homepage +/*--------------------------------------------------------------------------*/ + +#nuget { + margin-top:20px; + font-size: 11pt; + padding:20px; +} + +#nuget pre { + font-size:11pt; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; + background: #404040; + border-style:none; + color: #e0e0e0; + margin-top:15px; +} + +/* Hide snippets on the home page snippet & nicely format table */ +#hp-snippet td.lines { + display: none; +} +#hp-snippet .table { + width:80%; + margin-left:30px; +} diff --git a/content/tips.js b/content/tips.js index 2b125ba..196d4f2 100644 --- a/content/tips.js +++ b/content/tips.js @@ -1,46 +1,46 @@ -var currentTip = null; -var currentTipElement = null; - -function hideTip(evt, name, unique) { - var el = document.getElementById(name); - el.style.display = "none"; - currentTip = null; -} - -function findPos(obj) { - // no idea why, but it behaves differently in webbrowser component - if (window.location.search == "?inapp") - return [obj.offsetLeft + 10, obj.offsetTop + 30]; - - var curleft = 0; - var curtop = obj.offsetHeight; - while (obj) { - curleft += obj.offsetLeft; - curtop += obj.offsetTop; - obj = obj.offsetParent; - }; - return [curleft, curtop]; -} - -function hideUsingEsc(e) { - if (!e) { e = event; } - hideTip(e, currentTipElement, currentTip); -} - -function showTip(evt, name, unique, owner) { - document.onkeydown = hideUsingEsc; - if (currentTip == unique) return; - currentTip = unique; - currentTipElement = name; - - var pos = findPos(owner ? owner : (evt.srcElement ? evt.srcElement : evt.target)); - var posx = pos[0]; - var posy = pos[1]; - - var el = document.getElementById(name); - var parent = (document.documentElement == null) ? document.body : document.documentElement; - el.style.position = "absolute"; - el.style.left = posx + "px"; - el.style.top = posy + "px"; - el.style.display = "block"; +var currentTip = null; +var currentTipElement = null; + +function hideTip(evt, name, unique) { + var el = document.getElementById(name); + el.style.display = "none"; + currentTip = null; +} + +function findPos(obj) { + // no idea why, but it behaves differently in webbrowser component + if (window.location.search == "?inapp") + return [obj.offsetLeft + 10, obj.offsetTop + 30]; + + var curleft = 0; + var curtop = obj.offsetHeight; + while (obj) { + curleft += obj.offsetLeft; + curtop += obj.offsetTop; + obj = obj.offsetParent; + }; + return [curleft, curtop]; +} + +function hideUsingEsc(e) { + if (!e) { e = event; } + hideTip(e, currentTipElement, currentTip); +} + +function showTip(evt, name, unique, owner) { + document.onkeydown = hideUsingEsc; + if (currentTip == unique) return; + currentTip = unique; + currentTipElement = name; + + var pos = findPos(owner ? owner : (evt.srcElement ? evt.srcElement : evt.target)); + var posx = pos[0]; + var posy = pos[1]; + + var el = document.getElementById(name); + var parent = (document.documentElement == null) ? document.body : document.documentElement; + el.style.position = "absolute"; + el.style.left = posx + "px"; + el.style.top = posy + "px"; + el.style.display = "block"; } \ No newline at end of file
    + +
    +
    +
    + +

    C# Example

    + +

    Snippet from C# example that can be found on GitHub site.

    + +
    using System;
    +using Arcadia;
    +using Data;
    +
    +public class OrderCalculationEngine : CalculationEngine, IOrderCalculationEngine
    +{
    +    public OrderCalculationEngine(IDataService data)
    +        : base()
    +    {
    +        // inputs
    +        var inventory = AddInput(data.LoadInventory(), "Inventory");
    +        var order = AddInput(data.LoadOrder(), "Order");
    +
    +        // outputs
    +        var orderResult = AddOutput(Tuple.Create(order, inventory),
    +                          new NodeFunc<Tuple<Order, Inventory>, OrderResult>(OrderMethods.GetOrderResults),
    +                          "OrderResult");
    +
    +        Inventory = inventory;
    +        Order = order;
    +        OrderResult = orderResult;
    +    }
    +
    +    public INode<Inventory> Inventory { get; private set; }
    +
    +    public INode<Order> Order { get; private set; }
    +
    +    public INode<OrderResult> OrderResult { get; private set; }
    +
    +    public bool AutoCalculate
    +    {
    +        get { return this.Calculation.Automatic; }
    +        set { this.Calculation.Automatic = value; }
    +    }
    +}
    + + +
    +
    + +
    +
    +