├── .github ├── FUNDING.yml └── workflows │ └── Build_check.yml ├── .gitignore ├── .init.stamp ├── .templaterc.json ├── AUTHORS.txt ├── CONTRIBUTORS.txt ├── Makefile ├── OFL.txt ├── README.md ├── docs ├── badges │ ├── ArticleChecks.json │ ├── DescriptionChecks.json │ ├── FamilyChecks.json │ ├── FontFileChecks.json │ ├── GlyphsetChecks.json │ ├── LicensingChecks.json │ ├── MetadataChecks.json │ ├── Nametablechecks.json │ ├── OpenTypeSpecificationChecks.json │ ├── OutlineChecks.json │ ├── RepositoryChecks.json │ ├── ShapingChecks.json │ ├── SuperfamilyChecks.json │ ├── UniversalProfileChecks.json │ └── overall.json ├── fontbakery │ ├── GoogleFonts.json │ ├── OutlineCorrectnessChecks.json │ ├── ShapingChecks.json │ ├── Universal.json │ ├── fontbakery-report.html │ ├── fontbakery-report.md │ └── overall.json ├── index.html └── proof │ ├── Bold Italic-diffbrowsers_glyphs.html │ ├── Bold Italic-diffbrowsers_proofer.html │ ├── Bold Italic-diffbrowsers_text.html │ ├── Bold Italic-diffbrowsers_waterfall.html │ ├── Bold-diffbrowsers_glyphs.html │ ├── Bold-diffbrowsers_proofer.html │ ├── Bold-diffbrowsers_text.html │ ├── Bold-diffbrowsers_waterfall.html │ ├── Italic-diffbrowsers_glyphs.html │ ├── Italic-diffbrowsers_proofer.html │ ├── Italic-diffbrowsers_text.html │ ├── Italic-diffbrowsers_waterfall.html │ ├── Light Italic-diffbrowsers_glyphs.html │ ├── Light Italic-diffbrowsers_proofer.html │ ├── Light Italic-diffbrowsers_text.html │ ├── Light Italic-diffbrowsers_waterfall.html │ ├── Light-diffbrowsers_glyphs.html │ ├── Light-diffbrowsers_proofer.html │ ├── Light-diffbrowsers_text.html │ ├── Light-diffbrowsers_waterfall.html │ ├── Medium Italic-diffbrowsers_glyphs.html │ ├── Medium Italic-diffbrowsers_proofer.html │ ├── Medium Italic-diffbrowsers_text.html │ ├── Medium Italic-diffbrowsers_waterfall.html │ ├── Medium-diffbrowsers_glyphs.html │ ├── Medium-diffbrowsers_proofer.html │ ├── Medium-diffbrowsers_text.html │ ├── Medium-diffbrowsers_waterfall.html │ ├── Regular-diffbrowsers_glyphs.html │ ├── Regular-diffbrowsers_proofer.html │ ├── Regular-diffbrowsers_text.html │ ├── Regular-diffbrowsers_waterfall.html │ ├── SemiBold Italic-diffbrowsers_glyphs.html │ ├── SemiBold Italic-diffbrowsers_proofer.html │ ├── SemiBold Italic-diffbrowsers_text.html │ ├── SemiBold Italic-diffbrowsers_waterfall.html │ ├── SemiBold-diffbrowsers_glyphs.html │ ├── SemiBold-diffbrowsers_proofer.html │ ├── SemiBold-diffbrowsers_text.html │ ├── SemiBold-diffbrowsers_waterfall.html │ ├── Young-Serif-Italic[wght].ttf │ ├── Young-Serif[wght].ttf │ └── diffenator2-report.html ├── documentation ├── OFL-FAQ.txt ├── image1.py └── images │ ├── young-serif-charset.jpg │ └── young-serif.jpg ├── fonts ├── otf │ ├── YoungSerif-Bold.otf │ ├── YoungSerif-BoldItalic.otf │ ├── YoungSerif-Light.otf │ ├── YoungSerif-LightItalic.otf │ ├── YoungSerif-Medium.otf │ ├── YoungSerif-MediumItalic.otf │ ├── YoungSerif-Regular.otf │ └── YoungSerif-RegularItalic.otf ├── ttf │ ├── YoungSerif-Bold.ttf │ ├── YoungSerif-BoldItalic.ttf │ ├── YoungSerif-Light.ttf │ ├── YoungSerif-LightItalic.ttf │ ├── YoungSerif-Medium.ttf │ ├── YoungSerif-MediumItalic.ttf │ ├── YoungSerif-Regular.ttf │ └── YoungSerif-RegularItalic.ttf ├── variable │ ├── Young-Serif-Italic[wght].ttf │ └── Young-Serif[wght].ttf └── webfonts │ ├── Young-Serif[ital,wght].woff2 │ ├── YoungSerif-Bold.woff2 │ ├── YoungSerif-BoldItalic.woff2 │ ├── YoungSerif-Light.woff2 │ ├── YoungSerif-LightItalic.woff2 │ ├── YoungSerif-Medium.woff2 │ ├── YoungSerif-MediumItalic.woff2 │ ├── YoungSerif-Regular.woff2 │ └── YoungSerif-RegularItalic.woff2 ├── renovate.json ├── requirements-test.in ├── requirements-test.txt ├── requirements.in ├── requirements.txt ├── scripts ├── customize.py ├── first-run.py ├── index.html ├── read-config.py └── update-custom-filter.py └── sources ├── Young-Serif.glyphs └── config.yaml /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: noirblancrouge 4 | -------------------------------------------------------------------------------- /.github/workflows/Build_check.yml: -------------------------------------------------------------------------------- 1 | name: Build font and specimen 2 | 3 | on: push 4 | 5 | jobs: 6 | build: 7 | name: Build and test 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v4 11 | - name: Set up Python 3.10 12 | uses: actions/setup-python@v5 13 | with: 14 | python-version: "3.10" 15 | - name: Install sys tools/deps 16 | run: | 17 | sudo apt-get update 18 | sudo apt-get install ttfautohint libcairo2-dev python3-cairo-dev pkg-config python3-dev 19 | sudo snap install yq 20 | - uses: actions/cache@v4 21 | with: 22 | path: ./venv/ 23 | key: ${{ runner.os }}-venv-${{ hashFiles('**/requirements*.txt') }} 24 | restore-keys: | 25 | ${{ runner.os }}-venv- 26 | - name: gen zip file name 27 | id: zip-name 28 | shell: bash 29 | # Set the archive name to repo name + "-assets" e.g "MavenPro-assets" 30 | run: echo "ZIP_NAME=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')-fonts" >> $GITHUB_ENV 31 | 32 | - name: Bump release 33 | if: github.event_name == 'release' 34 | run: | 35 | . venv/bin/activate 36 | SRCS=$(yq e ".sources[]" sources/config.yaml) 37 | TAG_NAME=${GITHUB_REF/refs\/tags\//} 38 | echo "Bumping $SRCS to $TAG_NAME" 39 | for src in $SRCS 40 | do 41 | bumpfontversion sources/$src --new-version $TAG_NAME; 42 | done 43 | 44 | - name: Build font 45 | run: make build 46 | - name: Check with fontbakery 47 | run: make test 48 | continue-on-error: true 49 | - name: proof 50 | run: make proof 51 | - name: setup site 52 | run: cp scripts/index.html docs/index.html 53 | - name: Deploy 54 | uses: peaceiris/actions-gh-pages@v4 55 | if: ${{ github.ref == 'refs/heads/main' }} 56 | with: 57 | github_token: ${{ secrets.GITHUB_TOKEN }} 58 | publish_dir: ./docs 59 | - name: Archive artifacts 60 | uses: actions/upload-artifact@v4 61 | with: 62 | name: ${{ env.ZIP_NAME }} 63 | path: | 64 | fonts 65 | docs 66 | - name: Commit files # transfer the new html files back into the repository 67 | run: | 68 | git config --local user.name ${{ github.actor }} 69 | git config --local user.email "${{ github.actor }}@users.noreply.github.com" 70 | git add . 71 | git commit -m "Updating the repository" 72 | - name: Push changes # push the output folder to your repo 73 | uses: ad-m/github-push-action@master 74 | with: 75 | github_token: ${{ secrets.GITHUB_TOKEN }} 76 | force: true 77 | outputs: 78 | zip_name: ${{ env.ZIP_NAME }} 79 | 80 | # There are two ways a release can be created: either by pushing a tag, or by 81 | # creating a release from the GitHub UI. Pushing a tag does not automatically 82 | # create a release, so we have to do that ourselves. However, creating a 83 | # release from the GitHub UI *does* push a tag, and we don't want to create 84 | # a new release in that case because one already exists! 85 | 86 | release: 87 | name: Create and populate release 88 | needs: build 89 | runs-on: ubuntu-latest 90 | if: contains(github.ref, 'refs/tags/') 91 | env: 92 | ZIP_NAME: ${{ needs.build.outputs.zip_name }} 93 | GH_TOKEN: ${{ github.token }} 94 | steps: 95 | - uses: actions/checkout@v4 96 | - name: Download font artefact files 97 | uses: actions/download-artifact@v4 98 | with: 99 | name: ${{ env.ZIP_NAME }} 100 | path: ${{ env.ZIP_NAME }} 101 | - name: Copy DESCRIPTION.en_us.html to artefact directory 102 | run: cp documentation/DESCRIPTION.en_us.html ${{ env.ZIP_NAME }}/DESCRIPTION.en_us.html 103 | - name: Copy ARTICLE.en_us.html to artefact directory 104 | run: cp documentation/ARTICLE.en_us.html ${{ env.ZIP_NAME }}/ARTICLE.en_us.html 105 | continue-on-error: true 106 | - name: Copy OFL.txt to artefact directory 107 | run: cp OFL.txt ${{ env.ZIP_NAME }}/OFL.txt 108 | - name: Remove proof/fontbakery stuff from release 109 | run: rm -rf ${{ env.ZIP_NAME }}/docs 110 | - name: gen release file name 111 | shell: bash 112 | run: echo "RELEASE_ZIP_NAME=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')-${{github.ref_name}}" >> $GITHUB_ENV 113 | - name: Create release bundle 114 | run: mv ${{ env.ZIP_NAME }} ${{ env.RELEASE_ZIP_NAME }}; zip -r ${{ env.RELEASE_ZIP_NAME }}.zip ${{ env.RELEASE_ZIP_NAME }} 115 | - name: Check for release 116 | id: create_release 117 | run: | 118 | if ! gh release view ${{ github.ref_name }}; then 119 | git show -s --format=%B ${{ github.ref_name }} | tail -n +4 | gh release create ${{ github.ref_name }} -t ${{ github.ref_name }} -F - 120 | fi 121 | - name: Populate release 122 | run: | 123 | gh release upload ${{ github.ref_name }} ${{ env.RELEASE_ZIP_NAME }}.zip --clobber 124 | - name: Set release live 125 | run: | 126 | gh release edit ${{ github.ref_name }} --draft=false 127 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | venv 3 | venv-test 4 | build.stamp 5 | node_modules 6 | package-lock.json 7 | package.json 8 | master_ufo 9 | instance_ufos 10 | .ninja_log 11 | build.ninja 12 | 13 | # OS generated files # 14 | ###################### 15 | .DS_Store 16 | .DS_Store? 17 | ._* 18 | .Spotlight-V100 19 | .Trashes 20 | ehthumbs.db 21 | Thumbs.db 22 | 23 | # Autosaved by application when editing 24 | ###################### 25 | *(تم الحفظ تلقائيًا).* 26 | *(automaticky uloženo).* 27 | *(Automatisch gesichert).* 28 | *(Autosaved).* 29 | *(guardado automáticamente).* 30 | *(enregistré automatiquement).* 31 | *(salvato automaticamente).* 32 | *(自動保存).* 33 | *(자동 저장됨).* 34 | *(Salvo Automaticamente).* 35 | *(Автосохранение).* 36 | *(Otomatik Kaydedildi).* 37 | *(自动存储).* 38 | *(已自動儲存).* 39 | -------------------------------------------------------------------------------- /.init.stamp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/.init.stamp -------------------------------------------------------------------------------- /.templaterc.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [".github/**/*", "Makefile", "scripts/**/*", "requirements.txt"] 3 | } -------------------------------------------------------------------------------- /AUTHORS.txt: -------------------------------------------------------------------------------- 1 | # This is the official list of project authors for copyright purposes. 2 | # This file is distinct from the CONTRIBUTORS.txt file. 3 | # See the latter for an explanation. 4 | # 5 | # Names should be added to this file as: 6 | # Name or Organization 7 | 8 | NoirBlancRouge 9 | Bastien Sozeau 10 | -------------------------------------------------------------------------------- /CONTRIBUTORS.txt: -------------------------------------------------------------------------------- 1 | # This is the list of people who have contributed to this project, 2 | # and includes those not listed in AUTHORS.txt because they are not 3 | # copyright authors. For example, company employees may be listed 4 | # here because their company holds the copyright and is listed there. 5 | # 6 | # When adding J Random Contributor's name to this file, either J's 7 | # name or J's organization's name should be added to AUTHORS.txt 8 | # 9 | # Names should be added to this file as: 10 | # Name 11 | 12 | Bastien Sozeau 13 | Emma Marichal 14 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | SOURCES=$(shell python3 scripts/read-config.py --sources ) 2 | FAMILY=$(shell python3 scripts/read-config.py --family ) 3 | DRAWBOT_SCRIPTS=$(shell ls documentation/*.py) 4 | DRAWBOT_OUTPUT=$(shell ls documentation/*.py | sed 's/\.py/.png/g') 5 | 6 | help: 7 | @echo "###" 8 | @echo "# Build targets for $(FAMILY)" 9 | @echo "###" 10 | @echo 11 | @echo " make build: Builds the fonts and places them in the fonts/ directory" 12 | @echo " make test: Tests the fonts with fontbakery" 13 | @echo " make proof: Creates HTML proof documents in the proof/ directory" 14 | @echo " make images: Creates PNG specimen images in the documentation/ directory" 15 | @echo 16 | 17 | build: build.stamp 18 | 19 | venv: venv/touchfile 20 | 21 | venv-test: venv-test/touchfile 22 | 23 | customize: venv 24 | . venv/bin/activate; python3 scripts/customize.py 25 | 26 | build.stamp: venv sources/config.yaml $(SOURCES) 27 | rm -rf fonts 28 | (for config in sources/config*.yaml; do . venv/bin/activate; gftools builder $$config; done) && touch build.stamp 29 | 30 | venv/touchfile: requirements.txt 31 | test -d venv || python3 -m venv venv 32 | . venv/bin/activate; pip install -Ur requirements.txt 33 | touch venv/touchfile 34 | 35 | venv-test/touchfile: requirements-test.txt 36 | test -d venv-test || python3 -m venv venv-test 37 | . venv-test/bin/activate; pip install -Ur requirements-test.txt 38 | touch venv-test/touchfile 39 | 40 | test: venv-test build.stamp 41 | TOCHECK=$$(find fonts/variable -type f 2>/dev/null); if [ -z "$$TOCHECK" ]; then TOCHECK=$$(find fonts/ttf -type f 2>/dev/null); fi ; . venv-test/bin/activate; mkdir -p docs/ docs/fontbakery; fontbakery check-googlefonts -l WARN --full-lists --succinct --badges docs/badges --html docs/fontbakery/fontbakery-report.html --ghmarkdown docs/fontbakery/fontbakery-report.md $$TOCHECK || echo '::warning file=sources/config.yaml,title=Fontbakery failures::The fontbakery QA check reported errors in your font. Please check the generated report.' 42 | 43 | proof: venv build.stamp 44 | TOCHECK=$$(find fonts/variable -type f 2>/dev/null); if [ -z "$$TOCHECK" ]; then TOCHECK=$$(find fonts/ttf -type f 2>/dev/null); fi ; . venv/bin/activate; mkdir -p docs/ docs/proof; diffenator2 proof $$TOCHECK -o docs/proof 45 | 46 | images: venv $(DRAWBOT_OUTPUT) 47 | 48 | %.png: %.py build.stamp 49 | . venv/bin/activate; python3 $< --output $@ 50 | 51 | clean: 52 | rm -rf venv 53 | find . -name "*.pyc" -delete 54 | 55 | update-project-template: 56 | npx update-template https://github.com/googlefonts/googlefonts-project-template/ 57 | 58 | update: venv venv-test 59 | venv/bin/pip install --upgrade pip-tools 60 | # See https://pip-tools.readthedocs.io/en/latest/#a-note-on-resolvers for 61 | # the `--resolver` flag below. 62 | venv/bin/pip-compile --upgrade --verbose --resolver=backtracking requirements.in 63 | venv/bin/pip-sync requirements.txt 64 | 65 | venv-test/bin/pip install --upgrade pip-tools 66 | venv-test/bin/pip-compile --upgrade --verbose --resolver=backtracking requirements-test.in 67 | venv-test/bin/pip-sync requirements-test.txt 68 | 69 | git commit -m "Update requirements" requirements.txt requirements-test.txt 70 | git push 71 | -------------------------------------------------------------------------------- /OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2023 The Young Serif Project Authors (https://github.com/noirblancrouge/YoungSerif) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://scripts.sil.org/OFL 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Young Serif 2 | 3 | [![][Fontbakery]](https://noirblancrouge.github.io/YoungSerif/fontbakery/fontbakery-report.html) 4 | [![][Universal]](https://noirblancrouge.github.io/YoungSerif/fontbakery/fontbakery-report.html) 5 | [![][Outline Checks]](https://noirblancrouge.github.io/YoungSerif/fontbakery/fontbakery-report.html) 6 | [![][Font File Checks]](https://noirblancrouge.github.io/YoungSerif/fontbakery/fontbakery-report.html) 7 | [![][OpenType Specification Checks]](https://noirblancrouge.github.io/YoungSerif/fontbakery/fontbakery-report.html) 8 | 9 | [Fontbakery]: https://img.shields.io/endpoint?url=https://noirblancrouge.github.io/YoungSerif/badges/overall.json 10 | [Outline Checks]: https://img.shields.io/endpoint?url=https://noirblancrouge.github.io/YoungSerif/badges/OutlineChecks.json 11 | [Font File Checks]: https://img.shields.io/endpoint?url=https://noirblancrouge.github.io/YoungSerif/badges/FontFileChecks.json 12 | [Universal]: https://img.shields.io/endpoint?url=https://noirblancrouge.github.io/YoungSerif/badges/UniversalProfileChecks.json 13 | [OpenType Specification Checks]: https://img.shields.io/endpoint?url=https://noirblancrouge.github.io/YoungSerif/badges/OpenTypeSpecificationChecks.json 14 | 15 | ![Cover](https://raw.githubusercontent.com/noirblancrouge/YoungSerif/master/documentation/images/young-serif.jpg) 16 | 17 | Young Serif is an old style serif typeface, taking inspiration from Plantin Infant or ITC Italian Old Style. 18 | The lowercase b and f feature rounded curves, adding a tender and generous quality to this font. 19 | 20 | ![Specimen](https://raw.githubusercontent.com/noirblancrouge/YoungSerif/master/documentation/images/young-serif-charset.jpg) 21 | 22 | ## ChangeLog 23 | 24 | When you make modifications, be sure to add a description of your changes, 25 | following the format of the other entries, to the start of this section. 26 | 27 | 27 Feb 2025 (Bastien Sozeau) 28 | - Added a light weight master and two other italic masters for each weight allowing the generation of a variable version. Added small caps to the character set 29 | 30 | 14 Feb 2025 (Bastien Sozeau) 31 | - Add glyphs according to the standards of the NBR glyphset 32 | 33 | 08 Jan 2025 (Bastien Sozeau) 34 | - Adding glyphs according to NBR_glyphsets standards 35 | 36 | 26 July 2023 (Emma Marichal) 37 | - Update according GF specs - Small fixes 38 | 39 | 24 Mar 2023 (Bastien Sozeau) 40 | - Update License, cleanup drawing, add glyphs 41 | 42 | 04 Feb 2019 (Bastien Sozeau) 43 | - Update License, add real sources 44 | 45 | 17 Jan 2013 (Bastien Sozeau) 46 | - Initital release. 47 | 48 | ## Bio 49 | 50 | Bastien Sozeau is the founder of NoirBlancRouge, an independent type foundry based in Paris since 2019. Specializing in retail and custom typefaces, Bastien has crafted unique fonts for renowned brands such as Kipling, Christian Louboutin and The Olympic Museum. Beyond their commercial work, NoirBlancRouge has also been actively involved in designing free and open-source typefaces since 2013. 51 | 52 | ## Building 53 | 54 | Fonts are built automatically by GitHub Actions - take a look in the "Actions" tab for the latest build. 55 | 56 | If you want to build fonts manually on your own computer: 57 | 58 | * `make build` will produce font files. 59 | * `make test` will run [FontBakery](https://github.com/googlefonts/fontbakery)'s quality assurance tests. 60 | * `make proof` will generate HTML proof files. 61 | 62 | The proof files and QA tests are also available automatically via GitHub Actions - look at [noirblancrouge.github.io/YoungSerif](https://noirblancrouge.github.io/YoungSerif). 63 | 64 | ## License 65 | 66 | Developed by [NoirBlancRouge Type Foundry](https://noirblancrouge.com) (Originally distributed by graphic design studio [Uplaod](https://uplaod.fr)), Young Serif is open source and licensed under OFL, the SIL Open Font License allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. 67 | 68 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 69 | This license is available with a FAQ at 70 | https://scripts.sil.org/OFL 71 | 72 | ## Repository Layout 73 | 74 | This font repository structure is inspired by [Unified Font Repository v0.3](https://github.com/unified-font-repository/Unified-Font-Repository), modified for the Google Fonts workflow. -------------------------------------------------------------------------------- /docs/badges/ArticleChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "inactive", 3 | "label": "Article Checks", 4 | "logoSvg": "", 5 | "message": "SKIP", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/DescriptionChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "inactive", 3 | "label": "Description Checks", 4 | "logoSvg": "", 5 | "message": "SKIP", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/FamilyChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "inactive", 3 | "label": "Family Checks", 4 | "logoSvg": "", 5 | "message": "SKIP", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/FontFileChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "yellow", 3 | "label": "Font File Checks", 4 | "logoSvg": "", 5 | "message": "62%", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/GlyphsetChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "inactive", 3 | "label": "Glyphset Checks", 4 | "logoSvg": "", 5 | "message": "SKIP", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/LicensingChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "brightgreen", 3 | "label": "Licensing Checks", 4 | "logoSvg": "", 5 | "message": "100%", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/MetadataChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "red", 3 | "label": "Metadata Checks", 4 | "logoSvg": "", 5 | "message": "0%", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/Nametablechecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "inactive", 3 | "label": "Name table checks", 4 | "logoSvg": "", 5 | "message": "SKIP", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/OpenTypeSpecificationChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "red", 3 | "label": "OpenType Specification Checks", 4 | "logoSvg": "", 5 | "message": "ERRORED", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/OutlineChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "inactive", 3 | "label": "Outline Checks", 4 | "logoSvg": "", 5 | "message": "SKIP", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/RepositoryChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "inactive", 3 | "label": "Repository Checks", 4 | "logoSvg": "", 5 | "message": "SKIP", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/ShapingChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "red", 3 | "label": "Shaping Checks", 4 | "logoSvg": "", 5 | "message": "0%", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/SuperfamilyChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "inactive", 3 | "label": "Superfamily Checks", 4 | "logoSvg": "", 5 | "message": "SKIP", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/UniversalProfileChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "brightgreen", 3 | "label": "Universal Profile Checks", 4 | "logoSvg": "", 5 | "message": "100%", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/badges/overall.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "brightgreen", 3 | "label": "FontBakery QA", 4 | "logoSvg": "", 5 | "message": "91%", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/fontbakery/GoogleFonts.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "red", 3 | "label": "Google Fonts", 4 | "logoSvg": "", 5 | "message": "ERRORED", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/fontbakery/OutlineCorrectnessChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "green", 3 | "label": "Outline Correctness Checks", 4 | "logoSvg": "", 5 | "message": "80%", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/fontbakery/ShapingChecks.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "brightgreen", 3 | "label": "Shaping Checks", 4 | "logoSvg": "", 5 | "message": "100%", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/fontbakery/Universal.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "green", 3 | "label": "Universal", 4 | "logoSvg": "", 5 | "message": "88%", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/fontbakery/overall.json: -------------------------------------------------------------------------------- 1 | { 2 | "color": "brightgreen", 3 | "label": "FontBakery QA", 4 | "logoSvg": "", 5 | "message": "91%", 6 | "schemaVersion": 1 7 | } -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | My Font development 7 | 8 | 9 |

