--- /dev/null
+#ifndef __LABWC_NODENAME_H
+#define __LABWC_NODENAME_H
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <stdio.h>
+
+/**
+ * nodename - give xml node an ascii name
+ * @node: xml-node
+ * @buf: buffer to receive the name
+ * @len: size of buffer
+ *
+ * For example, the xml structure <a><b><c></c></b></a> would return the
+ * name c.b.a
+ */
+char *nodename(xmlNode *node, char *buf, int len);
+
+#endif /* __LABWC_NODENAME_H */
'font.c',
'grab-file.c',
'log.c',
+ 'nodename.c',
'spawn.c',
'string-helpers.c',
)
--- /dev/null
+#include <ctype.h>
+#include <string.h>
+#include "common/nodename.h"
+
+char *
+nodename(xmlNode *node, char *buf, int len)
+{
+ if (!node || !node->name) {
+ return NULL;
+ }
+
+ /* Ignore superflous 'text.' in node name */
+ if (node->parent && !strcmp((char *)node->name, "text")) {
+ node = node->parent;
+ }
+
+ char *p = buf;
+ p[--len] = 0;
+ for (;;) {
+ const char *name = (char *)node->name;
+ char c;
+ while ((c = *name++) != 0) {
+ *p++ = tolower(c);
+ if (!--len)
+ return buf;
+ }
+ *p = 0;
+ node = node->parent;
+ if (!node || !node->name) {
+ return buf;
+ }
+ *p++ = '.';
+ if (!--len) {
+ return buf;
+ }
+ }
+}
#include "common/dir.h"
#include "common/font.h"
#include "common/log.h"
+#include "common/nodename.h"
#include "common/string-helpers.h"
#include "config/keybind.h"
#include "config/rcxml.h"
}
}
-static char *
-nodename(xmlNode *node, char *buf, int len)
-{
- if (!node || !node->name) {
- return NULL;
- }
-
- /* Ignore superflous 'text.' in node name */
- if (node->parent && !strcmp((char *)node->name, "text")) {
- node = node->parent;
- }
-
- char *p = buf;
- p[--len] = 0;
- for (;;) {
- const char *name = (char *)node->name;
- char c;
- while ((c = *name++) != 0) {
- *p++ = tolower(c);
- if (!--len)
- return buf;
- }
- *p = 0;
- node = node->parent;
- if (!node || !node->name) {
- return buf;
- }
- *p++ = '.';
- if (!--len) {
- return buf;
- }
- }
-}
-
static void
process_node(xmlNode *node)
{