gbye
parent
38951e5090
commit
188af54ba0
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -1,324 +0,0 @@
|
|||||||
/* 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;
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
/* 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";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,770 +0,0 @@
|
|||||||
|
|
||||||
/* 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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,249 +0,0 @@
|
|||||||
|
|
||||||
/* 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%;
|
|
||||||
}
|
|
@ -1,170 +0,0 @@
|
|||||||
// 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";
|
|
||||||
});
|
|
@ -1,485 +0,0 @@
|
|||||||
|
|
||||||
/* 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;
|
|
||||||
}
|
|
||||||
}
|
|
Binary file not shown.
@ -1,75 +0,0 @@
|
|||||||
#lang pitfall/parse
|
|
||||||
|
|
||||||
null
|
|
||||||
true
|
|
||||||
false
|
|
||||||
1
|
|
||||||
-2
|
|
||||||
+100
|
|
||||||
612
|
|
||||||
0.05
|
|
||||||
.25
|
|
||||||
-3.14159
|
|
||||||
300.9001
|
|
||||||
/Type
|
|
||||||
/ThisIsName37
|
|
||||||
/Lime#20Green
|
|
||||||
/SSCN_SomeSecondClassName
|
|
||||||
/Adobe#20Green
|
|
||||||
/The_Key_of_F#23_Minor
|
|
||||||
(Testing)
|
|
||||||
(A\053B)
|
|
||||||
|
|
||||||
%(D:19990209153925-08'00')
|
|
||||||
<1C2D3F>
|
|
||||||
<1C 2D 3F>
|
|
||||||
[0 0 612 792]
|
|
||||||
[(T) -20.5 (H) 4 (E)]
|
|
||||||
[[1 2 3][4 5 6]]
|
|
||||||
<<
|
|
||||||
/Type /Example
|
|
||||||
/Subtype /DictionaryExample
|
|
||||||
/Version 0.01
|
|
||||||
/IntegerItem 12
|
|
||||||
/StringItem (a string)
|
|
||||||
/Subdictionary <<
|
|
||||||
/Item1 0.4
|
|
||||||
/Item2 true
|
|
||||||
/LastItem (not!)
|
|
||||||
/VeryLastItem (OK) >> >>
|
|
||||||
( This string contains \245two octal characters\307 . )
|
|
||||||
(Strings may contain balanced parentheses ( ) and special \ncharacters (*!&}^% and so on).)
|
|
||||||
% a more human-readable dictionary
|
|
||||||
<<
|
|
||||||
/Type /Page
|
|
||||||
/Author (Leonard Rosenthol)
|
|
||||||
/Resources 42
|
|
||||||
>>
|
|
||||||
% stripped
|
|
||||||
<</Length 3112/Subtype/XML/Type/Metadata>>
|
|
||||||
|
|
||||||
<<
|
|
||||||
/Type /Xobject /Subtype /Image /Filter /FlateDecode /Length 4 /Height 32 /Width 32
|
|
||||||
>>
|
|
||||||
stream
|
|
||||||
abcd
|
|
||||||
endstream
|
|
||||||
|
|
||||||
12 0 obj
|
|
||||||
( Brillig )
|
|
||||||
endobj
|
|
||||||
|
|
||||||
8 0 obj
|
|
||||||
63
|
|
||||||
endobj
|
|
||||||
|
|
||||||
7 0 obj
|
|
||||||
<< /Length 8 0 R >>
|
|
||||||
stream
|
|
||||||
BT
|
|
||||||
/F1 12 Tf
|
|
||||||
72 712 Td
|
|
||||||
(A stream with an indirect length) Tj
|
|
||||||
ET
|
|
||||||
endstream
|
|
||||||
endobj
|
|
@ -1,645 +0,0 @@
|
|||||||
#lang at-exp br
|
|
||||||
#|
|
|
||||||
# -----------------------------------------------------------
|
|
||||||
# Copyright 2002, 2010, 2015 Adobe Systems Incorporated.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or
|
|
||||||
# without modification, are permitted provided that the
|
|
||||||
# following conditions are met:
|
|
||||||
#
|
|
||||||
# Redistributions of source code must retain the above
|
|
||||||
# copyright notice, this list of conditions and the following
|
|
||||||
# disclaimer.
|
|
||||||
#
|
|
||||||
# Redistributions in binary form must reproduce the above
|
|
||||||
# copyright notice, this list of conditions and the following
|
|
||||||
# disclaimer in the documentation and/or other materials
|
|
||||||
# provided with the distribution.
|
|
||||||
#
|
|
||||||
# Neither the name of Adobe Systems Incorporated nor the names
|
|
||||||
# of its contributors may be used to endorse or promote
|
|
||||||
# products derived from this software without specific prior
|
|
||||||
# written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
||||||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
||||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
||||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
# -----------------------------------------------------------
|
|
||||||
# Name: Adobe Glyph List
|
|
||||||
# Table version: 2.0
|
|
||||||
# Date: September 20, 2002
|
|
||||||
# URL: https://github.com/adobe-type-tools/agl-aglfn
|
|
||||||
#
|
|
||||||
# Format: two semicolon-delimited fields:
|
|
||||||
# (1) glyph name--upper/lowercase letters and digits
|
|
||||||
# (2) Unicode scalar value--four uppercase hexadecimal digits
|
|
||||||
|
|
||||||
|#
|
|
||||||
|
|
||||||
(define raw-list
|
|
||||||
@string-append{
|
|
||||||
0041;A;LATIN CAPITAL LETTER A
|
|
||||||
00C6;AE;LATIN CAPITAL LETTER AE
|
|
||||||
01FC;AEacute;LATIN CAPITAL LETTER AE WITH ACUTE
|
|
||||||
00C1;Aacute;LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0102;Abreve;LATIN CAPITAL LETTER A WITH BREVE
|
|
||||||
00C2;Acircumflex;LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
00C4;Adieresis;LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
00C0;Agrave;LATIN CAPITAL LETTER A WITH GRAVE
|
|
||||||
0391;Alpha;GREEK CAPITAL LETTER ALPHA
|
|
||||||
0386;Alphatonos;GREEK CAPITAL LETTER ALPHA WITH TONOS
|
|
||||||
0100;Amacron;LATIN CAPITAL LETTER A WITH MACRON
|
|
||||||
0104;Aogonek;LATIN CAPITAL LETTER A WITH OGONEK
|
|
||||||
00C5;Aring;LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
01FA;Aringacute;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
|
|
||||||
00C3;Atilde;LATIN CAPITAL LETTER A WITH TILDE
|
|
||||||
0042;B;LATIN CAPITAL LETTER B
|
|
||||||
0392;Beta;GREEK CAPITAL LETTER BETA
|
|
||||||
0043;C;LATIN CAPITAL LETTER C
|
|
||||||
0106;Cacute;LATIN CAPITAL LETTER C WITH ACUTE
|
|
||||||
010C;Ccaron;LATIN CAPITAL LETTER C WITH CARON
|
|
||||||
00C7;Ccedilla;LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0108;Ccircumflex;LATIN CAPITAL LETTER C WITH CIRCUMFLEX
|
|
||||||
010A;Cdotaccent;LATIN CAPITAL LETTER C WITH DOT ABOVE
|
|
||||||
03A7;Chi;GREEK CAPITAL LETTER CHI
|
|
||||||
0044;D;LATIN CAPITAL LETTER D
|
|
||||||
010E;Dcaron;LATIN CAPITAL LETTER D WITH CARON
|
|
||||||
0110;Dcroat;LATIN CAPITAL LETTER D WITH STROKE
|
|
||||||
2206;Delta;INCREMENT
|
|
||||||
0045;E;LATIN CAPITAL LETTER E
|
|
||||||
00C9;Eacute;LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0114;Ebreve;LATIN CAPITAL LETTER E WITH BREVE
|
|
||||||
011A;Ecaron;LATIN CAPITAL LETTER E WITH CARON
|
|
||||||
00CA;Ecircumflex;LATIN CAPITAL LETTER E WITH CIRCUMFLEX
|
|
||||||
00CB;Edieresis;LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0116;Edotaccent;LATIN CAPITAL LETTER E WITH DOT ABOVE
|
|
||||||
00C8;Egrave;LATIN CAPITAL LETTER E WITH GRAVE
|
|
||||||
0112;Emacron;LATIN CAPITAL LETTER E WITH MACRON
|
|
||||||
014A;Eng;LATIN CAPITAL LETTER ENG
|
|
||||||
0118;Eogonek;LATIN CAPITAL LETTER E WITH OGONEK
|
|
||||||
0395;Epsilon;GREEK CAPITAL LETTER EPSILON
|
|
||||||
0388;Epsilontonos;GREEK CAPITAL LETTER EPSILON WITH TONOS
|
|
||||||
0397;Eta;GREEK CAPITAL LETTER ETA
|
|
||||||
0389;Etatonos;GREEK CAPITAL LETTER ETA WITH TONOS
|
|
||||||
00D0;Eth;LATIN CAPITAL LETTER ETH
|
|
||||||
20AC;Euro;EURO SIGN
|
|
||||||
0046;F;LATIN CAPITAL LETTER F
|
|
||||||
0047;G;LATIN CAPITAL LETTER G
|
|
||||||
0393;Gamma;GREEK CAPITAL LETTER GAMMA
|
|
||||||
011E;Gbreve;LATIN CAPITAL LETTER G WITH BREVE
|
|
||||||
01E6;Gcaron;LATIN CAPITAL LETTER G WITH CARON
|
|
||||||
011C;Gcircumflex;LATIN CAPITAL LETTER G WITH CIRCUMFLEX
|
|
||||||
0120;Gdotaccent;LATIN CAPITAL LETTER G WITH DOT ABOVE
|
|
||||||
0048;H;LATIN CAPITAL LETTER H
|
|
||||||
25CF;H18533;BLACK CIRCLE
|
|
||||||
25AA;H18543;BLACK SMALL SQUARE
|
|
||||||
25AB;H18551;WHITE SMALL SQUARE
|
|
||||||
25A1;H22073;WHITE SQUARE
|
|
||||||
0126;Hbar;LATIN CAPITAL LETTER H WITH STROKE
|
|
||||||
0124;Hcircumflex;LATIN CAPITAL LETTER H WITH CIRCUMFLEX
|
|
||||||
0049;I;LATIN CAPITAL LETTER I
|
|
||||||
0132;IJ;LATIN CAPITAL LIGATURE IJ
|
|
||||||
00CD;Iacute;LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
012C;Ibreve;LATIN CAPITAL LETTER I WITH BREVE
|
|
||||||
00CE;Icircumflex;LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
00CF;Idieresis;LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0130;Idotaccent;LATIN CAPITAL LETTER I WITH DOT ABOVE
|
|
||||||
2111;Ifraktur;BLACK-LETTER CAPITAL I
|
|
||||||
00CC;Igrave;LATIN CAPITAL LETTER I WITH GRAVE
|
|
||||||
012A;Imacron;LATIN CAPITAL LETTER I WITH MACRON
|
|
||||||
012E;Iogonek;LATIN CAPITAL LETTER I WITH OGONEK
|
|
||||||
0399;Iota;GREEK CAPITAL LETTER IOTA
|
|
||||||
03AA;Iotadieresis;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
|
|
||||||
038A;Iotatonos;GREEK CAPITAL LETTER IOTA WITH TONOS
|
|
||||||
0128;Itilde;LATIN CAPITAL LETTER I WITH TILDE
|
|
||||||
004A;J;LATIN CAPITAL LETTER J
|
|
||||||
0134;Jcircumflex;LATIN CAPITAL LETTER J WITH CIRCUMFLEX
|
|
||||||
004B;K;LATIN CAPITAL LETTER K
|
|
||||||
039A;Kappa;GREEK CAPITAL LETTER KAPPA
|
|
||||||
004C;L;LATIN CAPITAL LETTER L
|
|
||||||
0139;Lacute;LATIN CAPITAL LETTER L WITH ACUTE
|
|
||||||
039B;Lambda;GREEK CAPITAL LETTER LAMDA
|
|
||||||
013D;Lcaron;LATIN CAPITAL LETTER L WITH CARON
|
|
||||||
013F;Ldot;LATIN CAPITAL LETTER L WITH MIDDLE DOT
|
|
||||||
0141;Lslash;LATIN CAPITAL LETTER L WITH STROKE
|
|
||||||
004D;M;LATIN CAPITAL LETTER M
|
|
||||||
039C;Mu;GREEK CAPITAL LETTER MU
|
|
||||||
004E;N;LATIN CAPITAL LETTER N
|
|
||||||
0143;Nacute;LATIN CAPITAL LETTER N WITH ACUTE
|
|
||||||
0147;Ncaron;LATIN CAPITAL LETTER N WITH CARON
|
|
||||||
00D1;Ntilde;LATIN CAPITAL LETTER N WITH TILDE
|
|
||||||
039D;Nu;GREEK CAPITAL LETTER NU
|
|
||||||
004F;O;LATIN CAPITAL LETTER O
|
|
||||||
0152;OE;LATIN CAPITAL LIGATURE OE
|
|
||||||
00D3;Oacute;LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
014E;Obreve;LATIN CAPITAL LETTER O WITH BREVE
|
|
||||||
00D4;Ocircumflex;LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
00D6;Odieresis;LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
00D2;Ograve;LATIN CAPITAL LETTER O WITH GRAVE
|
|
||||||
01A0;Ohorn;LATIN CAPITAL LETTER O WITH HORN
|
|
||||||
0150;Ohungarumlaut;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
|
|
||||||
014C;Omacron;LATIN CAPITAL LETTER O WITH MACRON
|
|
||||||
2126;Omega;OHM SIGN
|
|
||||||
038F;Omegatonos;GREEK CAPITAL LETTER OMEGA WITH TONOS
|
|
||||||
039F;Omicron;GREEK CAPITAL LETTER OMICRON
|
|
||||||
038C;Omicrontonos;GREEK CAPITAL LETTER OMICRON WITH TONOS
|
|
||||||
00D8;Oslash;LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
01FE;Oslashacute;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
|
|
||||||
00D5;Otilde;LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0050;P;LATIN CAPITAL LETTER P
|
|
||||||
03A6;Phi;GREEK CAPITAL LETTER PHI
|
|
||||||
03A0;Pi;GREEK CAPITAL LETTER PI
|
|
||||||
03A8;Psi;GREEK CAPITAL LETTER PSI
|
|
||||||
0051;Q;LATIN CAPITAL LETTER Q
|
|
||||||
0052;R;LATIN CAPITAL LETTER R
|
|
||||||
0154;Racute;LATIN CAPITAL LETTER R WITH ACUTE
|
|
||||||
0158;Rcaron;LATIN CAPITAL LETTER R WITH CARON
|
|
||||||
211C;Rfraktur;BLACK-LETTER CAPITAL R
|
|
||||||
03A1;Rho;GREEK CAPITAL LETTER RHO
|
|
||||||
0053;S;LATIN CAPITAL LETTER S
|
|
||||||
250C;SF010000;BOX DRAWINGS LIGHT DOWN AND RIGHT
|
|
||||||
2514;SF020000;BOX DRAWINGS LIGHT UP AND RIGHT
|
|
||||||
2510;SF030000;BOX DRAWINGS LIGHT DOWN AND LEFT
|
|
||||||
2518;SF040000;BOX DRAWINGS LIGHT UP AND LEFT
|
|
||||||
253C;SF050000;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
|
|
||||||
252C;SF060000;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
|
|
||||||
2534;SF070000;BOX DRAWINGS LIGHT UP AND HORIZONTAL
|
|
||||||
251C;SF080000;BOX DRAWINGS LIGHT VERTICAL AND RIGHT
|
|
||||||
2524;SF090000;BOX DRAWINGS LIGHT VERTICAL AND LEFT
|
|
||||||
2500;SF100000;BOX DRAWINGS LIGHT HORIZONTAL
|
|
||||||
2502;SF110000;BOX DRAWINGS LIGHT VERTICAL
|
|
||||||
2561;SF190000;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
|
|
||||||
2562;SF200000;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
|
|
||||||
2556;SF210000;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
|
|
||||||
2555;SF220000;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
|
|
||||||
2563;SF230000;BOX DRAWINGS DOUBLE VERTICAL AND LEFT
|
|
||||||
2551;SF240000;BOX DRAWINGS DOUBLE VERTICAL
|
|
||||||
2557;SF250000;BOX DRAWINGS DOUBLE DOWN AND LEFT
|
|
||||||
255D;SF260000;BOX DRAWINGS DOUBLE UP AND LEFT
|
|
||||||
255C;SF270000;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
|
|
||||||
255B;SF280000;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
|
|
||||||
255E;SF360000;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
|
|
||||||
255F;SF370000;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
|
|
||||||
255A;SF380000;BOX DRAWINGS DOUBLE UP AND RIGHT
|
|
||||||
2554;SF390000;BOX DRAWINGS DOUBLE DOWN AND RIGHT
|
|
||||||
2569;SF400000;BOX DRAWINGS DOUBLE UP AND HORIZONTAL
|
|
||||||
2566;SF410000;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
|
|
||||||
2560;SF420000;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
|
|
||||||
2550;SF430000;BOX DRAWINGS DOUBLE HORIZONTAL
|
|
||||||
256C;SF440000;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
|
|
||||||
2567;SF450000;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
|
|
||||||
2568;SF460000;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
|
|
||||||
2564;SF470000;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
|
|
||||||
2565;SF480000;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
|
|
||||||
2559;SF490000;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
|
|
||||||
2558;SF500000;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
|
|
||||||
2552;SF510000;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
|
|
||||||
2553;SF520000;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
|
|
||||||
256B;SF530000;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
|
|
||||||
256A;SF540000;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
|
|
||||||
015A;Sacute;LATIN CAPITAL LETTER S WITH ACUTE
|
|
||||||
0160;Scaron;LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
015E;Scedilla;LATIN CAPITAL LETTER S WITH CEDILLA
|
|
||||||
015C;Scircumflex;LATIN CAPITAL LETTER S WITH CIRCUMFLEX
|
|
||||||
03A3;Sigma;GREEK CAPITAL LETTER SIGMA
|
|
||||||
0054;T;LATIN CAPITAL LETTER T
|
|
||||||
03A4;Tau;GREEK CAPITAL LETTER TAU
|
|
||||||
0166;Tbar;LATIN CAPITAL LETTER T WITH STROKE
|
|
||||||
0164;Tcaron;LATIN CAPITAL LETTER T WITH CARON
|
|
||||||
0398;Theta;GREEK CAPITAL LETTER THETA
|
|
||||||
00DE;Thorn;LATIN CAPITAL LETTER THORN
|
|
||||||
0055;U;LATIN CAPITAL LETTER U
|
|
||||||
00DA;Uacute;LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
016C;Ubreve;LATIN CAPITAL LETTER U WITH BREVE
|
|
||||||
00DB;Ucircumflex;LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
00DC;Udieresis;LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
00D9;Ugrave;LATIN CAPITAL LETTER U WITH GRAVE
|
|
||||||
01AF;Uhorn;LATIN CAPITAL LETTER U WITH HORN
|
|
||||||
0170;Uhungarumlaut;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
|
|
||||||
016A;Umacron;LATIN CAPITAL LETTER U WITH MACRON
|
|
||||||
0172;Uogonek;LATIN CAPITAL LETTER U WITH OGONEK
|
|
||||||
03A5;Upsilon;GREEK CAPITAL LETTER UPSILON
|
|
||||||
03D2;Upsilon1;GREEK UPSILON WITH HOOK SYMBOL
|
|
||||||
03AB;Upsilondieresis;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
|
|
||||||
038E;Upsilontonos;GREEK CAPITAL LETTER UPSILON WITH TONOS
|
|
||||||
016E;Uring;LATIN CAPITAL LETTER U WITH RING ABOVE
|
|
||||||
0168;Utilde;LATIN CAPITAL LETTER U WITH TILDE
|
|
||||||
0056;V;LATIN CAPITAL LETTER V
|
|
||||||
0057;W;LATIN CAPITAL LETTER W
|
|
||||||
1E82;Wacute;LATIN CAPITAL LETTER W WITH ACUTE
|
|
||||||
0174;Wcircumflex;LATIN CAPITAL LETTER W WITH CIRCUMFLEX
|
|
||||||
1E84;Wdieresis;LATIN CAPITAL LETTER W WITH DIAERESIS
|
|
||||||
1E80;Wgrave;LATIN CAPITAL LETTER W WITH GRAVE
|
|
||||||
0058;X;LATIN CAPITAL LETTER X
|
|
||||||
039E;Xi;GREEK CAPITAL LETTER XI
|
|
||||||
0059;Y;LATIN CAPITAL LETTER Y
|
|
||||||
00DD;Yacute;LATIN CAPITAL LETTER Y WITH ACUTE
|
|
||||||
0176;Ycircumflex;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
|
|
||||||
0178;Ydieresis;LATIN CAPITAL LETTER Y WITH DIAERESIS
|
|
||||||
1EF2;Ygrave;LATIN CAPITAL LETTER Y WITH GRAVE
|
|
||||||
005A;Z;LATIN CAPITAL LETTER Z
|
|
||||||
0179;Zacute;LATIN CAPITAL LETTER Z WITH ACUTE
|
|
||||||
017D;Zcaron;LATIN CAPITAL LETTER Z WITH CARON
|
|
||||||
017B;Zdotaccent;LATIN CAPITAL LETTER Z WITH DOT ABOVE
|
|
||||||
0396;Zeta;GREEK CAPITAL LETTER ZETA
|
|
||||||
0061;a;LATIN SMALL LETTER A
|
|
||||||
00E1;aacute;LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0103;abreve;LATIN SMALL LETTER A WITH BREVE
|
|
||||||
00E2;acircumflex;LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
00B4;acute;ACUTE ACCENT
|
|
||||||
0301;acutecomb;COMBINING ACUTE ACCENT
|
|
||||||
00E4;adieresis;LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
00E6;ae;LATIN SMALL LETTER AE
|
|
||||||
01FD;aeacute;LATIN SMALL LETTER AE WITH ACUTE
|
|
||||||
00E0;agrave;LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
2135;aleph;ALEF SYMBOL
|
|
||||||
03B1;alpha;GREEK SMALL LETTER ALPHA
|
|
||||||
03AC;alphatonos;GREEK SMALL LETTER ALPHA WITH TONOS
|
|
||||||
0101;amacron;LATIN SMALL LETTER A WITH MACRON
|
|
||||||
0026;ampersand;AMPERSAND
|
|
||||||
2220;angle;ANGLE
|
|
||||||
2329;angleleft;LEFT-POINTING ANGLE BRACKET
|
|
||||||
232A;angleright;RIGHT-POINTING ANGLE BRACKET
|
|
||||||
0387;anoteleia;GREEK ANO TELEIA
|
|
||||||
0105;aogonek;LATIN SMALL LETTER A WITH OGONEK
|
|
||||||
2248;approxequal;ALMOST EQUAL TO
|
|
||||||
00E5;aring;LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
01FB;aringacute;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
|
|
||||||
2194;arrowboth;LEFT RIGHT ARROW
|
|
||||||
21D4;arrowdblboth;LEFT RIGHT DOUBLE ARROW
|
|
||||||
21D3;arrowdbldown;DOWNWARDS DOUBLE ARROW
|
|
||||||
21D0;arrowdblleft;LEFTWARDS DOUBLE ARROW
|
|
||||||
21D2;arrowdblright;RIGHTWARDS DOUBLE ARROW
|
|
||||||
21D1;arrowdblup;UPWARDS DOUBLE ARROW
|
|
||||||
2193;arrowdown;DOWNWARDS ARROW
|
|
||||||
2190;arrowleft;LEFTWARDS ARROW
|
|
||||||
2192;arrowright;RIGHTWARDS ARROW
|
|
||||||
2191;arrowup;UPWARDS ARROW
|
|
||||||
2195;arrowupdn;UP DOWN ARROW
|
|
||||||
21A8;arrowupdnbse;UP DOWN ARROW WITH BASE
|
|
||||||
005E;asciicircum;CIRCUMFLEX ACCENT
|
|
||||||
007E;asciitilde;TILDE
|
|
||||||
002A;asterisk;ASTERISK
|
|
||||||
2217;asteriskmath;ASTERISK OPERATOR
|
|
||||||
0040;at;COMMERCIAL AT
|
|
||||||
00E3;atilde;LATIN SMALL LETTER A WITH TILDE
|
|
||||||
0062;b;LATIN SMALL LETTER B
|
|
||||||
005C;backslash;REVERSE SOLIDUS
|
|
||||||
007C;bar;VERTICAL LINE
|
|
||||||
03B2;beta;GREEK SMALL LETTER BETA
|
|
||||||
2588;block;FULL BLOCK
|
|
||||||
007B;braceleft;LEFT CURLY BRACKET
|
|
||||||
007D;braceright;RIGHT CURLY BRACKET
|
|
||||||
005B;bracketleft;LEFT SQUARE BRACKET
|
|
||||||
005D;bracketright;RIGHT SQUARE BRACKET
|
|
||||||
02D8;breve;BREVE
|
|
||||||
00A6;brokenbar;BROKEN BAR
|
|
||||||
2022;bullet;BULLET
|
|
||||||
0063;c;LATIN SMALL LETTER C
|
|
||||||
0107;cacute;LATIN SMALL LETTER C WITH ACUTE
|
|
||||||
02C7;caron;CARON
|
|
||||||
21B5;carriagereturn;DOWNWARDS ARROW WITH CORNER LEFTWARDS
|
|
||||||
010D;ccaron;LATIN SMALL LETTER C WITH CARON
|
|
||||||
00E7;ccedilla;LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0109;ccircumflex;LATIN SMALL LETTER C WITH CIRCUMFLEX
|
|
||||||
010B;cdotaccent;LATIN SMALL LETTER C WITH DOT ABOVE
|
|
||||||
00B8;cedilla;CEDILLA
|
|
||||||
00A2;cent;CENT SIGN
|
|
||||||
03C7;chi;GREEK SMALL LETTER CHI
|
|
||||||
25CB;circle;WHITE CIRCLE
|
|
||||||
2297;circlemultiply;CIRCLED TIMES
|
|
||||||
2295;circleplus;CIRCLED PLUS
|
|
||||||
02C6;circumflex;MODIFIER LETTER CIRCUMFLEX ACCENT
|
|
||||||
2663;club;BLACK CLUB SUIT
|
|
||||||
003A;colon;COLON
|
|
||||||
20A1;colonmonetary;COLON SIGN
|
|
||||||
002C;comma;COMMA
|
|
||||||
2245;congruent;APPROXIMATELY EQUAL TO
|
|
||||||
00A9;copyright;COPYRIGHT SIGN
|
|
||||||
00A4;currency;CURRENCY SIGN
|
|
||||||
0064;d;LATIN SMALL LETTER D
|
|
||||||
2020;dagger;DAGGER
|
|
||||||
2021;daggerdbl;DOUBLE DAGGER
|
|
||||||
010F;dcaron;LATIN SMALL LETTER D WITH CARON
|
|
||||||
0111;dcroat;LATIN SMALL LETTER D WITH STROKE
|
|
||||||
00B0;degree;DEGREE SIGN
|
|
||||||
03B4;delta;GREEK SMALL LETTER DELTA
|
|
||||||
2666;diamond;BLACK DIAMOND SUIT
|
|
||||||
00A8;dieresis;DIAERESIS
|
|
||||||
0385;dieresistonos;GREEK DIALYTIKA TONOS
|
|
||||||
00F7;divide;DIVISION SIGN
|
|
||||||
2593;dkshade;DARK SHADE
|
|
||||||
2584;dnblock;LOWER HALF BLOCK
|
|
||||||
0024;dollar;DOLLAR SIGN
|
|
||||||
20AB;dong;DONG SIGN
|
|
||||||
02D9;dotaccent;DOT ABOVE
|
|
||||||
0323;dotbelowcomb;COMBINING DOT BELOW
|
|
||||||
0131;dotlessi;LATIN SMALL LETTER DOTLESS I
|
|
||||||
22C5;dotmath;DOT OPERATOR
|
|
||||||
0065;e;LATIN SMALL LETTER E
|
|
||||||
00E9;eacute;LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0115;ebreve;LATIN SMALL LETTER E WITH BREVE
|
|
||||||
011B;ecaron;LATIN SMALL LETTER E WITH CARON
|
|
||||||
00EA;ecircumflex;LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
00EB;edieresis;LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0117;edotaccent;LATIN SMALL LETTER E WITH DOT ABOVE
|
|
||||||
00E8;egrave;LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0038;eight;DIGIT EIGHT
|
|
||||||
2208;element;ELEMENT OF
|
|
||||||
2026;ellipsis;HORIZONTAL ELLIPSIS
|
|
||||||
0113;emacron;LATIN SMALL LETTER E WITH MACRON
|
|
||||||
2014;emdash;EM DASH
|
|
||||||
2205;emptyset;EMPTY SET
|
|
||||||
2013;endash;EN DASH
|
|
||||||
014B;eng;LATIN SMALL LETTER ENG
|
|
||||||
0119;eogonek;LATIN SMALL LETTER E WITH OGONEK
|
|
||||||
03B5;epsilon;GREEK SMALL LETTER EPSILON
|
|
||||||
03AD;epsilontonos;GREEK SMALL LETTER EPSILON WITH TONOS
|
|
||||||
003D;equal;EQUALS SIGN
|
|
||||||
2261;equivalence;IDENTICAL TO
|
|
||||||
212E;estimated;ESTIMATED SYMBOL
|
|
||||||
03B7;eta;GREEK SMALL LETTER ETA
|
|
||||||
03AE;etatonos;GREEK SMALL LETTER ETA WITH TONOS
|
|
||||||
00F0;eth;LATIN SMALL LETTER ETH
|
|
||||||
0021;exclam;EXCLAMATION MARK
|
|
||||||
203C;exclamdbl;DOUBLE EXCLAMATION MARK
|
|
||||||
00A1;exclamdown;INVERTED EXCLAMATION MARK
|
|
||||||
2203;existential;THERE EXISTS
|
|
||||||
0066;f;LATIN SMALL LETTER F
|
|
||||||
2640;female;FEMALE SIGN
|
|
||||||
2012;figuredash;FIGURE DASH
|
|
||||||
25A0;filledbox;BLACK SQUARE
|
|
||||||
25AC;filledrect;BLACK RECTANGLE
|
|
||||||
0035;five;DIGIT FIVE
|
|
||||||
215D;fiveeighths;VULGAR FRACTION FIVE EIGHTHS
|
|
||||||
0192;florin;LATIN SMALL LETTER F WITH HOOK
|
|
||||||
0034;four;DIGIT FOUR
|
|
||||||
2044;fraction;FRACTION SLASH
|
|
||||||
20A3;franc;FRENCH FRANC SIGN
|
|
||||||
0067;g;LATIN SMALL LETTER G
|
|
||||||
03B3;gamma;GREEK SMALL LETTER GAMMA
|
|
||||||
011F;gbreve;LATIN SMALL LETTER G WITH BREVE
|
|
||||||
01E7;gcaron;LATIN SMALL LETTER G WITH CARON
|
|
||||||
011D;gcircumflex;LATIN SMALL LETTER G WITH CIRCUMFLEX
|
|
||||||
0121;gdotaccent;LATIN SMALL LETTER G WITH DOT ABOVE
|
|
||||||
00DF;germandbls;LATIN SMALL LETTER SHARP S
|
|
||||||
2207;gradient;NABLA
|
|
||||||
0060;grave;GRAVE ACCENT
|
|
||||||
0300;gravecomb;COMBINING GRAVE ACCENT
|
|
||||||
003E;greater;GREATER-THAN SIGN
|
|
||||||
2265;greaterequal;GREATER-THAN OR EQUAL TO
|
|
||||||
00AB;guillemotleft;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
00BB;guillemotright;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
2039;guilsinglleft;SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
||||||
203A;guilsinglright;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0068;h;LATIN SMALL LETTER H
|
|
||||||
0127;hbar;LATIN SMALL LETTER H WITH STROKE
|
|
||||||
0125;hcircumflex;LATIN SMALL LETTER H WITH CIRCUMFLEX
|
|
||||||
2665;heart;BLACK HEART SUIT
|
|
||||||
0309;hookabovecomb;COMBINING HOOK ABOVE
|
|
||||||
2302;house;HOUSE
|
|
||||||
02DD;hungarumlaut;DOUBLE ACUTE ACCENT
|
|
||||||
002D;hyphen;HYPHEN-MINUS
|
|
||||||
0069;i;LATIN SMALL LETTER I
|
|
||||||
00ED;iacute;LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
012D;ibreve;LATIN SMALL LETTER I WITH BREVE
|
|
||||||
00EE;icircumflex;LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
00EF;idieresis;LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
00EC;igrave;LATIN SMALL LETTER I WITH GRAVE
|
|
||||||
0133;ij;LATIN SMALL LIGATURE IJ
|
|
||||||
012B;imacron;LATIN SMALL LETTER I WITH MACRON
|
|
||||||
221E;infinity;INFINITY
|
|
||||||
222B;integral;INTEGRAL
|
|
||||||
2321;integralbt;BOTTOM HALF INTEGRAL
|
|
||||||
2320;integraltp;TOP HALF INTEGRAL
|
|
||||||
2229;intersection;INTERSECTION
|
|
||||||
25D8;invbullet;INVERSE BULLET
|
|
||||||
25D9;invcircle;INVERSE WHITE CIRCLE
|
|
||||||
263B;invsmileface;BLACK SMILING FACE
|
|
||||||
012F;iogonek;LATIN SMALL LETTER I WITH OGONEK
|
|
||||||
03B9;iota;GREEK SMALL LETTER IOTA
|
|
||||||
03CA;iotadieresis;GREEK SMALL LETTER IOTA WITH DIALYTIKA
|
|
||||||
0390;iotadieresistonos;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
|
|
||||||
03AF;iotatonos;GREEK SMALL LETTER IOTA WITH TONOS
|
|
||||||
0129;itilde;LATIN SMALL LETTER I WITH TILDE
|
|
||||||
006A;j;LATIN SMALL LETTER J
|
|
||||||
0135;jcircumflex;LATIN SMALL LETTER J WITH CIRCUMFLEX
|
|
||||||
006B;k;LATIN SMALL LETTER K
|
|
||||||
03BA;kappa;GREEK SMALL LETTER KAPPA
|
|
||||||
0138;kgreenlandic;LATIN SMALL LETTER KRA
|
|
||||||
006C;l;LATIN SMALL LETTER L
|
|
||||||
013A;lacute;LATIN SMALL LETTER L WITH ACUTE
|
|
||||||
03BB;lambda;GREEK SMALL LETTER LAMDA
|
|
||||||
013E;lcaron;LATIN SMALL LETTER L WITH CARON
|
|
||||||
0140;ldot;LATIN SMALL LETTER L WITH MIDDLE DOT
|
|
||||||
003C;less;LESS-THAN SIGN
|
|
||||||
2264;lessequal;LESS-THAN OR EQUAL TO
|
|
||||||
258C;lfblock;LEFT HALF BLOCK
|
|
||||||
20A4;lira;LIRA SIGN
|
|
||||||
2227;logicaland;LOGICAL AND
|
|
||||||
00AC;logicalnot;NOT SIGN
|
|
||||||
2228;logicalor;LOGICAL OR
|
|
||||||
017F;longs;LATIN SMALL LETTER LONG S
|
|
||||||
25CA;lozenge;LOZENGE
|
|
||||||
0142;lslash;LATIN SMALL LETTER L WITH STROKE
|
|
||||||
2591;ltshade;LIGHT SHADE
|
|
||||||
006D;m;LATIN SMALL LETTER M
|
|
||||||
00AF;macron;MACRON
|
|
||||||
2642;male;MALE SIGN
|
|
||||||
2212;minus;MINUS SIGN
|
|
||||||
2032;minute;PRIME
|
|
||||||
00B5;mu;MICRO SIGN
|
|
||||||
00D7;multiply;MULTIPLICATION SIGN
|
|
||||||
266A;musicalnote;EIGHTH NOTE
|
|
||||||
266B;musicalnotedbl;BEAMED EIGHTH NOTES
|
|
||||||
006E;n;LATIN SMALL LETTER N
|
|
||||||
0144;nacute;LATIN SMALL LETTER N WITH ACUTE
|
|
||||||
0149;napostrophe;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
|
|
||||||
0148;ncaron;LATIN SMALL LETTER N WITH CARON
|
|
||||||
0039;nine;DIGIT NINE
|
|
||||||
2209;notelement;NOT AN ELEMENT OF
|
|
||||||
2260;notequal;NOT EQUAL TO
|
|
||||||
2284;notsubset;NOT A SUBSET OF
|
|
||||||
00F1;ntilde;LATIN SMALL LETTER N WITH TILDE
|
|
||||||
03BD;nu;GREEK SMALL LETTER NU
|
|
||||||
0023;numbersign;NUMBER SIGN
|
|
||||||
006F;o;LATIN SMALL LETTER O
|
|
||||||
00F3;oacute;LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
014F;obreve;LATIN SMALL LETTER O WITH BREVE
|
|
||||||
00F4;ocircumflex;LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
00F6;odieresis;LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0153;oe;LATIN SMALL LIGATURE OE
|
|
||||||
02DB;ogonek;OGONEK
|
|
||||||
00F2;ograve;LATIN SMALL LETTER O WITH GRAVE
|
|
||||||
01A1;ohorn;LATIN SMALL LETTER O WITH HORN
|
|
||||||
0151;ohungarumlaut;LATIN SMALL LETTER O WITH DOUBLE ACUTE
|
|
||||||
014D;omacron;LATIN SMALL LETTER O WITH MACRON
|
|
||||||
03C9;omega;GREEK SMALL LETTER OMEGA
|
|
||||||
03D6;omega1;GREEK PI SYMBOL
|
|
||||||
03CE;omegatonos;GREEK SMALL LETTER OMEGA WITH TONOS
|
|
||||||
03BF;omicron;GREEK SMALL LETTER OMICRON
|
|
||||||
03CC;omicrontonos;GREEK SMALL LETTER OMICRON WITH TONOS
|
|
||||||
0031;one;DIGIT ONE
|
|
||||||
2024;onedotenleader;ONE DOT LEADER
|
|
||||||
215B;oneeighth;VULGAR FRACTION ONE EIGHTH
|
|
||||||
00BD;onehalf;VULGAR FRACTION ONE HALF
|
|
||||||
00BC;onequarter;VULGAR FRACTION ONE QUARTER
|
|
||||||
2153;onethird;VULGAR FRACTION ONE THIRD
|
|
||||||
25E6;openbullet;WHITE BULLET
|
|
||||||
00AA;ordfeminine;FEMININE ORDINAL INDICATOR
|
|
||||||
00BA;ordmasculine;MASCULINE ORDINAL INDICATOR
|
|
||||||
221F;orthogonal;RIGHT ANGLE
|
|
||||||
00F8;oslash;LATIN SMALL LETTER O WITH STROKE
|
|
||||||
01FF;oslashacute;LATIN SMALL LETTER O WITH STROKE AND ACUTE
|
|
||||||
00F5;otilde;LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0070;p;LATIN SMALL LETTER P
|
|
||||||
00B6;paragraph;PILCROW SIGN
|
|
||||||
0028;parenleft;LEFT PARENTHESIS
|
|
||||||
0029;parenright;RIGHT PARENTHESIS
|
|
||||||
2202;partialdiff;PARTIAL DIFFERENTIAL
|
|
||||||
0025;percent;PERCENT SIGN
|
|
||||||
002E;period;FULL STOP
|
|
||||||
00B7;periodcentered;MIDDLE DOT
|
|
||||||
22A5;perpendicular;UP TACK
|
|
||||||
2030;perthousand;PER MILLE SIGN
|
|
||||||
20A7;peseta;PESETA SIGN
|
|
||||||
03C6;phi;GREEK SMALL LETTER PHI
|
|
||||||
03D5;phi1;GREEK PHI SYMBOL
|
|
||||||
03C0;pi;GREEK SMALL LETTER PI
|
|
||||||
002B;plus;PLUS SIGN
|
|
||||||
00B1;plusminus;PLUS-MINUS SIGN
|
|
||||||
211E;prescription;PRESCRIPTION TAKE
|
|
||||||
220F;product;N-ARY PRODUCT
|
|
||||||
2282;propersubset;SUBSET OF
|
|
||||||
2283;propersuperset;SUPERSET OF
|
|
||||||
221D;proportional;PROPORTIONAL TO
|
|
||||||
03C8;psi;GREEK SMALL LETTER PSI
|
|
||||||
0071;q;LATIN SMALL LETTER Q
|
|
||||||
003F;question;QUESTION MARK
|
|
||||||
00BF;questiondown;INVERTED QUESTION MARK
|
|
||||||
0022;quotedbl;QUOTATION MARK
|
|
||||||
201E;quotedblbase;DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
201C;quotedblleft;LEFT DOUBLE QUOTATION MARK
|
|
||||||
201D;quotedblright;RIGHT DOUBLE QUOTATION MARK
|
|
||||||
2018;quoteleft;LEFT SINGLE QUOTATION MARK
|
|
||||||
201B;quotereversed;SINGLE HIGH-REVERSED-9 QUOTATION MARK
|
|
||||||
2019;quoteright;RIGHT SINGLE QUOTATION MARK
|
|
||||||
201A;quotesinglbase;SINGLE LOW-9 QUOTATION MARK
|
|
||||||
0027;quotesingle;APOSTROPHE
|
|
||||||
0072;r;LATIN SMALL LETTER R
|
|
||||||
0155;racute;LATIN SMALL LETTER R WITH ACUTE
|
|
||||||
221A;radical;SQUARE ROOT
|
|
||||||
0159;rcaron;LATIN SMALL LETTER R WITH CARON
|
|
||||||
2286;reflexsubset;SUBSET OF OR EQUAL TO
|
|
||||||
2287;reflexsuperset;SUPERSET OF OR EQUAL TO
|
|
||||||
00AE;registered;REGISTERED SIGN
|
|
||||||
2310;revlogicalnot;REVERSED NOT SIGN
|
|
||||||
03C1;rho;GREEK SMALL LETTER RHO
|
|
||||||
02DA;ring;RING ABOVE
|
|
||||||
2590;rtblock;RIGHT HALF BLOCK
|
|
||||||
0073;s;LATIN SMALL LETTER S
|
|
||||||
015B;sacute;LATIN SMALL LETTER S WITH ACUTE
|
|
||||||
0161;scaron;LATIN SMALL LETTER S WITH CARON
|
|
||||||
015F;scedilla;LATIN SMALL LETTER S WITH CEDILLA
|
|
||||||
015D;scircumflex;LATIN SMALL LETTER S WITH CIRCUMFLEX
|
|
||||||
2033;second;DOUBLE PRIME
|
|
||||||
00A7;section;SECTION SIGN
|
|
||||||
003B;semicolon;SEMICOLON
|
|
||||||
0037;seven;DIGIT SEVEN
|
|
||||||
215E;seveneighths;VULGAR FRACTION SEVEN EIGHTHS
|
|
||||||
2592;shade;MEDIUM SHADE
|
|
||||||
03C3;sigma;GREEK SMALL LETTER SIGMA
|
|
||||||
03C2;sigma1;GREEK SMALL LETTER FINAL SIGMA
|
|
||||||
223C;similar;TILDE OPERATOR
|
|
||||||
0036;six;DIGIT SIX
|
|
||||||
002F;slash;SOLIDUS
|
|
||||||
263A;smileface;WHITE SMILING FACE
|
|
||||||
0020;space;SPACE
|
|
||||||
2660;spade;BLACK SPADE SUIT
|
|
||||||
00A3;sterling;POUND SIGN
|
|
||||||
220B;suchthat;CONTAINS AS MEMBER
|
|
||||||
2211;summation;N-ARY SUMMATION
|
|
||||||
263C;sun;WHITE SUN WITH RAYS
|
|
||||||
0074;t;LATIN SMALL LETTER T
|
|
||||||
03C4;tau;GREEK SMALL LETTER TAU
|
|
||||||
0167;tbar;LATIN SMALL LETTER T WITH STROKE
|
|
||||||
0165;tcaron;LATIN SMALL LETTER T WITH CARON
|
|
||||||
2234;therefore;THEREFORE
|
|
||||||
03B8;theta;GREEK SMALL LETTER THETA
|
|
||||||
03D1;theta1;GREEK THETA SYMBOL
|
|
||||||
00FE;thorn;LATIN SMALL LETTER THORN
|
|
||||||
0033;three;DIGIT THREE
|
|
||||||
215C;threeeighths;VULGAR FRACTION THREE EIGHTHS
|
|
||||||
00BE;threequarters;VULGAR FRACTION THREE QUARTERS
|
|
||||||
02DC;tilde;SMALL TILDE
|
|
||||||
0303;tildecomb;COMBINING TILDE
|
|
||||||
0384;tonos;GREEK TONOS
|
|
||||||
2122;trademark;TRADE MARK SIGN
|
|
||||||
25BC;triagdn;BLACK DOWN-POINTING TRIANGLE
|
|
||||||
25C4;triaglf;BLACK LEFT-POINTING POINTER
|
|
||||||
25BA;triagrt;BLACK RIGHT-POINTING POINTER
|
|
||||||
25B2;triagup;BLACK UP-POINTING TRIANGLE
|
|
||||||
0032;two;DIGIT TWO
|
|
||||||
2025;twodotenleader;TWO DOT LEADER
|
|
||||||
2154;twothirds;VULGAR FRACTION TWO THIRDS
|
|
||||||
0075;u;LATIN SMALL LETTER U
|
|
||||||
00FA;uacute;LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
016D;ubreve;LATIN SMALL LETTER U WITH BREVE
|
|
||||||
00FB;ucircumflex;LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
00FC;udieresis;LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
00F9;ugrave;LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
01B0;uhorn;LATIN SMALL LETTER U WITH HORN
|
|
||||||
0171;uhungarumlaut;LATIN SMALL LETTER U WITH DOUBLE ACUTE
|
|
||||||
016B;umacron;LATIN SMALL LETTER U WITH MACRON
|
|
||||||
005F;underscore;LOW LINE
|
|
||||||
2017;underscoredbl;DOUBLE LOW LINE
|
|
||||||
222A;union;UNION
|
|
||||||
2200;universal;FOR ALL
|
|
||||||
0173;uogonek;LATIN SMALL LETTER U WITH OGONEK
|
|
||||||
2580;upblock;UPPER HALF BLOCK
|
|
||||||
03C5;upsilon;GREEK SMALL LETTER UPSILON
|
|
||||||
03CB;upsilondieresis;GREEK SMALL LETTER UPSILON WITH DIALYTIKA
|
|
||||||
03B0;upsilondieresistonos;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
|
|
||||||
03CD;upsilontonos;GREEK SMALL LETTER UPSILON WITH TONOS
|
|
||||||
016F;uring;LATIN SMALL LETTER U WITH RING ABOVE
|
|
||||||
0169;utilde;LATIN SMALL LETTER U WITH TILDE
|
|
||||||
0076;v;LATIN SMALL LETTER V
|
|
||||||
0077;w;LATIN SMALL LETTER W
|
|
||||||
1E83;wacute;LATIN SMALL LETTER W WITH ACUTE
|
|
||||||
0175;wcircumflex;LATIN SMALL LETTER W WITH CIRCUMFLEX
|
|
||||||
1E85;wdieresis;LATIN SMALL LETTER W WITH DIAERESIS
|
|
||||||
2118;weierstrass;SCRIPT CAPITAL P
|
|
||||||
1E81;wgrave;LATIN SMALL LETTER W WITH GRAVE
|
|
||||||
0078;x;LATIN SMALL LETTER X
|
|
||||||
03BE;xi;GREEK SMALL LETTER XI
|
|
||||||
0079;y;LATIN SMALL LETTER Y
|
|
||||||
00FD;yacute;LATIN SMALL LETTER Y WITH ACUTE
|
|
||||||
0177;ycircumflex;LATIN SMALL LETTER Y WITH CIRCUMFLEX
|
|
||||||
00FF;ydieresis;LATIN SMALL LETTER Y WITH DIAERESIS
|
|
||||||
00A5;yen;YEN SIGN
|
|
||||||
1EF3;ygrave;LATIN SMALL LETTER Y WITH GRAVE
|
|
||||||
007A;z;LATIN SMALL LETTER Z
|
|
||||||
017A;zacute;LATIN SMALL LETTER Z WITH ACUTE
|
|
||||||
017E;zcaron;LATIN SMALL LETTER Z WITH CARON
|
|
||||||
017C;zdotaccent;LATIN SMALL LETTER Z WITH DOT ABOVE
|
|
||||||
0030;zero;DIGIT ZERO
|
|
||||||
03B6;zeta;GREEK SMALL LETTER ZETA})
|
|
||||||
|
|
||||||
(define glyph-list
|
|
||||||
(for*/list ([rec (in-list (string-split raw-list "\n"))]
|
|
||||||
[recfields (in-value (string-split rec ";"))])
|
|
||||||
(cons (string->number (first recfields) 16)
|
|
||||||
(string->symbol (second recfields)))))
|
|
||||||
|
|
||||||
(provide glyph-list)
|
|
@ -1,3 +0,0 @@
|
|||||||
#lang info
|
|
||||||
(define scribblings '(("scribblings/pitfall.scrbl" ())))
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
#lang racket/base
|
|
||||||
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
#lang br
|
|
||||||
(require "freetype-ffi.rkt")
|
|
||||||
(provide (all-defined-out))
|
|
||||||
|
|
||||||
(define ft-library (FT_Init_FreeType))
|
|
||||||
(define ft-face-cache (make-hash))
|
|
||||||
|
|
||||||
(define (font-pathstring->ft-face font-pathstring)
|
|
||||||
(hash-ref! ft-face-cache font-pathstring
|
|
||||||
(λ ()
|
|
||||||
(unless (file-exists? font-pathstring)
|
|
||||||
(error 'measure-char (format "font path ~v does not exist" font-pathstring)))
|
|
||||||
(FT_New_Face ft-library font-pathstring 0))))
|
|
||||||
|
|
||||||
(define (get-glyph-idx font-pathstring char)
|
|
||||||
(FT_Get_Char_Index (font-pathstring->ft-face font-pathstring) (char->integer char)))
|
|
||||||
|
|
||||||
(define (measure-char font-pathstring char)
|
|
||||||
(measure-char-idx font-pathstring (get-glyph-idx font-pathstring char)))
|
|
||||||
|
|
||||||
(define (measure-char-idx font-pathstring glyph-idx)
|
|
||||||
(define ft-face (font-pathstring->ft-face font-pathstring))
|
|
||||||
(FT_Load_Glyph ft-face glyph-idx FT_LOAD_NO_RECURSE) ; loads into FTFace's 'glyph' slot
|
|
||||||
(define width (FT_Vector-x (FT_GlyphSlotRec-advance (FT_FaceRec-glyph ft-face))))
|
|
||||||
width)
|
|
||||||
|
|
||||||
|
|
||||||
(module+ test
|
|
||||||
(require rackunit)
|
|
||||||
(check-equal? (measure-char "miso.otf" #\f) 296)
|
|
||||||
(check-equal? (measure-char-idx "miso.otf" 46) 296))
|
|
@ -1,39 +0,0 @@
|
|||||||
#lang at-exp s-exp pitfall/render
|
|
||||||
|
|
||||||
;; catalog object
|
|
||||||
(co-io 1 0 (co-catalog #:pages (co-io-ref 2 0)))
|
|
||||||
|
|
||||||
;; pages
|
|
||||||
(co-io 2 0 (co-pages #:kids (list (co-io-ref 3 0))
|
|
||||||
#:count 1))
|
|
||||||
;; page
|
|
||||||
(co-io 3 0 (co-page #:parent (co-io-ref 2 0)
|
|
||||||
#:mediabox '(0 0 400 400)
|
|
||||||
#:contents (co-io-ref 5 0)
|
|
||||||
; the value of annots must be an array
|
|
||||||
#:annots (co-array (list (co-io-ref 7 0)))))
|
|
||||||
|
|
||||||
|
|
||||||
;; contents
|
|
||||||
(co-io 5 0
|
|
||||||
(make-co-stream
|
|
||||||
#"
|
|
||||||
BT
|
|
||||||
0.9 g
|
|
||||||
100 100 100 100 re
|
|
||||||
F
|
|
||||||
ET
|
|
||||||
"))
|
|
||||||
|
|
||||||
(co-io 7 0
|
|
||||||
(make-co-dict 'Type 'Annot
|
|
||||||
'Subtype 'Link
|
|
||||||
;; rect is left bottom right top in page coordinates
|
|
||||||
'Rect (co-array '(125 125 175 175))
|
|
||||||
'A (co-io-ref 8 0)))
|
|
||||||
|
|
||||||
|
|
||||||
(co-io 8 0
|
|
||||||
(make-co-dict 'Type 'Action
|
|
||||||
'S 'URI
|
|
||||||
'URI (co-string "http://practicaltypography.com")))
|
|
@ -1,63 +0,0 @@
|
|||||||
#lang at-exp s-exp pitfall/render
|
|
||||||
|
|
||||||
;; catalog object
|
|
||||||
(co-io 1 0 (co-catalog #:pages (co-io-ref 2 0)))
|
|
||||||
|
|
||||||
;; pages
|
|
||||||
(co-io 2 0 (co-pages #:kids (list (co-io-ref 3 0))
|
|
||||||
#:count 1))
|
|
||||||
;; page
|
|
||||||
(co-io 3 0 (co-page #:parent (co-io-ref 2 0)
|
|
||||||
#:mediabox '(0 0 400 400)
|
|
||||||
#:resources (co-io-ref 4 0)
|
|
||||||
#:contents (co-io-ref 5 0)
|
|
||||||
|
|
||||||
; the value of annots must be an array
|
|
||||||
#:annots (co-array (list (co-io-ref 7 0)))
|
|
||||||
))
|
|
||||||
#;#:annots (co-io-ref 7 0)
|
|
||||||
|
|
||||||
;; resources
|
|
||||||
(co-io 4 0
|
|
||||||
(make-co-dict
|
|
||||||
'ProcSet (co-array '(PDF Text))
|
|
||||||
'Font (make-co-dict 'F1 (co-io-ref 6 0))))
|
|
||||||
|
|
||||||
;; contents
|
|
||||||
(co-io 5 0
|
|
||||||
(make-co-stream
|
|
||||||
#"
|
|
||||||
BT
|
|
||||||
/F1 24 Tf
|
|
||||||
1 0 0 1 100 100 Tm
|
|
||||||
1 0 0 RG
|
|
||||||
[2] 0 d
|
|
||||||
0.75 g
|
|
||||||
2 Tr
|
|
||||||
(Hello) Tj
|
|
||||||
2 0 0 2 160 100 Tm
|
|
||||||
0 0 0 RG
|
|
||||||
0 g
|
|
||||||
(World) Tj
|
|
||||||
ET
|
|
||||||
"))
|
|
||||||
|
|
||||||
|
|
||||||
;; font
|
|
||||||
(co-io 6 0
|
|
||||||
(make-co-dict
|
|
||||||
'Type 'Font 'Subtype 'Type1 'Name 'F1 'BaseFont 'Helvetica))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(co-io 7 0
|
|
||||||
(make-co-dict 'Type 'Annot
|
|
||||||
'Subtype 'Link
|
|
||||||
'Rect (co-array '(100 100 150 125))
|
|
||||||
'A (co-io-ref 8 0)))
|
|
||||||
|
|
||||||
|
|
||||||
(co-io 8 0
|
|
||||||
(make-co-dict 'Type 'Action
|
|
||||||
'S 'URI
|
|
||||||
'URI (co-string "http://practicaltypography.com")))
|
|
@ -1,87 +0,0 @@
|
|||||||
#lang at-exp s-exp pitfall/render
|
|
||||||
|
|
||||||
;; catalog object
|
|
||||||
(co-io 1 0 (co-catalog #:pages (co-io-ref 2 0)))
|
|
||||||
|
|
||||||
;; pages
|
|
||||||
(co-io 2 0 (co-pages #:kids (list (co-io-ref 3 0))
|
|
||||||
#:count 1))
|
|
||||||
;; page
|
|
||||||
(co-io 3 0 (co-page #:parent (co-io-ref 2 0)
|
|
||||||
#:mediabox '(0 0 400 400)
|
|
||||||
#:resources (co-io-ref 4 0)
|
|
||||||
#:contents (co-io-ref 5 0)
|
|
||||||
|
|
||||||
; the value of annots must be an array
|
|
||||||
#:annots (co-array (list (co-io-ref 7 0)))
|
|
||||||
))
|
|
||||||
#;#:annots (co-io-ref 7 0)
|
|
||||||
|
|
||||||
;; resources
|
|
||||||
(co-io 4 0
|
|
||||||
(make-co-dict
|
|
||||||
'ProcSet (co-array '(PDF Text))
|
|
||||||
'Font (make-co-dict 'F1 (co-io-ref 6 0))))
|
|
||||||
|
|
||||||
;; contents
|
|
||||||
(co-io 5 0
|
|
||||||
(make-co-stream
|
|
||||||
#"
|
|
||||||
BT
|
|
||||||
/F1 24 Tf
|
|
||||||
1 0 0 1 100 100 Tm
|
|
||||||
1 0 0 RG
|
|
||||||
[2] 0 d
|
|
||||||
0.75 g
|
|
||||||
2 Tr
|
|
||||||
(Hello) Tj
|
|
||||||
2 0 0 2 160 100 Tm
|
|
||||||
0 0 0 RG
|
|
||||||
0 g
|
|
||||||
(World) Tj
|
|
||||||
ET
|
|
||||||
"))
|
|
||||||
|
|
||||||
|
|
||||||
;; font
|
|
||||||
(co-io 6 0
|
|
||||||
(make-co-dict
|
|
||||||
'Type 'Font
|
|
||||||
'Subtype 'Type1
|
|
||||||
'Name 'F1
|
|
||||||
'FontDescriptor (co-io-ref 9 0)))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(co-io 7 0
|
|
||||||
(make-co-dict 'Type 'Annot
|
|
||||||
'Subtype 'Link
|
|
||||||
'Rect (co-array '(100 100 150 125))
|
|
||||||
'A (co-io-ref 8 0)))
|
|
||||||
|
|
||||||
|
|
||||||
(co-io 8 0
|
|
||||||
(make-co-dict 'Type 'Action
|
|
||||||
'S 'URI
|
|
||||||
'URI (co-string "http://practicaltypography.com")))
|
|
||||||
|
|
||||||
(co-io 9 0
|
|
||||||
(make-co-dict
|
|
||||||
'Type 'FontDescriptor
|
|
||||||
'FontName 'FiraSansOTLight
|
|
||||||
'FontFile3 (co-io-ref 10 0)
|
|
||||||
'Flags 262178
|
|
||||||
'FontBBox (co-array '(-177 -269 1123 866))
|
|
||||||
'MissingWidth 255
|
|
||||||
'StemV 105
|
|
||||||
'StemH 45
|
|
||||||
'CapHeight 660
|
|
||||||
'XHeight 394
|
|
||||||
'Ascent 720
|
|
||||||
'Descent '270
|
|
||||||
'Leading 83
|
|
||||||
'MaxWidth 1212
|
|
||||||
'AvgWidth 478
|
|
||||||
'ItalicAngle 0))
|
|
||||||
|
|
||||||
(co-io 10 0 (make-font-co-stream "fira.otf"))
|
|
@ -1,94 +0,0 @@
|
|||||||
#lang at-exp br
|
|
||||||
(require pitfall/render)
|
|
||||||
|
|
||||||
(render-args
|
|
||||||
|
|
||||||
;; catalog object
|
|
||||||
(co-io 1 0 (co-catalog #:pages (co-io-ref 2 0)))
|
|
||||||
|
|
||||||
;; pages
|
|
||||||
(co-io 2 0 (co-pages #:kids (list (co-io-ref 3 0))
|
|
||||||
#:count 1))
|
|
||||||
;; page
|
|
||||||
(co-io 3 0 (co-page #:parent (co-io-ref 2 0)
|
|
||||||
#:mediabox '(0 0 400 400)
|
|
||||||
#:resources (co-io-ref 4 0)
|
|
||||||
#:contents (co-io-ref 5 0)
|
|
||||||
|
|
||||||
; the value of annots must be an array
|
|
||||||
#:annots (co-array (list (co-io-ref 7 0)))
|
|
||||||
))
|
|
||||||
#;#:annots (co-io-ref 7 0)
|
|
||||||
|
|
||||||
;; resources
|
|
||||||
(co-io 4 0
|
|
||||||
(make-co-dict
|
|
||||||
'ProcSet (co-array '(PDF Text))
|
|
||||||
'Font (make-co-dict 'F1 (co-io-ref 6 0))))
|
|
||||||
|
|
||||||
;; contents
|
|
||||||
(co-io 5 0
|
|
||||||
(make-co-stream
|
|
||||||
#"
|
|
||||||
BT
|
|
||||||
/F1 48 Tf
|
|
||||||
(Hello World 1-1!) Tj
|
|
||||||
ET
|
|
||||||
"))
|
|
||||||
|
|
||||||
|
|
||||||
;; font
|
|
||||||
(let ([last-char 255])
|
|
||||||
(co-io 6 0
|
|
||||||
(make-co-dict
|
|
||||||
'Type 'Font
|
|
||||||
'Subtype 'Type1
|
|
||||||
'Name 'F1
|
|
||||||
'BaseFont 'Helvetica
|
|
||||||
'FontDescriptor (co-io-ref 9 0)
|
|
||||||
'FirstChar 0
|
|
||||||
'LastChar last-char
|
|
||||||
;; widths can only hold 256 apparently?
|
|
||||||
'Widths (report (co-array
|
|
||||||
(for/list ([i (in-range (add1 last-char))])
|
|
||||||
;; 29 is magic number: this is offset betwee
|
|
||||||
;; ascii value and character index
|
|
||||||
;; so A (ascii 65) lives at index 36
|
|
||||||
(define ascii-index-offset 29)
|
|
||||||
(if (<= ascii-index-offset i)
|
|
||||||
(measure-char-idx "fira.otf" (- i ascii-index-offset))
|
|
||||||
200))))
|
|
||||||
'Encoding 'MacRomanEncoding)))
|
|
||||||
|
|
||||||
(co-io 7 0
|
|
||||||
(make-co-dict 'Type 'Annot
|
|
||||||
'Subtype 'Link
|
|
||||||
'Rect (co-array '(100 100 150 125))
|
|
||||||
'A (co-io-ref 8 0)))
|
|
||||||
|
|
||||||
|
|
||||||
(co-io 8 0
|
|
||||||
(make-co-dict 'Type 'Action
|
|
||||||
'S 'URI
|
|
||||||
'URI (co-string "http://practicaltypography.com")))
|
|
||||||
|
|
||||||
(co-io 9 0
|
|
||||||
(make-co-dict
|
|
||||||
'Type 'FontDescriptor
|
|
||||||
'FontName 'FiraSansOTMedium
|
|
||||||
'FontFile3 (co-io-ref 10 0)
|
|
||||||
'Flags 4
|
|
||||||
'FontBBox (co-array '(-177 -269 1123 866))
|
|
||||||
'MissingWidth 255
|
|
||||||
'StemV 105
|
|
||||||
'StemH 45
|
|
||||||
'CapHeight 660
|
|
||||||
'XHeight 394
|
|
||||||
'Ascent 720
|
|
||||||
'Descent -270
|
|
||||||
'Leading 83
|
|
||||||
'MaxWidth 1212
|
|
||||||
'AvgWidth 478
|
|
||||||
'ItalicAngle 0))
|
|
||||||
|
|
||||||
(co-io 10 0 (make-font-co-stream "fira.otf")))
|
|
@ -1,40 +0,0 @@
|
|||||||
#lang s-exp pitfall/render
|
|
||||||
|
|
||||||
(co-io 1 0 (co-dict (hasheq 'Pages (co-io-ref 2 0) 'Type 'Catalog)))
|
|
||||||
(co-io
|
|
||||||
2
|
|
||||||
0
|
|
||||||
(co-dict
|
|
||||||
(hasheq
|
|
||||||
'Count
|
|
||||||
1
|
|
||||||
'Kids
|
|
||||||
(co-array (list (co-io-ref 3 0)))
|
|
||||||
'Type
|
|
||||||
'Pages
|
|
||||||
'MediaBox
|
|
||||||
(co-array '(0 0 300 144)))))
|
|
||||||
(co-io
|
|
||||||
3
|
|
||||||
0
|
|
||||||
(co-dict
|
|
||||||
(hasheq
|
|
||||||
'Resources
|
|
||||||
(co-dict
|
|
||||||
(hasheq
|
|
||||||
'Font
|
|
||||||
(co-dict
|
|
||||||
(hasheq 'F1 (co-dict '#hasheq((Subtype . Type1) (BaseFont . Times-Roman) (Type . Font)))))))
|
|
||||||
'Parent
|
|
||||||
(co-io-ref 2 0)
|
|
||||||
'Contents
|
|
||||||
(co-io-ref 4 0)
|
|
||||||
'Type
|
|
||||||
'Page)))
|
|
||||||
(co-io
|
|
||||||
4
|
|
||||||
0
|
|
||||||
(co-stream
|
|
||||||
(co-dict '#hasheq((Length . 55)))
|
|
||||||
#" BT\n /F1 18 Tf\n 0 0 Td\n (Hello World) Tj\n ET"))
|
|
||||||
(co-trailer (co-dict (hasheq 'Size 5 'Root (co-io-ref 1 0))))
|
|
@ -1,51 +0,0 @@
|
|||||||
#lang pitfall/parse
|
|
||||||
%PDF-1.1
|
|
||||||
%¥±ë
|
|
||||||
|
|
||||||
1 0 obj
|
|
||||||
<< /Type /Catalog
|
|
||||||
/Pages 2 0 R
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
|
|
||||||
2 0 obj
|
|
||||||
<< /Type /Pages
|
|
||||||
/Kids [3 0 R]
|
|
||||||
/Count 1
|
|
||||||
/MediaBox [0 0 300 144]
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
|
|
||||||
3 0 obj
|
|
||||||
<< /Type /Page
|
|
||||||
/Parent 2 0 R
|
|
||||||
/Resources
|
|
||||||
<< /Font
|
|
||||||
<< /F1
|
|
||||||
<< /Type /Font
|
|
||||||
/Subtype /Type1
|
|
||||||
/BaseFont /Times-Roman
|
|
||||||
>>
|
|
||||||
>>
|
|
||||||
>>
|
|
||||||
/Contents 4 0 R
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
|
|
||||||
4 0 obj
|
|
||||||
<< /Length 55 >>
|
|
||||||
stream
|
|
||||||
BT
|
|
||||||
/F1 18 Tf
|
|
||||||
0 0 Td
|
|
||||||
(Hello World) Tj
|
|
||||||
ET
|
|
||||||
endstream
|
|
||||||
endobj
|
|
||||||
|
|
||||||
trailer
|
|
||||||
<< /Root 1 0 R
|
|
||||||
/Size 5
|
|
||||||
>>
|
|
||||||
|
|
||||||
%%EOF
|
|
@ -1,58 +0,0 @@
|
|||||||
%PDF-1.1
|
|
||||||
%¥±ë
|
|
||||||
|
|
||||||
1 0 obj
|
|
||||||
<< /Type /Catalog
|
|
||||||
/Pages 2 0 R
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
|
|
||||||
2 0 obj
|
|
||||||
<< /Type /Pages
|
|
||||||
/Kids [3 0 R]
|
|
||||||
/Count 1
|
|
||||||
/MediaBox [0 0 300 144]
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
|
|
||||||
3 0 obj
|
|
||||||
<< /Type /Page
|
|
||||||
/Parent 2 0 R
|
|
||||||
/Resources
|
|
||||||
<< /Font
|
|
||||||
<< /F1
|
|
||||||
<< /Type /Font
|
|
||||||
/Subtype /Type1
|
|
||||||
/BaseFont /Times-Roman
|
|
||||||
>>
|
|
||||||
>>
|
|
||||||
>>
|
|
||||||
/Contents 4 0 R
|
|
||||||
>>
|
|
||||||
endobj
|
|
||||||
|
|
||||||
4 0 obj
|
|
||||||
<< /Length 55 >>
|
|
||||||
stream
|
|
||||||
BT
|
|
||||||
/F1 18 Tf
|
|
||||||
0 0 Td
|
|
||||||
(Hello World) Tj
|
|
||||||
ET
|
|
||||||
endstream
|
|
||||||
endobj
|
|
||||||
|
|
||||||
xref
|
|
||||||
0 5
|
|
||||||
0000000000 65535 f
|
|
||||||
0000000018 00000 n
|
|
||||||
0000000077 00000 n
|
|
||||||
0000000178 00000 n
|
|
||||||
0000000457 00000 n
|
|
||||||
trailer
|
|
||||||
<< /Root 1 0 R
|
|
||||||
/Size 5
|
|
||||||
>>
|
|
||||||
startxref
|
|
||||||
565
|
|
||||||
%%EOF
|
|
Binary file not shown.
@ -1,98 +0,0 @@
|
|||||||
#lang at-exp br/quicklang
|
|
||||||
(require "parser.rkt" "tokenizer.rkt" "core.rkt" gregor racket/bytes)
|
|
||||||
(provide (matching-identifiers-out #rx"pf-" (all-defined-out)))
|
|
||||||
|
|
||||||
(module+ test (require rackunit))
|
|
||||||
|
|
||||||
(module+ reader (provide read-syntax))
|
|
||||||
|
|
||||||
(define (read-syntax src port)
|
|
||||||
;; use latin-1 reencoding to make one char = one byte (note `latin1` respelling is correct)
|
|
||||||
(define parse-tree (parse (make-tokenizer (reencode-input-port port "latin1") src)))
|
|
||||||
(strip-bindings
|
|
||||||
#`(module pitfall-parse-mod pitfall/parse
|
|
||||||
#,parse-tree)))
|
|
||||||
|
|
||||||
(define-macro (my-mb ARG ...)
|
|
||||||
#'(#%module-begin ARG ...))
|
|
||||||
(provide (rename-out [my-mb #%module-begin])
|
|
||||||
require)
|
|
||||||
|
|
||||||
(provide null)
|
|
||||||
|
|
||||||
(define-macro (pf-program COS-OBJECT ...)
|
|
||||||
#'(begin COS-OBJECT ...))
|
|
||||||
|
|
||||||
(define (pf-name str)
|
|
||||||
(let* ([str (string-trim str "/" #:right? #f)]
|
|
||||||
[str (regexp-replace* @pregexp{#(\d\d)} str (λ (m sub) (string (integer->char (string->number sub 16)))))])
|
|
||||||
(string->symbol str)))
|
|
||||||
|
|
||||||
(module+ test
|
|
||||||
(check-equal? (pf-name "B#45#20NICE") '|BE NICE|))
|
|
||||||
|
|
||||||
(define (pf-string arg . tail)
|
|
||||||
(cond
|
|
||||||
[(andmap byte? (cons arg tail)) (cons arg tail)]
|
|
||||||
[(string-prefix? arg "D:")
|
|
||||||
#;(parameterize ([current-locale "en"])
|
|
||||||
(parse-date "2015-03-15T02:02:02-04:00" "yyyy-MM-dd'T'HH:mm:ssxxx"))
|
|
||||||
#f]
|
|
||||||
[else
|
|
||||||
(let* ([str (regexp-replace @regexp{^\((.*)\)$} arg "\\1")] ; remove parens
|
|
||||||
[str (string-replace str (string-append "\\" "\n") "")]
|
|
||||||
[str (regexp-replace* @pregexp{\\(n|r|t|b|f|\(|\)|\\)} str (λ (m sub)
|
|
||||||
(case sub
|
|
||||||
[("n") "\n"]
|
|
||||||
[("r") "\r"]
|
|
||||||
[("t") "\t"]
|
|
||||||
[("b") "\b"]
|
|
||||||
[("f") "\f"]
|
|
||||||
[else sub])))]
|
|
||||||
[str (regexp-replace* @pregexp{\\(\d{2,3})} str (λ (m sub) (string (integer->char (string->number sub 8)))))])
|
|
||||||
(co-string str))]))
|
|
||||||
|
|
||||||
(module+ test
|
|
||||||
(check-equal? @pf-string{(Testing)} (co-string "Testing"))
|
|
||||||
(check-equal? (pf-string @string-append{(Test\
|
|
||||||
ing)}) (co-string "Testing"))
|
|
||||||
(check-equal? @pf-string{(Test\)ing)} (co-string "Test)ing"))
|
|
||||||
(check-equal? @pf-string{(Test\ning)} (co-string "Test\ning"))
|
|
||||||
(check-equal? @pf-string{(Test\\ing)} (co-string "Test\\ing"))
|
|
||||||
(check-equal? @pf-string{(A\53B)} (co-string "A+B"))
|
|
||||||
(check-equal? @pf-string{(A\053B)} (co-string "A+B"))
|
|
||||||
#;(check-equal? @pf-string{(D:19990209153925-08\'00\')})
|
|
||||||
#;(check-true (andmap byte? @pf-string{<1C2D3F>}))
|
|
||||||
#;(check-true (andmap byte? @pf-string{<1C 2D 3F>})))
|
|
||||||
|
|
||||||
(define (pf-array . xs) (co-array xs))
|
|
||||||
|
|
||||||
(define (pf-dict . args)
|
|
||||||
(co-dict (apply hasheq args)))
|
|
||||||
|
|
||||||
|
|
||||||
(define (pf-stream dict str)
|
|
||||||
(define data (string->bytes/utf-8 str))
|
|
||||||
(when (not (equal? (hash-ref (co-dict-dict dict) 'Length) (bytes-length data)))
|
|
||||||
(raise-argument-error 'pf-stream
|
|
||||||
(format "~a bytes of data" (hash-ref (co-dict-dict dict) 'Length))
|
|
||||||
(format "~a = ~v" (bytes-length data) data)))
|
|
||||||
(co-stream dict data))
|
|
||||||
|
|
||||||
(define (pf-indirect-object obj gen thing)
|
|
||||||
(co-io obj gen thing))
|
|
||||||
|
|
||||||
(define-macro (pf-indirect-object-ref (OBJ GEN _))
|
|
||||||
#'(co-io-ref OBJ GEN))
|
|
||||||
|
|
||||||
(define (pf-header num) (co-header num))
|
|
||||||
|
|
||||||
(define (pf-comment text) (co-comment text))
|
|
||||||
|
|
||||||
(define (pf-trailer dict)
|
|
||||||
(let ([h (co-dict-dict dict)])
|
|
||||||
(unless (and (hash-has-key? h 'Size) (hash-has-key? h 'Root))
|
|
||||||
(raise-argument-error 'pf-trailer
|
|
||||||
"Size and Root keys are required for trailer"
|
|
||||||
(hash-keys h))))
|
|
||||||
(co-trailer dict))
|
|
@ -1,6 +0,0 @@
|
|||||||
#lang at-exp br
|
|
||||||
(require rackunit "parser.rkt" "tokenizer.rkt" brag/support)
|
|
||||||
|
|
||||||
(apply-tokenizer-maker make-tokenizer @string-append{(string () here) << /A (B) >>})
|
|
||||||
|
|
||||||
#;(parse-to-datum (apply-tokenizer-maker make-tokenizer @string-append{(string () here) << /A (B) >>}))
|
|
@ -1,21 +0,0 @@
|
|||||||
#lang brag
|
|
||||||
|
|
||||||
pf-program : pf-header pf-body pf-trailer
|
|
||||||
pf-header : PDF-HEADER
|
|
||||||
@pf-body : pf-object*
|
|
||||||
@pf-object : pf-null | CHAR | BOOLEAN | INT | REAL | pf-name | pf-string | pf-array | pf-dict | pf-stream | pf-indirect-object | pf-indirect-object-ref | pf-comment
|
|
||||||
@pf-null : NULL
|
|
||||||
pf-name : NAME
|
|
||||||
pf-string : STRING-TOK | /"<" HEX-DIGIT-PAIR* /">"
|
|
||||||
pf-array : /"[" pf-object* /"]"
|
|
||||||
pf-dict : /"<" /"<" (pf-dict-key pf-dict-value)* /">" /">"
|
|
||||||
@pf-dict-key : pf-object
|
|
||||||
@pf-dict-value : pf-object
|
|
||||||
pf-stream : pf-dict STREAM-DATA
|
|
||||||
pf-indirect-object : INT INT /"obj" pf-object /"endobj"
|
|
||||||
pf-indirect-object-ref : INDIRECT-OBJECT-REF-TOK
|
|
||||||
pf-comment : COMMENT
|
|
||||||
|
|
||||||
;pf-xref-table :
|
|
||||||
|
|
||||||
pf-trailer : /"trailer" pf-dict
|
|
@ -1,152 +0,0 @@
|
|||||||
#lang at-exp br
|
|
||||||
(require racket/string pitfall/struct pitfall/measure br/define racket/bytes sugar/debug racket/format racket/file)
|
|
||||||
(provide (all-defined-out)
|
|
||||||
(all-from-out pitfall/struct pitfall/measure)
|
|
||||||
file->bytes
|
|
||||||
(except-out (all-from-out br) #%module-begin))
|
|
||||||
|
|
||||||
(define-macro (mb . ARGS)
|
|
||||||
#'(#%module-begin (render-args . ARGS)))
|
|
||||||
(provide (rename-out [mb #%module-begin]))
|
|
||||||
|
|
||||||
(define (make-xref-table locs)
|
|
||||||
(string->bytes/latin-1 @string-append{
|
|
||||||
xref
|
|
||||||
0 @(number->string (length locs))
|
|
||||||
0000000000 65535 f
|
|
||||||
@(let ([sep " 00000 n\n"])
|
|
||||||
(string-join
|
|
||||||
(for/list ([loc (in-list (cdr (sort locs < #:key car)))])
|
|
||||||
(~r #:min-width 10 #:pad-string "0" (cdr loc))) sep #:after-last sep))
|
|
||||||
}))
|
|
||||||
|
|
||||||
(define (render-args . args)
|
|
||||||
(render-list args))
|
|
||||||
|
|
||||||
(define (render thing)
|
|
||||||
(render-list (list thing)))
|
|
||||||
|
|
||||||
(define (render-list args)
|
|
||||||
(define-values (bstrs offset locs)
|
|
||||||
(for/fold ([cobstrs null]
|
|
||||||
[offset 0]
|
|
||||||
[io-locs '((0 . 0))])
|
|
||||||
([cosexpr (in-list args)])
|
|
||||||
(define cobstr (cosexpr->bytes cosexpr))
|
|
||||||
(values
|
|
||||||
(cons cobstr cobstrs)
|
|
||||||
(+ offset (bytes-length cobstr))
|
|
||||||
(if (co-io? cosexpr)
|
|
||||||
(cons (cons (co-io-idx cosexpr) offset) io-locs)
|
|
||||||
io-locs))))
|
|
||||||
(define header-str (cosexpr->bytes (co-header "%PDF-1.6\n%¥±ë")))
|
|
||||||
(define trailer-str (cosexpr->bytes
|
|
||||||
(co-trailer (co-dict (hasheq 'Size (length bstrs) 'Root (co-io-ref 1 0))))))
|
|
||||||
(define last-offset (for/sum ([bstr (in-list bstrs)])
|
|
||||||
(bytes-length bstr)))
|
|
||||||
(define result (apply bytes-append `(,header-str
|
|
||||||
,@(reverse bstrs)
|
|
||||||
,(make-xref-table locs)
|
|
||||||
,trailer-str
|
|
||||||
#"\nstartxref\n"
|
|
||||||
,(string->bytes/latin-1 (number->string last-offset))
|
|
||||||
#"\n%%EOF")))
|
|
||||||
#;(display result)
|
|
||||||
(let ([op (open-output-file (expand-user-path "~/Desktop/foo.pdf") #:exists 'replace)])
|
|
||||||
(write-bytes result op)
|
|
||||||
(close-output-port op))
|
|
||||||
#;result)
|
|
||||||
|
|
||||||
(define (cosexpr->bytes x)
|
|
||||||
(bytes-append
|
|
||||||
(string->bytes/latin-1
|
|
||||||
(let loop ([x x])
|
|
||||||
(cond
|
|
||||||
[(co-version? x)
|
|
||||||
@string-append{%%PDF-@(number->string (co-version-num x))}]
|
|
||||||
[(co-header? x) (loop (co-header-string x))]
|
|
||||||
[(co-array? x)
|
|
||||||
@string-append{[ @(string-join (map loop (co-array-items x)) " ") ]}]
|
|
||||||
[(co-io? x)
|
|
||||||
@string-append{
|
|
||||||
@(loop (co-io-idx x)) @(loop (co-io-rev x)) obj
|
|
||||||
@(loop (co-io-thing x))
|
|
||||||
endobj
|
|
||||||
|
|
||||||
}]
|
|
||||||
[(co-dict? x)
|
|
||||||
@string-append{
|
|
||||||
<<
|
|
||||||
@(string-join
|
|
||||||
(for/list ([(k v) (in-hash (co-dict-dict x))])
|
|
||||||
@string-append{@(loop k) @(loop v)}) "\n")
|
|
||||||
>>}]
|
|
||||||
[(co-io-ref? x)
|
|
||||||
@string-append{@(loop (co-io-ref-idx x)) @(loop (co-io-ref-rev x)) R}]
|
|
||||||
[(co-string? x) (format "(~a)" (co-string-string x))]
|
|
||||||
[(co-stream? x)
|
|
||||||
@string-append{
|
|
||||||
@(loop (co-stream-dict x))
|
|
||||||
stream
|
|
||||||
@(loop (co-stream-data x))
|
|
||||||
endstream
|
|
||||||
}]
|
|
||||||
#;[(co-comment? x) (co-comment-text x)]
|
|
||||||
[(co-trailer? x) @string-append{
|
|
||||||
trailer
|
|
||||||
@(loop (co-trailer-dict x))
|
|
||||||
}]
|
|
||||||
[(co-hash? x)
|
|
||||||
(string-join
|
|
||||||
(map loop (for/list ([(k v) (in-hash (co-hash-hash x))])
|
|
||||||
(co-io k 0 v))) "")]
|
|
||||||
[(co-encoding-datum? x) (symbol->string (co-encoding-datum-datum x))]
|
|
||||||
[(symbol? x) @string-append{/@(symbol->string x)}]
|
|
||||||
[(number? x) @number->string{@x}]
|
|
||||||
[(string? x) x]
|
|
||||||
[else (format "~a" x)]))) #"\n"))
|
|
||||||
|
|
||||||
|
|
||||||
(define (co-catalog #:pages io-ref)
|
|
||||||
(co-dict (hasheq 'Type 'Catalog 'Pages io-ref)))
|
|
||||||
|
|
||||||
(define (co-pages #:kids kidslist #:count count)
|
|
||||||
(co-dict (hasheq 'Type 'Pages
|
|
||||||
'Kids (co-array kidslist)
|
|
||||||
'Count count)))
|
|
||||||
|
|
||||||
(define (co-page #:parent parent
|
|
||||||
#:mediabox pts
|
|
||||||
#:resources [rsrcs (co-dict (hasheq))]
|
|
||||||
#:contents contents
|
|
||||||
#:annots [annots (co-array null)])
|
|
||||||
(co-dict (hasheq 'Type 'Page
|
|
||||||
'Parent parent
|
|
||||||
'MediaBox (co-array pts)
|
|
||||||
'Resources rsrcs
|
|
||||||
'Contents contents
|
|
||||||
'Annots annots)))
|
|
||||||
|
|
||||||
(define (make-co-hash)
|
|
||||||
(co-hash (make-hash)))
|
|
||||||
|
|
||||||
(define (+co-hash cosh idx thing)
|
|
||||||
(hash-set! (co-hash-hash cosh) idx thing))
|
|
||||||
|
|
||||||
(define (make-co-dict . xs)
|
|
||||||
(co-dict (apply hasheq xs)))
|
|
||||||
|
|
||||||
(define (make-co-stream bstr . kvs)
|
|
||||||
(co-stream (apply make-co-dict 'Length (bytes-length bstr) kvs) (bytes->string/latin-1 bstr)))
|
|
||||||
|
|
||||||
(define (make-font-co-stream font-path)
|
|
||||||
(make-co-stream (file->bytes font-path) 'Subtype 'OpenType))
|
|
||||||
|
|
||||||
(define (make-co-io-ref [idx 0] [rev 0])
|
|
||||||
(co-io-ref idx rev))
|
|
||||||
|
|
||||||
(define (make-encoding-list xs)
|
|
||||||
(co-array (for/list ([x (in-list xs)])
|
|
||||||
(co-encoding-datum x))))
|
|
||||||
|
|
||||||
#;(cosexpr->bytes (make-co-dict 'Hello (co-string "World")))
|
|
@ -1,16 +0,0 @@
|
|||||||
#lang racket/base
|
|
||||||
(provide (all-defined-out))
|
|
||||||
|
|
||||||
(struct co-dict (dict) #:transparent)
|
|
||||||
(struct co-array (items) #:transparent)
|
|
||||||
(struct co-stream (dict data) #:transparent)
|
|
||||||
(struct co-version (num) #:transparent)
|
|
||||||
(struct co-header (string) #:transparent)
|
|
||||||
(struct co-string (string) #:transparent)
|
|
||||||
(struct co-io (idx rev thing) #:transparent)
|
|
||||||
(struct co-io-ref (idx rev) #:transparent)
|
|
||||||
(struct co-comment (text) #:transparent)
|
|
||||||
(struct co-trailer (dict) #:transparent)
|
|
||||||
|
|
||||||
(struct co-hash (hash) #:transparent)
|
|
||||||
(struct co-encoding-datum (datum) #:transparent)
|
|
@ -1,75 +0,0 @@
|
|||||||
#lang pitfall/parse
|
|
||||||
|
|
||||||
null
|
|
||||||
true
|
|
||||||
false
|
|
||||||
1
|
|
||||||
-2
|
|
||||||
+100
|
|
||||||
612
|
|
||||||
0.05
|
|
||||||
.25
|
|
||||||
-3.14159
|
|
||||||
300.9001
|
|
||||||
/Type
|
|
||||||
/ThisIsName37
|
|
||||||
/Lime#20Green
|
|
||||||
/SSCN_SomeSecondClassName
|
|
||||||
/Adobe#20Green
|
|
||||||
/The_Key_of_F#23_Minor
|
|
||||||
(Testing)
|
|
||||||
(A\053B)
|
|
||||||
|
|
||||||
%(D:19990209153925-08'00')
|
|
||||||
<1C2D3F>
|
|
||||||
<1C 2D 3F>
|
|
||||||
[0 0 612 792]
|
|
||||||
[(T) -20.5 (H) 4 (E)]
|
|
||||||
[[1 2 3][4 5 6]]
|
|
||||||
<<
|
|
||||||
/Type /Example
|
|
||||||
/Subtype /DictionaryExample
|
|
||||||
/Version 0.01
|
|
||||||
/IntegerItem 12
|
|
||||||
/StringItem (a string)
|
|
||||||
/Subdictionary <<
|
|
||||||
/Item1 0.4
|
|
||||||
/Item2 true
|
|
||||||
/LastItem (not!)
|
|
||||||
/VeryLastItem (OK) >> >>
|
|
||||||
( This string contains \245two octal characters\307 . )
|
|
||||||
(Strings may contain balanced parentheses ( ) and special \ncharacters (*!&}^% and so on).)
|
|
||||||
% a more human-readable dictionary
|
|
||||||
<<
|
|
||||||
/Type /Page
|
|
||||||
/Author (Leonard Rosenthol)
|
|
||||||
/Resources 42
|
|
||||||
>>
|
|
||||||
% stripped
|
|
||||||
<</Length 3112/Subtype/XML/Type/Metadata>>
|
|
||||||
|
|
||||||
<<
|
|
||||||
/Type /Xobject /Subtype /Image /Filter /FlateDecode /Length 4 /Height 32 /Width 32
|
|
||||||
>>
|
|
||||||
stream
|
|
||||||
abcd
|
|
||||||
endstream
|
|
||||||
|
|
||||||
12 0 obj
|
|
||||||
( Brillig )
|
|
||||||
endobj
|
|
||||||
|
|
||||||
8 0 obj
|
|
||||||
63
|
|
||||||
endobj
|
|
||||||
|
|
||||||
7 0 obj
|
|
||||||
<< /Length 8 0 R >>
|
|
||||||
stream
|
|
||||||
BT
|
|
||||||
/F1 12 Tf
|
|
||||||
72 712 Td
|
|
||||||
(A stream with an indirect length) Tj
|
|
||||||
ET
|
|
||||||
endstream
|
|
||||||
endobj
|
|
@ -1,46 +0,0 @@
|
|||||||
#lang at-exp br
|
|
||||||
(require brag/support)
|
|
||||||
(provide make-tokenizer)
|
|
||||||
|
|
||||||
(define-lex-abbrev digit (char-set "0123456789"))
|
|
||||||
(define-lex-abbrev hex-digit (:or digit (char-set "ABCDEF")))
|
|
||||||
(define-lex-abbrev digits (:+ digit))
|
|
||||||
(define-lex-abbrev optional-sign (:? (:or "+" "-")))
|
|
||||||
(define-lex-abbrev pdf-whitespace (char-set "\u0000\t\n\f\r "))
|
|
||||||
(define-lex-abbrev pdf-delimiter (char-set "()<>[]{}/%"))
|
|
||||||
#;(define-lex-abbrev pdf-reg)
|
|
||||||
(define-lex-abbrev blackspace (:~ pdf-whitespace))
|
|
||||||
(define-lex-abbrev not-right-paren (:~ ")"))
|
|
||||||
(define-lex-abbrev substring (:seq "(" (:* not-right-paren) ")"))
|
|
||||||
(define-lex-abbrev nonreg-char (:seq "#" hex-digit hex-digit))
|
|
||||||
(define-lex-abbrev pdf-eol (:or #\return #\newline (:: #\return #\newline)))
|
|
||||||
|
|
||||||
(define (make-tokenizer port [src #f])
|
|
||||||
(port-count-lines! port)
|
|
||||||
(lexer-file-path src)
|
|
||||||
(define lex-one-token
|
|
||||||
(lexer-srcloc
|
|
||||||
[(eof) eof]
|
|
||||||
[(:seq "%%EOF" any-string) eof]
|
|
||||||
[(:seq digits (:+ pdf-whitespace) digits (:+ pdf-whitespace) "R")
|
|
||||||
(token 'INDIRECT-OBJECT-REF-TOK (map string->number (string-split lexeme)))]
|
|
||||||
[(:seq "%PDF-" digits "." digits
|
|
||||||
(:? (:: pdf-eol "%" (:>= 4 (:~ (union #\return #\newline)))))) (token 'PDF-HEADER lexeme)]
|
|
||||||
[pdf-whitespace (token 'IGNORE lexeme #:skip? #t)]
|
|
||||||
[(from/stop-before "%" #\newline) (token 'COMMENT lexeme #:skip? #t)]
|
|
||||||
[(:or "true" "false") (token 'BOOLEAN (equal? lexeme "true"))]
|
|
||||||
[(:seq optional-sign digits) (token 'INT (string->number lexeme))]
|
|
||||||
[(:seq optional-sign (:or (:seq digits "." (:? digits))
|
|
||||||
(:seq "." digits)))
|
|
||||||
(token 'REAL (string->number lexeme))]
|
|
||||||
[(from/stop-before "/" (:or pdf-delimiter pdf-whitespace)) (token 'NAME lexeme)]
|
|
||||||
["null" (token 'NULL 'null)]
|
|
||||||
[(:seq "(" (:* (:or not-right-paren substring)) ")") (token 'STRING-TOK lexeme)]
|
|
||||||
[(:seq hex-digit hex-digit) (token 'HEX-DIGIT-PAIR (string->number lexeme 16))]
|
|
||||||
[(:or "<" ">" "[" "]" "obj" "endobj" "trailer") (token lexeme lexeme)]
|
|
||||||
[(from/to "stream" "endstream") (token 'STREAM-DATA (string-trim (trim-ends "stream" lexeme "endstream") "\n"))]
|
|
||||||
[any-char (token 'CHAR lexeme)]))
|
|
||||||
(λ () (lex-one-token port)))
|
|
||||||
|
|
||||||
(module+ test
|
|
||||||
(apply-tokenizer-maker make-tokenizer @string-append{(s(t)r) << /A (B) >>}))
|
|
@ -1,134 +0,0 @@
|
|||||||
#lang at-exp br
|
|
||||||
(require pitfall/render)
|
|
||||||
|
|
||||||
(define cosh (make-co-hash))
|
|
||||||
|
|
||||||
;; catalog object
|
|
||||||
(+co-hash cosh 1 (co-catalog #:pages (make-co-io-ref 2)))
|
|
||||||
|
|
||||||
;; pages
|
|
||||||
(+co-hash cosh 2 (co-pages #:kids (list (make-co-io-ref 3))
|
|
||||||
#:count 1))
|
|
||||||
;; page
|
|
||||||
(+co-hash cosh 3 (co-page #:parent (make-co-io-ref 2)
|
|
||||||
#:mediabox '(0 0 400 400)
|
|
||||||
#:resources (make-co-io-ref 4)
|
|
||||||
#:contents (make-co-io-ref 5)
|
|
||||||
|
|
||||||
; the value of annots must be an array
|
|
||||||
#:annots (co-array (list (make-co-io-ref 7)))
|
|
||||||
))
|
|
||||||
#;#:annots #;(make-co-io-ref 7)
|
|
||||||
|
|
||||||
;; resources
|
|
||||||
(+co-hash cosh 4
|
|
||||||
(make-co-dict
|
|
||||||
'ProcSet (co-array '(PDF Text))
|
|
||||||
'Font (make-co-dict 'F1 (make-co-io-ref 6)
|
|
||||||
'F2 (make-co-io-ref 9)
|
|
||||||
'F3 (make-co-io-ref 12))))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(define (typeset-text str size font-path)
|
|
||||||
(report
|
|
||||||
(string->bytes/latin-1
|
|
||||||
(string-append*
|
|
||||||
(for/list ([c (in-string str)])
|
|
||||||
(format "(~a) Tj ~a 0 Td" c (/ (* size (measure-char font-path c)) 1000.0)))))))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;; Charter font
|
|
||||||
(define charter-font-path "charter.otf")
|
|
||||||
(+co-hash cosh 6
|
|
||||||
(make-co-dict
|
|
||||||
'Type 'Font
|
|
||||||
'Subtype 'Type1
|
|
||||||
'Name 'F1
|
|
||||||
'FontDescriptor (make-co-dict
|
|
||||||
'Type 'FontDescriptor
|
|
||||||
'FontFile3 (make-co-io-ref 8)
|
|
||||||
'Flags 4
|
|
||||||
'FontBBox (co-array '(-177 -269 1123 866))
|
|
||||||
'MissingWidth 255
|
|
||||||
'StemV 105
|
|
||||||
'StemH 45
|
|
||||||
'CapHeight 660
|
|
||||||
'XHeight 394
|
|
||||||
'Ascent 720
|
|
||||||
'Descent -270
|
|
||||||
'Leading 83
|
|
||||||
'MaxWidth 1212
|
|
||||||
'AvgWidth 478
|
|
||||||
'ItalicAngle 0)))
|
|
||||||
|
|
||||||
(+co-hash cosh 8 (make-font-co-stream charter-font-path))
|
|
||||||
|
|
||||||
;; Miso font
|
|
||||||
(define miso-font-path "miso.otf")
|
|
||||||
(+co-hash cosh 9
|
|
||||||
(make-co-dict
|
|
||||||
'Type 'Font
|
|
||||||
'Subtype 'Type1
|
|
||||||
'Name 'F2
|
|
||||||
'FontDescriptor (make-co-dict
|
|
||||||
'Type 'FontDescriptor
|
|
||||||
'FontFile3 (make-co-io-ref 10)
|
|
||||||
'Flags 4
|
|
||||||
'FontBBox (co-array '(-177 -269 1123 866))
|
|
||||||
'MissingWidth 255
|
|
||||||
'StemV 105
|
|
||||||
'StemH 45
|
|
||||||
'CapHeight 660
|
|
||||||
'XHeight 394
|
|
||||||
'Ascent 720
|
|
||||||
'Descent -270
|
|
||||||
'Leading 83
|
|
||||||
'MaxWidth 1212
|
|
||||||
'AvgWidth 478
|
|
||||||
'ItalicAngle 0)))
|
|
||||||
|
|
||||||
(+co-hash cosh 10 (make-font-co-stream miso-font-path))
|
|
||||||
|
|
||||||
;; fira font
|
|
||||||
(define fira-font-path "fira.otf")
|
|
||||||
(+co-hash cosh 12
|
|
||||||
(make-co-dict
|
|
||||||
'Type 'Font
|
|
||||||
'Subtype 'Type1
|
|
||||||
'Name 'F3
|
|
||||||
'FontDescriptor (make-co-dict
|
|
||||||
'Type 'FontDescriptor
|
|
||||||
'FontFile3 (make-co-io-ref 13)
|
|
||||||
'Flags 4
|
|
||||||
'FontBBox (co-array '(-177 -269 1123 866))
|
|
||||||
'MissingWidth 255
|
|
||||||
'StemV 105
|
|
||||||
'StemH 45
|
|
||||||
'CapHeight 660
|
|
||||||
'XHeight 394
|
|
||||||
'Ascent 720
|
|
||||||
'Descent -270
|
|
||||||
'Leading 83
|
|
||||||
'MaxWidth 1212
|
|
||||||
'AvgWidth 478
|
|
||||||
'ItalicAngle 0)))
|
|
||||||
|
|
||||||
(+co-hash cosh 13 (make-font-co-stream fira-font-path))
|
|
||||||
|
|
||||||
|
|
||||||
;; contents
|
|
||||||
(+co-hash cosh 5
|
|
||||||
(make-co-stream
|
|
||||||
(bytes-append
|
|
||||||
#"BT /F1 36 Tf 50 50 Td"
|
|
||||||
(typeset-text "Hello World 4-1" 36 charter-font-path)
|
|
||||||
#"/F2 36 Tf -250 50 Td"
|
|
||||||
(typeset-text "Enchilada 10" 36 miso-font-path)
|
|
||||||
#"/F3 36 Tf -150 50 Td"
|
|
||||||
(typeset-text "Boing Me 5" 36 fira-font-path)
|
|
||||||
#"ET")))
|
|
||||||
|
|
||||||
(render cosh)
|
|
Loading…
Reference in New Issue