source: spip-zone/_plugins_/webfonts/branches/webfonts2/webfonts2_fonctions.php @ 114686

Last change on this file since 114686 was 114686, checked in by arnaud.berard@…, 9 months ago

ajouter un paramètre type suivant l'url que l'on souhaite retourner css ou specimen

ajout d'un filtre/fonction pour générer l'url vers le spécimen

ajout d'un lien vers le spécimen des fonts insérées via la pipeline

  • Property svn:eol-style set to native
File size: 5.6 KB
Line 
1<?php
2/*
3 * Plugin Webfonts2
4 * (c) 2016
5 * Distribue sous licence GPL
6 *
7 */
8if (!defined('_ECRIRE_INC_VERSION')) {
9        return;
10}
11
12/**
13 * googlefont_request
14 *
15 * prepare l'url sans passer par l'api , utilisé pour l'insertion dans le head
16 *
17 * @param $webfonts {array} font=>variantes
18 * @param $subsets  si besoin une liste de subsets pour la forme mais inutile
19 * @return $request url de requète
20 *
21*/
22function googlefont_request($webfonts,$subsets='',$type='css'){
23        $subset = '&subset=' ;
24        (strlen($subsets)) ? $subset .= $subsets : $subset = '';
25        foreach($webfonts as $font){
26                $variants = implode(',',$font['variants']);
27                $fonts[] = urlencode($font['family']).':'.$variants;
28        }
29        $fonts = implode('|',$fonts);
30
31        if($type == 'specimen'){
32                $request = "https://fonts.google.com/selection?selection.family=$fonts";
33        }else{
34                $request = "https://fonts.googleapis.com/css?family=$fonts".$subset;
35        }
36
37        return $request;
38}
39// Renvoie l'url du spécimen sur GooogleFont a partir de la liste des fonts et leur variantes
40// @param $webfonts array
41function googlefont_url_specimen($webfonts){
42        return googlefont_request($webfonts,'','specimen');
43}
44
45/**
46 * google_font_search
47 *
48 * $fonts la liste des fonts [items] récupérées via l'index
49 * $search le motif de recherche sur item/family
50*/
51function google_font_search($fonts, $search){
52        $res = array();
53        if (is_array($fonts)) {
54                foreach($fonts as $item){
55                        ( preg_match('/' . trim($search) . '/i', $item['family']) ) ? $res[] = $item : false;
56                }
57        }
58        return $res;
59}
60
61// permet aux plugins themes de spécifier leur webfonts
62// via la pipeline fonts_list
63
64function lister_webfonts(){
65        $fonts = pipeline('fonts_list',array(
66                'args'=>array(),
67                'data'=>$fonts
68        ));
69        return $fonts;
70}
71
72function balise_FONT_INDEX_dist($p){
73        $p->code = "get_font_index()";
74        $p->interdire_scripts = false;
75        return $p;
76}
77
78function get_font_index(){
79        if(file_exists(_DIR_TMP.'/googlefont_list.json')){
80                $index = lire_fichier(_DIR_TMP.'/googlefont_list.json',$respons);
81                spip_log("Lecture du fichier tmp/ $index",'webfonts');
82        }else{
83                $index = lire_fichier(_DIR_PLUGIN_WEBFONTS2.'/json/googlefont_list.json',$respons);
84                spip_log("Lecture du fichier fourni / $index",'webfonts');
85        }
86        return json_decode($respons, true);
87}
88
89/**
90 * googlefont_api_get
91 *
92 * retourne l'index [items] complet de la typothèque via l'API
93 *
94*/
95function googlefont_api_get($api_key,$sort=false,$category=false){
96        // Requète en GET sur //https://www.googleapis.com/webfonts/v1/webfonts?key=_GOOGLE_API_KEY
97        $url = 'https://www.googleapis.com/webfonts/v1/webfonts?key='.$api_key;
98        (strlen($sort)) ? $url .= '&sort='.$sort : $sort = false ;
99        (strlen($category)) ? $url .= '&category='.$category : $category = false;
100        if(extension_loaded('curl')){
101                $ch = curl_init();
102                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
103                curl_setopt($ch, CURLOPT_HEADER, false);
104                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
105                curl_setopt($ch, CURLOPT_URL, $url);
106                curl_setopt($ch, CURLOPT_REFERER, $url);
107                curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
108                $result = curl_exec($ch);
109                curl_close($ch);
110                $googlefonts = json_decode($result, true);
111
112                return $googlefonts['items'];
113        }else{
114                spip_log("L'extension Curl doit être installée !",'webfonts');
115                return false;
116        }
117}
118
119
120/*
121 * fontface_declaration
122 *
123 *
124@font-face {
125    font-family: 'open_sansitalic';
126    src: url('OpenSans-Italic-webfont.eot');
127    src: url('OpenSans-Italic-webfont.eot?#iefix') format('embedded-opentype'),
128         url('OpenSans-Italic-webfont.woff2') format('woff2'),
129         url('OpenSans-Italic-webfont.woff') format('woff'),
130         url('OpenSans-Italic-webfont.ttf') format('truetype'),
131         url('OpenSans-Italic-webfont.svg#open_sansitalic') format('svg');
132    font-weight: normal;
133    font-style: normal;
134
135}
136
137@param $font array family|file|weight|style
138@param $formats array extension|format default
139
140*/
141
142function fontface_declaration($font, $formats = array('.woff'=>'woff','.woff2'=>'woff2','.ttf'=>'truetype')){
143
144        $default = array(
145                'family'=>'Dutissimo',
146                'file'=>'squelettes-dist/polices/dutissimo',
147                'weight'=>'400',
148                'style'=>'normal'
149        );
150        $font = array_merge($default,$font);
151        $font_files = '';
152        $i = 1;
153        foreach($formats as $extension => $format){
154                $font_files .="url('".$font['file'].$extension."') format('$format')";
155                ($i < count($formats)) ? $font_files .=", " : $font_files .=";";
156                $i++;
157        }
158
159        $declaration = <<<EOT
160@font-face {
161    font-family: '{$font['family']}';
162        src: $font_files
163    font-weight:{$font['weight']};
164    font-style:{$font['style']};
165}
166EOT;
167
168        return $declaration;
169}
170
171/*
172 * function font_sets
173 * @param $fonts
174 */
175
176function font_sets($fonts) {
177
178}
179
180
181
182function font_stacks(){
183        return array(
184                'sans-serif' => [
185                        'Helvetica' => '"Helvetica Neue", "Helvetica", "Arial", sans-serif',
186                        'Lucida' => '"Lucida Grande", "Lucida Sans Unicode", "Geneva", "Verdana", sans-serif',
187                        'Verdana' => '"Verdana", "Geneva", sans-serif',
188                        'System' => '-apple-system, BlinkMacSystemFont, "Avenir Next", "Avenir", "Segoe UI", "Lucida Grande", "Helvetica Neue", "Helvetica", "Fira Sans", "Roboto", "Noto", "Droid Sans", "Cantarell", "Oxygen", "Ubuntu", "Franklin Gothic Medium", "Century Gothic", "Liberation Sans", sans-serif',
189                ],
190                'serif'=> [
191                        'Garamond' => '"Garamond", "Baskerville", "Baskerville Old Face", "Hoefler Text", "Times New Roman", serif',
192                        'Georgia' => '"Georgia", "Times", "Times New Roman", serif',
193                        'Hoefler' => '"Hoefler Text", "Baskerville Old Face", "Garamond", "Times New Roman", serif',
194                ],
195                'monospace'=> [
196                        'Consolas' => '"Consolas", "monaco", monospace',
197                        'Courrier' => '"Courier New", "Courier", "Lucida Sans Typewriter", "Lucida Typewriter", monospace',
198                        'Monaco' => '"Monaco", "Consolas", "Lucida Console", monospace'
199                ]
200        );
201}
Note: See TracBrowser for help on using the repository browser.