From 188af54ba015ac4acf40c02a87984545af23d1cc Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 24 Dec 2018 21:22:01 -0800 Subject: [PATCH] gbye --- pitfall/pitfall/old/charter.otf | Bin 26968 -> 0 bytes pitfall/pitfall/old/doc/doc-site.css | 0 pitfall/pitfall/old/doc/doc-site.js | 0 pitfall/pitfall/old/doc/manual-fonts.css | 251 ------ pitfall/pitfall/old/doc/manual-racket.css | 324 -------- pitfall/pitfall/old/doc/manual-racket.js | 98 --- pitfall/pitfall/old/doc/manual-style.css | 770 ------------------ pitfall/pitfall/old/doc/racket.css | 249 ------ pitfall/pitfall/old/doc/scribble-common.js | 170 ---- pitfall/pitfall/old/doc/scribble-style.css | 0 pitfall/pitfall/old/doc/scribble.css | 485 ----------- pitfall/pitfall/old/fira.otf | Bin 113100 -> 0 bytes pitfall/pitfall/old/foo.rkt | 75 -- pitfall/pitfall/old/glyph-list.rkt | 645 --------------- pitfall/pitfall/old/info.rkt | 3 - pitfall/pitfall/old/main.rkt | 3 - pitfall/pitfall/old/measure.rkt | 31 - .../pitfall/old/minimal-annotation-square.rkt | 39 - .../pitfall/old/minimal-annotation-text.rkt | 63 -- pitfall/pitfall/old/minimal-embedded-font.rkt | 87 -- pitfall/pitfall/old/minimal-measured-font.rkt | 94 --- pitfall/pitfall/old/minimal-pdf-source.rkt | 40 - pitfall/pitfall/old/minimal-pdf.rkt | 51 -- pitfall/pitfall/old/minimal.pdf | 58 -- pitfall/pitfall/old/miso.otf | Bin 25024 -> 0 bytes pitfall/pitfall/old/parse.rkt | 98 --- pitfall/pitfall/old/parser-test.rkt | 6 - pitfall/pitfall/old/parser.rkt | 21 - pitfall/pitfall/old/render.rkt | 152 ---- pitfall/pitfall/old/sample-ext-encoding.rkt | 146 ---- pitfall/pitfall/old/sample-unicode-text.rkt | 148 ---- pitfall/pitfall/old/struct.rkt | 16 - pitfall/pitfall/old/test.rkt | 75 -- pitfall/pitfall/old/tokenizer.rkt | 46 -- pitfall/pitfall/old/triple-measured-font.rkt | 134 --- 35 files changed, 4378 deletions(-) delete mode 100644 pitfall/pitfall/old/charter.otf delete mode 100644 pitfall/pitfall/old/doc/doc-site.css delete mode 100644 pitfall/pitfall/old/doc/doc-site.js delete mode 100644 pitfall/pitfall/old/doc/manual-fonts.css delete mode 100644 pitfall/pitfall/old/doc/manual-racket.css delete mode 100644 pitfall/pitfall/old/doc/manual-racket.js delete mode 100644 pitfall/pitfall/old/doc/manual-style.css delete mode 100644 pitfall/pitfall/old/doc/racket.css delete mode 100644 pitfall/pitfall/old/doc/scribble-common.js delete mode 100644 pitfall/pitfall/old/doc/scribble-style.css delete mode 100644 pitfall/pitfall/old/doc/scribble.css delete mode 100755 pitfall/pitfall/old/fira.otf delete mode 100644 pitfall/pitfall/old/foo.rkt delete mode 100644 pitfall/pitfall/old/glyph-list.rkt delete mode 100644 pitfall/pitfall/old/info.rkt delete mode 100644 pitfall/pitfall/old/main.rkt delete mode 100644 pitfall/pitfall/old/measure.rkt delete mode 100644 pitfall/pitfall/old/minimal-annotation-square.rkt delete mode 100644 pitfall/pitfall/old/minimal-annotation-text.rkt delete mode 100644 pitfall/pitfall/old/minimal-embedded-font.rkt delete mode 100644 pitfall/pitfall/old/minimal-measured-font.rkt delete mode 100644 pitfall/pitfall/old/minimal-pdf-source.rkt delete mode 100644 pitfall/pitfall/old/minimal-pdf.rkt delete mode 100644 pitfall/pitfall/old/minimal.pdf delete mode 100755 pitfall/pitfall/old/miso.otf delete mode 100644 pitfall/pitfall/old/parse.rkt delete mode 100644 pitfall/pitfall/old/parser-test.rkt delete mode 100644 pitfall/pitfall/old/parser.rkt delete mode 100644 pitfall/pitfall/old/render.rkt delete mode 100644 pitfall/pitfall/old/sample-ext-encoding.rkt delete mode 100644 pitfall/pitfall/old/sample-unicode-text.rkt delete mode 100644 pitfall/pitfall/old/struct.rkt delete mode 100644 pitfall/pitfall/old/test.rkt delete mode 100644 pitfall/pitfall/old/tokenizer.rkt delete mode 100644 pitfall/pitfall/old/triple-measured-font.rkt diff --git a/pitfall/pitfall/old/charter.otf b/pitfall/pitfall/old/charter.otf deleted file mode 100644 index d2314d35b4d86293a74fab34e67183938b73e6d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26968 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, - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -************** End Fira license *********************/ - - diff --git a/pitfall/pitfall/old/doc/manual-racket.css b/pitfall/pitfall/old/doc/manual-racket.css deleted file mode 100644 index dc004316..00000000 --- a/pitfall/pitfall/old/doc/manual-racket.css +++ /dev/null @@ -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; -} diff --git a/pitfall/pitfall/old/doc/manual-racket.js b/pitfall/pitfall/old/doc/manual-racket.js deleted file mode 100644 index 203d6d30..00000000 --- a/pitfall/pitfall/old/doc/manual-racket.js +++ /dev/null @@ -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"; - } - } -} diff --git a/pitfall/pitfall/old/doc/manual-style.css b/pitfall/pitfall/old/doc/manual-style.css deleted file mode 100644 index 074addb1..00000000 --- a/pitfall/pitfall/old/doc/manual-style.css +++ /dev/null @@ -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; - } -} diff --git a/pitfall/pitfall/old/doc/racket.css b/pitfall/pitfall/old/doc/racket.css deleted file mode 100644 index b44fef59..00000000 --- a/pitfall/pitfall/old/doc/racket.css +++ /dev/null @@ -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%; -} diff --git a/pitfall/pitfall/old/doc/scribble-common.js b/pitfall/pitfall/old/doc/scribble-common.js deleted file mode 100644 index 1ec7da58..00000000 --- a/pitfall/pitfall/old/doc/scribble-common.js +++ /dev/null @@ -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= 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= 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(""); - -// 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 - .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; - } -} diff --git a/pitfall/pitfall/old/fira.otf b/pitfall/pitfall/old/fira.otf deleted file mode 100755 index 280fe8a7e49d15eff96f6d533c4fca9341dcfb34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113100 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 Iq(o!>9|KKUBme*a diff --git a/pitfall/pitfall/old/foo.rkt b/pitfall/pitfall/old/foo.rkt deleted file mode 100644 index 9c9e7b8c..00000000 --- a/pitfall/pitfall/old/foo.rkt +++ /dev/null @@ -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 -<> - -<< - /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 \ No newline at end of file diff --git a/pitfall/pitfall/old/glyph-list.rkt b/pitfall/pitfall/old/glyph-list.rkt deleted file mode 100644 index f65d4fe4..00000000 --- a/pitfall/pitfall/old/glyph-list.rkt +++ /dev/null @@ -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) \ No newline at end of file diff --git a/pitfall/pitfall/old/info.rkt b/pitfall/pitfall/old/info.rkt deleted file mode 100644 index 14943fb0..00000000 --- a/pitfall/pitfall/old/info.rkt +++ /dev/null @@ -1,3 +0,0 @@ -#lang info -(define scribblings '(("scribblings/pitfall.scrbl" ()))) - diff --git a/pitfall/pitfall/old/main.rkt b/pitfall/pitfall/old/main.rkt deleted file mode 100644 index 80fa45f9..00000000 --- a/pitfall/pitfall/old/main.rkt +++ /dev/null @@ -1,3 +0,0 @@ -#lang racket/base - - diff --git a/pitfall/pitfall/old/measure.rkt b/pitfall/pitfall/old/measure.rkt deleted file mode 100644 index 06aec3da..00000000 --- a/pitfall/pitfall/old/measure.rkt +++ /dev/null @@ -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)) diff --git a/pitfall/pitfall/old/minimal-annotation-square.rkt b/pitfall/pitfall/old/minimal-annotation-square.rkt deleted file mode 100644 index f7ddbad1..00000000 --- a/pitfall/pitfall/old/minimal-annotation-square.rkt +++ /dev/null @@ -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"))) \ No newline at end of file diff --git a/pitfall/pitfall/old/minimal-annotation-text.rkt b/pitfall/pitfall/old/minimal-annotation-text.rkt deleted file mode 100644 index 6eecdaa5..00000000 --- a/pitfall/pitfall/old/minimal-annotation-text.rkt +++ /dev/null @@ -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"))) \ No newline at end of file diff --git a/pitfall/pitfall/old/minimal-embedded-font.rkt b/pitfall/pitfall/old/minimal-embedded-font.rkt deleted file mode 100644 index cd945919..00000000 --- a/pitfall/pitfall/old/minimal-embedded-font.rkt +++ /dev/null @@ -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")) diff --git a/pitfall/pitfall/old/minimal-measured-font.rkt b/pitfall/pitfall/old/minimal-measured-font.rkt deleted file mode 100644 index 091386cb..00000000 --- a/pitfall/pitfall/old/minimal-measured-font.rkt +++ /dev/null @@ -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"))) diff --git a/pitfall/pitfall/old/minimal-pdf-source.rkt b/pitfall/pitfall/old/minimal-pdf-source.rkt deleted file mode 100644 index 1ffc6ae0..00000000 --- a/pitfall/pitfall/old/minimal-pdf-source.rkt +++ /dev/null @@ -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)))) \ No newline at end of file diff --git a/pitfall/pitfall/old/minimal-pdf.rkt b/pitfall/pitfall/old/minimal-pdf.rkt deleted file mode 100644 index 8e0c0763..00000000 --- a/pitfall/pitfall/old/minimal-pdf.rkt +++ /dev/null @@ -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 \ No newline at end of file diff --git a/pitfall/pitfall/old/minimal.pdf b/pitfall/pitfall/old/minimal.pdf deleted file mode 100644 index 1c641810..00000000 --- a/pitfall/pitfall/old/minimal.pdf +++ /dev/null @@ -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 diff --git a/pitfall/pitfall/old/miso.otf b/pitfall/pitfall/old/miso.otf deleted file mode 100755 index 2b0c62efb789b1f90b28fc549232015efb4ee1d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25024 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 X$pSMJ_x7fp)7CFrziiI7Zfy2b diff --git a/pitfall/pitfall/old/parse.rkt b/pitfall/pitfall/old/parse.rkt deleted file mode 100644 index 7e210d2e..00000000 --- a/pitfall/pitfall/old/parse.rkt +++ /dev/null @@ -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)) diff --git a/pitfall/pitfall/old/parser-test.rkt b/pitfall/pitfall/old/parser-test.rkt deleted file mode 100644 index 6fabf73a..00000000 --- a/pitfall/pitfall/old/parser-test.rkt +++ /dev/null @@ -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) >>})) \ No newline at end of file diff --git a/pitfall/pitfall/old/parser.rkt b/pitfall/pitfall/old/parser.rkt deleted file mode 100644 index 375d0ba8..00000000 --- a/pitfall/pitfall/old/parser.rkt +++ /dev/null @@ -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 \ No newline at end of file diff --git a/pitfall/pitfall/old/render.rkt b/pitfall/pitfall/old/render.rkt deleted file mode 100644 index d7b675de..00000000 --- a/pitfall/pitfall/old/render.rkt +++ /dev/null @@ -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"))) \ No newline at end of file diff --git a/pitfall/pitfall/old/sample-ext-encoding.rkt b/pitfall/pitfall/old/sample-ext-encoding.rkt deleted file mode 100644 index 67314952..00000000 --- a/pitfall/pitfall/old/sample-ext-encoding.rkt +++ /dev/null @@ -1,146 +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 (pdf-char-encode c) - (format "\\~a" (number->string (char->integer c) 8))) - -(define (typeset-text str size font-path) - (string->bytes/latin-1 - (string-append* - (for/list ([c (in-string str)]) - (format "(~a) Tj ~a 0 Td" - (pdf-char-encode 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) - 'Encoding (make-co-io-ref 25))) - -(require "glyph-list.rkt") -(+co-hash cosh 25 - (make-co-dict - 'Type 'Encoding - 'Differences (co-array (flatten glyph-list)))) - -(+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) - 'Encoding (make-co-io-ref 25))) - -(+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) - 'Encoding (make-co-io-ref 25))) - -(+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 "Hel’o Wørld 4-1" 36 charter-font-path) - #"/F2 36 Tf -250 50 Td" - (typeset-text "Ençhîládà 10" 36 miso-font-path) - #"/F3 36 Tf -150 50 Td" - (typeset-text "Bõîng Mé 5" 36 fira-font-path) - #"ET"))) - -(render cosh) diff --git a/pitfall/pitfall/old/sample-unicode-text.rkt b/pitfall/pitfall/old/sample-unicode-text.rkt deleted file mode 100644 index 90692998..00000000 --- a/pitfall/pitfall/old/sample-unicode-text.rkt +++ /dev/null @@ -1,148 +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 (pdf-char-encode c) - (format "<~a>" (string-join (for/list ([b (in-bytes (string->bytes/utf-8 (string c)))]) - (number->string b 16)) " "))) -(pdf-char-encode #\’) - -(define (typeset-text str size font-path) - (string->bytes/latin-1 - (string-append* - (for/list ([c (in-string str)]) - (format "~a Tj ~a 0 Td" - (pdf-char-encode 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) - 'Encoding (make-co-io-ref 25))) - -(require "glyph-list.rkt") -(+co-hash cosh 25 - (make-co-dict - 'Type 'Encoding - 'Differences (co-array (flatten glyph-list)))) - -(+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) - 'Encoding (make-co-io-ref 25))) - -(+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) - 'Encoding (make-co-io-ref 25))) - -(+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 "Hel’o Wørld 4-1" 36 charter-font-path) - #"/F2 36 Tf -250 50 Td" - (typeset-text "Ençhîládà 10" 36 miso-font-path) - #"/F3 36 Tf -150 50 Td" - (typeset-text "Bõîng Mé 5" 36 fira-font-path) - #"ET"))) - -(render cosh) diff --git a/pitfall/pitfall/old/struct.rkt b/pitfall/pitfall/old/struct.rkt deleted file mode 100644 index c870abd6..00000000 --- a/pitfall/pitfall/old/struct.rkt +++ /dev/null @@ -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) \ No newline at end of file diff --git a/pitfall/pitfall/old/test.rkt b/pitfall/pitfall/old/test.rkt deleted file mode 100644 index 9c9e7b8c..00000000 --- a/pitfall/pitfall/old/test.rkt +++ /dev/null @@ -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 -<> - -<< - /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 \ No newline at end of file diff --git a/pitfall/pitfall/old/tokenizer.rkt b/pitfall/pitfall/old/tokenizer.rkt deleted file mode 100644 index 3927a25e..00000000 --- a/pitfall/pitfall/old/tokenizer.rkt +++ /dev/null @@ -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) >>})) \ No newline at end of file diff --git a/pitfall/pitfall/old/triple-measured-font.rkt b/pitfall/pitfall/old/triple-measured-font.rkt deleted file mode 100644 index b88b6466..00000000 --- a/pitfall/pitfall/old/triple-measured-font.rkt +++ /dev/null @@ -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)