Iosevka/index.html
2015-11-07 02:12:08 +08:00

374 lines
38 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html>
<head>
<meta charset="utf-8">
<title>Iosevka</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.2.3/css/simple-line-icons.min.css" rel="stylesheet">
<style> @import url(homepage.css); </style>
<script src="https://cdn.bootcss.com/zepto/1.1.6/zepto.min.js"></script>
<script>if (!window.Zepto) document.write('<script src="zepto.min.js">\x3C/script>')</script>
</head>
<body>
<section id="introduction">
<h1>Iosevka</h1>
<div id="downlinks">
<a href="https://github.com/be5invis/Iosevka/releases/latest"><icon class="icon-cloud-download"></icon>Download Iosevka<span>1.0-beta4 “Yamanashi”</span></a>
<a href="specimen.html"><icon class="icon-book-open"></icon>View Specimen<span>All characters & styles</span></a>
</div>
</section>
<section id="descriptions">
<ul class="col">
<li><h2>Concept</h2>
<p>Iosevka is a slender monospace typeface inspired by <a href="http://www.fsd.it/fonts/pragmatapro.htm">Pragmata Pro</a>, <a href="http://mplus-fonts.osdn.jp/">M+</a> and <a href="http://www.parachute.gr/typefaces/allfonts/din-mono-pro">PF DIN Mono</a>, designed to be the ideal font for programming.</p>
</li>
<li><h2>Features</h2>
<p>Slender and distinguishable glyphs with serious geometry. Powerful world language support. Fully hinted for screen display.</p>
</li>
<li><h2>Open Source</h2>
<p>Iosevka is completely generated from its <a href="https://github.com/be5invis/Iosevka">source code</a>. You can build your own variant by adjusting its <a href="https://github.com/be5invis/Iosevka/blob/master/parameters.toml">parameters</a>.</p>
</li>
</ul>
<ul class="col">
<li><h2>Support</h2>
<p>Iosevka comes in regular, bold, italic and bold-italic with over 2000 latin, greek, cyrillic, phonetic and PowerLine glyphs. A IosevkaCC variant is also provided, with several symbols enwiden, to be compatible with most CJK typefaces.</p>
</li>
<li><h2>Readme</h2>
<p>The instructions, building procedure, and other informations can be found in <a href="https://github.com/be5invis/Iosevka/blob/master/README.md">its readme</a>.</p>
</li>
<li><h2>Preview</h2>
<p><span id="themes-holder" class="options"></span>| <span id="samples-holder" class="options"></span></p>
</li>
</ul>
</section>
<section id="preview">
<pre id="javascript"><code class="javascript hljs"><span class="hljs-keyword">var</span> languages = [
{lang: <span class="hljs-string">'English'</span>, sample: <span class="hljs-string">'Shaw, those twelve beige hooks are joined if I patch a young, gooey mouth.'</span>},
{lang: <span class="hljs-string">'IPA'</span>, sample: <span class="hljs-string">'[ɢʷɯʔ.nas.doːŋ.kʰlja] [ŋan.ȵʑi̯wo.ɕi̯uĕn.ɣwa]'</span>},
{lang: <span class="hljs-string">'Bulgarian'</span>, sample: <span class="hljs-string">'Я, пазачът Вальо уж бди, а скришом хапва кюфтенца зад щайгите.'</span>},
{lang: <span class="hljs-string">'Czech'</span>, sample: <span class="hljs-string">'Nechť již hříšné saxofony ďáblů rozezvučí síň úděsnými tóny waltzu, tanga a quickstepu.'</span>},
{lang: <span class="hljs-string">'Finnish'</span>, sample: <span class="hljs-string">'Charles Darwin jammaili Åken hevixylofonilla Qatarin yöpub Zeligissä.'</span>},
{lang: <span class="hljs-string">'French'</span>, sample: <span class="hljs-string">'Voix ambiguë dun cœur qui au zéphyr préfère les jattes de kiwi.'</span>},
{lang: <span class="hljs-string">'German'</span>, sample: <span class="hljs-string">'Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich.'</span>},
{lang: <span class="hljs-string">'Greek'</span>, sample: <span class="hljs-string">'Ταχίστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός.'</span>},
{lang: <span class="hljs-string">'Ancient Greek'</span>, sample: <span class="hljs-string">'Ἄδμηθ’, ὁρᾷς γὰρ τἀμὰ πράγμαθ’ ὡς ἔχει, λέξαι θέλω σοι πρὶν θανεῖν ἃ βούλομαι. '</span>},
{lang: <span class="hljs-string">'Hungarian'</span>, sample: <span class="hljs-string">'Jó foxim és don Quijote húszwattos lámpánál ülve egy pár bűvös cipőt készít.'</span>},
{lang: <span class="hljs-string">'Icelandic'</span>, sample: <span class="hljs-string">'Kæmi ný öxi hér, ykist þjófum nú bæði víl og ádrepa.'</span>},
{lang: <span class="hljs-string">'Irish'</span>, sample: <span class="hljs-string">'Ċuaiġ bé ṁórṡáċ le dlúṫspád fíorḟinn trí hata mo ḋea-ṗorcáin ḃig.'</span>},
{lang: <span class="hljs-string">'Latvian'</span>, sample: <span class="hljs-string">'Muļķa hipiji mēģina brīvi nogaršot celofāna žņaudzējčūsku.'</span>},
{lang: <span class="hljs-string">'Lithuanian'</span>, sample: <span class="hljs-string">'Įlinkdama fechtuotojo špaga sublykčiojusi pragręžė apvalų arbūzą.'</span>},
{lang: <span class="hljs-string">'Macedonian'</span>, sample: <span class="hljs-string">'Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех.'</span>},
{lang: <span class="hljs-string">'Norwegian'</span>, sample: <span class="hljs-string">'Jeg begynte å fortære en sandwich mens jeg kjørte taxi på vei til quiz'</span>},
{lang: <span class="hljs-string">'Polish'</span>, sample: <span class="hljs-string">'Pchnąć w tę łódź jeża lub ośm skrzyń fig.'</span>},
{lang: <span class="hljs-string">'Portuguese'</span>, sample: <span class="hljs-string">'Luís argüia à Júlia que «brações, fé, chá, óxido, pôr, zângão» eram palavras do português.'</span>},
{lang: <span class="hljs-string">'Romanian'</span>, sample: <span class="hljs-string">'Înjurând pițigăiat, zoofobul comandă vexat whisky și tequila.'</span>},
{lang: <span class="hljs-string">'Russian'</span>, sample: <span class="hljs-string">'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства.'</span>},
{lang: <span class="hljs-string">'Serbian'</span>, sample: <span class="hljs-string" lang="sr">'Ајшо, лепото и чежњо, за љубав срца мога дођи у Хаџиће на кафу.'</span>},
{lang: <span class="hljs-string">'Spanish'</span>, sample: <span class="hljs-string">'Benjamín pidió una bebida de kiwi y fresa; Noé, sin vergüenza, la más exquisita champaña del menú.'</span>},
{lang: <span class="hljs-string">'Turkish'</span>, sample: <span class="hljs-string">'Pijamalı hasta yağız şoföre çabucak güvendi.'</span>},
{lang: <span class="hljs-string">'Ukrainian'</span>, sample: <span class="hljs-string">'Чуєш їх, доцю, га? Кумедна ж ти, прощайся без ґольфів!'</span>}
]
</code></pre>
<pre id="cpp"><code class="cpp hljs">
<span class="hljs-preprocessor">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;math.h&gt;</span> // smallpt, a Path Tracer by Kevin Beason, 2008 </span>
<span class="hljs-preprocessor">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;stdlib.h&gt;</span> // Make : g++ -O3 -fopenmp smallpt.cpp -o smallpt </span>
<span class="hljs-preprocessor">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;stdio.h&gt;</span> // </span>
<span class="hljs-keyword">struct</span> Vec { <span class="hljs-comment">// Usage: time ./smallpt 5000 &amp;&amp; xv image.ppm </span>
<span class="hljs-keyword">double</span> x, y, z; <span class="hljs-comment">// position, also color (r,g,b) </span>
Vec(<span class="hljs-keyword">double</span> x_=<span class="hljs-number">0</span>, <span class="hljs-keyword">double</span> y_=<span class="hljs-number">0</span>, <span class="hljs-keyword">double</span> z_=<span class="hljs-number">0</span>){ x=x_; y=y_; z=z_; }
Vec <span class="hljs-keyword">operator</span>+(<span class="hljs-keyword">const</span> Vec &amp;b) <span class="hljs-keyword">const</span> { <span class="hljs-keyword">return</span> Vec(x+b.x,y+b.y,z+b.z); }
Vec <span class="hljs-keyword">operator</span>-(<span class="hljs-keyword">const</span> Vec &amp;b) <span class="hljs-keyword">const</span> { <span class="hljs-keyword">return</span> Vec(x-b.x,y-b.y,z-b.z); }
Vec <span class="hljs-keyword">operator</span>*(<span class="hljs-keyword">double</span> b) <span class="hljs-keyword">const</span> { <span class="hljs-keyword">return</span> Vec(x*b,y*b,z*b); }
<span class="hljs-function">Vec <span class="hljs-title">mult</span><span class="hljs-params">(<span class="hljs-keyword">const</span> Vec &amp;b)</span> <span class="hljs-keyword">const</span> </span>{ <span class="hljs-keyword">return</span> Vec(x*b.x,y*b.y,z*b.z); }
<span class="hljs-function">Vec&amp; <span class="hljs-title">norm</span><span class="hljs-params">()</span></span>{ <span class="hljs-keyword">return</span> *<span class="hljs-keyword">this</span> = *<span class="hljs-keyword">this</span> * (<span class="hljs-number">1</span>/<span class="hljs-built_in">sqrt</span>(x*x+y*y+z*z)); }
<span class="hljs-function"><span class="hljs-keyword">double</span> <span class="hljs-title">dot</span><span class="hljs-params">(<span class="hljs-keyword">const</span> Vec &amp;b)</span> <span class="hljs-keyword">const</span> </span>{ <span class="hljs-keyword">return</span> x*b.x+y*b.y+z*b.z; } <span class="hljs-comment">// cross: </span>
Vec <span class="hljs-keyword">operator</span>%(Vec&amp;b){<span class="hljs-keyword">return</span> Vec(y*b.z-z*b.y,z*b.x-x*b.z,x*b.y-y*b.x);}
};
<span class="hljs-keyword">struct</span> Ray { Vec o, d; Ray(Vec o_, Vec d_) : o(o_), d(d_) {} };
<span class="hljs-keyword">enum</span> Refl_t { DIFF, SPEC, REFR }; <span class="hljs-comment">// material types, used in radiance() </span>
<span class="hljs-keyword">struct</span> Sphere {
<span class="hljs-keyword">double</span> rad; <span class="hljs-comment">// radius </span>
Vec p, e, c; <span class="hljs-comment">// position, emission, color </span>
Refl_t refl; <span class="hljs-comment">// reflection type (DIFFuse, SPECular, REFRactive) </span>
Sphere(<span class="hljs-keyword">double</span> rad_, Vec p_, Vec e_, Vec c_, Refl_t refl_):
rad(rad_), p(p_), e(e_), c(c_), refl(refl_) {}
<span class="hljs-function"><span class="hljs-keyword">double</span> <span class="hljs-title">intersect</span><span class="hljs-params">(<span class="hljs-keyword">const</span> Ray &amp;r)</span> <span class="hljs-keyword">const</span> </span>{ <span class="hljs-comment">// returns distance, 0 if nohit </span>
Vec op = p-r.o; <span class="hljs-comment">// Solve t^2*d.d + 2*t*(o-p).d + (o-p).(o-p)-R^2 = 0 </span>
<span class="hljs-keyword">double</span> t, eps=<span class="hljs-number">1e-4</span>, b=op.dot(r.d), det=b*b-op.dot(op)+rad*rad;
<span class="hljs-keyword">if</span> (det&lt;<span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>; <span class="hljs-keyword">else</span> det=<span class="hljs-built_in">sqrt</span>(det);
<span class="hljs-keyword">return</span> (t=b-det)&gt;eps ? t : ((t=b+det)&gt;eps ? t : <span class="hljs-number">0</span>);
}
};
Sphere spheres[] = {<span class="hljs-comment">//Scene: radius, position, emission, color, material </span>
Sphere(<span class="hljs-number">1e5</span>, Vec( <span class="hljs-number">1e5</span>+<span class="hljs-number">1</span>,<span class="hljs-number">40.8</span>,<span class="hljs-number">81.6</span>), Vec(),Vec(<span class="hljs-number">.75</span>,<span class="hljs-number">.25</span>,<span class="hljs-number">.25</span>),DIFF),<span class="hljs-comment">//Left </span>
Sphere(<span class="hljs-number">1e5</span>, Vec(-<span class="hljs-number">1e5</span>+<span class="hljs-number">99</span>,<span class="hljs-number">40.8</span>,<span class="hljs-number">81.6</span>),Vec(),Vec(<span class="hljs-number">.25</span>,<span class="hljs-number">.25</span>,<span class="hljs-number">.75</span>),DIFF),<span class="hljs-comment">//Rght </span>
Sphere(<span class="hljs-number">1e5</span>, Vec(<span class="hljs-number">50</span>,<span class="hljs-number">40.8</span>, <span class="hljs-number">1e5</span>), Vec(),Vec(<span class="hljs-number">.75</span>,<span class="hljs-number">.75</span>,<span class="hljs-number">.75</span>),DIFF),<span class="hljs-comment">//Back </span>
Sphere(<span class="hljs-number">1e5</span>, Vec(<span class="hljs-number">50</span>,<span class="hljs-number">40.8</span>,-<span class="hljs-number">1e5</span>+<span class="hljs-number">170</span>), Vec(),Vec(), DIFF),<span class="hljs-comment">//Frnt </span>
Sphere(<span class="hljs-number">1e5</span>, Vec(<span class="hljs-number">50</span>, <span class="hljs-number">1e5</span>, <span class="hljs-number">81.6</span>), Vec(),Vec(<span class="hljs-number">.75</span>,<span class="hljs-number">.75</span>,<span class="hljs-number">.75</span>),DIFF),<span class="hljs-comment">//Botm </span>
Sphere(<span class="hljs-number">1e5</span>, Vec(<span class="hljs-number">50</span>,-<span class="hljs-number">1e5</span>+<span class="hljs-number">81.6</span>,<span class="hljs-number">81.6</span>),Vec(),Vec(<span class="hljs-number">.75</span>,<span class="hljs-number">.75</span>,<span class="hljs-number">.75</span>),DIFF),<span class="hljs-comment">//Top </span>
Sphere(<span class="hljs-number">16.5</span>,Vec(<span class="hljs-number">27</span>,<span class="hljs-number">16.5</span>,<span class="hljs-number">47</span>), Vec(),Vec(<span class="hljs-number">1</span>,<span class="hljs-number">1</span>,<span class="hljs-number">1</span>)*<span class="hljs-number">.999</span>, SPEC),<span class="hljs-comment">//Mirr </span>
Sphere(<span class="hljs-number">16.5</span>,Vec(<span class="hljs-number">73</span>,<span class="hljs-number">16.5</span>,<span class="hljs-number">78</span>), Vec(),Vec(<span class="hljs-number">1</span>,<span class="hljs-number">1</span>,<span class="hljs-number">1</span>)*<span class="hljs-number">.999</span>, REFR),<span class="hljs-comment">//Glas </span>
Sphere(<span class="hljs-number">600</span>, Vec(<span class="hljs-number">50</span>,<span class="hljs-number">681.6</span>-<span class="hljs-number">.27</span>,<span class="hljs-number">81.6</span>),Vec(<span class="hljs-number">12</span>,<span class="hljs-number">12</span>,<span class="hljs-number">12</span>), Vec(), DIFF) <span class="hljs-comment">//Lite </span>
};
<span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-keyword">double</span> <span class="hljs-title">clamp</span><span class="hljs-params">(<span class="hljs-keyword">double</span> x)</span></span>{ <span class="hljs-keyword">return</span> x&lt;<span class="hljs-number">0</span> ? <span class="hljs-number">0</span> : x&gt;<span class="hljs-number">1</span> ? <span class="hljs-number">1</span> : x; }
<span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-keyword">int</span> <span class="hljs-title">toInt</span><span class="hljs-params">(<span class="hljs-keyword">double</span> x)</span></span>{ <span class="hljs-keyword">return</span> <span class="hljs-keyword">int</span>(<span class="hljs-built_in">pow</span>(clamp(x),<span class="hljs-number">1</span>/<span class="hljs-number">2.2</span>)*<span class="hljs-number">255</span>+<span class="hljs-number">.5</span>); }
<span class="hljs-function"><span class="hljs-keyword">inline</span> <span class="hljs-keyword">bool</span> <span class="hljs-title">intersect</span><span class="hljs-params">(<span class="hljs-keyword">const</span> Ray &amp;r, <span class="hljs-keyword">double</span> &amp;t, <span class="hljs-keyword">int</span> &amp;id)</span></span>{
<span class="hljs-keyword">double</span> n=<span class="hljs-keyword">sizeof</span>(spheres)/<span class="hljs-keyword">sizeof</span>(Sphere), d, inf=t=<span class="hljs-number">1e20</span>;
<span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i=<span class="hljs-keyword">int</span>(n);i--;) <span class="hljs-keyword">if</span>((d=spheres[i].intersect(r))&amp;&amp;d&lt;t){t=d;id=i;}
<span class="hljs-keyword">return</span> t&lt;inf;
}
<span class="hljs-function">Vec <span class="hljs-title">radiance</span><span class="hljs-params">(<span class="hljs-keyword">const</span> Ray &amp;r, <span class="hljs-keyword">int</span> depth, <span class="hljs-keyword">unsigned</span> <span class="hljs-keyword">short</span> *Xi)</span></span>{
<span class="hljs-keyword">double</span> t; <span class="hljs-comment">// distance to intersection </span>
<span class="hljs-keyword">int</span> id=<span class="hljs-number">0</span>; <span class="hljs-comment">// id of intersected object </span>
<span class="hljs-keyword">if</span> (!intersect(r, t, id)) <span class="hljs-keyword">return</span> Vec(); <span class="hljs-comment">// if miss, return black </span>
<span class="hljs-keyword">const</span> Sphere &amp;obj = spheres[id]; <span class="hljs-comment">// the hit object </span>
Vec x=r.o+r.d*t, n=(x-obj.p).norm(), nl=n.dot(r.d)&lt;<span class="hljs-number">0</span>?n:n*-<span class="hljs-number">1</span>, f=obj.c;
<span class="hljs-keyword">double</span> p = f.x&gt;f.y &amp;&amp; f.x&gt;f.z ? f.x : f.y&gt;f.z ? f.y : f.z; <span class="hljs-comment">// max refl </span>
<span class="hljs-keyword">if</span> (++depth&gt;<span class="hljs-number">5</span>) <span class="hljs-keyword">if</span> (erand48(Xi)&lt;p) f=f*(<span class="hljs-number">1</span>/p); <span class="hljs-keyword">else</span> <span class="hljs-keyword">return</span> obj.e; <span class="hljs-comment">//R.R. </span>
<span class="hljs-keyword">if</span> (obj.refl == DIFF){ <span class="hljs-comment">// Ideal DIFFUSE reflection </span>
<span class="hljs-keyword">double</span> r1=<span class="hljs-number">2</span>*<span class="hljs-function">M_PI*<span class="hljs-title">erand48</span><span class="hljs-params">(Xi)</span>, r2</span>=erand48(Xi), r2s=<span class="hljs-built_in">sqrt</span>(r2);
Vec w=nl, u=((<span class="hljs-built_in">fabs</span>(w.x)&gt;<span class="hljs-number">.1</span>?Vec(<span class="hljs-number">0</span>,<span class="hljs-number">1</span>):Vec(<span class="hljs-number">1</span>))%w).norm(), v=w%u;
Vec d = (<span class="hljs-function">u*<span class="hljs-title">cos</span><span class="hljs-params">(r1)</span>*r2s + v*<span class="hljs-title">sin</span><span class="hljs-params">(r1)</span>*r2s + w*<span class="hljs-title">sqrt</span><span class="hljs-params">(<span class="hljs-number">1</span>-r2)</span>).<span class="hljs-title">norm</span><span class="hljs-params">()</span></span>;
<span class="hljs-keyword">return</span> obj.e + f.mult(radiance(Ray(x,d),depth,Xi));
} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (obj.refl == SPEC) <span class="hljs-comment">// Ideal SPECULAR reflection </span>
<span class="hljs-keyword">return</span> obj.e + f.mult(radiance(Ray(x,r.d-n*<span class="hljs-number">2</span>*n.dot(r.d)),depth,Xi));
<span class="hljs-function">Ray <span class="hljs-title">reflRay</span><span class="hljs-params">(x, r.d-n*<span class="hljs-number">2</span>*n.dot(r.d)</span>)</span>; <span class="hljs-comment">// Ideal dielectric REFRACTION </span>
<span class="hljs-keyword">bool</span> into = n.dot(nl)&gt;<span class="hljs-number">0</span>; <span class="hljs-comment">// Ray from outside going in? </span>
<span class="hljs-keyword">double</span> nc=<span class="hljs-number">1</span>, nt=<span class="hljs-number">1.5</span>, nnt=into?nc/nt:nt/nc, ddn=r.d.dot(nl), cos2t;
<span class="hljs-keyword">if</span> ((cos2t=<span class="hljs-number">1</span>-nnt*nnt*(<span class="hljs-number">1</span>-ddn*ddn))&lt;<span class="hljs-number">0</span>) <span class="hljs-comment">// Total internal reflection </span>
<span class="hljs-keyword">return</span> obj.e + f.mult(radiance(reflRay,depth,Xi));
Vec tdir = (r.d*nnt - n*((into?<span class="hljs-number">1</span>:-<span class="hljs-number">1</span>)*(ddn*nnt+<span class="hljs-built_in">sqrt</span>(cos2t)))).norm();
<span class="hljs-keyword">double</span> a=nt-nc, b=nt+nc, R0=a*a/(b*b), c = <span class="hljs-number">1</span>-(into?-ddn:tdir.dot(n));
<span class="hljs-keyword">double</span> Re=R0+(<span class="hljs-number">1</span>-R0)*c*c*c*c*c,Tr=<span class="hljs-number">1</span>-Re,P=<span class="hljs-number">.25</span>+<span class="hljs-number">.5</span>*Re,RP=Re/P,TP=Tr/(<span class="hljs-number">1</span>-P);
<span class="hljs-keyword">return</span> obj.e + f.mult(depth&gt;<span class="hljs-number">2</span> ? (erand48(Xi)&lt;P ? <span class="hljs-comment">// Russian roulette </span>
radiance(reflRay,depth,Xi)*RP:radiance(Ray(x,tdir),depth,Xi)*TP) :
radiance(reflRay,depth,Xi)*Re+radiance(Ray(x,tdir),depth,Xi)*Tr);
}
<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">(<span class="hljs-keyword">int</span> argc, <span class="hljs-keyword">char</span> *argv[])</span></span>{
<span class="hljs-keyword">int</span> w=<span class="hljs-number">1024</span>, h=<span class="hljs-number">768</span>, samps = argc==<span class="hljs-number">2</span> ? atoi(argv[<span class="hljs-number">1</span>])/<span class="hljs-number">4</span> : <span class="hljs-number">1</span>; <span class="hljs-comment">// # samples </span>
<span class="hljs-function">Ray <span class="hljs-title">cam</span><span class="hljs-params">(Vec(<span class="hljs-number">50</span>,<span class="hljs-number">52</span>,<span class="hljs-number">295.6</span>)</span>, <span class="hljs-title">Vec</span><span class="hljs-params">(<span class="hljs-number">0</span>,-<span class="hljs-number">0.042612</span>,-<span class="hljs-number">1</span>)</span>.<span class="hljs-title">norm</span><span class="hljs-params">()</span>)</span>; <span class="hljs-comment">// cam pos, dir </span>
Vec cx=Vec(w*<span class="hljs-number">.5135</span>/h), cy=(cx%cam.d).norm()*<span class="hljs-number">.5135</span>, r, *c=<span class="hljs-keyword">new</span> Vec[w*h];
<span class="hljs-preprocessor">#<span class="hljs-keyword">pragma</span> omp parallel for schedule(dynamic, <span class="hljs-number">1</span>) private(r) <span class="hljs-comment">// OpenMP </span></span>
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> y=<span class="hljs-number">0</span>; y&lt;h; y++){ <span class="hljs-comment">// Loop over image rows </span>
<span class="hljs-built_in">fprintf</span>(<span class="hljs-built_in">stderr</span>,<span class="hljs-string">"\rRendering (%d spp) %5.2f%%"</span>,samps*<span class="hljs-number">4</span>,<span class="hljs-number">100.</span>*y/(h-<span class="hljs-number">1</span>));
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">unsigned</span> <span class="hljs-keyword">short</span> x=<span class="hljs-number">0</span>, Xi[<span class="hljs-number">3</span>]={<span class="hljs-number">0</span>,<span class="hljs-number">0</span>,y*y*y}; x&lt;w; x++) <span class="hljs-comment">// Loop cols </span>
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> sy=<span class="hljs-number">0</span>, i=(h-y-<span class="hljs-number">1</span>)*w+x; sy&lt;<span class="hljs-number">2</span>; sy++) <span class="hljs-comment">// 2x2 subpixel rows </span>
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> sx=<span class="hljs-number">0</span>; sx&lt;<span class="hljs-number">2</span>; sx++, r=Vec()){ <span class="hljs-comment">// 2x2 subpixel cols </span>
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> s=<span class="hljs-number">0</span>; s&lt;samps; s++){
<span class="hljs-keyword">double</span> r1=<span class="hljs-number">2</span>*erand48(Xi), dx=r1&lt;<span class="hljs-number">1</span> ? <span class="hljs-built_in">sqrt</span>(r1)-<span class="hljs-number">1</span>: <span class="hljs-number">1</span>-<span class="hljs-built_in">sqrt</span>(<span class="hljs-number">2</span>-r1);
<span class="hljs-keyword">double</span> r2=<span class="hljs-number">2</span>*erand48(Xi), dy=r2&lt;<span class="hljs-number">1</span> ? <span class="hljs-built_in">sqrt</span>(r2)-<span class="hljs-number">1</span>: <span class="hljs-number">1</span>-<span class="hljs-built_in">sqrt</span>(<span class="hljs-number">2</span>-r2);
Vec d = cx*( ( (sx+<span class="hljs-number">.5</span> + dx)/<span class="hljs-number">2</span> + x)/w - <span class="hljs-number">.5</span>) +
cy*( ( (sy+<span class="hljs-number">.5</span> + dy)/<span class="hljs-number">2</span> + y)/h - <span class="hljs-number">.5</span>) + cam.d;
r = r + radiance(Ray(cam.o+d*<span class="hljs-number">140</span>,d.norm()),<span class="hljs-number">0</span>,Xi)*(<span class="hljs-number">1.</span>/samps);
} <span class="hljs-comment">// Camera rays are pushed ^^^^^ forward to start in interior </span>
c[i] = c[i] + Vec(clamp(r.x),clamp(r.y),clamp(r.z))*<span class="hljs-number">.25</span>;
}
}
FILE *f = fopen(<span class="hljs-string">"image.ppm"</span>, <span class="hljs-string">"w"</span>); <span class="hljs-comment">// Write image to PPM file. </span>
<span class="hljs-built_in">fprintf</span>(f, <span class="hljs-string">"P3\n%d %d\n%d\n"</span>, w, h, <span class="hljs-number">255</span>);
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>; i&lt;w*h; i++)
<span class="hljs-built_in">fprintf</span>(f,<span class="hljs-string">"%d %d %d "</span>, toInt(c[i].x), toInt(c[i].y), toInt(c[i].z));
} </code></pre>
<pre id="less"><code class="less hljs"><span class="hljs-comment">// Bootstrap</span>
<span class="hljs-comment">// Buttons</span>
<span class="hljs-comment">// --------------------------------------------------</span>
<span class="hljs-comment">// Base styles</span>
<span class="hljs-comment">// --------------------------------------------------</span>
<span class="hljs-class">.btn</span> {
<span class="hljs-attribute">display</span>: inline-block;
<span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">0</span>; <span class="hljs-comment">// For input.btn</span>
<span class="hljs-attribute">font-weight</span>: <span class="hljs-variable">@btn-font-weight</span>;
<span class="hljs-attribute">text-align</span>: center;
<span class="hljs-attribute">vertical-align</span>: middle;
<span class="hljs-attribute">touch-action</span>: manipulation;
<span class="hljs-attribute">cursor</span>: pointer;
<span class="hljs-attribute">background-image</span>: none; <span class="hljs-comment">// Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214</span>
<span class="hljs-attribute">border</span>: <span class="hljs-number">1px</span> solid transparent;
<span class="hljs-attribute">white-space</span>: nowrap;
<span class="hljs-class">.button-size</span>(<span class="hljs-variable">@padding-base-vertical</span>; <span class="hljs-variable">@padding-base-horizontal</span>; <span class="hljs-variable">@font-size-base</span>; <span class="hljs-variable">@line-height-base</span>; <span class="hljs-variable">@border-radius-base</span>);
<span class="hljs-class">.user-select</span>(none);
<span class="hljs-keyword">&amp;</span>,
<span class="hljs-keyword">&amp;</span><span class="hljs-pseudo">:active</span>,
<span class="hljs-keyword">&amp;</span><span class="hljs-class">.active</span> {
<span class="hljs-keyword">&amp;</span><span class="hljs-pseudo">:focus</span>,
<span class="hljs-keyword">&amp;</span><span class="hljs-class">.focus</span> {
<span class="hljs-class">.tab-focus</span>();
}
}
<span class="hljs-keyword">&amp;</span><span class="hljs-pseudo">:hover</span>,
<span class="hljs-keyword">&amp;</span><span class="hljs-pseudo">:focus</span>,
<span class="hljs-keyword">&amp;</span><span class="hljs-class">.focus</span> {
<span class="hljs-attribute">color</span>: <span class="hljs-variable">@btn-default-color</span>;
<span class="hljs-attribute">text-decoration</span>: none;
}
<span class="hljs-keyword">&amp;</span><span class="hljs-pseudo">:active</span>,
<span class="hljs-keyword">&amp;</span><span class="hljs-class">.active</span> {
<span class="hljs-attribute">outline</span>: <span class="hljs-number">0</span>;
<span class="hljs-attribute">background-image</span>: none;
<span class="hljs-class">.box-shadow</span>(inset <span class="hljs-number">0</span> <span class="hljs-number">3px</span> <span class="hljs-number">5px</span> <span class="hljs-function">rgba</span>(<span class="hljs-number">0</span>,<span class="hljs-number">0</span>,<span class="hljs-number">0</span>,.<span class="hljs-number">125</span>));
}
<span class="hljs-keyword">&amp;</span><span class="hljs-class">.disabled</span>,
<span class="hljs-keyword">&amp;</span><span class="hljs-attr_selector">[disabled]</span>,
<span class="hljs-tag">fieldset</span><span class="hljs-attr_selector">[disabled]</span> <span class="hljs-keyword">&amp;</span> {
<span class="hljs-attribute">cursor</span>: <span class="hljs-variable">@cursor-disabled</span>;
<span class="hljs-class">.opacity</span>(.<span class="hljs-number">65</span>);
<span class="hljs-class">.box-shadow</span>(none);
}
<span class="hljs-tag">a</span><span class="hljs-keyword">&amp;</span> {
<span class="hljs-keyword">&amp;</span><span class="hljs-class">.disabled</span>,
<span class="hljs-tag">fieldset</span><span class="hljs-attr_selector">[disabled]</span> <span class="hljs-keyword">&amp;</span> {
<span class="hljs-attribute">pointer-events</span>: none; <span class="hljs-comment">// Future-proof disabling of clicks on `&lt;a&gt;` elements</span>
}
}
}
<span class="hljs-comment">// Alternate buttons</span>
<span class="hljs-comment">// --------------------------------------------------</span>
<span class="hljs-class">.btn-default</span> {
<span class="hljs-class">.button-variant</span>(<span class="hljs-variable">@btn-default-color</span>; <span class="hljs-variable">@btn-default-bg</span>; <span class="hljs-variable">@btn-default-border</span>);
}
<span class="hljs-class">.btn-primary</span> {
<span class="hljs-class">.button-variant</span>(<span class="hljs-variable">@btn-primary-color</span>; <span class="hljs-variable">@btn-primary-bg</span>; <span class="hljs-variable">@btn-primary-border</span>);
}
<span class="hljs-comment">// Success appears as green</span>
<span class="hljs-class">.btn-success</span> {
<span class="hljs-class">.button-variant</span>(<span class="hljs-variable">@btn-success-color</span>; <span class="hljs-variable">@btn-success-bg</span>; <span class="hljs-variable">@btn-success-border</span>);
}
<span class="hljs-comment">// Info appears as blue-green</span>
<span class="hljs-class">.btn-info</span> {
<span class="hljs-class">.button-variant</span>(<span class="hljs-variable">@btn-info-color</span>; <span class="hljs-variable">@btn-info-bg</span>; <span class="hljs-variable">@btn-info-border</span>);
}
<span class="hljs-comment">// Warning appears as orange</span>
<span class="hljs-class">.btn-warning</span> {
<span class="hljs-class">.button-variant</span>(<span class="hljs-variable">@btn-warning-color</span>; <span class="hljs-variable">@btn-warning-bg</span>; <span class="hljs-variable">@btn-warning-border</span>);
}
<span class="hljs-comment">// Danger and error appear as red</span>
<span class="hljs-class">.btn-danger</span> {
<span class="hljs-class">.button-variant</span>(<span class="hljs-variable">@btn-danger-color</span>; <span class="hljs-variable">@btn-danger-bg</span>; <span class="hljs-variable">@btn-danger-border</span>);
}</code></pre>
<pre id="python"><code class="python hljs"><span class="hljs-comment"># Curio, https://github.com/dabeaz/curio/blob/master/curio/network.py</span>
<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">open_connection</span><span class="hljs-params">(host, port, *, ssl=None, source_addr=None, server_hostname=None, timeout=None)</span>:</span>
<span class="hljs-string">'''
Create a TCP connection to a given Internet host and port with optional SSL applied to it.
'''</span>
<span class="hljs-keyword">if</span> server_hostname <span class="hljs-keyword">and</span> <span class="hljs-keyword">not</span> ssl:
<span class="hljs-keyword">raise</span> ValueError(<span class="hljs-string">'server_hostname is only applicable with SSL'</span>)
sock = <span class="hljs-keyword">await</span> socket.create_connection((host,port), timeout, source_addr)
<span class="hljs-keyword">try</span>:
<span class="hljs-comment"># Apply SSL wrapping to the connection, if applicable</span>
<span class="hljs-keyword">if</span> ssl:
sock = <span class="hljs-keyword">await</span> _wrap_ssl_client(sock, ssl, server_hostname)
<span class="hljs-keyword">return</span> sock
<span class="hljs-keyword">except</span> Exception:
sock._socket.close()
<span class="hljs-keyword">raise</span>
<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">open_unix_connection</span><span class="hljs-params">(path, *, ssl=None, server_hostname=None)</span>:</span>
<span class="hljs-keyword">if</span> server_hostname <span class="hljs-keyword">and</span> <span class="hljs-keyword">not</span> ssl:
<span class="hljs-keyword">raise</span> ValueError(<span class="hljs-string">'server_hostname is only applicable with SSL'</span>)
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
<span class="hljs-keyword">try</span>:
<span class="hljs-keyword">await</span> sock.connect(path)
<span class="hljs-comment"># Apply SSL wrapping to connection, if applicable</span>
<span class="hljs-keyword">if</span> ssl:
sock = <span class="hljs-keyword">await</span> _wrap_ssl_client(sock, ssl, server_hostname)
<span class="hljs-keyword">return</span> sock
<span class="hljs-keyword">except</span> Exception:
sock._socket.close()
<span class="hljs-keyword">raise</span>
</code></pre>
<pre id="elixir"><code class="elixiar hljs ruby"><span class="hljs-comment"># Phoenix, https://github.com/phoenixframework/phoenix/blob/master/lib/phoenix.ex</span>
defmodule <span class="hljs-constant">Phoenix</span> <span class="hljs-keyword">do</span>
<span class="hljs-variable">@moduledoc</span> <span class="hljs-string">""</span><span class="hljs-string">"
This is documentation for the Phoenix project.
By default, Phoenix applications depend on other packages besides
Phoenix itself. Below we provide a short explanation with links to
their documentation for each of those projects:
* [Ecto](http://hexdocs.pm/ecto) - a language integrated query and
database wrapper
* [Phoenix](http://hexdocs.pm/phoenix) - the Phoenix web framework
(these docs)
* [Phoenix HTML](http://hexdocs.pm/phoenix_html) - conveniences for
working with HTML in Phoenix
* [Plug](http://hexdocs.pm/plug) - a specification and conveniences
for composable modules in between web applications
There are also optional packages depending on your configuration:
* [Phoenix PubSub Redis](http://hexdocs.pm/phoenix_pubsub_redis) - use
Redis to power Phoenix PubSub system
"</span><span class="hljs-string">""</span>
use <span class="hljs-constant">Application</span>
<span class="hljs-variable">@doc</span> <span class="hljs-keyword">false</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">start</span><span class="hljs-params">(_type, _args)</span> <span class="hljs-title">do</span></span>
<span class="hljs-comment"># Warm up caches</span>
<span class="hljs-number">_</span> = <span class="hljs-constant">Phoenix</span>.<span class="hljs-constant">Template</span>.engines
<span class="hljs-number">_</span> = <span class="hljs-constant">Phoenix</span>.<span class="hljs-constant">Template</span>.format_encoder(<span class="hljs-string">"index.html"</span>)
<span class="hljs-comment"># Configure proper system flags from Phoenix only</span>
<span class="hljs-keyword">if</span> stacktrace_depth = <span class="hljs-constant">Application</span>.get_env(<span class="hljs-symbol">:phoenix</span>, <span class="hljs-symbol">:stacktrace_depth</span>) <span class="hljs-keyword">do</span>
<span class="hljs-symbol">:erlang</span>.system_flag(<span class="hljs-symbol">:backtrace_depth</span>, stacktrace_depth)
<span class="hljs-keyword">end</span>
<span class="hljs-comment"># Start the supervision tree</span>
<span class="hljs-constant">Phoenix</span>.<span class="hljs-constant">Supervisor</span>.start_link
<span class="hljs-keyword">end</span>
<span class="hljs-keyword">end</span>
</code></pre>
</section>
<script>
var blocks = $('pre');
var fn;
blocks.forEach(function(b){
var name = b.id;
var a = $('<a>');
a.html(name);
a.attr('href', '#');
var handler = function(){
blocks.hide();
$(b).show();
$('#samples-holder > a').removeClass('active');
a.addClass('active');
return false;
}
if(!fn) fn = handler;
a.on('click', handler);
$('#samples-holder').append(a);
});
fn();
var ft;
['dark', 'light'].forEach(function(theme){
var a = $('<a>');
a.html(theme);
a.attr('href', '#');
var handler = function(){
$('section#preview').attr('class', theme);
$('#themes-holder > a').removeClass('active');
a.addClass('active');
return false;
}
if(!ft) ft = handler;
a.on('click', handler);
$('#themes-holder').append(a);
});
ft();
</script>
</body>
</html>