r1.0-beta8
This commit is contained in:
parent
5d0aee4aac
commit
cbc014df77
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
1
assets/iosevka-slab-bold.charmap
Normal file
1
assets/iosevka-slab-bold.charmap
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/iosevka-slab-bold.ttf
Normal file
BIN
assets/iosevka-slab-bold.ttf
Normal file
Binary file not shown.
BIN
assets/iosevka-slab-bold.woff
Normal file
BIN
assets/iosevka-slab-bold.woff
Normal file
Binary file not shown.
1
assets/iosevka-slab-bolditalic.charmap
Normal file
1
assets/iosevka-slab-bolditalic.charmap
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/iosevka-slab-bolditalic.ttf
Normal file
BIN
assets/iosevka-slab-bolditalic.ttf
Normal file
Binary file not shown.
BIN
assets/iosevka-slab-bolditalic.woff
Normal file
BIN
assets/iosevka-slab-bolditalic.woff
Normal file
Binary file not shown.
1
assets/iosevka-slab-italic.charmap
Normal file
1
assets/iosevka-slab-italic.charmap
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/iosevka-slab-italic.ttf
Normal file
BIN
assets/iosevka-slab-italic.ttf
Normal file
Binary file not shown.
BIN
assets/iosevka-slab-italic.woff
Normal file
BIN
assets/iosevka-slab-italic.woff
Normal file
Binary file not shown.
1
assets/iosevka-slab-regular.charmap
Normal file
1
assets/iosevka-slab-regular.charmap
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/iosevka-slab-regular.ttf
Normal file
BIN
assets/iosevka-slab-regular.ttf
Normal file
Binary file not shown.
BIN
assets/iosevka-slab-regular.woff
Normal file
BIN
assets/iosevka-slab-regular.woff
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
1
assets/iosevkacc-slab-bold.charmap
Normal file
1
assets/iosevkacc-slab-bold.charmap
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/iosevkacc-slab-bold.ttf
Normal file
BIN
assets/iosevkacc-slab-bold.ttf
Normal file
Binary file not shown.
BIN
assets/iosevkacc-slab-bold.woff
Normal file
BIN
assets/iosevkacc-slab-bold.woff
Normal file
Binary file not shown.
1
assets/iosevkacc-slab-bolditalic.charmap
Normal file
1
assets/iosevkacc-slab-bolditalic.charmap
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/iosevkacc-slab-bolditalic.ttf
Normal file
BIN
assets/iosevkacc-slab-bolditalic.ttf
Normal file
Binary file not shown.
BIN
assets/iosevkacc-slab-bolditalic.woff
Normal file
BIN
assets/iosevkacc-slab-bolditalic.woff
Normal file
Binary file not shown.
1
assets/iosevkacc-slab-italic.charmap
Normal file
1
assets/iosevkacc-slab-italic.charmap
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/iosevkacc-slab-italic.ttf
Normal file
BIN
assets/iosevkacc-slab-italic.ttf
Normal file
Binary file not shown.
BIN
assets/iosevkacc-slab-italic.woff
Normal file
BIN
assets/iosevkacc-slab-italic.woff
Normal file
Binary file not shown.
1
assets/iosevkacc-slab-regular.charmap
Normal file
1
assets/iosevkacc-slab-regular.charmap
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/iosevkacc-slab-regular.ttf
Normal file
BIN
assets/iosevkacc-slab-regular.ttf
Normal file
Binary file not shown.
BIN
assets/iosevkacc-slab-regular.woff
Normal file
BIN
assets/iosevkacc-slab-regular.woff
Normal file
Binary file not shown.
|
@ -21,6 +21,26 @@ html {
|
|||
font-weight: bold;
|
||||
src: url('assets/iosevka-bolditalic.woff') format('woff'), url('assets/iosevka-bolditalic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaSlabWEB;
|
||||
src: url('assets/iosevka-slab-regular.woff') format('woff'), url('assets/iosevka-slab-regular.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaSlabWEB;
|
||||
font-style: italic;
|
||||
src: url('assets/iosevka-slab-italic.woff') format('woff'), url('assets/iosevka-slab-italic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaSlabWEB;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevka-slab-bold.woff') format('woff'), url('assets/iosevka-slab-bold.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaSlabWEB;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevka-slab-bolditalic.woff') format('woff'), url('assets/iosevka-slab-bolditalic.ttf') format('truetype');
|
||||
}
|
||||
a {
|
||||
color: black;
|
||||
background-image: linear-gradient(white 50%, #888 50%);
|
||||
|
@ -33,9 +53,15 @@ a {
|
|||
a:hover {
|
||||
background-image: linear-gradient(white 50%, black 50%);
|
||||
}
|
||||
html, body, pre, code {
|
||||
html, body {
|
||||
font-family: "IosevkaWEB", monospace;
|
||||
}
|
||||
.slab {
|
||||
font-family: "IosevkaSlabWEB", monospace;
|
||||
}
|
||||
pre, code {
|
||||
font-family: inherit;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
@ -178,7 +204,7 @@ section.dark {
|
|||
.dark .hljs-comment {
|
||||
color: #767676;
|
||||
}
|
||||
.dark .hljs-title, .dark .hljs-attribute, .dark .hljs-params {
|
||||
.dark .hljs-title, .dark .hljs-attribute, .dark .hljs-params, .dark .hljs-built_in {
|
||||
color: #b77fdb;
|
||||
}
|
||||
.dark .hljs-variable {
|
427
index.html
427
index.html
|
@ -2,16 +2,16 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Iosevka</title>
|
||||
<script src="http://cdn.jsdelivr.net/vue/1.0.4/vue.min.js"></script>
|
||||
<script>if (!window.Vue) document.write('<script src="vue-1.0.4.min.js">\x3C/script>')</script>
|
||||
<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>
|
||||
<style> @import url(index.css); </style>
|
||||
<script src="https://cdn.bootcss.com/vue/1.0.7/vue.min.js"></script>
|
||||
<script>if (!window.Vue) document.write('<script src="vue.min.js">\x3C/script>')</script>
|
||||
<link href="https://cdn.bootcss.com/simple-line-icons/2.2.3/css/simple-line-icons.css" rel="stylesheet">
|
||||
</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-beta7 “So-Yei”</span></a>
|
||||
<a href="https://github.com/be5invis/Iosevka/releases/latest"><icon class="icon-cloud-download"></icon>Download Iosevka<span>1.0-beta8 “So-Yei.8”</span></a>
|
||||
<a href="specimen.html"><icon class="icon-book-open"></icon>View Specimen<span>All characters & styles</span></a>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -19,7 +19,7 @@
|
|||
<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>
|
||||
<p>Iosevka is a slender monospace sans-serif and <span class="slab">slab-serif</span> 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>
|
||||
|
@ -36,13 +36,13 @@
|
|||
<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 v-show="(true)" style="display:none"><h2>Preview</h2>
|
||||
<p><span id="theme-picker" class="options"><compact-picker v-bind:items="themes" v-bind:current.sync="theme" ></compact-picker></span>| <span id="snippet-picker" class="options"><compact-picker v-bind:items="snippets" v-bind:current.sync="snippet"></compact-picker></span></p>
|
||||
<p><span id="slab-toggle" class="options"><compact-toggle v-bind:on.sync="isSlab" v-bind:label="'slab'"></compact-toggle></span>| <span id="theme-picker" class="options"><compact-picker v-bind:items="themes" v-bind:current.sync="theme"></compact-picker></span>| <span id="snippet-picker" class="options"><compact-picker v-bind:items="snippets" v-bind:current.sync="snippet"></compact-picker></span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section id="preview" class="{{theme}}">
|
||||
<snippet v-bind:name="'javascript'" v-bind:current="snippet"><code class="javascript hljs"><span class=hljs-keyword>var</span> languages = [
|
||||
<section id="preview" class="{{theme}} {{(isSlab ? 'slab' : '')}}">
|
||||
<snippet v-bind:name="'js'" v-bind:current="snippet"><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>},
|
||||
|
@ -69,278 +69,169 @@
|
|||
{lang: <span class=hljs-string>'Ukrainian'</span>, sample: <span class=hljs-string>'Чуєш їх, доцю, га? Кумедна ж ти, прощайся без ґольфів!'</span>}
|
||||
]
|
||||
</code></snippet>
|
||||
<snippet v-bind:name="'cpp'" v-bind:current="snippet"><code class="cpp hljs">
|
||||
<span class=hljs-preprocessor>#<span class=hljs-keyword>include</span> <span class=hljs-string><math.h></span> // smallpt, a Path Tracer by Kevin Beason, 2008 </span>
|
||||
<span class=hljs-preprocessor>#<span class=hljs-keyword>include</span> <span class=hljs-string><stdlib.h></span> // Make : g++ -O3 -fopenmp smallpt.cpp -o smallpt </span>
|
||||
<span class=hljs-preprocessor>#<span class=hljs-keyword>include</span> <span class=hljs-string><stdio.h></span> // </span>
|
||||
<span class=hljs-keyword>struct</span> Vec { <span class=hljs-comment>// Usage: time ./smallpt 5000 && 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 &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 &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 &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& <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 &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&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 &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<<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)>eps ? t : ((t=b+det)>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<<span class=hljs-number>0</span> ? <span class=hljs-number>0</span> : x><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 &r, <span class=hljs-keyword>double</span> &t, <span class=hljs-keyword>int</span> &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))&&d<t){t=d;id=i;}
|
||||
<span class=hljs-keyword>return</span> t<inf;
|
||||
}
|
||||
<span class=hljs-function>Vec <span class=hljs-title>radiance</span><span class=hljs-params>(<span class=hljs-keyword>const</span> Ray &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 &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)<<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>f.y && f.x>f.z ? f.x : f.y>f.z ? f.y : f.z; <span class=hljs-comment>// max refl </span>
|
||||
<span class=hljs-keyword>if</span> (++depth><span class=hljs-number>5</span>) <span class=hljs-keyword>if</span> (erand48(Xi)<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)><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)><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))<<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><span class=hljs-number>2</span> ? (erand48(Xi)<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<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<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<<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<<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<samps; s++){
|
||||
<span class=hljs-keyword>double</span> r1=<span class=hljs-number>2</span>*erand48(Xi), dx=r1<<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<<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<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></snippet>
|
||||
<snippet v-bind:name="'less'" v-bind:current="snippet"><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>&</span>,
|
||||
<span class=hljs-keyword>&</span><span class=hljs-pseudo>:active</span>,
|
||||
<span class=hljs-keyword>&</span><span class=hljs-class>.active</span> {
|
||||
<span class=hljs-keyword>&</span><span class=hljs-pseudo>:focus</span>,
|
||||
<span class=hljs-keyword>&</span><span class=hljs-class>.focus</span> {
|
||||
<span class=hljs-class>.tab-focus</span>();
|
||||
<snippet v-bind:name="'cpp'" v-bind:current="snippet"><code class="cpp hljs"><span class="hljs-comment">// From Rosetta Code</span>
|
||||
<span class="hljs-preprocessor">#<span class="hljs-keyword">include</span> <span class="hljs-string"><iostream></span></span>
|
||||
<span class="hljs-preprocessor">#<span class="hljs-keyword">include</span> <span class="hljs-string"><iomanip></span></span>
|
||||
<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> <span class="hljs-built_in">std</span>;
|
||||
<span class="hljs-keyword">class</span> ormConverter {
|
||||
<span class="hljs-keyword">public</span>:
|
||||
ormConverter() : AR( <span class="hljs-number">0.7112f</span> ), CE( <span class="hljs-number">0.01f</span> ), DI( <span class="hljs-number">0.0254f</span> ), FU( <span class="hljs-number">0.3048f</span> ), KI( <span class="hljs-number">1000.0f</span> ), LI( <span class="hljs-number">0.00254f</span> ), ME( <span class="hljs-number">1.0f</span> ),
|
||||
MI( <span class="hljs-number">7467.6f</span> ), PI( <span class="hljs-number">0.1778f</span> ), SA( <span class="hljs-number">2.1336f</span> ), TO( <span class="hljs-number">0.000254f</span> ), VE( <span class="hljs-number">0.04445f</span> ), VR( <span class="hljs-number">1066.8f</span> ) {}
|
||||
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">convert</span><span class="hljs-params">( <span class="hljs-keyword">char</span> c, <span class="hljs-keyword">float</span> l )</span> </span>{
|
||||
system( <span class="hljs-string">"cls"</span> );
|
||||
<span class="hljs-built_in">cout</span> << endl << l;
|
||||
<span class="hljs-keyword">switch</span>( c ) {
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'A'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Arshin to:"</span>; l *= AR; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'C'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Centimeter to:"</span>; l *= CE; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'D'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Diuym to:"</span>; l *= DI; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'F'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Fut to:"</span>; l *= FU; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'K'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Kilometer to:"</span>; l *= KI; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'L'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Liniya to:"</span>; l *= LI; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'M'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Meter to:"</span>; l *= ME; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'I'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Milia to:"</span>; l *= MI; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'P'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Piad to:"</span>; l *= PI; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'S'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Sazhen to:"</span>; l *= SA; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'T'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Tochka to:"</span>; l *= TO; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'V'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Vershok to:"</span>; l *= VE; <span class="hljs-keyword">break</span>;
|
||||
<span class="hljs-keyword">case</span> <span class="hljs-string">'E'</span>: <span class="hljs-built_in">cout</span> << <span class="hljs-string">" Versta to:"</span>; l *= VR;
|
||||
}
|
||||
|
||||
<span class="hljs-keyword">float</span> ar = l / AR, ce = l / CE, di = l / DI, fu = l / FU, ki = l / KI, li = l / LI, me = l / ME,
|
||||
mi = l / MI, pi = l / PI, sa = l / SA, to = l / TO, ve = l / VE, vr = l / VR;
|
||||
<span class="hljs-built_in">cout</span> << left << endl << <span class="hljs-string">"================="</span> << endl
|
||||
<< setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Arshin:"</span> << ar << endl << setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Centimeter:"</span> << ce << endl
|
||||
<< setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Diuym:"</span> << di << endl << setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Fut:"</span> << fu << endl
|
||||
<< setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Kilometer:"</span> << ki << endl << setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Liniya:"</span> << li << endl
|
||||
<< setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Meter:"</span> << me << endl << setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Milia:"</span> << mi << endl
|
||||
<< setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Piad:"</span> << pi << endl << setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Sazhen:"</span> << sa << endl
|
||||
<< setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Tochka:"</span> << to << endl << setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Vershok:"</span> << ve << endl
|
||||
<< setw( <span class="hljs-number">12</span> ) << <span class="hljs-string">"Versta:"</span> << vr << endl << endl << endl;
|
||||
}
|
||||
}
|
||||
|
||||
<span class=hljs-keyword>&</span><span class=hljs-pseudo>:hover</span>,
|
||||
<span class=hljs-keyword>&</span><span class=hljs-pseudo>:focus</span>,
|
||||
<span class=hljs-keyword>&</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>&</span><span class=hljs-pseudo>:active</span>,
|
||||
<span class=hljs-keyword>&</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>&</span><span class=hljs-class>.disabled</span>,
|
||||
<span class=hljs-keyword>&</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>&</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>&</span> {
|
||||
<span class=hljs-keyword>&</span><span class=hljs-class>.disabled</span>,
|
||||
<span class=hljs-tag>fieldset</span><span class=hljs-attr_selector>[disabled]</span> <span class=hljs-keyword>&</span> {
|
||||
<span class=hljs-attribute>pointer-events</span>: none; <span class=hljs-comment>// Future-proof disabling of clicks on `<a>` elements</span>
|
||||
<span class="hljs-keyword">private</span>:
|
||||
<span class="hljs-keyword">const</span> <span class="hljs-keyword">float</span> AR, CE, DI, FU, KI, LI, ME, MI, PI, SA, TO, VE, VR;
|
||||
};
|
||||
<span class="hljs-keyword">int</span> _tmain(<span class="hljs-keyword">int</span> argc, _TCHAR* argv[]) {
|
||||
ormConverter c;
|
||||
<span class="hljs-keyword">char</span> s; <span class="hljs-keyword">float</span> l;
|
||||
<span class="hljs-keyword">while</span>( <span class="hljs-literal">true</span> ) {
|
||||
<span class="hljs-built_in">cout</span> << <span class="hljs-string">"What unit:\n(A)rshin, (C)entimeter, (D)iuym, (F)ut\n(K)ilometer, (L)iniya, (M)eter, m(I)lia, (P)iad\n(S)azhen, "</span>
|
||||
<span class="hljs-string">"(T)ochka, (V)ershok, v(E)rsta, (Q)uit\n"</span>;
|
||||
<span class="hljs-built_in">cin</span> >> s; <span class="hljs-keyword">if</span>( s & <span class="hljs-number">32</span> ) s ^= <span class="hljs-number">32</span>; <span class="hljs-keyword">if</span>( s == <span class="hljs-string">'Q'</span> ) <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
|
||||
<span class="hljs-built_in">cout</span> << <span class="hljs-string">"Length (0 to Quit): "</span>; <span class="hljs-built_in">cin</span> >> l; <span class="hljs-keyword">if</span>( l == <span class="hljs-number">0</span> ) <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
|
||||
c.convert( s, l ); system( <span class="hljs-string">"pause"</span> ); system( <span class="hljs-string">"cls"</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>);
|
||||
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
|
||||
}</code></snippet>
|
||||
<snippet v-bind:name="'python'" v-bind:current="snippet"><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></snippet>
|
||||
<snippet v-bind:name="'elixir'" v-bind:current="snippet"><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></snippet>
|
||||
<snippet v-bind:name="'julia'" v-bind:current="snippet"><code class="julia hljs"><span class="hljs-comment"># From Rosetta Code</span>
|
||||
<span class="hljs-keyword">function</span> walk(maze, cell, visited = <span class="hljs-built_in">Any</span>[])
|
||||
push!(visited, cell)
|
||||
<span class="hljs-keyword">for</span> neigh <span class="hljs-keyword">in</span> shuffle(neighbors(cell, size(maze)))
|
||||
<span class="hljs-keyword">if</span> !(neigh <span class="hljs-keyword">in</span> visited)
|
||||
maze[round(<span class="hljs-built_in">Int</span>,(cell + neigh)/<span class="hljs-number">2</span>)...] = <span class="hljs-number">0</span> <span class="hljs-comment"># ifloor(n/2) == n >> 1 </span>
|
||||
walk(maze, neigh, visited)
|
||||
<span class="hljs-keyword">end</span>
|
||||
<span class="hljs-keyword">end</span>
|
||||
maze
|
||||
<span class="hljs-keyword">end</span>
|
||||
|
||||
neighbors(c, b, d = <span class="hljs-number">2</span>) = filter(check(b), map(m -> c + d * m, <span class="hljs-built_in">Any</span>[[<span class="hljs-number">0</span>, <span class="hljs-number">1</span>], [-<span class="hljs-number">1</span>, <span class="hljs-number">0</span>], [<span class="hljs-number">0</span>, -<span class="hljs-number">1</span>], [<span class="hljs-number">1</span>, <span class="hljs-number">0</span>]]))
|
||||
|
||||
check(bound) = cell -> all([<span class="hljs-number">1</span>, <span class="hljs-number">1</span>] .<= cell .<= [bound...])
|
||||
|
||||
maze(w, h) = walk([i % <span class="hljs-number">2</span> | j % <span class="hljs-number">2</span> <span class="hljs-keyword">for</span> i = <span class="hljs-number">1</span>:<span class="hljs-number">2</span>w + <span class="hljs-number">1</span>, j = <span class="hljs-number">1</span>:<span class="hljs-number">2</span>h + <span class="hljs-number">1</span>], <span class="hljs-number">2</span> * [rand(<span class="hljs-number">1</span>:w), rand(<span class="hljs-number">1</span>:h)])
|
||||
|
||||
pprint(matrix) = <span class="hljs-keyword">for</span> i = <span class="hljs-number">1</span>:size(matrix, <span class="hljs-number">1</span>) println(join(matrix[i, :])) <span class="hljs-keyword">end</span>
|
||||
|
||||
<span class="hljs-keyword">function</span> printmaze(maze, wall = convert(<span class="hljs-built_in">UTF32String</span>, <span class="hljs-string">"╹╸┛╺┗━┻╻┃┓┫┏┣┳╋"</span>))
|
||||
h,w = size(maze)
|
||||
pprint([ maze[i,j] == <span class="hljs-number">0</span> ? <span class="hljs-char">' '</span> :
|
||||
wall[<span class="hljs-built_in">Int</span>(sum(c-> <span class="hljs-number">2.0</span>^<span class="hljs-number">.5</span>(<span class="hljs-number">3</span>c[<span class="hljs-number">1</span>] + c[<span class="hljs-number">2</span>] + <span class="hljs-number">3</span>),
|
||||
filter(x -> maze[x...] != <span class="hljs-number">0</span>,
|
||||
neighbors([i, j], [h, w], <span class="hljs-number">1</span>)) .- <span class="hljs-built_in">Any</span>[[i, j]]))]
|
||||
<span class="hljs-keyword">for</span> i = <span class="hljs-number">1</span>:<span class="hljs-number">2</span>:h, j = <span class="hljs-number">1</span>:w])
|
||||
<span class="hljs-keyword">end</span>
|
||||
mprint(maze(<span class="hljs-number">15</span>,<span class="hljs-number">30</span>))</code></snippet>
|
||||
<snippet v-bind:name="'python'" v-bind:current="snippet"><code class="python hljs"><span class="hljs-comment"># From Rosetta Code</span>
|
||||
<span class="hljs-keyword">from</span> pprint <span class="hljs-keyword">import</span> pprint
|
||||
|
||||
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">matrixMul</span><span class="hljs-params">(A, B)</span>:</span>
|
||||
TB = zip(*B)
|
||||
<span class="hljs-keyword">return</span> [[sum(ea*eb <span class="hljs-keyword">for</span> ea,eb <span class="hljs-keyword">in</span> zip(a,b)) <span class="hljs-keyword">for</span> b <span class="hljs-keyword">in</span> TB] <span class="hljs-keyword">for</span> a <span class="hljs-keyword">in</span> A]
|
||||
|
||||
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">pivotize</span><span class="hljs-params">(m)</span>:</span>
|
||||
<span class="hljs-string">"""Creates the pivoting matrix for m."""</span>
|
||||
n = len(m)
|
||||
ID = [[float(i == j) <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> xrange(n)] <span class="hljs-keyword">for</span> j <span class="hljs-keyword">in</span> xrange(n)]
|
||||
<span class="hljs-keyword">for</span> j <span class="hljs-keyword">in</span> xrange(n):
|
||||
row = max(xrange(j, n), key=<span class="hljs-keyword">lambda</span> i: abs(m[i][j]))
|
||||
<span class="hljs-keyword">if</span> j != row:
|
||||
ID[j], ID[row] = ID[row], ID[j]
|
||||
<span class="hljs-keyword">return</span> ID
|
||||
|
||||
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">lu</span><span class="hljs-params">(A)</span>:</span>
|
||||
<span class="hljs-string">"""Decomposes a nxn matrix A by PA=LU and returns L, U and P."""</span>
|
||||
n = len(A)
|
||||
L = [[<span class="hljs-number">0.0</span>] * n <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> xrange(n)]
|
||||
U = [[<span class="hljs-number">0.0</span>] * n <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> xrange(n)]
|
||||
P = pivotize(A)
|
||||
A2 = matrixMul(P, A)
|
||||
<span class="hljs-keyword">for</span> j <span class="hljs-keyword">in</span> xrange(n):
|
||||
L[j][j] = <span class="hljs-number">1.0</span>
|
||||
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> xrange(j+<span class="hljs-number">1</span>):
|
||||
s1 = sum(U[k][j] * L[i][k] <span class="hljs-keyword">for</span> k <span class="hljs-keyword">in</span> xrange(i))
|
||||
U[i][j] = A2[i][j] - s1
|
||||
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> xrange(j, n):
|
||||
s2 = sum(U[k][j] * L[i][k] <span class="hljs-keyword">for</span> k <span class="hljs-keyword">in</span> xrange(j))
|
||||
L[i][j] = (A2[i][j] - s2) / U[j][j]
|
||||
<span class="hljs-keyword">return</span> (L, U, P)
|
||||
|
||||
a = [[<span class="hljs-number">1</span>, <span class="hljs-number">3</span>, <span class="hljs-number">5</span>], [<span class="hljs-number">2</span>, <span class="hljs-number">4</span>, <span class="hljs-number">7</span>], [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>]]
|
||||
<span class="hljs-keyword">for</span> part <span class="hljs-keyword">in</span> lu(a):
|
||||
pprint(part, width=<span class="hljs-number">19</span>)
|
||||
<span class="hljs-keyword">print</span>
|
||||
<span class="hljs-keyword">print</span>
|
||||
b = [[<span class="hljs-number">11</span>,<span class="hljs-number">9</span>,<span class="hljs-number">24</span>,<span class="hljs-number">2</span>],[<span class="hljs-number">1</span>,<span class="hljs-number">5</span>,<span class="hljs-number">2</span>,<span class="hljs-number">6</span>],[<span class="hljs-number">3</span>,<span class="hljs-number">17</span>,<span class="hljs-number">18</span>,<span class="hljs-number">1</span>],[<span class="hljs-number">2</span>,<span class="hljs-number">5</span>,<span class="hljs-number">7</span>,<span class="hljs-number">1</span>]]
|
||||
<span class="hljs-keyword">for</span> part <span class="hljs-keyword">in</span> lu(b):
|
||||
pprint(part)
|
||||
<span class="hljs-keyword">print</span></code></snippet>
|
||||
<snippet v-bind:name="'elixir'" v-bind:current="snippet"><code class="elixir hljs"><span class="hljs-comment"># From Rosetta Code</span>
|
||||
<span class="hljs-class"><span class="hljs-keyword">defmodule</span> <span class="hljs-title">Hailstone</span></span> <span class="hljs-keyword">do</span>
|
||||
require <span class="hljs-constant">Integer</span>
|
||||
|
||||
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">step</span></span>(<span class="hljs-number">1</span>) , <span class="hljs-symbol">do:</span> <span class="hljs-number">0</span>
|
||||
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">step</span></span>(n) <span class="hljs-keyword">when</span> <span class="hljs-constant">Integer.</span>is_even(n), <span class="hljs-symbol">do:</span> div(n,<span class="hljs-number">2</span>)
|
||||
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">step</span></span>(n) , <span class="hljs-symbol">do:</span> n*<span class="hljs-number">3</span> + <span class="hljs-number">1</span>
|
||||
|
||||
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">sequence</span></span>(n) <span class="hljs-keyword">do</span>
|
||||
<span class="hljs-constant">Stream.</span>iterate(n, &step/<span class="hljs-number">1</span>) |> <span class="hljs-constant">Stream.</span>take_while(&(&<span class="hljs-number">1</span> > <span class="hljs-number">0</span>)) |> <span class="hljs-constant">Enum.</span>to_list
|
||||
<span class="hljs-keyword">end</span>
|
||||
|
||||
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">run</span></span> <span class="hljs-keyword">do</span>
|
||||
seq27 = sequence(<span class="hljs-number">27</span>)
|
||||
len27 = length(seq27)
|
||||
repr = <span class="hljs-constant">String.</span>replace(inspect(seq27, <span class="hljs-symbol">limit:</span> <span class="hljs-number">4</span>) <> inspect(<span class="hljs-constant">Enum.</span>drop(seq27,len27-<span class="hljs-number">4</span>)), <span class="hljs-string">"]["</span>, <span class="hljs-string">", "</span>)
|
||||
<span class="hljs-constant">IO.</span>puts <span class="hljs-string">"Hailstone(27) has <span class="hljs-subst">#{len27}</span> elements: <span class="hljs-subst">#{repr}</span>"</span>
|
||||
|
||||
{len, start} = <span class="hljs-constant">Enum.</span>map(<span class="hljs-number">1</span>..<span class="hljs-number">100_000</span>, <span class="hljs-keyword">fn</span>(n) -> {length(sequence(n)), n} <span class="hljs-keyword">end</span>) |> <span class="hljs-constant">Enum.</span>max
|
||||
<span class="hljs-constant">IO.</span>puts <span class="hljs-string">"Longest sequence starting under 100000 begins with <span class="hljs-subst">#{start}</span> and has <span class="hljs-subst">#{len}</span> elements."</span>
|
||||
<span class="hljs-keyword">end</span>
|
||||
<span class="hljs-keyword">end</span>
|
||||
|
||||
<span class="hljs-constant">Hailstone.</span>run</code></snippet>
|
||||
</section>
|
||||
<script type="text/x-template" id="compact-picker-template">
|
||||
<template v-for="item in items">
|
||||
<a href="javascript:;" v-bind:class="{active:(item === current)}" v-on:click.prevent="setItem(item)">{{item}}</a>
|
||||
</template>
|
||||
</script>
|
||||
<script type="text/x-template" id="compact-toggle-template">
|
||||
<a href="javascript:;" v-bind:class="{active:on}" v-on:click.prevent="toggle()">{{label}}</a>
|
||||
</script>
|
||||
<script type="text/x-template" id="code-snippet-template">
|
||||
<pre v-bind:id="name" v-show="(name === current)">
|
||||
<slot></slot>
|
||||
</pre>
|
||||
</script>
|
||||
<script src="index-tabs.js"></script>
|
||||
<script src="index.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -12,6 +12,21 @@ var CompactPicker = Vue.component('compact-picker', {
|
|||
}
|
||||
}
|
||||
});
|
||||
var CompactToggle = Vue.component('compact-toggle', {
|
||||
template: '#compact-toggle-template',
|
||||
props: {
|
||||
label: String,
|
||||
on: Boolean
|
||||
},
|
||||
data: {},
|
||||
methods: {
|
||||
toggle: function(){
|
||||
this.on = !this.on
|
||||
console.log(this.on)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
var CodeSnippet = Vue.component('snippet', {
|
||||
template: '#code-snippet-template',
|
||||
props: {
|
||||
|
@ -27,8 +42,9 @@ var codeArea = new Vue({
|
|||
data: {
|
||||
themes: ['light', 'dark'],
|
||||
snippets: [],
|
||||
snippet: 'javascript',
|
||||
theme: 'dark'
|
||||
snippet: 'js',
|
||||
theme: 'dark',
|
||||
isSlab: false
|
||||
}
|
||||
});
|
||||
codeArea.snippets = codeArea.$children.map(function(e){ return e.name }).filter(function(x){ return !!x });
|
251
specimen.css
Normal file
251
specimen.css
Normal file
|
@ -0,0 +1,251 @@
|
|||
html {
|
||||
font-size: 14px;
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaWEB;
|
||||
src: url('assets/iosevka-regular.woff') format('woff'), url('assets/iosevka-regular.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaWEB;
|
||||
font-style: italic;
|
||||
src: url('assets/iosevka-italic.woff') format('woff'), url('assets/iosevka-italic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaWEB;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevka-bold.woff') format('woff'), url('assets/iosevka-bold.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaWEB;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevka-bolditalic.woff') format('woff'), url('assets/iosevka-bolditalic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaSlabWEB;
|
||||
src: url('assets/iosevka-slab-regular.woff') format('woff'), url('assets/iosevka-slab-regular.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaSlabWEB;
|
||||
font-style: italic;
|
||||
src: url('assets/iosevka-slab-italic.woff') format('woff'), url('assets/iosevka-slab-italic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaSlabWEB;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevka-slab-bold.woff') format('woff'), url('assets/iosevka-slab-bold.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaSlabWEB;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevka-slab-bolditalic.woff') format('woff'), url('assets/iosevka-slab-bolditalic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCWEB;
|
||||
src: url('assets/iosevkacc-regular.woff') format('woff'), url('assets/iosevkacc-regular.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCWEB;
|
||||
font-style: italic;
|
||||
src: url('assets/iosevkacc-italic.woff') format('woff'), url('assets/iosevkacc-italic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCWEB;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevkacc-bold.woff') format('woff'), url('assets/iosevkacc-bold.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCWEB;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevkacc-bolditalic.woff') format('woff'), url('assets/iosevkacc-bolditalic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCSlabWEB;
|
||||
src: url('assets/iosevkacc-slab-regular.woff') format('woff'), url('assets/iosevkacc-slab-regular.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCSlabWEB;
|
||||
font-style: italic;
|
||||
src: url('assets/iosevkacc-slab-italic.woff') format('woff'), url('assets/iosevkacc-slab-italic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCSlabWEB;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevkacc-slab-bold.woff') format('woff'), url('assets/iosevkacc-slab-bold.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCSlabWEB;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevkacc-slab-bolditalic.woff') format('woff'), url('assets/iosevkacc-slab-bolditalic.ttf') format('truetype');
|
||||
}
|
||||
a {
|
||||
color: black;
|
||||
background-image: linear-gradient(white 50%, #888 50%);
|
||||
background-position: 0px 1.075em;
|
||||
background-repeat: repeat-x;
|
||||
background-size: 2px 2px;
|
||||
text-decoration: none;
|
||||
text-shadow: white -1px 0px 0px, white 1px 0px 0px;
|
||||
}
|
||||
a:hover {
|
||||
background-image: linear-gradient(white 50%, black 50%);
|
||||
}
|
||||
body {
|
||||
width: 68rem;
|
||||
margin: 0 auto;
|
||||
padding: 4rem 0;
|
||||
}
|
||||
.show, .show samp, .pp {
|
||||
font-family: "IosevkaWEB", monospace;
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-font-feature-settings: "locl";
|
||||
-ms-font-feature-settings: "locl";
|
||||
-webkit-font-feature-settings: "locl";
|
||||
font-feature-settings: "locl";
|
||||
}
|
||||
.cc, .cc samp { font-family: "IosevkaCCWEB", monospace!important }
|
||||
.slab, .slab samp { font-family: "IosevkaSlabWEB", monospace!important }
|
||||
.cc.slab, .cc.slab samp { font-family: "IosevkaCCSlabWEB", monospace!important }
|
||||
p {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
.show {
|
||||
font-size: 2rem;
|
||||
width: 68rem;
|
||||
}
|
||||
.bold { font-weight: bold }
|
||||
.italic { font-style: italic }
|
||||
.show table.block {
|
||||
width: 68rem;
|
||||
border: none;
|
||||
table-layout: fixed;
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.show table.block td {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
line-height: 2rem;
|
||||
padding: 1rem;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
cursor: default;
|
||||
border: none;
|
||||
}
|
||||
.show table.block td.missing {
|
||||
opacity: 0.1
|
||||
}
|
||||
.show table.block td.present:before {
|
||||
content: attr(title);
|
||||
position: absolute;
|
||||
font-size: 0.33em;
|
||||
top: -1.25em;
|
||||
left: 0.125em;
|
||||
right: 0.125em;
|
||||
text-align: center;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
text-shadow: white 0 0 0.4em;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
z-index: -1;
|
||||
}
|
||||
.show table.block td > d {
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
color: #ddd;
|
||||
text-shadow: 0 0 2px white;
|
||||
}
|
||||
.show table.block td.indicator > n {
|
||||
display: block;
|
||||
margin-top: -2rem;
|
||||
margin-left: -0.5em;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.show table.block td.indicator > s {
|
||||
display: block;
|
||||
width : 0;
|
||||
height: 2rem;
|
||||
color: white;
|
||||
}
|
||||
.show table.block td.indicator > s:after {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
position: relative;
|
||||
top: -1em;
|
||||
left: 3rem;
|
||||
width: 64rem;
|
||||
height: calc(0.52em - 2px);
|
||||
margin-right: -2em;
|
||||
border-top: 1px solid rgba(0, 0, 255, 0.1);
|
||||
border-bottom: 1px solid rgba(255, 0, 0, 0.1);
|
||||
}
|
||||
.show .lipsum {
|
||||
font-size: 1rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
#picker {
|
||||
display: block;
|
||||
position: fixed;
|
||||
z-index: 9999;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
font-size: 3rem;
|
||||
height: 4rem;
|
||||
margin-left: -34.5rem;
|
||||
width: 69rem;
|
||||
}
|
||||
#picker .menu {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 4rem;
|
||||
background: #ddd;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
#picker:hover .menu{
|
||||
display: block;
|
||||
}
|
||||
#picker:hover .menu .group {
|
||||
display: flex;
|
||||
}
|
||||
#picker:hover .menu .group a {
|
||||
display: block;
|
||||
padding: 0.5rem;
|
||||
flex: 1;
|
||||
min-width: 10rem;
|
||||
background: #eee;
|
||||
text-shadow: none;
|
||||
}
|
||||
#picker:hover .menu .group a:hover {
|
||||
background: #ddd;
|
||||
}
|
||||
#picker .title {
|
||||
background: black;
|
||||
color: white;
|
||||
display: block;
|
||||
line-height: 3rem;
|
||||
height: 3rem;
|
||||
padding: 0.5rem;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
}
|
||||
#picker .title .icon {
|
||||
position: absolute;
|
||||
right: 0.75rem;
|
||||
top: 0.75rem;
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
pre, code, pre span, code span {
|
||||
font-size: 1rem;
|
||||
font-family: inherit;
|
||||
}
|
||||
.keyword { color: blue }
|
||||
.string { color:green }
|
||||
.qualifier { color: #419 }
|
||||
.comment { color: #999 }
|
298
specimen.html
298
specimen.html
|
@ -1,270 +1,38 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Iosevka Specimen</title>
|
||||
<style>
|
||||
html {
|
||||
font-size: 14px;
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaWEB;
|
||||
src: url('assets/iosevka-regular.woff') format('woff'), url('assets/iosevka-regular.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaWEB;
|
||||
font-style: italic;
|
||||
src: url('assets/iosevka-italic.woff') format('woff'), url('assets/iosevka-italic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaWEB;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevka-bold.woff') format('woff'), url('assets/iosevka-bold.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaWEB;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevka-bolditalic.woff') format('woff'), url('assets/iosevka-bolditalic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCWEB;
|
||||
src: url('assets/iosevkacc-regular.woff') format('woff'), url('assets/iosevkacc-regular.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCWEB;
|
||||
font-style: italic;
|
||||
src: url('assets/iosevkacc-italic.woff') format('woff'), url('assets/iosevkacc-italic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCWEB;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevkacc-bold.woff') format('woff'), url('assets/iosevkacc-bold.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: IosevkaCCWEB;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
src: url('assets/iosevkacc-bolditalic.woff') format('woff'), url('assets/iosevkacc-bolditalic.ttf') format('truetype');
|
||||
}
|
||||
a {
|
||||
color: black;
|
||||
background-image: linear-gradient(white 50%, #888 50%);
|
||||
background-position: 0px 1.075em;
|
||||
background-repeat: repeat-x;
|
||||
background-size: 2px 2px;
|
||||
text-decoration: none;
|
||||
text-shadow: white -1px 0px 0px, white 1px 0px 0px;
|
||||
}
|
||||
a:hover {
|
||||
background-image: linear-gradient(white 50%, black 50%);
|
||||
}
|
||||
body {
|
||||
width: 68rem;
|
||||
margin: 0 auto;
|
||||
padding: 4rem 0;
|
||||
}
|
||||
p, pre, .show, .show samp, #links {
|
||||
font-family: "IosevkaWEB", monospace;
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-font-feature-settings: "locl";
|
||||
-ms-font-feature-settings: "locl";
|
||||
-webkit-font-feature-settings: "locl";
|
||||
font-feature-settings: "locl";
|
||||
}
|
||||
.cc { font-family: "IosevkaCCWeb", monospace!important }
|
||||
p {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
div.show {
|
||||
font-size: 2rem;
|
||||
width: 68rem;
|
||||
}
|
||||
div.show.bold { font-weight: bold }
|
||||
div.show.italic { font-style: italic }
|
||||
div.block {
|
||||
display: flex;
|
||||
width: 68rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.show div.block span {
|
||||
display: block;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
line-height: 2rem;
|
||||
padding: 1rem;
|
||||
flex: none;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
cursor: default;
|
||||
}
|
||||
.show div.block span.indicator {
|
||||
font-size: 1rem;
|
||||
}
|
||||
.show div.block span.missing {
|
||||
opacity: 0.1
|
||||
}
|
||||
.show div.block span.present:before {
|
||||
display: block;
|
||||
content: attr(title);
|
||||
position: absolute;
|
||||
font-size: 0.33em;
|
||||
top: -1.25em;
|
||||
left: 0.125em;
|
||||
right: 0.125em;
|
||||
text-align: center;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
text-shadow: white 0 0 0.4em;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
z-index: -1;
|
||||
}
|
||||
.show div.block span > s {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
position: relative;
|
||||
}
|
||||
.show div.block span > s > t {
|
||||
display: inline-block;
|
||||
width: 1em;
|
||||
margin-left: -0.25em;
|
||||
margin-right: -0.25em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.show div.block span > s > d {
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
color: #ddd;
|
||||
text-shadow: 0 0 2px white;
|
||||
}
|
||||
.show.cc div.block span > s > d {
|
||||
left: 0
|
||||
}
|
||||
.show div.block span.present > s:before {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
position: relative;
|
||||
top: -1px;
|
||||
left: -0.75em;
|
||||
width: 2em;
|
||||
height: calc(0.52em - 2px);
|
||||
margin-right: -2em;
|
||||
border-top: 1px solid rgba(0, 0, 255, 0.1);
|
||||
border-bottom: 1px solid rgba(255, 0, 0, 0.1);
|
||||
}
|
||||
.show div.block span > s > t:before, .show div.block span > s > t:after {
|
||||
display: inline-block;
|
||||
content: ' ';
|
||||
width:0;
|
||||
border-left: 1px solid rgba(0, 160, 0, 0.5);
|
||||
margin-left: -1px;
|
||||
height: 0.2em;
|
||||
}
|
||||
.show div.block span > s > t:after {
|
||||
margin-left: 0;
|
||||
margin-right: -1px;
|
||||
}
|
||||
.show .smp {
|
||||
font-size: 1rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
#links {
|
||||
position: fixed;
|
||||
z-index: 99;
|
||||
top: 0;
|
||||
width: 68rem;
|
||||
display: flex;
|
||||
border-bottom: 2px solid black;
|
||||
background: white;
|
||||
}
|
||||
#links a {
|
||||
display: block;
|
||||
flex: 1;
|
||||
padding: 1rem 0;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
background: none;
|
||||
text-shadow: none;
|
||||
}
|
||||
#links a.active {
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
</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>
|
||||
|
||||
</html>
|
||||
<title>Iosevka</title>
|
||||
<style>@import url(specimen.css);</style>
|
||||
<script src="https://cdn.bootcss.com/vue/1.0.7/vue.min.js"></script>
|
||||
<script>if (!window.Vue) document.write('<script src="vue.min.js">\x3C/script>')</script>
|
||||
<script src="https://cdn.bootcss.com/vue-resource/0.1.17/vue-resource.min.js"></script>
|
||||
<script>if (!window.Vue.resource) document.write('<script src="vue-resource.min.js">\x3C/script>')</script>
|
||||
<link href="https://cdn.bootcss.com/simple-line-icons/2.2.3/css/simple-line-icons.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<div id="links"></div>
|
||||
<script>
|
||||
function padzero(s, n){
|
||||
while(s.length < n) s = '0' + s;
|
||||
return s;
|
||||
}
|
||||
var BLOCKSIZE = 16 * 4;
|
||||
var fonts = [
|
||||
{name: 'iosevka-regular', cls: '', display: 'Regular'},
|
||||
{name: 'iosevka-bold', cls: 'bold', display: 'Bold'},
|
||||
{name: 'iosevka-italic', cls:'italic', display: 'Italic'},
|
||||
{name: 'iosevka-bolditalic', cls:'bold italic', display: 'Bolditalic'},
|
||||
{name: 'iosevkacc-regular', cls: 'cc', display: 'CC-Regular'},
|
||||
{name: 'iosevkacc-bold', cls: 'cc bold', display: 'CC-Bold'},
|
||||
{name: 'iosevkacc-italic', cls:'cc italic', display: 'CC-Italic'},
|
||||
{name: 'iosevkacc-bolditalic', cls:'cc bold italic', display: 'CC-Bolditalic'}
|
||||
];
|
||||
|
||||
var links = [];
|
||||
function Click(j, c){
|
||||
return function(){
|
||||
for(var k = 0; k < links.length; k++) if(k === j) {
|
||||
links[k].addClass('active')
|
||||
} else {
|
||||
links[k].removeClass('active')
|
||||
}
|
||||
div[0].className = 'show ' + c;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
var div = $('<div>').addClass('show');
|
||||
$.getJSON('assets/' + fonts[0].name + '.charmap', function(data){
|
||||
var uhash = [];
|
||||
var whash = [];
|
||||
for(var j = 0; j < data.length; j++) {
|
||||
var unicodes = data[j][1];
|
||||
if(unicodes && unicodes.length) for(var k = 0; k < unicodes.length; k++){
|
||||
uhash[unicodes[k]] = data[j][0].trim()
|
||||
whash[unicodes[k]] = data[j][2]
|
||||
}
|
||||
}
|
||||
for(var block = 0; block < (65536 / BLOCKSIZE); block++) {
|
||||
var blockdiv = $('<div>').addClass('block');
|
||||
var hasGlyphInThisBlock = false;
|
||||
for(j = block * BLOCKSIZE; j < (block + 1) * BLOCKSIZE; j++) if(uhash[j]){
|
||||
hasGlyphInThisBlock = true;
|
||||
}
|
||||
if(hasGlyphInThisBlock) {
|
||||
for(j = block * BLOCKSIZE; j < (block + 1) * BLOCKSIZE; j++) {
|
||||
if(j % 16 === 0) blockdiv.append('<span class="indicator">' + padzero(j.toString(16).toUpperCase(), 4) + '</span>')
|
||||
blockdiv.append('<span class="' + (uhash[j] ? 'present' : 'missing') + '" title="' + (uhash[j] || '') + '"><s>' + (whash[j] ? '<d>\u25CC</d><t>\u25CC': '<t>') + String.fromCharCode(j) + '</t></s></span>')
|
||||
}
|
||||
div.append(blockdiv)
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
$('body').append(div);
|
||||
fonts.forEach(function(font, fontindex){
|
||||
var a = $('<a>').attr('href', '#').append(font.display);
|
||||
a.on('click', Click(fontindex, font.cls));
|
||||
links.push(a)
|
||||
$('#links').append(a);
|
||||
});
|
||||
Click(0)();
|
||||
</script>
|
||||
<div id="picker">
|
||||
<span class="title pp {{current.cls}}">{{current.display}} Specimen<span class="icon icon-menu"></span></span>
|
||||
<div class="menu">
|
||||
<div class="group" v-for="group in fonts">
|
||||
<a href="#" v-for="item in group" v-on:click.prevent="choose(item)" class="pp {{item.cls}} {{item === current ? 'active' : ''}}">{{item.display}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="display" class="show {{currentFont.cls}}">
|
||||
<p class="waterfall" v-for="size in waterfall" style="font-size:{{size / 14}}rem">The quick brown fox jumps over the lazy dog.</p>
|
||||
<p class="lipsum" v-for="item in lipsums">{{item}}</p>
|
||||
<pre><code class=patel><span class=keyword>define</span> samples : <span class=keyword>object</span><template v-for="sample in samples">
|
||||
{<span class=qualifier>.lang</span> <span class=string>'{{sample.lang}}'</span>{{sample.spaces}}<span class=qualifier>.sample</span> <span class=string lang="{{sample.code}}">'{{{sample.sample}}}'</span>}<span class=comment>{{sample.comment}}</span></template></code></pre>
|
||||
<table class="block">
|
||||
<tr class="row" v-for="row in sampleRows">
|
||||
<td class="indicator"><s>x</s><n>U+{{row.startIndex}}</n></td>
|
||||
<template v-for="char in row.chars">
|
||||
<td class="{{char.name ? 'present' : 'missing'}}" title="{{char.name}}"><d v-if="char.isMark">◌</d>{{char.char}}</td>
|
||||
</template>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<script src="specimen.js"></script>
|
||||
</body>
|
||||
</html>
|
128
specimen.js
Normal file
128
specimen.js
Normal file
|
@ -0,0 +1,128 @@
|
|||
function padzero(s, n){
|
||||
while(s.length < n) s = '0' + s;
|
||||
return s;
|
||||
}
|
||||
var BLOCKSIZE = 16 * 4;
|
||||
var fonts = [
|
||||
[
|
||||
{name: 'iosevka-regular', cls: '', display: 'Iosevka'},
|
||||
{name: 'iosevka-bold', cls: 'bold', display: 'Iosevka Bold'},
|
||||
{name: 'iosevka-italic', cls:'italic', display: 'Iosevka Italic'},
|
||||
{name: 'iosevka-bolditalic', cls:'bold italic', display: 'Iosevka Bold Italic'}
|
||||
],
|
||||
[
|
||||
{name: 'iosevka-slab-regular', cls: 'slab', display: 'Iosevka Slab'},
|
||||
{name: 'iosevka-slab-bold', cls: 'slab bold', display: 'Iosevka Slab Bold'},
|
||||
{name: 'iosevka-slab-italic', cls:'slab italic', display: 'Iosevka Slab Italic'},
|
||||
{name: 'iosevka-slab-bolditalic', cls:'slab bold italic', display: 'Iosevka Slab Bold Italic'}
|
||||
],
|
||||
[
|
||||
{name: 'iosevkacc-regular', cls: 'cc', display: 'IosevkaCC'},
|
||||
{name: 'iosevkacc-bold', cls: 'cc bold', display: 'IosevkaCC Bold'},
|
||||
{name: 'iosevkacc-italic', cls:'cc italic', display: 'IosevkaCC Italic'},
|
||||
{name: 'iosevkacc-bolditalic', cls:'cc bold italic', display: 'IosevkaCC Bold Italic'}
|
||||
],
|
||||
[
|
||||
{name: 'iosevkacc-slab-regular', cls: 'cc slab', display: 'IosevkaCC Slab'},
|
||||
{name: 'iosevkacc-slab-bold', cls: 'cc slab bold', display: 'IosevkaCC Slab Bold'},
|
||||
{name: 'iosevkacc-slab-italic', cls:'cc slab italic', display: 'IosevkaCC Slab Italic'},
|
||||
{name: 'iosevkacc-slab-bolditalic', cls:'cc slab bold italic', display: 'IosevkaCC Slab Bold Italic'}
|
||||
]
|
||||
];
|
||||
var lipsums = ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur semper ipsum quam, at molestie libero euismod vitae. Etiam vehicula felis mi, et ultricies libero consequat at. Donec consequat, nunc id elementum tempor, lectus orci vulputate leo, eget lobortis lectus nulla sed orci. Donec in dolor non orci aliquet gravida. Nulla volutpat magna et nulla pretium, quis consequat nibh euismod. Suspendisse eget metus enim. Fusce vulputate scelerisque eros et consequat. Quisque dapibus accumsan augue, et semper lectus vehicula sit amet. Ut ornare venenatis tortor, non gravida tellus mattis interdum. In hac habitasse platea dictumst. Donec interdum commodo ex eu tincidunt. Curabitur non fermentum enim. Proin luctus orci ut commodo auctor. Pellentesque accumsan id sem eu semper. Sed non pharetra nibh. Vivamus mattis luctus arcu, a rutrum dui venenatis sit amet. aja ojo ojoined',
|
||||
'Troh tper es sos, bo slisxil spôrtjư uzx, cxital posteluf hrvatzem ili bi. Tenis lubôvijm roksăfnâvơi da din. Bo cxtir dajte lubim onă, dev ti silăju môrkva vecxer. Din om leto glfădju problêm. Sâm slơzxju răzumim vnimanie na, vsê ăzia kưdrju prôgram nô. Slôzxju zavoduf nơ den, hcê licơ sxkol toplju so. Vi knigis sidili polozxij bil, ne polnfju ovơcxjư dla, es ônâ mamâ pisajut mălôstis.',
|
||||
'Жят эним либриз аюдиам ад. Мыа ан одео нонумй опортэры, но дуо вэре эчжынт ыпикурэи. Ан вим алёквюам пыртенакж. Эжт но оратио факэтэ, дольорэ индоктум дыфинитеоным эжт ты.',
|
||||
'Κυεμ ορατιο δολορες υσυ εα, θε φιξ βωνορυμ σωνσεπθαμ, αδχυς δεφινιθιονεμ ιν εσθ. Υθ εσε ινιμισυς περ, περ ποσθυλανθ ινστρυσθιορ εα. Ναμ μυνδι θαθιων φερθερεμ νο, εσε ινερμις περφεσθο ετ μεα. Θε νες θωτα ρεφορμιδανς, ινερμις φασιλισις ετ σεα. Μελ λυδυς ταντας δελενιτι υθ, φις λιβερ σονγυε ηομερω ατ. Σεδ θριθανι συαφιθαθε γυβεργρεν ευ, ινθελλεγαμ συσιπιαντυρ δεφινιθιονεμ εα υσυ, ει κυο θαλε φερι ινθελλεγαμ. Φερο ασεντιορ θε μει, μαιορυμ γυβεργρεν αδ φιξ.'];
|
||||
var sampleSentences = [
|
||||
{code: 'en', lang: 'English', sample: 'Shaw, those twelve beige hooks are joined if I patch a young, gooey mouth.'},
|
||||
{lang: 'Powerline', sample: '<span style="background:black;color:white"> NORMAL </span><span style="background:#ccc;color:black;font-style:normal">\uE0B0</span><span style="background:#ccc;color:black"> <span style="font-style:normal">\uE0A0</span> master <span style="font-style:normal">\uE0B1</span> glyphs/powerline.patel </span><span style="background:#eee;color:#ccc;font-style:normal">\uE0B0</span><span style="background:#eee;color:#555"> dos <span style="font-style:normal">\uE0B3</span> utf-8 <span style="font-style:normal">\uE0B3</span> PatEL </span><span style="background:#eee;color:#ccc;font-style:normal">\uE0B2</span><span style="background:#ccc;color:black"> 2% </span><span style="background:#ccc;color:black;font-style:normal">\uE0B2</span><span style="color:white;background:black"> \uE0A1 1:1 </span>'},
|
||||
{lang: 'IPA', sample: '[ɢʷɯʔ.nas.doːŋ.kʰlja] [ŋan.ȵʑi̯wo.ɕi̯uĕn.ɣwa]'},
|
||||
{code: 'bg', lang: 'Bulgarian', sample: 'Я, пазачът Вальо уж бди, а скришом хапва кюфтенца зад щайгите.'},
|
||||
{code: 'cs', lang: 'Czech', sample: 'Nechť již hříšné saxofony ďáblů rozezvučí síň úděsnými tóny waltzu, tanga a quickstepu.'},
|
||||
{code: 'fi', lang: 'Finnish', sample: 'Charles Darwin jammaili Åken hevixylofonilla Qatarin yöpub Zeligissä.'},
|
||||
{code: 'fr', lang: 'French', sample: 'Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwi.'},
|
||||
{code: 'de', lang: 'German', sample: 'Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich.'},
|
||||
{code: 'el', lang: 'Greek', sample: 'Ταχίστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός.'},
|
||||
{code: 'el', lang: 'Ancient Greek', sample: 'Ἄδμηθ’, ὁρᾷς γὰρ τἀμὰ πράγμαθ\' ὡς ἔχει, λέξαι θέλω σοι πρὶν θανεῖν ἃ βούλομαι. '},
|
||||
{code: 'hu', lang: 'Hungarian', sample: 'Jó foxim és don Quijote húszwattos lámpánál ülve egy pár bűvös cipőt készít.'},
|
||||
{code: 'is', lang: 'Icelandic', sample: 'Kæmi ný öxi hér, ykist þjófum nú bæði víl og ádrepa.'},
|
||||
{code: 'ga', lang: 'Irish', sample: 'Ċuaiġ bé ṁórṡáċ le dlúṫspád fíorḟinn trí hata mo ḋea-ṗorcáin ḃig.'},
|
||||
{code: 'lv', lang: 'Latvian', sample: 'Muļķa hipiji mēģina brīvi nogaršot celofāna žņaudzējčūsku.'},
|
||||
{code: 'lt', lang: 'Lithuanian', sample: 'Įlinkdama fechtuotojo špaga sublykčiojusi pragręžė apvalų arbūzą.'},
|
||||
{code: 'mk', lang: 'Macedonian', sample: 'Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех.'},
|
||||
{code: 'nb', lang: 'Norwegian', sample: 'Jeg begynte å fortære en sandwich mens jeg kjørte taxi på vei til quiz'},
|
||||
{code: 'pl', lang: 'Polish', sample: 'Pchnąć w tę łódź jeża lub ośm skrzyń fig.'},
|
||||
{code: 'pt', lang: 'Portuguese', sample: 'Luís argüia à Júlia que «brações, fé, chá, óxido, pôr, zângão» eram palavras do português.'},
|
||||
{code: 'ro', lang: 'Romanian', sample: 'Înjurând pițigăiat, zoofobul comandă vexat whisky și tequila.'},
|
||||
{code: 'ru', lang: 'Russian', sample: 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства.'},
|
||||
{code: 'sr', lang: 'Serbian', sample: 'Ајшо, лепото и чежњо, за љубав срца мога дођи у Хаџиће на кафу.', comment:' # Yes, we have Serbian variants!'},
|
||||
{code: 'es', lang: 'Spainish', sample: 'Benjamín pidió una bebida de kiwi y fresa; Noé, sin vergüenza, la más exquisita champaña del menú.'},
|
||||
{code: 'tr', lang: 'Turkish', sample: 'Pijamalı hasta yağız şoföre çabucak güvendi.'},
|
||||
{code: 'uk', lang: 'Ukranian', sample: 'Чуєш їх, доцю, га? Кумедна ж ти, прощайся без ґольфів!'}
|
||||
]
|
||||
|
||||
var display = new Vue({
|
||||
el: '#display',
|
||||
data: {
|
||||
charsHTML: '',
|
||||
lipsums: [], //lipsums,
|
||||
samples: (function(ss){
|
||||
var langlen = 0;
|
||||
for(var j = 0; j < ss.length; j++){ if(ss[j].lang.length > langlen) langlen = ss[j].lang.length };
|
||||
for(var j = 0; j < ss.length; j++){ ss[j].spaces = new Array(langlen - ss[j].lang.length + 2).join(' ') };
|
||||
return ss;
|
||||
})(sampleSentences),
|
||||
currentFont: fonts[0][0],
|
||||
waterfall: [36, 28, 24, 20, 18, 16, 14, 12, 11, 10],
|
||||
sampleRows: []
|
||||
},
|
||||
ready: function(){
|
||||
this.$http.get('assets/' + this.currentFont.name + '.charmap', function(data){
|
||||
var rows = [];
|
||||
var row = null;
|
||||
var uhash = [];
|
||||
var whash = [];
|
||||
for(var j = 0; j < data.length; j++) {
|
||||
var unicodes = data[j][1];
|
||||
if(unicodes && unicodes.length) for(var k = 0; k < unicodes.length; k++){
|
||||
uhash[unicodes[k]] = data[j][0].trim()
|
||||
whash[unicodes[k]] = data[j][2]
|
||||
}
|
||||
}
|
||||
for(var block = 0; block < (65536 / BLOCKSIZE); block++) {
|
||||
var hasGlyphInThisBlock = false;
|
||||
for(j = block * BLOCKSIZE; j < (block + 1) * BLOCKSIZE; j++) if(uhash[j]){
|
||||
hasGlyphInThisBlock = true;
|
||||
}
|
||||
if(hasGlyphInThisBlock) {
|
||||
for(j = block * BLOCKSIZE; j < (block + 1) * BLOCKSIZE; j++) {
|
||||
if(j % 16 === 0) {
|
||||
if(row) rows.push(row);
|
||||
row = {startIndex : padzero(j.toString(16).toUpperCase(), 4), chars: []}
|
||||
};
|
||||
row.chars.push({
|
||||
name: uhash[j],
|
||||
char: (whash[j] ? '\u25CC' : '') + String.fromCharCode(j),
|
||||
isMark: whash[j]
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
if(row) rows.push(row);
|
||||
this.sampleRows = rows;
|
||||
});
|
||||
}
|
||||
});
|
||||
var picker = new Vue({
|
||||
el: '#picker',
|
||||
data: {
|
||||
fonts: fonts,
|
||||
current: fonts[0][0]
|
||||
},
|
||||
methods: {
|
||||
choose: function(item){
|
||||
this.current = item;
|
||||
display.currentFont = item;
|
||||
}
|
||||
}
|
||||
});
|
8
vue-1.0.4.min.js
vendored
8
vue-1.0.4.min.js
vendored
File diff suppressed because one or more lines are too long
7
vue-resource.min.js
vendored
Normal file
7
vue-resource.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
8
vue.min.js
vendored
Normal file
8
vue.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user