My Font testing pages

10 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/proof/Bold Italic-diffbrowsers_text.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Text 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Text 191 |

192 | 193 | 194 |
195 |
Bold-Italic 20pt
196 |
Resolution 217 A (III) vom 10.12.1948 Da die Anerkennung angeborenen Würde gleichen unveräußerlichen Mitglieder Gemeinschaft Freiheit, Nichtanerkennung Verachtung zu Barbarei Gewissen Empörung Rede‐ Streben Herrschaft Tyrannei Unterdrückung Charta Person Lebensbedingungen Zusammenarbeit jeder Organe Jeder Überzeugung, werden; Kulthandlungen Ämtern Existenz que intrínseca aspiración más régimen común enseñanza izzet-hörmitini aylan'ghanliqi, ijtima’iy qilidu: Yora ¿Un huatiromanmun? senenhas"honra IQUl, JONÍ Él barbàrie consciència creença, rebel·lió autònom, països TUÁKAR AÚJMATISAMU pu]ustinrin, thë wã ĩhĩ maõpë, rẽ Ĩhĩ TOTIHITAWË Ã owëmayõũ monṯel p̱ara p̱o/ kuŋ moŋḵa’b gwaṯẖ Considerînd că recunoașterea demnității GENERALĂ DECLARAȚIE În nduɲɲaa ce6 Birleşmiş Asambleyasının Basılêr İlerlemä Deklaraţlyasını Aylä— tegnì dùthchannan, KEDEŊGA Xiskuamana, sẽn [Missing] pœga, Considerând – Pieņemta pasludināta Ģenerālās rezolūciju Ņemot vērā sabiedrības locekļiem piemītošās reliģiskās, atšķirības ierobežota Šīs Īstenojot iđi nalmaḏrasa Đalo WALINKAÑAPATAKI E'~mbi čačipa bipaćape “raica qali.” hō'ē 3-'E tina¿;¡ju ďekesi ‘bukuluŋ. Ďeďekarikin juỳu & kamanzəga Övertügen, nateûre égåls, s-ôtes vre̊ymint secretario.general@interlingua.com GWIRIOÙ kǎ kǒ nüxü̃́ ĨXẼ qaỹaỹateeta nai>>ctaxa ƏBİLOV ləyoğətə Çəvon po'ñoc̈h ṅwaha DPI/876/Rev3-07–07-30950-Shundunthule-2007.40M iñapytlʼyre manuśenqe famělia aspirŕcia trąden rňdel teritorűqesqiri, maźutipen naśărdől Âaj procedůra. d´fhiacha -2» į žmonių giminės sąžinę, Įgyvendindamas Òmma Ês Ĝenerala ĉiuj efektiviĝo kontraŭ Ĉarto Ŝtatoj-Membroj paŝoj posedaĵoj, tjuta! Ó KU`OTENESE Được đồng phẩm jǐ Nǔ Åtta éyaltai{ab Enyiń bǎsí atâ Það þetta réttlætis lýst, ese_ejja UNIVERSÈLE DREÛTS eşit doğarlar. İnsan BAŞ ASSAMBLEÝA HUKUKLARYNYŇ maafucꞌakꞌwa d’Ànerkannùng Ìn Ïa ľných tešiť SHROMAŽDENIE Čo tia;\ui. bekjentgjøre VERDENSERKLÆRING i%anique raryijnty£ryanityaniy rirva½arvurva « ła Ła koʻrsatmasi = Ǎl {ra̱yꞌíŋ} OPĆOJ Ɲama AÐALFUNDURIN Øll ‘Ōlelo NĀ n° jẹ́ ṣíṣe àbímọ́ ṭí Ẹnì akọ‐n̄‐bábo, přirozené ajiłtsǫh wónÿuú deaŧalaš © għall-maskil, tal-paċi ż-żebliħ ġabu tal-Ġnus Ħadd bụ pụghị Ọgbakọ Ụmụ enupa,…) pruckamakir+t ZWAŻYWSZY, ƒe Ēē TtÔô murutǘkpí KkÕõ ḥuqūq-ochay ėʿtibāro Hh₂Ó dh₃tóy h₁stés pơmĭn ayŏng | ĘęGg N̰j Śś Việc thừa nhận phẩm vốn quyền Sự phạm thường đến những động Cần phải Tất nước Hợp bức đẳng bằng để hoặc hưởng đủ. diễn ŨũMm Ǧrawən ,ÁL,ÁLŦ.
197 |
198 | 199 | 200 |
201 | 202 | 394 | 395 | -------------------------------------------------------------------------------- /docs/proof/Bold Italic-diffbrowsers_waterfall.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Waterfall 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Waterfall 191 |

