diff options
author | PhilipWitte <witte2008@gmail.com> | 2015-02-08 04:01:18 -0800 |
---|---|---|
committer | PhilipWitte <witte2008@gmail.com> | 2015-02-08 04:01:18 -0800 |
commit | 0b2a63b7bdb5d79cdef2a01aa3100a22a5b13ebc (patch) | |
tree | 9c2d74ca1b0d2375230cade7c25e450b5e584c5b | |
parent | 5f54ccf0bd8a4465c887ed80a453b4fb56568d3b (diff) | |
download | Nim-0b2a63b7bdb5d79cdef2a01aa3100a22a5b13ebc.tar.gz |
Fixed website banner HTML & Javascript
Various website CSS improvements Added docs & learn icons Added learn articles
-rw-r--r-- | tools/website.tmpl | 156 | ||||
-rw-r--r-- | web/assets/images/docs-articles.png | bin | 0 -> 381 bytes | |||
-rw-r--r-- | web/assets/images/docs-examples.png | bin | 0 -> 596 bytes | |||
-rw-r--r-- | web/assets/images/docs-internals.png | bin | 0 -> 621 bytes | |||
-rw-r--r-- | web/assets/images/docs-libraries.png | bin | 0 -> 335 bytes | |||
-rw-r--r-- | web/assets/images/docs-tools.png | bin | 0 -> 636 bytes | |||
-rw-r--r-- | web/assets/images/docs-tutorials.png | bin | 0 -> 560 bytes | |||
-rw-r--r-- | web/assets/index.js | 34 | ||||
-rw-r--r-- | web/assets/style.css | 126 | ||||
-rw-r--r-- | web/documentation.txt | 61 | ||||
-rw-r--r-- | web/learn.txt | 54 |
11 files changed, 219 insertions, 212 deletions
diff --git a/tools/website.tmpl b/tools/website.tmpl index e1fdf6701..6dce93d14 100644 --- a/tools/website.tmpl +++ b/tools/website.tmpl @@ -7,7 +7,6 @@ <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>$c.projectTitle</title> <link rel="stylesheet" type="text/css" href="assets/style.css" /> - <link rel="shortcut icon" href="assets/images/favicon.ico"> #if len(rss) > 0: <link href="$rss" title="Recent changes" type="application/atom+xml" rel="alternate"> @@ -17,23 +16,23 @@ <header id="head"> <div class="page-layout tall"> <div id="head-logo"></div> - <a id="head-logo-link" href="http://nim-lang.org/index.html"></a> + <a id="head-logo-link" href="index.html"></a> <nav id="head-links"> #for i in 0.. c.tabs.len-1: - # var name = c.tabs[i].key - # var t = c.tabs[i].val - #if currentTab == t: - <a class="active" - #elif t == "community" or t == "news": - # continue - #else: - <a - #end if - #if t.contains('.'): - href="${t}" title = "$c.projectName - $name">$name</a> - #else: - href="${t}.html" title = "$c.projectName - $name">$name</a> - #end if + # let t = c.tabs[i].val + # if t != "community" and t != "news": + # let name = c.tabs[i].key + # if currentTab == t: + <a class="active" + # else: + <a + # end if + # if t.contains('.'): + href="${t}" title = "$c.projectName - $name">$name</a> + # else: + href="${t}.html" title = "$c.projectName - $name">$name</a> + # end if + # end if #end for </nav> </div> @@ -50,10 +49,25 @@ # if currentTab == "index": <div id="slideshow"> <!-- slides --> - <div id="slide0" class=""> + <div id="slide0" class="active"> + <h2><a name="why-should-i-be-excited">Why should I be excited?</a></h2> + <span class="desc">Nim is the only language that leverages automated proof technology to perform a <i>disjoint check</i> for your parallel code. Working on disjoint data means no locking is required and yet data races are impossible:</span><br><br> +<pre> +<span class="kwd">parallel</span>: +<span class="tab"> </span><span class="kwd">var</span> i = <span class="val">0</span> +<span class="tab"> </span><span class="kwd">while</span> i <= a.high: +<span class="tab"> <span class="tab"> </span></span></span><span class="kwd">spawn</span> f(a[i]) +<span class="tab"> <span class="tab"> </span></span></span><span class="kwd">spawn</span> f(a[i+<span class="val">1</span>]) +<span class="tab"> <span class="tab"> </span></span></span><span class="cmt"># ERROR: cannot prove a[i] is disjoint from a[i+1]</span> +<span class="tab"> <span class="tab"> </span></span></span><span class="cmt"># BUT: replace 'i += 1' with 'i += 2' and the code compiles!</span> +<span class="tab end"> <span class="tab end"> </span></span>i += <span class="val">1</span> +</pre> + </div> + <div id="slide1"> <div> <h2>Nim looks like this..</h2> -<pre><span class="cmt"># compute average line length</span> +<pre> +<span class="cmt"># compute average line length</span> <span class="kwd">var</span> <span class="tab"> </span>sum = <span class="val">0</span> <span class="tab end"> </span>count = <span class="val">0</span> @@ -68,7 +82,8 @@ echo(<span class="val">"Average line length: "</span>, </div> <div> <h2>..and this...</h2> -<pre><span class="cmt"># create and greet someone</span> +<pre> +<span class="cmt"># create and greet someone</span> <span class="kwd">type</span> <span class="def">Person</span> = <span class="typ">object</span> <span class="tab"> </span>name: <span class="typ">string</span> <span class="tab end"> </span>age: <span class="typ">int</span> @@ -81,58 +96,43 @@ echo(<span class="val">"Average line length: "</span>, p.greet() <span class="cmt"># or greet(p)</span> </pre> </div> - </div> <!-- slide0 --> - <div id="slide1" class="active"> - <h2><a name="why-should-i-be-excited">Why should I be excited?</a></h2> - <span class="desc"> - Nim is the only language that leverages automated proof technology - to perform a <i>disjoint check</i> for your parallel - code. Working on disjoint data means no locking is - required and yet data races are impossible:</span> - <pre> -<span class="kwd">parallel</span>: -<span class="tab"> </span><span class="kwd">var</span> i = <span class="val">0</span> -<span class="tab"> </span><span class="kwd">while</span> i <= a.high: -<span class="tab"> </span>spawn f(a[i]) -<span class="tab"> </span>spawn f(a[i+<span class="val">1</span>]) -<span class="tab"> </span><span class="cmt"># ERROR: cannot prove a[i] is disjoint from a[i+1]</span> -<span class="tab"> </span><span class="cmt"># BUT: replace 'i += 1' with 'i += 2' and the code compiles!</span> -<span class="tab end"> </span>i += <span class="val">1</span> - </pre> </div> <div id="slide2" class=""> <div> - <h2>interfacing with C..</h2> - <pre> -<span class="kwd">proc</span> <span class="def">unsafeScanf</span>(f: <span class="typ">File</span>; s: <span class="typ">cstring</span>) -<span class="tab"> </span>{.importc: <span class="val">"fscanf"</span>, -<span class="tab end"> </span>header: <span class="val">"<stdio.h>"</span>, varargs.} + <h2>C FFI is easy in Nim..</h2> +<pre> +<span class="cmt"># declare a C procedure..</span> +<span class="kwd">proc</span> <span class="def">unsafeScanf</span>(f: <span class="typ">File</span>, s: <span class="typ">cstring</span>) +<span class="tab"> </span>{.varargs, +<span class="tab"> </span>importc: <span class="val">"fscanf"</span>, +<span class="tab end"> </span>header: <span class="val">"<stdio.h>"</span>.} +<span class="cmt"># ..and use it...</span> <span class="kwd">var</span> x: cint -unsafeScanf(stdin, <span class="val">"%d"</span>, <span class="kwd">addr</span> x) - </pre></div> - +stdin.unsafeScanf(<span class="val">"%d"</span>, <span class="kwd">addr</span> x) +</pre> + <p><span class="desc"><b>Compile and run with:</b><br> $ nim c -r example.nim</span></p> + </div> <div> - <h2>..and DSLs made easy</h2> + <h2>..and DSLs are too...</h2> <pre> +<span class="cmt"># a simple web server</span> <span class="kwd">import</span> jester, asyncdispatch, htmlgen -routes: -<span class="tab"> </span>get <span class="val">"/"</span>: -<span class="tab end"> </span>resp h1(<span class="val">"Hello world"</span>) +<span class="cmt"># using jester commands</span> +<span class="kwd">routes</span>: +<span class="tab"> </span><span class="kwd">get</span> <span class="val">"/"</span>: +<span class="tab end"> <span class="tab end"> </span></span><span class="kwd">resp</span> h1(<span class="val">"Hello world"</span>) runForever() -</pre><p><span class="desc"> -Compile and run with:<br /> -nim c -r example.nim<br /> -View at: localhost:5000 -</span></p> +</pre> + <p><span class="desc"><b>View in browser at:</b><br> localhost:5000</span></p> </div> </div> </div> <div id="slideshow-nav"> - <div id="slideControl0" onclick="slideshow_click(0)"></div> - <div id="slideControl1" onclick="slideshow_click(1)" class="active"></div> + <div id="slideControl0" onclick="slideshow_click(0)" class="active"></div> + <div id="slideControl1" onclick="slideshow_click(1)"></div> <div id="slideControl2" onclick="slideshow_click(2)"></div> </div> # end @@ -190,9 +190,12 @@ View at: localhost:5000 </div> </div> </footer> - - <script> + +# if currentTab == "index": + <script src="assets/index.js"></script> +# end if # if c.gaId != nil: + <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) @@ -200,42 +203,7 @@ View at: localhost:5000 ga('create', '${c.gaId}', 'nim-lang.org'); ga('send', 'pageview'); -# end if - -var timer; -var prevIndex = 0; - -function setSlideShow(index, short) { - if (index > 2) index = 0; - for (var i = 0; i < 10; ++i) { - var x = document.getElementById("slide"+i); - if (!x) break; - x.className = ""; - document.getElementById("slideControl"+i).className = ""; - } - document.getElementById("slide"+index).className = "active"; - document.getElementById("slideControl"+index).className = "active"; - prevIndex = index; - startTimer(short ? 8000 : 32000); -} - -function nextSlide() { setSlideShow(prevIndex + 1, true); } -function startTimer(t) { timer = setTimeout(nextSlide, t); } - -function slideshow_enter() { clearTimeout(timer); } -function slideshow_exit () { startTimer(16000); } - -function slideshow_click(index) { - clearTimeout(timer); - setSlideShow(index, false); -} - -window.onload = function() { - var slideshow = document.getElementById("slideshow"); - slideshow.onmouseenter = slideshow_enter; - slideshow.onmouseleave = slideshow_exit; - startTimer(8000); -}; </script> +# end if </body> </html> diff --git a/web/assets/images/docs-articles.png b/web/assets/images/docs-articles.png new file mode 100644 index 000000000..7f800ea33 --- /dev/null +++ b/web/assets/images/docs-articles.png Binary files differdiff --git a/web/assets/images/docs-examples.png b/web/assets/images/docs-examples.png new file mode 100644 index 000000000..e6d27e034 --- /dev/null +++ b/web/assets/images/docs-examples.png Binary files differdiff --git a/web/assets/images/docs-internals.png b/web/assets/images/docs-internals.png new file mode 100644 index 000000000..e03a952d5 --- /dev/null +++ b/web/assets/images/docs-internals.png Binary files differdiff --git a/web/assets/images/docs-libraries.png b/web/assets/images/docs-libraries.png new file mode 100644 index 000000000..b14952f7d --- /dev/null +++ b/web/assets/images/docs-libraries.png Binary files differdiff --git a/web/assets/images/docs-tools.png b/web/assets/images/docs-tools.png new file mode 100644 index 000000000..d83f0faaa --- /dev/null +++ b/web/assets/images/docs-tools.png Binary files differdiff --git a/web/assets/images/docs-tutorials.png b/web/assets/images/docs-tutorials.png new file mode 100644 index 000000000..926a4b58b --- /dev/null +++ b/web/assets/images/docs-tutorials.png Binary files differdiff --git a/web/assets/index.js b/web/assets/index.js new file mode 100644 index 000000000..f10dc603d --- /dev/null +++ b/web/assets/index.js @@ -0,0 +1,34 @@ +"use strict"; + +var timer; +var prevIndex = 0; +var slideCount = 2; + +function setSlideShow(index, short) { + if (index >= slideCount) index = 0; + document.getElementById("slide"+prevIndex).className = ""; + document.getElementById("slide"+index).className = "active"; + document.getElementById("slideControl"+prevIndex).className = ""; + document.getElementById("slideControl"+index).className = "active"; + prevIndex = index; + startTimer(short ? 8000 : 32000); +} + +function nextSlide() { setSlideShow(prevIndex + 1, true); } +function startTimer(t) { timer = setTimeout(nextSlide, t); } + +function slideshow_enter() { clearTimeout(timer); } +function slideshow_exit () { startTimer(16000); } + +function slideshow_click(index) { + clearTimeout(timer); + setSlideShow(index, false); +} + +window.onload = function() { + var slideshow = document.getElementById("slideshow"); + slideshow.onmouseenter = slideshow_enter; + slideshow.onmouseleave = slideshow_exit; + slideCount = slideshow.children.length; + startTimer(8000); +}; \ No newline at end of file diff --git a/web/assets/style.css b/web/assets/style.css index da4cff05c..5e2115ef1 100644 --- a/web/assets/style.css +++ b/web/assets/style.css @@ -8,10 +8,18 @@ body { min-width:1030px; margin:0; font:13pt "arial"; - background:#152534 url("images/bg.jpg") no-repeat fixed center top; + background:#152534 url("images/bg.jpg") no-repeat center top; color:rgba(0,0,0,.8); } -pre { color:#fff;} +pre { + color:#fff; + margin:0; + padding:15px 10px; + font:10pt monospace; + line-height:14pt; + background:rgba(0,0,0,.4); + border-left:8px solid rgba(0,0,0,.3); + box-shadow:1px 2px 16px rgba(28,180,236,.4); } pre, pre * { cursor:text; } pre .cmt { color:rgb(255,229,106); } pre .kwd { color:#43A8CF; font-weight:bold; } @@ -23,8 +31,14 @@ pre .val { color:#8AB647; } pre .tab { border-left:1px dotted rgba(67,168,207,0.4); } pre .end { background:url("images/tabEnd.png") no-repeat left bottom; } +.page pre { background:rgba(0,0,0,.8); } +.page pre > .Comment { color:rgb(255,229,106); } +.page pre > .Keyword { color:#43A8CF; font-weight:bold; } +.page pre > .StringLit, +.page pre > .DecNumber { color:#8AB647; } + .tall { height:100%; } -.pre { padding:0 5px; font:11pt monospace; background:rgba(255,255,255,.15); border-radius:3px; } +.pre { padding:1px 5px; font:11pt monospace; background:#96A9B7; border-radius:3px; } .page-layout { margin:0 auto; width:1000px; } .docs-layout { margin:0 40px; } @@ -90,7 +104,7 @@ pre .end { background:url("images/tabEnd.png") no-repeat left bottom; } right:-16px; height:48px; background:url("images/glow-arrow.png") no-repeat right; } - glow-arrow.docs { left:280px; } + #glow-arrow.docs { left:280px; } #glow-line-vert { position:fixed; @@ -102,55 +116,35 @@ pre .end { background:url("images/tabEnd.png") no-repeat left bottom; } #slideshow { position:absolute; top:10px; left:10px; width:700px; height: 1000px; } #slideshow > div { - visibility:hidden; opacity:0; position:absolute; transition:visibility 0s linear 1s, opacity 1s ease-in-out; } + position:absolute; + margin:30px 0 0 10px; + visibility:hidden; + opacity:0; + transition: + visibility 0s linear 1s, + opacity 1s ease-in-out; } #slideshow > div.active { visibility:visible; opacity:1; transition-delay:0s; } #slideshow > div.init { transition-delay:0s; } #slideshow-nav { z-index:3; position:absolute; top:110px;; right:-12px; } #slideshow-nav > div { margin:5px 0; width:23px; height:23px; background:url("images/slideshow-nav.png") no-repeat; } #slideshow-nav > div:hover { background-image:url("images/slideshow-nav_active.png"); opacity:0.5; } #slideshow-nav > div.active { background-image:url("images/slideshow-nav_active.png"); opacity:1; } - - #slide0 { margin:30px 0 0 10px; } - #slide0 > div { float:left; width:320px; font:10pt monospace; } + + #slide0 { float:left; width:680px; font:10pt monospace; } #slide0 > div:first-child { margin:0 40px 0 0; } #slide0 h2 { margin:0 0 5px 0; color:rgba(162,198,223,.78); } - #slide0 > div > pre { - margin:0; - padding:15px 10px; - line-height:14pt; - background:rgba(0,0,0,.4); - border-left:8px solid rgba(0,0,0,.3); - box-shadow:1px 2px 16px rgba(28,180,236,.4); } - - #slide1 { margin:30px 0 0 10px; } - #slide1 { float:left; width:680px; font:10pt monospace; } + #slide0 .desc { margin:0 0 5px 0; color:rgba(162,198,223,.78); font:13pt "arial"; } + + #slide1 > div { float:left; width:320px; font:10pt monospace; } #slide1 > div:first-child { margin:0 40px 0 0; } #slide1 h2 { margin:0 0 5px 0; color:rgba(162,198,223,.78); } - #slide1 .desc { margin:0 0 5px 0; color:rgba(162,198,223,.78); - font:13pt "arial"; } - #slide1 pre { - padding:7px 10px; - line-height:14pt; - background:rgba(0,0,0,.4); - border-left:8px solid rgba(0,0,0,.3); - box-shadow:1px 2px 16px rgba(28,180,236,.4); } - - - #slide2 { margin:30px 0 0 10px; } + #slide2 > div { float:left; width:320px; font:10pt monospace; } #slide2 > div:first-child { margin:0 40px 0 0; } #slide2 h2 { margin:0 0 5px 0; color:rgba(162,198,223,.78); } - #slide2 > div > pre { - margin:0; - padding:15px 10px; - line-height:14pt; - background:rgba(0,0,0,.4); - border-left:8px solid rgba(0,0,0,.3); - box-shadow:1px 2px 16px rgba(28,180,236,.4); } - - #slide2 .desc { margin:0 0 5px 0; color:rgba(162,198,223,.78); - font:13pt "arial"; } - + + #slide2 .desc { margin:0 0 5px 0; color:rgba(162,198,223,.78); font:13pt "arial"; } + /* back when slide1 was the quote: #slide1 { margin-top:50px; } #slide1 > p { @@ -166,7 +160,7 @@ pre .end { background:url("images/tabEnd.png") no-repeat left bottom; } font-style:italic; font-weight:bold; color:rgba(93,155,199,.44); } - */ + */ #sidebar { z-index:2; position:absolute; @@ -524,11 +518,12 @@ pre .end { background:url("images/tabEnd.png") no-repeat left bottom; } .standout h2 { margin-bottom:10px; padding-bottom:10px; border-bottom:1px dashed rgba(0,0,0,.8); } .standout li { margin:0 !important; padding-top:10px; border-top:1px dashed rgba(0,0,0,.2); } .standout ul { padding-bottom:5px; } - .standout ul.tools { list-style:url("images/docs-tools.png"); } - .standout ul.library { list-style:url("images/docs-library.png"); } - .standout ul.internal { list-style:url("images/docs-internal.png"); } - .standout ul.tutorial { list-style:url("images/docs-tutorial.png"); } - .standout ul.example { list-style:url("images/docs-example.png"); } + .standout ul.tools { list-style:url("images/docs-tools.png"); } + .standout ul.libraries { list-style:url("images/docs-libraries.png"); } + .standout ul.internals { list-style:url("images/docs-internals.png"); } + .standout ul.tutorials { list-style:url("images/docs-tutorials.png"); } + .standout ul.examples { list-style:url("images/docs-examples.png"); } + .standout ul.articles { list-style:url("images/docs-articles.png"); } .standout li:first-child { padding-top:0; border-top:none; } .standout li p { margin:0 0 10px 0 !important; line-height:130%; } .standout li > a { font-weight:bold; } @@ -551,48 +546,13 @@ pre .end { background:url("images/tabEnd.png") no-repeat left bottom; } #foot-legal { float:right; font-size:10pt; color:rgba(255,255,255,.3); line-height:150%; text-align:right; } #foot-legal a { color:inherit; text-decoration:none; } #foot-legal > h4 > a { color:inherit; } - - #mascot { - z-index:2; - position:absolute; - top:-340px; - right:25px; - width:202px; - height:319px; - background:url("images/mascot.png") no-repeat; } - - -#body pre { - padding:20px; - border-left:10px solid #8f9698; - background:#f3f6f8; - font-size:15px; - font-family:courier, monospace; - letter-spacing:0; - line-height:17px; - color: #343739; -} - -#body span.pre { - background-color: #96A9B7; - padding: 1pt 3pt; - border-radius: 2pt; - -moz-border-radius: 2pt; - -webkit-border-radius: 2pt; -} -#body pre > .Comment { color:#858686; font-style:italic; } -#body pre > .Keyword { color:#1cb4ec; font-weight:bold; } -#body pre > .Operator { color:#777; } -#body pre > .StringLit, #page pre > .DecNumber { color:#ff7302; } #body .docutils th { border-bottom: 2px solid #1A1A1A; font-weight: normal; - padding: 8px; -} + padding: 8px; } #body table.docutils { border-collapse: collapse; text-align: left; - border-spacing: 0px; -} + border-spacing: 0px; } \ No newline at end of file diff --git a/web/documentation.txt b/web/documentation.txt index 0bb2b8a0f..c32fd35ba 100644 --- a/web/documentation.txt +++ b/web/documentation.txt @@ -6,16 +6,22 @@ Nim's Documentation Standards & Guides ------------------ - - - | `Standard Library <lib.html>`_ - | This document describes Nim's standard library. - - - | `Language Manual <manual.html>`_ - | The Nim manual is a draft that will evolve into a proper specification. - - - | `Compiler user guide <nimc.html>`_ - | The user guide lists command line arguments, special features of the - compiler, etc. + .. raw:: html + + <ul class="libraries"> + <li> + <a href="lib.html">Standard Library</a><br> + <p>This document describes Nim's standard library.</p> + </li> + <li> + <a href="manual.html">Language Manual</a><br> + <p>The Nim manual is a draft that will evolve into a proper specification.</p> + </li> + <li> + <a href="nimc.html">Compiler User-Guide</a><br> + <p>The user guide lists command line arguments, special features of the compiler, etc.</p> + </li> + </ul> .. container:: standout @@ -23,12 +29,18 @@ Nim's Documentation Tools & Features ---------------- - - | `Source code filters <filters.html>`_ - | The Nim compiler supports source code filters as a simple yet powerful - builtin templating system. + .. raw:: html - - | `Tools documentation <tools.html>`_ - | Description of some tools that come with the standard distribution. + <ul class="tools"> + <li> + <a href="filters.html">Source-Code Filters</a><br> + <p>The Nim compiler supports source code filters as a simple yet powerful builtin templating system.</p> + </li> + <li> + <a href="tools.html">Tools Documentation</a><br> + <p>Description of some tools that come with the standard distribution.</p> + </li> + </ul> .. container:: standout @@ -36,13 +48,18 @@ Nim's Documentation Internal Details ---------------- - - | `Garbage Collector <gc.html>`_ - | Additional documentation about Nim's GC and how to operate it in a - | realtime setting. - - - | `Internal documentation <intern.html>`_ - | The internal documentation describes how the compiler is implemented. Read - this if you want to hack the compiler. + .. raw:: html + + <ul class="internals"> + <li> + <a href="gc.html">Garbage Collector</a><br> + <p>Additional documentation about Nim's GC and how to operate it in a realtime setting.</p> + </li> + <li> + <a href="intern.html">Internal Documentation</a><br> + <p>The internal documentation describes how the compiler is implemented. Read this if you want to hack the compiler.</p> + </li> + </ul> Search Options diff --git a/web/learn.txt b/web/learn.txt index 854b31668..4ff4dcafb 100644 --- a/web/learn.txt +++ b/web/learn.txt @@ -6,11 +6,18 @@ Learning Nim Tutorials --------- - - | `Tutorial (part I) <tut1.html>`_ - | Learn the basics of Nim's types, variables, procedures, control flow, etc... + .. raw:: html - - | `Tutorial (part II) <tut2.html>`_ - | Learn Nim's more advanced features such as OOP, generics, macros, etc... + <ul class="tutorials"> + <li> + <a href="tut1.html">Tutorial (part I)</a><br> + <p>Learn the basics of Nim's types, variables, procedures, control flow, etc...</p> + </li> + <li> + <a href="tut2.html">Tutorial (part II)</a><br> + <p>Learn Nim's more advanced features such as OOP, generics, macros, etc...</p> + </li> + </ul> .. container:: standout @@ -18,14 +25,22 @@ Learning Nim Examples -------- - - | `Nim by Example <http://nim-by-example.github.io/>`_ - | Nim by Example is an excellent starting place for beginners. + .. raw:: html - - | `Nim on Rosetta Code <http://rosettacode.org/wiki/Category:Nimrod>`_ - | Many different Nim code examples comparable to other languages for reference. - - - | `Nim for C/C++ Programmers <https://github.com/Araq/Nim/wiki/Nim-for-C-programmers>`_ - | A useful cheat-sheet for those most familiar with C/C++ languages. + <ul class="examples"> + <li> + <a href="http://nim-by-example.github.io">Nim by Example</a><br> + <p>Nim by Example is an excellent starting place for beginners.</p> + </li> + <li> + <a href="http://rosettacode.org/wiki/Category:Nimrod">Nim on Rosetta Code</a><br> + <p>Many different Nim code examples comparable to other languages for reference.</p> + </li> + <li> + <a href="https://github.com/Araq/Nim/wiki/Nim-for-C-programmers">Nim for C/C++ Programmers</a><br> + <p>A useful cheat-sheet for those most familiar with C/C++ languages.</p> + </li> + </ul> .. container:: standout @@ -33,8 +48,21 @@ Learning Nim Articles -------- - - `Dr Dobbs Nimrod Publication <http://www.drdobbs.com/open-source/nimrod-a-new-systems-programming-languag/240165321>`_ - - `Bootstrapping Nim <http://goran.krampe.se/2014/10/15/bootstrapping-nim/>`_ + .. raw:: html + + <ul class="articles"> + <li> + <a href="http://www.drdobbs.com/open-source/nimrod-a-new-systems-programming-languag/240165321">Dr Dobbs Nimrod Publication</a><br> + <p> </p> <!-- TODO: fix CSS so these empty paragraphs aren't needed --!> + </li> + <li><a href="http://goran.krampe.se/nim/">Göran Krampe's Nim Articles</a><br><p> </p></li> + <li><a href="http://hookrace.net/blog/what-is-special-about-nim/">What is special about Nim?</a><br><p> </p></li> + <li><a href="http://hookrace.net/blog/what-makes-nim-practical/">What makes Nim practical?</a><br><p> </p></li> + <li><a href="https://akehrer.github.io/nim/2015/01/05/getting-started-with-nim.html">Getting Started With Nim</a><br><p> </p></li> + <li><a href="https://akehrer.github.io/nim/2015/01/14/getting-started-with-nim-pt2.html">Getting Started With Nim - Part 2</a><br><p> </p></li> + <li><a href="https://akehrer.github.io/nim/2015/01/24/connecting-nim-to-python.html">Connecting Nim to Python</a><br><p> </p></li> + <li><a href="http://programmingthomas.com/blog/2015/1/27/nim-on-ios">Nim on iOS</a><br></li> + </ul> Documentation |