Fixed website banner HTML & Javascript

Various website CSS improvements
Added docs & learn icons
Added learn articles
This commit is contained in:
PhilipWitte 2015-02-08 04:01:18 -08:00
commit 0b2a63b7bd
11 changed files with 220 additions and 213 deletions

View file

@ -7,7 +7,6 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>$c.projectTitle</title> <title>$c.projectTitle</title>
<link rel="stylesheet" type="text/css" href="assets/style.css" /> <link rel="stylesheet" type="text/css" href="assets/style.css" />
<link rel="shortcut icon" href="assets/images/favicon.ico"> <link rel="shortcut icon" href="assets/images/favicon.ico">
#if len(rss) > 0: #if len(rss) > 0:
<link href="$rss" title="Recent changes" type="application/atom+xml" rel="alternate"> <link href="$rss" title="Recent changes" type="application/atom+xml" rel="alternate">
@ -17,23 +16,23 @@
<header id="head"> <header id="head">
<div class="page-layout tall"> <div class="page-layout tall">
<div id="head-logo"></div> <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"> <nav id="head-links">
#for i in 0.. c.tabs.len-1: #for i in 0.. c.tabs.len-1:
# var name = c.tabs[i].key # let t = c.tabs[i].val
# var t = c.tabs[i].val # if t != "community" and t != "news":
#if currentTab == t: # let name = c.tabs[i].key
<a class="active" # if currentTab == t:
#elif t == "community" or t == "news": <a class="active"
# continue # else:
#else: <a
<a # end if
#end if # if t.contains('.'):
#if t.contains('.'): href="${t}" title = "$c.projectName - $name">$name</a>
href="${t}" title = "$c.projectName - $name">$name</a> # else:
#else: href="${t}.html" title = "$c.projectName - $name">$name</a>
href="${t}.html" title = "$c.projectName - $name">$name</a> # end if
#end if # end if
#end for #end for
</nav> </nav>
</div> </div>
@ -50,10 +49,25 @@
# if currentTab == "index": # if currentTab == "index":
<div id="slideshow"> <div id="slideshow">
<!-- slides --> <!-- 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> <div>
<h2>Nim looks like this..</h2> <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="kwd">var</span>
<span class="tab"> </span>sum = <span class="val">0</span> <span class="tab"> </span>sum = <span class="val">0</span>
<span class="tab end"> </span>count = <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>
<div> <div>
<h2>..and this...</h2> <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="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"> </span>name: <span class="typ">string</span>
<span class="tab end"> </span>age: <span class="typ">int</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> p.greet() <span class="cmt"># or greet(p)</span>
</pre> </pre>
</div> </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>
<div id="slide2" class=""> <div id="slide2" class="">
<div> <div>
<h2>interfacing with C..</h2> <h2>C FFI is easy in Nim..</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">"&lt;stdio.h&gt;"</span>, varargs.}
<span class="kwd">var</span> x: cint
unsafeScanf(stdin, <span class="val">"%d"</span>, <span class="kwd">addr</span> x)
</pre></div>
<div>
<h2>..and DSLs made easy</h2>
<pre> <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">"&lt;stdio.h&gt;"</span>.}
<span class="cmt"># ..and use it...</span>
<span class="kwd">var</span> x: cint
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>&nbsp;&nbsp;&nbsp;&nbsp;&#36; nim c -r example.nim</span></p>
</div>
<div>
<h2>..and DSLs are too...</h2>
<pre>
<span class="cmt"># a simple web server</span>
<span class="kwd">import</span> jester, asyncdispatch, htmlgen <span class="kwd">import</span> jester, asyncdispatch, htmlgen
routes: <span class="cmt"># using jester commands</span>
<span class="tab"> </span>get <span class="val">"/"</span>: <span class="kwd">routes</span>:
<span class="tab end"> </span>resp h1(<span class="val">"Hello world"</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() runForever()
</pre><p><span class="desc"> </pre>
Compile and run with:<br /> <p><span class="desc"><b>View in browser at:</b><br>&nbsp;&nbsp;&nbsp;&nbsp;localhost:5000</span></p>
nim c -r example.nim<br />
View at: localhost:5000
</span></p>
</div> </div>
</div> </div>
</div> </div>
<div id="slideshow-nav"> <div id="slideshow-nav">
<div id="slideControl0" onclick="slideshow_click(0)"></div> <div id="slideControl0" onclick="slideshow_click(0)" class="active"></div>
<div id="slideControl1" onclick="slideshow_click(1)" class="active"></div> <div id="slideControl1" onclick="slideshow_click(1)"></div>
<div id="slideControl2" onclick="slideshow_click(2)"></div> <div id="slideControl2" onclick="slideshow_click(2)"></div>
</div> </div>
# end # end
@ -191,8 +191,11 @@ View at: localhost:5000
</div> </div>
</footer> </footer>
<script> # if currentTab == "index":
<script src="assets/index.js"></script>
# end if
# if c.gaId != nil: # if c.gaId != nil:
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (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), (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) 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('create', '${c.gaId}', 'nim-lang.org');
ga('send', 'pageview'); 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> </script>
# end if
</body> </body>
</html> </html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 B

34
web/assets/index.js Normal file
View file

@ -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);
};

