From 952735501d30caa774937dd104927205e70bbbd4 Mon Sep 17 00:00:00 2001 From: disruptek Date: Mon, 6 Nov 2023 18:23:01 +0000 Subject: [PATCH] Deploy to GitHub pages --- balls.html | 302 ++++++++ balls.idx | 12 + balls/runner.html | 453 ++++++++++++ balls/runner.idx | 40 + balls/semaphores.html | 371 ++++++++++ balls/semaphores.idx | 16 + balls/spec.html | 412 +++++++++++ balls/spec.idx | 29 + balls/style.html | 415 +++++++++++ balls/style.idx | 26 + balls/tabouli.html | 149 ++++ balls/tabouli.idx | 3 + clean.svg | 47 ++ demo.svg | 47 ++ dochack.js | 1609 +++++++++++++++++++++++++++++++++++++++++ index.html | 490 +++++++++++++ nimdoc.out.css | 1033 ++++++++++++++++++++++++++ runner.svg | 142 ++++ theindex.html | 490 +++++++++++++ 19 files changed, 6086 insertions(+) create mode 100644 balls.html create mode 100644 balls.idx create mode 100644 balls/runner.html create mode 100644 balls/runner.idx create mode 100644 balls/semaphores.html create mode 100644 balls/semaphores.idx create mode 100644 balls/spec.html create mode 100644 balls/spec.idx create mode 100644 balls/style.html create mode 100644 balls/style.idx create mode 100644 balls/tabouli.html create mode 100644 balls/tabouli.idx create mode 100644 clean.svg create mode 100644 demo.svg create mode 100644 dochack.js create mode 100644 index.html create mode 100644 nimdoc.out.css create mode 100644 runner.svg create mode 100644 theindex.html diff --git a/balls.html b/balls.html new file mode 100644 index 0000000..566b406 --- /dev/null +++ b/balls.html @@ -0,0 +1,302 @@ + + + + + + + +balls + + + + + + + + + + + + +
+
+

balls

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ Source   +Edit   + +
+ +

+ +
+

Procs

+
+
+
+
proc checkpoint(ss: varargs[string, `$`]) {....raises: [IOError],
+    tags: [WriteIOEffect], forbids: [].}
+
+ + Like echo, but outputs to stdmsg() with the other test output. + Source   +Edit   + +
+
+ +
+
+
+
proc fail(msg = "failed") {....raises: [FailError], tags: [], forbids: [].}
+
+ + Manually fails the current test. + Source   +Edit   + +
+
+ +
+
+
+
proc skip(msg = "skipped") {....raises: [SkipError], tags: [], forbids: [].}
+
+ + Manually skips the remainder of the current test. + Source   +Edit   + +
+
+ +
+ +
+
+
+

Macros

+
+
+
+
macro check(body: bool; message: string = "")
+
+ + Check a single expression; raises an AssertionDefect in the event that the expression is false regardless of assertions settings. Specify a custom message a la assert. + Source   +Edit   + +
+
+
+
macro check(message: string; body: untyped)
+
+ + Check one or more expressions in a block; raises an AssertionDefect in the event that an expression is false regardless of assertions settings. Specify a custom message a la assert. + Source   +Edit   + +
+
+ +
+
+
+
macro report(ss: varargs[typed])
+
+ + Like checkpoint, but rendered as a comment. You can supply AST here to be typed and rendered via treeRepr. + Source   +Edit   + +
+
+ +
+
+
+
macro suite(name: string; tests: untyped)
+
+ + Put each test in a block: underneath the named suite. You can specify test names using ## comment statements, or block syntax like that of unittests: test "my test name": check true + Source   +Edit   + +
+
+ +
+
+
+
macro test(name: string; body: untyped)
+
+ + A compatibility shim for adapting std/unittest syntax. + Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template expect(exception: typed; body: untyped)
+
+ + Fails the test if an expected exception is not raised in the body. + Source   +Edit   + +
+
+ +
+
+
+
template skip(msg = "skipped"; body: untyped)
+
+ + Manually skips the remainder of the current test and stops macro processing. + Source   +Edit   + +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + + + + + diff --git a/balls.idx b/balls.idx new file mode 100644 index 0000000..cf8a7ff --- /dev/null +++ b/balls.idx @@ -0,0 +1,12 @@ +nimTitle balls balls.html module balls 0 +nim checkpoint balls.html#checkpoint,varargs[string,] proc checkpoint(ss: varargs[string, `$`]) 162 +nim report balls.html#report.m,varargs[typed] macro report(ss: varargs[typed]) 298 +nim check balls.html#check.m,bool,string macro check(body: bool; message: string = "") 347 +nim check balls.html#check.m,string,untyped macro check(message: string; body: untyped) 353 +nim expect balls.html#expect.t,typed,untyped template expect(exception: typed; body: untyped) 501 +nim skip balls.html#skip,string proc skip(msg = "skipped") 637 +nim skip balls.html#skip.t,string,untyped template skip(msg = "skipped"; body: untyped) 641 +nim fail balls.html#fail,string proc fail(msg = "failed") 648 +nim suite balls.html#suite.m,string,untyped macro suite(name: string; tests: untyped) 786 +nim test balls.html#test.m,string,untyped macro test(name: string; body: untyped) 848 +nimgrp check balls.html#check-macros-all macro 347 diff --git a/balls/runner.html b/balls/runner.html new file mode 100644 index 0000000..72ab04c --- /dev/null +++ b/balls/runner.html @@ -0,0 +1,453 @@ + + + + + + + +balls/runner + + + + + + + + + + + + +
+
+

balls/runner

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ Source   +Edit   + +
+ +

+ +
+

Types

+
+
+
Analyzer = enum
+  Execution, ASanitizer, TSanitizer, Valgrind, Helgrind, DataRacer
+
+ + analysis tools + Source   +Edit   + +
+
+
+
Backend = enum
+  c, cpp, js, e
+
+ + backends that we test + Source   +Edit   + +
+
+
+
Matrix = OrderedTable[Profile, StatusKind]
+
+ + the Matrix collects test results in the order they are obtained + Source   +Edit   + +
+
+
+
MemModel = enum
+  refc, markAndSweep, arc, orc, vm
+
+ + memory managers that we test + Source   +Edit   + +
+
+
+
Optimizer = enum
+  debug, release, danger
+
+ + optimization modes that we test + Source   +Edit   + +
+
+
+
Profile = object
+  an*: Analyzer
+  be*: Backend
+  opt*: Optimizer
+  gc*: MemModel
+  fn*: string
+
+
+ + the Profile defines compilation settings for a single test invocation + Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
ballsFailFast {.booldefine.} = true
+
+ + if true, quit early on a test failure + Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `<`(a, b: Profile): bool {.used, ...raises: [], tags: [], forbids: [].}
+
+ + Compare Profiles a, b for the purposes of test ordering. Note that this comparison does not measure test filename. + Source   +Edit   + +
+
+ +
+
+
+
proc `==`(a, b: Profile): bool {.used, ...raises: [], tags: [], forbids: [].}
+
+ + Compare Profiles a, b for the purposes of test ordering. Note that this comparison does not measure test filename. + Source   +Edit   + +
+
+ +
+
+
+
proc cmp(a, b: Profile): int {....raises: [], tags: [], forbids: [].}
+
+ + Compare Profiles a, b for the purposes of test ordering. Note that this comparison does not measure test filename. + Source   +Edit   + +
+
+ +
+
+
+
proc commandLine(p: Profile; withHints = false): string {.
+    ...raises: [ValueError, KeyError], tags: [ReadIOEffect, ReadEnvEffect],
+    forbids: [].}
+
+ + compose the interesting parts of the compiler invocation + Source   +Edit   + +
+
+ +
+
+
+
proc contains(matrix: Matrix; p: Profile): bool {....raises: [], tags: [],
+    forbids: [].}
+
+ + A test result of None or Skip effectively does not count as being present in the test matrix. + Source   +Edit   + +
+
+ +
+
+
+
proc hash(p: Profile): Hash {....raises: [], tags: [], forbids: [].}
+
+ + Two Profiles that hash identically share a test result in the Matrix. + Source   +Edit   + +
+
+ +
+
+
+
proc hints(p: Profile; ci: bool): string {....raises: [ValueError], tags: [],
+    forbids: [].}
+
+ + Compute --hint and --warning flags as appropriate given Profile p, ci status, and compile-time Nim version information. + Source   +Edit   + +
+
+ +
+
+
+
proc main(directory: string; fallback = false) {....raises: [OSError, IOError,
+    ValueError, ValueError, KeyError, IOError, OSError], tags: [ReadDirEffect,
+    WriteIOEffect, ReadEnvEffect, ReadIOEffect, TimeEffect, ExecIOEffect,
+    RootEffect, WriteDirEffect], forbids: [].}
+
+ + Run each test in the directory in a useful order; set fallback to true to fall back to a loose search in the current directory for testable code. + Source   +Edit   + +
+
+ +
+
+
+
proc matrixTable(matrix: Matrix): string {....raises: [KeyError, ValueError],
+    tags: [], forbids: [].}
+
+ + Render the matrix as a table. + Source   +Edit   + +
+
+ +
+
+
+
proc ordered(directory: string; testsOnly = true): seq[string] {.
+    ...raises: [OSError], tags: [ReadDirEffect], forbids: [].}
+
+ + Order a directory tree of test files usefully; set testsOnly for rigid "must start with a t and end with .nim" behavior. If testsOnly is set, the search is recursive. + Source   +Edit   + +
+
+ +
+
+
+
proc perform(matrix: var Matrix; profs: seq[Profile]) {.
+    ...raises: [ValueError, KeyError, IOError, OSError], tags: [ReadEnvEffect,
+    ReadIOEffect, WriteIOEffect, TimeEffect, ExecIOEffect, RootEffect],
+    forbids: [].}
+
+ + Try to run profs and fail early if you can. + Source   +Edit   + +
+
+
+
proc perform(p: Profile): StatusKind {....raises: [IOError, ValueError, KeyError], tags: [
+    ExecIOEffect, ReadIOEffect, RootEffect, WriteIOEffect, ReadEnvEffect],
+                                       forbids: [].}
+
+ + Run a single Profile p and return its StatusKind. + Source   +Edit   + +
+
+ +
+
+
+
proc profiles(fn: string): seq[Profile] {....raises: [], tags: [], forbids: [].}
+
+ + Produce profiles for a given test filename. + Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/balls/runner.idx b/balls/runner.idx new file mode 100644 index 0000000..175e09b --- /dev/null +++ b/balls/runner.idx @@ -0,0 +1,40 @@ +nimTitle runner balls/runner.html module balls/runner 0 +nim ballsFailFast balls/runner.html#ballsFailFast const ballsFailFast 25 +nim c balls/runner.html#c Backend.c 29 +nim cpp balls/runner.html#cpp Backend.cpp 29 +nim js balls/runner.html#js Backend.js 29 +nim e balls/runner.html#e Backend.e 29 +nim Backend balls/runner.html#Backend enum Backend 29 +nim debug balls/runner.html#debug Optimizer.debug 35 +nim release balls/runner.html#release Optimizer.release 35 +nim danger balls/runner.html#danger Optimizer.danger 35 +nim Optimizer balls/runner.html#Optimizer enum Optimizer 35 +nim refc balls/runner.html#refc MemModel.refc 40 +nim markAndSweep balls/runner.html#markAndSweep MemModel.markAndSweep 40 +nim arc balls/runner.html#arc MemModel.arc 40 +nim orc balls/runner.html#orc MemModel.orc 40 +nim vm balls/runner.html#vm MemModel.vm 40 +nim MemModel balls/runner.html#MemModel enum MemModel 40 +nim Execution balls/runner.html#Execution Analyzer.Execution 47 +nim ASanitizer balls/runner.html#ASanitizer Analyzer.ASanitizer 47 +nim TSanitizer balls/runner.html#TSanitizer Analyzer.TSanitizer 47 +nim Valgrind balls/runner.html#Valgrind Analyzer.Valgrind 47 +nim Helgrind balls/runner.html#Helgrind Analyzer.Helgrind 47 +nim DataRacer balls/runner.html#DataRacer Analyzer.DataRacer 47 +nim Analyzer balls/runner.html#Analyzer enum Analyzer 47 +nim Matrix balls/runner.html#Matrix type Matrix 55 +nim Profile balls/runner.html#Profile object Profile 58 +nim hash balls/runner.html#hash,Profile proc hash(p: Profile): Hash 73 +nim cmp balls/runner.html#cmp,Profile,Profile proc cmp(a, b: Profile): int 98 +nim `<` balls/runner.html#<,Profile,Profile proc `<`(a, b: Profile): bool 106 +nim `==` balls/runner.html#==,Profile,Profile proc `==`(a, b: Profile): bool 111 +nim contains balls/runner.html#contains,Matrix,Profile proc contains(matrix: Matrix; p: Profile): bool 116 +nim matrixTable balls/runner.html#matrixTable,Matrix proc matrixTable(matrix: Matrix): string 176 +nim hints balls/runner.html#hints,Profile,bool proc hints(p: Profile; ci: bool): string 227 +nim commandLine balls/runner.html#commandLine,Profile proc commandLine(p: Profile; withHints = false): string 425 +nim perform balls/runner.html#perform,Profile proc perform(p: Profile): StatusKind 447 +nim perform balls/runner.html#perform,Matrix,seq[Profile] proc perform(matrix: var Matrix; profs: seq[Profile]) 534 +nim profiles balls/runner.html#profiles,string proc profiles(fn: string): seq[Profile] 596 +nim ordered balls/runner.html#ordered,string proc ordered(directory: string; testsOnly = true): seq[string] 606 +nim main balls/runner.html#main,string proc main(directory: string; fallback = false) 681 +nimgrp perform balls/runner.html#perform-procs-all proc 447 diff --git a/balls/semaphores.html b/balls/semaphores.html new file mode 100644 index 0000000..0295a7c --- /dev/null +++ b/balls/semaphores.html @@ -0,0 +1,371 @@ + + + + + + + +balls/semaphores + + + + + + + + + + + + +
+
+

balls/semaphores

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ Source   +Edit   + +
+ +

+
+

Types

+
+
+
Semaphore = object
+  
+
+ + + Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `=copy`(s: var Semaphore; e: Semaphore) {.
+    error: "semaphores cannot be copied".}
+
+ + + Source   +Edit   + +
+
+ +
+
+
+
proc `=destroy`(s: var Semaphore) {....raises: [], tags: [], forbids: [].}
+
+ + + Source   +Edit   + +
+
+ +
+
+
+
proc acquire(s: var Semaphore) {....raises: [], tags: [], forbids: [].}
+
+ + adhoc acquire of semaphore's lock + Source   +Edit   + +
+
+ +
+
+
+
proc available(s: var Semaphore): int {....raises: [], tags: [], forbids: [].}
+
+ + blocking count of s + Source   +Edit   + +
+
+ +
+
+
+
proc dec(s: var Semaphore) {....raises: [], tags: [], forbids: [].}
+
+ + blocking adhoc adjustment of the semaphore + Source   +Edit   + +
+
+ +
+
+
+
proc hash(s: var Semaphore): Hash {....raises: [], tags: [], forbids: [].}
+
+ + whatfer inclusion in a table, etc. + Source   +Edit   + +
+
+ +
+
+
+
proc inc(s: var Semaphore) {....raises: [], tags: [], forbids: [].}
+
+ + blocking adhoc adjustment of the semaphore + Source   +Edit   + +
+
+ +
+
+
+
proc initSemaphore(s: var Semaphore; count: int = 0) {....raises: [], tags: [],
+    forbids: [].}
+
+ + make a semaphore available for use + Source   +Edit   + +
+
+ +
+
+
+
proc release(s: var Semaphore) {....raises: [], tags: [], forbids: [].}
+
+ + adhoc release of semaphore's lock + Source   +Edit   + +
+
+ +
+
+
+
proc signal(s: var Semaphore) {....raises: [], tags: [], forbids: [].}
+
+ + blocking signal of s; increments semaphore + Source   +Edit   + +
+
+ +
+
+
+
proc wait(s: var Semaphore) {....raises: [], tags: [], forbids: [].}
+
+ + blocking wait on s + Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template isReady(s: var Semaphore): untyped
+
+ + blocking true if s is ready + Source   +Edit   + +
+
+ +
+
+
+
template withLock(s: var Semaphore; logic: untyped)
+
+ + run the logic while holding the semaphore s's lock + Source   +Edit   + +
+
+ +
+
+
+
template withSemaphore(s: var Semaphore; logic: typed): untyped
+
+ + wait for the semaphore s, run the logic, and signal it + Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/balls/semaphores.idx b/balls/semaphores.idx new file mode 100644 index 0000000..ad9a786 --- /dev/null +++ b/balls/semaphores.idx @@ -0,0 +1,16 @@ +nimTitle semaphores balls/semaphores.html module balls/semaphores 0 +nim Semaphore balls/semaphores.html#Semaphore object Semaphore 5 +nim hash balls/semaphores.html#hash,Semaphore proc hash(s: var Semaphore): Hash 10 +nim initSemaphore balls/semaphores.html#initSemaphore,Semaphore,int proc initSemaphore(s: var Semaphore; count: int = 0) 14 +nim `=destroy` balls/semaphores.html#=destroy,Semaphore proc `=destroy`(s: var Semaphore) 20 +nim `=copy` balls/semaphores.html#=copy,Semaphore,Semaphore proc `=copy`(s: var Semaphore; e: Semaphore) 25 +nim acquire balls/semaphores.html#acquire,Semaphore proc acquire(s: var Semaphore) 29 +nim release balls/semaphores.html#release,Semaphore proc release(s: var Semaphore) 33 +nim withLock balls/semaphores.html#withLock.t,Semaphore,untyped template withLock(s: var Semaphore; logic: untyped) 37 +nim signal balls/semaphores.html#signal,Semaphore proc signal(s: var Semaphore) 45 +nim wait balls/semaphores.html#wait,Semaphore proc wait(s: var Semaphore) 51 +nim available balls/semaphores.html#available,Semaphore proc available(s: var Semaphore): int 62 +nim isReady balls/semaphores.html#isReady.t,Semaphore template isReady(s: var Semaphore): untyped 67 +nim inc balls/semaphores.html#inc,Semaphore proc inc(s: var Semaphore) 71 +nim dec balls/semaphores.html#dec,Semaphore proc dec(s: var Semaphore) 76 +nim withSemaphore balls/semaphores.html#withSemaphore.t,Semaphore,typed template withSemaphore(s: var Semaphore; logic: typed): untyped 81 diff --git a/balls/spec.html b/balls/spec.html new file mode 100644 index 0000000..5af85a5 --- /dev/null +++ b/balls/spec.html @@ -0,0 +1,412 @@ + + + + + + + +balls/spec + + + + + + + + + + + + +
+
+

balls/spec

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ Source   +Edit   + +
+ +

+
+

Types

