diff --git a/assets/fonts.scss b/assets/fonts.scss index e0979986..5405e45b 100644 --- a/assets/fonts.scss +++ b/assets/fonts.scss @@ -1,52 +1,88 @@ -/* quicksand-regular - latin-ext_latin */ -@font-face { - font-family: 'Quicksand'; - font-style: normal; - font-weight: 400; - src: url('/fonts/quicksand-v21-latin-ext_latin-regular.eot'); /* IE9 Compat Modes */ - src: local('Quicksand'), - url('/fonts/quicksand-v21-latin-ext_latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('/fonts/quicksand-v21-latin-ext_latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ - url('/fonts/quicksand-v21-latin-ext_latin-regular.woff') format('woff'), /* Modern Browsers */ - url('/fonts/quicksand-v21-latin-ext_latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ - url('/fonts/quicksand-v21-latin-ext_latin-regular.svg#Quicksand') format('svg'); /* Legacy iOS */ +@use "sass:list"; + +@if list.index($fonts, 'Quicksand') { + /* quicksand-regular - latin-ext_latin */ + @font-face { + font-family: 'Quicksand'; + font-style: normal; + font-weight: 400; + src: url('/fonts/quicksand-v21-latin-ext_latin-regular.eot'); /* IE9 Compat Modes */ + src: local('Quicksand'), + url('/fonts/quicksand-v21-latin-ext_latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('/fonts/quicksand-v21-latin-ext_latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('/fonts/quicksand-v21-latin-ext_latin-regular.woff') format('woff'), /* Modern Browsers */ + url('/fonts/quicksand-v21-latin-ext_latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('/fonts/quicksand-v21-latin-ext_latin-regular.svg#Quicksand') format('svg'); /* Legacy iOS */ + } + /* quicksand-700 - latin-ext_latin */ + @font-face { + font-family: 'Quicksand'; + font-style: normal; + font-weight: 700; + src: url('/fonts/quicksand-v21-latin-ext_latin-700.eot'); /* IE9 Compat Modes */ + src: local('Quicksand'), + url('/fonts/quicksand-v21-latin-ext_latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('/fonts/quicksand-v21-latin-ext_latin-700.woff2') format('woff2'), /* Super Modern Browsers */ + url('/fonts/quicksand-v21-latin-ext_latin-700.woff') format('woff'), /* Modern Browsers */ + url('/fonts/quicksand-v21-latin-ext_latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ + url('/fonts/quicksand-v21-latin-ext_latin-700.svg#Quicksand') format('svg'); /* Legacy iOS */ + } } -/* quicksand-700 - latin-ext_latin */ -@font-face { - font-family: 'Quicksand'; - font-style: normal; - font-weight: 700; - src: url('/fonts/quicksand-v21-latin-ext_latin-700.eot'); /* IE9 Compat Modes */ - src: local('Quicksand'), - url('/fonts/quicksand-v21-latin-ext_latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('/fonts/quicksand-v21-latin-ext_latin-700.woff2') format('woff2'), /* Super Modern Browsers */ - url('/fonts/quicksand-v21-latin-ext_latin-700.woff') format('woff'), /* Modern Browsers */ - url('/fonts/quicksand-v21-latin-ext_latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ - url('/fonts/quicksand-v21-latin-ext_latin-700.svg#Quicksand') format('svg'); /* Legacy iOS */ + +@if list.index($fonts, 'Nunito') { + /* nunito-regular - latin-ext_latin_cyrillic-ext_cyrillic */ + @font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.eot'); /* IE9 Compat Modes */ + src: local(''), + url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.woff') format('woff'), /* Modern Browsers */ + url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.svg#Nunito') format('svg'); /* Legacy iOS */ + } + /* nunito-700 - latin-ext_latin_cyrillic-ext_cyrillic */ + @font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 700; + src: url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.eot'); /* IE9 Compat Modes */ + src: local(''), + url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.woff2') format('woff2'), /* Super Modern Browsers */ + url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.woff') format('woff'), /* Modern Browsers */ + url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.ttf') format('truetype'), /* Safari, Android, iOS */ + url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.svg#Nunito') format('svg'); /* Legacy iOS */ + } } -/* nunito-regular - latin-ext_latin_cyrillic-ext_cyrillic */ -@font-face { - font-family: 'Nunito'; - font-style: normal; - font-weight: 400; - src: url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.eot'); /* IE9 Compat Modes */ - src: local(''), - url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.woff2') format('woff2'), /* Super Modern Browsers */ - url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.woff') format('woff'), /* Modern Browsers */ - url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.ttf') format('truetype'), /* Safari, Android, iOS */ - url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-regular.svg#Nunito') format('svg'); /* Legacy iOS */ -} -/* nunito-700 - latin-ext_latin_cyrillic-ext_cyrillic */ -@font-face { - font-family: 'Nunito'; - font-style: normal; - font-weight: 700; - src: url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.eot'); /* IE9 Compat Modes */ - src: local(''), - url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.woff2') format('woff2'), /* Super Modern Browsers */ - url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.woff') format('woff'), /* Modern Browsers */ - url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.ttf') format('truetype'), /* Safari, Android, iOS */ - url('/fonts/nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-700.svg#Nunito') format('svg'); /* Legacy iOS */ + +@if list.index($fonts, 'Zen Maru Gothic') { + /* zen-maru-gothic-regular - latin_japanese */ + @font-face { + font-family: 'Zen Maru Gothic'; + font-style: normal; + font-weight: 400; + src: url('/fonts/zen-maru-gothic-v4-latin_japanese-regular.eot'); /* IE9 Compat Modes */ + src: local(''), + url('/fonts/zen-maru-gothic-v4-latin_japanese-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('/fonts/zen-maru-gothic-v4-latin_japanese-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('/fonts/zen-maru-gothic-v4-latin_japanese-regular.woff') format('woff'), /* Modern Browsers */ + url('/fonts/zen-maru-gothic-v4-latin_japanese-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('/fonts/zen-maru-gothic-v4-latin_japanese-regular.svg#ZenMaruGothic') format('svg'); /* Legacy iOS */ + } + /* zen-maru-gothic-700 - latin_japanese */ + @font-face { + font-family: 'Zen Maru Gothic'; + font-style: normal; + font-weight: 700; + src: url('/fonts/zen-maru-gothic-v4-latin_japanese-700.eot'); /* IE9 Compat Modes */ + src: local(''), + url('/fonts/zen-maru-gothic-v4-latin_japanese-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('/fonts/zen-maru-gothic-v4-latin_japanese-700.woff2') format('woff2'), /* Super Modern Browsers */ + url('/fonts/zen-maru-gothic-v4-latin_japanese-700.woff') format('woff'), /* Modern Browsers */ + url('/fonts/zen-maru-gothic-v4-latin_japanese-700.ttf') format('truetype'), /* Safari, Android, iOS */ + url('/fonts/zen-maru-gothic-v4-latin_japanese-700.svg#ZenMaruGothic') format('svg'); /* Legacy iOS */ + } } diff --git a/assets/style.scss b/assets/style.scss index 62759616..6ae710d5 100644 --- a/assets/style.scss +++ b/assets/style.scss @@ -1,7 +1,7 @@ -@import "fonts"; - @import "variables"; +@import "fonts"; + @import "~bootstrap/scss/root"; @import "~bootstrap/scss/reboot"; @import "~bootstrap/scss/type"; diff --git a/assets/variables.scss b/assets/variables.scss index 39e8d3c1..5fc0fc5c 100644 --- a/assets/variables.scss +++ b/assets/variables.scss @@ -1,5 +1,8 @@ -$font-family-sans-serif: Nunito, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; -$headings-font-family: Quicksand, Nunito, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; +@import "../data/variables"; +$fonts: $fontHeadings $fontText; + +$font-family-sans-serif: $fontText, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; +$headings-font-family: $fontHeadings, $fontText, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; $primary: #C71585; $alert-border-level: -3; diff --git a/locale/_/variables.scss b/locale/_/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/_/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/_base/variables.scss b/locale/_base/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/_base/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/de/variables.scss b/locale/de/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/de/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/en/variables.scss b/locale/en/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/en/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/es/variables.scss b/locale/es/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/es/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/fr/variables.scss b/locale/fr/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/fr/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/gl/variables.scss b/locale/gl/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/gl/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/ja/variables.scss b/locale/ja/variables.scss new file mode 100644 index 00000000..c7a3c753 --- /dev/null +++ b/locale/ja/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Zen Maru Gothic'; +$fontText: 'Zen Maru Gothic'; diff --git a/locale/nl/variables.scss b/locale/nl/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/nl/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/no/variables.scss b/locale/no/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/no/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/pl/variables.scss b/locale/pl/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/pl/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/pt/variables.scss b/locale/pt/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/pt/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/ru/variables.scss b/locale/ru/variables.scss new file mode 100644 index 00000000..62e46727 --- /dev/null +++ b/locale/ru/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Nunito'; +$fontText: 'Nunito'; diff --git a/locale/yi/variables.scss b/locale/yi/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/yi/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/locale/zh/variables.scss b/locale/zh/variables.scss new file mode 100644 index 00000000..2c90afdf --- /dev/null +++ b/locale/zh/variables.scss @@ -0,0 +1,2 @@ +$fontHeadings: 'Quicksand'; +$fontText: 'Nunito'; diff --git a/server/localeFont.js b/server/localeFont.js new file mode 100644 index 00000000..03b5ae17 --- /dev/null +++ b/server/localeFont.js @@ -0,0 +1,27 @@ +import {registerFont} from "canvas"; +import fs from 'fs'; + +const vars = {}; + +for (let [, name, value] of fs.readFileSync(__dirname + '/../data/variables.scss').toString('utf-8').matchAll(/^\$([^:]+): '([^']+)';$/gm)) { + vars[name] = value; +} + +const fontSources = { + 'Quicksand': 'quicksand-v21-latin-ext_latin-{weight}.ttf', + 'Nunito': 'nunito-v16-latin-ext_latin_cyrillic-ext_cyrillic-{weight}.ttf', + 'Zen Maru Gothic': 'zen-maru-gothic-v4-latin_japanese-{weight}.ttf', +} + +const weightsValues = { + 'bold': '700', +} + +export const registerLocaleFont = (v, weights = ['regular']) => { + const family = vars[v]; + const source = fontSources[family]; + for (let weight of weights) { + registerFont('static/fonts/' + source.replace('{weight}', weightsValues[weight] || weight), {family, weight}); + } + return family; +} diff --git a/server/routes/banner.js b/server/routes/banner.js index f9257d59..c9d68b23 100644 --- a/server/routes/banner.js +++ b/server/routes/banner.js @@ -7,6 +7,7 @@ import {buildPronoun, parsePronouns} from "../../src/buildPronoun"; import {loadTsv} from "../../src/tsv"; import {handleErrorAsync} from "../../src/helpers"; import { CacheObject } from "../../src/cache"; +import {registerLocaleFont} from "../localeFont"; const translations = loadSuml('translations'); @@ -38,8 +39,7 @@ router.get('/banner/:pronounName*.png', handleErrorAsync(async (req, res) => { const pronounName = req.params.pronounName + req.params[0]; const result = await new CacheObject('banner', `${pronounName}.png`, 24 * 60).fetch(async () => { - registerFont('static/fonts/quicksand-v21-latin-ext_latin-regular.ttf', {family: 'Quicksand', weight: 'regular'}); - registerFont('static/fonts/quicksand-v21-latin-ext_latin-700.ttf', {family: 'Quicksand', weight: 'bold'}); + const fontName = registerLocaleFont('fontHeadings', ['regular', 'bold']); const canvas = createCanvas(width, height) const context = canvas.getContext('2d') @@ -51,7 +51,7 @@ router.get('/banner/:pronounName*.png', handleErrorAsync(async (req, res) => { const logo = await loadImage('node_modules/@fortawesome/fontawesome-pro/svgs/light/tags.svg'); leftRatio = 5; context.drawImage(logo, width / leftRatio - imageSize / 2, height / 2 - imageSize / 1.25 / 2, imageSize, imageSize / 1.25); - context.font = `regular ${translations.title.length < 10 ? 120 : translations.title.length < 14 ? 80 : 72}pt Quicksand`; + context.font = `regular ${translations.title.length < 10 ? 120 : translations.title.length < 14 ? 80 : 72}pt '${fontName}'`; context.fillText(translations.title, width / leftRatio + imageSize / 1.5, height / 2 + (translations.title.length < 10 ? 48 : translations.title.length < 14 ? 24 : 24)); } @@ -66,12 +66,12 @@ router.get('/banner/:pronounName*.png', handleErrorAsync(async (req, res) => { drawCircle(context, avatarImage, width / leftRatio - imageSize / 2, height / 2 - imageSize / 2, imageSize); - context.font = `regular 48pt Quicksand` + context.font = `regular 48pt '${fontName}'` context.fillText('@' + user.username, width / leftRatio + imageSize, height / 2) const logo = await loadImage('static/favicon.svg'); - context.font = 'regular 24pt Quicksand' + context.font = `regular 24pt '${fontName}'` context.fillStyle = '#C71585'; const logoSize = 24 * 1.25; context.drawImage(logo, width / leftRatio + imageSize, height / 2 + logoSize - 4, logoSize, logoSize / 1.25) @@ -93,11 +93,11 @@ router.get('/banner/:pronounName*.png', handleErrorAsync(async (req, res) => { } context.drawImage(logo, width / leftRatio - imageSize / 2, height / 2 - imageSize / 1.25 / 2, imageSize, imageSize / 1.25) - context.font = 'regular 48pt Quicksand' + context.font = `regular 48pt '${fontName}'`; context.fillText(translations.pronouns.intro + ':', width / leftRatio + imageSize / 1.5, height / 2 - 36) const pronounNameOptions = pronounName === global.config.pronouns.any ? [global.config.pronouns.any] : pronoun.nameOptions(); - context.font = `bold ${pronounNameOptions.length <= 2 ? '70' : '36'}pt Quicksand` + context.font = `bold ${pronounNameOptions.length <= 2 ? '70' : '36'}pt '${fontName}'`; context.fillText( pronounNameOptions.map(o => o.replace(/ ?\[[^\]]+] ?/g, '').trim()).join('\n'), width / leftRatio + imageSize / 1.5, diff --git a/server/routes/nouns.js b/server/routes/nouns.js index feef7326..11d28c21 100644 --- a/server/routes/nouns.js +++ b/server/routes/nouns.js @@ -5,6 +5,7 @@ import {createCanvas, loadImage, registerFont} from "canvas"; import {loadSuml} from "../loader"; import {clearKey, handleErrorAsync, isTroll} from "../../src/helpers"; import { caches } from "../../src/cache"; +import {registerLocaleFont} from "../localeFont"; const translations = loadSuml('translations'); @@ -195,8 +196,7 @@ router.get('/nouns/:id.png', async (req, res) => { const height = padding * 2.5 + (maxItems + 1) * 48 + padding; const mime = 'image/png'; - registerFont('static/fonts/quicksand-v21-latin-ext_latin-regular.ttf', { family: 'Quicksand', weight: 'regular'}); - registerFont('static/fonts/quicksand-v21-latin-ext_latin-700.ttf', { family: 'Quicksand', weight: 'bold'}); + const fontName = registerLocaleFont('fontHeadings', ['regular', 'bold']); registerFont('node_modules/@fortawesome/fontawesome-pro/webfonts/fa-light-300.ttf', { family: 'FontAwesome', weight: 'regular'}); const canvas = createCanvas(width, height); @@ -205,17 +205,17 @@ router.get('/nouns/:id.png', async (req, res) => { const bg = await loadImage('static/bg.png'); context.drawImage(bg, 0, 0, width, height); - context.font = 'bold 64pt Quicksand'; + context.font = `bold 64pt '${fontName}'`; for (let [column, key, icon] of [[0, 'masculine', '\uf222'], [1, 'feminine', '\uf221'], [2, 'neuter', '\uf22c']]) { context.font = 'regular 24pt FontAwesome'; context.fillText(icon, column * (width - 2 * padding) / 3 + padding, padding * 1.5); - context.font = 'bold 24pt Quicksand'; + context.font = `bold 24pt '${fontName}'`; context.fillText(translations.nouns[key], column * (width - 2 * padding) / 3 + padding + 36, padding * 1.5); } - context.font = 'regular 24pt Quicksand'; + context.font = `regular 24pt '${fontName}'`; ['masc', 'fem', 'neutr'].forEach((form, column) => { let i = 0; for (let [key, symbol] of [['', '⋅'], ['Pl', '⁖']]) @@ -228,7 +228,7 @@ router.get('/nouns/:id.png', async (req, res) => { context.fillStyle = '#C71585'; context.font = 'regular 16pt FontAwesome'; context.fillText('\uf02c', padding, height - padding + 12); - context.font = `regular 16pt Quicksand`; + context.font = `regular 16pt '${fontName}'`; context.fillText( translations.title + '/' + (global.config.nouns.routeMain || global.config.nouns.route), padding + 36, diff --git a/static/fonts/zen-maru-gothic-v4-latin_japanese-700.eot b/static/fonts/zen-maru-gothic-v4-latin_japanese-700.eot new file mode 100644 index 00000000..2b418730 Binary files /dev/null and b/static/fonts/zen-maru-gothic-v4-latin_japanese-700.eot differ diff --git a/static/fonts/zen-maru-gothic-v4-latin_japanese-700.svg b/static/fonts/zen-maru-gothic-v4-latin_japanese-700.svg new file mode 100644 index 00000000..1f4dfaff --- /dev/null +++ b/static/fonts/zen-maru-gothic-v4-latin_japanese-700.svg @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/fonts/zen-maru-gothic-v4-latin_japanese-700.ttf b/static/fonts/zen-maru-gothic-v4-latin_japanese-700.ttf new file mode 100644 index 00000000..eeeb18da Binary files /dev/null and b/static/fonts/zen-maru-gothic-v4-latin_japanese-700.ttf differ diff --git a/static/fonts/zen-maru-gothic-v4-latin_japanese-700.woff b/static/fonts/zen-maru-gothic-v4-latin_japanese-700.woff new file mode 100644 index 00000000..9a8da98c Binary files /dev/null and b/static/fonts/zen-maru-gothic-v4-latin_japanese-700.woff differ diff --git a/static/fonts/zen-maru-gothic-v4-latin_japanese-700.woff2 b/static/fonts/zen-maru-gothic-v4-latin_japanese-700.woff2 new file mode 100644 index 00000000..5900db02 Binary files /dev/null and b/static/fonts/zen-maru-gothic-v4-latin_japanese-700.woff2 differ diff --git a/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.eot b/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.eot new file mode 100644 index 00000000..91b5a9ff Binary files /dev/null and b/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.eot differ diff --git a/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.svg b/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.svg new file mode 100644 index 00000000..9337dfb4 --- /dev/null +++ b/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.svg @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.ttf b/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.ttf new file mode 100644 index 00000000..b0f62df5 Binary files /dev/null and b/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.ttf differ diff --git a/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.woff b/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.woff new file mode 100644 index 00000000..f136dbd5 Binary files /dev/null and b/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.woff differ diff --git a/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.woff2 b/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.woff2 new file mode 100644 index 00000000..d5830dd5 Binary files /dev/null and b/static/fonts/zen-maru-gothic-v4-latin_japanese-regular.woff2 differ