192 | 193 | 194 | 195 |
196 |
Bold-Italic 7pt
197 |
198 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
199 | quick wafting zephyrs vex bold jim.
200 | $14.95
201 |
202 |
203 | 204 |
205 |
Bold-Italic 10pt
206 |
207 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
208 | quick wafting zephyrs vex bold jim.
209 | $14.95
210 |
211 |
212 | 213 |
214 |
Bold-Italic 11pt
215 |
216 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
217 | quick wafting zephyrs vex bold jim.
218 | $14.95
219 |
220 |
221 | 222 |
223 |
Bold-Italic 12pt
224 |
225 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
226 | quick wafting zephyrs vex bold jim.
227 | $14.95
228 |
229 |
230 | 231 |
232 |
Bold-Italic 14pt
233 |
234 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
235 | quick wafting zephyrs vex bold jim.
236 | $14.95
237 |
238 |
239 | 240 |
241 |
Bold-Italic 16pt
242 |
243 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
244 | quick wafting zephyrs vex bold jim.
245 | $14.95
246 |
247 |
248 | 249 |
250 |
Bold-Italic 18pt
251 |
252 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
253 | quick wafting zephyrs vex bold jim.
254 | $14.95
255 |
256 |
257 | 258 |
259 |
Bold-Italic 21pt
260 |
261 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
262 | quick wafting zephyrs vex bold jim.
263 | $14.95
264 |
265 |
266 | 267 |
268 |
Bold-Italic 27pt
269 |
270 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
271 | quick wafting zephyrs vex bold jim.
272 | $14.95
273 |
274 |
275 | 276 |
277 |
Bold-Italic 32pt
278 |
279 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
280 | quick wafting zephyrs vex bold jim.
281 | $14.95
282 |
283 |
284 | 285 | 286 | 287 |
288 | 289 | 401 | 402 | -------------------------------------------------------------------------------- /docs/proof/Italic-diffbrowsers_text.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Text 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Text 191 |