+
+
+
ExpectedError = object of CatchableError
+
+ + + Source   +Edit   + +
+
+
+
FailError = object of CatchableError
+
+ + + Source   +Edit   + +
+
+
+
SkipError = object of CatchableError
+
+ + + Source   +Edit   + +
+
+
+
StatusKind = enum
+  None = "  ",              ## (undefined)
+  Info = "🔵",            ## may prefix information
+  Wait = "⏳",             ## pending cache access
+  Runs = "🏃",            ## currently runs
+  Pass = "🟢",            ## total success
+  Skip = "❔",             ## test was skipped
+  Part = "🟡",            ## partial success
+  Fail = "🔴",            ## assertion failure
+  Died = "💥",            ## unexpected exception
+  Oops = "⛔"               ## compiles() failed
+
+ + possible test results + Source   +Edit   + +
+
+
+
Test = object
+  status*: StatusKind        ## the result of the test
+  code*: NimNode             ## the user's original code
+  node*: NimNode             ## the test and its instrumentation
+  name*: string              ## the name of the test, duh
+  number*: int               ## tests tend to get unique numbers
+  clock*: float              ## used to measure test timing
+  memory*: int               ## used to measure test memory
+  
+
+ + + Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
ballsDry {.booldefine.} = false
+
+ + + Source   +Edit   + +
+
+
+
emojiSource = " 🗏 "
+
+ + + Source   +Edit   + +
+
+
+
emojiStack = " 🗇 "
+
+ + + Source   +Edit   + +
+
+
+
hasDefects = true
+
+ + + Source   +Edit   + +
+
+
+
hasPanics = false
+
+ + + Source   +Edit   + +
+
+
+
onCI {.used.} = true
+
+ + + Source   +Edit   + +
+
+
+
testable = {nnkBlockStmt, nnkIfStmt, nnkWhileStmt, nnkForStmt, nnkTryStmt,
+            nnkReturnStmt, nnkYieldStmt, nnkDiscardStmt, nnkContinueStmt,
+            nnkAsmStmt, nnkImportStmt, nnkImportExceptStmt, nnkExportStmt,
+            nnkExportExceptStmt, nnkFromStmt, nnkIncludeStmt, nnkCommand,
+            nnkCall, nnkWhenStmt}
+
+ + + Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc dollar(n: NimNode): NimNode {....raises: [], tags: [], forbids: [].}
+
+ + If it's not a string literal, dollar it. + Source   +Edit   + +
+
+ +
+
+
+
proc flushStreams() {.noconv, used, ...raises: [], tags: [WriteIOEffect],
+                      forbids: [].}
+
+ + Convenience for flushing stdmsg() during process exit. + Source   +Edit   + +
+
+ +
+
+
+
proc init(test: var Test; name: string; code: NimNode) {....raises: [], tags: [],
+    forbids: [].}
+
+ + initialize a test with the most basic input possible + Source   +Edit   + +
+
+ +
+
+
+
proc setBallsResult(q: int) {....raises: [], tags: [], forbids: [].}
+
+ + + Source   +Edit   + +
+
+ +
+
+
+
proc totalTests(): int {....raises: [], tags: [], forbids: [].}
+
+ + reveal the value of the counter without exposing it + Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template noclobber(body: untyped)
+
+ + serialize access to the body; usually for output reasons + Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/balls/spec.idx b/balls/spec.idx new file mode 100644 index 0000000..a4ab53c --- /dev/null +++ b/balls/spec.idx @@ -0,0 +1,29 @@ +nimTitle spec balls/spec.html module balls/spec 0 +nim setBallsResult balls/spec.html#setBallsResult,int proc setBallsResult(q: int) 36 +nim hasPanics balls/spec.html#hasPanics const hasPanics 48 +nim hasDefects balls/spec.html#hasDefects const hasDefects 56 +nim ballsDry balls/spec.html#ballsDry const ballsDry 64 +nim onCI balls/spec.html#onCI const onCI 65 +nim testable balls/spec.html#testable const testable 67 +nim emojiStack balls/spec.html#emojiStack const emojiStack 95 +nim emojiSource balls/spec.html#emojiSource const emojiSource 96 +nim None balls/spec.html#None StatusKind.None 98 +nim Info balls/spec.html#Info StatusKind.Info 98 +nim Wait balls/spec.html#Wait StatusKind.Wait 98 +nim Runs balls/spec.html#Runs StatusKind.Runs 98 +nim Pass balls/spec.html#Pass StatusKind.Pass 98 +nim Skip balls/spec.html#Skip StatusKind.Skip 98 +nim Part balls/spec.html#Part StatusKind.Part 98 +nim Fail balls/spec.html#Fail StatusKind.Fail 98 +nim Died balls/spec.html#Died StatusKind.Died 98 +nim Oops balls/spec.html#Oops StatusKind.Oops 98 +nim StatusKind balls/spec.html#StatusKind enum StatusKind 98 +nim FailError balls/spec.html#FailError object FailError 111 +nim SkipError balls/spec.html#SkipError object SkipError 112 +nim ExpectedError balls/spec.html#ExpectedError object ExpectedError 113 +nim Test balls/spec.html#Test object Test 115 +nim totalTests balls/spec.html#totalTests proc totalTests(): int 126 +nim init balls/spec.html#init,Test,string,NimNode proc init(test: var Test; name: string; code: NimNode) 130 +nim dollar balls/spec.html#dollar,NimNode proc dollar(n: NimNode): NimNode 155 +nim flushStreams balls/spec.html#flushStreams proc flushStreams() 168 +nim noclobber balls/spec.html#noclobber.t,untyped template noclobber(body: untyped) 178 diff --git a/balls/style.html b/balls/style.html new file mode 100644 index 0000000..0d84b77 --- /dev/null +++ b/balls/style.html @@ -0,0 +1,415 @@ + + + + + + + +balls/style + + + + + + + + + + + + +
+
+

balls/style

+
+ +
+ Source   +Edit   + +
+ +

+
+

Imports

+
+ spec +
+
+
+

Types

+
+
+
Styling = distinct string
+
+ + + Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
commentStyle = "\e[97m\e[3m"
+
+ + + Source   +Edit   + +
+
+
+
exceptionStyle = "\e[91m"
+
+ + + Source   +Edit   + +
+
+
+
failureStyle = "\e[31m"
+
+ + + Source   +Edit   + +
+
+
+
headerStyle = "\e[96m\e[4m\e[3m"
+
+ + + Source   +Edit   + +
+
+
+
informStyle = "\e[94m"
+
+ + + Source   +Edit   + +
+
+
+
leaderStyle = "\e[96m\e[3m"
+
+ + + Source   +Edit   + +
+
+
+
lineNumStyle = "\e[90m\e[3m"
+
+ + + Source   +Edit   + +
+
+
+
oopsStyle = "\e[91m\e[48;2;255;255;255m\e[7m\e[1m"
+
+ + + Source   +Edit   + +
+
+
+
partialStyle = "\e[93m"
+
+ + + Source   +Edit   + +
+
+
+
resetStyle = "\e[0m"
+
+ + + Source   +Edit   + +
+
+
+
resultsStyle = "\e[97m\e[3m"
+
+ + + Source   +Edit   + +
+
+
+
skippedStyle = "\e[35m\e[9m"
+
+ + + Source   +Edit   + +
+
+
+
sourceStyle = "\e[39m"
+
+ + + Source   +Edit   + +
+
+
+
statusStyles: array[StatusKind, Styling] = ["\e[0m", "\e[94m", "\e[94m",
+    "\e[94m", "\e[32m", "\e[97m\e[3m", "\e[93m", "\e[31m", "\e[91m",
+    "\e[91m\e[48;2;255;255;255m\e[7m\e[1m"]
+
+ + + Source   +Edit   + +
+
+
+
successStyle = "\e[32m"
+
+ + + Source   +Edit   + +
+
+
+
viaFileStyle = "\e[94m\e[4m\e[3m"
+
+ + + Source   +Edit   + +
+
+
+
viaProcStyle = "\e[34m\e[3m"
+
+ + + Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(style: Styling): string {....raises: [], tags: [], forbids: [].}
+
+ + + Source   +Edit   + +
+
+ +
+
+
+
proc `&`(a, b: Styling): Styling {.borrow, ...raises: [], tags: [], forbids: [].}
+
+ + + Source   +Edit   + +
+
+
+
proc `&`(a: string; b: Styling): Styling {....raises: [], tags: [], forbids: [].}
+
+ + + Source   +Edit   + +
+
+
+
proc `&`(a: Styling; b: string): Styling {....raises: [], tags: [], forbids: [].}
+
+ + + Source   +Edit   + +
+
+
+
proc `&`(style: Styling; n: NimNode): NimNode {....raises: [], tags: [],
+    forbids: [].}
+
+ + combine style and something $able, but only output the style if you find that the program is on a tty at runtime + Source   +Edit   + +
+
+ +
+
+
+
proc useColor(): bool {....raises: [], tags: [], forbids: [].}
+
+ + for the bland folks; they live among us! + Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/balls/style.idx b/balls/style.idx new file mode 100644 index 0000000..060d031 --- /dev/null +++ b/balls/style.idx @@ -0,0 +1,26 @@ +nimTitle style balls/style.html module balls/style 0 +nim Styling balls/style.html#Styling type Styling 9 +nim `&` balls/style.html#&,Styling,Styling proc `&`(a, b: Styling): Styling 11 +nim `&` balls/style.html#&,Styling,string proc `&`(a: Styling; b: string): Styling 12 +nim `&` balls/style.html#&,string,Styling proc `&`(a: string; b: Styling): Styling 13 +nim resetStyle balls/style.html#resetStyle const resetStyle 27 +nim resultsStyle balls/style.html#resultsStyle const resultsStyle 28 +nim informStyle balls/style.html#informStyle const informStyle 30 +nim commentStyle balls/style.html#commentStyle const commentStyle 31 +nim lineNumStyle balls/style.html#lineNumStyle const lineNumStyle 33 +nim partialStyle balls/style.html#partialStyle const partialStyle 35 +nim successStyle balls/style.html#successStyle const successStyle 36 +nim oopsStyle balls/style.html#oopsStyle const oopsStyle 37 +nim failureStyle balls/style.html#failureStyle const failureStyle 41 +nim skippedStyle balls/style.html#skippedStyle const skippedStyle 42 +nim exceptionStyle balls/style.html#exceptionStyle const exceptionStyle 44 +nim sourceStyle balls/style.html#sourceStyle const sourceStyle 45 +nim viaProcStyle balls/style.html#viaProcStyle const viaProcStyle 46 +nim viaFileStyle balls/style.html#viaFileStyle const viaFileStyle 48 +nim headerStyle balls/style.html#headerStyle const headerStyle 51 +nim leaderStyle balls/style.html#leaderStyle const leaderStyle 54 +nim statusStyles balls/style.html#statusStyles const statusStyles 56 +nim useColor balls/style.html#useColor proc useColor(): bool 82 +nim `$` balls/style.html#$,Styling proc `$`(style: Styling): string 94 +nim `&` balls/style.html#&,Styling,NimNode proc `&`(style: Styling; n: NimNode): NimNode 100 +nimgrp & balls/style.html#&-procs-all proc 11 diff --git a/balls/tabouli.html b/balls/tabouli.html new file mode 100644 index 0000000..ac574cc --- /dev/null +++ b/balls/tabouli.html @@ -0,0 +1,149 @@ + + + + + + + +balls/tabouli + + + + + + + + + + + + +
+
+

balls/tabouli

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + +
+
+ Source   +Edit   + +
+ +

+
+

Imports

+
+ style +
+
+
+

Types