View file

@ -8,10 +8,18 @@ body {
min-width:1030px; min-width:1030px;
margin:0; margin:0;
font:13pt "arial"; 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); } 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, pre * { cursor:text; }
pre .cmt { color:rgb(255,229,106); } pre .cmt { color:rgb(255,229,106); }
pre .kwd { color:#43A8CF; font-weight:bold; } 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 .tab { border-left:1px dotted rgba(67,168,207,0.4); }
pre .end { background:url("images/tabEnd.png") no-repeat left bottom; } 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%; } .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; } .page-layout { margin:0 auto; width:1000px; }
.docs-layout { margin:0 40px; } .docs-layout { margin:0 40px; }
@ -90,7 +104,7 @@ pre .end { background:url("images/tabEnd.png") no-repeat left bottom; }
right:-16px; right:-16px;
height:48px; height:48px;
background:url("images/glow-arrow.png") no-repeat right; } background:url("images/glow-arrow.png") no-repeat right; }
glow-arrow.docs { left:280px; } #glow-arrow.docs { left:280px; }
#glow-line-vert { #glow-line-vert {
position:fixed; position:fixed;
@ -102,7 +116,13 @@ pre .end { background:url("images/tabEnd.png") no-repeat left bottom; }
#slideshow { position:absolute; top:10px; left:10px; width:700px; height: 1000px; } #slideshow { position:absolute; top:10px; left:10px; width:700px; height: 1000px; }
#slideshow > div { #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.active { visibility:visible; opacity:1; transition-delay:0s; }
#slideshow > div.init { transition-delay:0s; } #slideshow > div.init { transition-delay:0s; }
#slideshow-nav { z-index:3; position:absolute; top:110px;; right:-12px; } #slideshow-nav { z-index:3; position:absolute; top:110px;; right:-12px; }
@ -110,46 +130,20 @@ pre .end { background:url("images/tabEnd.png") no-repeat left bottom; }
#slideshow-nav > div:hover { background-image:url("images/slideshow-nav_active.png"); opacity:0.5; } #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; } #slideshow-nav > div.active { background-image:url("images/slideshow-nav_active.png"); opacity:1; }
#slide0 { margin:30px 0 0 10px; } #slide0 { float:left; width:680px; font:10pt monospace; }
#slide0 > div { float:left; width:320px; font:10pt monospace; }
#slide0 > div:first-child { margin:0 40px 0 0; } #slide0 > div:first-child { margin:0 40px 0 0; }
#slide0 h2 { margin:0 0 5px 0; color:rgba(162,198,223,.78); } #slide0 h2 { margin:0 0 5px 0; color:rgba(162,198,223,.78); }
#slide0 > div > pre { #slide0 .desc { margin:0 0 5px 0; color:rgba(162,198,223,.78); font:13pt "arial"; }
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 > div { float:left; width:320px; font:10pt monospace; }
#slide1 { float:left; width:680px; font:10pt monospace; }
#slide1 > div:first-child { margin:0 40px 0 0; } #slide1 > div:first-child { margin:0 40px 0 0; }
#slide1 h2 { margin:0 0 5px 0; color:rgba(162,198,223,.78); } #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 { float:left; width:320px; font:10pt monospace; }
#slide2 > div:first-child { margin:0 40px 0 0; } #slide2 > div:first-child { margin:0 40px 0 0; }
#slide2 h2 { margin:0 0 5px 0; color:rgba(162,198,223,.78); } #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); #slide2 .desc { margin:0 0 5px 0; color:rgba(162,198,223,.78); font:13pt "arial"; }
font:13pt "arial"; }
/* back when slide1 was the quote: /* back when slide1 was the quote:
#slide1 { margin-top:50px; } #slide1 { margin-top:50px; }
@ -166,7 +160,7 @@ pre .end { background:url("images/tabEnd.png") no-repeat left bottom; }
font-style:italic; font-style:italic;
font-weight:bold; font-weight:bold;
color:rgba(93,155,199,.44); } color:rgba(93,155,199,.44); }
*/ */
#sidebar { #sidebar {
z-index:2; z-index:2;
position:absolute; 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 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 li { margin:0 !important; padding-top:10px; border-top:1px dashed rgba(0,0,0,.2); }
.standout ul { padding-bottom:5px; } .standout ul { padding-bottom:5px; }
.standout ul.tools { list-style:url("images/docs-tools.png"); } .standout ul.tools { list-style:url("images/docs-tools.png"); }
.standout ul.library { list-style:url("images/docs-library.png"); } .standout ul.libraries { list-style:url("images/docs-libraries.png"); }
.standout ul.internal { list-style:url("images/docs-internal.png"); } .standout ul.internals { list-style:url("images/docs-internals.png"); }
.standout ul.tutorial { list-style:url("images/docs-tutorial.png"); } .standout ul.tutorials { list-style:url("images/docs-tutorials.png"); }
.standout ul.example { list-style:url("images/docs-example.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:first-child { padding-top:0; border-top:none; }
.standout li p { margin:0 0 10px 0 !important; line-height:130%; } .standout li p { margin:0 0 10px 0 !important; line-height:130%; }
.standout li > a { font-weight:bold; } .standout li > a { font-weight:bold; }
@ -552,47 +547,12 @@ pre .end { background:url("images/tabEnd.png") no-repeat left bottom; }
#foot-legal a { color:inherit; text-decoration:none; } #foot-legal a { color:inherit; text-decoration:none; }
#foot-legal > h4 > a { color:inherit; } #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 { #body .docutils th {
border-bottom: 2px solid #1A1A1A; border-bottom: 2px solid #1A1A1A;
font-weight: normal; font-weight: normal;
padding: 8px; padding: 8px; }
}
#body table.docutils { #body table.docutils {
border-collapse: collapse; border-collapse: collapse;
text-align: left; text-align: left;
border-spacing: 0px; border-spacing: 0px; }
}

