[pango/pango-list-metadata] Add --metadata to pango-list
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango/pango-list-metadata] Add --metadata to pango-list
- Date: Mon, 21 Sep 2020 21:20:00 +0000 (UTC)
commit 3d5b5e983b95e634b04776bb64b3bc33770e2895
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Sep 21 17:19:06 2020 -0400
Add --metadata to pango-list
When called with --metadata, make pango-list show
some name table entries from the font. This is using
harfbuzz api.
utils/pango-list.c | 85 ++++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 69 insertions(+), 16 deletions(-)
---
diff --git a/utils/pango-list.c b/utils/pango-list.c
index 3d360975..f3f3375b 100644
--- a/utils/pango-list.c
+++ b/utils/pango-list.c
@@ -9,7 +9,7 @@
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
@@ -26,6 +26,10 @@
#include <glib/gstdio.h>
#include <stdlib.h>
#include <locale.h>
+#include <pango/pangofc-font.h>
+#include <pango/pangofc-fontmap.h>
+#include <hb-ot.h>
+
/* FIXME: This doesn't work if the font has an avar table */
static float
@@ -39,6 +43,29 @@ denorm_coord (hb_ot_var_axis_info_t *axis, int coord)
return axis->default_value + r * (axis->max_value - axis->default_value);
}
+static void
+print_name_table_entry (hb_face_t *face,
+ hb_ot_name_id_t name_id,
+ const char *label)
+{
+ unsigned int len;
+ unsigned int buflen = 0;
+ char *buf = NULL;
+
+ len = hb_ot_name_get_utf8 (face, name_id, HB_LANGUAGE_INVALID, &buflen, buf);
+ if (len > 0)
+ {
+ buf = g_new (char, len + 1);
+ buflen = len + 1;
+
+ hb_ot_name_get_utf8 (face, name_id, HB_LANGUAGE_INVALID, &buflen, buf);
+
+ g_print (" %s: %s\n", label, buf);
+
+ g_free (buf);
+ }
+}
+
int
main (int argc,
char **argv)
@@ -46,10 +73,12 @@ main (int argc,
gboolean opt_verbose = FALSE;
gboolean opt_metrics = FALSE;
gboolean opt_variations = FALSE;
+ gboolean opt_metadata = FALSE;
GOptionEntry entries[] = {
{"verbose", 0, 0, G_OPTION_ARG_NONE, &opt_verbose, "Print verbose information", NULL },
{"metrics", 0, 0, G_OPTION_ARG_NONE, &opt_metrics, "Print font metrics", NULL },
{"variations", 0, 0, G_OPTION_ARG_NONE, &opt_variations, "Print font variations", NULL },
+ {"metadata", 0, 0, G_OPTION_ARG_NONE, &opt_metadata, "Print font metadata", NULL },
{ NULL, }
};
GOptionContext *context;
@@ -113,24 +142,46 @@ main (int argc,
width = 0;
for (j = 0; j < n_faces; j++)
- {
- const char *face_name = pango_font_face_get_face_name (faces[j]);
- gboolean is_synth = pango_font_face_is_synthesized (faces[j]);
- const char *synth_str = is_synth ? "*" : "";
+ {
+ const char *face_name = pango_font_face_get_face_name (faces[j]);
+ gboolean is_synth = pango_font_face_is_synthesized (faces[j]);
+ const char *synth_str = is_synth ? "*" : "";
width = MAX (width, strlen (synth_str) + strlen (face_name));
}
for (j = 0; j < n_faces; j++)
- {
- const char *face_name = pango_font_face_get_face_name (faces[j]);
- gboolean is_synth = pango_font_face_is_synthesized (faces[j]);
- const char *synth_str = is_synth ? "*" : "";
- PangoFontDescription *desc = pango_font_face_describe (faces[j]);
- char *desc_str = pango_font_description_to_string (desc);
-
- g_print (" %s%s: %*s%s\n", synth_str, face_name,
+ {
+ const char *face_name = pango_font_face_get_face_name (faces[j]);
+ gboolean is_synth = pango_font_face_is_synthesized (faces[j]);
+ const char *synth_str = is_synth ? "*" : "";
+ PangoFontDescription *desc = pango_font_face_describe (faces[j]);
+ char *desc_str = pango_font_description_to_string (desc);
+
+ g_print (" %s%s: %*s%s\n", synth_str, face_name,
width - (int)strlen (face_name) - (int)strlen (synth_str), "", desc_str);
+ if (opt_metadata)
+ {
+ PangoFont *font;
+ hb_font_t *hb_font;
+ hb_face_t *hb_face;
+
+ pango_font_description_set_absolute_size (desc, 10 * PANGO_SCALE);
+
+ font = pango_context_load_font (ctx, desc);
+ hb_font = pango_font_get_hb_font (font);
+ hb_face = hb_font_get_face (hb_font);
+
+ print_name_table_entry (hb_face, HB_OT_NAME_ID_COPYRIGHT, "Copyright");
+ print_name_table_entry (hb_face, HB_OT_NAME_ID_VERSION_STRING, "Version");
+ print_name_table_entry (hb_face, HB_OT_NAME_ID_DESCRIPTION, "Description");
+ print_name_table_entry (hb_face, HB_OT_NAME_ID_MANUFACTURER, "Manufacturer");
+ print_name_table_entry (hb_face, HB_OT_NAME_ID_DESIGNER, "Designer");
+ print_name_table_entry (hb_face, HB_OT_NAME_ID_LICENSE, "License");
+
+ g_object_unref (font);
+ }
+
if (opt_metrics)
{
PangoFontMetrics *metrics;
@@ -191,11 +242,13 @@ main (int argc,
}
g_free (axes);
}
+
+ g_object_unref (font);
}
- g_free (desc_str);
- pango_font_description_free (desc);
- }
+ g_free (desc_str);
+ pango_font_description_free (desc);
+ }
g_free (faces);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]