diff --git a/.gitignore b/.gitignore index 04a7431..10292d6 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ ref/ pages/ releases/ release-archives/ +snapshot/assets/ # Generated scripts .buildglyphs.all.patel diff --git a/images/family.png b/images/family.png index 2f8d7a7..235d313 100644 Binary files a/images/family.png and b/images/family.png differ diff --git a/images/languages-light.png b/images/languages-light.png deleted file mode 100644 index e419058..0000000 Binary files a/images/languages-light.png and /dev/null differ diff --git a/images/languages-slab-light.png b/images/languages-slab-light.png deleted file mode 100644 index 6b74fc8..0000000 Binary files a/images/languages-slab-light.png and /dev/null differ diff --git a/images/languages-slab.png b/images/languages-slab.png deleted file mode 100644 index 6e20e92..0000000 Binary files a/images/languages-slab.png and /dev/null differ diff --git a/images/languages.png b/images/languages.png index ac5441a..fbf1fa4 100644 Binary files a/images/languages.png and b/images/languages.png differ diff --git a/images/matrix.png b/images/matrix.png new file mode 100644 index 0000000..f2c7c94 Binary files /dev/null and b/images/matrix.png differ diff --git a/images/opentype.png b/images/opentype.png index 62a2ed9..8d2b79d 100644 Binary files a/images/opentype.png and b/images/opentype.png differ diff --git a/images/preview-all.png b/images/preview-all.png index c576726..d0af0a3 100644 Binary files a/images/preview-all.png and b/images/preview-all.png differ diff --git a/images/preview-light.png b/images/preview-light.png deleted file mode 100644 index dffecc1..0000000 Binary files a/images/preview-light.png and /dev/null differ diff --git a/images/preview-slab-light.png b/images/preview-slab-light.png deleted file mode 100644 index 3f0398a..0000000 Binary files a/images/preview-slab-light.png and /dev/null differ diff --git a/images/preview-slab.png b/images/preview-slab.png deleted file mode 100644 index 1d3cd68..0000000 Binary files a/images/preview-slab.png and /dev/null differ diff --git a/images/preview.png b/images/preview.png deleted file mode 100644 index a98ef02..0000000 Binary files a/images/preview.png and /dev/null differ diff --git a/images/variants.png b/images/variants.png index 3fcf7a0..7e6985c 100644 Binary files a/images/variants.png and b/images/variants.png differ diff --git a/images/weights.png b/images/weights.png index 507cb4b..df92a26 100644 Binary files a/images/weights.png and b/images/weights.png differ diff --git a/makefile b/makefile index 3245f81..98236cf 100644 --- a/makefile +++ b/makefile @@ -10,6 +10,7 @@ LOOPS = 0 1 2 svgs : svgs-default svgs-slab fonts : fonts-default fonts-slab test : test-default test-slab +snapshot : snapshot-default snapshot-slab # svgs svgs-default : $(SCRIPTS) | $(OBJDIR) dist @@ -32,6 +33,12 @@ test-default : fonts-default @$(MAKE) -f onegroup.mk test $(PARAM_DEFAULT) test-slab : fonts-slab @$(MAKE) -f onegroup.mk test $(PARAM_SLAB) + +# snapshot +snapshot-default : webfonts-default | snapshot/assets + @$(MAKE) -f onegroup.mk snapshot $(PARAM_DEFAULT) +snapshot-slab : webfonts-slab | snapshot/assets + @$(MAKE) -f onegroup.mk snapshot $(PARAM_SLAB) # Webfonts dist/webfonts : | dist @@ -85,53 +92,22 @@ fw : fonts-fw fonts-cc webfonts : webfonts-default webfonts-slab -images/weights.png : fonts-default fonts-slab - convert -size 4800x1700 xc:white -pointsize 125 \ - -fill black \ - -font dist/iosevka/iosevka-thin.ttf -draw "text 0,121 ' thin float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy) }'" \ - -font dist/iosevka/iosevka-extralight.ttf -draw "text 0,299 'extralight float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy) }'" \ - -font dist/iosevka/iosevka-light.ttf -draw "text 0,478 ' light float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy) }'" \ - -font dist/iosevka/iosevka-regular.ttf -draw "text 0,656 ' regular float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy) }'" \ - -font dist/iosevka/iosevka-medium.ttf -draw "text 0,835 ' medium float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy) }'" \ - -font dist/iosevka/iosevka-bold.ttf -draw "text 0,1013 ' bold float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy) }'" \ - -font dist/iosevka/iosevka-heavy.ttf -draw "text 0,1192 ' heavy float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy) }'" \ - -trim images/weights.png - optipng images/weights.png - -images/variants.png : fonts-default fonts-slab fonts-hooky fonts-zshaped - convert -size 6800x1700 xc:white -pointsize 125 \ - -fill black \ - -font dist/iosevka/iosevka-italic.ttf -draw "text 0,121 'default: '" \ - -font dist/iosevka/iosevka-regular.ttf -draw "fill blue text 750,121 'set ' fill black text 1000,121 'font.name.uniqueSubFamily ' fill green text 2625,121 '\"\\(para.family) \\(para.style) \\(para.version) (\\(para.codename))\"'" \ - -font dist/variant-hooky-iosevka/hooky-iosevka-italic.ttf -draw "text 0,308 ' hooky: '" \ - -font dist/variant-hooky-iosevka/hooky-iosevka-regular.ttf -draw "fill blue text 750,308 'set ' fill black text 1000,308 'font.name.uniqueSubFamily ' fill green text 2625,308 '\"\\(para.family) \\(para.style) \\(para.version) (\\(para.codename))\"'" \ - -font dist/variant-zshaped-iosevka/zshaped-iosevka-italic.ttf -draw "text 0,496 'zshaped: '" \ - -font dist/variant-zshaped-iosevka/zshaped-iosevka-regular.ttf -draw "fill blue text 750,496 'set ' fill black text 1000,496 'font.name.uniqueSubFamily ' fill green text 2625,496 '\"\\(para.family) \\(para.style) \\(para.version) (\\(para.codename))\"'" \ - -trim images/variants.png - optipng images/variants.png - -electronsnaps1: pages - cd pages && electron getsnap.js --dir ../images +electronsnaps1: webfonts snapshot + cd snapshot && electron getsnap.js --dir ../images images/opentype.png: electronsnaps1 optipng $@ images/languages.png: electronsnaps1 optipng $@ -images/languages-slab.png: electronsnaps1 +images/preview-all.png: electronsnaps1 optipng $@ -images/languages-light.png: electronsnaps1 +images/weights.png: electronsnaps1 optipng $@ -images/languages-slab-light.png: electronsnaps1 +images/variants.png: electronsnaps1 optipng $@ -images/preview.png: electronsnaps1 +images/matrix.png: electronsnaps1 optipng $@ -images/preview-slab.png: electronsnaps1 - optipng $@ -images/preview-light.png: electronsnaps1 - optipng $@ -images/preview-slab-light.png: electronsnaps1 - optipng $@ -images/preview-all.png: images/preview.png images/preview-light.png images/preview-slab.png images/preview-slab-light.png - convert $^ -append $@ +images/family.png: electronsnaps1 optipng $@ -sampleimages: images/weights.png images/variants.png images/opentype.png images/languages.png images/languages-slab.png images/languages-light.png images/languages-slab-light.png images/preview.png images/preview-slab.png images/preview-light.png images/preview-slab-light.png images/preview-all.png \ No newline at end of file + +sampleimages: images/family.png images/matrix.png images/weights.png images/variants.png images/opentype.png images/languages.png images/preview-all.png \ No newline at end of file diff --git a/makesupport.mk b/makesupport.mk index 9dce0a7..a3f71ff 100644 --- a/makesupport.mk +++ b/makesupport.mk @@ -4,6 +4,8 @@ $(OBJDIR) : @- mkdir $@ dist : @- mkdir $@ +snapshot/assets : + @- mkdir $@ PATELC = node ./node_modules/patel/bin/patel-c SUPPORT_FILES_FROM_PTL = support/glyph.js support/spiroexpand.js support/spirokit.js parameters.js support/anchor.js support/point.js support/transform.js diff --git a/onegroup.mk b/onegroup.mk index b207e1d..c54dac9 100644 --- a/onegroup.mk +++ b/onegroup.mk @@ -168,6 +168,11 @@ archives : $(ARCHIVEDIR)/$(ARCPREFIX)$(ARCPREFIXB)-$(VERSION).zip $(ARCHIVEDIR)/ pages : $(PAGESTTF) $(PAGESWOFF) $(PAGESWOFF2) $(PAGESMAPS) webfonts : $(WEBFONTSTTF) $(WEBFONTSWOFF) $(WEBFONTSWOFF2) $(WEBFONTCSS) +SNAPSHOT_ASSETS = $(subst dist/webfonts/,snapshot/,$(WEBFONTSTTF) $(WEBFONTSWOFF) $(WEBFONTSWOFF2) $(WEBFONTCSS)) +$(SNAPSHOT_ASSETS) : snapshot/% : dist/webfonts/% + cp $< $@ +snapshot: $(SNAPSHOT_ASSETS) + # testdrive TESTDIR = testdrive/assets TESTTTF = $(subst $(DISTDIR)/,$(TESTDIR)/,$(DISTTARGETS)) diff --git a/snapshot/getsnap.js b/snapshot/getsnap.js new file mode 100644 index 0000000..c0ec6e1 --- /dev/null +++ b/snapshot/getsnap.js @@ -0,0 +1,87 @@ +var app = require('app'); +var BrowserWindow = require('browser-window'); +var argv = require('yargs').argv; +var fs = require('fs'); +var cp = require('child_process'); + +var mainWindow = null; +var allWindowClosed = false; +var pendingTasks = 0; +var zoom = 2 + +function checkQuit(){ + if(allWindowClosed && pendingTasks == 0) app.quit(); +} + +app.on('window-all-closed', function() { + allWindowClosed = true; + checkQuit() +}); + +function combineImages(images, outfile, width, height, background, padding){ + var command = 'convert ' + images.join(' ') + ' -append -crop ' + width + 'x' + height + '+0+0 +repage -bordercolor rgb(52,52,53) -trim ' + outfile; + console.log(command); + cp.exec(command, function(err, stdout, stderr){ + images.forEach(function(file){ + fs.unlinkSync(file); + }); + pendingTasks -= 1; + checkQuit(); + }) +}; + +var ipc = require('electron').ipcMain; +function GOTO(phase){ currentPhase = phase }; +var phases = { + prepare : function(event, arg){ + console.log(arg); + GOTO(phases['receive-rect']); + }, + 'receive-rect' : function(event, rect){ + pendingTasks += 1 + rect = JSON.parse(JSON.stringify(rect)); + var file = argv.dir + '/' + rect.name + '.png'; + var j = 0; + var totalFiles = Math.ceil(rect.height / rect.windowHeight); + var pendingFiles = totalFiles; + function doneFileWrite(){ + pendingFiles -= 1; + if(pendingFiles <= 0) { + var images = []; + for(var k = 0; k < j; k++){ + images.push(argv.dir + '/' + rect.name + '.' + k + '.png') + } + combineImages(images, file, rect.windowWidth * rect.dpi, rect.height * rect.dpi, rect.background, rect.padding); + } + } + function step(){ + event.sender.send('scroll', rect.y + j * rect.windowHeight); + GOTO(function(event){ + mainWindow.capturePage(function(image){ + fs.writeFile(argv.dir + '/' + rect.name + '.' + j + '.png', image.toPng(), doneFileWrite); + j += 1; + if(j >= totalFiles) { // Move to next image + event.sender.send('complete', file); + GOTO(phases['receive-rect']); + } else { + step() + } + }) + }) + }; + step() + } +}; +var currentPhase = phases['prepare']; +ipc.on('snapshot', function(){ + currentPhase.apply(this, arguments) +}); +ipc.on('log', function(event, arg){ + console.log(arg); +}) + +app.on('ready', function() { + mainWindow = new BrowserWindow({width: 64 * 16 * zoom, height: 1024 * zoom, x: 5000, y: 5000, zoomFactor: zoom}); + mainWindow.loadURL('file://' + __dirname + '/index.html'); + //mainWindow.hide(); +}); \ No newline at end of file diff --git a/snapshot/index.html b/snapshot/index.html new file mode 100644 index 0000000..7241fc2 --- /dev/null +++ b/snapshot/index.html @@ -0,0 +1,478 @@ + + + +
+ +SAMPLE_CODE(TestMyTypefaceCodeSnippet, "Iosevka", DARK) { // The quick brown fox jumps over the lazy dog.
+ const wchar_t* code = L"(<#part>\\d+)(<#capture>(<section>(<&part>)))((<&capture>).){3}(<&capture>)";
+ RegexNode node = (rCapture(L"section", r_d().Some()) + rC(L'.')).Loop(3, 3) + rCapture(L"section", r_d().Some());
+ ThePatternsMustBeSame(code, node); // Clarity : [i l I 1] [0 O 8] 1234567890. {}[]()<>$*-+=/#_%^@\&|~?'"`!,.;:
+}
SAMPLE_CODE(TestMyTypefaceCodeSnippet, "Iosevka", LIGHT) { // The quick brown fox jumps over the lazy dog.
+ const wchar_t* code = L"(<#part>\\d+)(<#capture>(<section>(<&part>)))((<&capture>).){3}(<&capture>)";
+ RegexNode node = (rCapture(L"section", r_d().Some()) + rC(L'.')).Loop(3, 3) + rCapture(L"section", r_d().Some());
+ ThePatternsMustBeSame(code, node); // Clarity : [i l I 1] [0 O 8] 1234567890. {}[]()<>$*-+=/#_%^@\&|~?'"`!,.;:
+}
SAMPLE_CODE(TestMyTypefaceCodeSnippet, "Iosevka Slab", DARK) { // The quick brown fox jumps over the lazy dog.
+ const wchar_t* code = L"(<#part>\\d+)(<#capture>(<section>(<&part>)))((<&capture>).){3}(<&capture>)";
+ RegexNode node = (rCapture(L"section", r_d().Some()) + rC(L'.')).Loop(3, 3) + rCapture(L"section", r_d().Some());
+ ThePatternsMustBeSame(code, node); // Clarity : [i l I 1] [0 O 8] 1234567890. {}[]()<>$*-+=/#_%^@\&|~?'"`!,.;:
+}
SAMPLE_CODE(TestMyTypefaceCodeSnippet, "Iosevka Slab", LIGHT) { // The quick brown fox jumps over the lazy dog.
+ const wchar_t* code = L"(<#part>\\d+)(<#capture>(<section>(<&part>)))((<&capture>).){3}(<&capture>)";
+ RegexNode node = (rCapture(L"section", r_d().Some()) + rC(L'.')).Loop(3, 3) + rCapture(L"section", r_d().Some());
+ ThePatternsMustBeSame(code, node); // Clarity : [i l I 1] [0 O 8] 1234567890. {}[]()<>$*-+=/#_%^@\&|~?'"`!,.;:
+}
var languages = [
+ {lang: 'English', sample: 'Shaw, those twelve beige hooks are joined if I patch a young, gooey mouth.'},
+ {lang: 'IPA', sample: '[ɢʷɯʔ.nas.doːŋ.kʰlja] [ŋan.ȵʑi̯wo.ɕi̯uĕn.ɣwa]'},
+ {lang: 'Bulgarian', sample: 'Я, пазачът Вальо уж бди, а скришом хапва кюфтенца зад щайгите.'},
+ {lang: 'Czech', sample: 'Nechť již hříšné saxofony ďáblů rozezvučí síň úděsnými tóny waltzu, tanga a quickstepu.'},
+ {lang: 'Finnish', sample: 'Charles Darwin jammaili Åken hevixylofonilla Qatarin yöpub Zeligissä.'},
+ {lang: 'French', sample: 'Voix ambiguë d’un cœur qui au zéphyr préfère les jattes de kiwi.'},
+ {lang: 'German', sample: 'Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich.'},
+ {lang: 'Greek', sample: 'Ταχίστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός.'},
+ {lang: 'Ancient Greek', sample: 'Ἄδμηθ’, ὁρᾷς γὰρ τἀμὰ πράγμαθ’ ὡς ἔχει, λέξαι θέλω σοι πρὶν θανεῖν ἃ βούλομαι. '},
+ {lang: 'Hungarian', sample: 'Jó foxim és don Quijote húszwattos lámpánál ülve egy pár bűvös cipőt készít.'},
+ {lang: 'Icelandic', sample: 'Kæmi ný öxi hér, ykist þjófum nú bæði víl og ádrepa.'},
+ {lang: 'Irish', sample: 'Ċuaiġ bé ṁórṡáċ le dlúṫspád fíorḟinn trí hata mo ḋea-ṗorcáin ḃig.'},
+ {lang: 'Latvian', sample: 'Muļķa hipiji mēģina brīvi nogaršot celofāna žņaudzējčūsku.'},
+ {lang: 'Lithuanian', sample: 'Įlinkdama fechtuotojo špaga sublykčiojusi pragręžė apvalų arbūzą.'},
+ {lang: 'Macedonian', sample: 'Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех.'},
+ {lang: 'Norwegian', sample: 'Jeg begynte å fortære en sandwich mens jeg kjørte taxi på vei til quiz'},
+ {lang: 'Polish', sample: 'Pchnąć w tę łódź jeża lub ośm skrzyń fig.'},
+ {lang: 'Portuguese', sample: 'Luís argüia à Júlia que «brações, fé, chá, óxido, pôr, zângão» eram palavras do português.'},
+ {lang: 'Romanian', sample: 'Înjurând pițigăiat, zoofobul comandă vexat whisky și tequila.'},
+ {lang: 'Russian', sample: 'Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства.'},
+ {lang: 'Serbian', sample: 'Ајшо, лепото и чежњо, за љубав срца мога дођи у Хаџиће на кафу.'},
+ {lang: 'Spanish', sample: 'Benjamín pidió una bebida de kiwi y fresa; Noé, sin vergüenza, la más exquisita champaña del menú.'},
+ {lang: 'Turkish', sample: 'Pijamalı hasta yağız şoföre çabucak güvendi.'},
+ {lang: 'Ukrainian', sample: 'Чуєш їх, доцю, га? Кумедна ж ти, прощайся без ґольфів!'}
+]
+
+default set font.name.uniqueSubFamily "\(para.family) \(para.style) \(para.version) (\(para.codename))" +hooky set font.name.uniqueSubFamily "\(para.family) \(para.style) \(para.version) (\(para.codename))" +zshaped set font.name.uniqueSubFamily "\(para.family) \(para.style) \(para.version) (\(para.codename))" +
+float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy); } +float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy); } +float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy); } +float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy); } +float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy); } +float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy); } +float Fox.quick(h){ is_brown && it_jumps_over(doges.lazy); } +