10f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod/* 20f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * Copyright © 2010,2011 Google, Inc. 30f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * 40f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * This is part of HarfBuzz, a text shaping library. 50f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * 60f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * Permission is hereby granted, without written agreement and without 70f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this 80f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * software and its documentation for any purpose, provided that the 90f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * above copyright notice and the following two paragraphs appear in 100f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * all copies of this software. 110f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * 120f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 130f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 140f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 150f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 160f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * DAMAGE. 170f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * 180f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 190f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 200f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 210f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 220f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 230f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * 240f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod * Google Author(s): Behdad Esfahbod 250f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod */ 260f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 270f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#ifdef HAVE_CONFIG_H 280f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#include "config.h" 290f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#endif 300f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 310f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#include "hb.h" 320f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#include "hb-ot.h" 330f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 340f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#ifdef HAVE_GLIB 35c2bc818706df56022c8bb922df2b741cb120f7e4Behdad Esfahbod# include <glib.h> 36c2bc818706df56022c8bb922df2b741cb120f7e4Behdad Esfahbod# if !GLIB_CHECK_VERSION (2, 22, 0) 37c2bc818706df56022c8bb922df2b741cb120f7e4Behdad Esfahbod# define g_mapped_file_unref g_mapped_file_free 38c2bc818706df56022c8bb922df2b741cb120f7e4Behdad Esfahbod# endif 390f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#endif 400f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#include <stdlib.h> 410f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#include <stdio.h> 420f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 430f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbodint 440f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbodmain (int argc, char **argv) 450f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod{ 460f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod hb_blob_t *blob = NULL; 470f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 480f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod if (argc != 2) { 490f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod fprintf (stderr, "usage: %s font-file\n", argv[0]); 500f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod exit (1); 510f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod } 520f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 530f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod /* Create the blob */ 540f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod { 550f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod const char *font_data; 560f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod unsigned int len; 570f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod hb_destroy_func_t destroy; 580f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod void *user_data; 590f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod hb_memory_mode_t mm; 600f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 610f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#ifdef HAVE_GLIB 620f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod GMappedFile *mf = g_mapped_file_new (argv[1], false, NULL); 630f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod font_data = g_mapped_file_get_contents (mf); 640f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod len = g_mapped_file_get_length (mf); 65c2bc818706df56022c8bb922df2b741cb120f7e4Behdad Esfahbod destroy = (hb_destroy_func_t) g_mapped_file_unref; 660f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod user_data = (void *) mf; 670f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod mm = HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE; 680f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#else 690f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod FILE *f = fopen (argv[1], "rb"); 700f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod fseek (f, 0, SEEK_END); 710f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod len = ftell (f); 720f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod fseek (f, 0, SEEK_SET); 730f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod font_data = (const char *) malloc (len); 740f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod if (!font_data) len = 0; 750f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod len = fread ((char *) font_data, 1, len, f); 760f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod destroy = free; 770f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod user_data = (void *) font_data; 780f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod fclose (f); 790f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod mm = HB_MEMORY_MODE_WRITABLE; 800f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod#endif 810f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 820f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod blob = hb_blob_create (font_data, len, mm, user_data, destroy); 830f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod } 840f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 850f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod /* Create the face */ 860f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod hb_face_t *face = hb_face_create (blob, 0 /* first face */); 870f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod hb_blob_destroy (blob); 880f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod blob = NULL; 890f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 909cf7f9d4f61741932570afbefdee5edf61f79ae4Behdad Esfahbod unsigned int p[5]; 919cf7f9d4f61741932570afbefdee5edf61f79ae4Behdad Esfahbod bool ret = hb_ot_layout_get_size_params (face, p, p+1, p+2, p+3, p+4); 920f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 939cf7f9d4f61741932570afbefdee5edf61f79ae4Behdad Esfahbod printf ("%g %u %u %g %g\n", p[0]/10., p[1], p[2], p[3]/10., p[4]/10.); 940f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod 959cf7f9d4f61741932570afbefdee5edf61f79ae4Behdad Esfahbod return !ret; 960f3f5299047e3cfc4d1202fee83d484b871279adBehdad Esfahbod} 97