commit
a2920e8bdb
27 changed files with 2553 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||
*.swp |
|||
remote-shell |
|||
*~ |
|||
\#* |
|||
compiled |
@ -0,0 +1,61 @@ |
|||
language: c |
|||
|
|||
# Based from: https://github.com/greghendershott/travis-racket |
|||
|
|||
# Optional: Remove to use Travis CI's older infrastructure. |
|||
sudo: false |
|||
|
|||
env: |
|||
global: |
|||
# Supply a global RACKET_DIR environment variable. This is where |
|||
# Racket will be installed. A good idea is to use ~/racket because |
|||
# that doesn't require sudo to install and is therefore compatible |
|||
# with Travis CI's newer container infrastructure. |
|||
- RACKET_DIR=~/racket |
|||
matrix: |
|||
# Supply at least one RACKET_VERSION environment variable. This is |
|||
# used by the install-racket.sh script (run at before_install, |
|||
# below) to select the version of Racket to download and install. |
|||
# |
|||
# Supply more than one RACKET_VERSION (as in the example below) to |
|||
# create a Travis-CI build matrix to test against multiple Racket |
|||
# versions. |
|||
- RACKET_VERSION=6.0 |
|||
- RACKET_VERSION=6.1 |
|||
- RACKET_VERSION=6.1.1 |
|||
- RACKET_VERSION=6.2 |
|||
- RACKET_VERSION=6.3 |
|||
- RACKET_VERSION=6.4 |
|||
- RACKET_VERSION=6.5 |
|||
- RACKET_VERSION=6.6 |
|||
- RACKET_VERSION=6.7 |
|||
- RACKET_VERSION=6.8 |
|||
- RACKET_VERSION=6.9 |
|||
- RACKET_VERSION=6.10 |
|||
- RACKET_VERSION=HEAD |
|||
|
|||
matrix: |
|||
allow_failures: |
|||
# - env: RACKET_VERSION=HEAD |
|||
fast_finish: true |
|||
|
|||
before_install: |
|||
- git clone https://github.com/greghendershott/travis-racket.git ~/travis-racket |
|||
- cat ~/travis-racket/install-racket.sh | bash # pipe to bash not sh! |
|||
- export PATH="${RACKET_DIR}/bin:${PATH}" #install-racket.sh can't set for us |
|||
|
|||
install: |
|||
- raco pkg install --deps search-auto |
|||
|
|||
before_script: |
|||
|
|||
# Here supply steps such as raco make, raco test, etc. You can run |
|||
# `raco pkg install --deps search-auto` to install any required |
|||
# packages without it getting stuck on a confirmation prompt. |
|||
script: |
|||
- raco test -x -p bolt |
|||
|
|||
after_success: |
|||
- raco setup --check-pkg-deps --pkgs bolt |
|||
- raco pkg install --deps search-auto cover cover-coveralls |
|||
- raco cover -b -f coveralls -d $TRAVIS_BUILD_DIR/coverage . |
@ -0,0 +1,11 @@ |
|||
bolt |
|||
Copyright (c) 2018 wes |
|||
|
|||
This package is distributed under the GNU Lesser General Public |
|||
License (LGPL). This means that you can link bolt into proprietary |
|||
applications, provided you follow the rules stated in the LGPL. You |
|||
can also modify this package; if you distribute a modified version, |
|||
you must distribute it under the terms of the LGPL, which in |
|||
particular means that you must release the source code for the |
|||
modified software. See http://www.gnu.org/copyleft/lesser.html |
|||
for more information. |
@ -0,0 +1,3 @@ |
|||
bolt |
|||
==== |
|||
README text here. |
@ -0,0 +1,65 @@ |
|||
#lang racket |
|||
|
|||
(require remote-shell/ssh) |
|||
|
|||
(define cwd |
|||
(make-parameter "~")) |
|||
|
|||
(define host |
|||
(make-parameter #f)) |
|||
|
|||
(define user |
|||
(make-parameter #f)) |
|||
|
|||
(define commands |
|||
(make-parameter #f)) |
|||
|
|||
(define-syntax-rule |
|||
(plan expr ...) |
|||
(parameterize |
|||
([commands (list)]) |
|||
(begin expr ...))) |
|||
|
|||
(define-syntax-rule |
|||
(with-cwd dir expr ...) |
|||
(parameterize |
|||
([cwd (format "~a/~a" (cwd) dir)]) |
|||
(begin expr ...))) |
|||
|
|||
(define-syntax-rule |
|||
(with-host remote expr ...) |
|||
(parameterize |
|||
([host remote]) |
|||
(begin expr ...))) |
|||
|
|||
(define-syntax-rule |
|||
(become username expr ...) |
|||
(parameterize |
|||
([user username]) |
|||
(begin expr ...))) |
|||
|
|||
(define (as-user cmd) |
|||
(if |
|||
(user) |
|||
(format "sudo -u ~a sh -c \"~a\"" |
|||
(user) |
|||
cmd) |
|||
cmd)) |
|||
|
|||
(define (exec cmd) |
|||
(displayln |
|||
(format "on ~a:" (remote-host (host)))) |
|||
(ssh (host) |
|||
(as-user |
|||
(string-append |
|||
(format "cd ~a && " |
|||
(cwd)) |
|||
cmd)))) |
|||
|
|||
(define ((make-cmd cmd)) (exec cmd)) |
|||
|
|||
(define ls (make-cmd "ls")) |
|||
(define pwd (make-cmd "pwd")) |
|||
|
|||
(provide |
|||
(all-defined-out) remote) |
@ -0,0 +1,2 @@ |
|||
33 |
|||
((3) 0 () 0 () () (h ! (equal))) |
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@ |
|||
("f7c4c2295c53d7e662ba4d803aa99e517b2ad0f3dded01a3f73681ebb1f34a01d7abc54cb40575c8" "cffc520df8c71fbcf032bd9484bbd5e083e1eea3a39f82aa67381598121c046838efb79ea4422363" "d8d3930e051fde87175bb0f52680184b782e2377") |
File diff suppressed because one or more lines are too long
@ -0,0 +1,324 @@ |
|||
/* See the beginning of "manual.css". */ |
|||
|
|||
/* Monospace: */ |
|||
|
|||
.RktIn, .RktRdr, .RktPn, .RktMeta, |
|||
.RktMod, .RktKw, .RktVar, .RktSym, |
|||
.RktRes, .RktOut, .RktCmt, .RktVal, |
|||
.RktBlk, .RktErr { |
|||
font-family: 'Fira-Mono', monospace; |
|||
white-space: inherit; |
|||
font-size: 1rem; |
|||
line-height: 1.5; |
|||
|
|||
} |
|||
|
|||
/* this selctor grabs the first linked Racket symbol |
|||
in a definition box (i.e., the symbol being defined) */ |
|||
a.RktValDef, a.RktStxDef, a.RktSymDef, |
|||
span.RktValDef, span.RktStxDef, span.RktSymDef |
|||
{ |
|||
font-size: 1.1rem; |
|||
color: black; |
|||
font-weight: 500; |
|||
} |
|||
|
|||
|
|||
.inheritedlbl { |
|||
font-family: 'Fira', sans-serif; |
|||
} |
|||
|
|||
.RBackgroundLabelInner { |
|||
font-family: inherit; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Inherited methods, left margin */ |
|||
|
|||
.inherited { |
|||
width: 95%; |
|||
margin-top: 0.5em; |
|||
text-align: left; |
|||
background-color: inherit; |
|||
} |
|||
|
|||
.inherited td { |
|||
font-size: 82%; |
|||
padding-left: 0.5rem; |
|||
line-height: 1.3; |
|||
text-indent: 0; |
|||
padding-right: 0; |
|||
} |
|||
|
|||
.inheritedlbl { |
|||
font-style: normal; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Racket text styles */ |
|||
|
|||
.RktIn { |
|||
color: #cc6633; |
|||
background-color: #eee; |
|||
} |
|||
|
|||
.RktInBG { |
|||
background-color: #eee; |
|||
} |
|||
|
|||
|
|||
.refcolumn .RktInBG { |
|||
background-color: white; |
|||
} |
|||
|
|||
.RktRdr { |
|||
} |
|||
|
|||
.RktPn { |
|||
color: #843c24; |
|||
} |
|||
|
|||
.RktMeta { |
|||
color: black; |
|||
} |
|||
|
|||
.RktMod { |
|||
color: inherit; |
|||
} |
|||
|
|||
.RktOpt { |
|||
color: black; |
|||
} |
|||
|
|||
.RktKw { |
|||
color: black; |
|||
} |
|||
|
|||
.RktErr { |
|||
color: red; |
|||
font-style: italic; |
|||
font-weight: 400; |
|||
} |
|||
|
|||
.RktVar { |
|||
position: relative; |
|||
left: -1px; font-style: italic; |
|||
color: #444; |
|||
} |
|||
|
|||
.SVInsetFlow .RktVar { |
|||
font-weight: 400; |
|||
color: #444; |
|||
} |
|||
|
|||
|
|||
.RktSym { |
|||
color: inherit; |
|||
} |
|||
|
|||
|
|||
|
|||
.RktValLink, .RktStxLink, .RktModLink { |
|||
text-decoration: none; |
|||
color: #07A; |
|||
font-size: 1rem; |
|||
} |
|||
|
|||
/* for syntax links within headings */ |
|||
h2 a.RktStxLink, h3 a.RktStxLink, h4 a.RktStxLink, h5 a.RktStxLink, |
|||
h2 a.RktValLink, h3 a.RktValLink, h4 a.RktValLink, h5 a.RktValLink, |
|||
h2 .RktSym, h3 .RktSym, h4 .RktSym, h5 .RktSym, |
|||
h2 .RktMod, h3 .RktMod, h4 .RktMod, h5 .RktMod, |
|||
h2 .RktVal, h3 .RktVal, h4 .RktVal, h5 .RktVal, |
|||
h2 .RktPn, h3 .RktPn, h4 .RktPn, h5 .RktPn { |
|||
color: #333; |
|||
font-size: 1.50rem; |
|||
font-weight: 400; |
|||
} |
|||
|
|||
.toptoclink .RktStxLink, .toclink .RktStxLink, |
|||
.toptoclink .RktValLink, .toclink .RktValLink, |
|||
.toptoclink .RktModLink, .toclink .RktModLink { |
|||
color: inherit; |
|||
} |
|||
|
|||
.tocset .RktValLink, .tocset .RktStxLink, .tocset .RktModLink, .tocset .RktSym { |
|||
color: black; |
|||
font-weight: 400; |
|||
font-size: 0.9rem; |
|||
} |
|||
|
|||
.tocset td a.tocviewselflink .RktValLink, |
|||
.tocset td a.tocviewselflink .RktStxLink, |
|||
.tocset td a.tocviewselflink .RktMod, |
|||
.tocset td a.tocviewselflink .RktSym { |
|||
font-weight: lighter; |
|||
color: white; |
|||
} |
|||
|
|||
|
|||
.RktRes { |
|||
color: #0000af; |
|||
} |
|||
|
|||
.RktOut { |
|||
color: #960096; |
|||
} |
|||
|
|||
.RktCmt { |
|||
color: #c2741f; |
|||
} |
|||
|
|||
.RktVal { |
|||
color: #228b22; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Some inline styles */ |
|||
|
|||
.together { /* for definitions grouped together in one box */ |
|||
width: 100%; |
|||
border-top: 2px solid white; |
|||
} |
|||
|
|||
tbody > tr:first-child > td > .together { |
|||
border-top: 0px; /* erase border on first instance of together */ |
|||
} |
|||
|
|||
.RktBlk { |
|||
white-space: pre; |
|||
text-align: left; |
|||
} |
|||
|
|||
.highlighted { |
|||
font-size: 1rem; |
|||
background-color: #fee; |
|||
} |
|||
|
|||
.defmodule { |
|||
font-family: 'Fira-Mono', monospace; |
|||
padding: 0.25rem 0.75rem 0.25rem 0.5rem; |
|||
margin-bottom: 1rem; |
|||
width: 100%; |
|||
background-color: #ebf0f4; |
|||
} |
|||
|
|||
.defmodule a { |
|||
color: #444; |
|||
} |
|||
|
|||
|
|||
.defmodule td span.hspace:first-child { |
|||
position: absolute; |
|||
width: 0; |
|||
display: inline-block; |
|||
} |
|||
|
|||
.defmodule .RpackageSpec .Smaller, |
|||
.defmodule .RpackageSpec .stt { |
|||
font-size: 1rem; |
|||
} |
|||
|
|||
/* make parens ordinary color in defmodule */ |
|||
.defmodule .RktPn { |
|||
color: inherit; |
|||
} |
|||
|
|||
.specgrammar { |
|||
float: none; |
|||
padding-left: 1em; |
|||
} |
|||
|
|||
|
|||
.RBibliography td { |
|||
vertical-align: text-top; |
|||
padding-top: 1em; |
|||
} |
|||
|
|||
.leftindent { |
|||
margin-left: 2rem; |
|||
margin-right: 0em; |
|||
} |
|||
|
|||
.insetpara { |
|||
margin-left: 1em; |
|||
margin-right: 1em; |
|||
} |
|||
|
|||
.SCodeFlow .Rfilebox { |
|||
margin-left: -1em; /* see 17.2 of guide, module languages */ |
|||
} |
|||
|
|||
.Rfiletitle { |
|||
text-align: right; |
|||
background-color: #eee; |
|||
} |
|||
|
|||
.SCodeFlow .Rfiletitle { |
|||
border-top: 1px dotted gray; |
|||
border-right: 1px dotted gray; |
|||
} |
|||
|
|||
|
|||
.Rfilename { |
|||
border-top: 0; |
|||
border-right: 0; |
|||
padding-left: 0.5em; |
|||
padding-right: 0.5em; |
|||
background-color: inherit; |
|||
} |
|||
|
|||
.Rfilecontent { |
|||
margin: 0.5em; |
|||
} |
|||
|
|||
.RpackageSpec { |
|||
padding-right: 0; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* For background labels */ |
|||
|
|||
.RBackgroundLabel { |
|||
float: right; |
|||
width: 0px; |
|||
height: 0px; |
|||
} |
|||
|
|||
.RBackgroundLabelInner { |
|||
position: relative; |
|||
width: 25em; |
|||
left: -25.5em; |
|||
top: 0.20rem; /* sensitive to monospaced font choice */ |
|||
text-align: right; |
|||
z-index: 0; |
|||
font-weight: 300; |
|||
font-family: 'Fira-Mono', monospace; |
|||
font-size: 0.9rem; |
|||
color: gray; |
|||
} |
|||
|
|||
|
|||
.RpackageSpec .Smaller { |
|||
font-weight: 300; |
|||
font-family: 'Fira-Mono', monospace; |
|||
font-size: 0.9rem; |
|||
} |
|||
|
|||
.RForeground { |
|||
position: relative; |
|||
left: 0px; |
|||
top: 0px; |
|||
z-index: 1; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* For section source modules & tags */ |
|||
|
|||
.RPartExplain { |
|||
background: #eee; |
|||
font-size: 0.9rem; |
|||
margin-top: 0.2rem; |
|||
padding: 0.2rem; |
|||
text-align: left; |
|||
} |
@ -0,0 +1,98 @@ |
|||
/* For the Racket manual style */ |
|||
|
|||
AddOnLoad(function() { |
|||
/* Look for header elements that have x-source-module and x-part tag. |
|||
For those elements, add a hidden element that explains how to |
|||
link to the section, and set the element's onclick() to display |
|||
the explanation. */ |
|||
var tag_names = ["h1", "h2", "h3", "h4", "h5"]; |
|||
for (var j = 0; j < tag_names.length; j++) { |
|||
elems = document.getElementsByTagName(tag_names[j]); |
|||
for (var i = 0; i < elems.length; i++) { |
|||
var elem = elems.item(i); |
|||
AddPartTitleOnClick(elem); |
|||
} |
|||
} |
|||
}) |
|||
|
|||
function AddPartTitleOnClick(elem) { |
|||
var mod_path = elem.getAttribute("x-source-module"); |
|||
var tag = elem.getAttribute("x-part-tag"); |
|||
if (mod_path && tag) { |
|||
// Might not be present:
|
|||
var prefixes = elem.getAttribute("x-part-prefixes"); |
|||
|
|||
var info = document.createElement("div"); |
|||
info.className = "RPartExplain"; |
|||
|
|||
/* The "top" tag refers to a whole document: */ |
|||
var is_top = (tag == "\"top\""); |
|||
info.appendChild(document.createTextNode("Link to this " |
|||
+ (is_top ? "document" : "section") |
|||
+ " with ")); |
|||
|
|||
/* Break `secref` into two lines if the module path and tag |
|||
are long enough: */ |
|||
var is_long = (is_top ? false : ((mod_path.length |
|||
+ tag.length |
|||
+ (prefixes ? (16 + prefixes.length) : 0)) |
|||
> 60)); |
|||
|
|||
var line1 = document.createElement("div"); |
|||
var line1x = ((is_long && prefixes) ? document.createElement("div") : line1); |
|||
var line2 = (is_long ? document.createElement("div") : line1); |
|||
|
|||
function add(dest, str, cn) { |
|||
var s = document.createElement("span"); |
|||
s.className = cn; |
|||
s.style.whiteSpace = "nowrap"; |
|||
s.appendChild(document.createTextNode(str)); |
|||
dest.appendChild(s); |
|||
} |
|||
/* Construct a `secref` call with suitable syntax coloring: */ |
|||
add(line1, "\xA0@", "RktRdr"); |
|||
add(line1, (is_top ? "other-doc" : "secref"), "RktSym"); |
|||
add(line1, "[", "RktPn"); |
|||
if (!is_top) |
|||
add(line1, tag, "RktVal"); |
|||
if (is_long) { |
|||
/* indent additional lines: */ |
|||
if (prefixes) |
|||
add(line1x, "\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0", "RktPn"); |
|||
add(line2, "\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0", "RktPn"); |
|||
} |
|||
if (prefixes) { |
|||
add(line1x, " #:tag-prefixes ", "RktPn"); |
|||
add(line1x, "'", "RktVal"); |
|||
add(line1x, prefixes, "RktVal"); |
|||
} |
|||
if (!is_top) |
|||
add(line2, " #:doc ", "RktPn"); |
|||
add(line2, "'", "RktVal"); |
|||
add(line2, mod_path, "RktVal"); |
|||
add(line2, "]", "RktPn"); |
|||
|
|||
info.appendChild(line1); |
|||
if (is_long) |
|||
info.appendChild(line1x); |
|||
if (is_long) |
|||
info.appendChild(line2); |
|||
|
|||
info.style.display = "none"; |
|||
|
|||
/* Add the new element afterthe header: */ |
|||
var n = elem.nextSibling; |
|||
if (n) |
|||
elem.parentNode.insertBefore(info, n); |
|||
else |
|||
elem.parentNode.appendChild(info); |
|||
|
|||
/* Clicking the header shows the explanation element: */ |
|||
elem.onclick = function () { |
|||
if (info.style.display == "none") |
|||
info.style.display = "block"; |
|||
else |
|||
info.style.display = "none"; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,770 @@ |
|||
|
|||
/* See the beginning of "scribble.css". |
|||
This file is used by the `scribble/manual` language, along with |
|||
"manual-racket.css". */ |
|||
|
|||
@import url("manual-fonts.css"); |
|||
|
|||
* { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
@media all {html {font-size: 15px;}} |
|||
@media all and (max-width:940px){html {font-size: 14px;}} |
|||
@media all and (max-width:850px){html {font-size: 13px;}} |
|||
@media all and (max-width:830px){html {font-size: 12px;}} |
|||
@media all and (max-width:740px){html {font-size: 11px;}} |
|||
|
|||
/* CSS seems backward: List all the classes for which we want a |
|||
particular font, so that the font can be changed in one place. (It |
|||
would be nicer to reference a font definition from all the places |
|||
that we want it.) |
|||
|
|||
As you read the rest of the file, remember to double-check here to |
|||
see if any font is set. */ |
|||
|
|||
/* Monospace: */ |
|||
.maincolumn, .refpara, .refelem, .tocset, .stt, .hspace, .refparaleft, .refelemleft { |
|||
font-family: 'Fira-Mono', monospace; |
|||
white-space: inherit; |
|||
font-size: 1rem; |
|||
} |
|||
|
|||
/* embolden the "Racket Guide" and "Racket Reference" links on the TOC */ |
|||
/* there isn't an obvious tag in the markup that designates the top TOC page, which is called "start.scrbl" */ |
|||
/* nor a tag that designates these two links as special */ |
|||
/* so we'll use this slightly tortured sibling selector that hooks onto the h2 tag */ |
|||
h2[x-source-module='(lib "scribblings/main/start.scrbl")'] ~ table a[href="guide/index.html"], |
|||
h2[x-source-module='(lib "scribblings/main/start.scrbl")'] ~ table a[href="reference/index.html"] { |
|||
font-weight: bold; |
|||
} |
|||
|
|||
|
|||
h2 .stt { |
|||
font-size: 2.3rem; |
|||
/* prevent automatic bolding from h2 */ |
|||
font-weight: 400; |
|||
} |
|||
|
|||
.toptoclink .stt { |
|||
font-size: inherit; |
|||
} |
|||
.toclink .stt { |
|||
font-size: 90%; |
|||
} |
|||
|
|||
.RpackageSpec .stt { |
|||
font-weight: 300; |
|||
font-family: 'Fira-Mono', monospace; |
|||
font-size: 0.9rem; |
|||
} |
|||
|
|||
h3 .stt, h4 .stt, h5 .stt { |
|||
color: #333; |
|||
font-size: 1.65rem; |
|||
font-weight: 400; |
|||
} |
|||
|
|||
|
|||
/* Serif: */ |
|||
.main, .refcontent, .tocview, .tocsub, .sroman, i { |
|||
font-family: 'Charter-Racket', serif; |
|||
font-size: 1.18rem; |
|||
/* Don't use font-feature-settings with Charter, |
|||
it fouls up loading for reasons mysterious */ |
|||
/* font-feature-settings: 'tnum' 1, 'liga' 0; */ |
|||
} |
|||
|
|||
|
|||
/* Sans-serif: */ |
|||
.version, .versionNoNav, .ssansserif { |
|||
font-family: 'Fira', sans-serif; |
|||
} |
|||
|
|||
/* used mostly for DrRacket menu commands */ |
|||
.ssansserif { |
|||
font-family: 'Fira', sans-serif; |
|||
font-size: 0.9em; |
|||
} |
|||
|
|||
.tocset .ssansserif { |
|||
font-size: 100%; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
|
|||
p, .SIntrapara { |
|||
display: block; |
|||
margin: 0 0 1em 0; |
|||
line-height: 1.4; |
|||
} |
|||
|
|||
.compact { |
|||
padding: 0 0 1em 0; |
|||
} |
|||
|
|||
li { |
|||
list-style-position: outside; |
|||
margin-left: 1.2em; |
|||
} |
|||
|
|||
h1, h2, h3, h4, h5, h6, h7, h8 { |
|||
font-family: 'Fira', sans-serif; |
|||
font-weight: 300; |
|||
font-size: 1.6rem; |
|||
color: #333; |
|||
margin-top: inherit; |
|||
margin-bottom: 1rem; |
|||
line-height: 1.25; |
|||
|
|||
} |
|||
|
|||
h3, h4, h5, h6, h7, h8 { |
|||
border-top: 1px solid black; |
|||
} |
|||
|
|||
|
|||
|
|||
h2 { /* per-page main title */ |
|||
font-family: 'Cooper-Hewitt'; |
|||
margin-top: 4rem; |
|||
font-size: 2.3rem; |
|||
font-weight: bold; |
|||
line-height: 1.2; |
|||
width: 90%; |
|||
/* a little nudge to make text visually lower than 4rem rule in left margin */ |
|||
position: relative; |
|||
top: 6px; |
|||
} |
|||
|
|||
h3, h4, h5, h6, h7, h8 { |
|||
margin-top: 2em; |
|||
padding-top: 0.1em; |
|||
margin-bottom: 0.75em; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Main */ |
|||
|
|||
body { |
|||
color: black; |
|||
background-color: white; |
|||
} |
|||
|
|||
.maincolumn { |
|||
width: auto; |
|||
margin-top: 4rem; |
|||
margin-left: 17rem; |
|||
margin-right: 2rem; |
|||
margin-bottom: 10rem; /* to avoid fixed bottom nav bar */ |
|||
max-width: 700px; |
|||
min-width: 370px; /* below this size, code samples don't fit */ |
|||
} |
|||
|
|||
a { |
|||
text-decoration: inherit; |
|||
} |
|||
|
|||
a, .toclink, .toptoclink, .tocviewlink, .tocviewselflink, .tocviewtoggle, .plainlink, |
|||
.techinside, .techoutside:hover, .techinside:hover { |
|||
color: #07A; |
|||
} |
|||
|
|||
a:hover { |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Navigation */ |
|||
|
|||
.navsettop, .navsetbottom { |
|||
left: 0; |
|||
width: 15rem; |
|||
height: 6rem; |
|||
font-family: 'Fira', sans-serif; |
|||
font-size: 0.9rem; |
|||
border-bottom: 0px solid hsl(216, 15%, 70%); |
|||
background-color: inherit; |
|||
padding: 0; |
|||
} |
|||
|
|||
.navsettop { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
margin-bottom: 0; |
|||
border-bottom: 0; |
|||
} |
|||
|
|||
.navsettop a, .navsetbottom a { |
|||
color: black; |
|||
} |
|||
|
|||
.navsettop a:hover, .navsetbottom a:hover { |
|||
background: hsl(216, 78%, 95%); |
|||
text-decoration: none; |
|||
} |
|||
|
|||
.navleft, .navright { |
|||
position: static; |
|||
float: none; |
|||
margin: 0; |
|||
white-space: normal; |
|||
} |
|||
|
|||
|
|||
.navleft a { |
|||
display: inline-block; |
|||
} |
|||
|
|||
.navright a { |
|||
display: inline-block; |
|||
text-align: center; |
|||
} |
|||
|
|||
.navleft a, .navright a, .navright span { |
|||
display: inline-block; |
|||
padding: 0.5rem; |
|||
min-width: 1rem; |
|||
} |
|||
|
|||
|
|||
.navright { |
|||
height: 2rem; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
|
|||
.navsetbottom { |
|||
display: none; |
|||
} |
|||
|
|||
.nonavigation { |
|||
color: #889; |
|||
} |
|||
|
|||
.searchform { |
|||
display: block; |
|||
margin: 0; |
|||
padding: 0; |
|||
border-bottom: 1px solid #eee; |
|||
height: 4rem; |
|||
} |
|||
|
|||
.nosearchform { |
|||
margin: 0; |
|||
padding: 0; |
|||
height: 4rem; |
|||
} |
|||
|
|||
.searchbox { |
|||
font-size: 0.9rem; |
|||
width: 12rem; |
|||
margin: 1rem; |
|||
padding: 0.25rem 0.4rem ; |
|||
vertical-align: middle; |
|||
background-color: white; |
|||
font-family: 'Fira-Mono', monospace; |
|||
} |
|||
|
|||
|
|||
#search_box { |
|||
font-family: 'Fira-Mono', monospace; |
|||
font-size: 1rem; |
|||
padding: 0.25rem 0.3rem ; |
|||
} |
|||
|
|||
/* Default to local view. Global will specialize */ |
|||
.plt_global_only { display: none; } |
|||
.plt_local_only { display: block; } |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Version */ |
|||
|
|||
.versionbox { |
|||
position: absolute; |
|||
float: none; |
|||
top: 0.25rem; |
|||
left: 17rem; |
|||
z-index: 11000; |
|||
height: 2em; |
|||
font-size: 70%; |
|||
font-weight: lighter; |
|||
width: inherit; |
|||
margin: 0; |
|||
} |
|||
.version, .versionNoNav { |
|||
font-size: inherit; |
|||
} |
|||
.version:before, .versionNoNav:before { |
|||
content: "v."; |
|||
} |
|||
|
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Margin notes */ |
|||
|
|||
/* cancel scribble.css styles: */ |
|||
.refpara, .refelem { |
|||
position: static; |
|||
float: none; |
|||
height: auto; |
|||
width: auto; |
|||
margin: 0; |
|||
} |
|||
|
|||
.refcolumn { |
|||
position: static; |
|||
display: block; |
|||
width: auto; |
|||
font-size: inherit; |
|||
margin: 2rem; |
|||
margin-left: 2rem; |
|||
padding: 0.5em; |
|||
padding-left: 0.75em; |
|||
padding-right: 1em; |
|||
background: hsl(60, 29%, 94%); |
|||
border: 1px solid #ccb; |
|||
border-left: 0.4rem solid #ccb; |
|||
} |
|||
|
|||
|
|||
/* slightly different handling for margin-note* on narrow screens */ |
|||
@media all and (max-width:1340px) { |
|||
span.refcolumn { |
|||
float: right; |
|||
width: 50%; |
|||
margin-left: 1rem; |
|||
margin-bottom: 0.8rem; |
|||
margin-top: 1.2rem; |
|||
} |
|||
|
|||
} |
|||
|
|||
.refcontent, .refcontent p { |
|||
line-height: 1.5; |
|||
margin: 0; |
|||
} |
|||
|
|||
.refcontent p + p { |
|||
margin-top: 1em; |
|||
} |
|||
|
|||
.refcontent a { |
|||
font-weight: 400; |
|||
} |
|||
|
|||
.refpara, .refparaleft { |
|||
top: -1em; |
|||
} |
|||
|
|||
|
|||
@media all and (max-width:600px) { |
|||
.refcolumn { |
|||
margin-left: 0; |
|||
margin-right: 0; |
|||
} |
|||
} |
|||
|
|||
|
|||
@media all and (min-width:1340px) { |
|||
.refcolumn { |
|||
margin: 0 -22.5rem 1rem 0; |
|||
float: right; |
|||
clear: right; |
|||
width: 18rem; |
|||
} |
|||
} |
|||
|
|||
.refcontent { |
|||
font-family: 'Fira', sans-serif; |
|||
font-size: 1rem; |
|||
line-height: 1.6; |
|||
margin: 0 0 0 0; |
|||
} |
|||
|
|||
|
|||
.refparaleft, .refelemleft { |
|||
position: relative; |
|||
float: left; |
|||
right: 2em; |
|||
height: 0em; |
|||
width: 13em; |
|||
margin: 0em 0em 0em -13em; |
|||
} |
|||
|
|||
.refcolumnleft { |
|||
background-color: hsl(60, 29%, 94%); |
|||
display: block; |
|||
position: relative; |
|||
width: 13em; |
|||
font-size: 85%; |
|||
border: 0.5em solid hsl(60, 29%, 94%); |
|||
margin: 0 0 0 0; |
|||
} |
|||
|
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Table of contents, left margin */ |
|||
|
|||
.tocset { |
|||
position: absolute; |
|||
float: none; |
|||
left: 0; |
|||
top: 0rem; |
|||
width: 14rem; |
|||
padding: 7rem 0.5rem 0.5rem 0.5rem; |
|||
background-color: hsl(216, 15%, 70%); |
|||
margin: 0; |
|||
|
|||
} |
|||
|
|||
.tocset td { |
|||
vertical-align: text-top; |
|||
padding-bottom: 0.4rem; |
|||
padding-left: 0.2rem; |
|||
line-height: 1.1; |
|||
font-family: 'Fira', sans-serif; |
|||
} |
|||
|
|||
.tocset td a { |
|||
color: black; |
|||
font-weight: 400; |
|||
} |
|||
|
|||
|
|||
.tocview { |
|||
text-align: left; |
|||
background-color: inherit; |
|||
} |
|||
|
|||
|
|||
.tocview td, .tocsub td { |
|||
line-height: 1.3; |
|||
} |
|||
|
|||
|
|||
.tocview table, .tocsub table { |
|||
width: 90%; |
|||
} |
|||
|
|||
.tocset td a.tocviewselflink { |
|||
font-weight: lighter; |
|||
font-size: 110%; /* monospaced styles below don't need to enlarge */ |
|||
color: white; |
|||
} |
|||
|
|||
.tocviewselflink { |
|||
text-decoration: none; |
|||
} |
|||
|
|||
.tocsub { |
|||
text-align: left; |
|||
margin-top: 0.5em; |
|||
background-color: inherit; |
|||
} |
|||
|
|||
.tocviewlist, .tocsublist { |
|||
margin-left: 0.2em; |
|||
margin-right: 0.2em; |
|||
padding-top: 0.2em; |
|||
padding-bottom: 0.2em; |
|||
} |
|||
.tocviewlist table { |
|||
font-size: 82%; |
|||
} |
|||
|
|||
.tocviewlisttopspace { |
|||
margin-bottom: 1em; |
|||
} |
|||
|
|||
.tocviewsublist, .tocviewsublistonly, .tocviewsublisttop, .tocviewsublistbottom { |
|||
margin-left: 0.4em; |
|||
border-left: 1px solid #99a; |
|||
padding-left: 0.8em; |
|||
} |
|||
.tocviewsublist { |
|||
margin-bottom: 1em; |
|||
} |
|||
.tocviewsublist table, |
|||
.tocviewsublistonly table, |
|||
.tocviewsublisttop table, |
|||
.tocviewsublistbottom table, |
|||
table.tocsublist { |
|||
font-size: 1rem; |
|||
} |
|||
|
|||
.tocviewsublist td, |
|||
.tocviewsublistbottom td, |
|||
.tocviewsublisttop td, |
|||
.tocsub td, |
|||
.tocviewsublistonly td { |
|||
font-size: 90%; |
|||
} |
|||
|
|||
/* shrink the monospaced text (`stt`) within nav */ |
|||
.tocviewsublist td .stt, |
|||
.tocviewsublistbottom td .stt, |
|||
.tocviewsublisttop td .stt, |
|||
.tocsub td .stt, |
|||
.tocviewsublistonly td .stt { |
|||
font-size: 95%; |
|||
} |
|||
|
|||
|
|||
.tocviewtoggle { |
|||
font-size: 75%; /* looks better, and avoids bounce when toggling sub-sections due to font alignments */ |
|||
} |
|||
|
|||
.tocsublist td { |
|||
padding-left: 0.5rem; |
|||
padding-top: 0.25rem; |
|||
text-indent: 0; |
|||
} |
|||
|
|||
.tocsublinknumber { |
|||
font-size: 100%; |
|||
} |
|||
|
|||
.tocsublink { |
|||
font-size: 82%; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
.tocsubseclink { |
|||
font-size: 100%; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
.tocsubnonseclink { |
|||
font-size: 82%; |
|||
text-decoration: none; |
|||
margin-left: 1rem; |
|||
padding-left: 0; |
|||
display: inline-block; |
|||
} |
|||
|
|||
/* the label "on this page" */ |
|||
.tocsubtitle { |
|||
display: block; |
|||
font-size: 62%; |
|||
font-family: 'Fira', sans-serif; |
|||
font-weight: bolder; |
|||
font-style: normal; |
|||
letter-spacing: 2px; |
|||
text-transform: uppercase; |
|||
margin: 0.5em; |
|||
} |
|||
|
|||
.toptoclink { |
|||
font-weight: bold; |
|||
font-size: 110%; |
|||
margin-bottom: 0.5rem; |
|||
margin-top: 1.5rem; |
|||
display: inline-block; |
|||
} |
|||
|
|||
.toclink { |
|||
font-size: inherit; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Some inline styles */ |
|||
|
|||
.indexlink { |
|||
text-decoration: none; |
|||
} |
|||
|
|||
pre { |
|||
margin-left: 2em; |
|||
} |
|||
|
|||
blockquote { |
|||
margin-left: 2em; |
|||
margin-right: 2em; |
|||
margin-bottom: 1em; |
|||
} |
|||
|
|||
.SCodeFlow { |
|||
border-left: 1px dotted black; |
|||
padding-left: 1em; |
|||
padding-right: 1em; |
|||
margin-top: 1em; |
|||
margin-bottom: 1em; |
|||
margin-left: 0em; |
|||
margin-right: 2em; |
|||
white-space: nowrap; |
|||
line-height: 1.5; |
|||
} |
|||
|
|||
.SCodeFlow img { |
|||
margin-top: 0.5em; |
|||
margin-bottom: 0.5em; |
|||
} |
|||
|
|||
/* put a little air between lines of code sample */ |
|||
/* Fira Mono appears taller than Source Code Pro */ |
|||
.SCodeFlow td { |
|||
padding-bottom: 1px; |
|||
} |
|||
|
|||
.boxed { |
|||
margin: 0; |
|||
margin-top: 2em; |
|||
padding: 0.25em; |
|||
padding-top: 0.3em; |
|||
padding-bottom: 0.4em; |
|||
background: #f3f3f3; |
|||
box-sizing:border-box; |
|||
border-top: 1px solid #99b; |
|||
background: hsl(216, 78%, 95%); |
|||
background: -moz-linear-gradient(to bottom left, hsl(0, 0%, 99%) 0%, hsl(216, 62%, 95%) 100%); |
|||
background: -webkit-linear-gradient(to bottom left, hsl(0, 0%, 99%) 0%, hsl(216, 62%, 95%) 100%); |
|||
background: -o-linear-gradient(to bottom left, hsl(0, 0%, 99%) 0%, hsl(216, 62%, 95%) 100%); |
|||
background: -ms-linear-gradient(to bottom left, hsl(0, 0%, 99%) 0%, hsl(216, 62%, 95%) 100%); |
|||
background: linear-gradient(to bottom left, hsl(0, 0%, 99%) 0%, hsl(216, 62%, 95%) 100%); |
|||
} |
|||
|
|||
blockquote > blockquote.SVInsetFlow { |
|||
/* resolves issue in e.g. /reference/notation.html */ |
|||
margin-top: 0em; |
|||
} |
|||
|
|||
.leftindent .SVInsetFlow { /* see e.g. section 4.5 of Racket Guide */ |
|||
margin-top: 1em; |
|||
margin-bottom: 1em; |
|||
} |
|||
|
|||
.SVInsetFlow a, .SCodeFlow a { |
|||
color: #07A; |
|||
} |
|||
|
|||
.SubFlow { |
|||
display: block; |
|||
margin: 0em; |
|||
} |
|||
|
|||
.boxed { |
|||
width: 100%; |
|||
background-color: inherit; |
|||
} |
|||
|
|||
.techoutside { text-decoration: none; } |
|||
|
|||
.SAuthorListBox { |
|||
position: static; |
|||
float: none; |
|||
font-family: 'Fira', sans-serif; |
|||
font-weight: 300; |
|||
font-size: 110%; |
|||
margin-top: 1rem; |
|||
margin-bottom: 2rem; |
|||
width: 30rem; |
|||
height: auto; |
|||
} |
|||
|
|||
.author > a { /* email links within author block */ |
|||
font-weight: inherit; |
|||
color: inherit; |
|||
} |
|||
|
|||
.SAuthorList { |
|||
font-size: 82%; |
|||
} |
|||
.SAuthorList:before { |
|||
content: "by "; |
|||
} |
|||
.author { |
|||
display: inline; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
/* phone + tablet styles */ |
|||
|
|||
@media all and (max-width:720px){ |
|||
|
|||
|
|||
@media all and (max-width:720px){ |
|||
|
|||
@media all {html {font-size: 15px;}} |
|||
@media all and (max-width:700px){html {font-size: 14px;}} |
|||
@media all and (max-width:630px){html {font-size: 13px;}} |
|||
@media all and (max-width:610px){html {font-size: 12px;}} |
|||
@media all and (max-width:550px){html {font-size: 11px;}} |
|||
@media all and (max-width:520px){html {font-size: 10px;}} |
|||
|
|||
.navsettop, .navsetbottom { |
|||
display: block; |
|||
position: absolute; |
|||
width: 100%; |
|||
height: 4rem; |
|||
border: 0; |
|||
background-color: hsl(216, 15%, 70%); |
|||
} |
|||
|
|||
.searchform { |
|||
display: inline; |
|||
border: 0; |
|||
} |
|||
|
|||
.navright { |
|||
position: absolute; |
|||
right: 1.5rem; |
|||
margin-top: 1rem; |
|||
border: 0px solid red; |
|||
} |
|||
|
|||
.navsetbottom { |
|||
display: block; |
|||
margin-top: 8rem; |
|||
} |
|||
|
|||
.tocset { |
|||
display: none; |
|||
} |
|||
|
|||
.tocset table, .tocset tbody, .tocset tr, .tocset td { |
|||
display: inline; |
|||
} |
|||
|
|||
.tocview { |
|||
display: none; |
|||
} |
|||
|
|||
.tocsub .tocsubtitle { |
|||
display: none; |
|||
} |
|||
|
|||
.versionbox { |
|||
top: 4.5rem; |
|||
left: 1rem; /* same distance as main-column */ |
|||
z-index: 11000; |
|||
height: 2em; |
|||
font-size: 70%; |
|||
font-weight: lighter; |
|||
} |
|||
|
|||
|
|||
.maincolumn { |
|||
margin-left: 1em; |
|||
margin-top: 7rem; |
|||
margin-bottom: 0rem; |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
/* print styles : hide the navigation elements */ |
|||
@media print { |
|||
.tocset, |
|||
.navsettop, |
|||
.navsetbottom { display: none; } |
|||
.maincolumn { |
|||
width: auto; |
|||
margin-right: 13em; |
|||
margin-left: 0; |
|||
} |
|||
} |
@ -0,0 +1,249 @@ |
|||
|
|||
/* See the beginning of "scribble.css". */ |
|||
|
|||
/* Monospace: */ |
|||
.RktIn, .RktRdr, .RktPn, .RktMeta, |
|||
.RktMod, .RktKw, .RktVar, .RktSym, |
|||
.RktRes, .RktOut, .RktCmt, .RktVal, |
|||
.RktBlk { |
|||
font-family: monospace; |
|||
white-space: inherit; |
|||
} |
|||
|
|||
/* Serif: */ |
|||
.inheritedlbl { |
|||
font-family: serif; |
|||
} |
|||
|
|||
/* Sans-serif: */ |
|||
.RBackgroundLabelInner { |
|||
font-family: sans-serif; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Inherited methods, left margin */ |
|||
|
|||
.inherited { |
|||
width: 100%; |
|||
margin-top: 0.5em; |
|||
text-align: left; |
|||
background-color: #ECF5F5; |
|||
} |
|||
|
|||
.inherited td { |
|||
font-size: 82%; |
|||
padding-left: 1em; |
|||
text-indent: -0.8em; |
|||
padding-right: 0.2em; |
|||
} |
|||
|
|||
.inheritedlbl { |
|||
font-style: italic; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Racket text styles */ |
|||
|
|||
.RktIn { |
|||
color: #cc6633; |
|||
background-color: #eeeeee; |
|||
} |
|||
|
|||
.RktInBG { |
|||
background-color: #eeeeee; |
|||
} |
|||
|
|||
.RktRdr { |
|||
} |
|||
|
|||
.RktPn { |
|||
color: #843c24; |
|||
} |
|||
|
|||
.RktMeta { |
|||
color: black; |
|||
} |
|||
|
|||
.RktMod { |
|||
color: black; |
|||
} |
|||
|
|||
.RktOpt { |
|||
color: black; |
|||
} |
|||
|
|||
.RktKw { |
|||
color: black; |
|||
} |
|||
|
|||
.RktErr { |
|||
color: red; |
|||
font-style: italic; |
|||
} |
|||
|
|||
.RktVar { |
|||
color: #262680; |
|||
font-style: italic; |
|||
} |
|||
|
|||
.RktSym { |
|||
color: #262680; |
|||
} |
|||
|
|||
.RktSymDef { /* used with RktSym at def site */ |
|||
} |
|||
|
|||
.RktValLink { |
|||
text-decoration: none; |
|||
color: blue; |
|||
} |
|||
|
|||
.RktValDef { /* used with RktValLink at def site */ |
|||
} |
|||
|
|||
.RktModLink { |
|||
text-decoration: none; |
|||
color: blue; |
|||
} |
|||
|
|||
.RktStxLink { |
|||
text-decoration: none; |
|||
color: black; |
|||
} |
|||
|
|||
.RktStxDef { /* used with RktStxLink at def site */ |
|||
} |
|||
|
|||
.RktRes { |
|||
color: #0000af; |
|||
} |
|||
|
|||
.RktOut { |
|||
color: #960096; |
|||
} |
|||
|
|||
.RktCmt { |
|||
color: #c2741f; |
|||
} |
|||
|
|||
.RktVal { |
|||
color: #228b22; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Some inline styles */ |
|||
|
|||
.together { |
|||
width: 100%; |
|||
} |
|||
|
|||
.prototype, .argcontract, .RBoxed { |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.prototype td { |
|||
vertical-align: text-top; |
|||
} |
|||
|
|||
.RktBlk { |
|||
white-space: inherit; |
|||
text-align: left; |
|||
} |
|||
|
|||
.RktBlk tr { |
|||
white-space: inherit; |
|||
} |
|||
|
|||
.RktBlk td { |
|||
vertical-align: baseline; |
|||
white-space: inherit; |
|||
} |
|||
|
|||
.argcontract td { |
|||
vertical-align: text-top; |
|||
} |
|||
|
|||
.highlighted { |
|||
background-color: #ddddff; |
|||
} |
|||
|
|||
.defmodule { |
|||
width: 100%; |
|||
background-color: #F5F5DC; |
|||
} |
|||
|
|||
.specgrammar { |
|||
float: right; |
|||
} |
|||
|
|||
.RBibliography td { |
|||
vertical-align: text-top; |
|||
} |
|||
|
|||
.leftindent { |
|||
margin-left: 1em; |
|||
margin-right: 0em; |
|||
} |
|||
|
|||
.insetpara { |
|||
margin-left: 1em; |
|||
margin-right: 1em; |
|||
} |
|||
|
|||
.Rfilebox { |
|||
} |
|||
|
|||
.Rfiletitle { |
|||
text-align: right; |
|||
margin: 0em 0em 0em 0em; |
|||
} |
|||
|
|||
.Rfilename { |
|||
border-top: 1px solid #6C8585; |
|||
border-right: 1px solid #6C8585; |
|||
padding-left: 0.5em; |
|||
padding-right: 0.5em; |
|||
background-color: #ECF5F5; |
|||
} |
|||
|
|||
.Rfilecontent { |
|||
margin: 0em 0em 0em 0em; |
|||
} |
|||
|
|||
.RpackageSpec { |
|||
padding-right: 0.5em; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* For background labels */ |
|||
|
|||
.RBackgroundLabel { |
|||
float: right; |
|||
width: 0px; |
|||
height: 0px; |
|||
} |
|||
|
|||
.RBackgroundLabelInner { |
|||
position: relative; |
|||
width: 25em; |
|||
left: -25.5em; |
|||
top: 0px; |
|||
text-align: right; |
|||
color: white; |
|||
z-index: 0; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.RForeground { |
|||
position: relative; |
|||
left: 0px; |
|||
top: 0px; |
|||
z-index: 1; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* History */ |
|||
|
|||
.SHistory { |
|||
font-size: 82%; |
|||
} |
@ -0,0 +1,170 @@ |
|||
// Common functionality for PLT documentation pages
|
|||
|
|||
// Page Parameters ------------------------------------------------------------
|
|||
|
|||
var page_query_string = location.search.substring(1); |
|||
|
|||
var page_args = |
|||
((function(){ |
|||
if (!page_query_string) return []; |
|||
var args = page_query_string.split(/[&;]/); |
|||
for (var i=0; i<args.length; i++) { |
|||
var a = args[i]; |
|||
var p = a.indexOf('='); |
|||
if (p >= 0) args[i] = [a.substring(0,p), a.substring(p+1)]; |
|||
else args[i] = [a, false]; |
|||
} |
|||
return args; |
|||
})()); |
|||
|
|||
function GetPageArg(key, def) { |
|||
for (var i=0; i<page_args.length; i++) |
|||
if (page_args[i][0] == key) return decodeURIComponent(page_args[i][1]); |
|||
return def; |
|||
} |
|||
|
|||
function MergePageArgsIntoLink(a) { |
|||
if (page_args.length == 0 || |
|||
(!a.attributes["data-pltdoc"]) || (a.attributes["data-pltdoc"].value == "")) |
|||
return; |
|||
a.href = MergePageArgsIntoUrl(a.href); |
|||
} |
|||
|
|||
function MergePageArgsIntoUrl(href) { |
|||
var mtch = href.match(/^([^?#]*)(?:\?([^#]*))?(#.*)?$/); |
|||
if (mtch == undefined) { // I think this never happens
|
|||
return "?" + page_query_string; |
|||
} |
|||
if (!mtch[2]) { |
|||
return mtch[1] + "?" + page_query_string + (mtch[3] || ""); |
|||
} |
|||
// need to merge here, precedence to arguments that exist in `a'
|
|||
var i, j; |
|||
var prefix = mtch[1], str = mtch[2] || "", suffix = mtch[3] || ""; |
|||
var args = str.split(/[&;]/); |
|||
for (i=0; i<args.length; i++) { |
|||
j = args[i].indexOf('='); |
|||
if (j) args[i] = args[i].substring(0,j); |
|||
} |
|||
var additions = ""; |
|||
for (i=0; i<page_args.length; i++) { |
|||
var exists = false; |
|||
for (j=0; j<args.length; j++) |
|||
if (args[j] == page_args[i][0]) { exists = true; break; } |
|||
if (!exists) str += "&" + page_args[i][0] + "=" + page_args[i][1]; |
|||
} |
|||
return prefix + "?" + str + suffix; |
|||
} |
|||
|
|||
// Cookies --------------------------------------------------------------------
|
|||
|
|||
// Actually, try localStorage (a la HTML 5), first.
|
|||
|
|||
function GetCookie(key, def) { |
|||
try { |
|||
var v = localStorage[key]; |
|||
if (!v) v = def; |
|||
return v; |
|||
} catch (e) { |
|||
var i, cookiestrs; |
|||
try { |
|||
if (document.cookie.length <= 0) return def; |
|||
cookiestrs = document.cookie.split(/; */); |
|||
} catch (e) { return def; } |
|||
for (i = 0; i < cookiestrs.length; i++) { |
|||
var cur = cookiestrs[i]; |
|||
var eql = cur.indexOf('='); |
|||
if (eql >= 0 && cur.substring(0,eql) == key) |
|||
return unescape(cur.substring(eql+1)); |
|||
} |
|||
return def; |
|||
} |
|||
} |
|||
|
|||
function SetCookie(key, val) { |
|||
try { |
|||
localStorage[key] = val; |
|||
} catch(e) { |
|||
var d = new Date(); |
|||
d.setTime(d.getTime()+(365*24*60*60*1000)); |
|||
try { |
|||
document.cookie = |
|||
key + "=" + escape(val) + "; expires="+ d.toGMTString() + "; path=/"; |
|||
} catch (e) {} |
|||
} |
|||
} |
|||
|
|||
// note that this always stores a directory name, ending with a "/"
|
|||
function SetPLTRoot(ver, relative) { |
|||
var root = location.protocol + "//" + location.host |
|||
+ NormalizePath(location.pathname.replace(/[^\/]*$/, relative)); |
|||
SetCookie("PLT_Root."+ver, root); |
|||
} |
|||
|
|||
// adding index.html works because of the above
|
|||
function GotoPLTRoot(ver, relative) { |
|||
var u = GetCookie("PLT_Root."+ver, null); |
|||
if (u == null) return true; // no cookie: use plain up link
|
|||
// the relative path is optional, default goes to the toplevel start page
|
|||
if (!relative) relative = "index.html"; |
|||
location = u + relative; |
|||
return false; |
|||
} |
|||
|
|||
// Utilities ------------------------------------------------------------------
|
|||
|
|||
var normalize_rxs = [/\/\/+/g, /\/\.(\/|$)/, /\/[^\/]*\/\.\.(\/|$)/]; |
|||
function NormalizePath(path) { |
|||
var tmp, i; |
|||
for (i = 0; i < normalize_rxs.length; i++) |
|||
while ((tmp = path.replace(normalize_rxs[i], "/")) != path) path = tmp; |
|||
return path; |
|||
} |
|||
|
|||
// `noscript' is problematic in some browsers (always renders as a
|
|||
// block), use this hack instead (does not always work!)
|
|||
// document.write("<style>mynoscript { display:none; }</style>");
|
|||
|
|||
// Interactions ---------------------------------------------------------------
|
|||
|
|||
function DoSearchKey(event, field, ver, top_path) { |
|||
var val = field.value; |
|||
if (event && event.keyCode == 13) { |
|||
var u = GetCookie("PLT_Root."+ver, null); |
|||
if (u == null) u = top_path; // default: go to the top path
|
|||
u += "search/index.html?q=" + encodeURIComponent(val); |
|||
u = MergePageArgsIntoUrl(u); |
|||
location = u; |
|||
return false; |
|||
} |
|||
return true; |
|||
} |
|||
|
|||
function TocviewToggle(glyph, id) { |
|||
var s = document.getElementById(id).style; |
|||
var expand = s.display == "none"; |
|||
s.display = expand ? "block" : "none"; |
|||
glyph.innerHTML = expand ? "▼" : "►"; |
|||
} |
|||
|
|||
// Page Init ------------------------------------------------------------------
|
|||
|
|||
// Note: could make a function that inspects and uses window.onload to chain to
|
|||
// a previous one, but this file needs to be required first anyway, since it
|
|||
// contains utilities for all other files.
|
|||
var on_load_funcs = []; |
|||
function AddOnLoad(fun) { on_load_funcs.push(fun); } |
|||
window.onload = function() { |
|||
for (var i=0; i<on_load_funcs.length; i++) on_load_funcs[i](); |
|||
}; |
|||
|
|||
AddOnLoad(function(){ |
|||
var links = document.getElementsByTagName("a"); |
|||
for (var i=0; i<links.length; i++) MergePageArgsIntoLink(links[i]); |
|||
var label = GetPageArg("ctxtname",false); |
|||
if (!label) return; |
|||
var indicator = document.getElementById("contextindicator"); |
|||
if (!indicator) return; |
|||
indicator.innerHTML = label; |
|||
indicator.style.display = "block"; |
|||
}); |
@ -0,0 +1,485 @@ |
|||
|
|||
/* This file is used by default by all Scribble documents. |
|||
See also "manual.css", which is added by default by the |
|||
`scribble/manual` language. */ |
|||
|
|||
/* CSS seems backward: List all the classes for which we want a |
|||
particular font, so that the font can be changed in one place. (It |
|||
would be nicer to reference a font definition from all the places |
|||
that we want it.) |
|||
|
|||
As you read the rest of the file, remember to double-check here to |
|||
see if any font is set. */ |
|||
|
|||
/* Monospace: */ |
|||
.maincolumn, .refpara, .refelem, .tocset, .stt, .hspace, .refparaleft, .refelemleft { |
|||
font-family: monospace; |
|||
} |
|||
|
|||
/* Serif: */ |
|||
.main, .refcontent, .tocview, .tocsub, .sroman, i { |
|||
font-family: serif; |
|||
} |
|||
|
|||
/* Sans-serif: */ |
|||
.version, .versionNoNav, .ssansserif { |
|||
font-family: sans-serif; |
|||
} |
|||
.ssansserif { |
|||
font-size: 80%; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
|
|||
p, .SIntrapara { |
|||
display: block; |
|||
margin: 1em 0; |
|||
} |
|||
|
|||
h2 { /* per-page main title */ |
|||
margin-top: 0; |
|||
} |
|||
|
|||
h3, h4, h5, h6, h7, h8 { |
|||
margin-top: 1.75em; |
|||
margin-bottom: 0.5em; |
|||
} |
|||
|
|||
.SSubSubSubSection { |
|||
font-weight: bold; |
|||
font-size: 0.83em; /* should match h5; from HTML 4 reference */ |
|||
} |
|||
|
|||
/* Needed for browsers like Opera, and eventually for HTML 4 conformance. |
|||
This means that multiple paragraphs in a table element do not have a space |
|||
between them. */ |
|||
table p { |
|||
margin-top: 0; |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Main */ |
|||
|
|||
body { |
|||
color: black; |
|||
background-color: #ffffff; |
|||
} |
|||
|
|||
table td { |
|||
padding-left: 0; |
|||
padding-right: 0; |
|||
} |
|||
|
|||
.maincolumn { |
|||
width: 43em; |
|||
margin-right: -40em; |
|||
margin-left: 15em; |
|||
} |
|||
|
|||
.main { |
|||
text-align: left; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Navigation */ |
|||
|
|||
.navsettop, .navsetbottom { |
|||
background-color: #f0f0e0; |
|||
padding: 0.25em 0 0.25em 0; |
|||
} |
|||
|
|||
.navsettop { |
|||
margin-bottom: 1.5em; |
|||
border-bottom: 2px solid #e0e0c0; |
|||
} |
|||
|
|||
.navsetbottom { |
|||
margin-top: 2em; |
|||
border-top: 2px solid #e0e0c0; |
|||
} |
|||
|
|||
.navleft { |
|||
margin-left: 1ex; |
|||
position: relative; |
|||
float: left; |
|||
white-space: nowrap; |
|||
} |
|||
.navright { |
|||
margin-right: 1ex; |
|||
position: relative; |
|||
float: right; |
|||
white-space: nowrap; |
|||
} |
|||
.nonavigation { |
|||
color: #e0e0e0; |
|||
} |
|||
|
|||
.searchform { |
|||
display: inline; |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
.nosearchform { |
|||
display: none; |
|||
} |
|||
|
|||
.searchbox { |
|||
width: 16em; |
|||
margin: 0px; |
|||
padding: 0px; |
|||
background-color: #eee; |
|||
border: 1px solid #ddd; |
|||
text-align: center; |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
#contextindicator { |
|||
position: fixed; |
|||
background-color: #c6f; |
|||
color: #000; |
|||
font-family: monospace; |
|||
font-weight: bold; |
|||
padding: 2px 10px; |
|||
display: none; |
|||
right: 0; |
|||
bottom: 0; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Version */ |
|||
|
|||
.versionbox { |
|||
position: relative; |
|||
float: right; |
|||
left: 2em; |
|||
height: 0em; |
|||
width: 13em; |
|||
margin: 0em -13em 0em 0em; |
|||
} |
|||
.version { |
|||
font-size: small; |
|||
} |
|||
.versionNoNav { |
|||
font-size: xx-small; /* avoid overlap with author */ |
|||
} |
|||
|
|||
.version:before, .versionNoNav:before { |
|||
content: "Version "; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Margin notes */ |
|||
|
|||
.refpara, .refelem { |
|||
position: relative; |
|||
float: right; |
|||
left: 2em; |
|||
height: 0em; |
|||
width: 13em; |
|||
margin: 0em -13em 0em 0em; |
|||
} |
|||
|
|||
.refpara, .refparaleft { |
|||
top: -1em; |
|||
} |
|||
|
|||
.refcolumn { |
|||
background-color: #F5F5DC; |
|||
display: block; |
|||
position: relative; |
|||
width: 13em; |
|||
font-size: 85%; |
|||
border: 0.5em solid #F5F5DC; |
|||
margin: 0 0 0 0; |
|||
white-space: normal; /* in case margin note is inside code sample */ |
|||
} |
|||
|
|||
.refcontent { |
|||
margin: 0 0 0 0; |
|||
} |
|||
|
|||
.refcontent p { |
|||
margin-top: 0; |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.refparaleft, .refelemleft { |
|||
position: relative; |
|||
float: left; |
|||
right: 2em; |
|||
height: 0em; |
|||
width: 13em; |
|||
margin: 0em 0em 0em -13em; |
|||
} |
|||
|
|||
.refcolumnleft { |
|||
background-color: #F5F5DC; |
|||
display: block; |
|||
position: relative; |
|||
width: 13em; |
|||
font-size: 85%; |
|||
border: 0.5em solid #F5F5DC; |
|||
margin: 0 0 0 0; |
|||
} |
|||
|
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Table of contents, inline */ |
|||
|
|||
.toclink { |
|||
text-decoration: none; |
|||
color: blue; |
|||
font-size: 85%; |
|||
} |
|||
|
|||
.toptoclink { |
|||
text-decoration: none; |
|||
color: blue; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Table of contents, left margin */ |
|||
|
|||
.tocset { |
|||
position: relative; |
|||
float: left; |
|||
width: 12.5em; |
|||
margin-right: 2em; |
|||
} |
|||
.tocset td { |
|||
vertical-align: text-top; |
|||
} |
|||
|
|||
.tocview { |
|||
text-align: left; |
|||
background-color: #f0f0e0; |
|||
} |
|||
|
|||
.tocsub { |
|||
text-align: left; |
|||
margin-top: 0.5em; |
|||
background-color: #f0f0e0; |
|||
} |
|||
|
|||
.tocviewlist, .tocsublist { |
|||
margin-left: 0.2em; |
|||
margin-right: 0.2em; |
|||
padding-top: 0.2em; |
|||
padding-bottom: 0.2em; |
|||
} |
|||
.tocviewlist table { |
|||
font-size: 82%; |
|||
} |
|||
|
|||
.tocviewlisttopspace { |
|||
margin-bottom: 1em; |
|||
} |
|||
|
|||
.tocviewsublist, .tocviewsublistonly, .tocviewsublisttop, .tocviewsublistbottom { |
|||
margin-left: 0.4em; |
|||
border-left: 1px solid #bbf; |
|||
padding-left: 0.8em; |
|||
} |
|||
.tocviewsublist { |
|||
margin-bottom: 1em; |
|||
} |
|||
.tocviewsublist table, |
|||
.tocviewsublistonly table, |
|||
.tocviewsublisttop table, |
|||
.tocviewsublistbottom table { |
|||
font-size: 75%; |
|||
} |
|||
|
|||
.tocviewtitle * { |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.tocviewlink { |
|||
text-decoration: none; |
|||
color: blue; |
|||
} |
|||
|
|||
.tocviewselflink { |
|||
text-decoration: underline; |
|||
color: blue; |
|||
} |
|||
|
|||
.tocviewtoggle { |
|||
text-decoration: none; |
|||
color: blue; |
|||
font-size: 75%; /* looks better, and avoids bounce when toggling sub-sections due to font alignments */ |
|||
} |
|||
|
|||
.tocsublist td { |
|||
padding-left: 1em; |
|||
text-indent: -1em; |
|||
} |
|||
|
|||
.tocsublinknumber { |
|||
font-size: 82%; |
|||
} |
|||
|
|||
.tocsublink { |
|||
font-size: 82%; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
.tocsubseclink { |
|||
font-size: 82%; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
.tocsubnonseclink { |
|||
font-size: 82%; |
|||
text-decoration: none; |
|||
padding-left: 0.5em; |
|||
} |
|||
|
|||
.tocsubtitle { |
|||
font-size: 82%; |
|||
font-style: italic; |
|||
margin: 0.2em; |
|||
} |
|||
|
|||
/* ---------------------------------------- */ |
|||
/* Some inline styles */ |
|||
|
|||
.indexlink { |
|||
text-decoration: none; |
|||
} |
|||
|
|||
.nobreak { |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
pre { margin-left: 2em; } |
|||
blockquote { margin-left: 2em; } |
|||
|
|||
ol { list-style-type: decimal; } |
|||
ol ol { list-style-type: lower-alpha; } |
|||
ol ol ol { list-style-type: lower-roman; } |
|||
ol ol ol ol { list-style-type: upper-alpha; } |
|||
|
|||
.SCodeFlow { |
|||
display: block; |
|||
margin-left: 1em; |
|||
margin-bottom: 0em; |
|||
margin-right: 1em; |
|||
margin-top: 0em; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.SVInsetFlow { |
|||
display: block; |
|||
margin-left: 0em; |
|||
margin-bottom: 0em; |
|||
margin-right: 0em; |
|||
margin-top: 0em; |
|||
} |
|||
|
|||
.SubFlow { |
|||
display: block; |
|||
margin: 0em; |
|||
} |
|||
|
|||
.boxed { |
|||
width: 100%; |
|||
background-color: #E8E8FF; |
|||
} |
|||
|
|||
.hspace { |
|||
} |
|||
|
|||
.slant { |
|||
font-style: oblique; |
|||
} |
|||
|
|||
.badlink { |
|||
text-decoration: underline; |
|||
color: red; |
|||
} |
|||
|
|||
.plainlink { |
|||
text-decoration: none; |
|||
color: blue; |
|||
} |
|||
|
|||
.techoutside { text-decoration: underline; color: #b0b0b0; } |
|||
.techoutside:hover { text-decoration: underline; color: blue; } |
|||
|
|||
/* .techinside:hover doesn't work with FF, .techinside:hover> |
|||
.techinside doesn't work with IE, so use both (and IE doesn't |
|||
work with inherit in the second one, so use blue directly) */ |
|||
.techinside { color: black; } |
|||
.techinside:hover { color: blue; } |
|||
.techoutside:hover>.techinside { color: inherit; } |
|||
|
|||
.SCentered { |
|||
text-align: center; |
|||
} |
|||
|
|||
.imageleft { |
|||
float: left; |
|||
margin-right: 0.3em; |
|||
} |
|||
|
|||
.Smaller { |
|||
font-size: 82%; |
|||
} |
|||
|
|||
.Larger { |
|||
font-size: 122%; |
|||
} |
|||
|
|||
/* A hack, inserted to break some Scheme ids: */ |
|||
.mywbr { |
|||
display: inline-block; |
|||
height: 0; |
|||
width: 0; |
|||
font-size: 1px; |
|||
} |
|||
|
|||
.compact li p { |
|||
margin: 0em; |
|||
padding: 0em; |
|||
} |
|||
|
|||
.noborder img { |
|||
border: 0; |
|||
} |
|||
|
|||
.SAuthorListBox { |
|||
position: relative; |
|||
float: right; |
|||
left: 2em; |
|||
top: -2.5em; |
|||
height: 0em; |
|||
width: 13em; |
|||
margin: 0em -13em 0em 0em; |
|||
} |
|||
.SAuthorList { |
|||
font-size: 82%; |
|||
} |
|||
.SAuthorList:before { |
|||
content: "by "; |
|||
} |
|||
.author { |
|||
display: inline; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
/* print styles : hide the navigation elements */ |
|||
@media print { |
|||
.tocset, |
|||
.navsettop, |
|||
.navsetbottom { display: none; } |
|||
.maincolumn { |
|||
width: auto; |
|||
margin-right: 13em; |
|||
margin-left: 0; |
|||
} |
|||
} |
@ -0,0 +1,11 @@ |
|||
#lang info |
|||
(define collection "bolt") |
|||
(define deps '("base" |
|||
"rackunit-lib" |
|||
"remote-shell")) |
|||
|
|||
(define build-deps '("scribble-lib" "racket-doc")) |
|||
(define scribblings '(("scribblings/bolt.scrbl" ()))) |
|||
(define pkg-desc "Description Here") |
|||
(define version "0.0") |
|||
(define pkg-authors '(wes)) |
@ -0,0 +1,4 @@ |
|||
#lang racket/base |
|||
|
|||
(require "bolt.rkt") |
|||
(provide (all-from-out "bolt.rkt")) |
@ -0,0 +1,10 @@ |
|||
#lang scribble/manual |
|||
@require[@for-label[bolt |
|||
racket/base]] |
|||
|
|||
@title{bolt} |
|||
@author{wes} |
|||
|
|||
@defmodule[bolt] |
|||
|
|||
Package Description Here |
@ -0,0 +1,31 @@ |
|||
#! /usr/bin/env racket |
|||
#lang racket |
|||
|
|||
(require bolt) |
|||
|
|||
(define linode |
|||
(remote |
|||
#:host "linode" |
|||
#:user "wes" |
|||
#:key "/home/wes/.ssh/id_rsa.key")) |
|||
|
|||
(define (test) |
|||
(with-cwd "gforth" |
|||
(exec "sudo whoami") |
|||
(with-cwd "src" |
|||
(pwd) |
|||
(ls) |
|||
(with-cwd "gforth-0.7.3" |
|||
(ls)))) |
|||
(pwd) |
|||
(exec "cat /etc/passwd") |
|||
(become "http" (ls))) |
|||
|
|||
; This is based on an entry in ~/.ssh/config |
|||
(with-host linode |
|||
(become "root" |
|||
(become "http" |
|||
(pwd) |
|||
(exec "ls /etc")) |
|||
(pwd)) |
|||
(pwd)) |
Loading…
Reference in new issue