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