View file

@ -6,16 +6,22 @@ Nim's Documentation
Standards & Guides Standards & Guides
------------------ ------------------
.. raw:: html
- | `Standard Library <lib.html>`_ <ul class="libraries">
| This document describes Nim's standard library. <li>
<a href="lib.html">Standard Library</a><br>
- | `Language Manual <manual.html>`_ <p>This document describes Nim's standard library.</p>
| The Nim manual is a draft that will evolve into a proper specification. </li>
<li>
- | `Compiler user guide <nimc.html>`_ <a href="manual.html">Language Manual</a><br>
| The user guide lists command line arguments, special features of the <p>The Nim manual is a draft that will evolve into a proper specification.</p>
compiler, etc. </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 .. container:: standout
@ -23,12 +29,18 @@ Nim's Documentation
Tools & Features Tools & Features
---------------- ----------------
- | `Source code filters <filters.html>`_ .. raw:: html
| The Nim compiler supports source code filters as a simple yet powerful
builtin templating system.
- | `Tools documentation <tools.html>`_ <ul class="tools">
| Description of some tools that come with the standard distribution. <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 .. container:: standout
@ -36,13 +48,18 @@ Nim's Documentation
Internal Details Internal Details
---------------- ----------------
- | `Garbage Collector <gc.html>`_ .. raw:: html
| Additional documentation about Nim's GC and how to operate it in a
| realtime setting.
- | `Internal documentation <intern.html>`_ <ul class="internals">
| The internal documentation describes how the compiler is implemented. Read <li>
this if you want to hack the compiler. <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 Search Options

View file

@ -6,11 +6,18 @@ Learning Nim
Tutorials Tutorials
--------- ---------
- | `Tutorial (part I) <tut1.html>`_ .. raw:: html
| Learn the basics of Nim's types, variables, procedures, control flow, etc...
- | `Tutorial (part II) <tut2.html>`_ <ul class="tutorials">
| Learn Nim's more advanced features such as OOP, generics, macros, etc... <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 .. container:: standout
@ -18,14 +25,22 @@ Learning Nim
Examples Examples
-------- --------
- | `Nim by Example <http://nim-by-example.github.io/>`_ .. raw:: html
| Nim by Example is an excellent starting place for beginners.
- | `Nim on Rosetta Code <http://rosettacode.org/wiki/Category:Nimrod>`_ <ul class="examples">
| Many different Nim code examples comparable to other languages for reference. <li>
<a href="http://nim-by-example.github.io">Nim by Example</a><br>
- | `Nim for C/C++ Programmers <https://github.com/Araq/Nim/wiki/Nim-for-C-programmers>`_ <p>Nim by Example is an excellent starting place for beginners.</p>
| A useful cheat-sheet for those most familiar with C/C++ languages. </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 .. container:: standout
@ -33,8 +48,21 @@ Learning Nim
Articles Articles
-------- --------
- `Dr Dobbs Nimrod Publication <http://www.drdobbs.com/open-source/nimrod-a-new-systems-programming-languag/240165321>`_ .. raw:: html
- `Bootstrapping Nim <http://goran.krampe.se/2014/10/15/bootstrapping-nim/>`_
<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 Documentation