├── .gitignore
├── logo2.png
├── slidy2
├── graphics
│ ├── bullet.gif
│ ├── bullet.png
│ ├── face1.gif
│ ├── face2.gif
│ ├── face3.gif
│ ├── face4.gif
│ ├── fold.gif
│ ├── unfold.gif
│ ├── example.png
│ ├── fold-dim.gif
│ ├── bullet-fold.gif
│ ├── bullet-fold.png
│ ├── fold-bright.gif
│ ├── icon-blue.png
│ ├── nofold-dim.gif
│ ├── unfold-dim.gif
│ ├── bullet-nofold.gif
│ ├── bullet-nofold.png
│ ├── bullet-unfold.gif
│ ├── bullet-unfold.png
│ ├── unfold-bright.gif
│ ├── w3c-logo-blue.gif
│ ├── bullet-fold-dim.gif
│ ├── bullet-fold-dim.png
│ ├── w3c-logo-white.gif
│ ├── bullet-nofold-dim.gif
│ ├── bullet-nofold-dim.png
│ ├── bullet-unfold-dim.gif
│ └── bullet-unfold-dim.png
├── blank.html
├── styles
│ ├── print.css
│ ├── slidy.css
│ └── w3c-blue.css
├── scripts
│ └── img.srcset.js
└── Overview.html
├── gitadd.nim
├── readme.md
├── bintrees_gcs.nim
├── bintrees_manual.nim
├── bintrees_pools.nim
├── nimdoc.cfg
├── move_semantics.rst
└── nimdoc.out.css
/.gitignore:
--------------------------------------------------------------------------------
1 | nimcache/
2 | nimblecache/
3 | htmldocs/
4 |
--------------------------------------------------------------------------------
/logo2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/logo2.png
--------------------------------------------------------------------------------
/slidy2/graphics/bullet.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet.png
--------------------------------------------------------------------------------
/slidy2/graphics/face1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/face1.gif
--------------------------------------------------------------------------------
/slidy2/graphics/face2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/face2.gif
--------------------------------------------------------------------------------
/slidy2/graphics/face3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/face3.gif
--------------------------------------------------------------------------------
/slidy2/graphics/face4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/face4.gif
--------------------------------------------------------------------------------
/slidy2/graphics/fold.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/fold.gif
--------------------------------------------------------------------------------
/slidy2/graphics/unfold.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/unfold.gif
--------------------------------------------------------------------------------
/slidy2/graphics/example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/example.png
--------------------------------------------------------------------------------
/slidy2/graphics/fold-dim.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/fold-dim.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-fold.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-fold.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-fold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-fold.png
--------------------------------------------------------------------------------
/slidy2/graphics/fold-bright.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/fold-bright.gif
--------------------------------------------------------------------------------
/slidy2/graphics/icon-blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/icon-blue.png
--------------------------------------------------------------------------------
/slidy2/graphics/nofold-dim.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/nofold-dim.gif
--------------------------------------------------------------------------------
/slidy2/graphics/unfold-dim.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/unfold-dim.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-nofold.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-nofold.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-nofold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-nofold.png
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-unfold.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-unfold.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-unfold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-unfold.png
--------------------------------------------------------------------------------
/slidy2/graphics/unfold-bright.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/unfold-bright.gif
--------------------------------------------------------------------------------
/slidy2/graphics/w3c-logo-blue.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/w3c-logo-blue.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-fold-dim.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-fold-dim.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-fold-dim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-fold-dim.png
--------------------------------------------------------------------------------
/slidy2/graphics/w3c-logo-white.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/w3c-logo-white.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-nofold-dim.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-nofold-dim.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-nofold-dim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-nofold-dim.png
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-unfold-dim.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-unfold-dim.gif
--------------------------------------------------------------------------------
/slidy2/graphics/bullet-unfold-dim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pietroppeter/fosdem2020/master/slidy2/graphics/bullet-unfold-dim.png
--------------------------------------------------------------------------------
/gitadd.nim:
--------------------------------------------------------------------------------
1 |
2 | import os, strutils
3 |
4 | const
5 | extensions = [".js", ".html", ".css", ".gif", ".png"]
6 |
7 | proc exec(cmd: string) =
8 | if execShellCmd(cmd) != 0:
9 | echo "failed ", cmd
10 |
11 | for f in walkDirRec(paramStr(1)):
12 | for x in extensions:
13 | if f.endsWith(x):
14 | exec "git add " & f
15 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # fosdem2020
2 | Slides and source code for my FOSDEM 2020 talk "Nim - Move semantics".
3 |
4 | # Build
5 |
6 | To build the slides run ``nim c -r build.nim``.
7 |
8 | # Benchmarks
9 |
10 | To compile the benchmarks use these commands:
11 |
12 | ```
13 | nim c -d:danger --gc:markAndSweep bintrees_gcs.nim
14 | nim c -d:danger --gc:boehm bintrees_gcs.nim
15 | nim c -d:danger --gc:refc bintrees_gcs.nim
16 | nim c -d:danger --gc:arc bintrees_gcs.nim
17 | nim c -d:danger --gc:arc bintrees_manual.nim
18 | nim c -d:danger --gc:arc bintrees_pools.nim
19 | ```
20 |
--------------------------------------------------------------------------------
/slidy2/blank.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 | = x.cap: resize(x)
536 | x.data[x.len] = y
537 | inc x.len
538 |
539 | proc `[]`*[T](x: myseq[T]; i: Natural): lent T =
540 | assert i < x.len
541 | x.data[i]
542 |
543 | proc `[]=`*[T](x: var myseq[T]; i: Natural; y: sink T) =
544 | assert i < x.len
545 | x.data[i] = y
546 |
547 |
548 |
549 | Object pooling
550 | ==============
551 |
552 | .. code-block::nim
553 | :number-lines:
554 |
555 | include prelude
556 |
557 | type
558 | NodeObj = object
559 | le, ri: Node
560 | Node = ptr NodeObj
561 |
562 | PoolNode = object
563 | next: ptr PoolNode
564 | elems: UncheckedArray[NodeObj]
565 |
566 | Pool = object
567 | len: int
568 | last: ptr PoolNode
569 | lastCap: int
570 |
571 |
572 | Object pooling (2)
573 | ==================
574 |
575 | .. code-block::nim
576 | :number-lines:
577 |
578 | proc `=`(dest: var Pool; src: Pool) {.error.}
579 |
580 | proc `=destroy`(p: var Pool) =
581 | var it = p.last
582 | while it != nil:
583 | let next = it.next
584 | dealloc(it)
585 | it = next
586 | p.len = 0
587 | p.lastCap = 0
588 | p.last = nil
589 |
590 |
591 | Object pooling (3)
592 | ==================
593 |
594 | .. code-block::nim
595 | :number-lines:
596 |
597 | proc newNode(p: var Pool): Node =
598 | if p.len >= p.lastCap:
599 | if p.lastCap == 0: p.lastCap = 4
600 | elif p.lastCap < 65_000: p.lastCap *= 2
601 | var n = cast[ptr PoolNode](alloc(sizeof(PoolNode) + p.lastCap * sizeof(NodeObj)))
602 | n.next = nil
603 | n.next = p.last
604 | p.last = n
605 | p.len = 0
606 | result = addr(p.last.elems[p.len])
607 | inc p.len
608 |
609 |
610 | Object pooling (4)
611 | ==================
612 |
613 | .. code-block::nim
614 | :number-lines:
615 |
616 | proc checkTree(n: Node): int =
617 | if n.le == nil: 1
618 | else: 1 + checkTree(n.le) + checkTree(n.ri)
619 |
620 | proc makeTree(p: var Pool; depth: int): Node =
621 | result = newNode(p)
622 | if depth == 0:
623 | result.le = nil
624 | result.ri = nil
625 | else:
626 | result.le = makeTree(p, depth-1)
627 | result.ri = makeTree(p, depth-1)
628 |
629 |
630 |
631 | Object pooling (5)
632 | ==================
633 |
634 | .. code-block::nim
635 | :number-lines:
636 |
637 | proc main =
638 | let maxDepth = parseInt(paramStr(1))
639 | const minDepth = 4
640 | let stretchDepth = maxDepth + 1
641 | var longLived: Pool
642 | let stree = makeTree(longLived, stretchDepth)
643 | echo("stretch tree of depth ", stretchDepth, "\t check:",
644 | checkTree stree)
645 | let longLivedTree = makeTree(longLived, maxDepth)
646 | var iterations = 1 shl maxDepth
647 | for depth in countup(minDepth, maxDepth, 2):
648 | var check = 0
649 | for i in 1..iterations:
650 | var shortLived: Pool
651 | check += checkTree(makeTree(shortLived, depth))
652 | echo iterations, "\t trees of depth ", depth, "\t check:", check
653 | iterations = iterations div 4
654 |
655 | main()
656 |
657 |
658 | Benchmark: Throughput
659 | =====================
660 |
661 | ============================== ============== =============
662 | Memory management strategy Time Peak Memory
663 | ============================== ============== =============
664 | mark&sweep GC 17s 588.047MiB
665 | deferred refcounting GC 16s 304.074MiB
666 | Boehm GC 12s N/A
667 | ARC 7.8s 740.715MiB
668 | manual memory management 6.75s 473.195MiB
669 | object pooling **2.4s** 251.504MiB
670 | ============================== ============== =============
671 |
672 |
673 | ..
674 | - Channel.
675 | - Areas where it's benefitial
676 | - Talk about the danger of "move only" types.
677 |
678 |
679 | ..
680 | Multi threading
681 | ===============
682 |
683 | - Explain "reference counting"
684 | -- "counting" --> "control"
685 | -- "reference" --> "aliases"
686 | --> "reference counting" is "alias control"
687 | --> a graph is "isolated" when no external references
688 | exist.
689 | --> connection to trial deletion
690 |
691 | "Using Nim as the better C++"
692 |
693 | Write barrier for atomic reference counting:
694 |
695 | assign(value):
696 | if value: incRef(value)
697 | tmp = value
698 | atomicSwap(root.ref, tmp)
699 | if tmp != nil and decRef(tmp) == 0:
700 | free(tmp)
701 |
702 |
703 |
704 | Summary
705 | =======
706 |
707 | - Move semantics mostly work under the hood.
708 | - ``sink`` and ``lent`` annotations are optional.
709 | - Lead to incredible speedups and algorithmic improvements.
710 | - Make Nim faster and "deterministic".
711 | - New strategy improves:
712 |
713 | - throughput
714 | - latency
715 | - memory consumption
716 | - threading
717 | - ease of programming
718 | - flexibility / composition
719 |
720 |
721 |
722 | Happy hacking!
723 | ==============
724 |
725 | Source code available under https://github.com/araq/fosdem2020.
726 |
727 | ============ ================================================
728 | Website https://nim-lang.org
729 | Forum https://forum.nim-lang.org
730 | Github https://github.com/nim-lang/Nim
731 | IRC irc.freenode.net/nim
732 | ============ ================================================
733 |
734 |
--------------------------------------------------------------------------------
/slidy2/Overview.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
7 | HTML Slidy
8 |
9 |
11 |
12 |
13 |
14 |
15 |
17 |
18 |
19 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
45 |
HTML Slidy: Slide Shows in HTML and XHTML
46 |
47 |
Dave Raggett ,
48 | <dsr@w3.org >
49 |
50 |
51 |
52 | Hit the space bar or swipe left for next slide
53 |
54 |
55 |
56 |
Slide Shows in HTML and XHTML
57 |
58 |
59 | You can now create accessible slide shows with ease
60 |
61 | Works across browsers and is operated like PowerPoint
62 |
63 |
64 | Advance to next slide with mouse click, space bar or swipe left
65 |
66 | Move forward/backward between slides with Cursor Left,
67 | Cursor Right, Pg Up and Pg Dn
68 | keys, or swipe left or right
69 |
70 | Home key for first slide, End
71 | key for last slide
72 |
73 | The "C " key for an automatically generated
74 | table of contents, or click on "contents" on the toolbar or
75 | swipe up or down
76 |
77 | Function F11 to go full screen and back
78 |
79 | The "F " key toggles the display of the footer
80 |
81 | The "A " key toggles display of current vs all
82 | slides
83 |
84 |
85 | Try it now to see how to include notes for handouts (this is
86 | explained in the notes following this slide)
87 |
88 |
89 |
90 | Font sizes automatically adapt to browser window size
91 |
92 |
93 | use S and B keys for
94 | manual control (or < and >, or the - and
95 | + keys on the number pad
96 | Use CSS to set a relative font size on a given slide to make
97 | the content bigger or smaller than on other slides
98 |
99 |
100 |
101 | Switching off JavaScript reveals all slides
102 |
103 |
104 |
105 | Now move to next slide to see how it works
106 |
107 |
108 |
Copyright © 2005-2010 W3C ®
112 | (MIT , ERCIM ,
116 | Keio ), All Rights
117 | Reserved.
118 |
119 |
120 |
121 |
For handouts, its often useful to include extra notes using a
122 | div element with class="handout" following each slide, as in:
123 |
124 |
125 | <div class="slide">
126 | ... your slide content ...
127 | </div>
128 |
129 | <div class="handout">
130 | ... stuff that only appears in the handouts ...
131 | </div>
132 |
133 |
134 |
135 |
136 |
What you need to do
137 |
138 |
139 | Each presentation is a single XHTML file
140 |
141 | Each slide is enclosed in <div class="slide"> ...
142 | </div>
143 |
144 |
145 | The div element will be created automatically for h1
146 | elements that are direct children of the body element.
147 |
148 |
149 |
150 |
151 | Use regular markup within each slide
152 |
153 | The document head includes two links:
154 |
169 |
170 |
171 |
172 |
173 | <?xml version="1.0" encoding="utf-8"?>
174 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
175 | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
176 | <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
177 | <head>
178 | <title>Slide Shows in XHTML</title>
179 | <meta name="copyright"
180 | content="Copyright © 2005 your copyright notice" />
181 | <link rel="stylesheet" type="text/css" media="screen, projection, print"
182 | href="http://www.w3.org/Talks/Tools/Slidy2/styles/slidy.css" />
183 | <script src="http://www.w3.org/Talks/Tools/Slidy2/scripts/slidy.js"
184 | charset="utf-8" type="text/javascript"></script>
185 | <style type="text/css">
186 | <!-- your custom style rules -->
187 | </style>
188 | </head>
189 | <body>
190 | ... your slides marked up in XHTML ...
191 | </body>
192 | </html>
193 |
194 |
195 |
196 |
197 |
To get the W3C Blue Style
198 |
199 |
The head element should include the following link to the style
200 | sheet:
201 |
202 |
203 | <link rel="stylesheet" type="text/css" media="screen, projection, print"
204 | href="http://www.w3.org/Talks/Tools/Slidy2/styles/w3c-blue.css" />
205 |
206 |
207 |
The body element's content should start with the following
208 | markup:
209 |
210 |
211 | <div class="background">
212 | <img id="head-icon" alt="graphic with four colored squares"
213 | src="http://www.w3.org/Talks/Tools/Slidy2/graphics/icon-blue.png" />
214 | <object id="head-logo" title="W3C logo" type="image/svg+xml"
215 | data="http://www.w3.org/Talks/Tools/Slidy2/graphics/w3c-logo-white.svg"><img
216 | src="http://www.w3.org/Talks/Tools/Slidy2/graphics/w3c-logo-white.gif"
217 | alt="W3C logo" id="head-logo-fallback" /></object>
218 | </div>
219 |
220 |
221 |
This adds the logos on the top left and right corners of the
222 | slide.
223 |
224 |
You are of course welcome to create your own slide designs.
225 | You can provide different styles and backgrounds for
226 | different slides (more details later).
227 |
228 |
Use the meta element with name="copyright"
229 | for use in the slide show footer:
230 |
231 |
232 | <meta name="copyright"
233 | content="Copyright © 2005-2009 W3C (MIT, ERCIM, Keio)" />
234 |
235 |
236 |
237 |
238 |
Upgrading from previous versions of Slidy
239 |
240 |
241 | This uses a new version of the HTML Slidy script
242 | It is designed to work better with other scripts,
243 | e.g. for UI controls within your slides
244 |
245 | Only adds one global name "w3c_slidy"
246 | Doesn't interfere with other scripts that set event handers
247 | such as onload on body element
248 |
249 |
250 | Works for slides delivered as text/html and application/xhtml+xml
251 | New presentation timer feature
252 | Initial prompt on first slide to help newcomers to Slidy
253 | Better support for styling slides and printing them
254 | Requires additional style rules, so new script won't work
255 | with old presentations without changes to their style sheets
256 |
260 |
261 | But old presentations will work unchanged as they refer to
262 | the old script!
263 |
264 |
265 |
266 |
267 |
To use it off-line
268 |
269 |
270 | You can download slidy.zip and unzip
271 | it to create a Slidy directory on your machine
272 |
273 | If you have cvs access to the W3C site you can check out the Slidy
274 | directory
275 |
276 | Remember to periodically check for updates
277 |
278 | You then have two choices:
279 |
280 |
281 | Use relative URIs depending on your local setup to access the
282 | appropriate files. Use the same directory structure as on the W3C
283 | server, ie, ".../2005/Talks/...".
284 |
285 | Run a Web server on your machine so that the directory above
286 | can be accessed via http://localhost/Talks/Tools/Slidy2
287 | and use the URIs of the form "/Talks/Tools/Slidy2/styles/slidy.css",
288 | "/Talks/Tools/Slidy2/scripts/slidy.js".
289 |
290 |
291 | In both cases you can then publish your files on the W3C server
292 | unchanged.
293 |
294 | NOTE Internet Explorer on Windows XP now disables
295 | scripting for web pages loaded directly from the local file system,
296 | a work around is to use another browser, e.g. Firefox or Opera
297 |
298 | Please feel free to create your own designs, and help us to build
299 | a gallery of Slidy styles.
300 |
301 | My Google TechTalk (1st Feb 2006)
302 | uses a notebook themed style
303 |
304 |
305 |
306 |
307 |
Timing Your Presentation
308 |
309 |
322 |
323 |
324 |
325 |
326 |
327 |
Generate a Title Page
328 |
329 |
If you want a separate title page with the W3C blue style, the
330 | first slide should be as follows:
331 |
332 |
333 | <div class="slide cover">
334 | <img src="http://www.w3.org/Talks/Tools/Slidy2/graphics/keys.jpg"
335 | alt="Cover page images (keys)" class="cover" />
336 | <br clear="all" />
337 | <h1>HTML Slidy: Slide Shows in XHTML</h1>
338 | <p><a href="http://www.w3.org/People/Raggett/">Dave Raggett,</a>
339 | <a href="mailto:dsr@w3.org">dsr@w3.org</a></p>
340 | </div>
341 |
342 |
343 |
The w3c-blue.css
345 | style sheet looks for the classes "slide" and "cover" on div
346 | and img elements using the CSS selector div.slide.cover
347 |
348 |
This technique can be used to assign your slides to different
349 | classes with a different appearence for each such class.
350 |
351 |
Slidy also allows you to use different background markup for
352 | different slides, based upon shared class names, as in "foo" below.
353 | Backgrounds without additional class names are always shown except
354 | when the slide isn't transparent. You may need to tweak your
355 | custom style sheet.
356 |
357 |
358 | <div class="background foo">
359 | ... background content ...
360 | <div>
361 |
362 | ...
363 |
364 | <div class="slide foo">
365 | ... slide content ...
366 | <div>
367 |
368 |
369 |
370 |
371 |
Incremental display of slide contents
372 |
373 |
For incremental display, use class="incremental", for
374 | instance:
375 |
376 |
377 | First bullet point
378 |
379 | Second bullet point
380 |
381 | Third bullet point
382 |
383 |
384 |
which is marked up as follows:
385 |
386 |
387 | <ul class="incremental">
388 | <li>First bullet point</li>
389 | <li>Second bullet point</li>
390 | <li>Third bullet point</li>
391 | </ul>
392 |
393 | <p class="incremental">which is marked up as follows:</p>
394 |
395 | <pre class="incremental">
396 | ...
397 | </pre>
398 |
399 |
400 |
411 |
412 |
413 |
414 |
Create outline lists with hidden content
415 |
416 |
You can make your bullet points or numbered list items
417 | into outlines that you can expand or collapse
418 |
419 |
420 | Just add class="outline" to the ul or ol
421 | element. Click on this list item for more details.
422 |
423 |
424 | The Slidy script will then treat the list
425 | as an outline list.
426 | Clicking on outline list items will expand/collapse
427 | block-level elements within that list item.
428 | Click on the above to make this list item
429 | collapse again.
430 |
431 |
432 | Users will then see expand/collapse icons as appropriate
433 | and may click anywhere on the list item to change its state.
434 | This particular list item can't be expanded or collapsed.
435 | Add class="expand" to any li elements that
436 | you want to start in an expanded state.
437 |
438 |
439 | By default Slidy hides all the block level elements within the
440 | outline list items unless you have specified class="expand".
441 | Such pre-expanded items can be collapsed by clicking on them.
442 |
443 |
444 | Note expand/collapse icon highlighting requires browser
445 | support for :hover which isn't supported by IE6.
446 |
447 |
448 | Microsoft says it will be supported by IE7 along with
449 | many fixes for other CSS woes in IE6.
450 |
451 |
452 |
453 |
454 |
455 | <ol class='outline'>
456 | <!-- topic 1 starts collapsed -->
457 | <li>Topic 1
458 | <ol>
459 | <li>subtopic a</li>
460 | <li>subtopic b</li>
461 | </ol>
462 | </li>
463 | <!-- topic 2 starts expanded -->
464 | <li class="expand">Topic 2
465 | <ol>
466 | <li>subtopic c</li>
467 | <li>subtopic d</li>
468 | </ol>
469 | </li>
470 | </ol>
471 |
472 |
473 |
474 |
475 |
476 |
Make your images scale with the browser window size
477 |
478 |
For adaptive layout, use percentage widths on images, together
479 | with CSS positioning:
480 |
481 |
482 | CSS positioning is simpler and more reliable than using
483 | tables
484 |
485 |
486 |
487 | <div class="slide">
488 | <h1>Analysts - "Open standards programming will become
489 | mainstream, focused around VoiceXML"</h1>
490 | <!-- use CSS positioning and scaling for adaptive layout -->
491 | <img src="trends.png" width="50%" style="float:left"
492 | alt="projected growth of VoiceXML" />
493 |
494 | <blockquote style="float:right;width: 35%">
495 | VoiceXML will dominate the voice environment, due to its
496 | flexibility and eventual multimodal capabilities
497 | </blockquote><br clear="all" />
498 |
499 | <p style="text-align:center">Source Data Monitor, March
500 | 2004</p>
501 | </div>
502 |
503 |
504 |
To work around a CSS rendering bug in IE relating
505 | to margins, you can set display:inline on floated elements.
506 |
507 |
508 |
509 |
Incremental display of layered images
510 |
511 |
These can be marked up using CSS relative positioning, e.g.
512 |
513 |
514 | <div class="incremental"
515 | style="margin-left: 4em; position: relative">
516 | <img src="graphics/face1.gif" alt="face"
517 | style="position: static; vertical-align: bottom"/>
518 | <img src="graphics/face2.gif" alt="eyes"
519 | style="position: absolute; left: 0; top: 0" />
520 | <img src="graphics/face3.gif" alt="nose"
521 | style="position: absolute; left: 0; top: 0" />
522 | <img src="graphics/face4.gif" alt="mouth"
523 | style="position: absolute; left: 0; top: 0" />
524 | </div>
525 |
526 |
527 |
You should also use transparent GIF
528 | images to avoid the IE/Win bug for alpha channel in PNG. A fix is
529 | expected in IE 7. A work around is
531 | available on skyzyx.com. My thanks to ACID2 for the
533 | graphics.
534 |
535 |
543 |
544 |
545 |
546 |
How to center content vertically and horizontally
547 |
548 |
549 |
Within the div element for your slide:
550 |
551 | <div class="vbox"></div>
552 | <div class="hbox">
553 | Place the content here
554 | </div>
555 |
556 |
and style it with the following:
557 |
558 | div.vbox {
559 | float: left;
560 | height: 40%; width: 50%;
561 | margin-top: -220px;
562 | }
563 | div.hbox {
564 | width:60%; margin-top: 0;
565 | margin-left:auto; margin-right:auto;
566 | height: 60%;
567 | border:1px solid silver;
568 | background:#F0F0F0;
569 | overflow:auto;
570 | text-align:left;
571 | clear:both;
572 | }
573 |
574 |
575 |
The above styling is included in w3c-blue.css ,
576 | which is designed to be used with slidy.css , but you
577 | are encouraged to develop your own style sheet with your own look and feel.
578 |
579 |
580 |
581 |
582 |
Include SVG Content
583 |
584 |
Inclusion of SVG content can be done using the object element,
585 | for example:
586 |
587 |
591 |
592 |
has been achieved by:
593 |
594 |
595 | <object data="graphics/example.svg" type="image/svg+xml"
596 | width="50%" height="10%" title="Indian Office logo">
597 | <img src="graphics/example.png" width="50%"
598 | alt="Indian Office logo" />
599 | </object>
600 |
601 |
602 |
This ensures that the enclosed png is displayed when the browser
603 | has no plugin installed or can't display SVG directly. Providing
604 | such a fall back is very important! Don't forget the alt text for
605 | people who can't see the image.
606 |
607 |
However, there are caveats, see the next slide!
608 |
609 |
610 |
611 |
Caveats with SVG+object
612 |
613 |
Adobe has recently withdrawn support for its SVG Viewer, so you are
614 | recommended to consider alternatives .
616 | If you still using the Adobe SVG viewer you should be aware of bugs
617 | when using the it with IE, Namely:
618 |
619 |
620 | Most modern browsers generally support SVG SVG Tiny 1.1 or better
621 | natively without the need for a plugin
622 |
623 | If you need to use Internet Explorer you are advised to upgrade
624 | to IE9 which includes native support for SVG.
625 |
626 | Patches to Internet Explorer mean that the Adobe SVG Viewer
627 | version 3.03 no longer works with IE6. You are therefore recommended
628 | to uninstall version 3.03 and instead install Adobe SVG Viewer
630 | 6.0 preview if this is available to to you.
631 |
632 | IE6 makes a copy of the SVG file on the local disc
633 | when displaying it; but doesn't pass the original URI to the plugin
634 |
635 | As a result relative references from within the SVG to external
636 | resources (scripts, CSS, images, other SVG) will break.
637 |
638 | The work around is to use absolute references within your SVG.
639 |
640 | On Windows, the Adobe SVG plugin doesn't respect the CSS z-index
641 | property, and if used on backgrounds will always show through other
642 | content
643 |
644 |
645 |
646 |
647 |
Additional Remarks
648 |
649 |
713 |
714 |
715 |
716 |
Localization and automatic translation
717 |
718 |
Slidy now includes support for localization
719 |
720 | "es":this.strings_es,
721 | "ca":this.strings_ca,
722 | "cs":this.strings_cs,
723 | "nl":this.strings_nl,
724 | "de":this.strings_de,
725 | "pl":this.strings_pl,
726 | "fr":this.strings_fr,
727 | "hu":this.strings_hu,
728 | "it":this.strings_it,
729 | "el":this.strings_el,
730 | "jp":this.strings_ja,
731 | "zh":this.strings_zh,
732 | "ru":this.strings_ru,
733 | "sv":this.strings_sv
734 |
735 |
736 | The tool bar is localized according to the language of the presentation
737 | This is taken from the xml:lang or lang attributes on the html element
738 | The help file is
739 | selected based upon your browser's language preferences
740 | As of 29th July 2010, the languages supported are: English,
741 | Spanish, Catalonian, Czech, Dutch, German, Polish, French,
742 | Hungarian, Italian, Greek, Japanese, Chinese, Russian and
743 | Swedish
744 | If you would like to contribute localizations for other languages,
745 | please get in touch with Dave Raggett <dsr@w3.org>
746 | The following illustrates what was used for Spanish
747 |
748 |
749 | // for each language there is an associative array
750 | strings_es: {
751 | "slide":"pág.",
752 | "help?":"Ayuda",
753 | "contents?":"Índice",
754 | "table of contents":"tabla de contenidos",
755 | "Table of Contents":"Tabla de Contenidos",
756 | "restart presentation":"Reiniciar presentación",
757 | "restart?":"Inicio"
758 | },
759 | help_es:
760 | "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " +
761 | "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.",
762 |
763 |
764 |
Note: Slidy now works with current slides translated into French . Use
766 | right mouse button to open frame without Google header. To disable
767 | automatic translation of the content of particular elements add
768 | class="notranslate", see breaking the language barrier .
769 |
770 |
771 |
772 |
Future Plans
773 |
774 |
Recent additions have included a table of contents, and a way to
775 | hide and reveal content in the spirit of outline lists. The
776 | script has been rewritten to make it easier to combine with other
777 | scripts, e.g. for UI controls, and support swipes for navigation on
778 | touch screen devices. Further work is anticipated on the
779 | following:
780 |
781 |
782 | Collecting a gallery of good looking slide themes
783 |
784 | Opportunities for graphics designers!
785 |
786 |
787 | Bob Ferris has worked on a
789 | number of UI extensions which could be incorporated into the
790 | W3C slidy script.
791 | Getting SVG Tiny to work on IE without need for SVG plugin
792 |
793 | Using scripts to dynamically convert SVG Tiny to VML
794 | Note that IE9 introduces native SVG support, so it may
795 | no longer be worth working on SVG to VML for rendering of SVG
796 |
797 |
798 | Pre-alpha version of wysiwyg slide editor (see screenshot )
800 |
801 | Using contentEditable when available, otherwise
802 | falling back to textarea and plain text conventions
803 | Using XMLHttpRequest to dynamically reflect changes to server
804 |
805 |
806 | Mechanism for remotely driving Slidy as part of distributed meetings
807 |
808 | Using XMLHttpRequest to listen for navigation commands
809 | Using VoIP for accompanying audio and teleconferencing
810 | Synchronizing recorded spoken presentation with currently viewed slide
811 |
812 |
813 | Filters from PowerPoint and Open Office
814 |
817 |
818 |
819 |
820 |
If you have comments, suggestions for improvements, or would
821 | like to volunteer your help with further work on Slidy,
822 | please contact Dave Raggett <dsr@w3.org >
825 |
826 |
827 |
828 |
Acknowledgements
829 |
830 |
831 | My thanks to everyone who sent in bug reports and feature
832 | requests
833 | Opera Software for implementing CSS @media projection and
834 | promoting the idea of using the Web for presentations with
835 | Opera
836 | Show
837 | Tantek Çelik for his
838 | pioneering work on applying JavaScript for slide presentations on
839 | other browsers
840 | Eric Meyer for taking this further with the excellent S5
842 | W3C's slidemaker
843 | tool , which uses a perl script to split an html file up into
844 | one file per slide with navigation buttons
845 | Early versions of HTML
846 | Tidy which supported a means to create presentations via splitting
847 | html files on h2 elements
848 | Many sites with advice on JavaScript work arounds for browser
849 | variations
850 | Microsoft for pioneering contentEditable and XMLHTTP which
851 | both provide tremendous opportunities for Web applications
852 | Microsoft Office which provided the impetus for creating
853 | Slidy as a Web-based alternative to the ubiquitous use of PowerPoint
854 |
855 |
856 |
Note that while Slidy and
857 | S5 were developed independently, both support the use of the
858 | class values "slide" and "handout" for div elements. Slidy doesn't
859 | support the "layout" class featured in S5 and Opera Show, but
860 | instead provides a more flexible alternative with the "background"
861 | class, which enables different backgrounds on different slides.
862 |
863 |
864 |
865 |
Acknowledgements
866 |
867 |
The following people have contributed localizations:
868 |
869 |
870 | Emmanuelle Gutiérrez y Restrepo, Spanish
871 | Joan V. Baz, Catalan
872 | Jakub Vrána, Czech
873 | Ruud Steltenpool, Dutch
874 | Beat Vontobel, German
875 | Krzysztof Kotowicz, Polish
876 | Tamas Horvath, Hungarian
877 | Creso Moraes, Brazilian Portuguese
878 | Giuseppe Scollo, Italian
879 | Konstantinos Koukopoulos, Greek
880 | Yoshikazu Sawa (澤 義和), Japanese
881 | Shelley Shyan, Chinese
882 | Andrew Pantyukhin, Russian
883 | Saasha Metsärantala, Swedish
884 |
885 |
886 |
The following people have contributed bug reports:
887 |
888 |
889 | Steve Robertson
890 | Ivan Herman
891 | Steve Bratt
892 | Peter Patel-Schneider
893 | Matthew Coller
894 | Rune Heggtveit
895 | Gopal Venkatesan
896 | Cay Horstmann
897 | Schuyler Duveen
898 | Matteo Nannini
899 | Ralph Swick
900 | Jakub Vrána
901 | Philip Bolt
902 | Jon Frost
903 | Jonathan Chetwynd
904 | Nicolas Frisby
905 |
906 |
907 |
Douglas Crockford for jsmin
909 | which was used to minify the script before compressing it with gzip.
910 |
911 |
912 |
913 |
--------------------------------------------------------------------------------
/nimdoc.out.css:
--------------------------------------------------------------------------------
1 | /*
2 | Stylesheet for use with Docutils/rst2html.
3 |
4 | See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
5 | customize this style sheet.
6 |
7 | Modified from Chad Skeeters' rst2html-style
8 | https://bitbucket.org/cskeeters/rst2html-style/
9 |
10 | Modified by Boyd Greenfield and narimiran
11 | */
12 |
13 | :root {
14 | --primary-background: #fff;
15 | --secondary-background: ghostwhite;
16 | --third-background: #e8e8e8;
17 | --border: #dde;
18 | --text: #222;
19 | --anchor: #07b;
20 | --anchor-focus: #607c9f;
21 | --input-focus: #1fa0eb;
22 | --strong: #3c3c3c;
23 | --hint: #9A9A9A;
24 | --nim-sprite-base64: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN4AAAA9CAYAAADCt9ebAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFFmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTAzVDAxOjAzOjQ4KzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wM1QwMjoyODo0MSswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0wM1QwMjoyODo0MSswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMzM0ZjAxYS0yMDExLWE1NGQtOTVjNy1iOTgxMDFlMDFhMmEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzMzNGYwMWEtMjAxMS1hNTRkLTk1YzctYjk4MTAxZTAxYTJhIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MzMzNGYwMWEtMjAxMS1hNTRkLTk1YzctYjk4MTAxZTAxYTJhIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozMzM0ZjAxYS0yMDExLWE1NGQtOTVjNy1iOTgxMDFlMDFhMmEiIHN0RXZ0OndoZW49IjIwMTktMTItMDNUMDE6MDM6NDgrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMS4wIChXaW5kb3dzKSIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4PsixkAAAJ5klEQVR4nO2dfbBUZR3HP3vvxVD0zo0ACXxBuQMoQjJ1DfMl0NIhNcuSZqQhfGt6UWtK06xJexkrmywVRTQlHCIdtclC0zBJvYIvvEUgZpc3XyC7RVbKlQu1/fHdbc+uu2fPOfs85+y55/nMnBl2z+5zfnc5v/M8z+8119XVRYroAG4HfgvMT1YUR4MMAa4HLkhakCRoSVqAELwLeBY4C7gF+D6QS1QiR1ROAJ4Dzk9akKQwoXhtwL4GxvHjU8AKoNPz3leAu4HBFq+bAyZZHD9rDAK+BywDDklYlkQxoXhfAtYAEw2MVckQYBHwU6or99nA08BBFq49GngUeBIYaWH8rNEJdAOXA60Jy5I4jSreSOBKYDzwBPCJhiUqcSjwe2BWnc9NLnxuvMFrnwqsAqYBBwBfNzh2FpmNfs9jkhakWcg1aFxZiH5UL3cDnwf+Xue7BwFjgFHAOwuv24tyob3cO0LIshP4EbCn8Pq/wKvA9sLxMvCvOmPsA1yDZnHv/nEv2mM+F0IeR4m8z7lM7tMbUbzj0CxX7YfbAXwaWFJ4PRrNIu9FS9KJyEIZN68CG4DnkRJtLBw7gHHAYuDdNb77EDAjBhkHIk7xKoiqeK3IwjilzuceQJvoZjdQ/AMZaeoZiWYgBXSEwyleBW0Rv3cR9ZUO4LSI48fN2wN+bi5wJNBvUZaBSCaVy48oxpVhwDdMC5ISxpJRh6/DLGEUrxXt29YBQ+2IkwquR76ofZIWxJFegireNLSnm48skFmmDfmiVgJHJyuKI620ADOpbWEcDPwYOZKD7OmyxCTkXL+wzueOiEEWR8poQb60V4A7kLm/yFjgKeALuM1xLfYDbkX+zEGe98cAX0Oui6viF8vR7OS6urragW2UZr21wK+Aiwlu7XPoN3sYOAd4H6WH1SnA0qSEcjQnRT/e1bgnsw16kGPez4/lyCBF48oNwL+TFGSAsgCndI4qFBVvJ0owdZhjL3CnxfHzBo8+YBMyol0CHBijrKbHS/LoA7Yio9sPgJNr/QHekLGR6MffL+KP4SjnHmQxtoXNmbQP+CHyV75hYDzTIWNpWkU8iR5mq71vVsZqXgtcFqNQ/wG2IOtfD8oi6AX+Ujj+isKz8sBrnu+1okyGdmD/wnEgcDClTIdRyJRvI1cvCMciq7At4rj5eoCPAusbHCfLigda/VyKgi+AtyreMGAzykGzQQ/wO+BxSlkCuy1dq8hw5OieUjimYT+x9bHCdWwS1823Ez1EXmhgjKwrXpHzkduuanbCtzGX+NkPPAj8GincNkPjNkIO5dadUjiOB95m+BonopQpm8R58/0JJbHWy2eshVM8sRvdbyurKV4Hmoka2WA/iwwLP6d+QmzSdKC92GzK/W9R+Q3woQbHCELcN991wJcjftcpXolngKm18vFmoVonYcgDv0Qz5pqGREuOTuA8lPYUZbndh0LJNpkUqgZx33xvomim7RG+6xSvnOm1gqQXoyiMoKxFs8VZpFfpQHvQK4HDUPnAsBa9bxGP0tUjF+IYCkxFew+/G3owdq20pgjzt3uPRscs/o43IaOhH2f4ZaAPRyZQP6vgbuCbyGext87F0sgIZFI/N8BnlwBnolovcWAjq/uzwM0+55cBJ0UYN84ZL+rfbnLMM4FfUDv7Z1XlCe8FetETbleNL7+CZrnvMjCVDuTOOA84Hf+96ga0PC8qXY50FQsuMg+41+d8p885R4n7gdt8zo+qvDkmUF4fZQXwEbS+99KDMhlWkw0eALqQglXyDDCdcovf+4lv5jPNXJ9zWc/FDMMdPudGVCreRlTWwVtWbynwYVQQCFSp61Q042WJLUjB1nneuw8tvXo97x1Lugvg+j1Mo9boySLVHtJFWqsthx5GlbSGeN5bigrHdqPl52Zj4qWLXvTQWY4KOX2ccgPMBLRcuy9+0YzhguXN4GuYq2Zc2R/NZg+hfYt3/9ZCepdQthmB4vIWIYOTbWyWzGt2Y0izG1fqjlltxnsdpbPMRMmd3lqTTumqMw7FZY5G5mSHw5dalreiRWYGWjbZ7gYUlFa0xOtIWA4vk1E6zWEoI+FvyYrjSAO1FG8DCmQGKd+DJFsGogWVVFiP/GWbga9Svg9NgtPQvnd04fUNCcriSBF+vqZ5nn9PQ+Xs4q401oI6EP0R+BkyXoAeAtcgBfwidnvkVaMVFTO6n1JoWTfqiONw1MVP8e6l3GVwOPJZXW5VItGGiuduAu5CZdOrMQJ1CHqpIFccS+LxaD/3Hcr7vF0Xw7UdAwQ/xduLGkJ6aUMhVAuwU006B3wM+ZLmozJ5QRhWkGs9yjKw1fhwDsq8eE/F+y+i1CeHIxD1wppupXrA5xyUOjQHMzU3cyjTeS2aaaN2Fzoc1bhch3xspuqBTkDulQVUz1q4mYEbNuewQD3FexGFS1VjOLoRHwOOinj9HAooXY2CSidHHKeSI5GFcRWNdSxqR7VH1iHHeTV24R+X53C8hSCBvPPqnD8B+AOygn6OYAm0ORSGthLl8B0d4DtRmIKsoMsJF1U/Hi1dt6DusIN8PrsIlUdwOAITpDFlC6q3MTbgmHm011qGepOvQSXPipyOCujW6rxqk0dRWYsVFe8PRSn5JxWOoEvdfOGzfnF5tnCRK+bGi33MoB1hL0U5d1H5J5oVD6A5mp8sQS6KSWh5e0jEcR4BPmhKqJA4xTM3XuxjBlW8DuRacDU3y0myNbNTPHPjxT5m0GTN15A/zVFiI+HKYzgc/ydMlrRfgmQWuYn0F91xJEQYxVuDnMcOrQAWJi2EI72ErQviwqLEQpQ+5XBEIqzi3YWLwF+BMiMcjshEqYR1Gdk1KmxBsaR9SQviSDdRFK8fxVU+YliWZmcbcq7vSFoQR/qJWvuxD0WgLDYoSzPzAqowtjVhORwDhEaKru4GPoliGgcyy4Hj0DLT4TBCo9WO88jQ8Bns97lLghvRTOfqqDiMYqrM+HyUYdBtaLykeRmlK12C9rQOh1FM1vd/HqUIzaT5e+LVoh/VxByHShs6HFaw0VjjHhTxP5d0LT+fRnu5q3HuAodlbHW02Q5cDByM+sw1642cRylCx6PeZiuTFScUFxK+f19QovaRS+t4tsasxhvABbZbSfUCV6CM7qtQl6Fm4E1U22UqcAYqvZ42fgJMxH6vdYc5nkBlSW6Pq4fbS6hb6jg0u9yGug7FyS5U1+UcVBbwbFSuMM1sQ1bXK4A9CcviqM0e9H80HdUxCpwIa4McygA/GfgAcCJqmGKKXUixupEv7nHsLc2agWNQ0d9OzC+PHNHIo1XeLCoe8kkqXiUtwKFoWXoEKqk3BpWLaC8cXsV8HT1J+tFTZKvn+DMqFZi1knvtyKg1O2lBHADcCVxEedNSAP4HJcsr0NNWHVUAAAAASUVORK5CYII=");
25 |
26 | --keyword: #5e8f60;
27 | --identifier: #222;
28 | --comment: #484a86;
29 | --operator: #155da4;
30 | --punctuation: black;
31 | --other: black;
32 | --escapeSequence: #c4891b;
33 | --number: #252dbe;
34 | --literal: #a4255b;
35 | --raw-data: #a4255b;
36 | }
37 |
38 | [data-theme="dark"] {
39 | --primary-background: #171921;
40 | --secondary-background: #1e202a;
41 | --third-background: #2b2e3b;
42 | --border: #0e1014;
43 | --text: #fff;
44 | --anchor: #8be9fd;
45 | --anchor-focus: #8be9fd;
46 | --input-focus: #8be9fd;
47 | --strong: #bd93f9;
48 | --hint: #7A7C85;
49 | --nim-sprite-base64: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARMAAABMCAYAAABOBlMuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFFmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTAzVDAxOjE4OjIyKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplZGViMzU3MC1iNmZjLWQy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");
50 |
51 | --keyword: #ff79c6;
52 | --identifier: #f8f8f2;
53 | --comment: #6272a4;
54 | --operator: #ff79c6;
55 | --punctuation: #f8f8f2;
56 | --other: #f8f8f2;
57 | --escapeSequence: #bd93f9;
58 | --number: #bd93f9;
59 | --literal: #f1fa8c;
60 | --raw-data: #8be9fd;
61 | }
62 |
63 | .theme-switch-wrapper {
64 | display: flex;
65 | align-items: center;
66 |
67 | em {
68 | margin-left: 10px;
69 | font-size: 1rem;
70 | }
71 | }
72 | .theme-switch {
73 | display: inline-block;
74 | height: 22px;
75 | position: relative;
76 | width: 50px;
77 | }
78 |
79 | .theme-switch input {
80 | display: none;
81 | }
82 |
83 | .slider {
84 | background-color: #ccc;
85 | bottom: 0;
86 | cursor: pointer;
87 | left: 0;
88 | position: absolute;
89 | right: 0;
90 | top: 0;
91 | transition: .4s;
92 | }
93 |
94 | .slider:before {
95 | background-color: #fff;
96 | bottom: 4px;
97 | content: "";
98 | height: 13px;
99 | left: 4px;
100 | position: absolute;
101 | transition: .4s;
102 | width: 13px;
103 | }
104 |
105 | input:checked + .slider {
106 | background-color: #66bb6a;
107 | }
108 |
109 | input:checked + .slider:before {
110 | transform: translateX(26px);
111 | }
112 |
113 | .slider.round {
114 | border-radius: 17px;
115 | }
116 |
117 | .slider.round:before {
118 | border-radius: 50%;
119 | }
120 |
121 | html {
122 | font-size: 100%;
123 | -webkit-text-size-adjust: 100%;
124 | -ms-text-size-adjust: 100%; }
125 |
126 | body {
127 | font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif;
128 | font-weight: 400;
129 | font-size: 1.125em;
130 | line-height: 1.5;
131 | color: var(--text);
132 | background-color: var(--primary-background); }
133 |
134 | /* Skeleton grid */
135 | .container {
136 | position: relative;
137 | width: 100%;
138 | max-width: 1050px;
139 | margin: 0 auto;
140 | padding: 0;
141 | box-sizing: border-box; }
142 |
143 | .column,
144 | .columns {
145 | width: 100%;
146 | float: left;
147 | box-sizing: border-box;
148 | margin-left: 1%;
149 | }
150 |
151 | .column:first-child,
152 | .columns:first-child {
153 | margin-left: 0; }
154 |
155 | .three.columns {
156 | width: 19%; }
157 |
158 | .nine.columns {
159 | width: 80.0%; }
160 |
161 | .twelve.columns {
162 | width: 100%;
163 | margin-left: 0; }
164 |
165 | @media screen and (max-width: 860px) {
166 | .three.columns {
167 | display: none;
168 | }
169 | .nine.columns {
170 | width: 98.0%;
171 | }
172 | body {
173 | font-size: 1em;
174 | line-height: 1.35;
175 | }
176 | }
177 |
178 | cite {
179 | font-style: italic !important; }
180 |
181 |
182 | /* Nim search input */
183 | div#searchInputDiv {
184 | margin-bottom: 1em;
185 | }
186 | input#searchInput {
187 | width: 80%;
188 | }
189 |
190 | /*
191 | * Some custom formatting for input forms.
192 | * This also fixes input form colors on Firefox with a dark system theme on Linux.
193 | */
194 | input {
195 | -moz-appearance: none;
196 | background-color: var(--secondary-background);
197 | color: var(--text);
198 | border: 1px solid var(--border);
199 | font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif;
200 | font-size: 0.9em;
201 | padding: 6px;
202 | }
203 |
204 | input:focus {
205 | border: 1px solid var(--input-focus);
206 | box-shadow: 0 0 3px var(--input-focus);
207 | }
208 |
209 | select {
210 | -moz-appearance: none;
211 | background-color: var(--secondary-background);
212 | color: var(--text);
213 | border: 1px solid var(--border);
214 | font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif;
215 | font-size: 0.9em;
216 | padding: 6px;
217 | }
218 |
219 | select:focus {
220 | border: 1px solid var(--input-focus);
221 | box-shadow: 0 0 3px var(--input-focus);
222 | }
223 |
224 | /* Docgen styles */
225 | /* Links */
226 | a {
227 | color: var(--anchor);
228 | text-decoration: none;
229 | }
230 |
231 | a span.Identifier {
232 | text-decoration: underline;
233 | text-decoration-color: #aab;
234 | }
235 |
236 | a.reference-toplevel {
237 | font-weight: bold;
238 | }
239 |
240 | a.toc-backref {
241 | text-decoration: none;
242 | color: var(--text); }
243 |
244 | a.link-seesrc {
245 | color: #607c9f;
246 | font-size: 0.9em;
247 | font-style: italic; }
248 |
249 | a:hover,
250 | a:focus {
251 | color: var(--anchor-focus);
252 | text-decoration: underline; }
253 |
254 | a:hover span.Identifier {
255 | color: var(--anchor);
256 | }
257 |
258 |
259 | sub,
260 | sup {
261 | position: relative;
262 | font-size: 75%;
263 | line-height: 0;
264 | vertical-align: baseline; }
265 |
266 | sup {
267 | top: -0.5em; }
268 |
269 | sub {
270 | bottom: -0.25em; }
271 |
272 | img {
273 | width: auto;
274 | height: auto;
275 | max-width: 100%;
276 | vertical-align: middle;
277 | border: 0;
278 | -ms-interpolation-mode: bicubic; }
279 |
280 | @media print {
281 | * {
282 | color: black !important;
283 | text-shadow: none !important;
284 | background: transparent !important;
285 | box-shadow: none !important; }
286 |
287 | a,
288 | a:visited {
289 | text-decoration: underline; }
290 |
291 | a[href]:after {
292 | content: " (" attr(href) ")"; }
293 |
294 | abbr[title]:after {
295 | content: " (" attr(title) ")"; }
296 |
297 | .ir a:after,
298 | a[href^="javascript:"]:after,
299 | a[href^="#"]:after {
300 | content: ""; }
301 |
302 | pre,
303 | blockquote {
304 | border: 1px solid #999;
305 | page-break-inside: avoid; }
306 |
307 | thead {
308 | display: table-header-group; }
309 |
310 | tr,
311 | img {
312 | page-break-inside: avoid; }
313 |
314 | img {
315 | max-width: 100% !important; }
316 |
317 | @page {
318 | margin: 0.5cm; }
319 |
320 | h1 {
321 | page-break-before: always; }
322 |
323 | h1.title {
324 | page-break-before: avoid; }
325 |
326 | p,
327 | h2,
328 | h3 {
329 | orphans: 3;
330 | widows: 3; }
331 |
332 | h2,
333 | h3 {
334 | page-break-after: avoid; }
335 | }
336 |
337 |
338 | p {
339 | margin-top: 0.5em;
340 | margin-bottom: 0.5em;
341 | }
342 |
343 | small {
344 | font-size: 85%; }
345 |
346 | strong {
347 | font-weight: 600;
348 | font-size: 0.95em;
349 | color: var(--strong);
350 | }
351 |
352 | em {
353 | font-style: italic; }
354 |
355 | h1 {
356 | font-size: 1.8em;
357 | font-weight: 400;
358 | padding-bottom: .25em;
359 | border-bottom: 6px solid var(--third-background);
360 | margin-top: 2.5em;
361 | margin-bottom: 1em;
362 | line-height: 1.2em; }
363 |
364 | h1.title {
365 | padding-bottom: 1em;
366 | border-bottom: 0px;
367 | font-size: 2.5em;
368 | text-align: center;
369 | font-weight: 900;
370 | margin-top: 0.75em;
371 | margin-bottom: 0em;
372 | }
373 |
374 | h2 {
375 | font-size: 1.3em;
376 | margin-top: 2em; }
377 |
378 | h2.subtitle {
379 | text-align: center; }
380 |
381 | h3 {
382 | font-size: 1.125em;
383 | font-style: italic;
384 | margin-top: 1.5em; }
385 |
386 | h4 {
387 | font-size: 1.125em;
388 | margin-top: 1em; }
389 |
390 | h5 {
391 | font-size: 1.125em;
392 | margin-top: 0.75em; }
393 |
394 | h6 {
395 | font-size: 1.1em; }
396 |
397 |
398 | ul,
399 | ol {
400 | padding: 0;
401 | margin-top: 0.5em;
402 | margin-left: 0.75em; }
403 |
404 | ul ul,
405 | ul ol,
406 | ol ol,
407 | ol ul {
408 | margin-bottom: 0;
409 | margin-left: 1.25em; }
410 |
411 | li {
412 | list-style-type: circle;
413 | }
414 |
415 | ul.simple-boot li {
416 | list-style-type: none;
417 | margin-left: 0em;
418 | margin-bottom: 0.5em;
419 | }
420 |
421 | ol.simple > li, ul.simple > li {
422 | margin-bottom: 0.25em;
423 | margin-left: 0.4em }
424 |
425 | ul.simple.simple-toc > li {
426 | margin-top: 1em;
427 | }
428 |
429 | ul.simple-toc {
430 | list-style: none;
431 | font-size: 0.9em;
432 | margin-left: -0.3em;
433 | margin-top: 1em; }
434 |
435 | ul.simple-toc > li {
436 | list-style-type: none;
437 | }
438 |
439 | ul.simple-toc-section {
440 | list-style-type: circle;
441 | margin-left: 1em;
442 | color: #6c9aae; }
443 |
444 |
445 | ol.arabic {
446 | list-style: decimal; }
447 |
448 | ol.loweralpha {
449 | list-style: lower-alpha; }
450 |
451 | ol.upperalpha {
452 | list-style: upper-alpha; }
453 |
454 | ol.lowerroman {
455 | list-style: lower-roman; }
456 |
457 | ol.upperroman {
458 | list-style: upper-roman; }
459 |
460 | ul.auto-toc {
461 | list-style-type: none; }
462 |
463 |
464 | dl {
465 | margin-bottom: 1.5em; }
466 |
467 | dt {
468 | margin-bottom: -0.5em;
469 | margin-left: 0.0em; }
470 |
471 | dd {
472 | margin-left: 2.0em;
473 | margin-bottom: 3.0em;
474 | margin-top: 0.5em; }
475 |
476 |
477 | hr {
478 | margin: 2em 0;
479 | border: 0;
480 | border-top: 1px solid #aaa; }
481 |
482 | blockquote {
483 | font-size: 0.9em;
484 | font-style: italic;
485 | padding-left: 0.5em;
486 | margin-left: 0;
487 | border-left: 5px solid #bbc;
488 | }
489 |
490 | .pre {
491 | font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace;
492 | font-weight: 500;
493 | font-size: 0.85em;
494 | color: var(--text);
495 | background-color: var(--third-background);
496 | padding-left: 3px;
497 | padding-right: 3px;
498 | border-radius: 4px;
499 | }
500 |
501 | pre {
502 | font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace;
503 | color: var(--text);
504 | font-weight: 500;
505 | display: inline-block;
506 | box-sizing: border-box;
507 | min-width: 100%;
508 | padding: 0.5em;
509 | margin-top: 0.5em;
510 | margin-bottom: 0.5em;
511 | font-size: 0.85em;
512 | white-space: pre !important;
513 | overflow-y: hidden;
514 | overflow-x: visible;
515 | background-color: var(--secondary-background);
516 | border: 1px solid var(--border);
517 | -webkit-border-radius: 6px;
518 | -moz-border-radius: 6px;
519 | border-radius: 6px; }
520 |
521 | .pre-scrollable {
522 | max-height: 340px;
523 | overflow-y: scroll; }
524 |
525 |
526 | /* Nim line-numbered tables */
527 | .line-nums-table {
528 | width: 100%;
529 | table-layout: fixed; }
530 |
531 | table.line-nums-table {
532 | border-radius: 4px;
533 | border: 1px solid #cccccc;
534 | background-color: ghostwhite;
535 | border-collapse: separate;
536 | margin-top: 15px;
537 | margin-bottom: 25px; }
538 |
539 | .line-nums-table tbody {
540 | border: none; }
541 |
542 | .line-nums-table td pre {
543 | border: none;
544 | background-color: transparent; }
545 |
546 | .line-nums-table td.blob-line-nums {
547 | width: 28px; }
548 |
549 | .line-nums-table td.blob-line-nums pre {
550 | color: #b0b0b0;
551 | -webkit-filter: opacity(75%);
552 | text-align: right;
553 | border-color: transparent;
554 | background-color: transparent;
555 | padding-left: 0px;
556 | margin-left: 0px;
557 | padding-right: 0px;
558 | margin-right: 0px; }
559 |
560 |
561 | table {
562 | max-width: 100%;
563 | background-color: transparent;
564 | margin-top: 0.5em;
565 | margin-bottom: 1.5em;
566 | border-collapse: collapse;
567 | border-color: var(--third-background);
568 | border-spacing: 0;
569 | font-size: 0.9em;
570 | }
571 |
572 | table th, table td {
573 | padding: 0px 0.5em 0px;
574 | border-color: var(--third-background);
575 | }
576 |
577 | table th {
578 | background-color: var(--third-background);
579 | border-color: var(--third-background);
580 | font-weight: bold; }
581 |
582 | table th.docinfo-name {
583 | background-color: transparent;
584 | }
585 |
586 | table tr:hover {
587 | background-color: var(--third-background); }
588 |
589 |
590 | /* rst2html default used to remove borders from tables and images */
591 | .borderless, table.borderless td, table.borderless th {
592 | border: 0; }
593 |
594 | table.borderless td, table.borderless th {
595 | /* Override padding for "table.docutils td" with "! important".
596 | The right padding separates the table cells. */
597 | padding: 0 0.5em 0 0 !important; }
598 |
599 | .first {
600 | /* Override more specific margin styles with "! important". */
601 | margin-top: 0 !important; }
602 |
603 | .last, .with-subtitle {
604 | margin-bottom: 0 !important; }
605 |
606 | .hidden {
607 | display: none; }
608 |
609 | blockquote.epigraph {
610 | margin: 2em 5em; }
611 |
612 | dl.docutils dd {
613 | margin-bottom: 0.5em; }
614 |
615 | object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
616 | overflow: hidden; }
617 |
618 |
619 | div.figure {
620 | margin-left: 2em;
621 | margin-right: 2em; }
622 |
623 | div.footer, div.header {
624 | clear: both;
625 | text-align: center;
626 | color: #666;
627 | font-size: smaller; }
628 |
629 | div.footer {
630 | padding-top: 5em;
631 | }
632 |
633 | div.line-block {
634 | display: block;
635 | margin-top: 1em;
636 | margin-bottom: 1em; }
637 |
638 | div.line-block div.line-block {
639 | margin-top: 0;
640 | margin-bottom: 0;
641 | margin-left: 1.5em; }
642 |
643 | div.topic {
644 | margin: 2em; }
645 |
646 | div.search_results {
647 | background-color: antiquewhite;
648 | margin: 3em;
649 | padding: 1em;
650 | border: 1px solid #4d4d4d;
651 | }
652 |
653 | div#global-links ul {
654 | margin-left: 0;
655 | list-style-type: none;
656 | }
657 |
658 | div#global-links > simple-boot {
659 | margin-left: 3em;
660 | }
661 |
662 | hr.docutils {
663 | width: 75%; }
664 |
665 | img.align-left, .figure.align-left, object.align-left {
666 | clear: left;
667 | float: left;
668 | margin-right: 1em; }
669 |
670 | img.align-right, .figure.align-right, object.align-right {
671 | clear: right;
672 | float: right;
673 | margin-left: 1em; }
674 |
675 | img.align-center, .figure.align-center, object.align-center {
676 | display: block;
677 | margin-left: auto;
678 | margin-right: auto; }
679 |
680 | .align-left {
681 | text-align: left; }
682 |
683 | .align-center {
684 | clear: both;
685 | text-align: center; }
686 |
687 | .align-right {
688 | text-align: right; }
689 |
690 | /* reset inner alignment in figures */
691 | div.align-right {
692 | text-align: inherit; }
693 |
694 | p.attribution {
695 | text-align: right;
696 | margin-left: 50%; }
697 |
698 | p.caption {
699 | font-style: italic; }
700 |
701 | p.credits {
702 | font-style: italic;
703 | font-size: smaller; }
704 |
705 | p.label {
706 | white-space: nowrap; }
707 |
708 | p.rubric {
709 | font-weight: bold;
710 | font-size: larger;
711 | color: maroon;
712 | text-align: center; }
713 |
714 | p.topic-title {
715 | font-weight: bold; }
716 |
717 | pre.address {
718 | margin-bottom: 0;
719 | margin-top: 0;
720 | font: inherit; }
721 |
722 | pre.literal-block, pre.doctest-block, pre.math, pre.code {
723 | margin-left: 2em;
724 | margin-right: 2em; }
725 |
726 | pre.code .ln {
727 | color: grey; }
728 |
729 | /* line numbers */
730 | pre.code, code {
731 | background-color: #eeeeee; }
732 |
733 | pre.code .comment, code .comment {
734 | color: #5c6576; }
735 |
736 | pre.code .keyword, code .keyword {
737 | color: #3B0D06;
738 | font-weight: bold; }
739 |
740 | pre.code .literal.string, code .literal.string {
741 | color: #0c5404; }
742 |
743 | pre.code .name.builtin, code .name.builtin {
744 | color: #352b84; }
745 |
746 | pre.code .deleted, code .deleted {
747 | background-color: #DEB0A1; }
748 |
749 | pre.code .inserted, code .inserted {
750 | background-color: #A3D289; }
751 |
752 | span.classifier {
753 | font-style: oblique; }
754 |
755 | span.classifier-delimiter {
756 | font-weight: bold; }
757 |
758 | span.option {
759 | white-space: nowrap; }
760 |
761 | span.problematic {
762 | color: #b30000; }
763 |
764 | span.section-subtitle {
765 | /* font-size relative to parent (h1..h6 element) */
766 | font-size: 80%; }
767 |
768 | span.DecNumber {
769 | color: var(--number); }
770 |
771 | span.BinNumber {
772 | color: var(--number); }
773 |
774 | span.HexNumber {
775 | color: var(--number); }
776 |
777 | span.OctNumber {
778 | color: var(--number); }
779 |
780 | span.FloatNumber {
781 | color: var(--number); }
782 |
783 | span.Identifier {
784 | color: var(--identifier); }
785 |
786 | span.Keyword {
787 | font-weight: 600;
788 | color: var(--keyword); }
789 |
790 | span.StringLit {
791 | color: var(--literal); }
792 |
793 | span.LongStringLit {
794 | color: var(--literal); }
795 |
796 | span.CharLit {
797 | color: var(--literal); }
798 |
799 | span.EscapeSequence {
800 | color: var(--escapeSequence); }
801 |
802 | span.Operator {
803 | color: var(--operator); }
804 |
805 | span.Punctuation {
806 | color: var(--punctuation); }
807 |
808 | span.Comment, span.LongComment {
809 | font-style: italic;
810 | font-weight: 400;
811 | color: var(--comment); }
812 |
813 | span.RegularExpression {
814 | color: darkviolet; }
815 |
816 | span.TagStart {
817 | color: darkviolet; }
818 |
819 | span.TagEnd {
820 | color: darkviolet; }
821 |
822 | span.Key {
823 | color: #252dbe; }
824 |
825 | span.Value {
826 | color: #252dbe; }
827 |
828 | span.RawData {
829 | color: var(--raw-data); }
830 |
831 | span.Assembler {
832 | color: #252dbe; }
833 |
834 | span.Preprocessor {
835 | color: #252dbe; }
836 |
837 | span.Directive {
838 | color: #252dbe; }
839 |
840 | span.Command, span.Rule, span.Hyperlink, span.Label, span.Reference,
841 | span.Other {
842 | color: var(--other); }
843 |
844 | /* Pop type, const, proc, and iterator defs in nim def blocks */
845 | dt pre > span.Identifier, dt pre > span.Operator {
846 | color: var(--identifier);
847 | font-weight: 700; }
848 |
849 | dt pre > span.Keyword ~ span.Identifier, dt pre > span.Identifier ~ span.Identifier,
850 | dt pre > span.Operator ~ span.Identifier, dt pre > span.Other ~ span.Identifier {
851 | color: var(--identifier);
852 | font-weight: inherit; }
853 |
854 | /* Nim sprite for the footer (taken from main page favicon) */
855 | .nim-sprite {
856 | display: inline-block;
857 | width: 51px;
858 | height: 14px;
859 | background-position: 0 0;
860 | background-size: 51px 14px;
861 | -webkit-filter: opacity(50%);
862 | background-repeat: no-repeat;
863 | background-image: var(--nim-sprite-base64);
864 | margin-bottom: 5px; }
865 |
866 | span.pragmadots {
867 | /* Position: relative frees us up to make the dots
868 | look really nice without fucking up the layout and
869 | causing bulging in the parent container */
870 | position: relative;
871 | /* 1px down looks slightly nicer */
872 | top: 1px;
873 | padding: 2px;
874 | background-color: var(--third-background);
875 | border-radius: 4px;
876 | margin: 0 2px;
877 | cursor: pointer;
878 | font-size: 0.8em;
879 | }
880 |
881 | span.pragmadots:hover {
882 | background-color: var(--hint);
883 | }
884 | span.pragmawrap {
885 | display: none;
886 | }
887 |
888 | span.attachedType {
889 | display: none;
890 | visibility: hidden;
891 | }
--------------------------------------------------------------------------------