From cd70024afaabff974a99888cbeffe318930a6e17 Mon Sep 17 00:00:00 2001 From: "@aphillips" Date: Fri, 13 Nov 2015 11:50:43 -0800 Subject: [PATCH] Add font subsetting Added a greasemonkey script for computing the non-Latin-1 characters in the current document. This is used to obtain a subsetted Noto Sans from google's server. Added font.woff2 generated from the current unique set of code points. Modified the local stylesheet to reference font.woff2. --- SubsetFont.user.js | 57 +++++++++++++++++++++++++++++++++++++++++++++ font.woff2 | Bin 0 -> 6264 bytes local.css | 20 ++++++++++------ 3 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 SubsetFont.user.js create mode 100644 font.woff2 diff --git a/SubsetFont.user.js b/SubsetFont.user.js new file mode 100644 index 0000000..e6d4b1c --- /dev/null +++ b/SubsetFont.user.js @@ -0,0 +1,57 @@ +// ==UserScript== +// @name SubsetFont +// @namespace w3c +// @description Generate subsetted fonts to support charmod +// @version 1 +// @include * +// @grant none +// ==/UserScript== + +// author = addison@lab126.com + +var text = document.body.innerHTML; + +var charsToGet = []; +var request = ''; + +var re = new RegExp("[\u0100-\uffff]", 'g'); + +var unique = 0; + +var m; +while ((m = re.exec(text)) !== null) { + var item = m[0]; + if (charsToGet.length === 0 || charsToGet.indexOf(item) < 0) { + charsToGet.push(item); + request = request + item; + unique++; + } +} + + +//alert(re.test(text) + ' ' + re + ' ' + text.substring(0,100)); + +var mypanel = document.getElementsByClassName('subsetFont')[0]; + +if (!mypanel) { + mypanel = document.createElement('div'); +} +mypanel.innerHTML = ''; + +mypanel.setAttribute('id', 'subsetFont'); +mypanel.setAttribute('class', "subsetFont"); +mypanel.style.position = 'fixed'; +mypanel.style.bottom = 0; +mypanel.style.right = 0; +mypanel.style.overflow = 'auto'; +mypanel.style.inset = '0 0 0 10px'; +mypanel.style.zIndex = '1001'; // make it appear in front of most things + +var pre = document.createElement('pre'); +pre.appendChild(document.createTextNode('count: ' + unique)); +mypanel.appendChild(pre); +pre = document.createElement('pre'); +pre.appendChild(document.createTextNode(request)); +mypanel.appendChild(pre); + +document.body.appendChild(mypanel); \ No newline at end of file diff --git a/font.woff2 b/font.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..22703fc1b46fedc93465a332772cf17cf0dff718 GIT binary patch literal 6264 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 literal 0 HcmV?d00001 diff --git a/local.css b/local.css index 78a2005..5eb8c3d 100644 --- a/local.css +++ b/local.css @@ -1,3 +1,10 @@ +@font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 400; + src: local('Noto Sans'), local('NotoSans'), url('./font.woff2') +} + body { counter-reset: requirement; } @@ -33,10 +40,9 @@ del { figure { margin-bottom: 2em; - text-align: center; - } +} figcaption { - text-align: center; + text-align: center; margin: 0.5em 2em; font-style: italic; font-size: 90%; @@ -72,11 +78,11 @@ a.termref:active { .quote:after { content: '"'; } code { color: #A52A2A; - font-family: Consolas, "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", Monaco, "Courier New", monospace; + font-family: Consolas, "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", Monaco, "Courier New", NotoSans, monospace; font-size: 100%; } samp, kbd { - font-family: Consolas, "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", Monaco, "Courier New", monospace; + font-family: Consolas, "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", Monaco, "Courier New", NotoSans, monospace; font-size: 100%; } .uname { @@ -95,7 +101,7 @@ div.requirement { div.requirement p:before { content: "C" counter(requirement) " \00A0"; - font-family:Tahoma, Geneva, sans-serif; + font-family:Tahoma, Geneva, NotoSans, sans-serif; font-weight: bold; font-size: smaller; text-transform: capitalize; @@ -155,7 +161,7 @@ div.exampleBox { } .markup { - font-family: Lucida Console,monospaced; + font-family: Lucida Console,NotoSans, monospaced; } .shakespeare {