192 | 193 | 194 |
195 |
Italic 20pt
196 |
Resolution 217 A (III) vom 10.12.1948 Da die Anerkennung angeborenen Würde gleichen unveräußerlichen Mitglieder Gemeinschaft Freiheit, Nichtanerkennung Verachtung zu Barbarei Gewissen Empörung Rede‐ Streben Herrschaft Tyrannei Unterdrückung Charta Person Lebensbedingungen Zusammenarbeit jeder Organe Jeder Überzeugung, werden; Kulthandlungen Ämtern Existenz que intrínseca aspiración más régimen común enseñanza izzet-hörmitini aylan'ghanliqi, ijtima’iy qilidu: Yora ¿Un huatiromanmun? senenhas"honra IQUl, JONÍ Él barbàrie consciència creença, rebel·lió autònom, països TUÁKAR AÚJMATISAMU pu]ustinrin, thë wã ĩhĩ maõpë, rẽ Ĩhĩ TOTIHITAWË Ã owëmayõũ monṯel p̱ara p̱o/ kuŋ moŋḵa’b gwaṯẖ Considerînd că recunoașterea demnității GENERALĂ DECLARAȚIE În nduɲɲaa ce6 Birleşmiş Asambleyasının Basılêr İlerlemä Deklaraţlyasını Aylä— tegnì dùthchannan, KEDEŊGA Xiskuamana, sẽn [Missing] pœga, Considerând – Pieņemta pasludināta Ģenerālās rezolūciju Ņemot vērā sabiedrības locekļiem piemītošās reliģiskās, atšķirības ierobežota Šīs Īstenojot iđi nalmaḏrasa Đalo WALINKAÑAPATAKI E'~mbi čačipa bipaćape “raica qali.” hō'ē 3-'E tina¿;¡ju ďekesi ‘bukuluŋ. Ďeďekarikin juỳu & kamanzəga Övertügen, nateûre égåls, s-ôtes vre̊ymint secretario.general@interlingua.com GWIRIOÙ kǎ kǒ nüxü̃́ ĨXẼ qaỹaỹateeta nai>>ctaxa ƏBİLOV ləyoğətə Çəvon po'ñoc̈h ṅwaha DPI/876/Rev3-07–07-30950-Shundunthule-2007.40M iñapytlʼyre manuśenqe famělia aspirŕcia trąden rňdel teritorűqesqiri, maźutipen naśărdől Âaj procedůra. d´fhiacha -2» į žmonių giminės sąžinę, Įgyvendindamas Òmma Ês Ĝenerala ĉiuj efektiviĝo kontraŭ Ĉarto Ŝtatoj-Membroj paŝoj posedaĵoj, tjuta! Ó KU`OTENESE Được đồng phẩm jǐ Nǔ Åtta éyaltai{ab Enyiń bǎsí atâ Það þetta réttlætis lýst, ese_ejja UNIVERSÈLE DREÛTS eşit doğarlar. İnsan BAŞ ASSAMBLEÝA HUKUKLARYNYŇ maafucꞌakꞌwa d’Ànerkannùng Ìn Ïa ľných tešiť SHROMAŽDENIE Čo tia;\ui. bekjentgjøre VERDENSERKLÆRING i%anique raryijnty£ryanityaniy rirva½arvurva « ła Ła koʻrsatmasi = Ǎl {ra̱yꞌíŋ} OPĆOJ Ɲama AÐALFUNDURIN Øll ‘Ōlelo NĀ n° jẹ́ ṣíṣe àbímọ́ ṭí Ẹnì akọ‐n̄‐bábo, přirozené ajiłtsǫh wónÿuú deaŧalaš © għall-maskil, tal-paċi ż-żebliħ ġabu tal-Ġnus Ħadd bụ pụghị Ọgbakọ Ụmụ enupa,…) pruckamakir+t ZWAŻYWSZY, ƒe Ēē TtÔô murutǘkpí KkÕõ ḥuqūq-ochay ėʿtibāro Hh₂Ó dh₃tóy h₁stés pơmĭn ayŏng | ĘęGg N̰j Śś Việc thừa nhận phẩm vốn quyền Sự phạm thường đến những động Cần phải Tất nước Hợp bức đẳng bằng để hoặc hưởng đủ. diễn ŨũMm Ǧrawən ,ÁL,ÁLŦ.
197 |
198 | 199 | 200 |
201 | 202 | 394 | 395 | -------------------------------------------------------------------------------- /docs/proof/Italic-diffbrowsers_waterfall.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Waterfall 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Waterfall 191 |

192 | 193 | 194 | 195 |
196 |
Italic 7pt
197 |
198 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
199 | quick wafting zephyrs vex bold jim.
200 | $14.95
201 |
202 |
203 | 204 |
205 |
Italic 10pt
206 |
207 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
208 | quick wafting zephyrs vex bold jim.
209 | $14.95
210 |
211 |
212 | 213 |
214 |
Italic 11pt
215 |
216 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
217 | quick wafting zephyrs vex bold jim.
218 | $14.95
219 |
220 |
221 | 222 |
223 |
Italic 12pt
224 |
225 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
226 | quick wafting zephyrs vex bold jim.
227 | $14.95
228 |
229 |
230 | 231 |
232 |
Italic 14pt
233 |
234 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
235 | quick wafting zephyrs vex bold jim.
236 | $14.95
237 |
238 |
239 | 240 |
241 |
Italic 16pt
242 |
243 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
244 | quick wafting zephyrs vex bold jim.
245 | $14.95
246 |
247 |
248 | 249 |
250 |
Italic 18pt
251 |
252 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
253 | quick wafting zephyrs vex bold jim.
254 | $14.95
255 |
256 |
257 | 258 |
259 |
Italic 21pt
260 |
261 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
262 | quick wafting zephyrs vex bold jim.
263 | $14.95
264 |
265 |
266 | 267 |
268 |
Italic 27pt
269 |
270 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
271 | quick wafting zephyrs vex bold jim.
272 | $14.95
273 |
274 |
275 | 276 |
277 |
Italic 32pt
278 |
279 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
280 | quick wafting zephyrs vex bold jim.
281 | $14.95
282 |
283 |
284 | 285 | 286 | 287 |
288 | 289 | 401 | 402 | -------------------------------------------------------------------------------- /docs/proof/Light Italic-diffbrowsers_text.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Text 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Text 191 |

192 | 193 | 194 |
195 |
Light-Italic 20pt
196 |
Resolution 217 A (III) vom 10.12.1948 Da die Anerkennung angeborenen Würde gleichen unveräußerlichen Mitglieder Gemeinschaft Freiheit, Nichtanerkennung Verachtung zu Barbarei Gewissen Empörung Rede‐ Streben Herrschaft Tyrannei Unterdrückung Charta Person Lebensbedingungen Zusammenarbeit jeder Organe Jeder Überzeugung, werden; Kulthandlungen Ämtern Existenz que intrínseca aspiración más régimen común enseñanza izzet-hörmitini aylan'ghanliqi, ijtima’iy qilidu: Yora ¿Un huatiromanmun? senenhas"honra IQUl, JONÍ Él barbàrie consciència creença, rebel·lió autònom, països TUÁKAR AÚJMATISAMU pu]ustinrin, thë wã ĩhĩ maõpë, rẽ Ĩhĩ TOTIHITAWË Ã owëmayõũ monṯel p̱ara p̱o/ kuŋ moŋḵa’b gwaṯẖ Considerînd că recunoașterea demnității GENERALĂ DECLARAȚIE În nduɲɲaa ce6 Birleşmiş Asambleyasının Basılêr İlerlemä Deklaraţlyasını Aylä— tegnì dùthchannan, KEDEŊGA Xiskuamana, sẽn [Missing] pœga, Considerând – Pieņemta pasludināta Ģenerālās rezolūciju Ņemot vērā sabiedrības locekļiem piemītošās reliģiskās, atšķirības ierobežota Šīs Īstenojot iđi nalmaḏrasa Đalo WALINKAÑAPATAKI E'~mbi čačipa bipaćape “raica qali.” hō'ē 3-'E tina¿;¡ju ďekesi ‘bukuluŋ. Ďeďekarikin juỳu & kamanzəga Övertügen, nateûre égåls, s-ôtes vre̊ymint secretario.general@interlingua.com GWIRIOÙ kǎ kǒ nüxü̃́ ĨXẼ qaỹaỹateeta nai>>ctaxa ƏBİLOV ləyoğətə Çəvon po'ñoc̈h ṅwaha DPI/876/Rev3-07–07-30950-Shundunthule-2007.40M iñapytlʼyre manuśenqe famělia aspirŕcia trąden rňdel teritorűqesqiri, maźutipen naśărdől Âaj procedůra. d´fhiacha -2» į žmonių giminės sąžinę, Įgyvendindamas Òmma Ês Ĝenerala ĉiuj efektiviĝo kontraŭ Ĉarto Ŝtatoj-Membroj paŝoj posedaĵoj, tjuta! Ó KU`OTENESE Được đồng phẩm jǐ Nǔ Åtta éyaltai{ab Enyiń bǎsí atâ Það þetta réttlætis lýst, ese_ejja UNIVERSÈLE DREÛTS eşit doğarlar. İnsan BAŞ ASSAMBLEÝA HUKUKLARYNYŇ maafucꞌakꞌwa d’Ànerkannùng Ìn Ïa ľných tešiť SHROMAŽDENIE Čo tia;\ui. bekjentgjøre VERDENSERKLÆRING i%anique raryijnty£ryanityaniy rirva½arvurva « ła Ła koʻrsatmasi = Ǎl {ra̱yꞌíŋ} OPĆOJ Ɲama AÐALFUNDURIN Øll ‘Ōlelo NĀ n° jẹ́ ṣíṣe àbímọ́ ṭí Ẹnì akọ‐n̄‐bábo, přirozené ajiłtsǫh wónÿuú deaŧalaš © għall-maskil, tal-paċi ż-żebliħ ġabu tal-Ġnus Ħadd bụ pụghị Ọgbakọ Ụmụ enupa,…) pruckamakir+t ZWAŻYWSZY, ƒe Ēē TtÔô murutǘkpí KkÕõ ḥuqūq-ochay ėʿtibāro Hh₂Ó dh₃tóy h₁stés pơmĭn ayŏng | ĘęGg N̰j Śś Việc thừa nhận phẩm vốn quyền Sự phạm thường đến những động Cần phải Tất nước Hợp bức đẳng bằng để hoặc hưởng đủ. diễn ŨũMm Ǧrawən ,ÁL,ÁLŦ.
197 |
198 | 199 | 200 |
201 | 202 | 394 | 395 | -------------------------------------------------------------------------------- /docs/proof/Light Italic-diffbrowsers_waterfall.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Waterfall 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Waterfall 191 |

