3 * Copyright (C) 2008 The Geeqie Team
5 * Authors: Vladimir Nadvornik / Laurent Monin
7 * This software is released under the GNU General Public License (GNU GPL).
8 * Please read the included file COPYING for more information.
9 * This software comes with no warranty of any kind, use at your own risk!
15 gdouble get_zoom_increment(void)
17 return ((options->image.zoom_increment != 0) ? (gdouble)options->image.zoom_increment / 10.0 : 1.0);
20 gchar *utf8_validate_or_convert(const gchar *text)
24 if (!text) return NULL;
27 if (!g_utf8_validate(text, len, NULL))
28 return g_convert(text, len, "UTF-8", "ISO-8859-1", NULL, NULL, NULL);
30 return g_strdup(text);
33 gint utf8_compare(const gchar *s1, const gchar *s2, gboolean case_sensitive)
35 gchar *s1_key, *s2_key;
39 g_assert(g_utf8_validate(s1, -1, NULL));
40 g_assert(g_utf8_validate(s2, -1, NULL));
44 s1_t = g_utf8_casefold(s1, -1);
45 s2_t = g_utf8_casefold(s2, -1);
48 s1_key = g_utf8_collate_key(s1_t, -1);
49 s2_key = g_utf8_collate_key(s2_t, -1);
51 ret = strcmp(s1_key, s2_key);
65 /* Borrowed from gtkfilesystemunix.c */
66 gchar *expand_tilde(const gchar *filename)
69 return g_strdup(filename);
75 if (filename[0] != '~')
76 return g_strdup(filename);
78 notilde = filename + 1;
79 slash = strchr(notilde, G_DIR_SEPARATOR);
80 if (slash == notilde || !*notilde)
82 home = g_get_home_dir();
84 return g_strdup(filename);
89 struct passwd *passwd;
92 username = g_strndup(notilde, slash - notilde);
94 username = g_strdup(notilde);
96 passwd = getpwnam(username);
100 return g_strdup(filename);
102 home = passwd->pw_dir;
106 return g_build_filename(home, G_DIR_SEPARATOR_S, slash + 1, NULL);
108 return g_build_filename(home, G_DIR_SEPARATOR_S, NULL);
113 returns text without quotes or NULL for empty or broken string
114 any text up to first '"' is skipped
115 tail is set to point at the char after the second '"'
120 gchar *quoted_value(const gchar *text, const gchar **tail)
124 gint l = strlen(text);
125 gchar *retval = NULL;
127 if (tail) *tail = text;
129 if (l == 0) return retval;
131 while (c < l && text[c] != '"') c++;
140 if (text[e-1] != '\\' && text[e] == '"') break;
147 gchar *substring = g_strndup(ptr, e - c);
151 retval = g_strcompress(substring);
156 if (tail) *tail = text + e + 1;
159 /* for compatibility with older formats (<0.3.7)
160 * read a line without quotes too */
163 while (c < l && text[c] != '\n' && !g_ascii_isspace(text[c])) c++;
166 retval = g_strndup(text, c);
168 if (tail) *tail = text + c;
174 gchar *escquote_value(const gchar *text)
178 if (!text) return g_strdup("\"\"");
180 e = g_strescape(text, "");
183 gchar *retval = g_strdup_printf("\"%s\"", e);
187 return g_strdup("\"\"");
189 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */