summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-07-13 23:34:04 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-08-19 12:33:57 -0400
commitdb4410bf91885eace600ed9290ca324f6d1e82bf (patch)
treeb87916cf510353f5dcc013bb296e6eda262b98e7
parent7ddc97528daddd4d41552a6fee2a762bf201cb96 (diff)
downloadpango-db4410bf91885eace600ed9290ca324f6d1e82bf.tar.gz
pango-view: Support text transforms
-rw-r--r--utils/viewer-render.c55
1 files changed, 52 insertions, 3 deletions
diff --git a/utils/viewer-render.c b/utils/viewer-render.c
index 6f7e96c5..9292275e 100644
--- a/utils/viewer-render.c
+++ b/utils/viewer-render.c
@@ -76,6 +76,7 @@ guint16 opt_fg_alpha = 65535;
gboolean opt_bg_set = FALSE;
PangoColor opt_bg_color = {65535, 65535, 65535};
guint16 opt_bg_alpha = 65535;
+const char *opt_text_transform = NULL;
/* Text (or markup) to render */
static char *text;
@@ -93,6 +94,21 @@ fail (const char *format, ...)
exit (1);
}
+static PangoTextTransform
+transform_from_string (const char *text)
+{
+ if (text == NULL)
+ return PANGO_TEXT_TRANSFORM_NONE;
+ else if (strcmp (text, "uppercase") == 0)
+ return PANGO_TEXT_TRANSFORM_UPPERCASE;
+ else if (strcmp (text, "lowercase") == 0)
+ return PANGO_TEXT_TRANSFORM_LOWERCASE;
+ else if (strcmp (text, "capitalize") == 0)
+ return PANGO_TEXT_TRANSFORM_CAPITALIZE;
+ else
+ return PANGO_TEXT_TRANSFORM_NONE;
+}
+
static PangoLayout *
make_layout(PangoContext *context,
const char *text,
@@ -101,12 +117,43 @@ make_layout(PangoContext *context,
static PangoFontDescription *font_description;
PangoAlignment align;
PangoLayout *layout;
+ char *transformed_text;
+ PangoAttrList *transformed_attrs;
+ PangoTextTransform transform = transform_from_string (opt_text_transform);
+ char *txt;
+ PangoAttrList *attrs;
- layout = pango_layout_new (context);
if (opt_markup)
- pango_layout_set_markup (layout, text, -1);
+ {
+ GError *error = NULL;
+ if (!pango_parse_markup (text, -1, 0, &attrs, &txt, NULL, &error))
+ {
+ g_error ("Failed to parse markup: %s", error->message);
+ exit (1);
+ }
+ }
else
- pango_layout_set_text (layout, text, -1);
+ {
+ txt = g_strdup (text);
+ attrs = NULL;
+ }
+
+ pango_transform_text (txt, -1, attrs, transform, NULL, &transformed_text, &transformed_attrs);
+
+ g_free (txt);
+ if (attrs)
+ pango_attr_list_unref (attrs);
+
+ layout = pango_layout_new (context);
+
+ pango_layout_set_text (layout, transformed_text, -1);
+ g_free (transformed_text);
+
+ if (transformed_attrs)
+ {
+ pango_layout_set_attributes (layout, transformed_attrs);
+ pango_attr_list_unref (transformed_attrs);
+ }
pango_layout_set_auto_dir (layout, opt_auto_dir);
pango_layout_set_ellipsize (layout, opt_ellipsize);
@@ -839,6 +886,8 @@ parse_options (int argc, char *argv[])
"Enable single-paragraph mode", NULL},
{"text", 't', 0, G_OPTION_ARG_STRING, &opt_text,
"Text to display (instead of a file)", "string"},
+ {"text-transform", 0, 0, G_OPTION_ARG_STRING, &opt_text_transform,
+ "Transformation to apply", "transform"},
{"version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, &show_version,
"Show version numbers", NULL},
{"waterfall", 0, 0, G_OPTION_ARG_NONE, &opt_waterfall,