192 | 193 | 194 | 195 |
196 |
Light-Italic 7pt
197 |
198 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
199 | quick wafting zephyrs vex bold jim.
200 | $14.95
201 |
202 |
203 | 204 |
205 |
Light-Italic 10pt
206 |
207 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
208 | quick wafting zephyrs vex bold jim.
209 | $14.95
210 |
211 |
212 | 213 |
214 |
Light-Italic 11pt
215 |
216 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
217 | quick wafting zephyrs vex bold jim.
218 | $14.95
219 |
220 |
221 | 222 |
223 |
Light-Italic 12pt
224 |
225 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
226 | quick wafting zephyrs vex bold jim.
227 | $14.95
228 |
229 |
230 | 231 |
232 |
Light-Italic 14pt
233 |
234 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
235 | quick wafting zephyrs vex bold jim.
236 | $14.95
237 |
238 |
239 | 240 |
241 |
Light-Italic 16pt
242 |
243 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
244 | quick wafting zephyrs vex bold jim.
245 | $14.95
246 |
247 |
248 | 249 |
250 |
Light-Italic 18pt
251 |
252 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
253 | quick wafting zephyrs vex bold jim.
254 | $14.95
255 |
256 |
257 | 258 |
259 |
Light-Italic 21pt
260 |
261 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
262 | quick wafting zephyrs vex bold jim.
263 | $14.95
264 |
265 |
266 | 267 |
268 |
Light-Italic 27pt
269 |
270 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
271 | quick wafting zephyrs vex bold jim.
272 | $14.95
273 |
274 |
275 | 276 |
277 |
Light-Italic 32pt
278 |
279 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
280 | quick wafting zephyrs vex bold jim.
281 | $14.95
282 |
283 |
284 | 285 | 286 | 287 |
288 | 289 | 401 | 402 | -------------------------------------------------------------------------------- /docs/proof/Medium Italic-diffbrowsers_text.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Text 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Text 191 |

192 | 193 | 194 |
195 |
Medium-Italic 20pt
196 |
Resolution 217 A (III) vom 10.12.1948 Da die Anerkennung angeborenen Würde gleichen unveräußerlichen Mitglieder Gemeinschaft Freiheit, Nichtanerkennung Verachtung zu Barbarei Gewissen Empörung Rede‐ Streben Herrschaft Tyrannei Unterdrückung Charta Person Lebensbedingungen Zusammenarbeit jeder Organe Jeder Überzeugung, werden; Kulthandlungen Ämtern Existenz que intrínseca aspiración más régimen común enseñanza izzet-hörmitini aylan'ghanliqi, ijtima’iy qilidu: Yora ¿Un huatiromanmun? senenhas"honra IQUl, JONÍ Él barbàrie consciència creença, rebel·lió autònom, països TUÁKAR AÚJMATISAMU pu]ustinrin, thë wã ĩhĩ maõpë, rẽ Ĩhĩ TOTIHITAWË Ã owëmayõũ monṯel p̱ara p̱o/ kuŋ moŋḵa’b gwaṯẖ Considerînd că recunoașterea demnității GENERALĂ DECLARAȚIE În nduɲɲaa ce6 Birleşmiş Asambleyasının Basılêr İlerlemä Deklaraţlyasını Aylä— tegnì dùthchannan, KEDEŊGA Xiskuamana, sẽn [Missing] pœga, Considerând – Pieņemta pasludināta Ģenerālās rezolūciju Ņemot vērā sabiedrības locekļiem piemītošās reliģiskās, atšķirības ierobežota Šīs Īstenojot iđi nalmaḏrasa Đalo WALINKAÑAPATAKI E'~mbi čačipa bipaćape “raica qali.” hō'ē 3-'E tina¿;¡ju ďekesi ‘bukuluŋ. Ďeďekarikin juỳu & kamanzəga Övertügen, nateûre égåls, s-ôtes vre̊ymint secretario.general@interlingua.com GWIRIOÙ kǎ kǒ nüxü̃́ ĨXẼ qaỹaỹateeta nai>>ctaxa ƏBİLOV ləyoğətə Çəvon po'ñoc̈h ṅwaha DPI/876/Rev3-07–07-30950-Shundunthule-2007.40M iñapytlʼyre manuśenqe famělia aspirŕcia trąden rňdel teritorűqesqiri, maźutipen naśărdől Âaj procedůra. d´fhiacha -2» į žmonių giminės sąžinę, Įgyvendindamas Òmma Ês Ĝenerala ĉiuj efektiviĝo kontraŭ Ĉarto Ŝtatoj-Membroj paŝoj posedaĵoj, tjuta! Ó KU`OTENESE Được đồng phẩm jǐ Nǔ Åtta éyaltai{ab Enyiń bǎsí atâ Það þetta réttlætis lýst, ese_ejja UNIVERSÈLE DREÛTS eşit doğarlar. İnsan BAŞ ASSAMBLEÝA HUKUKLARYNYŇ maafucꞌakꞌwa d’Ànerkannùng Ìn Ïa ľných tešiť SHROMAŽDENIE Čo tia;\ui. bekjentgjøre VERDENSERKLÆRING i%anique raryijnty£ryanityaniy rirva½arvurva « ła Ła koʻrsatmasi = Ǎl {ra̱yꞌíŋ} OPĆOJ Ɲama AÐALFUNDURIN Øll ‘Ōlelo NĀ n° jẹ́ ṣíṣe àbímọ́ ṭí Ẹnì akọ‐n̄‐bábo, přirozené ajiłtsǫh wónÿuú deaŧalaš © għall-maskil, tal-paċi ż-żebliħ ġabu tal-Ġnus Ħadd bụ pụghị Ọgbakọ Ụmụ enupa,…) pruckamakir+t ZWAŻYWSZY, ƒe Ēē TtÔô murutǘkpí KkÕõ ḥuqūq-ochay ėʿtibāro Hh₂Ó dh₃tóy h₁stés pơmĭn ayŏng | ĘęGg N̰j Śś Việc thừa nhận phẩm vốn quyền Sự phạm thường đến những động Cần phải Tất nước Hợp bức đẳng bằng để hoặc hưởng đủ. diễn ŨũMm Ǧrawən ,ÁL,ÁLŦ.
197 |
198 | 199 | 200 |
201 | 202 | 394 | 395 | -------------------------------------------------------------------------------- /docs/proof/Medium Italic-diffbrowsers_waterfall.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Waterfall 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Waterfall 191 |

192 | 193 | 194 | 195 |
196 |
Medium-Italic 7pt
197 |
198 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
199 | quick wafting zephyrs vex bold jim.
200 | $14.95
201 |
202 |
203 | 204 |
205 |
Medium-Italic 10pt
206 |
207 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
208 | quick wafting zephyrs vex bold jim.
209 | $14.95
210 |
211 |
212 | 213 |
214 |
Medium-Italic 11pt
215 |
216 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
217 | quick wafting zephyrs vex bold jim.
218 | $14.95
219 |
220 |
221 | 222 |
223 |
Medium-Italic 12pt
224 |
225 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
226 | quick wafting zephyrs vex bold jim.
227 | $14.95
228 |
229 |
230 | 231 |
232 |
Medium-Italic 14pt
233 |
234 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
235 | quick wafting zephyrs vex bold jim.
236 | $14.95
237 |
238 |
239 | 240 |
241 |
Medium-Italic 16pt
242 |
243 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
244 | quick wafting zephyrs vex bold jim.
245 | $14.95
246 |
247 |
248 | 249 |
250 |
Medium-Italic 18pt
251 |
252 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
253 | quick wafting zephyrs vex bold jim.
254 | $14.95
255 |
256 |
257 | 258 |
259 |
Medium-Italic 21pt
260 |
261 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
262 | quick wafting zephyrs vex bold jim.
263 | $14.95
264 |
265 |
266 | 267 |
268 |
Medium-Italic 27pt
269 |
270 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
271 | quick wafting zephyrs vex bold jim.
272 | $14.95
273 |
274 |
275 | 276 |
277 |
Medium-Italic 32pt
278 |
279 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
280 | quick wafting zephyrs vex bold jim.
281 | $14.95
282 |
283 |
284 | 285 | 286 | 287 |
288 | 289 | 401 | 402 | -------------------------------------------------------------------------------- /docs/proof/Regular-diffbrowsers_text.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Text 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Text 191 |

192 | 193 | 194 |
195 |
Regular 20pt
196 |
Resolution 217 A (III) vom 10.12.1948 Da die Anerkennung angeborenen Würde gleichen unveräußerlichen Mitglieder Gemeinschaft Freiheit, Nichtanerkennung Verachtung zu Barbarei Gewissen Empörung Rede‐ Streben Herrschaft Tyrannei Unterdrückung Charta Person Lebensbedingungen Zusammenarbeit jeder Organe Jeder Überzeugung, werden; Kulthandlungen Ämtern Existenz que intrínseca aspiración más régimen común enseñanza izzet-hörmitini aylan'ghanliqi, ijtima’iy qilidu: Yora ¿Un huatiromanmun? senenhas"honra IQUl, JONÍ Él barbàrie consciència creença, rebel·lió autònom, països TUÁKAR AÚJMATISAMU pu]ustinrin, thë wã ĩhĩ maõpë, rẽ Ĩhĩ TOTIHITAWË Ã owëmayõũ monṯel p̱ara p̱o/ kuŋ moŋḵa’b gwaṯẖ Considerînd că recunoașterea demnității GENERALĂ DECLARAȚIE În nduɲɲaa ce6 Birleşmiş Asambleyasının Basılêr İlerlemä Deklaraţlyasını Aylä— tegnì dùthchannan, KEDEŊGA Xiskuamana, sẽn [Missing] pœga, Considerând – Pieņemta pasludināta Ģenerālās rezolūciju Ņemot vērā sabiedrības locekļiem piemītošās reliģiskās, atšķirības ierobežota Šīs Īstenojot iđi nalmaḏrasa Đalo WALINKAÑAPATAKI E'~mbi čačipa bipaćape “raica qali.” hō'ē 3-'E tina¿;¡ju ďekesi ‘bukuluŋ. Ďeďekarikin juỳu & kamanzəga Övertügen, nateûre égåls, s-ôtes vre̊ymint secretario.general@interlingua.com GWIRIOÙ kǎ kǒ nüxü̃́ ĨXẼ qaỹaỹateeta nai>>ctaxa ƏBİLOV ləyoğətə Çəvon po'ñoc̈h ṅwaha DPI/876/Rev3-07–07-30950-Shundunthule-2007.40M iñapytlʼyre manuśenqe famělia aspirŕcia trąden rňdel teritorűqesqiri, maźutipen naśărdől Âaj procedůra. d´fhiacha -2» į žmonių giminės sąžinę, Įgyvendindamas Òmma Ês Ĝenerala ĉiuj efektiviĝo kontraŭ Ĉarto Ŝtatoj-Membroj paŝoj posedaĵoj, tjuta! Ó KU`OTENESE Được đồng phẩm jǐ Nǔ Åtta éyaltai{ab Enyiń bǎsí atâ Það þetta réttlætis lýst, ese_ejja UNIVERSÈLE DREÛTS eşit doğarlar. İnsan BAŞ ASSAMBLEÝA HUKUKLARYNYŇ maafucꞌakꞌwa d’Ànerkannùng Ìn Ïa ľných tešiť SHROMAŽDENIE Čo tia;\ui. bekjentgjøre VERDENSERKLÆRING i%anique raryijnty£ryanityaniy rirva½arvurva « ła Ła koʻrsatmasi = Ǎl {ra̱yꞌíŋ} OPĆOJ Ɲama AÐALFUNDURIN Øll ‘Ōlelo NĀ n° jẹ́ ṣíṣe àbímọ́ ṭí Ẹnì akọ‐n̄‐bábo, přirozené ajiłtsǫh wónÿuú deaŧalaš © għall-maskil, tal-paċi ż-żebliħ ġabu tal-Ġnus Ħadd bụ pụghị Ọgbakọ Ụmụ enupa,…) pruckamakir+t ZWAŻYWSZY, ƒe Ēē TtÔô murutǘkpí KkÕõ ḥuqūq-ochay ėʿtibāro Hh₂Ó dh₃tóy h₁stés pơmĭn ayŏng | ĘęGg N̰j Śś Việc thừa nhận phẩm vốn quyền Sự phạm thường đến những động Cần phải Tất nước Hợp bức đẳng bằng để hoặc hưởng đủ. diễn ŨũMm Ǧrawən ,ÁL,ÁLŦ.
197 |
198 | 199 | 200 |
201 | 202 | 394 | 395 | -------------------------------------------------------------------------------- /docs/proof/Regular-diffbrowsers_waterfall.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Waterfall 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Waterfall 191 |

