[template-glib] eval: add some string helper functions
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [template-glib] eval: add some string helper functions
- Date: Sun, 7 Aug 2016 00:31:10 +0000 (UTC)
commit d3f0e2aa87b8cee54d13c4250a7f086ca253f9dc
Author: Christian Hergert <chergert redhat com>
Date: Sat Aug 6 17:30:29 2016 -0700
eval: add some string helper functions
.upper(), .lower(), .reverse(), .len(), .casefold()
src/tmpl-expr-eval.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 53 insertions(+), 3 deletions(-)
---
diff --git a/src/tmpl-expr-eval.c b/src/tmpl-expr-eval.c
index 7c5d027..e1b96a0 100644
--- a/src/tmpl-expr-eval.c
+++ b/src/tmpl-expr-eval.c
@@ -18,6 +18,7 @@
#include <girepository.h>
#include <math.h>
+#include <string.h>
#include "tmpl-error.h"
#include "tmpl-expr.h"
@@ -556,9 +557,9 @@ cleanup:
static gboolean
tmpl_expr_gi_call_eval (TmplExprGiCall *node,
- TmplScope *scope,
- GValue *return_value,
- GError **error)
+ TmplScope *scope,
+ GValue *return_value,
+ GError **error)
{
GValue left = G_VALUE_INIT;
GValue right = G_VALUE_INIT;
@@ -583,6 +584,55 @@ tmpl_expr_gi_call_eval (TmplExprGiCall *node,
if (!tmpl_expr_eval_internal (node->object, scope, &left, error))
goto cleanup;
+ if (G_VALUE_HOLDS_STRING (&left))
+ {
+ const gchar *str = g_value_get_string (&left) ?: "";
+
+ /*
+ * TODO: This should be abstracted somewhere else rather than our G-I call.
+ * Basically we are adding useful string functions like:
+ *
+ * "foo".upper()
+ * "foo".lower()
+ * "foo".casefold()
+ * "foo".reverse()
+ * "foo".len()
+ */
+ if (FALSE) {}
+ else if (g_str_equal (node->name, "upper"))
+ {
+ g_value_init (return_value, G_TYPE_STRING);
+ g_value_take_string (return_value, g_utf8_strup (str, -1));
+ ret = TRUE;
+ }
+ else if (g_str_equal (node->name, "lower"))
+ {
+ g_value_init (return_value, G_TYPE_STRING);
+ g_value_take_string (return_value, g_utf8_strdown (str, -1));
+ ret = TRUE;
+ }
+ else if (g_str_equal (node->name, "casefold"))
+ {
+ g_value_init (return_value, G_TYPE_STRING);
+ g_value_take_string (return_value, g_utf8_casefold (str, -1));
+ ret = TRUE;
+ }
+ else if (g_str_equal (node->name, "reverse"))
+ {
+ g_value_init (return_value, G_TYPE_STRING);
+ g_value_take_string (return_value, g_utf8_strreverse (str, -1));
+ ret = TRUE;
+ }
+ else if (g_str_equal (node->name, "len"))
+ {
+ g_value_init (return_value, G_TYPE_UINT);
+ g_value_set_uint (return_value, strlen (str));
+ ret = TRUE;
+ }
+
+ goto cleanup;
+ }
+
if (!G_VALUE_HOLDS_OBJECT (&left))
{
g_set_error (error,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]