├── .gitignore ├── LICENSE-APACHE.md ├── LICENSE-CC-BY.md ├── LICENSE-MIT.md ├── LICENSE-OFL.md ├── LICENSE.md ├── README.md ├── css └── font-cassini.css ├── dist └── font-cassini.svg ├── font-cassini.json ├── font-cassini.png ├── fonts ├── font-cassini.eot ├── font-cassini.svg ├── font-cassini.ttf ├── font-cassini.woff ├── font-cassini.woff2 └── readme.md ├── gulpfile.js ├── index.css ├── index.html ├── index.js ├── package-lock.json ├── package.json ├── serve.js ├── svg ├── autre │ ├── uEA2C-gibet.svg │ ├── uEA39-calvaire.svg │ ├── uEA3A-gibet-s.svg │ └── uEA3D-entree-mine.svg ├── bati │ ├── uEA01-abbaye.svg │ ├── uEA02-abbaye-r.svg │ ├── uEA03-auberge.svg │ ├── uEA04-chapelle.svg │ ├── uEA05-chapelle-r.svg │ ├── uEA06-chateau.svg │ ├── uEA07-chateau-r.svg │ ├── uEA08-commanderie.svg │ ├── uEA09-commanderie-r.svg │ ├── uEA0A-ferme.svg │ ├── uEA0B-hameau.svg │ ├── uEA0C-hameau-r.svg │ ├── uEA0D-moulin-eau.svg │ ├── uEA0E-moulin-vent-b.svg │ ├── uEA0F-moulin-vent-pierre.svg │ ├── uEA10-paroisse.svg │ ├── uEA11-paroisse-protegee.svg │ ├── uEA12-paroisse-r.svg │ ├── uEA13-paroisse-chateau.svg │ ├── uEA14-prieure.svg │ ├── uEA15-prieure-r.svg │ ├── uEA16-tour.svg │ ├── uEA17-tour-r.svg │ ├── uEA18-villa.svg │ ├── uEA1C-cabane.svg │ ├── uEA1D-tuillerie.svg │ ├── uEA3B-moulin-vent-a.svg │ └── uEA3C-tour-a.svg ├── icon │ ├── uEA1E-abbaye-s.svg │ ├── uEA1F-cabane-s.svg │ ├── uEA21-chateau-s.svg │ ├── uEA22-commanderie-s.svg │ ├── uEA23-hameau-s.svg │ ├── uEA24-moulin-vent-bois-s.svg │ ├── uEA25-moulin-vent-pierre-s.svg │ ├── uEA26-paroisse-chateau-s.svg │ ├── uEA27-paroisse-protegee-s.svg │ ├── uEA28-paroisse-s.svg │ ├── uEA29-prieure-s.svg │ ├── uEA2A-ville-s.svg │ └── uEA2B-chapelle-s.svg ├── militaire │ ├── uEA19-champ-bataille.svg │ ├── uEA1A-bataille-gagnee.svg │ ├── uEA1B-bataille-perdue.svg │ └── uEA20-corps-garde.svg └── vegetation │ ├── uEA2D-dune.svg │ ├── uEA2E-flots.svg │ ├── uEA2F-foret.svg │ ├── uEA30-friche.svg │ ├── uEA31-marais-salant.svg │ ├── uEA32-marais.svg │ ├── uEA33-olivier.svg │ ├── uEA34-pinadas.svg │ ├── uEA35-pres.svg │ ├── uEA36-rocher.svg │ ├── uEA37-sapin.svg │ └── uEA38-vigne.svg └── templates ├── font.svg ├── template.css ├── template.json └── template.svg /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .VSCodeCounter/ 3 | .vscode/ 4 | node-modules/ 5 | /node_modules/ 6 | svg0/ -------------------------------------------------------------------------------- /LICENSE-MIT.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2024 Jean-Marc Viglino 4 | 5 | **All codes and all non font or icon files are licensed under the MIT License.** 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /LICENSE-OFL.md: -------------------------------------------------------------------------------- 1 | # SIL OPEN FONT LICENSE Version 1.1 2 | 3 | Copyright (c) 2024 Jean-Marc Viglino, All rights reserved. 4 | 5 | Font-Cassini font is licensed under the SIL Open Font License, Version 1.1. 6 | This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL 7 | 8 | Preamble 9 | -------- 10 | 11 | The goals of the Open Font License (OFL) are to stimulate worldwide 12 | development of collaborative font projects, to support the font creation 13 | efforts of academic and linguistic communities, and to provide a free and 14 | open framework in which fonts may be shared and improved in partnership 15 | with others. 16 | 17 | The OFL allows the licensed fonts to be used, studied, modified and 18 | redistributed freely as long as they are not sold by themselves. The 19 | fonts, including any derivative works, can be bundled, embedded, 20 | redistributed and/or sold with any software provided that any reserved 21 | names are not used by derivative works. The fonts and derivatives, 22 | however, cannot be released under any other type of license. The 23 | requirement for fonts to remain under this license does not apply 24 | to any document created using the fonts or their derivatives. 25 | 26 | Definitions 27 | ----------- 28 | 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 | ----------------------- 49 | 50 | Permission is hereby granted, free of charge, to any person obtaining 51 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 52 | redistribute, and sell modified and unmodified copies of the Font 53 | Software, subject to the following conditions: 54 | 55 | 1. Neither the Font Software nor any of its individual components, 56 | in Original or Modified Versions, may be sold by itself. 57 | 58 | 2. Original or Modified Versions of the Font Software may be bundled, 59 | redistributed and/or sold with any software, provided that each copy 60 | contains the above copyright notice and this license. These can be 61 | included either as stand-alone text files, human-readable headers or 62 | in the appropriate machine-readable metadata fields within text or 63 | binary files as long as those fields can be easily viewed by the user. 64 | 65 | 3. No Modified Version of the Font Software may use the Reserved Font 66 | Name(s) unless explicit written permission is granted by the corresponding 67 | Copyright Holder. This restriction only applies to the primary font name as 68 | presented to the users. 69 | 70 | 4. The name(s) of the Copyright Holder(s) or the Author(s) of the Font 71 | Software shall not be used to promote, endorse or advertise any 72 | Modified Version, except to acknowledge the contribution(s) of the 73 | Copyright Holder(s) and the Author(s) or with their explicit written 74 | permission. 75 | 76 | 5. The Font Software, modified or unmodified, in part or in whole, 77 | must be distributed entirely under this license, and must not be 78 | distributed under any other license. The requirement for fonts to 79 | remain under this license does not apply to any document created 80 | using the Font Software. 81 | 82 | Termination 83 | ----------- 84 | 85 | This license becomes null and void if any of the above conditions are 86 | not met. 87 | 88 | Disclaimer 89 | ---------- 90 | 91 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 92 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 93 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 94 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 95 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 96 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 97 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 98 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 99 | OTHER DEALINGS IN THE FONT SOFTWARE. 100 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # Font-Cassini License 2 | Copyright (c) 2024 Jean-Marc Viglino 3 | 4 | [Font-Cassini](https://viglino.github.io/font-cassini/) is free, open source, and GPL friendly. 5 | You can use it for commercial projects, open source projects, or really almost whatever you want. 6 | [Read full Font-Cassini license](https://github.com/Viglino/font-cassini/blob/main/LICENSE.md) 7 | 8 | ## Licenses 9 | 10 | Font-Cassini is licensed under [Apache-2.0](https://github.com/Viglino/font-cassini/blob/main/LICENSE-APACHE.md) 11 | 12 | Dual-license can be used for each specific part: 13 | * Font-Cassini font is licensed under the [SIL OFL 1.1 License](https://github.com/Viglino/font-cassini/blob/main/LICENSE-OFL.md) 14 | * Icons and SVG files are licensed under the [CC BY 4.0 License](https://creativecommons.org/licenses/by/4.0/) 15 | * Codes and all non font or icon files are licensed under the [MIT License](https://github.com/Viglino/font-cassini/blob/main/LICENSE-MIT.md) 16 | 17 | ## Attribution 18 | Attribution is required by MIT, SIL OFL, and CC BY licenses. Font-Cassini files already 19 | contain embedded comments with sufficient attribution, so you shouldn't need to 20 | do anything additional when using these files normally. 21 | 22 | ## Brand Icons 23 | All brand icons are trademarks of their respective owners. The use of these 24 | trademarks does not indicate endorsement of the trademark holder by Font-Cassini, 25 | nor vice versa. **Please do not use brand logos for any purpose except 26 | to represent the company, product, or service to which they refer.** 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Font-Cassini 2 | *Icon font set of Cassini map symbols for use with GIS and spatial analysis tools* 3 | 4 | I've collected in this repo icons and graphics I've been using in my projects. 5 | Font-Cassini icons and font theme is designed mainly for GIS applications and web mapping tools. 6 | They can be easily included in a project using the font or svg images. 7 | 8 | [See demo page and examples ](https://viglino.github.io/font-cassini/) 9 | 10 | ## Getting started 11 | 12 | ### NPM package 13 | 14 | Font-Cassini is availiable on Github: 15 | ```console 16 | npm install --save git+https://github.com/viglino/font-cassini.git 17 | ``` 18 | You can access the font or css in the `./font` and `./css` directory of the package. 19 | The svg sprites are located in the `./dist/font-cassini.svg` SVG file. 20 | 21 | ### using Font-Cassini 22 | 23 | You can use Font-Cassini as a font or as SVG symbols or images. 24 | 25 | To use it in a web page, just add the css in your project. 26 | ```html 27 | 28 | ``` 29 | Then use an inline element with a class prefixed with `fc-` to add a new icon. 30 | 31 | 32 | ```html 33 | 34 | 35 | 36 | 37 | ``` 38 | Or use it as an svg sprite (svg sprites are inlocated in the `./dist/font-cassini.svg` file): 39 | 40 | ```html 41 | 42 | ``` 43 | 44 | ## Contributing 45 | Please use the [GitHub issue tracker](https://github.com/Viglino/font-cassini/issues) to ask for new features 46 | or create a pull request. 47 | Font is created from the files in the `./svg` folder, you only have to create a new file in this folder. 48 | Use the `./templates/template.svg` template to create a new icon. 49 | You can add a new glyph in the [font-cassini.json](https://github.com/Viglino/font-cassini/blob/main/font-cassini.json) file with a theme and search tags 50 | (other fields will be filled automatically). 51 | 52 | Your contribution will be published under [Font-Cassini license](https://github.com/Viglino/font-cassini/blob/main/LICENSE.md) as per [GitHub's terms of service](https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license). 53 | 54 | If you wan't to build the font and create the dist, use the build script (run `npm install` to install the dev dependencies before): 55 | ```console 56 | npm run build 57 | ``` 58 | Use a local server (http://localhost:8181/) to see result on the page: 59 | ```console 60 | npm start 61 | ``` 62 | 63 | 64 | ## Licenses 65 | 66 | **Font-Cassini is licensed under [Apache-2.0](https://github.com/Viglino/font-cassini/blob/main/LICENSE-APACHE.md)** 67 | Copyright (c) 2024 Jean-Marc Viglino 68 | 69 | [Font-Cassini](https://viglino.github.io/font-cassini/) is free, open source, and GPL friendly. 70 | You can use it for commercial projects, open source projects, or really almost whatever you want. 71 | [Read full Font-Cassini license](https://github.com/Viglino/font-cassini/blob/main/LICENSE.md) 72 | 73 | Dual-license can be used for each specific part: 74 | * Font-Cassini **font** is licensed under the [SIL OFL 1.1 License](https://github.com/Viglino/font-cassini/blob/main/LICENSE-OFL.md) 75 | * **Icons** and **SVG** files are licensed under the [CC BY 4.0 License](https://creativecommons.org/licenses/by/4.0/) 76 | * **Codes** and all non font or icon files are licensed under the [MIT License](https://github.com/Viglino/font-cassini/blob/main/LICENSE-MIT.md) 77 | 78 | Attribution is required by Apache, MIT, SIL OFL, and CC BY licenses. Font-Cassini files already 79 | contain embedded comments with sufficient attribution, so **you shouldn't need to 80 | do anything additional when using these files normally**. 81 | 82 | -------------------------------------------------------------------------------- /css/font-cassini.css: -------------------------------------------------------------------------------- 1 | /* font-cassini - v.1.0.6 2 | * Icon font set of Cassini map symbols for use with GIS and spatial analysis tools 3 | * 2025 (c) Jean-Marc Viglino - Apache-2.0 4 | * https://github.com/Viglino/font-cassini 5 | */ 6 | @font-face { 7 | font-family: "font-cassini"; 8 | src: url('../fonts/font-cassini.eot?t=1742221348482'); 9 | src: url('../fonts/font-cassini.eot?#iefix') format('eot'), 10 | url('../fonts/font-cassini.woff2?t=1742221348482') format('woff2'), 11 | url('../fonts/font-cassini.woff?t=1742221348482') format('woff'), 12 | url('../fonts/font-cassini.ttf?t=1742221348482') format('truetype'), 13 | url('../fonts/font-cassini.svg#font-cassini') format('svg'); 14 | font-weight: normal; 15 | font-style: normal; 16 | } 17 | 18 | .font-cassini { 19 | width: 1em; 20 | height: 1em; 21 | } 22 | 23 | [class^="fc-"]:before, [class*="fc-"]:before { 24 | font-family: "font-cassini"; 25 | font-style: normal; 26 | font-weight: normal; 27 | speak: none; 28 | display: inline-block; 29 | text-decoration: inherit; 30 | text-align: center; 31 | /* For safety - reset parent styles, that can break glyph codes*/ 32 | font-variant: normal; 33 | text-transform: none; 34 | /* fix buttons height, for twitter bootstrap */ 35 | line-height: 1em; 36 | /* Font smoothing. That was taken from TWBS */ 37 | -webkit-font-smoothing: antialiased; 38 | -moz-osx-font-smoothing: grayscale; 39 | } 40 | 41 | [class^="fc-"] { 42 | display: inline-block; 43 | } 44 | .fc-lg { 45 | font-size: 1.3333333333333333em; 46 | line-height: 0.75em; 47 | vertical-align: -15%; 48 | } 49 | .fc-2x { font-size: 2em; } 50 | .fc-3x { font-size: 3em; } 51 | .fc-4x { font-size: 4em; } 52 | .fc-5x { font-size: 5em; } 53 | .fc-fw { 54 | width: 1.2857142857142858em; 55 | text-align: center; 56 | } 57 | 58 | .fc-rotate10 { 59 | -webkit-transform: rotate(10deg); 60 | -ms-transform: rotate(10deg); 61 | transform: rotate(10deg); 62 | } 63 | .fc-rotate-10 { 64 | -webkit-transform: rotate(-10deg); 65 | -ms-transform: rotate(-10deg); 66 | transform: rotate(-10deg); 67 | } 68 | .fc-rotate20 { 69 | -webkit-transform: rotate(20deg); 70 | -ms-transform: rotate(20deg); 71 | transform: rotate(20deg); 72 | } 73 | .fc-rotate-20 { 74 | -webkit-transform: rotate(-20deg); 75 | -ms-transform: rotate(-20deg); 76 | transform: rotate(-20deg); 77 | } 78 | .fc-rotate45 { 79 | -webkit-transform: rotate(45deg); 80 | -ms-transform: rotate(45deg); 81 | transform: rotate(45deg); 82 | } 83 | .fc-rotate90 { 84 | -webkit-transform: rotate(90deg); 85 | -ms-transform: rotate(90deg); 86 | transform: rotate(90deg); 87 | } 88 | .fc-rotate135 { 89 | -webkit-transform: rotate(135deg); 90 | -ms-transform: rotate(135deg); 91 | transform: rotate(135deg); 92 | } 93 | .fc-rotate180 { 94 | -webkit-transform: rotate(180deg); 95 | -ms-transform: rotate(180deg); 96 | transform: rotate(180deg); 97 | } 98 | .fc-rotate225 { 99 | -webkit-transform: rotate(225deg); 100 | -ms-transform: rotate(225deg); 101 | transform: rotate(225deg); 102 | } 103 | .fc-rotate270 { 104 | -webkit-transform: rotate(270deg); 105 | -ms-transform: rotate(270deg); 106 | transform: rotate(270deg); 107 | } 108 | .fc-rotate315 { 109 | -webkit-transform: rotate(315deg); 110 | -ms-transform: rotate(315deg); 111 | transform: rotate(315deg); 112 | } 113 | 114 | .fc-fliph { 115 | -webkit-transform: scale(-1, 1); 116 | -ms-transform: scale(-1, 1); 117 | transform: scale(-1, 1); 118 | } 119 | .fc-flipv { 120 | -webkit-transform: scale(1, -1); 121 | -ms-transform: scale(1, -1); 122 | transform: scale(1, -1); 123 | } 124 | 125 | .fc-stack { 126 | position: relative; 127 | display: inline-block; 128 | width: 1em; 129 | height: 1em; 130 | line-height: 1em; 131 | vertical-align: middle; 132 | } 133 | .fc-stack [class^="fc-"] { 134 | position: absolute; 135 | } 136 | 137 | .fc-spin { 138 | -webkit-animation: fc-spin 2s infinite linear; 139 | animation: fc-spin 2s infinite linear; 140 | } 141 | .fc-pulse { 142 | -webkit-animation: fc-spin 1s infinite steps(8); 143 | animation: fc-spin 1s infinite steps(8); 144 | } 145 | 146 | @-webkit-keyframes fc-spin { 147 | 0% { 148 | -webkit-transform: rotate(0deg); 149 | transform: rotate(0deg); 150 | } 151 | 100% { 152 | -webkit-transform: rotate(359deg); 153 | transform: rotate(359deg); 154 | } 155 | } 156 | @keyframes fc-spin { 157 | 0% { 158 | -webkit-transform: rotate(0deg); 159 | transform: rotate(0deg); 160 | } 161 | 100% { 162 | -webkit-transform: rotate(359deg); 163 | transform: rotate(359deg); 164 | } 165 | } 166 | 167 | .fc-gibet:before { content: "\ea2c"; } 168 | .fc-calvaire:before { content: "\ea39"; } 169 | .fc-gibet-s:before { content: "\ea3a"; } 170 | .fc-entree-mine:before { content: "\ea3d"; } 171 | .fc-abbaye:before { content: "\ea01"; } 172 | .fc-abbaye-r:before { content: "\ea02"; } 173 | .fc-auberge:before { content: "\ea03"; } 174 | .fc-chapelle:before { content: "\ea04"; } 175 | .fc-chapelle-r:before { content: "\ea05"; } 176 | .fc-chateau:before { content: "\ea06"; } 177 | .fc-chateau-r:before { content: "\ea07"; } 178 | .fc-commanderie:before { content: "\ea08"; } 179 | .fc-commanderie-r:before { content: "\ea09"; } 180 | .fc-ferme:before { content: "\ea0a"; } 181 | .fc-hameau:before { content: "\ea0b"; } 182 | .fc-hameau-r:before { content: "\ea0c"; } 183 | .fc-moulin-eau:before { content: "\ea0d"; } 184 | .fc-moulin-vent-b:before { content: "\ea0e"; } 185 | .fc-moulin-vent-pierre:before { content: "\ea0f"; } 186 | .fc-paroisse:before { content: "\ea10"; } 187 | .fc-paroisse-protegee:before { content: "\ea11"; } 188 | .fc-paroisse-r:before { content: "\ea12"; } 189 | .fc-paroisse-chateau:before { content: "\ea13"; } 190 | .fc-prieure:before { content: "\ea14"; } 191 | .fc-prieure-r:before { content: "\ea15"; } 192 | .fc-tour:before { content: "\ea16"; } 193 | .fc-tour-r:before { content: "\ea17"; } 194 | .fc-villa:before { content: "\ea18"; } 195 | .fc-cabane:before { content: "\ea1c"; } 196 | .fc-tuillerie:before { content: "\ea1d"; } 197 | .fc-moulin-vent-a:before { content: "\ea3b"; } 198 | .fc-tour-a:before { content: "\ea3c"; } 199 | .fc-abbaye-s:before { content: "\ea1e"; } 200 | .fc-cabane-s:before { content: "\ea1f"; } 201 | .fc-chateau-s:before { content: "\ea21"; } 202 | .fc-commanderie-s:before { content: "\ea22"; } 203 | .fc-hameau-s:before { content: "\ea23"; } 204 | .fc-moulin-vent-bois-s:before { content: "\ea24"; } 205 | .fc-moulin-vent-pierre-s:before { content: "\ea25"; } 206 | .fc-paroisse-chateau-s:before { content: "\ea26"; } 207 | .fc-paroisse-protegee-s:before { content: "\ea27"; } 208 | .fc-paroisse-s:before { content: "\ea28"; } 209 | .fc-prieure-s:before { content: "\ea29"; } 210 | .fc-ville-s:before { content: "\ea2a"; } 211 | .fc-chapelle-s:before { content: "\ea2b"; } 212 | .fc-champ-bataille:before { content: "\ea19"; } 213 | .fc-bataille-gagnee:before { content: "\ea1a"; } 214 | .fc-bataille-perdue:before { content: "\ea1b"; } 215 | .fc-corps-garde:before { content: "\ea20"; } 216 | .fc-dune:before { content: "\ea2d"; } 217 | .fc-flots:before { content: "\ea2e"; } 218 | .fc-foret:before { content: "\ea2f"; } 219 | .fc-friche:before { content: "\ea30"; } 220 | .fc-marais-salant:before { content: "\ea31"; } 221 | .fc-marais:before { content: "\ea32"; } 222 | .fc-olivier:before { content: "\ea33"; } 223 | .fc-pinadas:before { content: "\ea34"; } 224 | .fc-pres:before { content: "\ea35"; } 225 | .fc-rocher:before { content: "\ea36"; } 226 | .fc-sapin:before { content: "\ea37"; } 227 | .fc-vigne:before { content: "\ea38"; } -------------------------------------------------------------------------------- /font-cassini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Viglino/font-cassini/2bb34e607c494fcd0d698e4a9c8670afb37ee583/font-cassini.png -------------------------------------------------------------------------------- /fonts/font-cassini.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Viglino/font-cassini/2bb34e607c494fcd0d698e4a9c8670afb37ee583/fonts/font-cassini.eot -------------------------------------------------------------------------------- /fonts/font-cassini.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Viglino/font-cassini/2bb34e607c494fcd0d698e4a9c8670afb37ee583/fonts/font-cassini.ttf -------------------------------------------------------------------------------- /fonts/font-cassini.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Viglino/font-cassini/2bb34e607c494fcd0d698e4a9c8670afb37ee583/fonts/font-cassini.woff -------------------------------------------------------------------------------- /fonts/font-cassini.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Viglino/font-cassini/2bb34e607c494fcd0d698e4a9c8670afb37ee583/fonts/font-cassini.woff2 -------------------------------------------------------------------------------- /fonts/readme.md: -------------------------------------------------------------------------------- 1 | # [Font-Cassini](https://github.com/Viglino/font-cassini) 2 | *Icon font set of Cassini map symbols for use with GIS and spatial analysis tools* 3 | 4 | Copyright (c) 2024 Jean-Marc Viglino, 5 | All rights reserved. 6 | 7 | Font-Cassini font is licensed under the SIL Open Font License, Version 1.1. 8 | This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL 9 | 10 | # SIL OPEN FONT LICENSE Version 1.1 11 | 12 | Preamble 13 | -------- 14 | 15 | The goals of the Open Font License (OFL) are to stimulate worldwide 16 | development of collaborative font projects, to support the font creation 17 | efforts of academic and linguistic communities, and to provide a free and 18 | open framework in which fonts may be shared and improved in partnership 19 | with others. 20 | 21 | The OFL allows the licensed fonts to be used, studied, modified and 22 | redistributed freely as long as they are not sold by themselves. The 23 | fonts, including any derivative works, can be bundled, embedded, 24 | redistributed and/or sold with any software provided that any reserved 25 | names are not used by derivative works. The fonts and derivatives, 26 | however, cannot be released under any other type of license. The 27 | requirement for fonts to remain under this license does not apply 28 | to any document created using the fonts or their derivatives. 29 | 30 | Definitions 31 | ----------- 32 | 33 | `"Font Software"` refers to the set of files released by the Copyright 34 | Holder(s) under this license and clearly marked as such. This may 35 | include source files, build scripts and documentation. 36 | 37 | `"Reserved Font Name"` refers to any names specified as such after the 38 | copyright statement(s). 39 | 40 | `"Original Version"` refers to the collection of Font Software components as 41 | distributed by the Copyright Holder(s). 42 | 43 | `"Modified Version"` refers to any derivative made by adding to, deleting, 44 | or substituting -- in part or in whole -- any of the components of the 45 | Original Version, by changing formats or by porting the Font Software to a 46 | new environment. 47 | 48 | `"Author"` refers to any designer, engineer, programmer, technical 49 | writer or other person who contributed to the Font Software. 50 | 51 | Permission & Conditions 52 | ----------------------- 53 | 54 | Permission is hereby granted, free of charge, to any person obtaining 55 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 56 | redistribute, and sell modified and unmodified copies of the Font 57 | Software, subject to the following conditions: 58 | 59 | 1. Neither the Font Software nor any of its individual components, 60 | in Original or Modified Versions, may be sold by itself. 61 | 62 | 2. Original or Modified Versions of the Font Software may be bundled, 63 | redistributed and/or sold with any software, provided that each copy 64 | contains the above copyright notice and this license. These can be 65 | included either as stand-alone text files, human-readable headers or 66 | in the appropriate machine-readable metadata fields within text or 67 | binary files as long as those fields can be easily viewed by the user. 68 | 69 | 3. No Modified Version of the Font Software may use the Reserved Font 70 | Name(s) unless explicit written permission is granted by the corresponding 71 | Copyright Holder. This restriction only applies to the primary font name as 72 | presented to the users. 73 | 74 | 4. The name(s) of the Copyright Holder(s) or the Author(s) of the Font 75 | Software shall not be used to promote, endorse or advertise any 76 | Modified Version, except to acknowledge the contribution(s) of the 77 | Copyright Holder(s) and the Author(s) or with their explicit written 78 | permission. 79 | 80 | 5. The Font Software, modified or unmodified, in part or in whole, 81 | must be distributed entirely under this license, and must not be 82 | distributed under any other license. The requirement for fonts to 83 | remain under this license does not apply to any document created 84 | using the Font Software. 85 | 86 | Termination 87 | ----------- 88 | 89 | This license becomes null and void if any of the above conditions are 90 | not met. 91 | 92 | Disclaimer 93 | ---------- 94 | 95 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 96 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 97 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 98 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 99 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 100 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 101 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 102 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 103 | OTHER DEALINGS IN THE FONT SOFTWARE. 104 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var iconfont = require('gulp-iconfont'); 3 | // var iconfontCss = require('gulp-iconfont-css'); 4 | const rename = require('gulp-rename') 5 | const vinylPaths = require('vinyl-paths'); 6 | const del = require('del'); 7 | var async = require('async'); 8 | var consolidate = require('gulp-consolidate'); 9 | var fs = require('fs') 10 | var pack = JSON.parse(fs.readFileSync('./package.json')) 11 | 12 | var fontName = 'font-cassini'; // set name of your symbol font 13 | const className = 'fc' // set class name in your CSS 14 | const template = 'templates/template' // or 'foundation-style' 15 | var runTimestamp = Math.round(Date.now()/1000); 16 | var today = (new Date()).toISOString().split('T')[0] 17 | 18 | var version = process.env.npm_package_version.split('.'); 19 | version = 10000*version[0] + 100*version[1] + version[2]; 20 | 21 | const es = require('event-stream'); 22 | var path = require('path'); 23 | var fileDir = {}; 24 | 25 | function logFile() { 26 | return es.map(function(file, cb) { 27 | var dir = path.parse(file.path).dir; 28 | var name = path.parse(file.path).name.replace(/^u[^-]*-/,''); 29 | fileDir[name] = path.parse(dir).name; 30 | return cb(null, file); 31 | }); 32 | }; 33 | 34 | gulp.task('Iconfont', function(done) { 35 | var iconStream = gulp.src(['svg/**/u*.svg', 'svg/**/*.svg']) 36 | .pipe(logFile()) 37 | .pipe(iconfont({ 38 | fontName: fontName, 39 | prependUnicode: true, // recommended option 40 | formats: ['ttf', 'eot', 'woff', 'woff2', 'svg'], // default, 'woff2' and 'svg' are available 41 | fontHeight: 1000, 42 | descent: 200, 43 | normalize: true, 44 | timestamp: runTimestamp // recommended to get consistent builds when watching files 45 | })); 46 | 47 | async.parallel([ 48 | function handleGlyphs (cb) { 49 | iconStream.on('glyphs', function(glyphs) { 50 | const options = { 51 | className, 52 | fontName, 53 | fontPath: '../fonts/', // set path to font (from your CSS file if relative) 54 | dtime: (new Date()).getTime(), 55 | glyphs: glyphs.map(mapGlyphs), 56 | author: pack.author.name, 57 | git: pack.author.name, 58 | homepage: pack.homepage, 59 | version: pack.version, 60 | keywords: pack.keywords.join(' - '), 61 | year: (new Date()).getFullYear(), 62 | desc: pack.description, 63 | license: pack.license 64 | } 65 | gulp.src(template+'.json') 66 | .pipe(consolidate('lodash', options)) 67 | .pipe(rename({ basename: fontName })) 68 | .pipe(gulp.dest('./')); 69 | gulp.src(template+'.css') 70 | .pipe(consolidate('lodash', options)) 71 | .pipe(rename({ basename: 'temp' })) 72 | .pipe(gulp.dest('css/')) 73 | .on('finish', cb); 74 | }); 75 | }, 76 | function handleFonts (cb) { 77 | iconStream 78 | .pipe(gulp.dest('fonts/')) 79 | .on('finish', cb); 80 | } 81 | ], done); 82 | }); 83 | 84 | /** Get glyphs */ 85 | var font = JSON.parse(fs.readFileSync('./font-cassini.json')); 86 | 87 | function mapGlyphs (glyph) { 88 | var resp = { 89 | name: glyph.name, 90 | theme: fileDir[glyph.name], 91 | codepoint: glyph.unicode[0].charCodeAt(0).toString(16), 92 | code: glyph.unicode[0].charCodeAt(0) 93 | }; 94 | var glyph = font.glyphs[className+'-'+glyph.name]; 95 | // Get back theme / search information 96 | if (glyph && glyph.theme) { 97 | resp.search = glyph.search; 98 | resp.order = glyph.order; 99 | resp.version = glyph.version; 100 | resp.date = glyph.date; 101 | } 102 | if (!resp.order) resp.order = Math.round(((new Date()) - (new Date('2024')))/1000); 103 | if (!resp.version) resp.version = version; 104 | if (!resp.date) resp.date = today; 105 | // console.log({ name: resp.name, code: resp.codepoint }); 106 | return resp; 107 | } 108 | 109 | /** Reset names */ 110 | gulp.task('resname', function(){ 111 | return gulp.src(['svg/**/u*.svg']) 112 | .pipe(rename(function (path) { 113 | path.dirname = ''; 114 | path.basename = path.basename.replace(/u([^-]*)-/,''); 115 | })) 116 | .pipe(gulp.dest("./dist")); 117 | }); 118 | 119 | /** Use svgstore to create svg sprites */ 120 | var svgstore = require('gulp-svgstore'); 121 | var svgmin = require('gulp-svgmin'); 122 | var cheerio = require('gulp-cheerio'); 123 | 124 | gulp.task('store', function(){ 125 | return gulp.src(['svg/**/u*.svg']) 126 | .pipe(rename(function (path) { 127 | path.dirname = ''; 128 | path.basename = 'fc-' + path.basename.replace(/u([^-]*)-/,''); 129 | })) 130 | .pipe(svgmin({ 131 | plugins: [{ 132 | removeAttrs: {attrs: '(stroke|fill|style|color|font-weight|font-family|stroke-width)'} 133 | /* not working... 134 | removeViewBox: false, 135 | addAttributesToSVGElement: { 136 | attributes: [ 137 | { 138 | fill: 'currentColor' 139 | }, { 140 | 'aria-hidden': true 141 | } 142 | ] 143 | } 144 | */ 145 | }] 146 | })) 147 | .pipe(svgstore()) 148 | .pipe(cheerio({ 149 | run: function ($) { 150 | // Set SVG attributes 151 | $('svg').attr('style', 'display:none'); 152 | $('symbol').attr('fill', 'currentColor'); 153 | $('symbol').attr('viewBox', '0 0 100 100'); 154 | $('symbol').attr('aria-hidden', 'true'); 155 | }, 156 | parserOptions: { xmlMode: true } 157 | })) 158 | .pipe(rename(function (path) { 159 | path.basename = 'font-cassini'; 160 | })) 161 | .pipe(gulp.dest('./dist')); 162 | }); 163 | 164 | // Rename css to force watch / serve 165 | gulp.task('renameCSS', function(){ 166 | return gulp.src('./css/temp.css') 167 | .pipe(vinylPaths(del)) // delete the original disk copy 168 | .pipe(rename(function (path) { 169 | path.basename = fontName; 170 | })) 171 | .pipe(gulp.dest("./css")); 172 | }); 173 | 174 | gulp.task("default", gulp.series(gulp.task("Iconfont"), gulp.task("store"), gulp.task("renameCSS"))); 175 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /** Color picker */ 2 | var picker = new ColorPicker($('#icon .color').get(0), $('#icon i').css('color')); 3 | $('#icon .color').get(0).addEventListener('colorChange', function (e) { 4 | $('#icon i').css('color', e.detail.color.hexa); 5 | }); 6 | 7 | function showPage(name, url) { 8 | $('[data-page]').hide(); 9 | $('body').removeClass(); 10 | $('body').addClass(name); 11 | $('[data-page="'+name+'"]').show(); 12 | $('#header li').removeClass('selected'); 13 | $('#header li.'+name).addClass('selected'); 14 | if (url !== false) { 15 | if (name==='icons') setUrl($('#search input').val(), $('#icon h2').text()); 16 | else setUrl('',''); 17 | } 18 | } 19 | showPage('fc', false); 20 | 21 | var glyphs, currentGlyph, version=0; 22 | 23 | function search(val) { 24 | $('#search input').val(val); 25 | var n = 0; 26 | var rex = new RegExp(val,"i"); 27 | $("#content h2").hide(); 28 | $("#content p").each( function() { 29 | var k = $('i', this).get(0).className; 30 | var glyph = glyphs[k]; 31 | var tags = (glyph.search || '').split(','); 32 | var found = rex.test(glyph.name) || rex.test(glyph.theme); 33 | tags.forEach(function(k) { 34 | found = found || rex.test(k); 35 | }); 36 | if (found) { 37 | $(this).show(); 38 | $('h2', $(this).parent()).show(); 39 | n++; 40 | } else { 41 | $(this).hide(); 42 | } 43 | }); 44 | $("#search .nb").text(n); 45 | // Set search url 46 | setUrl(val); 47 | } 48 | 49 | function getUrlData() { 50 | var opt = document.location.search.replace(/^\?/,'').split('&'); 51 | var data = {}; 52 | opt.forEach(function(s) { 53 | if (s) { 54 | s = s.split('='); 55 | data[s[0]] = s[1]; 56 | } 57 | }); 58 | return data; 59 | }; 60 | 61 | /** Set doc url */ 62 | function setUrl(search, select) { 63 | var url = document.location.href.split('?')[0]; 64 | var data = getUrlData(); 65 | var opt = []; 66 | if (typeof(search) === 'string') { 67 | if (search) opt.push('q='+search); 68 | } else { 69 | if (data.q) opt.push('q='+data.q); 70 | } 71 | if (typeof(select) === 'string') { 72 | if (select) opt.push('fc='+select.replace(/^fc-/,'')); 73 | } else { 74 | if (data.fc) opt.push('fc='+data.fc); 75 | } 76 | opt = opt.join('&'); 77 | if (opt) url = url + '?' + opt; 78 | window.history.replaceState (null, null, url); 79 | }; 80 | 81 | $('#search input').on('keyup search', function() { 82 | search(this.value); 83 | }); 84 | 85 | /** Show icon 86 | * @param {object} icon 87 | * @param {boolean} [url] change url 88 | */ 89 | function showIcon(icon, url) { 90 | if (icon && icon.code) { 91 | currentGlyph = icon; 92 | $('#icon i').removeClass().addClass('fc-'+icon.name) 93 | $('#icon h2').text('fc-' + icon.name); 94 | $('#icon .theme').text(icon.theme); 95 | $('#icon .code').text('\\'+icon.code.toString(16)); 96 | if (url !== false) setUrl(null, icon.name); 97 | var tags = icon.search.split(','); 98 | var tag = $('#icon .tags').html(''); 99 | icon.name.split('-').forEach(function(t) { 100 | if (t.length>2 && t!==icon.theme && tags.indexOf(t)<0) tags.push(t); 101 | }) 102 | tags.forEach(function(t) { 103 | if (t && t !== 'new') { 104 | $('').text(t) 105 | .click(function() { search(t) }) 106 | .appendTo(tag); 107 | } 108 | }) 109 | } 110 | } 111 | 112 | /** Save glyph */ 113 | function save(opt) { 114 | $('#icon select').val('none'); 115 | switch (opt) { 116 | case 'none': break; 117 | case 'svg': { 118 | console.log('savesvg') 119 | $.ajax({ 120 | url: './svg/' 121 | + currentGlyph.theme 122 | + '/u' + currentGlyph.code.toString(16).toUpperCase() 123 | + '-' + currentGlyph.name +'.svg', 124 | dataType : 'text', 125 | success: function(rep) { 126 | rep = rep.replace(/fill:#([^;|\"]*)/g, 'fill:' + $('#icon i').css('color')); 127 | var blob = new Blob([rep], {type: "text/plain;charset=utf-8"}); 128 | saveAs(blob, currentGlyph.name + '.svg'); 129 | } 130 | }) 131 | break; 132 | } 133 | default: { 134 | var canvas = document.createElement('CANVAS'); 135 | canvas.width = canvas.height = opt; 136 | var ctx = canvas.getContext('2d'); 137 | ctx.font = opt + 'px font-cassini'; 138 | ctx.fillStyle = $('#icon i').css('color'); 139 | ctx.fillText(String.fromCharCode(currentGlyph.code), 0, opt * .8); 140 | canvas.toBlob(function(blob) { 141 | saveAs(blob, currentGlyph.name + '-' + opt + '.png'); 142 | }, 'image/png'); 143 | break; 144 | } 145 | } 146 | } 147 | 148 | /** Load data */ 149 | $.ajax({ 150 | url: './font-cassini.json', 151 | success: function(font) { 152 | glyphs = font.glyphs; 153 | var content = $('#content'); 154 | var themes = { 155 | bati: [], 156 | }; 157 | var g; 158 | // Check new date (7 days) 159 | var newDate = new Date((new Date()).getTime() - 7*24*60*60*1000); 160 | // remove date 161 | newDate = new Date(); 162 | for (g in font.glyphs) { 163 | if (font.glyphs[g].version > version) version = font.glyphs[g].version; 164 | if (!themes[font.glyphs[g].theme]) themes[font.glyphs[g].theme] = []; 165 | font.glyphs[g].id = g; 166 | themes[font.glyphs[g].theme].push(font.glyphs[g]); 167 | }; 168 | var news = 0; 169 | Object.keys(themes).forEach(function(th) { 170 | var div = $('
').appendTo(content); 171 | $('