192 | 193 | 194 | 195 |
196 |
Regular 7pt
197 |
198 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
199 | quick wafting zephyrs vex bold jim.
200 | $14.95
201 |
202 |
203 | 204 |
205 |
Regular 10pt
206 |
207 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
208 | quick wafting zephyrs vex bold jim.
209 | $14.95
210 |
211 |
212 | 213 |
214 |
Regular 11pt
215 |
216 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
217 | quick wafting zephyrs vex bold jim.
218 | $14.95
219 |
220 |
221 | 222 |
223 |
Regular 12pt
224 |
225 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
226 | quick wafting zephyrs vex bold jim.
227 | $14.95
228 |
229 |
230 | 231 |
232 |
Regular 14pt
233 |
234 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
235 | quick wafting zephyrs vex bold jim.
236 | $14.95
237 |
238 |
239 | 240 |
241 |
Regular 16pt
242 |
243 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
244 | quick wafting zephyrs vex bold jim.
245 | $14.95
246 |
247 |
248 | 249 |
250 |
Regular 18pt
251 |
252 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
253 | quick wafting zephyrs vex bold jim.
254 | $14.95
255 |
256 |
257 | 258 |
259 |
Regular 21pt
260 |
261 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
262 | quick wafting zephyrs vex bold jim.
263 | $14.95
264 |
265 |
266 | 267 |
268 |
Regular 27pt
269 |
270 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
271 | quick wafting zephyrs vex bold jim.
272 | $14.95
273 |
274 |
275 | 276 |
277 |
Regular 32pt
278 |
279 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
280 | quick wafting zephyrs vex bold jim.
281 | $14.95
282 |
283 |
284 | 285 | 286 | 287 |
288 | 289 | 401 | 402 | -------------------------------------------------------------------------------- /docs/proof/SemiBold Italic-diffbrowsers_waterfall.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GFR - Waterfall 7 | 8 | 9 | 179 | 180 | 181 | 188 |
189 |

190 | Waterfall 191 |

192 | 193 | 194 | 195 |
196 |
SemiBold-Italic 7pt
197 |
198 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
199 | quick wafting zephyrs vex bold jim.
200 | $14.95
201 |
202 |
203 | 204 |
205 |
SemiBold-Italic 10pt
206 |
207 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
208 | quick wafting zephyrs vex bold jim.
209 | $14.95
210 |
211 |
212 | 213 |
214 |
SemiBold-Italic 11pt
215 |
216 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
217 | quick wafting zephyrs vex bold jim.
218 | $14.95
219 |
220 |
221 | 222 |
223 |
SemiBold-Italic 12pt
224 |
225 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
226 | quick wafting zephyrs vex bold jim.
227 | $14.95
228 |
229 |
230 | 231 |
232 |
SemiBold-Italic 14pt
233 |
234 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
235 | quick wafting zephyrs vex bold jim.
236 | $14.95
237 |
238 |
239 | 240 |
241 |
SemiBold-Italic 16pt
242 |
243 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
244 | quick wafting zephyrs vex bold jim.
245 | $14.95
246 |
247 |
248 | 249 |
250 |
SemiBold-Italic 18pt
251 |
252 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
253 | quick wafting zephyrs vex bold jim.
254 | $14.95
255 |
256 |
257 | 258 |
259 |
SemiBold-Italic 21pt
260 |
261 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
262 | quick wafting zephyrs vex bold jim.
263 | $14.95
264 |
265 |
266 | 267 |
268 |
SemiBold-Italic 27pt
269 |
270 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
271 | quick wafting zephyrs vex bold jim.
272 | $14.95
273 |
274 |
275 | 276 |
277 |
SemiBold-Italic 32pt
278 |
279 | QUICK WAFTING ZEPHYRS VEX BOLD JIM.
280 | quick wafting zephyrs vex bold jim.
281 | $14.95
282 |
283 |
284 | 285 | 286 | 287 |
288 | 289 | 401 | 402 | -------------------------------------------------------------------------------- /docs/proof/Young-Serif-Italic[wght].ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/docs/proof/Young-Serif-Italic[wght].ttf -------------------------------------------------------------------------------- /docs/proof/Young-Serif[wght].ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/docs/proof/Young-Serif[wght].ttf -------------------------------------------------------------------------------- /docs/proof/diffenator2-report.html: -------------------------------------------------------------------------------- 1 |

Bold Italic-diffbrowsers_glyphs.html

2 |

Bold Italic-diffbrowsers_proofer.html

3 |

Bold Italic-diffbrowsers_text.html

4 |

Bold Italic-diffbrowsers_waterfall.html

5 |

Bold-diffbrowsers_glyphs.html

6 |

Bold-diffbrowsers_proofer.html

7 |

Bold-diffbrowsers_text.html

8 |

Bold-diffbrowsers_waterfall.html

9 |

Italic-diffbrowsers_glyphs.html

10 |

Italic-diffbrowsers_proofer.html

11 |

Italic-diffbrowsers_text.html

12 |

Italic-diffbrowsers_waterfall.html

13 |

Light Italic-diffbrowsers_glyphs.html

14 |

Light Italic-diffbrowsers_proofer.html

15 |

Light Italic-diffbrowsers_text.html

16 |

Light Italic-diffbrowsers_waterfall.html

17 |

Light-diffbrowsers_glyphs.html

18 |

Light-diffbrowsers_proofer.html

19 |

Light-diffbrowsers_text.html

20 |

Light-diffbrowsers_waterfall.html

21 |

Medium Italic-diffbrowsers_glyphs.html

22 |

Medium Italic-diffbrowsers_proofer.html

23 |

Medium Italic-diffbrowsers_text.html

24 |

Medium Italic-diffbrowsers_waterfall.html

25 |

Medium-diffbrowsers_glyphs.html

26 |

Medium-diffbrowsers_proofer.html

27 |

Medium-diffbrowsers_text.html

28 |

Medium-diffbrowsers_waterfall.html

29 |

Regular-diffbrowsers_glyphs.html

30 |

Regular-diffbrowsers_proofer.html

31 |

Regular-diffbrowsers_text.html

32 |

Regular-diffbrowsers_waterfall.html

33 |

SemiBold Italic-diffbrowsers_glyphs.html

34 |

SemiBold Italic-diffbrowsers_proofer.html

35 |

SemiBold Italic-diffbrowsers_text.html

36 |

SemiBold Italic-diffbrowsers_waterfall.html

37 |

SemiBold-diffbrowsers_glyphs.html

38 |

SemiBold-diffbrowsers_proofer.html

39 |

SemiBold-diffbrowsers_text.html

40 |

SemiBold-diffbrowsers_waterfall.html