+
+
+
Tabouli = object
+  headers*: seq[string]
+  rows*: seq[seq[string]]
+  freeze*: int
+
+
+ + + Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc render(t: Tabouli; size = 1): string {....raises: [], tags: [], forbids: [].}
+
+ + render a table as a string, perhaps with style; the size argument defines the the anticipated width of unfrozen columns without regard to styling. this allows us to handle 2-char wide emojis properly. + Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/balls/tabouli.idx b/balls/tabouli.idx new file mode 100644 index 0000000..8e14bde --- /dev/null +++ b/balls/tabouli.idx @@ -0,0 +1,3 @@ +nimTitle tabouli balls/tabouli.html module balls/tabouli 0 +nim Tabouli balls/tabouli.html#Tabouli object Tabouli 6 +nim render balls/tabouli.html#render,Tabouli,int proc render(t: Tabouli; size = 1): string 11 diff --git a/clean.svg b/clean.svg new file mode 100644 index 0000000..0ddcd96 --- /dev/null +++ b/clean.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + 🟢 this is a test of goats## 1 +232b 11.2μs🟢 a test of pigs## 2 +216b 2.3μs🟢 var r = 3🟢 sometimes the wolf is nice## 3 +144b 2.3μs🟢 unnamed block## 4 +112b 1.9μs🟢 block:🟢 discard "unnamed test"## 5 +248b 2.3μs🟢 check a list of statements in a block## 6 +160b 2.8μs🟢 inc r## 7 +192b 1.9μs🟢 check r > 0## 8 +112b 1.6μs## this is a nice comment🟢 type🟢 TypesAreNotTests = bool## there's really nothing else to say🟢 const🟢 VariablesDefinedOutsideBlocksAreNotTests = true🟢 a test: block is fine## 9 +128b 2.6μsomission: skipped## 10 +272b 16.9μsomitted: i just don't wanna## 11 +392b 2.6μsmostOmitted: i really just don't wanna## 12 +336b 3.0μs🟢 assert "any statement is a test" != ""## 13 +264b 16.6μs🟢 check r > 0, $r & " is a good test of dynamic messages"## 14 +200b 2.8μs## report for expression expansion: ## StmtListExpr## Empty## Prefix## Sym "not"## Infix## Sym "=="## Sym "r"## IntLit 5🟢 report "report for expression expansion:", r != 5## 15 +192b 12.1μsbut checkpoint behaves as it does in unittest: true🟢 checkpoint "but checkpoint behaves as it does in unittest: ", r == 5## 16 +360b 5.2μsyou love to see it🟢 great expectations## 17 +296b 6.1μs## 17 tests 🟢14 ❔3 + \ No newline at end of file diff --git a/demo.svg b/demo.svg new file mode 100644 index 0000000..89aea53 --- /dev/null +++ b/demo.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + 🟢 this is a test of goats🟢 a test of pigs var r = 3🟢 sometimes the wolf is nice💥 sheepies: ValueError: you're terrible💥 🗏 20 block sheepies:💥 🗏 21 raise newException(ValueError, "you\'re terrible")💥 🗇 examples/fails.nim💥 🗇 21 raise newException(ValueError, "you're terrible") # fails()## proc == from ../../../nims/lib/system.nim line 1461## var r: int = 4🔴 checking some things: r == 3🔴 🗏 23 block check_r:🔴 🗏 24 ## checking some things🔴 🗏 25 ## this block exists only to test inclusion of🔴 🗏 26 ## comments in the test code display...🔴 🗏 27 check r == 3🔴 🗏 28 echo r, " will not be output"🟢 check a list of statements in a block🟢 unnamed block🟢 block:🟢 discard "unnamed test"🟢 inc r🟢 assert r > 0## this is a nice comment type TypesAreNotTests = bool## there's really nothing else to say const VariablesDefinedOutsideBlocksAreNotTests = true🟢 a test: block is fineomission: skippedbroken: compile failed⛔ 🗏 71 block:⛔ 🗏 72 proc broken() =⛔ 🗏 73 doesnt(compile)⛔ 🗏 74 ## 26 tests 🟢9 ❔1 🔴1 💥1 ⛔1🟢 hide this gory when statement🔴 assertions: /home/adavidoff/git/balls/examples/fails.nim(76, 12) `2 != 4 div 2` 🔴 🗏 74 block assertions:🔴 🗏 75 assert 2 == 4 div 2🔴 🗏 76 assert 2 != 4 div 2omitted: i just don't wanna🟢 assert "any statement is a test" != ""🟢 check r > 0, $r & " is a good test of dynamic messages"## report for expression expansion: ## StmtListExpr## Empty## Prefix## Sym "not"## Infix## Sym "=="## Sym "r"## IntLit 5🟢 report "report for expression expansion:", r != 5but checkpoint behaves as it does in unittest: true🟢 checkpoint "but checkpoint behaves as it does in unittest: ", r == 5🔴 explicit failure: this looks bad🔴 🗏 87 block explicit_failure:🔴 🗏 88 fail("this looks bad")## proc < from ../../../nims/lib/system.nim line 1475## let x: int = 0🔴 check with message: empty strings are STILL too long🔴 🗏 90 block check_with_message:🔴 🗏 91 let x = 0🔴 🗏 92 check "".len < x, "empty strings are STILL too long"you love to see it🟢 great expectationshere comes trouble💥 unmet expectations: ExpectedError: expected ValueError exception💥 🗏 99 block unmet_expectations:💥 🗏 100 expect ValueError:💥 🗏 101 checkpoint "here comes trouble"💥 🗇 balls.nim💥 🗇 505 raise newException ExpectedError: # fails()## enumfield false: (afraid to check type or value)🔴 dashed expectations: the truth hurts, but not as much as the false🔴 🗏 103 block dashed_expectations:🔴 🗏 104 expect ValueError:🔴 🗏 105 check false, "the truth hurts, but not as much as the false"## 24 tests 🟢15 ❔2 🔴5 💥2 ⛔1 + \ No newline at end of file diff --git a/dochack.js b/dochack.js new file mode 100644 index 0000000..41b4ff7 --- /dev/null +++ b/dochack.js @@ -0,0 +1,1609 @@ +/* Generated by the Nim Compiler v2.1.1 */ +var framePtr = null; +var excHandler = 0; +var lastJSError = null; +var NTI33554466 = {size: 0,kind: 1,base: null,node: null,finalizer: null}; +var NTI704643086 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI33554435 = {size: 0,kind: 31,base: null,node: null,finalizer: null}; +var NTI939524173 = {size: 0,kind: 31,base: null,node: null,finalizer: null}; +var NTI939524179 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI134217745 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217749 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217751 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555169 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555177 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33554449 = {size: 0,kind: 28,base: null,node: null,finalizer: null}; +var NTI33554450 = {size: 0,kind: 29,base: null,node: null,finalizer: null}; +var NTI33555176 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33555173 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555174 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217741 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217743 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NNI134217743 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217743.node = NNI134217743; +var NNI134217741 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217741.node = NNI134217741; +var NNI33555174 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555174.node = NNI33555174; +NTI33555176.base = NTI33555173; +NTI33555177.base = NTI33555173; +var NNI33555173 = {kind: 2, len: 5, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "parent", len: 0, typ: NTI33555176, name: "parent", sons: null}, +{kind: 1, offset: "name", len: 0, typ: NTI33554450, name: "name", sons: null}, +{kind: 1, offset: "message", len: 0, typ: NTI33554449, name: "msg", sons: null}, +{kind: 1, offset: "trace", len: 0, typ: NTI33554449, name: "trace", sons: null}, +{kind: 1, offset: "up", len: 0, typ: NTI33555177, name: "up", sons: null}]}; +NTI33555173.node = NNI33555173; +var NNI33555169 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555169.node = NNI33555169; +NTI33555173.base = NTI33555169; +NTI33555174.base = NTI33555173; +NTI134217741.base = NTI33555174; +NTI134217743.base = NTI134217741; +var NNI134217751 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217751.node = NNI134217751; +NTI134217751.base = NTI33555174; +var NNI134217749 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217749.node = NNI134217749; +NTI134217749.base = NTI33555174; +var NNI134217745 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217745.node = NNI134217745; +NTI134217745.base = NTI33555174; +var NNI939524179 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "a", len: 0, typ: NTI939524173, name: "a", sons: null}, +{kind: 1, offset: "b", len: 0, typ: NTI33554435, name: "b", sons: null}]}; +NTI939524179.node = NNI939524179; +var NNI704643086 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "Field0", len: 0, typ: NTI33554435, name: "Field0", sons: null}, +{kind: 1, offset: "Field1", len: 0, typ: NTI33554466, name: "Field1", sons: null}]}; +NTI704643086.node = NNI704643086; + +function mnewString(len_33556990) { + var result = new Array(len_33556990); + for (var i = 0; i < len_33556990; i++) {result[i] = 0;} + return result; + + + +} + +function toJSStr(s_33556891) { + var result_33556892 = null; + + var res_33556933 = newSeq_33556909((s_33556891).length); + var i_33556934 = 0; + var j_33556935 = 0; + Label1: { + Label2: while (true) { + if (!(i_33556934 < (s_33556891).length)) break Label2; + var c_33556936 = s_33556891[i_33556934]; + if ((c_33556936 < 128)) { + res_33556933[j_33556935] = String.fromCharCode(c_33556936); + i_33556934 += 1; + } + else { + var helper_33556948 = newSeq_33556909(0); + Label3: { + Label4: while (true) { + if (!true) break Label4; + var code_33556949 = c_33556936.toString(16); + if ((((code_33556949) == null ? 0 : (code_33556949).length) == 1)) { + helper_33556948.push("%0");; + } + else { + helper_33556948.push("%");; + } + + helper_33556948.push(code_33556949);; + i_33556934 += 1; + if ((((s_33556891).length <= i_33556934) || (s_33556891[i_33556934] < 128))) { + break Label3; + } + + c_33556936 = s_33556891[i_33556934]; + } + }; +++excHandler; + try { + res_33556933[j_33556935] = decodeURIComponent(helper_33556948.join("")); +--excHandler; +} catch (EXCEPTION) { + var prevJSError = lastJSError; + lastJSError = EXCEPTION; + --excHandler; + res_33556933[j_33556935] = helper_33556948.join(""); + lastJSError = prevJSError; + } finally { + } + } + + j_33556935 += 1; + } + }; + if (res_33556933.length < j_33556935) { for (var i = res_33556933.length ; i < j_33556935 ; ++i) res_33556933.push(null); } + else { res_33556933.length = j_33556935; }; + result_33556892 = res_33556933.join(""); + + return result_33556892; + +} + +function raiseException(e_33556643, ename_33556644) { + e_33556643.name = ename_33556644; + if ((excHandler == 0)) { + unhandledException(e_33556643); + } + + throw e_33556643; + + +} + +function addInt(a_33557037, b_33557038) { + var result = a_33557037 + b_33557038; + checkOverflowInt(result); + return result; + + + +} + +function chckRange(i_33557311, a_33557312, b_33557313) { + var result_33557314 = 0; + + BeforeRet: { + if (((a_33557312 <= i_33557311) && (i_33557311 <= b_33557313))) { + result_33557314 = i_33557311; + break BeforeRet; + } + else { + raiseRangeError(); + } + + }; + + return result_33557314; + +} + +function setConstr() { + var result = {}; + for (var i = 0; i < arguments.length; ++i) { + var x = arguments[i]; + if (typeof(x) == "object") { + for (var j = x[0]; j <= x[1]; ++j) { + result[j] = true; + } + } else { + result[x] = true; + } + } + return result; + + + +} +var ConstSet1 = setConstr(17, 16, 4, 18, 27, 19, 23, 22, 21); + +function nimCopy(dest_33557255, src_33557256, ti_33557257) { + var result_33557266 = null; + + switch (ti_33557257.kind) { + case 21: + case 22: + case 23: + case 5: + if (!(isFatPointer_33557246(ti_33557257))) { + result_33557266 = src_33557256; + } + else { + result_33557266 = [src_33557256[0], src_33557256[1]]; + } + + break; + case 19: + if (dest_33557255 === null || dest_33557255 === undefined) { + dest_33557255 = {}; + } + else { + for (var key in dest_33557255) { delete dest_33557255[key]; } + } + for (var key in src_33557256) { dest_33557255[key] = src_33557256[key]; } + result_33557266 = dest_33557255; + + break; + case 18: + case 17: + if (!((ti_33557257.base == null))) { + result_33557266 = nimCopy(dest_33557255, src_33557256, ti_33557257.base); + } + else { + if ((ti_33557257.kind == 17)) { + result_33557266 = (dest_33557255 === null || dest_33557255 === undefined) ? {m_type: ti_33557257} : dest_33557255; + } + else { + result_33557266 = (dest_33557255 === null || dest_33557255 === undefined) ? {} : dest_33557255; + } + } + nimCopyAux(result_33557266, src_33557256, ti_33557257.node); + break; + case 4: + case 16: + if(ArrayBuffer.isView(src_33557256)) { + if(dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new src_33557256.constructor(src_33557256); + } else { + dest_33557255.set(src_33557256, 0); + } + result_33557266 = dest_33557255; + } else { + if (src_33557256 === null) { + result_33557266 = null; + } + else { + if (dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new Array(src_33557256.length); + } + result_33557266 = dest_33557255; + for (var i = 0; i < src_33557256.length; ++i) { + result_33557266[i] = nimCopy(result_33557266[i], src_33557256[i], ti_33557257.base); + } + } + } + + break; + case 24: + case 27: + if (src_33557256 === null) { + result_33557266 = null; + } + else { + if (dest_33557255 === null || dest_33557255 === undefined || dest_33557255.length != src_33557256.length) { + dest_33557255 = new Array(src_33557256.length); + } + result_33557266 = dest_33557255; + for (var i = 0; i < src_33557256.length; ++i) { + result_33557266[i] = nimCopy(result_33557266[i], src_33557256[i], ti_33557257.base); + } + } + + break; + case 28: + if (src_33557256 !== null) { + result_33557266 = src_33557256.slice(0); + } + + break; + default: + result_33557266 = src_33557256; + break; + } + + return result_33557266; + +} + +function chckIndx(i_33557306, a_33557307, b_33557308) { + var result_33557309 = 0; + + BeforeRet: { + if (((a_33557307 <= i_33557306) && (i_33557306 <= b_33557308))) { + result_33557309 = i_33557306; + break BeforeRet; + } + else { + raiseIndexError(i_33557306, a_33557307, b_33557308); + } + + }; + + return result_33557309; + +} + +function makeNimstrLit(c_33556885) { + var result = []; + for (var i = 0; i < c_33556885.length; ++i) { + result[i] = c_33556885.charCodeAt(i); + } + return result; + + + +} + +function subInt(a_33557041, b_33557042) { + var result = a_33557041 - b_33557042; + checkOverflowInt(result); + return result; + + + +} + +function cstrToNimstr(c_33556888) { + var ln = c_33556888.length; + var result = new Array(ln); + var r = 0; + for (var i = 0; i < ln; ++i) { + var ch = c_33556888.charCodeAt(i); + + if (ch < 128) { + result[r] = ch; + } + else { + if (ch < 2048) { + result[r] = (ch >> 6) | 192; + } + else { + if (ch < 55296 || ch >= 57344) { + result[r] = (ch >> 12) | 224; + } + else { + ++i; + ch = 65536 + (((ch & 1023) << 10) | (c_33556888.charCodeAt(i) & 1023)); + result[r] = (ch >> 18) | 240; + ++r; + result[r] = ((ch >> 12) & 63) | 128; + } + ++r; + result[r] = ((ch >> 6) & 63) | 128; + } + ++r; + result[r] = (ch & 63) | 128; + } + ++r; + } + return result; + + + +} +var ConstSet2 = setConstr([65, 90]); +var ConstSet3 = setConstr(95, 32, 46); +var ConstSet4 = setConstr(95, 32, 46); + +function mulInt(a_33557045, b_33557046) { + var result = a_33557045 * b_33557046; + checkOverflowInt(result); + return result; + + + +} +var ConstSet5 = setConstr([97, 122]); +var ConstSet6 = setConstr([65, 90], [97, 122]); +var ConstSet7 = setConstr([97, 122]); +var ConstSet8 = setConstr([65, 90]); +var ConstSet9 = setConstr([65, 90], [97, 122]); + +function nimMax(a_33557095, b_33557096) { + var Temporary1; + + var result_33557097 = 0; + + BeforeRet: { + if ((b_33557096 <= a_33557095)) { + Temporary1 = a_33557095; + } + else { + Temporary1 = b_33557096; + } + + result_33557097 = Temporary1; + break BeforeRet; + }; + + return result_33557097; + +} + +function nimMin(a_33557091, b_33557092) { + var Temporary1; + + var result_33557093 = 0; + + BeforeRet: { + if ((a_33557091 <= b_33557092)) { + Temporary1 = a_33557091; + } + else { + Temporary1 = b_33557092; + } + + result_33557093 = Temporary1; + break BeforeRet; + }; + + return result_33557093; + +} + +function addChar(x_33557402, c_33557403) { + x_33557402.push(c_33557403); + + +} +var objectID_1157628079 = [0]; + +function setTheme(theme_553648134) { + document.documentElement.setAttribute("data-theme", theme_553648134); + window.localStorage.setItem("theme", theme_553648134); + + +} + +function add_33556366(x_33556367, x_33556367_Idx, y_33556368) { + if (x_33556367[x_33556367_Idx] === null) { x_33556367[x_33556367_Idx] = []; } + var off = x_33556367[x_33556367_Idx].length; + x_33556367[x_33556367_Idx].length += y_33556368.length; + for (var i = 0; i < y_33556368.length; ++i) { + x_33556367[x_33556367_Idx][off+i] = y_33556368.charCodeAt(i); + } + + + +} + +function newSeq_33556909(len_33556911) { + var result_33556912 = []; + + result_33556912 = new Array(len_33556911); for (var i = 0 ; i < len_33556911 ; ++i) { result_33556912[i] = null; } + return result_33556912; + +} + +function unhandledException(e_33556639) { + var buf_33556640 = [[]]; + if (!(((e_33556639.message).length == 0))) { + buf_33556640[0].push.apply(buf_33556640[0], [69,114,114,111,114,58,32,117,110,104,97,110,100,108,101,100,32,101,120,99,101,112,116,105,111,110,58,32]);; + buf_33556640[0].push.apply(buf_33556640[0], e_33556639.message);; + } + else { + buf_33556640[0].push.apply(buf_33556640[0], [69,114,114,111,114,58,32,117,110,104,97,110,100,108,101,100,32,101,120,99,101,112,116,105,111,110]);; + } + + buf_33556640[0].push.apply(buf_33556640[0], [32,91]);; + add_33556366(buf_33556640, 0, e_33556639.name); + buf_33556640[0].push.apply(buf_33556640[0], [93,10]);; + var cbuf_33556641 = toJSStr(buf_33556640[0]); + if (typeof(Error) !== "undefined") { + throw new Error(cbuf_33556641); + } + else { + throw cbuf_33556641; + } + + + +} + +function raiseOverflow() { + raiseException({message: [111,118,101,114,45,32,111,114,32,117,110,100,101,114,102,108,111,119], parent: null, m_type: NTI134217743, name: null, trace: [], up: null}, "OverflowDefect"); + + +} + +function checkOverflowInt(a_33557035) { + if (a_33557035 > 2147483647 || a_33557035 < -2147483648) raiseOverflow(); + + + +} + +function raiseRangeError() { + raiseException({message: [118,97,108,117,101,32,111,117,116,32,111,102,32,114,97,110,103,101], parent: null, m_type: NTI134217751, name: null, trace: [], up: null}, "RangeDefect"); + + +} + +function addChars_301990087(result_301990089, result_301990089_Idx, x_301990090, start_301990091, n_301990092) { + var Temporary1; + + var old_301990093 = (result_301990089[result_301990089_Idx]).length; + if (result_301990089[result_301990089_Idx].length < (Temporary1 = chckRange(addInt(old_301990093, n_301990092), 0, 2147483647), Temporary1)) { for (var i = result_301990089[result_301990089_Idx].length; i < Temporary1; ++i) result_301990089[result_301990089_Idx].push(0); } + else {result_301990089[result_301990089_Idx].length = Temporary1; }; + Label2: { + var iHEX60gensym4_301990107 = 0; + var i_553649320 = 0; + Label3: { + Label4: while (true) { + if (!(i_553649320 < n_301990092)) break Label4; + iHEX60gensym4_301990107 = i_553649320; + result_301990089[result_301990089_Idx][chckIndx(addInt(old_301990093, iHEX60gensym4_301990107), 0, (result_301990089[result_301990089_Idx]).length - 1)] = x_301990090.charCodeAt(chckIndx(addInt(start_301990091, iHEX60gensym4_301990107), 0, (x_301990090).length - 1)); + i_553649320 = addInt(i_553649320, 1); + } + }; + }; + + +} + +function addChars_301990083(result_301990085, result_301990085_Idx, x_301990086) { + addChars_301990087(result_301990085, result_301990085_Idx, x_301990086, 0, ((x_301990086) == null ? 0 : (x_301990086).length)); + + +} + +function addInt_301990108(result_301990109, result_301990109_Idx, x_301990110) { + addChars_301990083(result_301990109, result_301990109_Idx, ((x_301990110) + "")); + + +} + +function addInt_301990126(result_301990127, result_301990127_Idx, x_301990128) { + addInt_301990108(result_301990127, result_301990127_Idx, BigInt(x_301990128)); + + +} + +function HEX24_385875976(x_385875977) { + var result_385875978 = [[]]; + + addInt_301990126(result_385875978, 0, x_385875977); + + return result_385875978[0]; + +} + +function isFatPointer_33557246(ti_33557247) { + var result_33557248 = false; + + BeforeRet: { + result_33557248 = !((ConstSet1[ti_33557247.base.kind] != undefined)); + break BeforeRet; + }; + + return result_33557248; + +} + +function nimCopyAux(dest_33557259, src_33557260, n_33557261) { + switch (n_33557261.kind) { + case 0: + break; + case 1: + dest_33557259[n_33557261.offset] = nimCopy(dest_33557259[n_33557261.offset], src_33557260[n_33557261.offset], n_33557261.typ); + + break; + case 2: + for (var i = 0; i < n_33557261.sons.length; i++) { + nimCopyAux(dest_33557259, src_33557260, n_33557261.sons[i]); + } + + break; + case 3: + dest_33557259[n_33557261.offset] = nimCopy(dest_33557259[n_33557261.offset], src_33557260[n_33557261.offset], n_33557261.typ); + for (var i = 0; i < n_33557261.sons.length; ++i) { + nimCopyAux(dest_33557259, src_33557260, n_33557261.sons[i][1]); + } + + break; + } + + +} + +function raiseIndexError(i_33556802, a_33556803, b_33556804) { + var Temporary1; + + if ((b_33556804 < a_33556803)) { + Temporary1 = [105,110,100,101,120,32,111,117,116,32,111,102,32,98,111,117,110,100,115,44,32,116,104,101,32,99,111,110,116,97,105,110,101,114,32,105,115,32,101,109,112,116,121]; + } + else { + Temporary1 = ([105,110,100,101,120,32] || []).concat(HEX24_385875976(i_33556802) || [],[32,110,111,116,32,105,110,32] || [],HEX24_385875976(a_33556803) || [],[32,46,46,32] || [],HEX24_385875976(b_33556804) || []); + } + + raiseException({message: nimCopy(null, Temporary1, NTI33554449), parent: null, m_type: NTI134217749, name: null, trace: [], up: null}, "IndexDefect"); + + +} + +function sysFatal_268435501(message_268435504) { + raiseException({message: nimCopy(null, message_268435504, NTI33554449), m_type: NTI134217745, parent: null, name: null, trace: [], up: null}, "AssertionDefect"); + + +} + +function raiseAssert_268435499(msg_268435500) { + sysFatal_268435501(msg_268435500); + + +} + +function failedAssertImpl_268435541(msg_268435542) { + raiseAssert_268435499(msg_268435542); + + +} + +function onDOMLoaded(e_553648169) { + +function HEX3Aanonymous_553648192(event_553648193) { + event_553648193.target.parentNode.style.display = "none"; + event_553648193.target.parentNode.nextSibling.style.display = "inline"; + + + } + + document.getElementById("theme-select").value = window.localStorage.getItem("theme"); + Label1: { + var pragmaDots_553648191 = null; + var colontmp__553649311 = []; + colontmp__553649311 = document.getElementsByClassName("pragmadots"); + var i_553649313 = 0; + var L_553649314 = (colontmp__553649311).length; + Label2: { + Label3: while (true) { + if (!(i_553649313 < L_553649314)) break Label3; + pragmaDots_553648191 = colontmp__553649311[chckIndx(i_553649313, 0, (colontmp__553649311).length - 1)]; + pragmaDots_553648191.onclick = HEX3Aanonymous_553648192; + i_553649313 += 1; + if (!(((colontmp__553649311).length == L_553649314))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + + +} + +function isWhitespace_553648533(x_553648534) { + var result_553648535 = false; + + result_553648535 = (((x_553648534.nodeName == "#text") && !/\S/.test(x_553648534.textContent)) || (x_553648534.nodeName == "#comment")); + + return result_553648535; + +} + +function toToc_553648536(x_553648537, father_553648538) { + var Temporary5; + var Temporary6; + var Temporary7; + var Temporary8; + var Temporary15; + + if ((x_553648537.nodeName == "UL")) { + var f_553648546 = {heading: null, kids: [], sortId: (father_553648538.kids).length, doSort: false}; + var i_553648547 = 0; + Label1: { + Label2: while (true) { + if (!(i_553648547 < x_553648537.childNodes.length)) break Label2; + var nxt_553648548 = addInt(i_553648547, 1); + Label3: { + Label4: while (true) { + if (!(nxt_553648548 < x_553648537.childNodes.length)) Temporary5 = false; else { Temporary5 = isWhitespace_553648533(x_553648537.childNodes[nxt_553648548]); } if (!Temporary5) break Label4; + nxt_553648548 = addInt(nxt_553648548, 1); + } + }; + if (!(nxt_553648548 < x_553648537.childNodes.length)) Temporary8 = false; else { Temporary8 = (x_553648537.childNodes[i_553648547].nodeName == "LI"); } if (!Temporary8) Temporary7 = false; else { Temporary7 = (x_553648537.childNodes[i_553648547].childNodes.length == 1); } if (!Temporary7) Temporary6 = false; else { Temporary6 = (x_553648537.childNodes[nxt_553648548].nodeName == "UL"); } if (Temporary6) { + var e_553648560 = {heading: x_553648537.childNodes[i_553648547].childNodes[0], kids: [], sortId: (f_553648546.kids).length, doSort: false}; + var it_553648561 = x_553648537.childNodes[nxt_553648548]; + Label9: { + var j_553648566 = 0; + var colontmp__553649327 = 0; + colontmp__553649327 = it_553648561.childNodes.length; + var i_553649328 = 0; + Label10: { + Label11: while (true) { + if (!(i_553649328 < colontmp__553649327)) break Label11; + j_553648566 = i_553649328; + toToc_553648536(it_553648561.childNodes[j_553648566], e_553648560); + i_553649328 = addInt(i_553649328, 1); + } + }; + }; + f_553648546.kids.push(e_553648560);; + i_553648547 = addInt(nxt_553648548, 1); + } + else { + toToc_553648536(x_553648537.childNodes[i_553648547], f_553648546); + i_553648547 = addInt(i_553648547, 1); + } + + } + }; + father_553648538.kids.push(f_553648546);; + } + else { + if (isWhitespace_553648533(x_553648537)) { + } + else { + if ((x_553648537.nodeName == "LI")) { + var idx_553648583 = []; + Label12: { + var i_553648588 = 0; + var colontmp__553649331 = 0; + colontmp__553649331 = x_553648537.childNodes.length; + var i_553649332 = 0; + Label13: { + Label14: while (true) { + if (!(i_553649332 < colontmp__553649331)) break Label14; + i_553648588 = i_553649332; + if (!(isWhitespace_553648533(x_553648537.childNodes[i_553648588]))) { + idx_553648583.push(i_553648588);; + } + + i_553649332 = addInt(i_553649332, 1); + } + }; + }; + if (!((idx_553648583).length == 2)) Temporary15 = false; else { Temporary15 = (x_553648537.childNodes[idx_553648583[chckIndx(1, 0, (idx_553648583).length - 1)]].nodeName == "UL"); } if (Temporary15) { + var e_553648604 = {heading: x_553648537.childNodes[idx_553648583[chckIndx(0, 0, (idx_553648583).length - 1)]], kids: [], sortId: (father_553648538.kids).length, doSort: false}; + var it_553648605 = x_553648537.childNodes[idx_553648583[chckIndx(1, 0, (idx_553648583).length - 1)]]; + Label16: { + var j_553648610 = 0; + var colontmp__553649335 = 0; + colontmp__553649335 = it_553648605.childNodes.length; + var i_553649336 = 0; + Label17: { + Label18: while (true) { + if (!(i_553649336 < colontmp__553649335)) break Label18; + j_553648610 = i_553649336; + toToc_553648536(it_553648605.childNodes[j_553648610], e_553648604); + i_553649336 = addInt(i_553649336, 1); + } + }; + }; + father_553648538.kids.push(e_553648604);; + } + else { + Label19: { + var i_553648619 = 0; + var colontmp__553649339 = 0; + colontmp__553649339 = x_553648537.childNodes.length; + var i_553649340 = 0; + Label20: { + Label21: while (true) { + if (!(i_553649340 < colontmp__553649339)) break Label21; + i_553648619 = i_553649340; + toToc_553648536(x_553648537.childNodes[i_553648619], father_553648538); + i_553649340 = addInt(i_553649340, 1); + } + }; + }; + } + + } + else { + father_553648538.kids.push({heading: x_553648537, kids: [], sortId: (father_553648538.kids).length, doSort: false});; + } + }} + + +} + +function extractItems_553648325(x_553648326, heading_553648327, items_553648328, items_553648328_Idx) { + BeforeRet: { + if ((x_553648326 == null)) { + break BeforeRet; + } + + if ((!((x_553648326.heading == null)) && (x_553648326.heading.textContent == heading_553648327))) { + Label1: { + var i_553648345 = 0; + var colontmp__553649343 = 0; + colontmp__553649343 = (x_553648326.kids).length; + var i_553649344 = 0; + Label2: { + Label3: while (true) { + if (!(i_553649344 < colontmp__553649343)) break Label3; + i_553648345 = i_553649344; + items_553648328[items_553648328_Idx].push(x_553648326.kids[chckIndx(i_553648345, 0, (x_553648326.kids).length - 1)].heading);; + i_553649344 = addInt(i_553649344, 1); + } + }; + }; + } + else { + Label4: { + var k_553648370 = null; + var i_553649348 = 0; + var L_553649349 = (x_553648326.kids).length; + Label5: { + Label6: while (true) { + if (!(i_553649348 < L_553649349)) break Label6; + k_553648370 = x_553648326.kids[chckIndx(i_553649348, 0, (x_553648326.kids).length - 1)]; + extractItems_553648325(k_553648370, heading_553648327, items_553648328, items_553648328_Idx); + i_553649348 += 1; + if (!(((x_553648326.kids).length == L_553649349))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + } + + }; + + +} + +function tree_553648257(tag_553648258, kids_553648259) { + var result_553648260 = null; + + result_553648260 = document.createElement(tag_553648258); + Label1: { + var k_553648273 = null; + var i_553649361 = 0; + Label2: { + Label3: while (true) { + if (!(i_553649361 < (kids_553648259).length)) break Label3; + k_553648273 = kids_553648259[chckIndx(i_553649361, 0, (kids_553648259).length - 1)]; + result_553648260.appendChild(k_553648273); + i_553649361 += 1; + } + }; + }; + + return result_553648260; + +} + +function text_553648281(s_553648282) { + var result_553648283 = null; + + result_553648283 = document.createTextNode(s_553648282); + + return result_553648283; + +} + +function uncovered_553648723(x_553648724) { + var Temporary1; + + var result_553648725 = null; + + BeforeRet: { + if ((((x_553648724.kids).length == 0) && !((x_553648724.heading == null)))) { + if (!(x_553648724.heading.hasOwnProperty('__karaxMarker__'))) { + Temporary1 = x_553648724; + } + else { + Temporary1 = null; + } + + result_553648725 = Temporary1; + break BeforeRet; + } + + result_553648725 = {heading: x_553648724.heading, kids: [], sortId: x_553648724.sortId, doSort: x_553648724.doSort}; + Label2: { + var k_553648740 = null; + var i_553649368 = 0; + var L_553649369 = (x_553648724.kids).length; + Label3: { + Label4: while (true) { + if (!(i_553649368 < L_553649369)) break Label4; + k_553648740 = x_553648724.kids[chckIndx(i_553649368, 0, (x_553648724.kids).length - 1)]; + var y_553648741 = uncovered_553648723(k_553648740); + if (!((y_553648741 == null))) { + result_553648725.kids.push(y_553648741);; + } + + i_553649368 += 1; + if (!(((x_553648724.kids).length == L_553649369))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + if (((result_553648725.kids).length == 0)) { + result_553648725 = null; + } + + }; + + return result_553648725; + +} + +function mergeTocs_553648753(orig_553648754, news_553648755) { + var result_553648756 = null; + + result_553648756 = uncovered_553648723(orig_553648754); + if ((result_553648756 == null)) { + result_553648756 = news_553648755; + } + else { + Label1: { + var i_553648768 = 0; + var colontmp__553649364 = 0; + colontmp__553649364 = (news_553648755.kids).length; + var i_553649365 = 0; + Label2: { + Label3: while (true) { + if (!(i_553649365 < colontmp__553649364)) break Label3; + i_553648768 = i_553649365; + result_553648756.kids.push(news_553648755.kids[chckIndx(i_553648768, 0, (news_553648755.kids).length - 1)]);; + i_553649365 = addInt(i_553649365, 1); + } + }; + }; + } + + + return result_553648756; + +} + +function buildToc_553648773(orig_553648774, types_553648775, procs_553648776) { + var result_553648777 = null; + + var newStuff_553648782 = {heading: null, kids: [], doSort: true, sortId: 0}; + Label1: { + var t_553648786 = null; + var i_553649356 = 0; + var L_553649357 = (types_553648775).length; + Label2: { + Label3: while (true) { + if (!(i_553649356 < L_553649357)) break Label3; + t_553648786 = types_553648775[chckIndx(i_553649356, 0, (types_553648775).length - 1)]; + var c_553648791 = {heading: t_553648786.cloneNode(true), kids: [], doSort: true, sortId: 0}; + t_553648786.__karaxMarker__ = true; + Label4: { + var p_553648795 = null; + var i_553649353 = 0; + var L_553649354 = (procs_553648776).length; + Label5: { + Label6: while (true) { + if (!(i_553649353 < L_553649354)) break Label6; + p_553648795 = procs_553648776[chckIndx(i_553649353, 0, (procs_553648776).length - 1)]; + if (!(p_553648795.hasOwnProperty('__karaxMarker__'))) { + var xx_553648796 = p_553648795.parentNode.getElementsByClassName("attachedType"); + if ((((xx_553648796).length == 1) && (xx_553648796[chckIndx(0, 0, (xx_553648796).length - 1)].textContent == t_553648786.textContent))) { + var q_553648801 = tree_553648257("A", [text_553648281(p_553648795.title)]); + q_553648801.setAttribute("href", p_553648795.getAttribute("href")); + c_553648791.kids.push({heading: q_553648801, kids: [], sortId: 0, doSort: false});; + p_553648795.__karaxMarker__ = true; + } + + } + + i_553649353 += 1; + if (!(((procs_553648776).length == L_553649354))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + newStuff_553648782.kids.push(c_553648791);; + i_553649356 += 1; + if (!(((types_553648775).length == L_553649357))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + result_553648777 = mergeTocs_553648753(orig_553648774, newStuff_553648782); + + return result_553648777; + +} + +function add_553648274(parent_553648275, kid_553648276) { + if (((parent_553648275.nodeName == "TR") && ((kid_553648276.nodeName == "TD") || (kid_553648276.nodeName == "TH")))) { + var k_553648277 = document.createElement("TD"); + k_553648277.appendChild(kid_553648276); + parent_553648275.appendChild(k_553648277); + } + else { + parent_553648275.appendChild(kid_553648276); + } + + + +} + +function setClass_553648278(e_553648279, value_553648280) { + e_553648279.setAttribute("class", value_553648280); + + +} + +function toHtml_553648403(x_553648404, isRoot_553648405) { + +function HEX3Aanonymous_553648423(a_553648424, b_553648425) { + var result_553648426 = 0; + + BeforeRet: { + if ((!((a_553648424.heading == null)) && !((b_553648425.heading == null)))) { + var x_553648435 = a_553648424.heading.textContent; + var y_553648436 = b_553648425.heading.textContent; + if ((x_553648435 < y_553648436)) { + result_553648426 = (-1); + break BeforeRet; + } + + if ((y_553648436 < x_553648435)) { + result_553648426 = 1; + break BeforeRet; + } + + result_553648426 = 0; + break BeforeRet; + } + else { + result_553648426 = subInt(a_553648424.sortId, b_553648425.sortId); + break BeforeRet; + } + + }; + + return result_553648426; + + } + + var result_553648406 = null; + + BeforeRet: { + if ((x_553648404 == null)) { + result_553648406 = null; + break BeforeRet; + } + + if (((x_553648404.kids).length == 0)) { + if ((x_553648404.heading == null)) { + result_553648406 = null; + break BeforeRet; + } + + result_553648406 = x_553648404.heading.cloneNode(true); + break BeforeRet; + } + + result_553648406 = tree_553648257("DIV", []); + if ((!((x_553648404.heading == null)) && !(x_553648404.heading.hasOwnProperty('__karaxMarker__')))) { + add_553648274(result_553648406, x_553648404.heading.cloneNode(true)); + } + + var ul_553648422 = tree_553648257("UL", []); + if (isRoot_553648405) { + setClass_553648278(ul_553648422, "simple simple-toc"); + } + else { + setClass_553648278(ul_553648422, "simple"); + } + + if (x_553648404.doSort) { + x_553648404.kids.sort(HEX3Aanonymous_553648423); + } + + Label1: { + var k_553648448 = null; + var i_553649372 = 0; + var L_553649373 = (x_553648404.kids).length; + Label2: { + Label3: while (true) { + if (!(i_553649372 < L_553649373)) break Label3; + k_553648448 = x_553648404.kids[chckIndx(i_553649372, 0, (x_553648404.kids).length - 1)]; + var y_553648449 = toHtml_553648403(k_553648448, false); + if (!((y_553648449 == null))) { + add_553648274(ul_553648422, tree_553648257("LI", [y_553648449])); + } + + i_553649372 += 1; + if (!(((x_553648404.kids).length == L_553649373))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + if (!((ul_553648422.childNodes.length == 0))) { + add_553648274(result_553648406, ul_553648422); + } + + if ((result_553648406.childNodes.length == 0)) { + result_553648406 = null; + } + + }; + + return result_553648406; + +} + +function replaceById_553648284(id_553648285, newTree_553648286) { + var x_553648287 = document.getElementById(id_553648285); + x_553648287.parentNode.replaceChild(newTree_553648286, x_553648287); + newTree_553648286.id = id_553648285; + + +} + +function togglevis_553648831(d_553648832) { + if ((d_553648832.style.display == "none")) { + d_553648832.style.display = "inline"; + } + else { + d_553648832.style.display = "none"; + } + + + +} + +function groupBy(value_553648834) { + var toc_553648835 = document.getElementById("toc-list"); + if ((alternative_553648830[0] == null)) { + var tt_553648843 = {heading: null, kids: [], sortId: 0, doSort: false}; + toToc_553648536(toc_553648835, tt_553648843); + tt_553648843 = tt_553648843.kids[chckIndx(0, 0, (tt_553648843.kids).length - 1)]; + var types_553648848 = [[]]; + var procs_553648853 = [[]]; + extractItems_553648325(tt_553648843, "Types", types_553648848, 0); + extractItems_553648325(tt_553648843, "Procs", procs_553648853, 0); + extractItems_553648325(tt_553648843, "Converters", procs_553648853, 0); + extractItems_553648325(tt_553648843, "Methods", procs_553648853, 0); + extractItems_553648325(tt_553648843, "Templates", procs_553648853, 0); + extractItems_553648325(tt_553648843, "Macros", procs_553648853, 0); + extractItems_553648325(tt_553648843, "Iterators", procs_553648853, 0); + var ntoc_553648854 = buildToc_553648773(tt_553648843, types_553648848[0], procs_553648853[0]); + var x_553648855 = toHtml_553648403(ntoc_553648854, true); + alternative_553648830[0] = tree_553648257("DIV", [x_553648855]); + } + + if ((value_553648834 == "type")) { + replaceById_553648284("tocRoot", alternative_553648830[0]); + } + else { + replaceById_553648284("tocRoot", tree_553648257("DIV", [])); + } + + togglevis_553648831(document.getElementById("toc-list")); + + +} + +function HEX5BHEX5D_721421547(s_721421550, x_721421551) { + var result_721421552 = []; + + var a_721421554 = x_721421551.a; + var L_721421556 = addInt(subInt(subInt((s_721421550).length, x_721421551.b), a_721421554), 1); + result_721421552 = nimCopy(null, mnewString(chckRange(L_721421556, 0, 2147483647)), NTI33554449); + Label1: { + var i_721421561 = 0; + var i_553649382 = 0; + Label2: { + Label3: while (true) { + if (!(i_553649382 < L_721421556)) break Label3; + i_721421561 = i_553649382; + result_721421552[chckIndx(i_721421561, 0, (result_721421552).length - 1)] = s_721421550[chckIndx(addInt(i_721421561, a_721421554), 0, (s_721421550).length - 1)]; + i_553649382 = addInt(i_553649382, 1); + } + }; + }; + + return result_721421552; + +} + +function HEX2EHEX2E_939524199(a_939524202, b_939524203) { + var result_939524206 = ({a: 0, b: 0}); + + result_939524206 = nimCopy(result_939524206, {a: a_939524202, b: b_939524203}, NTI939524179); + + return result_939524206; + +} +async function loadIndex_553649049() { + var result_553649051 = null; + + BeforeRet: { + var indexURL_553649057 = document.getElementById("indexLink").getAttribute("href"); + var rootURL_553649082 = HEX5BHEX5D_721421547(cstrToNimstr(indexURL_553649057), HEX2EHEX2E_939524199(0, 14)); + var resp_553649094 = (await (await fetch(indexURL_553649057)).text()); + var indexElem_553649095 = document.createElement("div"); + indexElem_553649095.innerHTML = resp_553649094; + Label1: { + var href_553649116 = null; + var colontmp__553649376 = []; + colontmp__553649376 = indexElem_553649095.getElementsByClassName("reference"); + var i_553649378 = 0; + var L_553649379 = (colontmp__553649376).length; + Label2: { + Label3: while (true) { + if (!(i_553649378 < L_553649379)) break Label3; + href_553649116 = colontmp__553649376[chckIndx(i_553649378, 0, (colontmp__553649376).length - 1)]; + href_553649116.setAttribute("href", toJSStr((rootURL_553649082 || []).concat(cstrToNimstr(href_553649116.getAttribute("href")) || []))); + db_553648872[0].push(href_553649116);; + contents_553648873[0].push(href_553649116.getAttribute("data-doc-search-tag"));; + i_553649378 += 1; + if (!(((colontmp__553649376).length == L_553649379))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(254, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + result_553649051 = undefined; + break BeforeRet; + }; + + return result_553649051; + +} + +function then_553649225(future_553649228, onSuccess_553649229, onReject_553649230) { + var result_553649231 = null; + + BeforeRet: { + var ret_553649241 = null; + ret_553649241 = future_553649228.then(onSuccess_553649229, onReject_553649230) + result_553649231 = ret_553649241; + break BeforeRet; + }; + + return result_553649231; + +} + +function nsuToLowerAsciiChar(c_721420373) { + var result_721420374 = 0; + + if ((ConstSet2[c_721420373] != undefined)) { + result_721420374 = (c_721420373 ^ 32); + } + else { + result_721420374 = c_721420373; + } + + + return result_721420374; + +} + +function fuzzyMatch_704643088(pattern_704643089, str_704643090) { + var Temporary4; + var Temporary5; + var Temporary6; + var Temporary7; + var Temporary8; + + var result_704643093 = {Field0: 0, Field1: false}; + + var scoreState_704643094 = (-100); + var headerMatched_704643095 = false; + var unmatchedLeadingCharCount_704643096 = 0; + var consecutiveMatchCount_704643097 = 0; + var strIndex_704643098 = 0; + var patIndex_704643099 = 0; + var score_704643100 = 0; + Label1: { + Label2: while (true) { + if (!((strIndex_704643098 < ((str_704643090) == null ? 0 : (str_704643090).length)) && (patIndex_704643099 < ((pattern_704643089) == null ? 0 : (pattern_704643089).length)))) break Label2; + Label3: { + var patternChar_704643103 = nsuToLowerAsciiChar(pattern_704643089.charCodeAt(chckIndx(patIndex_704643099, 0, (pattern_704643089).length - 1))); + var strChar_704643104 = nsuToLowerAsciiChar(str_704643090.charCodeAt(chckIndx(strIndex_704643098, 0, (str_704643090).length - 1))); + if ((ConstSet3[patternChar_704643103] != undefined)) { + patIndex_704643099 = addInt(patIndex_704643099, 1); + break Label3; + } + + if ((ConstSet4[strChar_704643104] != undefined)) { + strIndex_704643098 = addInt(strIndex_704643098, 1); + break Label3; + } + + if ((!(headerMatched_704643095) && (strChar_704643104 == 58))) { + headerMatched_704643095 = true; + scoreState_704643094 = (-100); + score_704643100 = ((Math.floor((0.5 * score_704643100))) | 0); + patIndex_704643099 = 0; + strIndex_704643098 = addInt(strIndex_704643098, 1); + break Label3; + } + + if ((strChar_704643104 == patternChar_704643103)) { + switch (scoreState_704643094) { + case (-100): + case 20: + scoreState_704643094 = 10; + break; + case 0: + scoreState_704643094 = 5; + score_704643100 = addInt(score_704643100, scoreState_704643094); + break; + case 10: + case 5: + consecutiveMatchCount_704643097 = addInt(consecutiveMatchCount_704643097, 1); + scoreState_704643094 = 5; + score_704643100 = addInt(score_704643100, mulInt(5, consecutiveMatchCount_704643097)); + if ((scoreState_704643094 == 10)) { + score_704643100 = addInt(score_704643100, 10); + } + + var onBoundary_704643156 = (patIndex_704643099 == ((pattern_704643089) == null ? -1 : (pattern_704643089).length - 1)); + if ((!(onBoundary_704643156) && (strIndex_704643098 < ((str_704643090) == null ? -1 : (str_704643090).length - 1)))) { + var nextPatternChar_704643157 = nsuToLowerAsciiChar(pattern_704643089.charCodeAt(chckIndx(addInt(patIndex_704643099, 1), 0, (pattern_704643089).length - 1))); + var nextStrChar_704643158 = nsuToLowerAsciiChar(str_704643090.charCodeAt(chckIndx(addInt(strIndex_704643098, 1), 0, (str_704643090).length - 1))); + if (!!((ConstSet5[nextStrChar_704643158] != undefined))) Temporary4 = false; else { Temporary4 = !((nextStrChar_704643158 == nextPatternChar_704643157)); } onBoundary_704643156 = Temporary4; + } + + if (onBoundary_704643156) { + scoreState_704643094 = 20; + score_704643100 = addInt(score_704643100, scoreState_704643094); + } + + break; + case (-1): + case (-3): + if (!((ConstSet6[str_704643090.charCodeAt(chckIndx(subInt(strIndex_704643098, 1), 0, (str_704643090).length - 1))] != undefined))) Temporary5 = true; else { if (!(ConstSet7[str_704643090.charCodeAt(chckIndx(subInt(strIndex_704643098, 1), 0, (str_704643090).length - 1))] != undefined)) Temporary6 = false; else { Temporary6 = (ConstSet8[str_704643090.charCodeAt(chckIndx(strIndex_704643098, 0, (str_704643090).length - 1))] != undefined); } Temporary5 = Temporary6; } var isLeadingChar_704643182 = Temporary5; + if (isLeadingChar_704643182) { + scoreState_704643094 = 10; + } + else { + scoreState_704643094 = 0; + score_704643100 = addInt(score_704643100, scoreState_704643094); + } + + break; + } + patIndex_704643099 = addInt(patIndex_704643099, 1); + } + else { + switch (scoreState_704643094) { + case (-100): + scoreState_704643094 = (-3); + score_704643100 = addInt(score_704643100, scoreState_704643094); + break; + case 5: + scoreState_704643094 = (-1); + score_704643100 = addInt(score_704643100, scoreState_704643094); + consecutiveMatchCount_704643097 = 0; + break; + case (-3): + if ((unmatchedLeadingCharCount_704643096 < 3)) { + scoreState_704643094 = (-3); + score_704643100 = addInt(score_704643100, scoreState_704643094); + } + + unmatchedLeadingCharCount_704643096 = addInt(unmatchedLeadingCharCount_704643096, 1); + break; + default: + scoreState_704643094 = (-1); + score_704643100 = addInt(score_704643100, scoreState_704643094); + break; + } + } + + strIndex_704643098 = addInt(strIndex_704643098, 1); + }; + } + }; + if (!(patIndex_704643099 == ((pattern_704643089) == null ? 0 : (pattern_704643089).length))) Temporary7 = false; else { if ((strIndex_704643098 == ((str_704643090) == null ? 0 : (str_704643090).length))) Temporary8 = true; else { Temporary8 = !((ConstSet9[str_704643090.charCodeAt(chckIndx(strIndex_704643098, 0, (str_704643090).length - 1))] != undefined)); } Temporary7 = Temporary8; } if (Temporary7) { + score_704643100 = addInt(score_704643100, 10); + } + + var colontmp__553649395 = nimMax(0, score_704643100); + var colontmp__553649396 = (0 < score_704643100); + result_704643093 = nimCopy(result_704643093, {Field0: colontmp__553649395, Field1: colontmp__553649396}, NTI704643086); + + return result_704643093; + +} + +function escapeCString_553648874(x_553648875, x_553648875_Idx) { + var s_553648876 = []; + Label1: { + var c_553648877 = 0; + var iHEX60gensym13_553649399 = 0; + var nHEX60gensym13_553649400 = ((x_553648875[x_553648875_Idx]) == null ? 0 : (x_553648875[x_553648875_Idx]).length); + Label2: { + Label3: while (true) { + if (!(iHEX60gensym13_553649399 < nHEX60gensym13_553649400)) break Label3; + c_553648877 = x_553648875[x_553648875_Idx].charCodeAt(chckIndx(iHEX60gensym13_553649399, 0, (x_553648875[x_553648875_Idx]).length - 1)); + switch (c_553648877) { + case 60: + s_553648876.push.apply(s_553648876, [38,108,116,59]);; + break; + case 62: + s_553648876.push.apply(s_553648876, [38,103,116,59]);; + break; + default: + addChar(s_553648876, c_553648877);; + break; + } + iHEX60gensym13_553649399 += 1; + } + }; + }; + x_553648875[x_553648875_Idx] = toJSStr(s_553648876); + + +} + +function dosearch_553648878(value_553648879) { + +function HEX3Aanonymous_553648906(a_553648911, b_553648912) { + var result_553648917 = 0; + + result_553648917 = subInt(b_553648912["Field1"], a_553648911["Field1"]); + + return result_553648917; + + } + + var result_553648880 = null; + + BeforeRet: { + if (((db_553648872[0]).length == 0)) { + break BeforeRet; + } + + var ul_553648884 = tree_553648257("UL", []); + result_553648880 = tree_553648257("DIV", []); + setClass_553648278(result_553648880, "search_results"); + var matches_553648889 = []; + Label1: { + var i_553648897 = 0; + var colontmp__553649386 = 0; + colontmp__553649386 = (db_553648872[0]).length; + var i_553649387 = 0; + Label2: { + Label3: while (true) { + if (!(i_553649387 < colontmp__553649386)) break Label3; + i_553648897 = i_553649387; + Label4: { + var c_553648898 = contents_553648873[0][chckIndx(i_553648897, 0, (contents_553648873[0]).length - 1)]; + if (((c_553648898 == "Examples") || (c_553648898 == "PEG construction"))) { + break Label4; + } + + var tmpTuple_553648899 = fuzzyMatch_704643088(value_553648879, c_553648898); + var score_553648900 = tmpTuple_553648899["Field0"]; + var matched_553648901 = tmpTuple_553648899["Field1"]; + if (matched_553648901) { + matches_553648889.push({Field0: db_553648872[0][chckIndx(i_553648897, 0, (db_553648872[0]).length - 1)], Field1: score_553648900});; + } + + }; + i_553649387 = addInt(i_553649387, 1); + } + }; + }; + matches_553648889.sort(HEX3Aanonymous_553648906); + Label5: { + var i_553648934 = 0; + var colontmp__553649390 = 0; + colontmp__553649390 = nimMin((matches_553648889).length, 29); + var i_553649391 = 0; + Label6: { + Label7: while (true) { + if (!(i_553649391 < colontmp__553649390)) break Label7; + i_553648934 = i_553649391; + matches_553648889[chckIndx(i_553648934, 0, (matches_553648889).length - 1)]["Field0"].innerHTML = matches_553648889[chckIndx(i_553648934, 0, (matches_553648889).length - 1)]["Field0"].getAttribute("data-doc-search-tag"); + escapeCString_553648874(matches_553648889[chckIndx(i_553648934, 0, (matches_553648889).length - 1)]["Field0"], "innerHTML"); + add_553648274(ul_553648884, tree_553648257("LI", [matches_553648889[chckIndx(i_553648934, 0, (matches_553648889).length - 1)]["Field0"]])); + i_553649391 = addInt(i_553649391, 1); + } + }; + }; + if ((ul_553648884.childNodes.length == 0)) { + add_553648274(result_553648880, tree_553648257("B", [text_553648281("no search results")])); + } + else { + add_553648274(result_553648880, tree_553648257("B", [text_553648281("search results")])); + add_553648274(result_553648880, ul_553648884); + } + + }; + + return result_553648880; + +} + +function search() { + +function wrapper_553649210() { + var elem_553649211 = document.getElementById("searchInput"); + var value_553649212 = elem_553649211.value; + if (!((((value_553649212) == null ? 0 : (value_553649212).length) == 0))) { + if ((oldtoc_553649205[0] == null)) { + oldtoc_553649205[0] = document.getElementById("tocRoot"); + } + + var results_553649216 = dosearch_553648878(value_553649212); + replaceById_553648284("tocRoot", results_553649216); + } + else { + if (!((oldtoc_553649205[0] == null))) { + replaceById_553648284("tocRoot", oldtoc_553649205[0]); + } + } + + + } + + if ((loadIndexFut_553649208[0] == null)) { + loadIndexFut_553649208[0] = loadIndex_553649049(); + var _ = then_553649225(loadIndexFut_553649208[0], wrapper_553649210, null); + } + + if (!((timer_553649206[0] == null))) { + clearTimeout(timer_553649206[0]); + } + + timer_553649206[0] = setTimeout(wrapper_553649210, 400); + + +} + +function copyToClipboard() { + + function updatePreTags() { + + const allPreTags = document.querySelectorAll("pre") + + allPreTags.forEach((e) => { + + const div = document.createElement("div") + div.classList.add("copyToClipBoard") + + const preTag = document.createElement("pre") + preTag.innerHTML = e.innerHTML + + const button = document.createElement("button") + button.value = e.textContent.replace('...', '') + button.classList.add("copyToClipBoardBtn") + button.style.cursor = "pointer" + + div.appendChild(preTag) + div.appendChild(button) + + e.outerHTML = div.outerHTML + + }) + } + + + function copyTextToClipboard(e) { + const clipBoardContent = e.target.value + navigator.clipboard.writeText(clipBoardContent).then(function() { + e.target.style.setProperty("--clipboard-image", "var(--clipboard-image-selected)") + }, function(err) { + console.error("Could not copy text: ", err); + }); + } + + window.addEventListener("click", (e) => { + if (e.target.classList.contains("copyToClipBoardBtn")) { + copyTextToClipboard(e) + } + }) + + window.addEventListener("mouseover", (e) => { + if (e.target.nodeName === "PRE") { + e.target.nextElementSibling.style.setProperty("--clipboard-image", "var(--clipboard-image-normal)") + } + }) + + window.addEventListener("DOMContentLoaded", updatePreTags) + + + + +} +var Temporary1; +var t_553648167 = window.localStorage.getItem("theme"); +if ((t_553648167 == null)) { +Temporary1 = "auto"; +} +else { +Temporary1 = t_553648167; +} + +setTheme(Temporary1); +var alternative_553648830 = [null]; +var db_553648872 = [[]]; +var contents_553648873 = [[]]; +var oldtoc_553649205 = [null]; +var timer_553649206 = [null]; +var loadIndexFut_553649208 = [null]; +copyToClipboard(); +window.addEventListener("DOMContentLoaded", onDOMLoaded, false); diff --git a/index.html b/index.html new file mode 100644 index 0000000..cf64bbd --- /dev/null +++ b/index.html @@ -0,0 +1,490 @@ + + + + + + + +Index + + + + + + + + + + + + +
+
+

