remove font pages

master
Matthew Butterick 5 years ago
parent 213c6cf384
commit 70b4c0f10b

@ -1,59 +0,0 @@
#lang pollen
(require pollen/template)
(define-meta tfl-font-template "true")
(define-meta title "Advocate")
margin-note{
div[#:style "text-align:center"]{
link["http://typo.la/ats" #:class 'pdf]{◊image{advocate-type-specimen.png}}
link["http://typo.la/ats" #:class 'buylink]{PDF specimen}
link["https://mbtype.com/fonts/advocate/" #:class 'buylink]{Web demo}
}}
mb-font-specimen{div[#:style "line-height:1.1;margin-top:-0.5rem"]{◊span[#:style "font-family:'advocate-c43';font-size:115%"]{THE SENATORS AND REPRESENTATIVES
shall receive a Compensation for their
Services, to be ascertained by Law, and
strong{paid out of the Treasury of the United
States. They shall in all Cases, except}
span[#:style "font-family:'advocate-slab-c43'"]{Felony, be privileged from Arrest.}
span[#:style "font-family:'advocate-c45'"]{You can edit this paragraph.}}}}
make-buy-table[#:skus (list
advocate
equity-concourse-triplicate-advocate)]
(ie-payment-warning)
font-details{Advocate includes 270 font files:
= 3 weights (regular, medium, bold)
× 3 widths (narrow, regular, wide)
× 2 series (sans, slab)
+ 12 cloned styles
× 3 stylistic variants (normal, tab, mid)
× 3 file formats (OpenType, TrueType-compatible OpenType TT, and WOFF)
Read the link["http://mbtype.com/license"]{font license} (its short) or the link["http://mbtype.com/faq"]{FAQ}
For details on character set and OpenType features, visit link["https://mbtype.com/fonts/advocate/"]{MB Type}
For more than ten people, visit link["https://mbtype.com/fonts/advocate/buy.html"]{MB Type}
}
numbered-list{
An assertive display face for xref{letterhead}, logos, and titles.
Three widths and three weights, with sans and slab serif versions.
Short, plain-English license.
30-day return option.
}

@ -1,64 +0,0 @@
#lang pollen
(require pollen/template)
(define-meta tfl-font-template "true")
(define-meta title "Concourse")
margin-note{
div[#:style "text-align:center"]{
link["http://typo.la/cots" #:class 'pdf]{◊image{concourse-type-specimen.png}}
link["http://typo.la/cots" #:class 'buylink]{PDF specimen}
link["https://mbtype.com/fonts/concourse/" #:class 'buylink]{Web demo}
}}
mb-font-specimen{div[#:style "font-family:'concourse-t3';font-size:108%;position:relative;top:-.5rem;"]{◊span[#:style "text-transform:lowercase;font-family:concourse-c4;font-size:110tripl%"]{THE CONGRESS SHALL HAVE POWER}
to lay and collect Taxes, Duties, Imposts and
Excises, to pay the Debts and provide for the
em{common Defense and general Welfare of the}
strong{United States; but all Duties, Imposts and}
em{strong{Excises shall be uniform throughout.}}
If you like, you can edit this paragraph.}}
make-buy-table[#:skus (list
concourse
equity-concourse
equity-concourse-triplicate-advocate)]
(ie-payment-warning)
font-details{Concourse includes 162 font files:
= 6 weights (light, book, medium, semibold, bold, black)
× 3 series (roman, italic, and caps)
+ 9 cloned styles
× 2 variants (regular and Tab, with tabular figures as the defaults)
× 3 file formats (OpenType, TrueType-compatible OpenType TT, and WOFF)
Read the link["https://mbtype.com/license"]{font license} (its short) or the link["https://mbtype.com/faq"]{FAQ}
For details on character set and OpenType features, visit link["https://mbtype.com/fonts/concourse/"]{MB Type}
For more than ten people, visit link["https://mbtype.com/fonts/concourse/buy.html"]{MB Type}
}
numbered-list{
A sans serif companion for xref{Equity} suitable for text and display uses.
Six weights in the Standard package, with real italics and small caps for every weight. It includes oldstyle and tabular xref{alternate figures}.
The Basic package includes the three weights most useful for legal drafting.
Separate caps fonts, which contain real xref{small caps} and already include my recommended xref{letterspacing}.
Short, plain-English license.
30-day return option.
}

@ -1,60 +0,0 @@
#lang pollen
(require pollen/template)
(define-meta tfl-font-template "true")
(define-meta title "Equity")
margin-note{
div[#:style "text-align:center"]{
link["http://typo.la/eqts" #:class 'pdf]{◊image{equity-type-specimen.png}}
link["http://typo.la/eqts" #:class 'buylink]{PDF specimen}
link["https://mbtype.com/fonts/equity/" #:class 'buylink]{Web demo}
}}
mb-font-specimen{span[#:style "font-family:equity-caps"]{WE THE PEOPLE OF THE UNITED}
States, in Order to form a more perfect Union,
establish Justice, insure domestic Tranquility,
provide for the common Defense, promote the
em{general Welfare, and secure the Blessings of}
strong{Liberty to ourselves and our Posterity.}
If you like, you can edit this paragraph.}
make-buy-table[#:skus (list
equity
equity-concourse
equity-concourse-triplicate-advocate)]
(ie-payment-warning)
font-details{Equity includes 72 font files:
= 6 styles (regular, italic, bold, bold italic, regular caps, bold caps)
× 2 weight grades (A and B)
× 2 variants (regular and Tab, with tabular figures as the defaults)
× 3 file formats (OpenType, TrueType-compatible OpenType TT, and WOFF)
Read the link["https://mbtype.com/license"]{font license} (its short) or the link["https://mbtype.com/faq"]{FAQ}
For details on character set and OpenType features, visit link["https://mbtype.com/fonts/equity/"]{MB Type}
For more than ten people, visit link["https://mbtype.com/fonts/equity/buy.html"]{MB Type}
}
numbered-list{
A workhorse serif font for xref{body text}.
Fits as many words on the page as xref{Times New Roman}, and stays legible down to small xref{point sizes}.
Designed to perform well on both high-end output devices and office printers.
Comes with a separate set of caps fonts, which contain real xref{small caps} and already include my recommended xref{letterspacing}.
Short, plain-English license.
30-day return option.
}

@ -1,23 +0,0 @@
#lang pollen
(require pollen/template)
(define-meta tfl-font-template "true")
(define-meta title "TFL Fonts")
margin-note{Equity, seen in a letterpress version of the link["https://www.mozilla.org/en-US/MPL/"]{Mozilla Public License}.}
image["equity-sm.jpg"]
When I started the em{Typography for Lawyers} project, I was asked "MB, you've designed fonts before. Will you ever design one for lawyers?"
Of course not, I thought. Lawyers hadn't even scratched the surface of the many excellent professional fonts already available.
But over time, lawyers kept nudging me "it would be great if a font could do such-and-such …" After all, many of today's fonts  including xref["a-brief-history-of-times-new-roman.html"]{Times New Roman} were invented to suit the needs of earlier publishers. Why not lawyers?
Like most type designers, I found it impossible to resist an invitation to explore a new realm of typographic geekery. But I'm also happy to share the results with you: the strong{TFL Fonts}, a set of four font families inspired by the needs of legal writers.
The second edition of em{Typography for Lawyers} uses all four: xref{Equity} for xref{body text}, xref{Concourse} for captions and instructions, xref{Triplicate} for typewriter-style samples, and xref{Advocate} for headlines and the front cover. (Of course, you're also reading them right now.)
"Will these fonts comply with my local court rules?" I can't offer legal advice. But I can say that thousands of lawyers have been using the TFL Fonts without incident. In fact, they regularly tell me that judges, clients, and even opposing counsel notice & admire the appearance of their documents.
em{Opposing counsel?} So I'm told. Your mileage may vary, however.

@ -27,6 +27,4 @@ Refreshed layout, featuring four font families — ◊xref{Equity}, ◊xref{Con
home-link["toc.html"]{read excerpts}
home-link[buy-url]{get the book}
home-link["fonts.html"]{get the fonts}
home-link[buy-url]{get the book}

@ -1,107 +0,0 @@
#lang racket/base
(require racket/dict
racket/match
"sku.rkt")
(provide (all-defined-out)
(all-from-out "sku.rkt"))
(define (round-cents float)
(/ (floor (* float 100)) 100))
(define (round-up inc x)
(* (ceiling (/ x inc)) inc))
(define (calc-multi-price base-price people)
(round-cents
(sub1 (round-up 10 (case people
[(1 2) base-price]
[(5) (* base-price 2)]
[(10) (* base-price 3)]
[(20) (* base-price 4)]
[(40) (* base-price 5)]
[(60) (* base-price 6)]
[(80) (* base-price 7)]
[else (error "Too many people")])))))
(define (calc-multi-license sku people)
(define base-price (sku-base-price sku))
(calc-multi-price base-price people))
(define license-increments '(1 2 5 10 20 40 60 80))
(define (make-price-list base-price)
(map (λ(n) (cons n (calc-multi-license base-price n))) license-increments))
(define (get-price sku [people 1])
(with-handlers ([exn:fail? (λ(e) (get-price sku (add1 people)))])
(calc-multi-license sku people)))
(define (get-variant-id sku which)
(dict-ref (sku-variant-ids sku) which))
(define (bc-url item-number)
(format "http://typo.la/bc.html?item=~a" item-number))
(define (make-buy-url sku which)
(bc-url (get-variant-id sku which)))
(define (grid->table grid)
(define (table-row row [cell-tag 'td])
`(tr (th ((style "width:40%")) ,(car row)) ,@(map (λ(c) `(,cell-tag ,c)) (cdr row))))
(define (table-header row)
(table-row row 'th))
`(table ((class "buy-table"))
,(table-header (car grid))
,@(map table-row (cdr grid))))
(define (people->string p)
(string-append (match p
[2 "12"]
[5 "35"]
[10 "610"]) " people"))
(require txexpr racket/string)
(define (textify x)
(cond
;; convert nbsp to string
[(string? x) (string-replace x #px"[\\s#\u00A0]+" " ")]
[(eq? 'nbsp x) " "]
[(list? x) (string-append* (map textify (if (txexpr? x)
(get-elements x)
x)))]))
(module+ test
(require rackunit)
(check-equal?
(textify
'(span (a ((href "equity.html")) "Equity") " + " (a ((href "concourse.html")) "Concourse Standard") " + " (a ((href "triplicate.html")) "Triplicate")))
"Equity + Concourse Standard + Triplicate"))
(define (buy-link sku people)
(define price (get-price sku people))
(define item (textify (sku-name sku)))
`(a ((class "checkout_clicker")
(href "#")
(item ,item)
(label ,(format "~a (~a-person license)" item people))
(quantity ,(number->string people))
(amount ,(number->string price))
(success "/order-success.html")
(failure "/order-failure.html"))
,(format "$~a" price)))
(define (make-buy-grid #:people people-list #:skus sku-list)
(cons
(cons "" (map people->string people-list))
(map (λ(sku) (cons (sku-name sku)
(map (λ(p) (buy-link sku p)) people-list))) sku-list)))
(define (make-buy-table #:people [people-list '(2 5 10)] #:skus sku-list)
(grid->table (make-buy-grid #:people people-list #:skus sku-list)))

@ -54,7 +54,7 @@ Other libraries we'll be using. @racketmodname[sugar] and @racketmodname[txexpr]
@terminal{> raco pkg install hyphenate}
@filepath{pricing-table.rkt} is another custom Racket file for this project. It's up to you whether you store all your functions and definitions in @filepath{pollen.rkt}, or spread them over different source files. Regardless of where you store them, @filepath{pollen.rkt} remains the central gathering point for everything you want to propagate to the @|lang| @racketmodname[pollen] source files in your project.
It's up to you whether you store all your functions and definitions in @filepath{pollen.rkt}, or spread them over different source files. Regardless of where you store them, @filepath{pollen.rkt} remains the central gathering point for everything you want to propagate to the @|lang| @racketmodname[pollen] source files in your project.
@margin-note{If you end up making reusable functions, you can share them between Pollen projects (and with other Racket users, if you want) by moving them into a @italic{package}. For more, see @secref["how-to-create" #:doc '(lib "pkg/scribblings/pkg.scrbl")].}
@ -66,8 +66,7 @@ Other libraries we'll be using. @racketmodname[sugar] and @racketmodname[txexpr]
sugar
txexpr
hyphenate
pollen/unstable/typography
"../pricing-table.rkt")]
pollen/unstable/typography)]
@section{Exports}
@ -76,7 +75,7 @@ Note that @racket[all-defined-out] would only export the definitions that are cr
imported definitions available too, we need to re-export them explicitly with @racket[all-from-out].
@chunk[<provides>
(provide (all-defined-out) (all-from-out "../pricing-table.rkt"))
(provide (all-defined-out))
]

@ -1,34 +0,0 @@
#lang racket/base
(provide (all-defined-out))
;; name = xexpr in table
;; base price = what it sounds like
;; variant-ids = pairs of (people . big cartel id)
(struct sku (name base-price variant-ids))
(define concourse (sku "Concourse" 150 '((1 . 25256145) (2 . 25256442) (5 . 25256445))))
(define hermes-maia (sku "Hermes Maia" 150 '((1 . 25256145) (2 . 25256442) (5 . 25256445))))
(define triplicate (sku "Triplicate" 100 '((1 . 64167442) (2 . 64167463) (5 . 64167466))))
(define advocate (sku "Advocate" 100 '((1 . 102904009) (2 . 102904012) (5 . 102904015))))
(define equity (sku "Equity" 120 '((1 . 14855773) (2 . 21635815) (5 . 14855775))))
(define valkyrie (sku "Valkyrie" 120 '((1 . 14855773) (2 . 21635815) (5 . 14855775))))
(define century-supra (sku "Century Supra" 120 '((1 . 14855773) (2 . 21635815) (5 . 14855775))))
(define text-font+concourse-discount 30)
(define equity-concourse (sku '(span (a ((href "equity.html")) "Equity") " +" nbsp (a ((href "concourse.html")) "Concourse")) (- (+ (sku-base-price equity) (sku-base-price concourse)) text-font+concourse-discount) '((1 . 25256655) (2 . 25256754) (5 . 25256757))))
(define valkyrie-concourse (sku '(span (a ((href "valkyrie.html")) "Valkyrie") " +" nbsp (a ((href "concourse.html")) "Concourse")) (- (+ (sku-base-price equity) (sku-base-price concourse)) text-font+concourse-discount) '((1 . 25256655) (2 . 25256754) (5 . 25256757))))
(define century-supra-concourse (sku '(span (a ((href "century-supra.html")) "Century Supra") " +" nbsp (a ((href "concourse.html")) "Concourse")) (- (+ (sku-base-price equity) (sku-base-price concourse)) text-font+concourse-discount) '((1 . 25256655) (2 . 25256754) (5 . 25256757))))
(define text-font+3-discount 110)
(define equity-concourse-triplicate-advocate (sku '(span (a ((href "equity.html")) "Equity") " +" nbsp (a ((href "concourse.html")) "Concourse") " +" nbsp (a ((href "triplicate.html")) "Triplicate") (br) " +" nbsp (a ((href "advocate.html")) "Advocate")) (- (apply + (map sku-base-price (list equity concourse triplicate advocate))) text-font+3-discount) '((1 . 102904795)(2 . 102904798)(5 . 102904801))))
(define century-supra-concourse-triplicate-advocate (sku '(span (a ((href "century-supra.html")) "Century Supra") " +" nbsp (a ((href "concourse.html")) "Concourse") " +" nbsp (a ((href "triplicate.html")) "Triplicate") (br) " +" nbsp (a ((href "advocate.html")) "Advocate")) (- (apply + (map sku-base-price (list equity concourse triplicate advocate))) text-font+3-discount) '((1 . 102904795)(2 . 102904798)(5 . 102904801))))
(define valkyrie-concourse-triplicate-advocate (sku '(span (a ((href "valkyrie.html")) "Valkyrie") " +" nbsp (a ((href "concourse.html")) "Concourse") " +" nbsp (a ((href "triplicate.html")) "Triplicate") (br) " +" nbsp (a ((href "advocate.html")) "Advocate")) (- (apply + (map sku-base-price (list equity concourse triplicate advocate))) text-font+3-discount) '((1 . 102904795)(2 . 102904798)(5 . 102904801))))

@ -654,6 +654,7 @@ margin-left: ◊(+ single-quote-width)em;
transition: opacity 0.2s;
}
#bottom .span {
display: inline-block,
width: 12%;
@ -665,7 +666,7 @@ margin-left: ◊(+ single-quote-width)em;
#bottom #left,
#bottom #right {
width: 32%;
width: 44%;
}
#bottom a.xref:hover {

@ -90,68 +90,6 @@ if (maybe_ie_ua.indexOf('MSIE ') > 0 || maybe_ie_ua.indexOf('Trident/') > 0) {
(define (empty-string) "")
(define (tfl-font-template-body)
body{
style[#:type "text/css"]{
#tfl-fonts-nav {
top: 0;
width: 29rem;
margin-bottom: 2rem;
font-size: 90%;
}
#tfl-fonts-nav tr:first-child {
background: |content-rule-color|;
make-css-background-gradient[(list |content-rule-color| "#777") '("17%" "100%")]
color: white;
}
#tfl-fonts-nav tr:first-child td {
padding: 0;
padding-top: 0.3em;
padding-bottom: 0.5em;
}
#tfl-fonts-nav tr + tr td {
padding: 0;
}
#tfl-fonts-nav tr + tr td .xref {
display: inline-block;
height: 100%;
width: 100%;
padding-top: 0.3em;
padding-bottom: 0.3em;
box-sizing: content-box;
background: none;
}
#content {
padding-top: 0;
padding-bottom: 2rem;
border-top: 0;
}
}
div[#:id "content"]{
table[#:id "tfl-fonts-nav"]{
tr{td[#:colspan "4"]{xref["fonts.html"]{The TFL fonts designed by Matthew Butterick}}}
tr{
td{xref{Equity}}
td{xref{Concourse}}
td{xref{Triplicate}}
td{xref{Advocate}}}}
doc}
if[(not toolbar?) ""]{
div[#:class "nav-outer" #:id "bottom"]{
div[#:class "nav-inner"]{
span[#:style "width:33%"]{xref["/index.html"]{TFL home}}
span[#:style "width:34%"]{xref["/toc.html"]{Read excerpts}}
span[#:style "width:33%"]{xref[buy-url]{get the book}}}}}})
(define (default-body)
body{ ; use this body for all other pages
div[#:id "top-stripe"]{}
@ -172,15 +110,9 @@ if (maybe_ie_ua.indexOf('MSIE ') > 0 || maybe_ie_ua.indexOf('Trident/') > 0) {
xref["index.html"]{home}
xref{(select 'title previous-page)})}
span{xref["/index.html"]{TFL home}}
span{xref[buy-url]{get the book}}
span{xref["/fonts.html"]{get the fonts}}
span[#:id "right"]{(if next-page xref{(select 'title next-page)} xref["https://www.google.com/search?q=boxer+puppies&safe=off&tbm=isch"]{boxer puppies})}}})})
(->html
(body
(if (select-from-metas 'tfl-font-template metas)
(tfl-font-template-body)
(default-body))))
(->html (body (default-body)))
</html>

@ -1,59 +0,0 @@
#lang pollen
(require pollen/template)
(define-meta tfl-font-template "true")
(define-meta title "Triplicate")
margin-note{
div[#:style "text-align:center"]{
type-specimen{link["http://typo.la/trts" #:class 'pdf]{◊image{triplicate-type-specimen.png}}}
link["http://typo.la/trts" #:class 'buylink]{PDF specimen}
link["https://mbtype.com/fonts/triplicate/" #:class 'buylink]{Web demo}
}}
mb-font-specimen{div[#:style "line-height:1.2;margin-top:-0.5rem"]{◊span[#:style "font-family:'triplicate-t4';font-size:85%"]{EACH HOUSE SHALL BE THE JUDGE OF THE
Elections, Returns and Qualifications
of its own Members, and a Majority of
em{each shall constitute a Quorum to do}
strong{Business; but a smaller Number may}
adjourn from day to day. If you like,
you can edit this paragraph.}}}
make-buy-table[#:skus (list
triplicate
equity-concourse-triplicate-advocate)]
(ie-payment-warning)
font-details{Triplicate includes 144 font files:
= 3 weights (light, book, bold)
× 3 series (roman, italic, caps)
+ 3 cloned styles
× 4 variants (regular, code, poly, short)
× 3 file formats (OpenType, TrueType-compatible OpenType TT, and WOFF)
Read the link["http://mbtype.com/license"]{font license} (its short) or the link["http://mbtype.com/faq"]{FAQ}
For details on character set and OpenType features, visit link["https://mbtype.com/fonts/triplicate/"]{MB Type}
For more than ten people, visit link["https://mbtype.com/fonts/triplicate/buy.html"]{MB Type}
}
numbered-list{
A xref{monospaced font} that's more readable and useful than Courier.
Three weights, with true italics, real xref{small caps}, oldstyle figures, swash caps, box-drawing characters, and other superfluities.
Short, plain-English license.
30-day return option.
}