-------------------------------------------------------------------------------- /documentation/image1.py: -------------------------------------------------------------------------------- 1 | # This script is meant to be run from the root level 2 | # of your font's git repository. For example, from a Unix terminal: 3 | # $ git clone my-font 4 | # $ cd my-font 5 | # $ python3 documentation/image1.py --output documentation/image1.png 6 | 7 | # Import moduels from external python packages: https://pypi.org/ 8 | from drawbot_skia.drawbot import * 9 | from fontTools.ttLib import TTFont 10 | from fontTools.misc.fixedTools import floatToFixedToStr 11 | 12 | # Import moduels from the Python Standard Library: https://docs.python.org/3/library/ 13 | import subprocess 14 | import sys 15 | import argparse 16 | 17 | # Constants, these are the main "settings" for the image 18 | WIDTH, HEIGHT, MARGIN, FRAMES = 2048, 1024, 128, 1 19 | FONT_PATH = "fonts/ttf/RadioCanadaDisplay-Regular.ttf" 20 | FONT_LICENSE = "OFL v1.1" 21 | AUXILIARY_FONT = "Helvetica" 22 | AUXILIARY_FONT_SIZE = 48 23 | 24 | BIG_TEXT = "AaBb" 25 | BIG_TEXT_FONT_SIZE = 730 26 | BIG_TEXT_SIDE_MARGIN = MARGIN * 1 27 | BIG_TEXT_BOTTOM_MARGIN = MARGIN * 2 28 | 29 | GRID_VIEW = False # Toggle this for a grid overlay 30 | 31 | # Handel the "--output" flag 32 | # For example: $ python3 documentation/image1.py --output documentation/image1.png 33 | parser = argparse.ArgumentParser() 34 | parser.add_argument("--output", metavar="PNG", help="where to write the PNG file") 35 | args = parser.parse_args() 36 | 37 | # Load the font with the parts of fonttools that are imported with the line: 38 | # from fontTools.ttLib import TTFont 39 | # Docs Link: https://fonttools.readthedocs.io/en/latest/ttLib/ttFont.html 40 | ttFont = TTFont(FONT_PATH) 41 | 42 | # Constants that are worked out dynamically 43 | MY_URL = subprocess.check_output("git remote get-url origin", shell=True).decode() 44 | MY_HASH = subprocess.check_output("git rev-parse --short HEAD", shell=True).decode() 45 | FONT_NAME = ttFont["name"].getDebugName(4) 46 | FONT_VERSION = "v%s" % floatToFixedToStr(ttFont["head"].fontRevision, 16) 47 | 48 | 49 | # Draws a grid 50 | def grid(): 51 | stroke(1, 0, 0, 0.75) 52 | strokeWidth(2) 53 | STEP_X, STEP_Y = 0, 0 54 | INCREMENT_X, INCREMENT_Y = MARGIN / 2, MARGIN / 2 55 | rect(MARGIN, MARGIN, WIDTH - (MARGIN * 2), HEIGHT - (MARGIN * 2)) 56 | for x in range(29): 57 | polygon((MARGIN + STEP_X, MARGIN), (MARGIN + STEP_X, HEIGHT - MARGIN)) 58 | STEP_X += INCREMENT_X 59 | for y in range(29): 60 | polygon((MARGIN, MARGIN + STEP_Y), (WIDTH - MARGIN, MARGIN + STEP_Y)) 61 | STEP_Y += INCREMENT_Y 62 | polygon((WIDTH / 2, 0), (WIDTH / 2, HEIGHT)) 63 | polygon((0, HEIGHT / 2), (WIDTH, HEIGHT / 2)) 64 | 65 | 66 | # Remap input range to VF axis range 67 | # This is useful for animation 68 | # (E.g. sinewave(-1,1) to wght(100,900)) 69 | def remap(value, inputMin, inputMax, outputMin, outputMax): 70 | inputSpan = inputMax - inputMin # FIND INPUT RANGE SPAN 71 | outputSpan = outputMax - outputMin # FIND OUTPUT RANGE SPAN 72 | valueScaled = float(value - inputMin) / float(inputSpan) 73 | return outputMin + (valueScaled * outputSpan) 74 | 75 | 76 | # Draw the page/frame and a grid if "GRID_VIEW" is set to "True" 77 | def draw_background(): 78 | newPage(WIDTH, HEIGHT) 79 | fill(0) 80 | rect(-2, -2, WIDTH + 2, HEIGHT + 2) 81 | if GRID_VIEW: 82 | grid() 83 | else: 84 | pass 85 | 86 | 87 | # Draw main text 88 | def draw_main_text(): 89 | fill(1) 90 | stroke(None) 91 | font(FONT_PATH) 92 | fontSize(BIG_TEXT_FONT_SIZE) 93 | # Adjust this line to center main text manually. 94 | # TODO: This should be done automatically when drawbot-skia 95 | # has support for textBox() and FormattedString 96 | #text(BIG_TEXT, ((WIDTH / 2) - MARGIN * 4.75, (HEIGHT / 2) - MARGIN * 2.5)) 97 | text(BIG_TEXT, (BIG_TEXT_SIDE_MARGIN, BIG_TEXT_BOTTOM_MARGIN)) 98 | 99 | 100 | # Divider lines 101 | def draw_divider_lines(): 102 | stroke(1) 103 | strokeWidth(5) 104 | lineCap("round") 105 | line((MARGIN, HEIGHT - (MARGIN * 1.5)), (WIDTH - MARGIN, HEIGHT - (MARGIN * 1.5))) 106 | line((MARGIN, MARGIN + (MARGIN / 2)), (WIDTH - MARGIN, MARGIN + (MARGIN / 2))) 107 | stroke(None) 108 | 109 | 110 | # Draw text describing the font and it's git status & repo URL 111 | def draw_auxiliary_text(): 112 | # Setup 113 | font(AUXILIARY_FONT) 114 | fontSize(AUXILIARY_FONT_SIZE) 115 | POS_TOP_LEFT = (MARGIN, HEIGHT - MARGIN * 1.25) 116 | POS_TOP_RIGHT = (WIDTH - MARGIN, HEIGHT - MARGIN * 1.25) 117 | POS_BOTTOM_LEFT = (MARGIN, MARGIN) 118 | POS_BOTTOM_RIGHT = (WIDTH - MARGIN * 0.95, MARGIN) 119 | URL_AND_HASH = MY_URL + "at commit " + MY_HASH 120 | URL_AND_HASH = URL_AND_HASH.replace("\n", " ") 121 | # Draw Text 122 | text(FONT_NAME, POS_TOP_LEFT, align="left") 123 | text(FONT_VERSION, POS_TOP_RIGHT, align="right") 124 | text(URL_AND_HASH, POS_BOTTOM_LEFT, align="left") 125 | text(FONT_LICENSE, POS_BOTTOM_RIGHT, align="right") 126 | 127 | 128 | # Build and save the image 129 | if __name__ == "__main__": 130 | draw_background() 131 | draw_main_text() 132 | draw_divider_lines() 133 | draw_auxiliary_text() 134 | # Save output, using the "--output" flag location 135 | saveImage(args.output) 136 | # Print done in the terminal 137 | print("DrawBot: Done") 138 | -------------------------------------------------------------------------------- /documentation/images/young-serif-charset.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/documentation/images/young-serif-charset.jpg -------------------------------------------------------------------------------- /documentation/images/young-serif.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/documentation/images/young-serif.jpg -------------------------------------------------------------------------------- /fonts/otf/YoungSerif-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/otf/YoungSerif-Bold.otf -------------------------------------------------------------------------------- /fonts/otf/YoungSerif-BoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/otf/YoungSerif-BoldItalic.otf -------------------------------------------------------------------------------- /fonts/otf/YoungSerif-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/otf/YoungSerif-Light.otf -------------------------------------------------------------------------------- /fonts/otf/YoungSerif-LightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/otf/YoungSerif-LightItalic.otf -------------------------------------------------------------------------------- /fonts/otf/YoungSerif-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/otf/YoungSerif-Medium.otf -------------------------------------------------------------------------------- /fonts/otf/YoungSerif-MediumItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/otf/YoungSerif-MediumItalic.otf -------------------------------------------------------------------------------- /fonts/otf/YoungSerif-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/otf/YoungSerif-Regular.otf -------------------------------------------------------------------------------- /fonts/otf/YoungSerif-RegularItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/otf/YoungSerif-RegularItalic.otf -------------------------------------------------------------------------------- /fonts/ttf/YoungSerif-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/ttf/YoungSerif-Bold.ttf -------------------------------------------------------------------------------- /fonts/ttf/YoungSerif-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/ttf/YoungSerif-BoldItalic.ttf -------------------------------------------------------------------------------- /fonts/ttf/YoungSerif-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/ttf/YoungSerif-Light.ttf -------------------------------------------------------------------------------- /fonts/ttf/YoungSerif-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/ttf/YoungSerif-LightItalic.ttf -------------------------------------------------------------------------------- /fonts/ttf/YoungSerif-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/ttf/YoungSerif-Medium.ttf -------------------------------------------------------------------------------- /fonts/ttf/YoungSerif-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/ttf/YoungSerif-MediumItalic.ttf -------------------------------------------------------------------------------- /fonts/ttf/YoungSerif-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/ttf/YoungSerif-Regular.ttf -------------------------------------------------------------------------------- /fonts/ttf/YoungSerif-RegularItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/ttf/YoungSerif-RegularItalic.ttf -------------------------------------------------------------------------------- /fonts/variable/Young-Serif-Italic[wght].ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/variable/Young-Serif-Italic[wght].ttf -------------------------------------------------------------------------------- /fonts/variable/Young-Serif[wght].ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/variable/Young-Serif[wght].ttf -------------------------------------------------------------------------------- /fonts/webfonts/Young-Serif[ital,wght].woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/webfonts/Young-Serif[ital,wght].woff2 -------------------------------------------------------------------------------- /fonts/webfonts/YoungSerif-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/webfonts/YoungSerif-Bold.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/YoungSerif-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/webfonts/YoungSerif-BoldItalic.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/YoungSerif-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/webfonts/YoungSerif-Light.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/YoungSerif-LightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/webfonts/YoungSerif-LightItalic.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/YoungSerif-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/webfonts/YoungSerif-Medium.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/YoungSerif-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/webfonts/YoungSerif-MediumItalic.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/YoungSerif-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/webfonts/YoungSerif-Regular.woff2 -------------------------------------------------------------------------------- /fonts/webfonts/YoungSerif-RegularItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/noirblancrouge/YoungSerif/af3f7c464f18cc0a9079136ae301a717ddca8be1/fonts/webfonts/YoungSerif-RegularItalic.woff2 -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:recommended" 5 | ], 6 | "rangeStrategy": "bump" 7 | } 8 | -------------------------------------------------------------------------------- /requirements-test.in: -------------------------------------------------------------------------------- 1 | fontbakery[googlefonts]>=0.9.2 2 | gftools[qa]>=0.9.23 3 | -------------------------------------------------------------------------------- /requirements-test.txt: -------------------------------------------------------------------------------- 1 | # Placeholder file, update the requirements by running `make update`. 2 | -r requirements-test.in 3 | -------------------------------------------------------------------------------- /requirements.in: -------------------------------------------------------------------------------- 1 | fontmake>=3.9.0 2 | gftools[qa]>=0.9.54 3 | drawbot-skia>=0.5.0 4 | sh>=2.0.6 5 | bumpfontversion>=0.4.1 6 | diffenator2>=0.3.8 7 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # Placeholder file, update the requirements by running `make update`. 2 | -r requirements.in 3 | -------------------------------------------------------------------------------- /scripts/customize.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # This script is run by the user using `make customize` after the repository 4 | # is cloned. If you are reading this because `make customize` failed, 5 | # skip down to the section headed "INITIALIZATION STEPS". 6 | 7 | from sh import git 8 | import datetime 9 | import re 10 | import sys 11 | from urllib.parse import quote 12 | import subprocess 13 | import requests 14 | 15 | BASE_OWNER = "googlefonts" 16 | BASE_REPONAME = "googlefonts-project-template" 17 | DUMMY_URL = "https://yourname.github.io/your-font-repository-name" 18 | LATEST_OFL = "https://raw.githubusercontent.com/googlefonts/googlefonts-project-template/main/OFL.txt" 19 | 20 | 21 | def repo_url(owner, name): 22 | return f"https://github.com/{owner}/{name}" 23 | 24 | 25 | def web_url(owner, name): 26 | return f"https://{owner}.github.io/{name}" 27 | 28 | 29 | def raw_url(owner, name): 30 | return f"https://raw.githubusercontent.com/{owner}/{name}" 31 | 32 | 33 | def lose(msg, e=None): 34 | print(msg) 35 | print("You will need to do the initialization steps manually.") 36 | print("Read scripts/customize.py for more instructions how to do this.") 37 | if e: 38 | print( 39 | "\nHere's an additional error message which may help diagnose the problem." 40 | ) 41 | raise e 42 | sys.exit(1) 43 | 44 | 45 | try: 46 | my_repo_url = git.remote("get-url", "origin") 47 | except Exception as e: 48 | lose("Could not use git to find my own repository URL", e) 49 | 50 | m = re.match(r"(?:https://github.com/|git@github.com:)(.*)/(.*)/?", str(my_repo_url)) 51 | if not m: 52 | lose( 53 | f"My git repository URL ({my_repo_url}) didn't look what I expected - are you hosting this on github?" 54 | ) 55 | 56 | owner, reponame = m[1], m[2] 57 | 58 | if owner == BASE_OWNER and reponame == BASE_REPONAME: 59 | print("I am being run on the upstream repository; don't do that") 60 | sys.exit() 61 | 62 | # INITIALIZATION STEPS 63 | 64 | # First, the README file contains URLs to pages in the `gh-pages` branch of the 65 | # repo. When initially cloned, these URLs will point to the 66 | # googlefonts/Unified-Font-Repository itself. But downstream users want links 67 | # and badges about their own font, not ours! So any URLs need to be adjusted to 68 | # refer to the end user's repository. 69 | 70 | # We will also pin the dependencies so future builds are reproducible. 71 | 72 | readme = open("README.md").read() 73 | ghpages_url = web_url(owner, reponame) 74 | project_url = repo_url(owner, reponame) 75 | 76 | print("Fixing URLs:", web_url(BASE_OWNER, BASE_REPONAME), "->", ghpages_url) 77 | 78 | readme = readme.replace(web_url(BASE_OWNER, BASE_REPONAME), ghpages_url) 79 | # In the badges, the URLs to raw.githubusercontent.com are URL-encoded as they 80 | # are passed to shields.io. 81 | readme = readme.replace( 82 | quote(raw_url(BASE_OWNER, BASE_REPONAME), safe=""), 83 | quote(raw_url(owner, reponame), safe=""), 84 | ) 85 | 86 | print("Fixing URLs:", DUMMY_URL, "->", ghpages_url) 87 | readme = readme.replace(f"`{DUMMY_URL}`", ghpages_url) 88 | 89 | with open("README.md", "w") as fh: 90 | fh.write(readme) 91 | 92 | git.add("README.md") 93 | 94 | # Fix the OFL 95 | year = datetime.date.today().year 96 | title = reponame.title() 97 | copyright = f"Copyright {year} The {title} Project Authors ({project_url})\n" 98 | print("Fetching the latest OFL..") 99 | ofl = requests.get(LATEST_OFL).text.splitlines() 100 | print("Writing an OFL for you") 101 | print(copyright) 102 | with open("OFL.txt", "w") as fh: 103 | fh.write(copyright) 104 | fh.write("\n".join(ofl[1:])) 105 | 106 | git.add("OFL.txt") 107 | 108 | # Pin the dependencies 109 | print("Pinning dependencies") 110 | dependencies = subprocess.check_output(["pip", "freeze"]) 111 | with open("requirements.txt", "wb") as dependency_file: 112 | dependency_file.write(dependencies) 113 | git.add("requirements.txt") 114 | 115 | # Did anything change? 116 | result = git.status("--porcelain") 117 | if any(line.startswith("M ") for line in result.splitlines()): 118 | git.commit("-m", "Customize repository") 119 | 120 | print("Pushing changes to GitHub") 121 | git.push() 122 | else: 123 | print("Nothing changed, no need to push") 124 | -------------------------------------------------------------------------------- /scripts/first-run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # This script is run the first time any action is performed after the repository 4 | # is cloned. If you are reading this because the automatic initialization failed, 5 | # skip down to the section headed "INITIALIZATION STEPS". 6 | 7 | from sh import git 8 | import datetime 9 | import re 10 | import sys 11 | from urllib.parse import quote 12 | import subprocess 13 | 14 | BASE_OWNER = "googlefonts" 15 | BASE_REPONAME = "googlefonts-project-template" 16 | DUMMY_URL = "https://yourname.github.io/your-font-repository-name" 17 | 18 | 19 | def repo_url(owner, name): 20 | return f"https://github.com/{owner}/{name}" 21 | 22 | 23 | def web_url(owner, name): 24 | return f"https://{owner}.github.io/{name}" 25 | 26 | 27 | def raw_url(owner, name): 28 | return f"https://raw.githubusercontent.com/{owner}/{name}" 29 | 30 | 31 | def touch(): 32 | open(".init.stamp", "w").close() 33 | 34 | 35 | def lose(msg, e=None): 36 | print(msg) 37 | print("You will need to do the initialization steps manually.") 38 | print("Read scripts/first-run.py for more instructions how to do this.") 39 | if e: 40 | print( 41 | "\nHere's an additional error message which may help diagnose the problem." 42 | ) 43 | raise e 44 | sys.exit(1) 45 | 46 | 47 | try: 48 | my_repo_url = git.remote("get-url", "origin") 49 | except Exception as e: 50 | lose("Could not use git to find my own repository URL", e) 51 | 52 | m = re.match(r"(?:https://github.com/|git@github.com:)(.*)/(.*)/?", str(my_repo_url)) 53 | if not m: 54 | lose( 55 | f"My git repository URL ({my_repo_url}) didn't look what I expected - are you hosting this on github?" 56 | ) 57 | 58 | owner, reponame = m[1], m[2] 59 | 60 | if owner == BASE_OWNER and reponame == BASE_REPONAME: 61 | print("I am being run on the upstream repository (probably due to CI)") 62 | print("All I'm going to do is create the touch file and quit.") 63 | touch() 64 | sys.exit() 65 | 66 | # INITIALIZATION STEPS 67 | 68 | # First, the README file contains URLs to pages in the `gh-pages` branch of the 69 | # repo. When initially cloned, these URLs will point to the 70 | # googlefonts/Unified-Font-Repository itself. But downstream users want links 71 | # and badges about their own font, not ours! So any URLs need to be adjusted to 72 | # refer to the end user's repository. 73 | 74 | # We will also pin the dependencies so future builds are reproducible. 75 | 76 | readme = open("README.md").read() 77 | 78 | print( 79 | "Fixing URLs:", web_url(BASE_OWNER, BASE_REPONAME), "->", web_url(owner, reponame) 80 | ) 81 | 82 | readme = readme.replace(web_url(BASE_OWNER, BASE_REPONAME), web_url(owner, reponame)) 83 | # In the badges, the URLs to raw.githubusercontent.com are URL-encoded as they 84 | # are passed to shields.io. 85 | print( 86 | "Fixing URLs:", 87 | quote(raw_url(BASE_OWNER, BASE_REPONAME), safe=""), 88 | "->", 89 | quote(raw_url(owner, reponame), safe=""), 90 | ) 91 | readme = readme.replace( 92 | quote(raw_url(BASE_OWNER, BASE_REPONAME), safe=""), 93 | quote(raw_url(owner, reponame), safe=""), 94 | ) 95 | 96 | print( 97 | "Fixing URLs:", 98 | DUMMY_URL, 99 | "->", 100 | web_url(owner, reponame), 101 | ) 102 | readme = readme.replace( 103 | f"`{DUMMY_URL}`", 104 | web_url(owner, reponame), 105 | ) 106 | 107 | with open("README.md", "w") as fh: 108 | fh.write(readme) 109 | 110 | # Fix the OFL 111 | 112 | ofl = open("OFL.txt").read() 113 | ofl = ofl.replace(web_url(BASE_OWNER, BASE_REPONAME), web_url(owner, reponame)) 114 | ofl = ofl.replace("My Font", reponame.title()) 115 | ofl = ofl.replace("20**", str(datetime.date.today().year)) 116 | with open("OFL.txt", "w") as fh: 117 | fh.write(ofl) 118 | 119 | # Pin the dependencies 120 | print("Pinning dependencies") 121 | dependencies = subprocess.check_output(["pip", "freeze"]) 122 | with open("requirements.txt", "wb") as dependency_file: 123 | dependency_file.write(dependencies) 124 | 125 | # Finally, we add a "touch file" called ".init.stamp" to the repository which 126 | # prevents this first-run process from being run again. 127 | touch() 128 | -------------------------------------------------------------------------------- /scripts/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | My Font development 7 | 8 | 9 |