').text(th.replace('edit', 'edition').replace('geom', 'geometry')).appendTo(div); 172 | themes[th].sort(function(a,b) { return a.order-b.order || a.code-b.code; }); 173 | themes[th].forEach(function(gly) { 174 | // console.log(gly) 175 | // var isNew = (gly.version===version) 176 | var isNew = gly.date > newDate.toISOString(); 177 | if (isNew) { 178 | gly.search += (gly.search?',':'') + 'new'; 179 | news++; 180 | } 181 | $('

') 182 | .append($('').addClass(gly.id)) 183 | .click(function() { 184 | showIcon(gly); 185 | }) 186 | .addClass(isNew ? 'new' : '') 187 | .append($('').text(gly.name)) 188 | .attr('title', '\\'+gly.code.toString(16)) 189 | .appendTo(div); 190 | }); 191 | }) 192 | $('.news').text(news+(news>1?' NEWS':' NEW')); 193 | var data = getUrlData(); 194 | search(data.q); 195 | if (data.fc) { 196 | showIcon(glyphs['fc-'+data.fc]); 197 | showPage('icons'); 198 | } else { 199 | showIcon(glyphs['fc-earth'], false); 200 | } 201 | } 202 | }); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "font-cassini", 3 | "version": "1.0.6", 4 | "description": "Icon font set of Cassini map symbols for use with GIS and spatial analysis tools", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node serve.js", 9 | "build": "gulp" 10 | }, 11 | "keywords": [ 12 | "font", 13 | "GIS", 14 | "maps" 15 | ], 16 | "author": { 17 | "name": "Jean-Marc Viglino", 18 | "url": "https://github.com/Viglino" 19 | }, 20 | "homepage": "https://github.com/Viglino/font-cassini", 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/Viglino/font-cassini.git" 24 | }, 25 | "license": "Apache-2.0", 26 | "devDependencies": { 27 | "async": "^3.2.0", 28 | "del": "^6.0.0", 29 | "gulp": "^4.0.2", 30 | "gulp-cheerio": "^1.0.0", 31 | "gulp-consolidate": "^0.2.0", 32 | "gulp-iconfont": "^11.0.0", 33 | "gulp-iconfont-css": "^3.0.0", 34 | "gulp-rename": "^2.0.0", 35 | "gulp-svgmin": "^3.0.0", 36 | "gulp-svgstore": "^7.0.1", 37 | "live-server": "^1.2.1" 38 | }, 39 | "dependencies": { 40 | "vinyl-paths": "^3.0.1" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /serve.js: -------------------------------------------------------------------------------- 1 |  2 | var liveServer = require("live-server"); 3 | 4 | var params = { 5 | port: 8181, // Set the server port. Defaults to 8080. 6 | host: "0.0.0.0", // Set the address to bind to. Defaults to 0.0.0.0 or process.env.IP. 7 | open: false, // When false, it won't load your browser by default. 8 | watch: ['index.*', 'font-cassini.json', 'css/font-cassini.css'], // comma-separated string for paths to watch 9 | // ignore: '', // comma-separated string for paths to ignore 10 | file: "index.html", // When set, serve this file (server root relative) for every 404 (useful for single-page applications) 11 | wait: 1000, // Waits for all changes, before reloading. Defaults to 0 sec. 12 | logLevel: 2 // 0 = errors only, 1 = some, 2 = lots 13 | }; 14 | liveServer.start(params); 15 | -------------------------------------------------------------------------------- /svg/autre/uEA2C-gibet.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 93 | 95 | 97 | 98 | 100 | image/svg+xml 101 | 103 | 104 | 105 | 106 | 111 | 115 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /svg/autre/uEA39-calvaire.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 107 | -------------------------------------------------------------------------------- /svg/autre/uEA3A-gibet-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 107 | -------------------------------------------------------------------------------- /svg/autre/uEA3D-entree-mine.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 20 | 46 | 51 | 56 | 61 | 66 | 71 | 76 | 81 | 86 | 91 | 92 | 94 | 96 | 97 | 99 | image/svg+xml 100 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /svg/bati/uEA05-chapelle-r.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 97 | 98 | 100 | 102 | 103 | 105 | image/svg+xml 106 | 108 | 109 | 110 | 111 | 116 | 120 | 124 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /svg/bati/uEA07-chateau-r.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 97 | 98 | 100 | 102 | 103 | 105 | image/svg+xml 106 | 108 | 109 | 110 | 111 | 116 | 120 | 124 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /svg/bati/uEA0A-ferme.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 93 | 95 | 97 | 98 | 100 | image/svg+xml 101 | 103 | 104 | 105 | 106 | 111 | 115 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /svg/bati/uEA0D-moulin-eau.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 93 | 95 | 97 | 98 | 100 | image/svg+xml 101 | 103 | 104 | 105 | 106 | 111 | 115 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /svg/bati/uEA17-tour-r.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 97 | 98 | 100 | 102 | 103 | 105 | image/svg+xml 106 | 108 | 109 | 110 | 111 | 116 | 120 | 124 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /svg/bati/uEA1C-cabane.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 93 | 95 | 97 | 98 | 100 | image/svg+xml 101 | 103 | 104 | 105 | 106 | 111 | 115 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /svg/bati/uEA1D-tuillerie.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 93 | 95 | 97 | 98 | 100 | image/svg+xml 101 | 103 | 104 | 105 | 106 | 111 | 115 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /svg/bati/uEA3B-moulin-vent-a.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 83 | 85 | 87 | 88 | 90 | image/svg+xml 91 | 93 | 94 | 95 | 96 | 101 | 102 | -------------------------------------------------------------------------------- /svg/icon/uEA1E-abbaye-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA1F-cabane-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /svg/icon/uEA21-chateau-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA22-commanderie-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA23-hameau-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA24-moulin-vent-bois-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA25-moulin-vent-pierre-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA26-paroisse-chateau-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA27-paroisse-protegee-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA28-paroisse-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA29-prieure-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA2A-ville-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/icon/uEA2B-chapelle-s.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 88 | 90 | 92 | 93 | 95 | image/svg+xml 96 | 98 | 99 | 100 | 101 | 106 | 110 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /svg/militaire/uEA19-champ-bataille.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 93 | 95 | 97 | 98 | 100 | image/svg+xml 101 | 103 | 104 | 105 | 106 | 111 | 115 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /svg/militaire/uEA1A-bataille-gagnee.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 93 | 95 | 97 | 98 | 100 | image/svg+xml 101 | 103 | 104 | 105 | 106 | 111 | 115 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /svg/militaire/uEA1B-bataille-perdue.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 93 | 95 | 97 | 98 | 100 | image/svg+xml 101 | 103 | 104 | 105 | 106 | 111 | 115 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /svg/militaire/uEA20-corps-garde.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 42 | 47 | 52 | 57 | 62 | 67 | 72 | 77 | 82 | 87 | 92 | 93 | 95 | 97 | 98 | 100 | image/svg+xml 101 | 103 | 104 | 105 | 106 | 111 | 115 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /templates/template.css: -------------------------------------------------------------------------------- 1 | /* <%= fontName %> - v.<%= version %> 2 | * <%= desc %> 3 | * <%= year %> (c) <%= author %> - <%= license %> 4 | * <%= homepage %> 5 | */ 6 | @font-face { 7 | font-family: "<%= fontName %>"; 8 | src: url('<%= fontPath %><%= fontName %>.eot?t=<%= dtime %>'); 9 | src: url('<%= fontPath %><%= fontName %>.eot?#iefix') format('eot'), 10 | url('<%= fontPath %><%= fontName %>.woff2?t=<%= dtime %>') format('woff2'), 11 | url('<%= fontPath %><%= fontName %>.woff?t=<%= dtime %>') format('woff'), 12 | url('<%= fontPath %><%= fontName %>.ttf?t=<%= dtime %>') format('truetype'), 13 | url('<%= fontPath %><%= fontName %>.svg#<%= fontName %>') format('svg'); 14 | font-weight: normal; 15 | font-style: normal; 16 | } 17 | 18 | .font-cassini { 19 | width: 1em; 20 | height: 1em; 21 | } 22 | 23 | [class^="<%= className %>-"]:before, [class*="<%= className %>-"]:before { 24 | font-family: "<%= fontName %>"; 25 | font-style: normal; 26 | font-weight: normal; 27 | speak: none; 28 | display: inline-block; 29 | text-decoration: inherit; 30 | text-align: center; 31 | /* For safety - reset parent styles, that can break glyph codes*/ 32 | font-variant: normal; 33 | text-transform: none; 34 | /* fix buttons height, for twitter bootstrap */ 35 | line-height: 1em; 36 | /* Font smoothing. That was taken from TWBS */ 37 | -webkit-font-smoothing: antialiased; 38 | -moz-osx-font-smoothing: grayscale; 39 | } 40 | 41 | [class^="<%= className %>-"] { 42 | display: inline-block; 43 | } 44 | .<%= className %>-lg { 45 | font-size: 1.3333333333333333em; 46 | line-height: 0.75em; 47 | vertical-align: -15%; 48 | } 49 | .<%= className %>-2x { font-size: 2em; } 50 | .<%= className %>-3x { font-size: 3em; } 51 | .<%= className %>-4x { font-size: 4em; } 52 | .<%= className %>-5x { font-size: 5em; } 53 | .<%= className %>-fw { 54 | width: 1.2857142857142858em; 55 | text-align: center; 56 | } 57 | 58 | .<%= className %>-rotate10 { 59 | -webkit-transform: rotate(10deg); 60 | -ms-transform: rotate(10deg); 61 | transform: rotate(10deg); 62 | } 63 | .<%= className %>-rotate-10 { 64 | -webkit-transform: rotate(-10deg); 65 | -ms-transform: rotate(-10deg); 66 | transform: rotate(-10deg); 67 | } 68 | .<%= className %>-rotate20 { 69 | -webkit-transform: rotate(20deg); 70 | -ms-transform: rotate(20deg); 71 | transform: rotate(20deg); 72 | } 73 | .<%= className %>-rotate-20 { 74 | -webkit-transform: rotate(-20deg); 75 | -ms-transform: rotate(-20deg); 76 | transform: rotate(-20deg); 77 | } 78 | .<%= className %>-rotate45 { 79 | -webkit-transform: rotate(45deg); 80 | -ms-transform: rotate(45deg); 81 | transform: rotate(45deg); 82 | } 83 | .<%= className %>-rotate90 { 84 | -webkit-transform: rotate(90deg); 85 | -ms-transform: rotate(90deg); 86 | transform: rotate(90deg); 87 | } 88 | .<%= className %>-rotate135 { 89 | -webkit-transform: rotate(135deg); 90 | -ms-transform: rotate(135deg); 91 | transform: rotate(135deg); 92 | } 93 | .<%= className %>-rotate180 { 94 | -webkit-transform: rotate(180deg); 95 | -ms-transform: rotate(180deg); 96 | transform: rotate(180deg); 97 | } 98 | .<%= className %>-rotate225 { 99 | -webkit-transform: rotate(225deg); 100 | -ms-transform: rotate(225deg); 101 | transform: rotate(225deg); 102 | } 103 | .<%= className %>-rotate270 { 104 | -webkit-transform: rotate(270deg); 105 | -ms-transform: rotate(270deg); 106 | transform: rotate(270deg); 107 | } 108 | .<%= className %>-rotate315 { 109 | -webkit-transform: rotate(315deg); 110 | -ms-transform: rotate(315deg); 111 | transform: rotate(315deg); 112 | } 113 | 114 | .<%= className %>-fliph { 115 | -webkit-transform: scale(-1, 1); 116 | -ms-transform: scale(-1, 1); 117 | transform: scale(-1, 1); 118 | } 119 | .<%= className %>-flipv { 120 | -webkit-transform: scale(1, -1); 121 | -ms-transform: scale(1, -1); 122 | transform: scale(1, -1); 123 | } 124 | 125 | .<%= className %>-stack { 126 | position: relative; 127 | display: inline-block; 128 | width: 1em; 129 | height: 1em; 130 | line-height: 1em; 131 | vertical-align: middle; 132 | } 133 | .<%= className %>-stack [class^="<%= className %>-"] { 134 | position: absolute; 135 | } 136 | 137 | .<%= className %>-spin { 138 | -webkit-animation: <%= className %>-spin 2s infinite linear; 139 | animation: <%= className %>-spin 2s infinite linear; 140 | } 141 | .<%= className %>-pulse { 142 | -webkit-animation: <%= className %>-spin 1s infinite steps(8); 143 | animation: <%= className %>-spin 1s infinite steps(8); 144 | } 145 | 146 | @-webkit-keyframes <%= className %>-spin { 147 | 0% { 148 | -webkit-transform: rotate(0deg); 149 | transform: rotate(0deg); 150 | } 151 | 100% { 152 | -webkit-transform: rotate(359deg); 153 | transform: rotate(359deg); 154 | } 155 | } 156 | @keyframes <%= className %>-spin { 157 | 0% { 158 | -webkit-transform: rotate(0deg); 159 | transform: rotate(0deg); 160 | } 161 | 100% { 162 | -webkit-transform: rotate(359deg); 163 | transform: rotate(359deg); 164 | } 165 | } 166 | 167 | <% _.each(glyphs, function(glyph) { %>.<%= className %>-<%= glyph.name %>:before { content: "\<%= glyph.codepoint %>"; } 168 | <% }); %> -------------------------------------------------------------------------------- /templates/template.json: -------------------------------------------------------------------------------- 1 | { 2 | "font": "<%= fontName %>", 3 | "description": "<%= desc %>", 4 | "version": "<%= version %>", 5 | "prefix": "<%= className %>", 6 | "copyright": "<%= author %>", 7 | "license": "<%= license %>", 8 | "homepage": "<%= homepage %>", 9 | "glyphs": {<% _.each(glyphs, function(glyph, i){ %><% if(i) { %>,<% } %> 10 | "<%= className %>-<%= glyph.name %>": { "name": "<%= glyph.name %>", "code": <%= glyph.code %>, "theme": "<%= glyph.theme %>", "search": "<%= glyph.search %>", "order": <%= glyph.order %>, "version": <%= glyph.version %>, "date": "<%= glyph.date %>" }<% }); %> 11 | } 12 | } -------------------------------------------------------------------------------- /templates/template.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 37 | 39 | 41 | 44 | 45 | 47 | 50 | 51 | 52 | 54 | 55 | 57 | image/svg+xml 58 | 60 | 61 | 62 | 63 | 64 | 65 | --------------------------------------------------------------------------------