Index

+ Modules: balls, balls/runner, balls/semaphores, balls/spec, balls/style, balls/tabouli.

API symbols

+
`$`:
+
`&`:
+
`<`:
+
`==`:
+
`=copy`:
+
`=destroy`:
+
acquire:
+
Analyzer:
+
arc:
+
ASanitizer:
+
available:
+
Backend:
+
ballsDry:
+
ballsFailFast:
+
c:
+
check:
+
checkpoint:
+
cmp:
+
commandLine:
+
commentStyle:
+
contains:
+
cpp:
+
danger:
+
DataRacer:
+
debug:
+
dec:
+
Died:
+
dollar:
+
e:
+
emojiSource:
+
emojiStack:
+
exceptionStyle:
+
Execution:
+
expect:
+
ExpectedError:
+
fail:
+
Fail:
+
FailError:
+
failureStyle:
+
flushStreams:
+
hasDefects:
+
hash:
+
hasPanics:
+
headerStyle:
+
Helgrind:
+
hints:
+
inc:
+
Info:
+
informStyle:
+
init:
+
initSemaphore:
+
isReady:
+
js:
+
leaderStyle:
+
lineNumStyle:
+
main:
+
markAndSweep:
+
Matrix:
+
matrixTable:
+
MemModel:
+
noclobber:
+
None:
+
onCI:
+
Oops:
+
oopsStyle:
+
Optimizer:
+
orc:
+
ordered:
+
Part:
+
partialStyle:
+
Pass:
+
perform:
+
Profile:
+
profiles:
+
refc:
+
release:
+
render:
+
report:
+
resetStyle:
+
resultsStyle:
+
Runs:
+
Semaphore:
+
setBallsResult:
+
signal:
+
skip:
+
Skip:
+
SkipError:
+
skippedStyle:
+
sourceStyle:
+
StatusKind:
+
statusStyles:
+
Styling:
+
successStyle:
+
suite:
+
Tabouli:
+
test:
+
Test:
+
testable:
+
totalTests:
+
TSanitizer:
+
useColor:
+
Valgrind:
+
viaFileStyle:
+
viaProcStyle:
+
vm:
+
wait:
+
Wait:
+
withLock:
+
withSemaphore:
+
+ +
+
+ + + + + + diff --git a/nimdoc.out.css b/nimdoc.out.css new file mode 100644 index 0000000..a9e4ac9 --- /dev/null +++ b/nimdoc.out.css @@ -0,0 +1,1033 @@ +/* +Stylesheet for use with Docutils/rst2html. + +See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to +customize this style sheet. + +Modified from Chad Skeeters' rst2html-style +https://bitbucket.org/cskeeters/rst2html-style/ + +Modified by Boyd Greenfield and narimiran +*/ + +:root { + --primary-background: #fff; + --secondary-background: ghostwhite; + --third-background: #e8e8e8; + --info-background: #50c050; + --warning-background: #c0a000; + --error-background: #e04040; + --border: #dde; + --text: #222; + --anchor: #07b; + --anchor-focus: #607c9f; + --input-focus: #1fa0eb; + --strong: #3c3c3c; + --hint: #9A9A9A; + --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="); + + --keyword: #5e8f60; + --identifier: #222; + --comment: #484a86; + --operator: #155da4; + --punctuation: black; + --other: black; + --escapeSequence: #c4891b; + --number: #252dbe; + --literal: #a4255b; + --program: #6060c0; + --option: #508000; + --raw-data: #a4255b; + + --clipboard-image-normal: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: black' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E %3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2' /%3E %3C/svg%3E"); + --clipboard-image-selected: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: black' viewBox='0 0 20 20' fill='currentColor'%3E %3Cpath d='M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z' /%3E %3Cpath d='M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z' /%3E %3C/svg%3E"); + --clipboard-image: var(--clipboard-image-normal) +} + +[data-theme="dark"] { + --primary-background: #171921; + --secondary-background: #1e202a; + --third-background: #2b2e3b; + --info-background: #008000; + --warning-background: #807000; + --error-background: #c03000; + --border: #0e1014; + --text: #fff; + --anchor: #8be9fd; + --anchor-focus: #8be9fd; + --input-focus: #8be9fd; + --strong: #bd93f9; + --hint: #7A7C85; + --nim-sprite-base64: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARMAAABMCAYAAABOBlMuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFFmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTAzVDAxOjE4OjIyKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplZGViMzU3MC1iNmZjLWQy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"); + + --keyword: #ff79c6; + --identifier: #f8f8f2; + --comment: #6272a4; + --operator: #ff79c6; + --punctuation: #f8f8f2; + --other: #f8f8f2; + --escapeSequence: #bd93f9; + --number: #bd93f9; + --literal: #f1fa8c; + --program: #9090c0; + --option: #90b010; + --raw-data: #8be9fd; + + --clipboard-image-normal: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E %3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2' /%3E %3C/svg%3E"); + --clipboard-image-selected: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' viewBox='0 0 20 20' fill='currentColor'%3E %3Cpath d='M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z' /%3E %3Cpath d='M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z' /%3E %3C/svg%3E"); + --clipboard-image: var(--clipboard-image-normal); +} + +@media (prefers-color-scheme: dark) { + [data-theme="auto"] { + --primary-background: #171921; + --secondary-background: #1e202a; + --third-background: #2b2e3b; + --info-background: #008000; + --warning-background: #807000; + --error-background: #c03000; + --border: #0e1014; + --text: #fff; + --anchor: #8be9fd; + --anchor-focus: #8be9fd; + --input-focus: #8be9fd; + --strong: #bd93f9; + --hint: #7A7C85; + --nim-sprite-base64: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARMAAABMCAYAAABOBlMuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFFmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTAzVDAxOjE4OjIyKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplZGViMzU3MC1iNmZjLWQyNDQtYTExZi0yMjc5YmY4NDNhYTAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ZWRlYjM1NzAtYjZmYy1kMjQ0LWExMWYtMjI3OWJmODQzYWEwIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZWRlYjM1NzAtYjZmYy1kMjQ0LWExMWYtMjI3OWJmODQzYWEwIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplZGViMzU3MC1iNmZjLWQyNDQtYTExZi0yMjc5YmY4NDNhYTAiIHN0RXZ0OndoZW49IjIwMTktMTItMDNUMDE6MTg6MjIrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMS4wIChXaW5kb3dzKSIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4JZNR8AAAfG0lEQVR4nO2deViTZ7r/7yxkJaxJ2MK+GCBAMCwS1kgUFQSKK4XWWqsz1jpjp3b0tDP1V+eqU391fqfT/mpPPd20drTFDS0KFEVWJSGAEgLIZpAICBJACIRs549Rj1WILAkBfD/XlevySp68z/0S3+/7vPdzLyidTgcLkU2bd+z39/f/q1gshsrKSoJELFCa2iaEuU9K6kb+8uXxv54/fzE8L/eswNT2zCfQpjbAGKS8lPFKSEjIXiaTCSEhIeDj4xNnapsQ5j6rktZGp6UlfxIdzQVzCplmanvmG1hTG2BIAtlc26CgoDfT0tL2e3l5AQCAjY0NkMnk/a9s2k6rrKw8UV8n1JjYTIQ5RlAw14KzmL3xze1vfJyUuMJaq9UCFovFm9qu+YbBxcSPFUYkk8l2Q0NDsvo6ocrQx5+I8Ih4bz6f/0l8fHyKlZXV4/dRKBQwmcwwMpn8A4FAoPgHhH9bV1sxa488wZxoaycnJ/a9e/duCa5fkc3WvAiTI4Ib77p+XdqHG9anbfLy8gAAgLGxMdBpF+bjvzExqJj4scKI0dHRnwQHB++orq7+AgDeMuTxJ2Jl4rqU9PT0EwEBAUQCgTDuGAaDAampqYepVKpHUHDk325Ulw0a266YuFW+Gzdu/MDPz29jfn7+XgA4aOw5ESZP6kvpCXv3vnM8NiaSamVl+fj9BepGNDoGFRN7e/slcXFxO1xcXMDJyWnH7j//H/fi4uJdgutXmgw5z5O8smn7X9euXbvf29sbMBjMhONQKBRYWVlBbGzsbjMzM3JoOG+/sKKwy1h2rd/4elpGRsYuLy+vaDweD2w2Oy1h5ZrCvEunEaeeiVnMiabyl/F2/+X9P+8JDPQHHA5napMWBAYTk6DgSNuEhIS9DAYDAP7tq1i6dOkqOp3OWbNu0wens44emeoxA9lcWwKBYEMkEm2JRKIdHo+3QKFQWJ1Op8ZgMER3d/dVq1evTnFycpr0MSkUCsTExGzH4/Gk1LTME/39/TI0Go1FoVCg1WrVY2NjipGRkcGRkRH5dPwrEZHLXMPCwjJSUlIy3dzcfB+97+rqGhYSEpIOAIiYmBguN3zL77dt3uPh4W5qUxYUBhMTb2/vjeHh4cvR6P/dILK0tITIyEg7BweHr363/Z3Ampqaf1Zcu/zMKiVsyVJvMplsRyKR7IhEor2FhYUbhUJhJCYm2pFIJB6JRAIymQx4PB7QaDRoNBowMzMDJycnwOOn7icjEokQGxu7icFgbLp///7jFY1WqwWlUgkjIyOgUCgO7Ni5Rz48PCwfHh7uGRkZeaBQKOSjo6ODCoVCXlNVKn/6uCsT13FXrVr1emho6BYKhfLMnP7+/omrU9LPX8g+UThloxEMxqJFXjxESAyPQcSEExrLWLNmzW57e/txP/fw8ABHR8cdDAaDt3xF2ru9vb03sVgs0cbGxs/FxWVZUlISj0aj+dna2oKtrS1M5PcwJCgUCry8vODRrs84vPfoH6OjoyCXy6Gvr+/R6+CWrX9s7evrk/b19bWr1Wqli4sLZ8OGDe95eXmxUSjUuAd0cHDwjoqK2sYKXFIhvnldYYTTQpgU4/8+jyASCYDGoCd+ZkYYF8OICYezl8PhuOkbQyAQIDo62s/NzS2np6cHbGxsgEajAYFAAAwGA1gsFia6CE0NgUAABwcHsLe3B61WC2q1eo9WqwWNRgNKpRLUajUQiUSgUCh6zwGHwwGTydzo5+eXBQBnZu8MEJ5keHhYPqyYWMtHR0ZBpVIhYj9FUDONgOUvT12+du3avMDAQJjssdRqNWCxCyrEZdLodDoQi8Ulx44de628NL/V1Pa8iERE8l2dHB2CJvpcq9Nqbt1qKURWj1Njxld0ZGTkAW9v70kLCQC8sEIC8O/HKx8fn2gmk8kHgCk7pRFmzrWyAikASE1tx0Jj2uH0EZHL/N7YtuvT4OBgzmz4OBYSeDweIiMjt2S++vtMP1YYEmmJsCCY8mNOIJtr6+zsHBcZGXmIw+G4mZubG8m0hU9HRwcUFxe/KxQKTyDRsQjznSmJCS9+dVRERMTfQ0NDo2xtbfUGiSFMjtHRUaitrc3Jzc09kHvxVLmp7UFAmC6oZQkvrZLL5RJhReHtiQb5scKIXC7371FRUX90dnYGIpE4JR8Jgn40Gg20t7fXFxYWfnr9+vWjz8sdYi+Osh4vzgUBwZSgtu94V+fs7Hx7YGCgra6u7khLS0u2RCwYeTQgKmYFh8fj/f/g4OAldnZ2prR1wdPd3Q1CofBQSUnJkdLi3N8E93FCY6k+Pj48FxcXjlar1ZSWlh65VvYr4kREmDNg79+/D3FxcW5OTk5uXl5evNbW1tL0jK3ZXV1d1ykUintycvInoaGhdkj+gvGxs7MDPp+/m0AgWMQvS/lyeHhYTqPRPJycnIJSU1NZ3t7eW2g0Gly/fv2oWq1Gij0hzClQ/gHhpLS0tEM8Hm/7I8Ho7++HlpYWsLa2Bg8PDxOb+OKhUCigqakJ7t+/D25ubuDu7g4oFAp0Oh08ePAAvv7666TTWUdzTG0nAsKTYMU3ryuSU18+4+bmFrZo0SIOAICVlRUsXrx4zkakLnRIJBI8CgJ8MtdJp9NBZ2enqL29XWRC8xAQxgUNAHD+3L8KGhoaCp78ABES04JCoX4jJAAAAwMDUFtbe96YpRMQEKbL41DU5ubmko6Ojj2PSgggzD36+/vrb9y4cX425zzw93/8EBjon2is44+NjSkePBjqGRwc7G5v7xBV19w8U5B/3qgrr9+/uWtXUuKKD/TZ9MXh/066/OuFmunO8dGBQ98HBbGSp/t9U6LRaDXK0dHBoeFhuVzeL22/0yFqamopufjLqRJ933ssJi0tLSXV1dWHGAzGbuObOzs8ubqa71vZKpUKOjo6blwpOF8zm/Mu5cVkLlkSaswprAHAaVihgK7O7oSGxltvfXLon3nXK4RHT2cdN4pfKDCAlZyUuMJan02nTmczAaBmunPw4qI3cbnh0/36XICq0+lgcPABp7OrK629vUP5z8++LLh2XXD05L++yxrvC4/F5EZ12WBS8saLS5Ys2U2lUufUY45SqQSlUgkqlQrUavXj19jYGGg0GtBoNKDT6UCn05VotVq1TqfToFAojFar1eh0Og0Wi8XhcDgeGo1+/PhgZmYGOBwOsFgsmJmZ/eY1F+nt7YXa2trs2Z73wdCQBgCMHp1IJpHA09MdPD3dLRIS+OtKisvWvbP7vf2lZdePVFwzbHTwyMiI3hidkZFRUKvUYzOZ48HQkBIA5nWqBAqFAktLC7C0tADmIh88Pz4uMSyUk7hn776DV4tKPn/6d/lNxp1MJqsRCASf8vn8XdMpOjRTVCoVjI2NgUqlAq1WCyMjI9DX1wf379+Hvr6+/Q8ePOgdGRmRKxSKx0WLFAqFXKlUKnQ6nUar1arHq47mxwrD4/F4Eg6HI2GxWDwej7cgkUjWFAqFam5uTjU3N6eRyeQPLSwswNraGqysrIBAIDwWFywW+zja11Qi29LSclIikeSZZPJZBovBAI8XA8HBQR9kZZ3lR8cmvFZSlGe00p8IkwONRkNERBj4+i7a4+XpHv307/IbMakWlciXJbx0nMPh7Jqo0JGh0el0MDo6Cl1dXSCVSkEmk7177969W319fe1DQ0M9KpVKoVarlWq1WjndNhUPG3ApAWDcOxLTLwSDwWAOotFoDBaLxRMIBAsrKysne3t7Xzqd7k2n0/c4OzsDlUoFHA4364IyMDAATU1NxdWikhcq6tXKyhJezljPJZKI2eERS5cZeoWCMD2srCwhPX0tVzk2djiCG//GtfLLUoBxShB0dHTU3Lx580sLC4vtJBLJKMZoNBqQSqUglUqPdnR01PT09DT19/fLHjx40DM0NNQ72933GiSVGgB4JFQK+LfoSAGgnL04yppEIh2xtLS0t7GxcaFSqR7Ozs4fMRgMcHR0nJX8pJs3b54Ui8UXjT7RHIRMIkFK8irfwcEHPwQELUmqvYHUGJkLmJubw8YNa/i9vfffY/px3myQiDTPiEl9nVDDX576jaenZ7SnpyfLUJNrNBqQyWRw+/bt4x0dHTdkMlltV1dXw/XygjkdEv4wB0YOAK0AUM70C8HQ6fSzdDrdm0qlejg6OrLc3Ny2MBiMadWjfR4PHjyAmzdvZs/1v5MxoVAokJK8iicWS95k+nH+s0EiQhqpzQGoVFtYk5a87ba0XQAA34xbpagg/5zoT7s/OGNnZ8eaaYkBuVwOnZ2d5VKpVNTS0lLS2NhYWFVZ3Dujg5qQh6uY+ocvCAiKIPn4+Jz19PSMdnV15VCpVL6Dg4NBViw6nQ5EItHRpqamqzM+2DzHzo4O69amftLQeKsAZrDLgmBY/PyYsCIhfs+SiKUFE5Y8EwqFx11cXDihoaFTjjFAoVAwPDwMHR0dourq6jNCofDHhZqUVnvjmgIAcgAgJyg40mLRokX8kJCQjT4+PussLS1n1JPl7t27UFxcfHguB6mNjY2B7G4naNRTWyygUCjAYDGAx+PB0sICSCSi3vFYLBbCwjjA8vddBQtATKb7d3saBwc7IJPJBpsHjUGDGRYLJBIJLK0sAfucmyIGg4FFi3y8AwNZtycUk5KiS02vvf7WWQaDkejg4DApQwAeh3xDaWnpPoFAcPxFqnP6sEvgGf+A8Bx3d/cvIyIiNi1evHjT8wpNj8fAwACUlZW9P9dD5+/ckcFbf9gd2dcnn9LNAovF4inmZHtXNxdOdBR3+/JlS33pdP29wolEInA4weuiYxOy5vvuTkeHDHb+8c8xvb33Z3R9/N+Df+uIjYk02DwkEsna2trS1d/fNyGeF7uTyw1/7g3R3t4O2OxA/TVghULhcQqFQk1JSfmYSNR/5wD4d6EfgUBwvLS09IhUKhW9qAV5H9YjKQwJi6uvrKw8ERoamhkSEpKp7w7yJEqlEiQSyZmysrJv53qjdaVSCZdyTk+3qFMrAJRHRPLPN95qeifj5fU7mYt8JhyMRqMhMJDFdnF25gDAvBYTpXIMWlpay2fq/8m5mDcIABYGnEcGAGI/VlhBZWX1yZdSkz55OX0dV5+7w9bGGvz8mPrFpK62QskJjf2GTqd7x8bGbpnID4BCoUAmk0lLSkqOiESik2UleS/MakQflYKrXQDQxY1a3tTe3i6KiIjY5OXlxX7e9+rr6wsuXbr0t4ffn9OgMWjghMZQRcLp+8GulRVI/QPC37Wxtnal0ajJtjY2E451ZjiBra31vE9lR2PQQKFQaAAwo98Yi8Xq9fpPd56HO6rlvKWJv/PwcK+JilyCmajWMw6HAzs7+rMFpQOCIn6zHywSFvXm5eUdFAqFZ9Rq9bgHa2trq79w4cK+zz49cAARkmcpL81v/a/Dhz49d+7c3qqqqjyVSjXuOJ1OBxKJpDw3N/fA5V+zax6978cKw/sHhM/raMrnUVdboSy4fPWQSFSjd5yFBQWIRNKEd2IEw1J4JUd88WL+R51d3XrHWVDMnxUTa2tr1zXrNiUGsrmPf7DS4tymCxcu7Kuurs55+kKQSqVN586d23vs+8NHDXUCC5Wzp3/Iy8rKeruysvLM2Nhvo7VVKhXU1tYWnj17du/T7UOdnZ2D7OzsfGGB09raVi4S1RzXl0eFw+EAj8chYjKLVFffyOrq1C8mJBLpWTFRKBRyDofzC4vFWvXk+1ev/CLOzs7eKxAIslQqFeh0Oujp6enKzs7em/XTd7OayTqfKb56sT4rK+sPAoHg5KO/o0KhAKFQmHXy5MkdF3/5+TeZmctXpIXZ29v7zqVcKWNRX1epuXu3U/y8pEw0GmndOZt0dnXVDw0P6/W5oNHoZ30mQ0NDPb29vfvj4+Pf3rR5B/7od188XnEUXr4gDgmL+0NfX5/U19d3d3l5+YGfTnyDtLmcIhXXLsu4UcvfR6PRGGtra9eysrIjYrE45+kt4Fheou/69es/unnz5vm7d+/Wmsre2WRkZGTQ1DYg/JYGiUiTm1ugBAC9IfHPiEmDpFITE7fqJI/H27lmzZpDq5LWtz55t6wUXO3ihMYerK+vz2tpaUFaM0yT8tL81ujYle+TSCTrvEunBU9/voTLd92wYcPHVCqV39XVdXCu7+oYCp1O90Kc50Jk3I5+xVcv1jc3N5d4enpSMzIyvkpK3sh78nORsKg3++yPBS/q1q+hKCm61DSekERGJ3ikp6d/ERsbm1xVVXWwtbX1hRFtFAqFPMLMUyZsDyoQCI7LZDKIiIjwzczM/GpV0vro2TTsRSUqZoX3+vXrP1u9enXi0NAQiESirIdRtggIc5oJ40zq6uryGhoa8ry8vBJCQ0O9USjU94mrN7yWc+EnvaXb5gJMvxCMp6cnl0Kh2Le1tZVXXLs8L1LXefGrWRkZGZ/x+XyeUqkEkUh0vqenZ14HZyG8OEwoJjdrygd37NxTEBkZmWBtbQ3BwcEeKBTq+/UbX3/355Pfzlmn66qk9dGbN29+k8PhbCSRSNDZ2Snb9ae/HCkpKTksEhbN2QTD5NSX+Vu3bj0cHBzsjcFg4O7du1BWVvbNwxB9BIQ5j94I2Fu3bhXW19cDl8sFLBYLHA7Hg0wmf/e77e84ffXlPz6fLSMnQ2paZkJ4eHjmtm3b+B4eHvZkMhlQKBTY29s72dvbfxgUFJT8x7ffP1NRUfHjXErnZ/qFYKKjo7dt3rz5g8DAQPtH/XHa2tpqGhsbC55/BASEuYFeMblz505NTU3NgfDw8PcwGAygUCjw9fW1IJPJn/1130Hv0tLSI4WXL4hny9inYS+Osvbz80tgMpn8jIwMPovFch2vpoiDgwM4ODhwfH19OYsWLeJv3/Hu+cbGxquzXZz5aZYlvMRJT0/fFhkZue3JZmfd3d0gEolOIr4ShPmEXjFpkFRqXlrzSnFnZ+d7Tk5OjzNfXVxcICMjY6ezszNnVdL6vU8HWhmbgKAIkrOzMyc1NTXz0YU4maAuOp0OK1as4EVFRfGEQqHg1dfePHzr1q2rs71S8WOF4f38/BLS09M/iIyM5DxdxLq5uVlcVVU1bgVwBIS5il4xAQCQyWRigUBwJikpKe3JVGQcDgdLly7l2tranti0ecf7IpEoy9hbxX6sMDydTvdevXr1ltjY2F3u7u6AxT73FJ7B3Nwc4uLiwthsdphQKCzZkL7l0/r6+oKbNeVG90+EhMXZL1++fFtycvKHrq6uz4igUqmE5ubmEiTHCWG+8dwrUXD9imz9xtd/jIuLS7N5KpsTjUZDUFCQE4PB+F4oFGYmJW888Mv5k4UTHGpGxC9LYaenp78VEhKyxdHRESgUyoyOh0KhwNraGuLi4qIDAgKi6+rqyjekb/mHMSN6N6RvSdu+ffseNpsdZm09ftuW+vp6EIvFSB9hhHnHpG7rUqm0orW1tdXS0tLj6TIEaDQaaDQaxMfH811dXTl/3Xfw+JUrVz411J01cfWG6IiIiC07d+5McHNzs7ewMGyOFw6HAwcHB6BSqVx3d/fwz7/4rkAgEBwXCoUnHpZonDGrU9J5MTEx27du3Zrm4uKC0beaqq6u/ry+vj7XEPMiIMwmkxKTimuXZe/u+fCkp6fnexPdUfF4PPj7+1szGIydLi4unF1/+kvenTt3RG1tbRXTqfma8lIG39/fP/HVV19NZrFYHpMpzjQTzMzMwNPTE+Pp6Zng6emZ4Ofnl5CesfV8bW1tznQe3/wDwvFeXl7Rvr6+Ca+88kpaUFCQh74GXzqdDrq7u6GpqankRQmdR1hYTNrhUFVVlcXj8d6ysrKy0OfstLS0hPj4eC6Xy+U2NzeDRCI5/sa2XeX37t1rGhwc7BoYGJBN1P+FFbiE5OzszGaxWImvvvrqpoCAAKfp+ERmCpPJBCaTmcnhcDJLS0u/TE59+YxUKhXoi/lg+oVgrKysGJaWlna2trYeaWlpXDabvTMgIGDSfp2KiorzbW1tL0zoPMLCYtJX6uVfs2u++PKowMPDgz+ZIslEIhECAgKAxWJlajSazJ6eHmhra4PW1tZvtmz9o6Czs7O+r6+vfWxsbFir1WosLCzsV6xYkcnj8d7z9vaelmPV0Hh5eYGnp+f2mJiY7UVFRZ/HL0v5tru7+5ZGo1FisVg8Docj4fF4CxsbG1c+nx/m7e39sYeHB7i4uIC5ufmU6r4ODQ1BZWXlifkSrYuA8DRTumIrKytPent78728vCb9HRQKBVgsFhwcHIBOpwObzd4yNja2RaVSwdDQEHR1dcHo6CjQaDRwdXWdsWPV0KBQKPDw8AA7O7udERERO2tra2FgYACoVCo4OTkBjUYDMpkMeDz+8WuqaLVaaGxsbL19+/YzSX8ICPOFqYrJidDQ0AwvLy/e80c/CwaDARKJBI86BdJoNHB3dwe1Wj0nViL6IJPJwGQywdnZGZRKJRAIBDBUx8OBgQEoLS39BtkORpjPTJg1PB61N64pmpqarvb39xvUiLkuJE9CJpPBxsbGYEICANDZ2SlHgtQQ5jtTEhMAgLq6ulyJRFJvDGNeREZGRkAikRSUFuci2cEI85opi0l+7hmBWCzOeV6dToTJcfv27cHr168jxbgR5j1TFhMAgObm5hKZDNl0MAQtLS3Xzpw6hkS8Isx7piUmUqlUIBAIJuyjgzA5Ojs7QSKRINGuCAuCaYmJsKKw68qVK59KJJIu5HFneiiVSigqKjouEolOmtoWBARDMC0xAQC4+MvPJadOnXq3ra1N8yL0dDEkOp0OSktLy/Pz8w8+3d4CAWG+Mm0xAQA4fuy/jl+8ePGju3fvGsqeBY9Wq4XKysrWU6dOvX31yi8mKyyFgGBoZiQmAAD/79D+fadPn96PCMrz0el0UFVV1frtt9+mj9fiAgFhPjNjMQEAyMvLO3Ds2LE/tLS0INmuerh27Vr9999//xoiJAgLEYOEntbVVigB4PNNm3cMpqSkfMRms50McdyFgkqlgqKiovJTp069nZ97BhEShAWJQePYj373xdF1GzbLFQrFx6Ghob766ne8KNy7dw+KiopO5ubmfmTK4tsICMbG4EkxWT99d35l4rre/v7+D0NCQvh0Ot3QU8wL1Go1SKVSTX5+/sH8/PyDSP8bhIWOUTLsLuVklQcFR65pbGzcvnLlyvfc3NwsCASCMaaac+h0OhgaGoLq6uqaCxcu/OV01tGcTw7uM7VZCAhGx2jpug/vxAd58atzoqKitq1cuXKnvb29saabE+h0Oqiurpbm5eUdrK6uPlspuDrvY0hmO4YIhUIBGq1/X2CmNqFQKL3/79HomZ/z82xEowyy9zFr80zGDqPn/hdeviBmL47ad+fOnRsRERGbQkNDo62srIw97azT2dkJxcXFx0tKSo7Mdh8hY4LD4TDPH2U4MFjMc6tLmZmZzaj+Aw6H0/t9PB4PGCxmRudNJBL0ngeZTAI0Gj3jv+1szfM88Hic8cUEAKCmqlQOAN/ELU2qkEgkySwWK3HRokVcBoMxG9MbDZ1OB83NzdDU1FRQW1t7XiAQHJ+ovu18pbr6Rg6L5ZtoM0EhcUPT0tJW8tWRb0vQqIkvgKqqmhnVfrl2TfANXo+gjKlUio4OWc1M5sjOzjnQUH8rbqLPu3t6moaGhmfc+3q25tGHUqmECoEIUKbIrVkcEkONiIh4jcvlvu7s7OxLo9GmVe7QVCgUCujq6oKGhoaCioqKo9XV1WeM3YDMVPDik1gpyas+XrVyeaKXl8czjyANjbcgI/MNmkg49Q4ECPOH3NyC4RUr+M8IcHt7B1y9WlKRl3/5kElKnD1sfXEoJCzueEBAQGJYWFgGk8nk2djYAIFAgLm4pTw6Ogqjo6Mgl8vhxo0b50tLS4/U19fnLvS2FIWXfxEDQNLmLW9ueW1TxtchHDaQyWRTm4VgYkZHR6G+vhF+/NfP+y5e+vVjiVgwZpKVydOwF0dZW1lZOTGZTD6bzU4LCAiIptPp8HTDL1MwOjoKLS0tUFdXd1IsFudIpdKKgYGB7tloJTrX4MUnsVJTEj9etzY10dHRAQAAGm81wcsZW5CVyQInL69gNCGBjwcAGBx8ANnncypOnTr3H9nn/reD55wovvrQpyIHAHFUzIocGo3mQaPRfBwdHVlubm7bXF1dgcFgABqNNvruglwuh7t374JMJoOOjo7P79y5I+ru7m7q7e1tXQi7MzOh8PIv4pCw2DdaWtte37Au7aPIyCWAxWABjUbPif9HCMbjURtKiaQBfvr5zH9evlJ0uLQ4r/nJMXNiZTIRrMAlJAcHB18HBweWo6Mjy8rKajeJRAJLS0uwtLQECwsLoFAogMfjAYvFgpmZ2XNXMyqVCoaHh2FoaAiGh4cfvwYGBqCvrw+6u7vfvnfvXlNvb29rT09Pq0QsUM7S6c4rNqS/lrZ5U+YPRBKR9M7u9xwqBUUvtNAudH766XSLE8PR49ixE78/8tVnX403Zk7fUR46NUUAIPIPCMdTKJTdNjY2QKPRgE6nA51OB1tbWyCRSIDD4YBAIAAejwcCgfDYUajVakGlUoFarQadTvfY79HX1wf9/f0gl8tBLpfDvXv3HvXw+dxQPYYXMj+d+P7Mmzv+5OHr6/OJWq1GBHeB09TcUiKuq/coKS3/eqIx/wPkiIXC3w6YjAAAAABJRU5ErkJggg=="); + + --keyword: #ff79c6; + --identifier: #f8f8f2; + --comment: #6272a4; + --operator: #ff79c6; + --punctuation: #f8f8f2; + --other: #f8f8f2; + --escapeSequence: #bd93f9; + --number: #bd93f9; + --literal: #f1fa8c; + --program: #9090c0; + --option: #90b010; + --raw-data: #8be9fd; + + --clipboard-image-normal: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E %3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2' /%3E %3C/svg%3E"); + --clipboard-image-selected: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' viewBox='0 0 20 20' fill='currentColor'%3E %3Cpath d='M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z' /%3E %3Cpath d='M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z' /%3E %3C/svg%3E"); + --clipboard-image: var(--clipboard-image-normal); + } +} + +.theme-select-wrapper { + display: flex; + align-items: center; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; } + +body { + font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif; + font-weight: 400; + font-size: 1.125em; + line-height: 1.5; + color: var(--text); + background-color: var(--primary-background); } + +/* Skeleton grid */ +.container { + position: relative; + width: 100%; + max-width: 1050px; + margin: 0 auto; + padding: 0; + box-sizing: border-box; } + +.column, .columns { + width: 100%; + float: left; + box-sizing: border-box; + margin-left: 1%; } + +@media print { + #global-links, .link-seesrc, .theme-switch-wrapper, #searchInputDiv, .search-groupby { + display:none; + } + .columns { + width:100% !important; + } +} + +.column:first-child, .columns:first-child { + margin-left: 0; } + +.container .row { + display: flex; } + +.three.columns { + width: 25.0%; + height: 100vh; + position: sticky; + top: 0px; + overflow-y: auto; + padding: 2px; +} + +.nine.columns { + width: 75.0%; + padding-left: 1.5em; } + +.twelve.columns { + width: 100%; + margin-left: 0; } + +@media screen and (max-width: 860px) { + .three.columns { + display: none; + } + .nine.columns { + width: 98.0%; + } + body { + font-size: 1em; + line-height: 1.35; + } +} + +cite { + font-style: italic !important; } + + +/* Nim search input */ +div#searchInputDiv { + margin-bottom: 1em; +} +input#searchInput { + width: 80%; +} + +/* + * Some custom formatting for input forms. + * This also fixes input form colors on Firefox with a dark system theme on Linux. + */ +input { + -moz-appearance: none; + background-color: var(--secondary-background); + color: var(--text); + border: 1px solid var(--border); + font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif; + font-size: 0.9em; + padding: 6px; +} + +input:focus { + border: 1px solid var(--input-focus); + box-shadow: 0 0 3px var(--input-focus); +} + +select { + -moz-appearance: none; + background-color: var(--secondary-background); + color: var(--text); + border: 1px solid var(--border); + font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif; + font-size: 0.9em; + padding: 6px; +} + +select:focus { + border: 1px solid var(--input-focus); + box-shadow: 0 0 3px var(--input-focus); +} + +/* Docgen styles */ + +:target { + border: 2px solid #B5651D; + border-style: dotted; +} + +/* Links */ +a { + color: var(--anchor); + text-decoration: none; +} + +a span.Identifier { + text-decoration: underline; + text-decoration-color: #aab; +} + +a.reference-toplevel { + font-weight: bold; +} + +a.nimdoc { + word-spacing: 0.3em; +} + +a.toc-backref { + text-decoration: none; + color: var(--text); +} + +a.link-seesrc { + color: #607c9f; + font-size: 0.9em; + font-style: italic; +} + +a:hover, a:focus { + color: var(--anchor-focus); + text-decoration: underline; +} + +a:hover span.Identifier { + color: var(--anchor); +} + + +sub, sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; } + +sup { + top: -0.5em; } + +sub { + bottom: -0.25em; } + +img { + width: auto; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; } + +@media print { + * { + color: black !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; } + + a, a:visited { + text-decoration: underline; } + + a[href]:after { + content: " (" attr(href) ")"; } + + abbr[title]:after { + content: " (" attr(title) ")"; } + + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; } + + pre, blockquote { + border: 1px solid #999; + page-break-inside: avoid; } + + thead { + display: table-header-group; } + + tr, img { + page-break-inside: avoid; } + + img { + max-width: 100% !important; } + + @page { + margin: 0.5cm; } + + h1 { + page-break-before: always; } + + h1.title { + page-break-before: avoid; } + + p, h2, h3 { + orphans: 3; + widows: 3; } + + h2, h3 { + page-break-after: avoid; } +} + + +p { + margin-top: 0.5em; + margin-bottom: 0.5em; } + +small { + font-size: 85%; } + +strong { + font-weight: 600; + font-size: 0.95em; + color: var(--strong); } + +em { + font-style: italic; } + +h1 { + font-size: 1.8em; + font-weight: 400; + padding-bottom: .25em; + border-bottom: 6px solid var(--third-background); + margin-top: 2.5em; + margin-bottom: 1em; + line-height: 1.2em; } + +h1.title { + padding-bottom: 1em; + border-bottom: 0px; + font-size: 2.5em; + text-align: center; + font-weight: 900; + margin-top: 0.75em; + margin-bottom: 0em; } + +h2 { + font-size: 1.3em; + margin-top: 2em; } + +h2.subtitle { + margin-top: 0em; + text-align: center; } + +h3 { + font-size: 1.125em; + font-style: italic; + margin-top: 1.5em; } + +h4 { + font-size: 1.125em; + margin-top: 1em; } + +h5 { + font-size: 1.125em; + margin-top: 0.75em; } + +h6 { + font-size: 1.1em; } + + +ul, ol { + padding: 0; + margin-top: 0.5em; + margin-left: 0.75em; } + +ul ul, ul ol, ol ol, ol ul { + margin-bottom: 0; + margin-left: 1.25em; } + +ul.simple > li { + list-style-type: circle; } + +ul.simple-boot li { + list-style-type: none; + margin-left: 0em; + margin-bottom: 0.5em; } + +ol.simple > li, ul.simple > li { + margin-bottom: 0.2em; + margin-left: 0.4em } + +ul.simple.simple-toc > li { + margin-top: 1em; } + +ul.simple-toc { + list-style: none; + font-size: 0.9em; + margin-left: -0.3em; + margin-top: 1em; } + +ul.simple-toc > li { + list-style-type: none; } + +ul.simple-toc-section { + list-style-type: circle; + margin-left: 0.8em; + color: #6c9aae; } + +ul.nested-toc-section { + list-style-type: circle; + margin-left: -0.75em; + color: var(--text); } + +ul.nested-toc-section > li { + margin-left: 1.25em; } + + +ol.arabic { + list-style: decimal; } + +ol.loweralpha { + list-style: lower-alpha; } + +ol.upperalpha { + list-style: upper-alpha; } + +ol.lowerroman { + list-style: lower-roman; } + +ol.upperroman { + list-style: upper-roman; } + +ul.auto-toc { + list-style-type: none; } + + +dl { + margin-bottom: 1.5em; } + +dt { + margin-bottom: -0.5em; + margin-left: 0.0em; } + +dd { + margin-left: 2.0em; + margin-bottom: 3.0em; + margin-top: 0.5em; } + + +hr { + margin: 2em 0; + border: 0; + border-top: 1px solid #aaa; } + +hr.footnote { + width: 25%; + border-top: 0.15em solid #999; + margin-bottom: 0.15em; + margin-top: 0.15em; +} +div.footnote-group { + margin-left: 1em; +} +div.footnote-label { + display: inline-block; + min-width: 1.7em; +} + +div.option-list { + border: 0.1em solid var(--border); +} +div.option-list-item { + padding-left: 12em; + padding-right: 0; + padding-bottom: 0.3em; + padding-top: 0.3em; +} +div.odd { + background-color: var(--secondary-background); +} +div.option-list-label { + margin-left: -11.5em; + margin-right: 0em; + min-width: 11.5em; + display: inline-block; + vertical-align: top; +} +div.option-list-description { + width: calc(100% - 1em); + padding-left: 1em; + padding-right: 0; + display: inline-block; +} + +blockquote { + font-size: 0.9em; + font-style: italic; + padding-left: 0.5em; + margin-left: 0; + border-left: 5px solid #bbc; +} + +blockquote.markdown-quote { + font-size: 0.9rem; /* use rem to avoid recursion */ + font-style: normal; +} + +.pre, span.tok { + font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace; + font-weight: 500; + font-size: 0.85em; + color: var(--text); + background-color: var(--third-background); + padding-left: 3px; + padding-right: 3px; + border-radius: 4px; +} + +span.tok { + border: 1px solid #808080; + padding-bottom: 0.1em; + margin-right: 0.2em; +} + +.copyToClipBoard { + position: relative; +} + +pre { + font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace; + color: var(--text); + font-weight: 500; + display: inline-block; + box-sizing: border-box; + min-width: 100%; + padding: 0.5em; + margin-top: 0.5em; + margin-bottom: 0.5em; + font-size: 0.85em; + white-space: pre !important; + overflow-y: hidden; + overflow-x: visible; + background-color: var(--secondary-background); + border: 1px solid var(--border); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.copyToClipBoardBtn { + visibility: hidden; + position: absolute; + width: 24px; + border-radius: 4px; + background-image: var(--clipboard-image); + right: 5px; + top: 13px; + background-color: var(--secondary-background); + padding: 11px; + border: 0; +} + +.copyToClipBoard:hover .copyToClipBoardBtn { + visibility: visible; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; } + + +/* Nim line-numbered tables */ +.line-nums-table { + width: 100%; + table-layout: fixed; } + +table.line-nums-table { + border-radius: 4px; + border: 1px solid #cccccc; + background-color: ghostwhite; + border-collapse: separate; + margin-top: 15px; + margin-bottom: 25px; } + +.line-nums-table tbody { + border: none; } + +.line-nums-table td pre { + border: none; + background-color: transparent; } + +.line-nums-table td.blob-line-nums { + width: 28px; } + +.line-nums-table td.blob-line-nums pre { + color: #b0b0b0; + -webkit-filter: opacity(75%); + filter: opacity(75%); + text-align: right; + border-color: transparent; + background-color: transparent; + padding-left: 0px; + margin-left: 0px; + padding-right: 0px; + margin-right: 0px; } + + +table { + max-width: 100%; + background-color: transparent; + margin-top: 0.5em; + margin-bottom: 1.5em; + border-collapse: collapse; + border-color: var(--third-background); + border-spacing: 0; + font-size: 0.9em; +} + +table th, table td { + padding: 0px 0.5em 0px; + border-color: var(--third-background); +} + +table th { + background-color: var(--third-background); + border-color: var(--third-background); + font-weight: bold; } + +table th.docinfo-name { + background-color: transparent; + text-align: right; +} + +table tr:hover { + background-color: var(--third-background); } + + +/* rst2html default used to remove borders from tables and images */ +.borderless, table.borderless td, table.borderless th { + border: 0; } + +table.borderless td, table.borderless th { + /* Override padding for "table.docutils td" with "! important". + The right padding separates the table cells. */ + padding: 0 0.5em 0 0 !important; } + +.admonition { + padding: 0.3em; + background-color: var(--secondary-background); + border-left: 0.4em solid #7f7f84; + margin-bottom: 0.5em; + -webkit-box-shadow: 0 5px 8px -6px rgba(0,0,0,.2); + -moz-box-shadow: 0 5px 8px -6px rgba(0,0,0,.2); + box-shadow: 0 5px 8px -6px rgba(0,0,0,.2); +} +.admonition-info { + border-color: var(--info-background); +} +.admonition-info-text { + color: var(--info-background); +} +.admonition-warning { + border-color: var(--warning-background); +} +.admonition-warning-text { + color: var(--warning-background); +} +.admonition-error { + border-color: var(--error-background); +} +.admonition-error-text { + color: var(--error-background); +} + +.first { + /* Override more specific margin styles with "! important". */ + margin-top: 0 !important; } + +.last, .with-subtitle { + margin-bottom: 0 !important; } + +.hidden { + display: none; } + +blockquote.epigraph { + margin: 2em 5em; } + +dl.docutils dd { + margin-bottom: 0.5em; } + +object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] { + overflow: hidden; } + + +div.figure { + margin-left: 2em; + margin-right: 2em; } + +div.footer, div.header { + clear: both; + text-align: center; + color: #666; + font-size: smaller; } + +div.footer { + padding-top: 5em; } + +div.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; } + +div.line-block div.line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; } + +div.topic { + margin: 2em; } + +div.search_results { + background-color: var(--third-background); + margin: 3vh 5vw; + padding: 1em; + border: 1px solid #4d4d4d; + position: fixed; + top: 10px; + isolation: isolate; + max-width: calc(100vw - 6em); + z-index: 1; + max-height: calc(100vh - 6em); + overflow-y: scroll;} + +div#global-links ul { + margin-left: 0; + list-style-type: none; } + +div#global-links > simple-boot { + margin-left: 3em; } + +hr.docutils { + width: 75%; } + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; } + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; } + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; } + +.align-left { + text-align: left; } + +.align-center { + clear: both; + text-align: center; } + +.align-right { + text-align: right; } + +/* reset inner alignment in figures */ +div.align-right { + text-align: inherit; } + +p.attribution { + text-align: right; + margin-left: 50%; } + +p.caption { + font-style: italic; } + +p.credits { + font-style: italic; + font-size: smaller; } + +p.label { + white-space: nowrap; } + +p.rubric { + font-weight: bold; + font-size: larger; + color: maroon; + text-align: center; } + +p.topic-title { + font-weight: bold; } + +pre.address { + margin-bottom: 0; + margin-top: 0; + font: inherit; } + +pre.literal-block, pre.doctest-block, pre.math, pre.code { + margin-left: 2em; + margin-right: 2em; } + +pre.code .ln { + color: grey; } + +/* line numbers */ +pre.code, code { + background-color: #eeeeee; } + +pre.code .comment, code .comment { + color: #5c6576; } + +pre.code .keyword, code .keyword { + color: #3B0D06; + font-weight: bold; } + +pre.code .literal.string, code .literal.string { + color: #0c5404; } + +pre.code .name.builtin, code .name.builtin { + color: #352b84; } + +pre.code .deleted, code .deleted { + background-color: #DEB0A1; } + +pre.code .inserted, code .inserted { + background-color: #A3D289; } + +span.classifier { + font-style: oblique; } + +span.classifier-delimiter { + font-weight: bold; } + +span.problematic { + color: #b30000; } + +span.section-subtitle { + /* font-size relative to parent (h1..h6 element) */ + font-size: 80%; } + +span.DecNumber { + color: var(--number); } + +span.BinNumber { + color: var(--number); } + +span.HexNumber { + color: var(--number); } + +span.OctNumber { + color: var(--number); } + +span.FloatNumber { + color: var(--number); } + +span.Identifier { + color: var(--identifier); } + +span.Keyword { + font-weight: 600; + color: var(--keyword); } + +span.StringLit { + color: var(--literal); } + +span.LongStringLit { + color: var(--literal); } + +span.CharLit { + color: var(--literal); } + +span.EscapeSequence { + color: var(--escapeSequence); } + +span.Operator { + color: var(--operator); } + +span.Punctuation { + color: var(--punctuation); } + +span.Comment, span.LongComment { + font-style: italic; + font-weight: 400; + color: var(--comment); } + +span.RegularExpression { + color: darkviolet; } + +span.TagStart { + color: darkviolet; } + +span.TagEnd { + color: darkviolet; } + +span.Key { + color: #252dbe; } + +span.Value { + color: #252dbe; } + +span.RawData { + color: var(--raw-data); } + +span.Assembler { + color: #252dbe; } + +span.Preprocessor { + color: #252dbe; } + +span.Directive { + color: #252dbe; } + +span.option { + font-weight: bold; + font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace; + color: var(--option); } + +span.Prompt { + font-weight: bold; + color: red; } + +span.ProgramOutput { + font-weight: bold; + color: #808080; } + +span.program { + font-weight: bold; + color: var(--program); + text-decoration: underline; + text-decoration-color: var(--hint); + text-decoration-thickness: 0.05em; + text-underline-offset: 0.15em; } + +span.Command, span.Rule, span.Hyperlink, +span.Label, span.Reference, span.Other { + color: var(--other); } + +/* Pop type, const, proc, and iterator defs in nim def blocks */ +dt pre > span.Identifier, dt pre > span.Operator { + color: var(--identifier); + font-weight: 700; } + +dt pre > span.Keyword ~ span.Identifier, dt pre > span.Identifier ~ span.Identifier, +dt pre > span.Operator ~ span.Identifier, dt pre > span.Other ~ span.Identifier { + color: var(--identifier); + font-weight: inherit; } + +/* Nim sprite for the footer (taken from main page favicon) */ +.nim-sprite { + display: inline-block; + width: 51px; + height: 14px; + background-position: 0 0; + background-size: 51px 14px; + -webkit-filter: opacity(50%); + filter: opacity(50%); + background-repeat: no-repeat; + background-image: var(--nim-sprite-base64); + margin-bottom: 5px; } + +span.pragmadots { + /* Position: relative frees us up to make the dots + look really nice without fucking up the layout and + causing bulging in the parent container */ + position: relative; + /* 1px down looks slightly nicer */ + top: 1px; + padding: 2px; + background-color: var(--third-background); + border-radius: 4px; + margin: 0 2px; + cursor: pointer; + font-size: 0.8em; } + +span.pragmadots:hover { + background-color: var(--hint); } + +span.pragmawrap { + display: none; } + +span.attachedType { + display: none; + visibility: hidden; } diff --git a/runner.svg b/runner.svg new file mode 100644 index 0000000..dbfd71c --- /dev/null +++ b/runner.svg @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + nim-1.5.1 cp opt refc m&s arc orc vm js tests/test c release 🏃 🏃 ⏳ 🏃 ⏳ ⏳ tests/test c danger ⏳ ⏳ 🏃 ⏳ ⏳ ⏳ tests/test cpp release ⏳ 🏃 🏃 ⏳ tests/test cpp danger 🏃 🏃 ⏳ ⏳ tests/tvariant c release 🟢 🟢 🏃 ⏳ ⏳ ⏳tests/tvariant c danger 🟢 🏃 ⏳ 🏃 ⏳ ⏳tests/tvariant cpp release 🏃 ⏳ ⏳ ⏳ tests/tvariant cpp danger ⏳ ⏳ ⏳ ⏳ nim-1.5.1 cp opt refc m&s arc orc vm js tests/test cpp danger 🏃 🟢 ⏳ ⏳ tests/tvariant c release 🟢 🟢 🏃 ⏳ 🏃 ⏳tests/tvariant cpp danger ⏳ ⏳ tests/tvariant c release 🟢 🟢 🟢 ⏳ 🏃 ⏳tests/tvariant c danger 🟢 🏃 ⏳ 🏃 🏃 ⏳$ nim e --path="." --parallelBuild:0 --incremental:off --define:release --stackTrace:on --excessiveStackTrace:on --nimCache:/run/user/1000/balls-nimcache-e.release.vm-23453 --out:"tvariant_23504_7075424344525430260" --outdir:"/run/user/1000/balls-nimcache-e.release.vm-23453" --run --hint[Cc]=off --hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/tvariant.nim ableCode]=off tests/tvariant.nim/home/adavidoff/nims/lib/pure/terminal.nim(38, 5) Error: cannot evaluate at compile time: gTerm tests/test c danger ⏳ ⏳ 🟢 ⏳ ⏳ ⏳ tests/test cpp release ⏳ 🏃 🏃 🏃 tests/test cpp danger 🏃 🟢 ⏳ 🏃 tests/tvariant c release 🟢 🟢 🟢 🔴 tests/tvariant c danger 🟢 🏃 🏃 🟢 🏃 ⏳$ nim e --path="." --parallelBuild:0 --incremental:off --define:danger --panics:on --exceptions:goto --experimental:strictFuncs --nimCache:/run/user/1000/balls-nimcache-e.danger.vm-23453 --out:"tvariant_23505_3108717395555921749" --outdir:"/run/user/1000/balls-nimcache-e.danger.vm-23453" --run --hint[Cc]=off --hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/tvariant.nim tests/test cpp danger 🏃 🟢 🏃 🏃 tests/tvariant c release 🟢 🟢 🟢 🔴 tests/tvariant c danger 🟢 🏃 🏃 🟢 🔴 tests/test c release 🏃 🏃 ⏳ 🟢 ⏳ ⏳ tests/test c danger ⏳ 🏃 🟢 ⏳ ⏳ ⏳ tests/test cpp release 🏃 🏃 🏃 🏃 tests/test cpp danger 🟢 🟢 🏃 🏃 tests/tvariant c release 🟢 🟢 🟢 🏃 🔴 tests/tvariant c danger 🟢 🟢 🏃 🟢 🔴 tests/tvariant cpp release 🟢 ⏳ ⏳ ⏳ tests/tvariant cpp release 🟢 ⏳ ⏳ ⏳ tests/tvariant cpp danger 🏃 ⏳ ⏳ ⏳ $ nim cpp --gc:arc --path="." --parallelBuild:0 --incremental:off --define:danger --panics:on --exceptions:goto --experimental:strictFuncs --nimCache:/run/user/1000/balls-nimcache-cpp.danger.arc-23453 --out:"test_23488_5268866651616936662" --outdir:"/run/user/1000/balls-nimcache-cpp.danger.arc-23453" --run --hint[Cc]=off --hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/test.nim/run/user/1000/balls-nimcache-cpp.danger.arc-23453/@m..@sdeps@spkgs@sballs-2.0.5@sballs.nim.cpp:763:41: error: jump to label ‘LA6_’ 763 | LA6_:; | ^~~~@sballs.nim.cpp:744:66: note: from here 744 | if (NIM_UNLIKELY(*nimErr_)) goto LA6_; | ^~~~@sballs.nim.cpp:759:45: note: crosses initialization of ‘NimStringV2 T14_’ 759 | NimStringV2 T14_ = nsuFormatOpenArray(TM__9cZydDD9bOvrpaVzQHFg4t8Q_18, sballs.nim.cpp' failed with exit code: 1/run/user/1000/balls-nimcache-cpp.danger.arc-23453/@mtest.nim.cpp: In function ‘void NimMainModule()’:/run/user/1000/balls-nimcache-cpp.danger.arc-23453/@mtest.nim.cpp:10116:49: error: jump to label ‘LA13_’10116 | LA13_:; | ^~~~~/run/user/1000/balls-nimcache-cpp.danger.arc-23453/@mtest.nim.cpp:10109:74: note: from here10109 | if (NIM_UNLIKELY(*n /run/user/1000/balls-nimcache-cpp.danger.arc-23453/@mtest.nim.cpp:9881:74: note: from here 9881 | if (NIM_UNLIKELY(*nimErr_)) goto LA13_; | ^~~~~/run/user/1000/balls-nimcache-cpp.danger.arc-23453/@mtest.nim.cpp:10111:44: note: crosses initialization of /run/user/1000/balls-nimcache-cpp.danger.arc-23453/@mtest.nim.cpp:9878:82: note: 9878 | if (NIM_UNLIKELY(*nimErr_)) goto LA13_; ^~~~~: crosses initialization of ‘NF T394_’10111 | NF T394_ = fileSize_test_51(TM__SwIDA9bSa8DkPJfsECgiI6g_375); | ^~~~~compilation termina 1000/balls-nimcache-cpp.danger.orc-23453 --out:"test_23495_-2151033758732695158" --outdir:"/run/user/1000/balls-nimcache-cpp.danger.orc-23453" --run --hint[Cc]=off --hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/test.nim/run/user/1000/balls-nimcache-cpp.danger.orc-23453/@m..@sdeps@spkgs@sballs-2.0.5@sballs.nim.cpp: In function ‘void renderStack_OOZdepsZpkgsZballs4550O48O53Zballs_866(NimStringV2, tySequence__uB9b75OUPRENsBAu4AnoePA)’:@sballs.nim.cpp:788:41: error: jump to label ‘LA6_’ 788 | @sballs.nim.cpp:769:66: note: from here 769 | if (NIM_UNLIKELY(*nimErr_)) goto LA6_;@sballs.nim.cpp:784:45: note: crosses initialization of ‘NimStringV2 T14_’ 784 | NimStringV2 T14_ = nsuFormatOpenArray(TM__9cZydDD9bOvrpaVzQHFg4t8Q_18, T13_, 7); | ^~~~Error: execution of an external compiler program 'g++ -c -std=gnu++14 -funsigned-char -w -fmax-errors=3 -fpermissive -O3 -fno-strict-aliasing -fno-ident -I/home/adavidoff/nims/lib -I/home/adavidoff/git/frosty/tests -o /run/user/1000/balls-nimcache-cpp.danger.orc-23453/@m..@sdeps@spkgs@sballs-2.0.5@sball /run/user/1000/balls-nimcache-cpp.danger.orc-23453/@mtest.nim.cpp:10312:74: note10312 | if (NIM_UNLIKELY(*nimErr_)) goto/run/user/1000/balls-nimcache-cpp.danger.orc-23453/@mtest.nim.cpp:10314:44: note10314 | NF T394_ = fileSize_test_51(TM__ | /run/user/1000/balls-nimcache-cpp.danger.orc-23453/@mtest.nim.cpp:10319:49: erro10319 | LA13_:; | compilation terminated due to -fmax-errors=3. tests/test c release 🏃 🏃 ⏳ 🟢 ⏳ 🏃 tests/test c danger ⏳ 🏃 🟢 tests/test cpp danger 🟢 🟢 🔴 🔴 tests/tvariant c danger 🟢 🟢 🟢 🟢 🔴 tests/tvariant cpp danger 🏃 ⏳ 🏃 🏃 tests/test c release 🟢 🏃 ⏳ 🟢 ⏳ 🏃 tests/test c danger ⏳ 🏃 🟢 ⏳ 🏃 ⏳nimcache-e.danger.vm-23453 --out:"test_23506_3025568573328468745" --outdir:"/run/user/1000/balls-nimcache-e.danger.vm-23453" --run --hint[Cc]=off --hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/test.nim tests/test c danger ⏳ 🏃 🟢 🔴 🏃 tests/test c danger 🏃 🏃 🟢 🔴 🏃tests/tvariant c release 🟢 🟢 🟢 🟢 🔴 tests/tvariant cpp danger 🏃 c]=off --hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/test.nim/home/adavidoff/nims/lib/pure/terminal.nim(528, 5) Error: undeclared identifier: 'stdout'candidates (edit distance, scope distance); see '--spellSuggest': (3, 4): 'stat' [proc declared in /home/adavidoff/nims/lib/posix/posix.nim(604, 6)] (3, 4): 'stdmsg' [template declared in /home/adavidoff/nims/lib/system/io.nim(59, 12)] (3, 4): 'toOct' [func declared in /home/adavidoff/nims/lib/pure/strutil (3, 4): 'toOct' [func declared in /home/adavidoff/nims/lib/pure/strutils.nim(877, 6)] (3, 4): 'toU8' [proc declared in /home/adavidoff/nims/lib/system/arithmetics.nim(86, 8)] tests/test c danger 🏃 🏃 🟢 🔴 🔴tests/tvariant cpp danger 🏃 🏃 🏃 🏃 1000/balls-nimcache-cpp.danger.arc-23453 --out:"tvariant_23489_4892125971442567976" --outdir:"/run/user/1000/balls-nimcache-cpp.danger.arc-23453" --run --hint[Cc]=off --hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/tvariant.nims_733(NimStringV2, tySequence__uB9b75OUPRENsBAu4AnoePA)’:@sballs.nim.cpp:742:41: error: jump to label ‘LA6_’ 742 | 723 | if (NIM_UNLIKELY(*nimErr_)) goto LA6_;@sballs.nim.cpp:738:45: note: crosses initialization of ‘NimStringV2 T14_’ 738 | NimStringV2 T14_ = nsuFormatOpenArray(TMs-nimcache-cpp.danger.arc-23453/@m..@sdeps@spkgs@sballs-2.0.5@sballs.nim.cpp.o /run/user/1 | ^~~~/run/user/1000/balls-nimcache-cpp.danger.arc-23453/@mtvariant.nim.cpp:1214:42: note: from here 1214 | if (NIM_UNLIKELY(*nimErr_)) goto LA1_; | ^~~~/run/user/1000/balls-nimcache-cpp.danger.arc-23453/@mtvariant.nim.cpp:1217:21: note: crosses initialization of ‘NimStringV2 T2_’ 1217 | NimStringV2 T2_ = readAll_pureZstreams_91((*((tyObject_StreamObj__THYguAi9bSgidczZ3ywEIMQ**) (&(ss))))); | ^~~ tests/test c release 🟢 🏃 🏃 🟢 ⏳ 🏃tests/tvariant cpp release 🟢 ⏳ ⏳ ⏳ tests/tvariant cpp danger 🏃 🏃 🔴 🏃 tests/test c release 🟢 🟢 🏃 🟢 🏃 🏃 tests/test cpp release 🏃 🟢 🏃 🏃 tests/tvariant cpp release 🟢 🏃 ⏳ ⏳ tests/tvariant cpp release 🟢 🏃 ⏳ ⏳ aredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/test.nim7, 6) $ nim cpp --gc:orc --path="." --parallelBuild:0 --incremental:off --define:dange1000/balls-nimcache-cpp.danger.orc-23453 --out:"tvariant_23496_-1916579304783548793" --outdir:"/run/user/1000/balls-nimcache-cpp.danger.orc-23453" --run --hint[Cc]=off --hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/tvariant.nim/run/user/1000/balls-nimcache-cpp.danger.orc-23453/@m..@sdeps@spkgs@sballs-2.0.5 @sballs.nim.cpp:743:66: note: from here 743 | if (NIM_UNLIKELY(*nimErr_)) goto LA6_;@sballs.nim.cpp:758:45: note: crosses initialization of ‘NimStringV2 T14_’ 758 | NimStringV2 T14_ = nsuFormatOpenArray(TMome/adavidoff/nims/lib -I/home/adavidoff/git/frosty/tests -o /run/user/10 /run/user/1000/balls-nimcache-cpp.danger.orc-23453/@mtvariant.nim.cpp:1236:17: error: jump to label ‘LA1_’ 1236 | LA1_:;/run/user/1000/balls-nimcache-cpp.danger.orc-23453/@mtvariant.nim.cpp:1228:42: n 1228 | if (NIM_UNLIKELY(*nimErr_)) goto LA1_;/run/user/1000/balls-nimcache-cpp.danger.orc-23453/@mtvariant.nim.cpp:1231:21: n 1231 | NimStringV2 T2_ = readAll_pureZstreams_91((*((tyObject_StreamObj__THYguAi9bSgidczZ3ywEIMQ**) (&(ss))))); tests/test c release 🟢 🟢 🏃 🟢 🏃 🔴 tests/test c danger 🏃 🏃 🟢 🏃 🔴 🔴tests/tvariant c release 🟢 🟢 🟢 🟢 🔴 🏃tests/tvariant cpp release 🟢 🏃 ⏳ ⏳ tests/tvariant cpp danger 🏃 🏃 🔴 🔴 tests/test cpp release 🏃 🟢 🏃 🟢 tests/tvariant c danger 🟢 🟢 🟢 🟢 🔴 🏃tests/tvariant cpp release 🟢 🏃 ⏳ 🏃 tests/tvariant cpp release 🟢 🏃 ⏳ 🏃 tests/tvariant cpp danger 🏃 🟢 🔴 🔴 tests/test c danger 🏃 🟢 🟢 🏃 🔴 🔴 tests/test cpp release 🏃 🟢 🟢 🟢 tests/tvariant cpp release 🟢 🏃 🏃 🏃 tests/tvariant cpp release 🟢 🏃 🏃 🏃 tests/tvariant cpp danger 🟢 🟢 🔴 🔴 nt[Cc]=off --hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/tvariant.nim (3, 4): 'toOct' [func declared in /home/adavidoff/nims/lib/pure tests/tvariant c danger 🟢 🟢 🟢 🟢 🔴 🔴ase.vm-23453 --out:"test_23503_7205064253044871459" --outdir:"/run/user/1000/balls-nimcache-e.release.vm-23453" --run --hint[Cc]=off --hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/test.nim tests/test c release 🟢 🟢 🏃 🟢 🔴 🔴tests/tvariant cpp release 🟢 🟢 🏃 🏃 tests/tvariant cpp release 🟢 🟢 🏃 🏃 tests/test c danger 🟢 🟢 🟢 🏃 🔴 🔴 tests/test c release 🟢 🟢 🟢 🟢 🔴 🔴 tests/test cpp release 🟢 🟢 🟢 🟢 tests/tvariant cpp release 🟢 🟢 🟢 🟢 tests/tvariant cpp release 🟢 🟢 🟢 🟢 hint[Link]=off --hint[Conf]=off --hint[Processing]=off --hint[Exec]=off --hint[XDeclaredButNotUsed]=off --hint[Performance]=off --warning[UnusedImport]=off --warning[ProveInit]=off --warning[CaseTransition]=off --warning[ObservableStores]=off --warning[UnreachableCode]=off tests/tvariant.nim (3, 4): 'toOct' [func declared in /home/adavidoff/nims/lib/pure/strutils.nim tests/test c danger 🟢 🟢 🟢 🟢 🔴 🔴tests/tvariant c release 🟢 🟢 🟢 🟢 🔴 🔴 + \ No newline at end of file diff --git a/theindex.html b/theindex.html new file mode 100644 index 0000000..cf64bbd --- /dev/null +++ b/theindex.html @@ -0,0 +1,490 @@ + + + + + + + +Index + + + + + + + + + + + + +
+
+

Index

+ Modules: balls, balls/runner, balls/semaphores, balls/spec, balls/style, balls/tabouli.

API symbols

+
`$`:
+
`&`:
+
`<`:
+
`==`:
+
`=copy`:
+
`=destroy`:
+
acquire:
+
Analyzer:
+
arc:
+
ASanitizer:
+
available:
+
Backend:
+
ballsDry:
+
ballsFailFast:
+
c:
+
check:
+
checkpoint:
+
cmp:
+
commandLine:
+
commentStyle:
+
contains:
+
cpp:
+
danger:
+
DataRacer:
+
debug:
+
dec:
+
Died:
+
dollar:
+
e:
+
emojiSource:
+
emojiStack:
+
exceptionStyle:
+
Execution:
+
expect:
+
ExpectedError:
+
fail:
+
Fail:
+
FailError:
+
failureStyle:
+
flushStreams:
+
hasDefects:
+
hash:
+
hasPanics:
+
headerStyle:
+
Helgrind:
+
hints:
+
inc:
+
Info:
+
informStyle:
+
init:
+
initSemaphore:
+
isReady:
+
js:
+
leaderStyle:
+
lineNumStyle:
+
main:
+
markAndSweep:
+
Matrix:
+
matrixTable:
+
MemModel:
+
noclobber:
+
None:
+
onCI:
+
Oops:
+
oopsStyle:
+
Optimizer:
+
orc:
+
ordered:
+
Part:
+
partialStyle:
+
Pass:
+
perform:
+
Profile:
+
profiles:
+
refc:
+
release:
+
render:
+
report:
+
resetStyle:
+
resultsStyle:
+
Runs:
+
Semaphore:
+
setBallsResult:
+
signal:
+
skip:
+
Skip:
+
SkipError:
+
skippedStyle:
+
sourceStyle:
+
StatusKind:
+
statusStyles:
+
Styling:
+
successStyle:
+
suite:
+
Tabouli:
+
test:
+
Test:
+
testable:
+
totalTests:
+
TSanitizer:
+
useColor:
+
Valgrind:
+
viaFileStyle:
+
viaProcStyle:
+
vm:
+
wait:
+
Wait:
+
withLock:
+
withSemaphore:
+
+ +
+
+ + + + + +