My Font testing pages

10 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /scripts/read-config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Yes, this is a Bad YAML Parser, but at this stage we are not in the 3 | # venv and do not know what modules the user has available, so for 4 | # maximum compatibility, we are just assuming a plain Python distribution. 5 | import argparse 6 | import re 7 | import sys 8 | import os 9 | 10 | parser = argparse.ArgumentParser() 11 | group = parser.add_mutually_exclusive_group(required=True) 12 | group.add_argument("--sources", action="store_true") 13 | group.add_argument("--family", action="store_true") 14 | args = parser.parse_args() 15 | 16 | with open(os.path.join("sources", "config.yaml")) as config: 17 | data = config.read() 18 | 19 | if args.family: 20 | m = re.search(r"(?m)^familyName: (.*)", data) 21 | if m: 22 | print(m[1]) 23 | sys.exit(0) 24 | else: 25 | print("Could not determine family name from config file!") 26 | sys.exit(1) 27 | 28 | toggle = False 29 | sources = [] 30 | for line in data.splitlines(): 31 | if re.match("^sources:", line): 32 | toggle = True 33 | continue 34 | if toggle: 35 | m = re.match(r"^\s*-\s*(.*)", line) 36 | if m: 37 | sources.append("sources/" + m[1]) 38 | else: 39 | toggle = False 40 | if sources: 41 | print(" ".join(sources)) 42 | sys.exit(0) 43 | else: 44 | print("Could not determine sources from config file!") 45 | sys.exit(1) 46 | -------------------------------------------------------------------------------- /scripts/update-custom-filter.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | GF_Latin_All = "https://github.com/googlefonts/glyphsets/raw/main/GF_glyphsets/Latin/glyphs/CustomFilter_GF_Latin.plist" 4 | dest = "sources/CustomFilter_GF_Latin_All.plist" 5 | 6 | r = requests.get(GF_Latin_All) 7 | with open(dest, "wb") as f: 8 | f.write(r.content) 9 | -------------------------------------------------------------------------------- /sources/config.yaml: -------------------------------------------------------------------------------- 1 | sources: 2 | - Young-Serif.glyphs 3 | axisOrder: 4 | - wght 5 | - ital 6 | familyName: "Young Serif" 7 | cleanUp: true 8 | buildVariable: true 9 | buildStatic: true 10 | buildTTF: true 11 | buildOTF: true 12 | buildSmallCap: false 13 | autohintTTF: true 14 | includeSourceFixes: true 15 | --------------------------------------------------------------------------------